Merge git://git.skbuff.net/gitroot/yoshfuji/linux-2.6-git-rfc3542
authorDavid S. Miller <davem@sunset.davemloft.net>
Thu, 8 Sep 2005 19:59:43 +0000 (12:59 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Thu, 8 Sep 2005 19:59:43 +0000 (12:59 -0700)
1140 files changed:
Documentation/DocBook/mcabook.tmpl
Documentation/IPMI.txt
Documentation/RCU/NMI-RCU.txt [new file with mode: 0644]
Documentation/acpi-hotkey.txt
Documentation/cdrom/sonycd535
Documentation/cpusets.txt
Documentation/dcdbas.txt [new file with mode: 0644]
Documentation/dell_rbu.txt [new file with mode: 0644]
Documentation/dvb/bt8xx.txt
Documentation/exception.txt
Documentation/feature-removal-schedule.txt
Documentation/filesystems/relayfs.txt [new file with mode: 0644]
Documentation/i386/boot.txt
Documentation/ibm-acpi.txt
Documentation/kernel-parameters.txt
Documentation/power/swsusp.txt
Documentation/power/video.txt
Documentation/scsi/aic7xxx.txt
Documentation/scsi/scsi_mid_low_api.txt
Documentation/sonypi.txt
MAINTAINERS
arch/alpha/Kconfig
arch/alpha/kernel/time.c
arch/arm/Kconfig
arch/arm/boot/compressed/head-sharpsl.S
arch/arm/configs/omap_h2_1610_defconfig
arch/arm/kernel/time.c
arch/arm/mach-footbridge/Kconfig
arch/arm/mach-iop3xx/iop321-time.c
arch/arm/mach-iop3xx/iop331-time.c
arch/arm/mach-ixp2000/core.c
arch/arm/mach-ixp4xx/common.c
arch/arm/mach-omap1/irq.c
arch/arm/mach-pxa/Makefile
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/corgi_lcd.c [new file with mode: 0644]
arch/arm/mach-s3c2410/Kconfig
arch/arm/mach-s3c2410/Makefile
arch/arm/mach-s3c2410/bast-irq.c
arch/arm/mach-s3c2410/mach-anubis.c [new file with mode: 0644]
arch/arm/mach-s3c2410/pm-simtec.c
arch/arm/mach-s3c2410/time.c
arch/arm/plat-omap/Kconfig
arch/arm/plat-omap/Makefile
arch/arm/plat-omap/clock.c
arch/arm/plat-omap/common.c
arch/arm/plat-omap/dma.c
arch/arm/plat-omap/dmtimer.c [new file with mode: 0644]
arch/arm/plat-omap/gpio.c
arch/arm/plat-omap/mcbsp.c
arch/arm/plat-omap/mux.c
arch/arm/plat-omap/ocpi.c
arch/arm/plat-omap/pm.c
arch/arm/plat-omap/sleep.S
arch/arm/plat-omap/sram-fn.S [new file with mode: 0644]
arch/arm/plat-omap/sram.c [new file with mode: 0644]
arch/arm/plat-omap/sram.h [new file with mode: 0644]
arch/arm/plat-omap/usb.c
arch/arm26/Kconfig
arch/arm26/Makefile
arch/arm26/kernel/time.c
arch/cris/arch-v10/kernel/time.c
arch/cris/kernel/time.c
arch/frv/kernel/time.c
arch/h8300/kernel/time.c
arch/i386/Kconfig
arch/i386/boot/setup.S
arch/i386/boot/tools/build.c
arch/i386/defconfig
arch/i386/kernel/Makefile
arch/i386/kernel/acpi/Makefile
arch/i386/kernel/acpi/boot.c
arch/i386/kernel/acpi/earlyquirk.c
arch/i386/kernel/acpi/sleep.c
arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
arch/i386/kernel/dmi_scan.c
arch/i386/kernel/entry.S
arch/i386/kernel/io_apic.c
arch/i386/kernel/kprobes.c
arch/i386/kernel/mpparse.c
arch/i386/kernel/nmi.c
arch/i386/kernel/setup.c
arch/i386/kernel/time.c
arch/i386/kernel/timers/timer_hpet.c
arch/i386/kernel/traps.c
arch/i386/kernel/vmlinux.lds.S
arch/i386/mach-default/topology.c
arch/i386/mach-es7000/es7000plat.c
arch/i386/mm/discontig.c
arch/i386/mm/fault.c
arch/i386/mm/init.c
arch/i386/oprofile/init.c
arch/i386/oprofile/nmi_int.c
arch/i386/oprofile/nmi_timer_int.c
arch/i386/pci/Makefile
arch/i386/pci/irq.c
arch/ia64/Kconfig
arch/ia64/configs/bigsur_defconfig
arch/ia64/configs/sn2_defconfig
arch/ia64/configs/tiger_defconfig
arch/ia64/configs/zx1_defconfig
arch/ia64/defconfig
arch/ia64/hp/sim/simserial.c
arch/ia64/ia32/ia32_entry.S
arch/ia64/ia32/sys_ia32.c
arch/ia64/kernel/Makefile
arch/ia64/kernel/acpi-ext.c
arch/ia64/kernel/acpi.c
arch/ia64/kernel/domain.c [deleted file]
arch/ia64/kernel/iosapic.c
arch/ia64/kernel/irq.c
arch/ia64/kernel/jprobes.S
arch/ia64/kernel/kprobes.c
arch/ia64/kernel/setup.c
arch/ia64/kernel/topology.c
arch/ia64/kernel/traps.c
arch/ia64/kernel/vmlinux.lds.S
arch/ia64/lib/flush.S
arch/ia64/mm/fault.c
arch/ia64/sn/kernel/io_init.c
arch/ia64/sn/kernel/irq.c
arch/ia64/sn/kernel/sn2/sn_proc_fs.c
arch/ia64/sn/kernel/tiocx.c
arch/ia64/sn/pci/tioca_provider.c
arch/m32r/kernel/time.c
arch/m68k/Kconfig
arch/m68k/bvme6000/rtc.c
arch/m68k/kernel/time.c
arch/m68k/mvme16x/rtc.c
arch/m68knommu/kernel/time.c
arch/mips/Kconfig
arch/mips/kernel/linux32.c
arch/mips/kernel/sysirix.c
arch/mips/kernel/time.c
arch/mips/sgi-ip27/ip27-timer.c
arch/parisc/Kconfig
arch/parisc/kernel/time.c
arch/ppc/Kconfig
arch/ppc/kernel/head_4xx.S
arch/ppc/kernel/time.c
arch/ppc/syslib/ocp.c
arch/ppc64/Kconfig
arch/ppc64/Makefile
arch/ppc64/kernel/kprobes.c
arch/ppc64/kernel/misc.S
arch/ppc64/kernel/pSeries_reconfig.c
arch/ppc64/kernel/sys_ppc32.c
arch/ppc64/kernel/time.c
arch/ppc64/kernel/traps.c
arch/ppc64/kernel/vmlinux.lds.S
arch/ppc64/mm/fault.c
arch/s390/kernel/time.c
arch/sh/Kconfig
arch/sh/kernel/time.c
arch/sh64/kernel/time.c
arch/sparc/Kconfig
arch/sparc/kernel/pcic.c
arch/sparc/kernel/time.c
arch/sparc64/Kconfig
arch/sparc64/kernel/kprobes.c
arch/sparc64/kernel/sunos_ioctl32.c
arch/sparc64/kernel/sys_sparc32.c
arch/sparc64/kernel/time.c
arch/sparc64/kernel/vmlinux.lds.S
arch/sparc64/mm/fault.c
arch/sparc64/mm/init.c
arch/sparc64/mm/ultra.S
arch/um/Makefile-i386
arch/um/include/common-offsets.h
arch/um/include/um_uaccess.h
arch/um/kernel/mem.c
arch/um/os-Linux/Makefile
arch/um/os-Linux/elf_aux.c
arch/um/sys-i386/kernel-offsets.c
arch/um/sys-x86_64/kernel-offsets.c
arch/v850/kernel/time.c
arch/x86_64/Kconfig
arch/x86_64/boot/setup.S
arch/x86_64/boot/tools/build.c
arch/x86_64/defconfig
arch/x86_64/ia32/ia32entry.S
arch/x86_64/ia32/sys_ia32.c
arch/x86_64/kernel/Makefile
arch/x86_64/kernel/acpi/Makefile
arch/x86_64/kernel/acpi/sleep.c
arch/x86_64/kernel/e820.c
arch/x86_64/kernel/entry.S
arch/x86_64/kernel/genapic.c
arch/x86_64/kernel/genapic_cluster.c
arch/x86_64/kernel/io_apic.c
arch/x86_64/kernel/kprobes.c
arch/x86_64/kernel/mpparse.c
arch/x86_64/kernel/nmi.c
arch/x86_64/kernel/process.c
arch/x86_64/kernel/setup.c
arch/x86_64/kernel/setup64.c
arch/x86_64/kernel/smpboot.c
arch/x86_64/kernel/time.c
arch/x86_64/kernel/traps.c
arch/x86_64/kernel/vmlinux.lds.S
arch/x86_64/mm/fault.c
arch/x86_64/mm/numa.c
arch/x86_64/pci/Makefile
arch/x86_64/pci/Makefile-BUS
arch/xtensa/kernel/time.c
crypto/cipher.c
drivers/Makefile
drivers/acpi/Kconfig
drivers/acpi/Makefile
drivers/acpi/ac.c
drivers/acpi/acpi_memhotplug.c
drivers/acpi/asus_acpi.c
drivers/acpi/battery.c
drivers/acpi/blacklist.c
drivers/acpi/bus.c
drivers/acpi/button.c
drivers/acpi/container.c
drivers/acpi/debug.c
drivers/acpi/dispatcher/dsfield.c
drivers/acpi/dispatcher/dsinit.c
drivers/acpi/dispatcher/dsmethod.c
drivers/acpi/dispatcher/dsmthdat.c
drivers/acpi/dispatcher/dsobject.c
drivers/acpi/dispatcher/dsopcode.c
drivers/acpi/dispatcher/dsutils.c
drivers/acpi/dispatcher/dswexec.c
drivers/acpi/dispatcher/dswload.c
drivers/acpi/dispatcher/dswscope.c
drivers/acpi/dispatcher/dswstate.c
drivers/acpi/ec.c
drivers/acpi/event.c
drivers/acpi/events/evevent.c
drivers/acpi/events/evgpe.c
drivers/acpi/events/evgpeblk.c
drivers/acpi/events/evmisc.c
drivers/acpi/events/evregion.c
drivers/acpi/events/evrgnini.c
drivers/acpi/events/evsci.c
drivers/acpi/events/evxface.c
drivers/acpi/events/evxfevnt.c
drivers/acpi/events/evxfregn.c
drivers/acpi/executer/exconfig.c
drivers/acpi/executer/exconvrt.c
drivers/acpi/executer/excreate.c
drivers/acpi/executer/exdump.c
drivers/acpi/executer/exfield.c
drivers/acpi/executer/exfldio.c
drivers/acpi/executer/exmisc.c
drivers/acpi/executer/exmutex.c
drivers/acpi/executer/exnames.c
drivers/acpi/executer/exoparg1.c
drivers/acpi/executer/exoparg2.c
drivers/acpi/executer/exoparg3.c
drivers/acpi/executer/exoparg6.c
drivers/acpi/executer/exprep.c
drivers/acpi/executer/exregion.c
drivers/acpi/executer/exresnte.c
drivers/acpi/executer/exresolv.c
drivers/acpi/executer/exresop.c
drivers/acpi/executer/exstore.c
drivers/acpi/executer/exstoren.c
drivers/acpi/executer/exstorob.c
drivers/acpi/executer/exsystem.c
drivers/acpi/executer/exutils.c
drivers/acpi/fan.c
drivers/acpi/glue.c
drivers/acpi/hardware/hwacpi.c
drivers/acpi/hardware/hwgpe.c
drivers/acpi/hardware/hwregs.c
drivers/acpi/hardware/hwsleep.c
drivers/acpi/hardware/hwtimer.c
drivers/acpi/hotkey.c
drivers/acpi/ibm_acpi.c
drivers/acpi/motherboard.c
drivers/acpi/namespace/nsaccess.c
drivers/acpi/namespace/nsalloc.c
drivers/acpi/namespace/nsdump.c
drivers/acpi/namespace/nsdumpdv.c
drivers/acpi/namespace/nseval.c
drivers/acpi/namespace/nsinit.c
drivers/acpi/namespace/nsload.c
drivers/acpi/namespace/nsnames.c
drivers/acpi/namespace/nsobject.c
drivers/acpi/namespace/nsparse.c
drivers/acpi/namespace/nssearch.c
drivers/acpi/namespace/nsutils.c
drivers/acpi/namespace/nswalk.c
drivers/acpi/namespace/nsxfeval.c
drivers/acpi/namespace/nsxfname.c
drivers/acpi/namespace/nsxfobj.c
drivers/acpi/numa.c
drivers/acpi/osl.c
drivers/acpi/parser/Makefile
drivers/acpi/parser/psargs.c
drivers/acpi/parser/psloop.c [new file with mode: 0644]
drivers/acpi/parser/psopcode.c
drivers/acpi/parser/psparse.c
drivers/acpi/parser/psscope.c
drivers/acpi/parser/pstree.c
drivers/acpi/parser/psutils.c
drivers/acpi/parser/pswalk.c
drivers/acpi/parser/psxface.c
drivers/acpi/pci_bind.c
drivers/acpi/pci_irq.c
drivers/acpi/pci_link.c
drivers/acpi/pci_root.c
drivers/acpi/power.c
drivers/acpi/processor_core.c
drivers/acpi/processor_idle.c
drivers/acpi/processor_perflib.c
drivers/acpi/processor_thermal.c
drivers/acpi/processor_throttling.c
drivers/acpi/resources/rsaddr.c
drivers/acpi/resources/rscalc.c
drivers/acpi/resources/rscreate.c
drivers/acpi/resources/rsdump.c
drivers/acpi/resources/rsio.c
drivers/acpi/resources/rsirq.c
drivers/acpi/resources/rslist.c
drivers/acpi/resources/rsmemory.c
drivers/acpi/resources/rsmisc.c
drivers/acpi/resources/rsutils.c
drivers/acpi/resources/rsxface.c
drivers/acpi/scan.c
drivers/acpi/sleep/poweroff.c
drivers/acpi/sleep/proc.c
drivers/acpi/sleep/wakeup.c
drivers/acpi/system.c
drivers/acpi/tables.c
drivers/acpi/tables/tbconvrt.c
drivers/acpi/tables/tbget.c
drivers/acpi/tables/tbgetall.c
drivers/acpi/tables/tbinstal.c
drivers/acpi/tables/tbrsdt.c
drivers/acpi/tables/tbutils.c
drivers/acpi/tables/tbxface.c
drivers/acpi/tables/tbxfroot.c
drivers/acpi/thermal.c
drivers/acpi/toshiba_acpi.c
drivers/acpi/utilities/Makefile
drivers/acpi/utilities/utalloc.c
drivers/acpi/utilities/utcache.c [new file with mode: 0644]
drivers/acpi/utilities/utcopy.c
drivers/acpi/utilities/utdebug.c
drivers/acpi/utilities/utdelete.c
drivers/acpi/utilities/uteval.c
drivers/acpi/utilities/utglobal.c
drivers/acpi/utilities/utinit.c
drivers/acpi/utilities/utmath.c
drivers/acpi/utilities/utmisc.c
drivers/acpi/utilities/utmutex.c [new file with mode: 0644]
drivers/acpi/utilities/utobject.c
drivers/acpi/utilities/utstate.c [new file with mode: 0644]
drivers/acpi/utilities/utxface.c
drivers/acpi/utils.c
drivers/acpi/video.c
drivers/base/attribute_container.c
drivers/base/bus.c
drivers/base/core.c
drivers/base/driver.c
drivers/base/firmware_class.c
drivers/base/transport_class.c
drivers/block/Kconfig
drivers/block/aoe/aoedev.c
drivers/block/cfq-iosched.c
drivers/block/deadline-iosched.c
drivers/block/genhd.c
drivers/block/ll_rw_blk.c
drivers/block/scsi_ioctl.c
drivers/cdrom/cdrom.c
drivers/char/Kconfig
drivers/char/digi1.h
drivers/char/digiFep1.h
drivers/char/drm/drm_bufs.c
drivers/char/drm/drm_context.c
drivers/char/drm/drm_sysfs.c
drivers/char/drm/mga_dma.c
drivers/char/epca.c
drivers/char/epca.h
drivers/char/hpet.c
drivers/char/ipmi/ipmi_bt_sm.c
drivers/char/ipmi/ipmi_devintf.c
drivers/char/ipmi/ipmi_kcs_sm.c
drivers/char/ipmi/ipmi_msghandler.c
drivers/char/ipmi/ipmi_poweroff.c
drivers/char/ipmi/ipmi_si_intf.c
drivers/char/ipmi/ipmi_smic_sm.c
drivers/char/ipmi/ipmi_watchdog.c
drivers/char/mbcs.c
drivers/char/mem.c
drivers/char/misc.c
drivers/char/sonypi.c
drivers/char/tpm/Kconfig
drivers/char/tpm/tpm_atmel.c
drivers/char/tty_io.c
drivers/char/vt.c
drivers/firmware/Kconfig
drivers/firmware/Makefile
drivers/firmware/dcdbas.c [new file with mode: 0644]
drivers/firmware/dcdbas.h [new file with mode: 0644]
drivers/firmware/dell_rbu.c [new file with mode: 0644]
drivers/i2c/chips/isp1301_omap.c
drivers/ide/ide-disk.c
drivers/ieee1394/nodemgr.c
drivers/infiniband/core/sysfs.c
drivers/input/evdev.c
drivers/input/gameport/emu10k1-gp.c
drivers/input/gameport/fm801-gp.c
drivers/input/gameport/ns558.c
drivers/input/input.c
drivers/input/joystick/a3d.c
drivers/input/joystick/adi.c
drivers/input/joystick/analog.c
drivers/input/joystick/cobra.c
drivers/input/joystick/db9.c
drivers/input/joystick/gamecon.c
drivers/input/joystick/gf2k.c
drivers/input/joystick/grip.c
drivers/input/joystick/grip_mp.c
drivers/input/joystick/guillemot.c
drivers/input/joystick/interact.c
drivers/input/joystick/sidewinder.c
drivers/input/joystick/tmdc.c
drivers/input/joystick/turbografx.c
drivers/input/keyboard/corgikbd.c
drivers/input/mouse/psmouse-base.c
drivers/input/serio/serport.c
drivers/input/touchscreen/corgi_ts.c
drivers/isdn/hisax/hisax.h
drivers/isdn/i4l/isdn_v110.c
drivers/md/dm-io.c
drivers/md/dm.c
drivers/media/dvb/bt8xx/Kconfig
drivers/media/dvb/frontends/lgdt330x.c
drivers/media/video/Makefile
drivers/media/video/adv7170.c
drivers/media/video/adv7175.c
drivers/media/video/bt819.c
drivers/media/video/bt856.c
drivers/media/video/indycam.c [new file with mode: 0644]
drivers/media/video/indycam.h [new file with mode: 0644]
drivers/media/video/meye.c
drivers/media/video/saa7111.c
drivers/media/video/saa7114.c
drivers/media/video/saa7185.c
drivers/media/video/saa7191.c [new file with mode: 0644]
drivers/media/video/saa7191.h [new file with mode: 0644]
drivers/media/video/vino.c
drivers/media/video/vino.h
drivers/message/fusion/lsi/mpi.h
drivers/message/fusion/lsi/mpi_cnfg.h
drivers/message/fusion/lsi/mpi_history.txt
drivers/message/fusion/lsi/mpi_init.h
drivers/message/fusion/lsi/mpi_ioc.h
drivers/message/fusion/lsi/mpi_targ.h
drivers/message/fusion/mptbase.c
drivers/message/fusion/mptbase.h
drivers/message/fusion/mptctl.c
drivers/message/fusion/mptscsih.c
drivers/message/fusion/mptspi.c
drivers/misc/Kconfig
drivers/misc/ibmasm/uart.c
drivers/mmc/mmc.c
drivers/mmc/mmc_block.c
drivers/mmc/mmc_sysfs.c
drivers/mmc/pxamci.c
drivers/mmc/wbsd.c
drivers/mmc/wbsd.h
drivers/mtd/nand/nand_base.c
drivers/net/3c59x.c
drivers/net/Kconfig
drivers/net/Makefile
drivers/net/ac3200.c
drivers/net/arcnet/arcnet.c
drivers/net/atarilance.c
drivers/net/dm9000.c
drivers/net/forcedeth.c
drivers/net/hamachi.c
drivers/net/irda/smsc-ircc2.c
drivers/net/irda/smsc-ircc2.h
drivers/net/iseries_veth.c
drivers/net/s2io-regs.h
drivers/net/s2io.c
drivers/net/s2io.h
drivers/net/smc91x.h
drivers/net/spider_net.c [new file with mode: 0644]
drivers/net/spider_net.h [new file with mode: 0644]
drivers/net/spider_net_ethtool.c [new file with mode: 0644]
drivers/net/sun3lance.c
drivers/net/wan/syncppp.c
drivers/net/wireless/airo.c
drivers/net/wireless/atmel.c
drivers/net/wireless/ipw2200.c
drivers/net/wireless/ipw2200.h
drivers/net/wireless/netwave_cs.c
drivers/net/wireless/prism54/isl_ioctl.c
drivers/net/wireless/prism54/islpci_dev.c
drivers/net/wireless/ray_cs.c
drivers/net/wireless/ray_cs.h
drivers/net/wireless/wl3501.h
drivers/net/wireless/wl3501_cs.c
drivers/parport/parport_pc.c
drivers/pci/hotplug/Kconfig
drivers/pci/hotplug/Makefile
drivers/pci/msi.c
drivers/pci/msi.h
drivers/pcmcia/topic.h
drivers/pcmcia/yenta_socket.c
drivers/pcmcia/yenta_socket.h
drivers/pnp/Kconfig
drivers/pnp/card.c
drivers/pnp/driver.c
drivers/pnp/isapnp/core.c
drivers/pnp/manager.c
drivers/pnp/pnpacpi/Kconfig
drivers/pnp/pnpacpi/core.c
drivers/pnp/pnpacpi/pnpacpi.h
drivers/pnp/pnpacpi/rsparser.c
drivers/pnp/pnpbios/core.c
drivers/pnp/pnpbios/pnpbios.h
drivers/pnp/pnpbios/proc.c
drivers/pnp/pnpbios/rsparser.c
drivers/pnp/quirks.c
drivers/pnp/support.c
drivers/s390/net/claw.c
drivers/scsi/3w-xxxx.c
drivers/scsi/Kconfig
drivers/scsi/Makefile
drivers/scsi/NCR5380.c
drivers/scsi/NCR53c406a.c
drivers/scsi/aacraid/aachba.c
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/commctrl.c
drivers/scsi/aacraid/comminit.c
drivers/scsi/aacraid/commsup.c
drivers/scsi/aacraid/linit.c
drivers/scsi/aacraid/rkt.c
drivers/scsi/aacraid/rx.c
drivers/scsi/aacraid/sa.c
drivers/scsi/advansys.c
drivers/scsi/ahci.c
drivers/scsi/aic7xxx/Kconfig.aic79xx
drivers/scsi/aic7xxx/aic7770.c
drivers/scsi/aic7xxx/aic79xx.h
drivers/scsi/aic7xxx/aic79xx_core.c
drivers/scsi/aic7xxx/aic79xx_osm.c
drivers/scsi/aic7xxx/aic79xx_osm.h
drivers/scsi/aic7xxx/aic79xx_osm_pci.c
drivers/scsi/aic7xxx/aic79xx_pci.c
drivers/scsi/aic7xxx/aic79xx_proc.c
drivers/scsi/aic7xxx/aic7xxx.h
drivers/scsi/aic7xxx/aic7xxx.reg
drivers/scsi/aic7xxx/aic7xxx.seq
drivers/scsi/aic7xxx/aic7xxx_93cx6.c
drivers/scsi/aic7xxx/aic7xxx_core.c
drivers/scsi/aic7xxx/aic7xxx_osm.c
drivers/scsi/aic7xxx/aic7xxx_osm.h
drivers/scsi/aic7xxx/aic7xxx_osm_pci.c
drivers/scsi/aic7xxx/aic7xxx_proc.c
drivers/scsi/aic7xxx/aic7xxx_reg.h_shipped
drivers/scsi/aic7xxx/aic7xxx_reg_print.c_shipped
drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped
drivers/scsi/aic7xxx/aiclib.c
drivers/scsi/aic7xxx/aiclib.h
drivers/scsi/ata_piix.c
drivers/scsi/ch.c
drivers/scsi/constants.c
drivers/scsi/hosts.c
drivers/scsi/ibmvscsi/ibmvscsi.c
drivers/scsi/ibmvscsi/ibmvscsi.h
drivers/scsi/libata-core.c
drivers/scsi/lpfc/lpfc.h
drivers/scsi/lpfc/lpfc_attr.c
drivers/scsi/lpfc/lpfc_ct.c
drivers/scsi/lpfc/lpfc_els.c
drivers/scsi/lpfc/lpfc_hbadisc.c
drivers/scsi/lpfc/lpfc_init.c
drivers/scsi/lpfc/lpfc_mbox.c
drivers/scsi/lpfc/lpfc_mem.c
drivers/scsi/lpfc/lpfc_nportdisc.c
drivers/scsi/lpfc/lpfc_scsi.c
drivers/scsi/lpfc/lpfc_scsi.h
drivers/scsi/lpfc/lpfc_sli.c
drivers/scsi/lpfc/lpfc_version.h
drivers/scsi/qla1280.c
drivers/scsi/qla1280.h
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_dbg.h
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_gs.c
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_iocb.c
drivers/scsi/qla2xxx/qla_isr.c
drivers/scsi/qla2xxx/qla_mbx.c
drivers/scsi/qla2xxx/qla_os.c
drivers/scsi/qla2xxx/qla_sup.c
drivers/scsi/qla2xxx/qla_version.h
drivers/scsi/raid_class.c [new file with mode: 0644]
drivers/scsi/sata_mv.c [new file with mode: 0644]
drivers/scsi/sata_qstor.c
drivers/scsi/sata_sis.c
drivers/scsi/sata_uli.c
drivers/scsi/scsi.c
drivers/scsi/scsi_devinfo.c
drivers/scsi/scsi_error.c
drivers/scsi/scsi_ioctl.c
drivers/scsi/scsi_lib.c
drivers/scsi/scsi_priv.h
drivers/scsi/scsi_scan.c
drivers/scsi/scsi_sysfs.c
drivers/scsi/scsi_transport_fc.c
drivers/scsi/scsi_transport_spi.c
drivers/scsi/sd.c
drivers/scsi/sg.c
drivers/scsi/sr.c
drivers/scsi/sr.h
drivers/scsi/sr_ioctl.c
drivers/scsi/st.c
drivers/scsi/st.h
drivers/serial/68328serial.c
drivers/serial/68360serial.c
drivers/serial/8250_acpi.c
drivers/serial/Kconfig
drivers/serial/crisv10.c
drivers/serial/icom.c
drivers/serial/mcfserial.c
drivers/serial/serial_lh7a40x.c
drivers/usb/atm/usbatm.c
drivers/usb/core/hcd.c
drivers/usb/host/ehci-sched.c
drivers/usb/host/isp116x-hcd.c
drivers/usb/host/sl811-hcd.c
drivers/usb/input/acecad.c
drivers/usb/input/itmtouch.c
drivers/usb/input/pid.c
drivers/video/backlight/Makefile
drivers/video/backlight/locomolcd.c [new file with mode: 0644]
drivers/video/q40fb.c
drivers/video/w100fb.c
drivers/video/w100fb.h
fs/Kconfig
fs/Makefile
fs/bio.c
fs/buffer.c
fs/cifs/connect.c
fs/cifs/dir.c
fs/compat.c
fs/cramfs/inode.c
fs/ext2/super.c
fs/ext3/super.c
fs/fat/dir.c
fs/file_table.c
fs/freevxfs/vxfs_super.c
fs/hfs/bnode.c
fs/hfs/catalog.c
fs/hfs/dir.c
fs/hfs/hfs.h
fs/hfs/hfs_fs.h
fs/hfs/inode.c
fs/hfs/mdb.c
fs/hfs/super.c
fs/hfs/trans.c
fs/hfsplus/bnode.c
fs/hfsplus/hfsplus_fs.h
fs/hfsplus/options.c
fs/hfsplus/super.c
fs/hostfs/hostfs.h
fs/inode.c
fs/inotify.c
fs/jbd/checkpoint.c
fs/jbd/commit.c
fs/jbd/journal.c
fs/jbd/revoke.c
fs/jbd/transaction.c
fs/jffs/inode-v23.c
fs/jffs2/file.c
fs/jfs/jfs_filsys.h
fs/jfs/super.c
fs/namei.c
fs/namespace.c
fs/nfsd/export.c
fs/nfsd/nfs4idmap.c
fs/open.c
fs/pipe.c
fs/proc/base.c
fs/proc/generic.c
fs/read_write.c
fs/reiserfs/journal.c
fs/relayfs/Makefile [new file with mode: 0644]
fs/relayfs/buffers.c [new file with mode: 0644]
fs/relayfs/buffers.h [new file with mode: 0644]
fs/relayfs/inode.c [new file with mode: 0644]
fs/relayfs/relay.c [new file with mode: 0644]
fs/relayfs/relay.h [new file with mode: 0644]
fs/ufs/balloc.c
fs/ufs/ialloc.c
fs/ufs/truncate.c
fs/umsdos/notes [deleted file]
fs/xattr.c
fs/xfs/Kconfig
fs/xfs/Makefile
fs/xfs/Makefile-linux-2.6 [new file with mode: 0644]
fs/xfs/linux-2.6/kmem.c
fs/xfs/linux-2.6/kmem.h
fs/xfs/linux-2.6/spin.h
fs/xfs/linux-2.6/xfs_aops.c
fs/xfs/linux-2.6/xfs_aops.h [new file with mode: 0644]
fs/xfs/linux-2.6/xfs_buf.c
fs/xfs/linux-2.6/xfs_buf.h
fs/xfs/linux-2.6/xfs_file.c
fs/xfs/linux-2.6/xfs_ioctl.c
fs/xfs/linux-2.6/xfs_ioctl32.c
fs/xfs/linux-2.6/xfs_iops.c
fs/xfs/linux-2.6/xfs_linux.h
fs/xfs/linux-2.6/xfs_lrw.c
fs/xfs/linux-2.6/xfs_lrw.h
fs/xfs/linux-2.6/xfs_super.c
fs/xfs/linux-2.6/xfs_vfs.c
fs/xfs/linux-2.6/xfs_vfs.h
fs/xfs/linux-2.6/xfs_vnode.c
fs/xfs/linux-2.6/xfs_vnode.h
fs/xfs/quota/Makefile [new file with mode: 0644]
fs/xfs/quota/Makefile-linux-2.6 [new file with mode: 0644]
fs/xfs/quota/xfs_dquot.c
fs/xfs/quota/xfs_dquot.h
fs/xfs/quota/xfs_dquot_item.c
fs/xfs/quota/xfs_qm.c
fs/xfs/quota/xfs_qm.h
fs/xfs/quota/xfs_qm_bhv.c
fs/xfs/quota/xfs_qm_syscalls.c
fs/xfs/support/debug.c
fs/xfs/xfs_acl.c
fs/xfs/xfs_arch.h
fs/xfs/xfs_bmap.c
fs/xfs/xfs_bmap_btree.c
fs/xfs/xfs_bmap_btree.h
fs/xfs/xfs_buf_item.c
fs/xfs/xfs_dir_leaf.h
fs/xfs/xfs_dmapi.h
fs/xfs/xfs_extfree_item.c
fs/xfs/xfs_iget.c
fs/xfs/xfs_inode.c
fs/xfs/xfs_inode_item.c
fs/xfs/xfs_iomap.c
fs/xfs/xfs_log.c
fs/xfs/xfs_log.h
fs/xfs/xfs_log_priv.h
fs/xfs/xfs_log_recover.c
fs/xfs/xfs_qmops.c
fs/xfs/xfs_quota.h
fs/xfs/xfs_trans.c
fs/xfs/xfs_trans.h
fs/xfs/xfs_trans_ail.c
fs/xfs/xfs_trans_buf.c
fs/xfs/xfs_vfsops.c
fs/xfs/xfs_vnodeops.c
include/acpi/acconfig.h
include/acpi/acdebug.h
include/acpi/acdisasm.h
include/acpi/acdispat.h
include/acpi/acevents.h
include/acpi/acexcep.h
include/acpi/acglobal.h
include/acpi/achware.h
include/acpi/acinterp.h
include/acpi/aclocal.h
include/acpi/acmacros.h
include/acpi/acnames.h
include/acpi/acnamesp.h
include/acpi/acobject.h
include/acpi/acopcode.h
include/acpi/acoutput.h
include/acpi/acparser.h
include/acpi/acpi.h
include/acpi/acpi_bus.h
include/acpi/acpi_drivers.h
include/acpi/acpiosxf.h
include/acpi/acpixf.h
include/acpi/acresrc.h
include/acpi/acstruct.h
include/acpi/actables.h
include/acpi/actbl.h
include/acpi/actbl1.h
include/acpi/actbl2.h
include/acpi/actbl71.h
include/acpi/actypes.h
include/acpi/acutils.h
include/acpi/amlcode.h
include/acpi/amlresrc.h
include/acpi/container.h
include/acpi/pdc_intel.h
include/acpi/platform/acenv.h
include/acpi/platform/acgcc.h
include/acpi/platform/aclinux.h
include/acpi/processor.h
include/asm-alpha/auxvec.h [new file with mode: 0644]
include/asm-alpha/elf.h
include/asm-alpha/fcntl.h
include/asm-alpha/futex.h [new file with mode: 0644]
include/asm-alpha/hdreg.h [deleted file]
include/asm-alpha/uaccess.h
include/asm-arm/arch-omap/board-h4.h
include/asm-arm/arch-omap/board-innovator.h
include/asm-arm/arch-omap/board-perseus2.h
include/asm-arm/arch-omap/board-voiceblue.h
include/asm-arm/arch-omap/board.h
include/asm-arm/arch-omap/cpu.h
include/asm-arm/arch-omap/debug-macro.S
include/asm-arm/arch-omap/dma.h
include/asm-arm/arch-omap/dmtimer.h [new file with mode: 0644]
include/asm-arm/arch-omap/dsp.h [new file with mode: 0644]
include/asm-arm/arch-omap/dsp_common.h [new file with mode: 0644]
include/asm-arm/arch-omap/entry-macro.S
include/asm-arm/arch-omap/gpio.h
include/asm-arm/arch-omap/hardware.h
include/asm-arm/arch-omap/io.h
include/asm-arm/arch-omap/irqs.h
include/asm-arm/arch-omap/memory.h
include/asm-arm/arch-omap/mtd-xip.h [new file with mode: 0644]
include/asm-arm/arch-omap/mux.h
include/asm-arm/arch-omap/omap1510.h
include/asm-arm/arch-omap/omap16xx.h
include/asm-arm/arch-omap/omap24xx.h [new file with mode: 0644]
include/asm-arm/arch-omap/omap730.h
include/asm-arm/arch-omap/pm.h
include/asm-arm/arch-omap/serial.h [new file with mode: 0644]
include/asm-arm/arch-omap/uncompress.h
include/asm-arm/arch-pxa/corgi.h
include/asm-arm/arch-pxa/mmc.h
include/asm-arm/arch-s3c2410/anubis-cpld.h [new file with mode: 0644]
include/asm-arm/arch-s3c2410/anubis-irq.h [new file with mode: 0644]
include/asm-arm/arch-s3c2410/anubis-map.h [new file with mode: 0644]
include/asm-arm/auxvec.h [new file with mode: 0644]
include/asm-arm/fcntl.h
include/asm-arm/futex.h [new file with mode: 0644]
include/asm-arm/hdreg.h [deleted file]
include/asm-arm/uaccess.h
include/asm-arm26/auxvec.h [new file with mode: 0644]
include/asm-arm26/fcntl.h
include/asm-arm26/futex.h [new file with mode: 0644]
include/asm-arm26/hdreg.h [deleted file]
include/asm-arm26/uaccess.h
include/asm-cris/auxvec.h [new file with mode: 0644]
include/asm-cris/fcntl.h
include/asm-cris/futex.h [new file with mode: 0644]
include/asm-cris/irq.h
include/asm-cris/uaccess.h
include/asm-frv/auxvec.h [new file with mode: 0644]
include/asm-frv/fcntl.h
include/asm-frv/futex.h [new file with mode: 0644]
include/asm-frv/uaccess.h
include/asm-generic/fcntl.h [new file with mode: 0644]
include/asm-generic/hdreg.h [deleted file]
include/asm-generic/sections.h
include/asm-generic/unaligned.h
include/asm-generic/vmlinux.lds.h
include/asm-h8300/auxvec.h [new file with mode: 0644]
include/asm-h8300/fcntl.h
include/asm-h8300/futex.h [new file with mode: 0644]
include/asm-h8300/hdreg.h [deleted file]
include/asm-h8300/uaccess.h
include/asm-i386/acpi.h
include/asm-i386/auxvec.h [new file with mode: 0644]
include/asm-i386/elf.h
include/asm-i386/fcntl.h
include/asm-i386/fixmap.h
include/asm-i386/futex.h [new file with mode: 0644]
include/asm-i386/hdreg.h [deleted file]
include/asm-i386/io_apic.h
include/asm-i386/mpspec.h
include/asm-i386/uaccess.h
include/asm-ia64/acpi-ext.h
include/asm-ia64/auxvec.h [new file with mode: 0644]
include/asm-ia64/compat.h
include/asm-ia64/elf.h
include/asm-ia64/fcntl.h
include/asm-ia64/futex.h [new file with mode: 0644]
include/asm-ia64/hdreg.h [deleted file]
include/asm-ia64/hw_irq.h
include/asm-ia64/irq.h
include/asm-ia64/kprobes.h
include/asm-ia64/processor.h
include/asm-ia64/topology.h
include/asm-ia64/uaccess.h
include/asm-m32r/auxvec.h [new file with mode: 0644]
include/asm-m32r/fcntl.h
include/asm-m32r/futex.h [new file with mode: 0644]
include/asm-m32r/hdreg.h [deleted file]
include/asm-m32r/uaccess.h
include/asm-m68k/auxvec.h [new file with mode: 0644]
include/asm-m68k/fcntl.h
include/asm-m68k/futex.h [new file with mode: 0644]
include/asm-m68k/hdreg.h [deleted file]
include/asm-m68k/uaccess.h
include/asm-m68knommu/auxvec.h [new file with mode: 0644]
include/asm-m68knommu/futex.h [new file with mode: 0644]
include/asm-m68knommu/hdreg.h [deleted file]
include/asm-m68knommu/uaccess.h
include/asm-mips/auxvec.h [new file with mode: 0644]
include/asm-mips/compat.h
include/asm-mips/fcntl.h
include/asm-mips/futex.h [new file with mode: 0644]
include/asm-mips/hdreg.h [deleted file]
include/asm-mips/uaccess.h
include/asm-parisc/auxvec.h [new file with mode: 0644]
include/asm-parisc/compat.h
include/asm-parisc/fcntl.h
include/asm-parisc/futex.h [new file with mode: 0644]
include/asm-parisc/hdreg.h [deleted file]
include/asm-parisc/irq.h
include/asm-parisc/uaccess.h
include/asm-powerpc/fcntl.h [new file with mode: 0644]
include/asm-ppc/auxvec.h [new file with mode: 0644]
include/asm-ppc/elf.h
include/asm-ppc/fcntl.h [deleted file]
include/asm-ppc/futex.h [new file with mode: 0644]
include/asm-ppc/ibm_ocp.h
include/asm-ppc/irq.h
include/asm-ppc/uaccess.h
include/asm-ppc64/auxvec.h [new file with mode: 0644]
include/asm-ppc64/compat.h
include/asm-ppc64/elf.h
include/asm-ppc64/fcntl.h [deleted file]
include/asm-ppc64/futex.h [new file with mode: 0644]
include/asm-ppc64/irq.h
include/asm-ppc64/kprobes.h
include/asm-ppc64/memory.h
include/asm-ppc64/processor.h
include/asm-ppc64/uaccess.h
include/asm-s390/auxvec.h [new file with mode: 0644]
include/asm-s390/compat.h
include/asm-s390/fcntl.h
include/asm-s390/futex.h [new file with mode: 0644]
include/asm-s390/uaccess.h
include/asm-sh/auxvec.h [new file with mode: 0644]
include/asm-sh/fcntl.h
include/asm-sh/futex.h [new file with mode: 0644]
include/asm-sh/hdreg.h [deleted file]
include/asm-sh/uaccess.h
include/asm-sh64/auxvec.h [new file with mode: 0644]
include/asm-sh64/fcntl.h
include/asm-sh64/futex.h [new file with mode: 0644]
include/asm-sh64/hdreg.h [deleted file]
include/asm-sh64/uaccess.h
include/asm-sparc/auxvec.h [new file with mode: 0644]
include/asm-sparc/fcntl.h
include/asm-sparc/futex.h [new file with mode: 0644]
include/asm-sparc/hdreg.h [deleted file]
include/asm-sparc/uaccess.h
include/asm-sparc64/auxvec.h [new file with mode: 0644]
include/asm-sparc64/compat.h
include/asm-sparc64/fcntl.h
include/asm-sparc64/futex.h [new file with mode: 0644]
include/asm-sparc64/hdreg.h [deleted file]
include/asm-sparc64/uaccess.h
include/asm-um/auxvec.h [new file with mode: 0644]
include/asm-um/futex.h [new file with mode: 0644]
include/asm-um/hdreg.h [deleted file]
include/asm-v850/auxvec.h [new file with mode: 0644]
include/asm-v850/fcntl.h
include/asm-v850/futex.h [new file with mode: 0644]
include/asm-v850/uaccess.h
include/asm-x86_64/acpi.h
include/asm-x86_64/auxvec.h [new file with mode: 0644]
include/asm-x86_64/compat.h
include/asm-x86_64/fcntl.h
include/asm-x86_64/futex.h [new file with mode: 0644]
include/asm-x86_64/hdreg.h [deleted file]
include/asm-x86_64/io_apic.h
include/asm-x86_64/mpspec.h
include/asm-x86_64/processor.h
include/asm-x86_64/uaccess.h
include/asm-xtensa/auxvec.h [new file with mode: 0644]
include/asm-xtensa/fcntl.h
include/asm-xtensa/hdreg.h [deleted file]
include/linux/acpi.h
include/linux/attribute_container.h
include/linux/auxvec.h [new file with mode: 0644]
include/linux/bio.h
include/linux/blkdev.h
include/linux/compat.h
include/linux/cpuset.h
include/linux/dcache.h
include/linux/dmi.h
include/linux/elf.h
include/linux/ext2_fs.h
include/linux/ext3_fs.h
include/linux/firmware.h
include/linux/fs.h
include/linux/futex.h
include/linux/gfp.h
include/linux/inotify.h
include/linux/input.h
include/linux/ioctl32.h
include/linux/ipmi.h
include/linux/irq.h
include/linux/isdn.h
include/linux/jbd.h
include/linux/klist.h
include/linux/kprobes.h
include/linux/linkage.h
include/linux/mmc/card.h
include/linux/mmc/host.h
include/linux/mmc/mmc.h
include/linux/mmc/protocol.h
include/linux/msg.h
include/linux/netfilter_ipv4/ip_conntrack.h
include/linux/netfilter_ipv4/ip_conntrack_core.h
include/linux/netfilter_ipv4/ip_nat_rule.h
include/linux/pci_ids.h
include/linux/pipe_fs_i.h
include/linux/pnp.h
include/linux/ptrace.h
include/linux/raid_class.h [new file with mode: 0644]
include/linux/relayfs_fs.h [new file with mode: 0644]
include/linux/sched.h
include/linux/sem.h
include/linux/serial_core.h
include/linux/skbuff.h
include/linux/slab.h
include/linux/sonypi.h
include/linux/sunrpc/cache.h
include/linux/sysctl.h
include/linux/time.h
include/linux/timex.h
include/linux/topology.h
include/linux/transport_class.h
include/linux/wireless.h
include/net/ax25.h
include/net/compat.h
include/net/iw_handler.h
include/scsi/scsi_cmnd.h
include/scsi/scsi_dbg.h
include/scsi/scsi_device.h
include/scsi/scsi_eh.h
include/scsi/scsi_host.h
include/scsi/scsi_request.h
include/scsi/scsi_transport_spi.h
include/sound/core.h
include/sound/pcm.h
include/video/w100fb.h
init/main.c
ipc/compat.c
ipc/msg.c
ipc/sem.c
ipc/shm.c
ipc/util.c
ipc/util.h
kernel/Makefile
kernel/acct.c
kernel/cpuset.c
kernel/futex.c
kernel/intermodule.c
kernel/irq/handle.c
kernel/irq/manage.c
kernel/irq/proc.c
kernel/kprobes.c
kernel/module.c
kernel/params.c
kernel/posix-timers.c
kernel/power/Kconfig
kernel/power/pm.c
kernel/power/swsusp.c
kernel/printk.c
kernel/ptrace.c
kernel/resource.c
kernel/sched.c
kernel/signal.c
kernel/softlockup.c [new file with mode: 0644]
kernel/sys.c
kernel/timer.c
kernel/workqueue.c
lib/Kconfig.debug
lib/klist.c
lib/radix-tree.c
mm/mmap.c
mm/oom_kill.c
mm/page_alloc.c
mm/readahead.c
mm/shmem.c
mm/slab.c
mm/vmscan.c
net/ax25/af_ax25.c
net/ax25/ax25_addr.c
net/ax25/ax25_route.c
net/ax25/ax25_uid.c
net/compat.c
net/core/sock.c
net/core/wireless.c
net/ieee80211/ieee80211_crypt.c
net/ieee80211/ieee80211_crypt_ccmp.c
net/ieee80211/ieee80211_crypt_tkip.c
net/ieee80211/ieee80211_crypt_wep.c
net/ieee80211/ieee80211_module.c
net/ieee80211/ieee80211_rx.c
net/ieee80211/ieee80211_tx.c
net/ieee80211/ieee80211_wx.c
net/ipv4/ip_fragment.c
net/ipv4/netfilter/Kconfig
net/ipv4/netfilter/Makefile
net/ipv4/netfilter/ip_conntrack_amanda.c
net/ipv4/netfilter/ip_conntrack_core.c
net/ipv4/netfilter/ip_conntrack_ftp.c
net/ipv4/netfilter/ip_conntrack_irc.c
net/ipv4/netfilter/ip_conntrack_netbios_ns.c [new file with mode: 0644]
net/ipv4/netfilter/ip_conntrack_netlink.c
net/ipv4/netfilter/ip_conntrack_proto_tcp.c
net/ipv4/netfilter/ip_conntrack_standalone.c
net/ipv4/netfilter/ip_conntrack_tftp.c
net/ipv4/netfilter/ip_nat_rule.c
net/ipv4/netfilter/ip_nat_standalone.c
net/ipv4/udp.c
net/ipv6/exthdrs.c
net/ipv6/reassembly.c
net/ipv6/udp.c
net/netfilter/nfnetlink_queue.c
net/netlink/af_netlink.c
net/netrom/af_netrom.c
net/netrom/nr_route.c
net/packet/af_packet.c
net/rose/af_rose.c
net/rose/rose_route.c
net/rose/rose_subr.c
net/socket.c
net/sunrpc/auth_gss/svcauth_gss.c
net/sunrpc/cache.c
net/sunrpc/stats.c
net/sunrpc/sunrpc_syms.c
net/sunrpc/svcauth.c
net/sunrpc/svcauth_unix.c
scripts/kallsyms.c
scripts/ver_linux
sound/arm/Makefile
sound/arm/aaci.c
sound/arm/aaci.h
sound/core/memory.c
sound/isa/Kconfig
sound/oss/os.h
sound/pci/ali5451/ali5451.c

index 4367f4642f3df8f9836673f69fb92bf480ace525..42a760cd7467a422142f5f2ea83c3072fcf08481 100644 (file)
@@ -96,7 +96,7 @@
 
   <chapter id="pubfunctions">
      <title>Public Functions Provided</title>
-!Earch/i386/kernel/mca.c
+!Edrivers/mca/mca-legacy.c
   </chapter>
 
   <chapter id="dmafunctions">
index 84d3d4d10c175943a86f12bd735694be19529eb7..bf1cf98d2a275b878d9e32378028b52d01ae8048 100644 (file)
@@ -605,12 +605,13 @@ is in the ipmi_poweroff module.  When the system requests a powerdown,
 it will send the proper IPMI commands to do this.  This is supported on
 several platforms.
 
-There is a module parameter named "poweroff_control" that may either be zero
-(do a power down) or 2 (do a power cycle, power the system off, then power
-it on in a few seconds).  Setting ipmi_poweroff.poweroff_control=x will do
-the same thing on the kernel command line.  The parameter is also available
-via the proc filesystem in /proc/ipmi/poweroff_control.  Note that if the
-system does not support power cycling, it will always to the power off.
+There is a module parameter named "poweroff_powercycle" that may
+either be zero (do a power down) or non-zero (do a power cycle, power
+the system off, then power it on in a few seconds).  Setting
+ipmi_poweroff.poweroff_control=x will do the same thing on the kernel
+command line.  The parameter is also available via the proc filesystem
+in /proc/sys/dev/ipmi/poweroff_powercycle.  Note that if the system
+does not support power cycling, it will always do the power off.
 
 Note that if you have ACPI enabled, the system will prefer using ACPI to
 power off.
diff --git a/Documentation/RCU/NMI-RCU.txt b/Documentation/RCU/NMI-RCU.txt
new file mode 100644 (file)
index 0000000..d0634a5
--- /dev/null
@@ -0,0 +1,112 @@
+Using RCU to Protect Dynamic NMI Handlers
+
+
+Although RCU is usually used to protect read-mostly data structures,
+it is possible to use RCU to provide dynamic non-maskable interrupt
+handlers, as well as dynamic irq handlers.  This document describes
+how to do this, drawing loosely from Zwane Mwaikambo's NMI-timer
+work in "arch/i386/oprofile/nmi_timer_int.c" and in
+"arch/i386/kernel/traps.c".
+
+The relevant pieces of code are listed below, each followed by a
+brief explanation.
+
+       static int dummy_nmi_callback(struct pt_regs *regs, int cpu)
+       {
+               return 0;
+       }
+
+The dummy_nmi_callback() function is a "dummy" NMI handler that does
+nothing, but returns zero, thus saying that it did nothing, allowing
+the NMI handler to take the default machine-specific action.
+
+       static nmi_callback_t nmi_callback = dummy_nmi_callback;
+
+This nmi_callback variable is a global function pointer to the current
+NMI handler.
+
+       fastcall void do_nmi(struct pt_regs * regs, long error_code)
+       {
+               int cpu;
+
+               nmi_enter();
+
+               cpu = smp_processor_id();
+               ++nmi_count(cpu);
+
+               if (!rcu_dereference(nmi_callback)(regs, cpu))
+                       default_do_nmi(regs);
+
+               nmi_exit();
+       }
+
+The do_nmi() function processes each NMI.  It first disables preemption
+in the same way that a hardware irq would, then increments the per-CPU
+count of NMIs.  It then invokes the NMI handler stored in the nmi_callback
+function pointer.  If this handler returns zero, do_nmi() invokes the
+default_do_nmi() function to handle a machine-specific NMI.  Finally,
+preemption is restored.
+
+Strictly speaking, rcu_dereference() is not needed, since this code runs
+only on i386, which does not need rcu_dereference() anyway.  However,
+it is a good documentation aid, particularly for anyone attempting to
+do something similar on Alpha.
+
+Quick Quiz:  Why might the rcu_dereference() be necessary on Alpha,
+            given that the code referenced by the pointer is read-only?
+
+
+Back to the discussion of NMI and RCU...
+
+       void set_nmi_callback(nmi_callback_t callback)
+       {
+               rcu_assign_pointer(nmi_callback, callback);
+       }
+
+The set_nmi_callback() function registers an NMI handler.  Note that any
+data that is to be used by the callback must be initialized up -before-
+the call to set_nmi_callback().  On architectures that do not order
+writes, the rcu_assign_pointer() ensures that the NMI handler sees the
+initialized values.
+
+       void unset_nmi_callback(void)
+       {
+               rcu_assign_pointer(nmi_callback, dummy_nmi_callback);
+       }
+
+This function unregisters an NMI handler, restoring the original
+dummy_nmi_handler().  However, there may well be an NMI handler
+currently executing on some other CPU.  We therefore cannot free
+up any data structures used by the old NMI handler until execution
+of it completes on all other CPUs.
+
+One way to accomplish this is via synchronize_sched(), perhaps as
+follows:
+
+       unset_nmi_callback();
+       synchronize_sched();
+       kfree(my_nmi_data);
+
+This works because synchronize_sched() blocks until all CPUs complete
+any preemption-disabled segments of code that they were executing.
+Since NMI handlers disable preemption, synchronize_sched() is guaranteed
+not to return until all ongoing NMI handlers exit.  It is therefore safe
+to free up the handler's data as soon as synchronize_sched() returns.
+
+
+Answer to Quick Quiz
+
+       Why might the rcu_dereference() be necessary on Alpha, given
+       that the code referenced by the pointer is read-only?
+
+       Answer: The caller to set_nmi_callback() might well have
+               initialized some data that is to be used by the
+               new NMI handler.  In this case, the rcu_dereference()
+               would be needed, because otherwise a CPU that received
+               an NMI just after the new handler was set might see
+               the pointer to the new NMI handler, but the old
+               pre-initialized version of the handler's data.
+
+               More important, the rcu_dereference() makes it clear
+               to someone reading the code that the pointer is being
+               protected by RCU.
index 0acdc80c30c2fab156a02238e6146afd6496425f..744f1aec65535f7d3bbadeedcc4f3e8c508709fb 100644 (file)
@@ -35,4 +35,4 @@ created.  Please use command "cat /proc/acpi/hotkey/polling_method"
 to retrieve it.
 
 Note: Use cmdline "acpi_generic_hotkey" to over-ride
-loading any platform specific drivers.
+platform-specific with generic driver.
index 59581a4b302af8573bfb31487ecaff50ff292905..b81e109970aa837d66e01d298c76c1f5e298c6f5 100644 (file)
@@ -68,7 +68,8 @@ it a better device citizen.  Further thanks to Joel Katz
 Porfiri Claudio <C.Porfiri@nisms.tei.ericsson.se> for patches
 to make the driver work with the older CDU-510/515 series, and
 Heiko Eissfeldt <heiko@colossus.escape.de> for pointing out that
-the verify_area() checks were ignoring the results of said checks.
+the verify_area() checks were ignoring the results of said checks
+(note: verify_area() has since been replaced by access_ok()).
 
 (Acknowledgments from Ron Jeppesen in the 0.3 release:)
 Thanks to Corey Minyard who wrote the original CDU-31A driver on which
index ad944c06031294cc35265d82ecf2a8fcc12586de..47f4114fbf545459efbdad232392d93357eb6968 100644 (file)
@@ -60,6 +60,18 @@ all of the cpus in the system. This removes any overhead due to
 load balancing code trying to pull tasks outside of the cpu exclusive
 cpuset only to be prevented by the tasks' cpus_allowed mask.
 
+A cpuset that is mem_exclusive restricts kernel allocations for
+page, buffer and other data commonly shared by the kernel across
+multiple users.  All cpusets, whether mem_exclusive or not, restrict
+allocations of memory for user space.  This enables configuring a
+system so that several independent jobs can share common kernel
+data, such as file system pages, while isolating each jobs user
+allocation in its own cpuset.  To do this, construct a large
+mem_exclusive cpuset to hold all the jobs, and construct child,
+non-mem_exclusive cpusets for each individual job.  Only a small
+amount of typical kernel memory, such as requests from interrupt
+handlers, is allowed to be taken outside even a mem_exclusive cpuset.
+
 User level code may create and destroy cpusets by name in the cpuset
 virtual file system, manage the attributes and permissions of these
 cpusets and which CPUs and Memory Nodes are assigned to each cpuset,
diff --git a/Documentation/dcdbas.txt b/Documentation/dcdbas.txt
new file mode 100644 (file)
index 0000000..e1c52e2
--- /dev/null
@@ -0,0 +1,91 @@
+Overview
+
+The Dell Systems Management Base Driver provides a sysfs interface for
+systems management software such as Dell OpenManage to perform system
+management interrupts and host control actions (system power cycle or
+power off after OS shutdown) on certain Dell systems.
+
+Dell OpenManage requires this driver on the following Dell PowerEdge systems:
+300, 1300, 1400, 400SC, 500SC, 1500SC, 1550, 600SC, 1600SC, 650, 1655MC,
+700, and 750.  Other Dell software such as the open source libsmbios project
+is expected to make use of this driver, and it may include the use of this
+driver on other Dell systems.
+
+The Dell libsmbios project aims towards providing access to as much BIOS
+information as possible.  See http://linux.dell.com/libsmbios/main/ for
+more information about the libsmbios project.
+
+
+System Management Interrupt
+
+On some Dell systems, systems management software must access certain
+management information via a system management interrupt (SMI).  The SMI data
+buffer must reside in 32-bit address space, and the physical address of the
+buffer is required for the SMI.  The driver maintains the memory required for
+the SMI and provides a way for the application to generate the SMI.
+The driver creates the following sysfs entries for systems management
+software to perform these system management interrupts:
+
+/sys/devices/platform/dcdbas/smi_data
+/sys/devices/platform/dcdbas/smi_data_buf_phys_addr
+/sys/devices/platform/dcdbas/smi_data_buf_size
+/sys/devices/platform/dcdbas/smi_request
+
+Systems management software must perform the following steps to execute
+a SMI using this driver:
+
+1) Lock smi_data.
+2) Write system management command to smi_data.
+3) Write "1" to smi_request to generate a calling interface SMI or
+   "2" to generate a raw SMI.
+4) Read system management command response from smi_data.
+5) Unlock smi_data.
+
+
+Host Control Action
+
+Dell OpenManage supports a host control feature that allows the administrator
+to perform a power cycle or power off of the system after the OS has finished
+shutting down.  On some Dell systems, this host control feature requires that
+a driver perform a SMI after the OS has finished shutting down.
+
+The driver creates the following sysfs entries for systems management software
+to schedule the driver to perform a power cycle or power off host control
+action after the system has finished shutting down:
+
+/sys/devices/platform/dcdbas/host_control_action
+/sys/devices/platform/dcdbas/host_control_smi_type
+/sys/devices/platform/dcdbas/host_control_on_shutdown
+
+Dell OpenManage performs the following steps to execute a power cycle or
+power off host control action using this driver:
+
+1) Write host control action to be performed to host_control_action.
+2) Write type of SMI that driver needs to perform to host_control_smi_type.
+3) Write "1" to host_control_on_shutdown to enable host control action.
+4) Initiate OS shutdown.
+   (Driver will perform host control SMI when it is notified that the OS
+   has finished shutting down.)
+
+
+Host Control SMI Type
+
+The following table shows the value to write to host_control_smi_type to
+perform a power cycle or power off host control action:
+
+PowerEdge System    Host Control SMI Type
+----------------    ---------------------
+      300             HC_SMITYPE_TYPE1
+     1300             HC_SMITYPE_TYPE1
+     1400             HC_SMITYPE_TYPE2
+      500SC           HC_SMITYPE_TYPE2
+     1500SC           HC_SMITYPE_TYPE2
+     1550             HC_SMITYPE_TYPE2
+      600SC           HC_SMITYPE_TYPE2
+     1600SC           HC_SMITYPE_TYPE2
+      650             HC_SMITYPE_TYPE2
+     1655MC           HC_SMITYPE_TYPE2
+      700             HC_SMITYPE_TYPE3
+      750             HC_SMITYPE_TYPE3
+
+
diff --git a/Documentation/dell_rbu.txt b/Documentation/dell_rbu.txt
new file mode 100644 (file)
index 0000000..bcfa5c3
--- /dev/null
@@ -0,0 +1,74 @@
+Purpose:
+Demonstrate the usage of the new open sourced rbu (Remote BIOS Update) driver
+for updating BIOS images on Dell servers and desktops.
+
+Scope:
+This document discusses the functionality of the rbu driver only.
+It does not cover the support needed from aplications to enable the BIOS to
+update itself with the image downloaded in to the memory.
+
+Overview:
+This driver works with Dell OpenManage or Dell Update Packages for updating
+the BIOS on Dell servers (starting from servers sold since 1999), desktops
+and notebooks (starting from those sold in 2005).
+Please go to  http://support.dell.com register and you can find info on
+OpenManage and Dell Update packages (DUP).
+
+Dell_RBU driver supports BIOS update using the monilothic image and packetized
+image methods. In case of moniolithic the driver allocates a contiguous chunk
+of physical pages having the BIOS image. In case of packetized the app
+using the driver breaks the image in to packets of fixed sizes and the driver
+would place each packet in contiguous physical memory. The driver also
+maintains a link list of packets for reading them back.
+If the dell_rbu driver is unloaded all the allocated memory is freed.
+
+The rbu driver needs to have an application which will inform the BIOS to
+enable the update in the next system reboot.
+
+The user should not unload the rbu driver after downloading the BIOS image
+or updating.
+
+The driver load creates the following directories under the /sys file system.
+/sys/class/firmware/dell_rbu/loading
+/sys/class/firmware/dell_rbu/data
+/sys/devices/platform/dell_rbu/image_type
+/sys/devices/platform/dell_rbu/data
+
+The driver supports two types of update mechanism; monolithic and packetized.
+These update mechanism depends upon the BIOS currently running on the system.
+Most of the Dell systems support a monolithic update where the BIOS image is
+copied to a single contiguous block of physical memory.
+In case of packet mechanism the single memory can be broken in smaller chuks
+of contiguous memory and the BIOS image is scattered in these packets.
+
+By default the driver uses monolithic memory for the update type. This can be
+changed to contiguous during the driver load time by specifying the load
+parameter image_type=packet.  This can also be changed later as below
+echo packet > /sys/devices/platform/dell_rbu/image_type
+
+Do the steps below to download the BIOS image.
+1) echo 1 > /sys/class/firmware/dell_rbu/loading
+2) cp bios_image.hdr /sys/class/firmware/dell_rbu/data
+3) echo 0 > /sys/class/firmware/dell_rbu/loading
+
+The /sys/class/firmware/dell_rbu/ entries will remain till the following is
+done.
+echo -1 > /sys/class/firmware/dell_rbu/loading
+
+Until this step is completed the drivr cannot be unloaded.
+
+Also the driver provides /sys/devices/platform/dell_rbu/data readonly file to
+read back the image downloaded. This is useful in case of packet update
+mechanism where the above steps 1,2,3 will repeated for every packet.
+By reading the /sys/devices/platform/dell_rbu/data file all packet data
+downloaded can be verified in a single file.
+The packets are arranged in this file one after the other in a FIFO order.
+
+NOTE:
+This driver requires a patch for firmware_class.c which has the addition
+of request_firmware_nowait_nohotplug function to wortk
+Also after updating the BIOS image an user mdoe application neeeds to execute
+code which message the BIOS update request to the BIOS. So on the next reboot
+the BIOS knows about the new image downloaded and it updates it self.
+Also don't unload the rbu drive if the image has to be updated.
+
index e6b8d05bc08d1b3d95c213a29023fbdd73802ff7..4b8c326c6aac91fcd0d04db82b12114850376c52 100644 (file)
@@ -16,7 +16,7 @@ Enable the following options:
 "Device drivers" => "Multimedia devices"
  => "Video For Linux" => "BT848 Video For Linux"
 "Device drivers" => "Multimedia devices" => "Digital Video Broadcasting Devices"
- => "DVB for Linux" "DVB Core Support" "Nebula/Pinnacle PCTV/TwinHan PCI Cards"
+ => "DVB for Linux" "DVB Core Support" "BT8xx based PCI cards"
 
 3) Loading Modules, described by two approaches
 ===============================================
index f1d436993eb156831f50a4ab32619f79929dbc02..3cb39ade290eae9d3e3046cfb04fe340e601d5b9 100644 (file)
@@ -7,7 +7,7 @@ To protect itself the kernel has to verify this address.
 
 In older versions of Linux this was done with the 
 int verify_area(int type, const void * addr, unsigned long size) 
-function.
+function (which has since been replaced by access_ok()).
 
 This function verified that the memory area starting at address 
 addr and of size size was accessible for the operation specified 
index 363909056e46f0c41b865977659bc599577b3de3..2e0a01b21fe040503243c963a65f8411e795961b 100644 (file)
@@ -51,14 +51,6 @@ Who: Adrian Bunk <bunk@stusta.de>
 
 ---------------------------
 
-What:  register_ioctl32_conversion() / unregister_ioctl32_conversion()
-When:  April 2005
-Why:   Replaced by ->compat_ioctl in file_operations and other method
-       vecors.
-Who:   Andi Kleen <ak@muc.de>, Christoph Hellwig <hch@lst.de>
-
----------------------------
-
 What:  RCU API moves to EXPORT_SYMBOL_GPL
 When:  April 2006
 Files: include/linux/rcupdate.h, kernel/rcupdate.c
@@ -74,14 +66,6 @@ Who: Paul E. McKenney <paulmck@us.ibm.com>
 
 ---------------------------
 
-What:  remove verify_area()
-When:  July 2006
-Files: Various uaccess.h headers.
-Why:   Deprecated and redundant. access_ok() should be used instead.
-Who:   Jesper Juhl <juhl-lkml@dif.dk>
-
----------------------------
-
 What:  IEEE1394 Audio and Music Data Transmission Protocol driver,
        Connection Management Procedures driver
 When:  November 2005
diff --git a/Documentation/filesystems/relayfs.txt b/Documentation/filesystems/relayfs.txt
new file mode 100644 (file)
index 0000000..d24e1b0
--- /dev/null
@@ -0,0 +1,362 @@
+
+relayfs - a high-speed data relay filesystem
+============================================
+
+relayfs is a filesystem designed to provide an efficient mechanism for
+tools and facilities to relay large and potentially sustained streams
+of data from kernel space to user space.
+
+The main abstraction of relayfs is the 'channel'.  A channel consists
+of a set of per-cpu kernel buffers each represented by a file in the
+relayfs filesystem.  Kernel clients write into a channel using
+efficient write functions which automatically log to the current cpu's
+channel buffer.  User space applications mmap() the per-cpu files and
+retrieve the data as it becomes available.
+
+The format of the data logged into the channel buffers is completely
+up to the relayfs client; relayfs does however provide hooks which
+allow clients to impose some stucture on the buffer data.  Nor does
+relayfs implement any form of data filtering - this also is left to
+the client.  The purpose is to keep relayfs as simple as possible.
+
+This document provides an overview of the relayfs API.  The details of
+the function parameters are documented along with the functions in the
+filesystem code - please see that for details.
+
+Semantics
+=========
+
+Each relayfs channel has one buffer per CPU, each buffer has one or
+more sub-buffers. Messages are written to the first sub-buffer until
+it is too full to contain a new message, in which case it it is
+written to the next (if available).  Messages are never split across
+sub-buffers.  At this point, userspace can be notified so it empties
+the first sub-buffer, while the kernel continues writing to the next.
+
+When notified that a sub-buffer is full, the kernel knows how many
+bytes of it are padding i.e. unused.  Userspace can use this knowledge
+to copy only valid data.
+
+After copying it, userspace can notify the kernel that a sub-buffer
+has been consumed.
+
+relayfs can operate in a mode where it will overwrite data not yet
+collected by userspace, and not wait for it to consume it.
+
+relayfs itself does not provide for communication of such data between
+userspace and kernel, allowing the kernel side to remain simple and not
+impose a single interface on userspace. It does provide a separate
+helper though, described below.
+
+klog, relay-app & librelay
+==========================
+
+relayfs itself is ready to use, but to make things easier, two
+additional systems are provided.  klog is a simple wrapper to make
+writing formatted text or raw data to a channel simpler, regardless of
+whether a channel to write into exists or not, or whether relayfs is
+compiled into the kernel or is configured as a module.  relay-app is
+the kernel counterpart of userspace librelay.c, combined these two
+files provide glue to easily stream data to disk, without having to
+bother with housekeeping.  klog and relay-app can be used together,
+with klog providing high-level logging functions to the kernel and
+relay-app taking care of kernel-user control and disk-logging chores.
+
+It is possible to use relayfs without relay-app & librelay, but you'll
+have to implement communication between userspace and kernel, allowing
+both to convey the state of buffers (full, empty, amount of padding).
+
+klog, relay-app and librelay can be found in the relay-apps tarball on
+http://relayfs.sourceforge.net
+
+The relayfs user space API
+==========================
+
+relayfs implements basic file operations for user space access to
+relayfs channel buffer data.  Here are the file operations that are
+available and some comments regarding their behavior:
+
+open()  enables user to open an _existing_ buffer.
+
+mmap()  results in channel buffer being mapped into the caller's
+        memory space. Note that you can't do a partial mmap - you must
+        map the entire file, which is NRBUF * SUBBUFSIZE.
+
+read()  read the contents of a channel buffer.  The bytes read are
+        'consumed' by the reader i.e. they won't be available again
+        to subsequent reads.  If the channel is being used in
+        no-overwrite mode (the default), it can be read at any time
+        even if there's an active kernel writer.  If the channel is
+        being used in overwrite mode and there are active channel
+        writers, results may be unpredictable - users should make
+        sure that all logging to the channel has ended before using
+        read() with overwrite mode.
+
+poll()  POLLIN/POLLRDNORM/POLLERR supported.  User applications are
+        notified when sub-buffer boundaries are crossed.
+
+close() decrements the channel buffer's refcount.  When the refcount
+       reaches 0 i.e. when no process or kernel client has the buffer
+       open, the channel buffer is freed.
+
+
+In order for a user application to make use of relayfs files, the
+relayfs filesystem must be mounted.  For example,
+
+       mount -t relayfs relayfs /mnt/relay
+
+NOTE:  relayfs doesn't need to be mounted for kernel clients to create
+       or use channels - it only needs to be mounted when user space
+       applications need access to the buffer data.
+
+
+The relayfs kernel API
+======================
+
+Here's a summary of the API relayfs provides to in-kernel clients:
+
+
+  channel management functions:
+
+    relay_open(base_filename, parent, subbuf_size, n_subbufs,
+               callbacks)
+    relay_close(chan)
+    relay_flush(chan)
+    relay_reset(chan)
+    relayfs_create_dir(name, parent)
+    relayfs_remove_dir(dentry)
+
+  channel management typically called on instigation of userspace:
+
+    relay_subbufs_consumed(chan, cpu, subbufs_consumed)
+
+  write functions:
+
+    relay_write(chan, data, length)
+    __relay_write(chan, data, length)
+    relay_reserve(chan, length)
+
+  callbacks:
+
+    subbuf_start(buf, subbuf, prev_subbuf, prev_padding)
+    buf_mapped(buf, filp)
+    buf_unmapped(buf, filp)
+
+  helper functions:
+
+    relay_buf_full(buf)
+    subbuf_start_reserve(buf, length)
+
+
+Creating a channel
+------------------
+
+relay_open() is used to create a channel, along with its per-cpu
+channel buffers.  Each channel buffer will have an associated file
+created for it in the relayfs filesystem, which can be opened and
+mmapped from user space if desired.  The files are named
+basename0...basenameN-1 where N is the number of online cpus, and by
+default will be created in the root of the filesystem.  If you want a
+directory structure to contain your relayfs files, you can create it
+with relayfs_create_dir() and pass the parent directory to
+relay_open().  Clients are responsible for cleaning up any directory
+structure they create when the channel is closed - use
+relayfs_remove_dir() for that.
+
+The total size of each per-cpu buffer is calculated by multiplying the
+number of sub-buffers by the sub-buffer size passed into relay_open().
+The idea behind sub-buffers is that they're basically an extension of
+double-buffering to N buffers, and they also allow applications to
+easily implement random-access-on-buffer-boundary schemes, which can
+be important for some high-volume applications.  The number and size
+of sub-buffers is completely dependent on the application and even for
+the same application, different conditions will warrant different
+values for these parameters at different times.  Typically, the right
+values to use are best decided after some experimentation; in general,
+though, it's safe to assume that having only 1 sub-buffer is a bad
+idea - you're guaranteed to either overwrite data or lose events
+depending on the channel mode being used.
+
+Channel 'modes'
+---------------
+
+relayfs channels can be used in either of two modes - 'overwrite' or
+'no-overwrite'.  The mode is entirely determined by the implementation
+of the subbuf_start() callback, as described below.  In 'overwrite'
+mode, also known as 'flight recorder' mode, writes continuously cycle
+around the buffer and will never fail, but will unconditionally
+overwrite old data regardless of whether it's actually been consumed.
+In no-overwrite mode, writes will fail i.e. data will be lost, if the
+number of unconsumed sub-buffers equals the total number of
+sub-buffers in the channel.  It should be clear that if there is no
+consumer or if the consumer can't consume sub-buffers fast enought,
+data will be lost in either case; the only difference is whether data
+is lost from the beginning or the end of a buffer.
+
+As explained above, a relayfs channel is made of up one or more
+per-cpu channel buffers, each implemented as a circular buffer
+subdivided into one or more sub-buffers.  Messages are written into
+the current sub-buffer of the channel's current per-cpu buffer via the
+write functions described below.  Whenever a message can't fit into
+the current sub-buffer, because there's no room left for it, the
+client is notified via the subbuf_start() callback that a switch to a
+new sub-buffer is about to occur.  The client uses this callback to 1)
+initialize the next sub-buffer if appropriate 2) finalize the previous
+sub-buffer if appropriate and 3) return a boolean value indicating
+whether or not to actually go ahead with the sub-buffer switch.
+
+To implement 'no-overwrite' mode, the userspace client would provide
+an implementation of the subbuf_start() callback something like the
+following:
+
+static int subbuf_start(struct rchan_buf *buf,
+                        void *subbuf,
+                       void *prev_subbuf,
+                       unsigned int prev_padding)
+{
+       if (prev_subbuf)
+               *((unsigned *)prev_subbuf) = prev_padding;
+
+       if (relay_buf_full(buf))
+               return 0;
+
+       subbuf_start_reserve(buf, sizeof(unsigned int));
+
+       return 1;
+}
+
+If the current buffer is full i.e. all sub-buffers remain unconsumed,
+the callback returns 0 to indicate that the buffer switch should not
+occur yet i.e. until the consumer has had a chance to read the current
+set of ready sub-buffers.  For the relay_buf_full() function to make
+sense, the consumer is reponsible for notifying relayfs when
+sub-buffers have been consumed via relay_subbufs_consumed().  Any
+subsequent attempts to write into the buffer will again invoke the
+subbuf_start() callback with the same parameters; only when the
+consumer has consumed one or more of the ready sub-buffers will
+relay_buf_full() return 0, in which case the buffer switch can
+continue.
+
+The implementation of the subbuf_start() callback for 'overwrite' mode
+would be very similar:
+
+static int subbuf_start(struct rchan_buf *buf,
+                        void *subbuf,
+                       void *prev_subbuf,
+                       unsigned int prev_padding)
+{
+       if (prev_subbuf)
+               *((unsigned *)prev_subbuf) = prev_padding;
+
+       subbuf_start_reserve(buf, sizeof(unsigned int));
+
+       return 1;
+}
+
+In this case, the relay_buf_full() check is meaningless and the
+callback always returns 1, causing the buffer switch to occur
+unconditionally.  It's also meaningless for the client to use the
+relay_subbufs_consumed() function in this mode, as it's never
+consulted.
+
+The default subbuf_start() implementation, used if the client doesn't
+define any callbacks, or doesn't define the subbuf_start() callback,
+implements the simplest possible 'no-overwrite' mode i.e. it does
+nothing but return 0.
+
+Header information can be reserved at the beginning of each sub-buffer
+by calling the subbuf_start_reserve() helper function from within the
+subbuf_start() callback.  This reserved area can be used to store
+whatever information the client wants.  In the example above, room is
+reserved in each sub-buffer to store the padding count for that
+sub-buffer.  This is filled in for the previous sub-buffer in the
+subbuf_start() implementation; the padding value for the previous
+sub-buffer is passed into the subbuf_start() callback along with a
+pointer to the previous sub-buffer, since the padding value isn't
+known until a sub-buffer is filled.  The subbuf_start() callback is
+also called for the first sub-buffer when the channel is opened, to
+give the client a chance to reserve space in it.  In this case the
+previous sub-buffer pointer passed into the callback will be NULL, so
+the client should check the value of the prev_subbuf pointer before
+writing into the previous sub-buffer.
+
+Writing to a channel
+--------------------
+
+kernel clients write data into the current cpu's channel buffer using
+relay_write() or __relay_write().  relay_write() is the main logging
+function - it uses local_irqsave() to protect the buffer and should be
+used if you might be logging from interrupt context.  If you know
+you'll never be logging from interrupt context, you can use
+__relay_write(), which only disables preemption.  These functions
+don't return a value, so you can't determine whether or not they
+failed - the assumption is that you wouldn't want to check a return
+value in the fast logging path anyway, and that they'll always succeed
+unless the buffer is full and no-overwrite mode is being used, in
+which case you can detect a failed write in the subbuf_start()
+callback by calling the relay_buf_full() helper function.
+
+relay_reserve() is used to reserve a slot in a channel buffer which
+can be written to later.  This would typically be used in applications
+that need to write directly into a channel buffer without having to
+stage data in a temporary buffer beforehand.  Because the actual write
+may not happen immediately after the slot is reserved, applications
+using relay_reserve() can keep a count of the number of bytes actually
+written, either in space reserved in the sub-buffers themselves or as
+a separate array.  See the 'reserve' example in the relay-apps tarball
+at http://relayfs.sourceforge.net for an example of how this can be
+done.  Because the write is under control of the client and is
+separated from the reserve, relay_reserve() doesn't protect the buffer
+at all - it's up to the client to provide the appropriate
+synchronization when using relay_reserve().
+
+Closing a channel
+-----------------
+
+The client calls relay_close() when it's finished using the channel.
+The channel and its associated buffers are destroyed when there are no
+longer any references to any of the channel buffers.  relay_flush()
+forces a sub-buffer switch on all the channel buffers, and can be used
+to finalize and process the last sub-buffers before the channel is
+closed.
+
+Misc
+----
+
+Some applications may want to keep a channel around and re-use it
+rather than open and close a new channel for each use.  relay_reset()
+can be used for this purpose - it resets a channel to its initial
+state without reallocating channel buffer memory or destroying
+existing mappings.  It should however only be called when it's safe to
+do so i.e. when the channel isn't currently being written to.
+
+Finally, there are a couple of utility callbacks that can be used for
+different purposes.  buf_mapped() is called whenever a channel buffer
+is mmapped from user space and buf_unmapped() is called when it's
+unmapped.  The client can use this notification to trigger actions
+within the kernel application, such as enabling/disabling logging to
+the channel.
+
+
+Resources
+=========
+
+For news, example code, mailing list, etc. see the relayfs homepage:
+
+    http://relayfs.sourceforge.net
+
+
+Credits
+=======
+
+The ideas and specs for relayfs came about as a result of discussions
+on tracing involving the following:
+
+Michel Dagenais                <michel.dagenais@polymtl.ca>
+Richard Moore          <richardj_moore@uk.ibm.com>
+Bob Wisniewski         <bob@watson.ibm.com>
+Karim Yaghmour         <karim@opersys.com>
+Tom Zanussi            <zanussi@us.ibm.com>
+
+Also thanks to Hubertus Franke for a lot of useful suggestions and bug
+reports.
index 1c48f0eba6fb79121c08dc95a6a9b05441f9f0e8..10312bebe55de0b063e59b28f2781a7f7001f8b4 100644 (file)
@@ -2,7 +2,7 @@
                     ----------------------------
 
                    H. Peter Anvin <hpa@zytor.com>
-                       Last update 2002-01-01
+                       Last update 2005-09-02
 
 On the i386 platform, the Linux kernel uses a rather complicated boot
 convention.  This has evolved partially due to historical aspects, as
@@ -34,6 +34,8 @@ Protocol 2.02:        (Kernel 2.4.0-test3-pre3) New command line protocol.
 Protocol 2.03: (Kernel 2.4.18-pre1) Explicitly makes the highest possible
                initrd address available to the bootloader.
 
+Protocol 2.04: (Kernel 2.6.14) Extend the syssize field to four bytes.
+
 
 **** MEMORY LAYOUT
 
@@ -103,10 +105,9 @@ The header looks like:
 Offset Proto   Name            Meaning
 /Size
 
-01F1/1 ALL     setup_sects     The size of the setup in sectors
+01F1/1 ALL(1   setup_sects     The size of the setup in sectors
 01F2/2 ALL     root_flags      If set, the root is mounted readonly
-01F4/2 ALL     syssize         DO NOT USE - for bootsect.S use only
-01F6/2 ALL     swap_dev        DO NOT USE - obsolete
+01F4/4 2.04+(2 syssize         The size of the 32-bit code in 16-byte paras
 01F8/2 ALL     ram_size        DO NOT USE - for bootsect.S use only
 01FA/2 ALL     vid_mode        Video mode control
 01FC/2 ALL     root_dev        Default root device number
@@ -129,8 +130,12 @@ Offset     Proto   Name            Meaning
 0228/4 2.02+   cmd_line_ptr    32-bit pointer to the kernel command line
 022C/4 2.03+   initrd_addr_max Highest legal initrd address
 
-For backwards compatibility, if the setup_sects field contains 0, the
-real value is 4.
+(1) For backwards compatibility, if the setup_sects field contains 0, the
+    real value is 4.
+
+(2) For boot protocol prior to 2.04, the upper two bytes of the syssize
+    field are unusable, which means the size of a bzImage kernel
+    cannot be determined.
 
 If the "HdrS" (0x53726448) magic number is not found at offset 0x202,
 the boot protocol version is "old".  Loading an old kernel, the
@@ -230,12 +235,16 @@ loader to communicate with the kernel.  Some of its options are also
 relevant to the boot loader itself, see "special command line options"
 below.
 
-The kernel command line is a null-terminated string up to 255
-characters long, plus the final null.
+The kernel command line is a null-terminated string currently up to
+255 characters long, plus the final null.  A string that is too long
+will be automatically truncated by the kernel, a boot loader may allow
+a longer command line to be passed to permit future kernels to extend
+this limit.
 
 If the boot protocol version is 2.02 or later, the address of the
 kernel command line is given by the header field cmd_line_ptr (see
-above.)
+above.)  This address can be anywhere between the end of the setup
+heap and 0xA0000.
 
 If the protocol version is *not* 2.02 or higher, the kernel
 command line is entered using the following protocol:
@@ -255,7 +264,7 @@ command line is entered using the following protocol:
 **** SAMPLE BOOT CONFIGURATION
 
 As a sample configuration, assume the following layout of the real
-mode segment:
+mode segment (this is a typical, and recommended layout):
 
        0x0000-0x7FFF   Real mode kernel
        0x8000-0x8FFF   Stack and heap
@@ -312,9 +321,9 @@ Such a boot loader should enter the following fields in the header:
 
 **** LOADING THE REST OF THE KERNEL
 
-The non-real-mode kernel starts at offset (setup_sects+1)*512 in the
-kernel file (again, if setup_sects == 0 the real value is 4.)  It
-should be loaded at address 0x10000 for Image/zImage kernels and
+The 32-bit (non-real-mode) kernel starts at offset (setup_sects+1)*512
+in the kernel file (again, if setup_sects == 0 the real value is 4.)
+It should be loaded at address 0x10000 for Image/zImage kernels and
 0x100000 for bzImage kernels.
 
 The kernel is a bzImage kernel if the protocol >= 2.00 and the 0x01
index c437b1aeff55052e14f07d2e382259d3f9642bbf..8b3fd82b2ce712ead5c94b41f82972e58959200e 100644 (file)
@@ -1,16 +1,16 @@
                    IBM ThinkPad ACPI Extras Driver
 
-                            Version 0.8
-                          8 November 2004
+                            Version 0.12
+                           17 August 2005
 
                Borislav Deianov <borislav@users.sf.net>
                      http://ibm-acpi.sf.net/
 
 
-This is a Linux ACPI driver for the IBM ThinkPad laptops. It aims to
-support various features of these laptops which are accessible through
-the ACPI framework but not otherwise supported by the generic Linux
-ACPI drivers.
+This is a Linux ACPI driver for the IBM ThinkPad laptops. It supports
+various features of these laptops which are accessible through the
+ACPI framework but not otherwise supported by the generic Linux ACPI
+drivers.
 
 
 Status
@@ -25,9 +25,14 @@ detailed description):
        - ThinkLight on and off
        - limited docking and undocking
        - UltraBay eject
-       - Experimental: CMOS control
-       - Experimental: LED control
-       - Experimental: ACPI sounds
+       - CMOS control
+       - LED control
+       - ACPI sounds
+       - temperature sensors
+       - Experimental: embedded controller register dump
+       - Experimental: LCD brightness control
+       - Experimental: volume control
+       - Experimental: fan speed, fan enable/disable
 
 A compatibility table by model and feature is maintained on the web
 site, http://ibm-acpi.sf.net/. I appreciate any success or failure
@@ -91,12 +96,12 @@ driver is still in the alpha stage, the exact proc file format and
 commands supported by the various features is guaranteed to change
 frequently.
 
-Driver Version -- /proc/acpi/ibm/driver
---------------------------------------
+Driver version -- /proc/acpi/ibm/driver
+---------------------------------------
 
 The driver name and version. No commands can be written to this file.
 
-Hot Keys -- /proc/acpi/ibm/hotkey
+Hot keys -- /proc/acpi/ibm/hotkey
 ---------------------------------
 
 Without this driver, only the Fn-F4 key (sleep button) generates an
@@ -188,7 +193,7 @@ and, on the X40, video corruption. By disabling automatic switching,
 the flickering or video corruption can be avoided.
 
 The video_switch command cycles through the available video outputs
-(it sumulates the behavior of Fn-F7).
+(it simulates the behavior of Fn-F7).
 
 Video expansion can be toggled through this feature. This controls
 whether the display is expanded to fill the entire LCD screen when a
@@ -201,6 +206,12 @@ Fn-F7 from working. This also disables the video output switching
 features of this driver, as it uses the same ACPI methods as
 Fn-F7. Video switching on the console should still work.
 
+UPDATE: There's now a patch for the X.org Radeon driver which
+addresses this issue. Some people are reporting success with the patch
+while others are still having problems. For more information:
+
+https://bugs.freedesktop.org/show_bug.cgi?id=2000
+
 ThinkLight control -- /proc/acpi/ibm/light
 ------------------------------------------
 
@@ -211,7 +222,7 @@ models which do not make the status available will show it as
        echo on  > /proc/acpi/ibm/light
        echo off > /proc/acpi/ibm/light
 
-Docking / Undocking -- /proc/acpi/ibm/dock
+Docking / undocking -- /proc/acpi/ibm/dock
 ------------------------------------------
 
 Docking and undocking (e.g. with the X4 UltraBase) requires some
@@ -228,11 +239,15 @@ NOTE: These events will only be generated if the laptop was docked
 when originally booted. This is due to the current lack of support for
 hot plugging of devices in the Linux ACPI framework. If the laptop was
 booted while not in the dock, the following message is shown in the
-logs: "ibm_acpi: dock device not present". No dock-related events are
-generated but the dock and undock commands described below still
-work. They can be executed manually or triggered by Fn key
-combinations (see the example acpid configuration files included in
-the driver tarball package available on the web site).
+logs:
+
+       Mar 17 01:42:34 aero kernel: ibm_acpi: dock device not present
+
+In this case, no dock-related events are generated but the dock and
+undock commands described below still work. They can be executed
+manually or triggered by Fn key combinations (see the example acpid
+configuration files included in the driver tarball package available
+on the web site).
 
 When the eject request button on the dock is pressed, the first event
 above is generated. The handler for this event should issue the
@@ -267,7 +282,7 @@ the only docking stations currently supported are the X-series
 UltraBase docks and "dumb" port replicators like the Mini Dock (the
 latter don't need any ACPI support, actually).
 
-UltraBay Eject -- /proc/acpi/ibm/bay
+UltraBay eject -- /proc/acpi/ibm/bay
 ------------------------------------
 
 Inserting or ejecting an UltraBay device requires some actions to be
@@ -284,8 +299,11 @@ when the laptop was originally booted (on the X series, the UltraBay
 is in the dock, so it may not be present if the laptop was undocked).
 This is due to the current lack of support for hot plugging of devices
 in the Linux ACPI framework. If the laptop was booted without the
-UltraBay, the following message is shown in the logs: "ibm_acpi: bay
-device not present". No bay-related events are generated but the eject
+UltraBay, the following message is shown in the logs:
+
+       Mar 17 01:42:34 aero kernel: ibm_acpi: bay device not present
+
+In this case, no bay-related events are generated but the eject
 command described below still works. It can be executed manually or
 triggered by a hot key combination.
 
@@ -306,22 +324,33 @@ necessary to enable the UltraBay device (e.g. call idectl).
 The contents of the /proc/acpi/ibm/bay file shows the current status
 of the UltraBay, as provided by the ACPI framework.
 
-Experimental Features
----------------------
+EXPERIMENTAL warm eject support on the 600e/x, A22p and A3x (To use
+this feature, you need to supply the experimental=1 parameter when
+loading the module):
+
+These models do not have a button near the UltraBay device to request
+a hot eject but rather require the laptop to be put to sleep
+(suspend-to-ram) before the bay device is ejected or inserted).
+The sequence of steps to eject the device is as follows:
+
+       echo eject > /proc/acpi/ibm/bay
+       put the ThinkPad to sleep
+       remove the drive
+       resume from sleep
+       cat /proc/acpi/ibm/bay should show that the drive was removed
+
+On the A3x, both the UltraBay 2000 and UltraBay Plus devices are
+supported. Use "eject2" instead of "eject" for the second bay.
 
-The following features are marked experimental because using them
-involves guessing the correct values of some parameters. Guessing
-incorrectly may have undesirable effects like crashing your
-ThinkPad. USE THESE WITH CAUTION! To activate them, you'll need to
-supply the experimental=1 parameter when loading the module.
+Note: the UltraBay eject support on the 600e/x, A22p and A3x is
+EXPERIMENTAL and may not work as expected. USE WITH CAUTION!
 
-Experimental: CMOS control - /proc/acpi/ibm/cmos
-------------------------------------------------
+CMOS control -- /proc/acpi/ibm/cmos
+-----------------------------------
 
 This feature is used internally by the ACPI firmware to control the
-ThinkLight on most newer ThinkPad models. It appears that it can also
-control LCD brightness, sounds volume and more, but only on some
-models.
+ThinkLight on most newer ThinkPad models. It may also control LCD
+brightness, sounds volume and more, but only on some models.
 
 The commands are non-negative integer numbers:
 
@@ -330,10 +359,9 @@ The commands are non-negative integer numbers:
        echo 2 >/proc/acpi/ibm/cmos
        ...
 
-The range of numbers which are used internally by various models is 0
-to 21, but it's possible that numbers outside this range have
-interesting behavior. Here is the behavior on the X40 (tpb is the
-ThinkPad Buttons utility):
+The range of valid numbers is 0 to 21, but not all have an effect and
+the behavior varies from model to model. Here is the behavior on the
+X40 (tpb is the ThinkPad Buttons utility):
 
        0 - no effect but tpb reports "Volume down"
        1 - no effect but tpb reports "Volume up"
@@ -346,26 +374,18 @@ ThinkPad Buttons utility):
        13 - ThinkLight off
        14 - no effect but tpb reports ThinkLight status change
 
-If you try this feature, please send me a report similar to the
-above. On models which allow control of LCD brightness or sound
-volume, I'd like to provide this functionality in an user-friendly
-way, but first I need a way to identify the models which this is
-possible.
-
-Experimental: LED control - /proc/acpi/ibm/LED
-----------------------------------------------
+LED control -- /proc/acpi/ibm/led
+---------------------------------
 
 Some of the LED indicators can be controlled through this feature. The
 available commands are:
 
-       echo <led number> on >/proc/acpi/ibm/led
-       echo <led number> off >/proc/acpi/ibm/led
-       echo <led number> blink >/proc/acpi/ibm/led
+       echo '<led number> on' >/proc/acpi/ibm/led
+       echo '<led number> off' >/proc/acpi/ibm/led
+       echo '<led number> blink' >/proc/acpi/ibm/led
 
-The <led number> parameter is a non-negative integer. The range of LED
-numbers used internally by various models is 0 to 7 but it's possible
-that numbers outside this range are also valid. Here is the mapping on
-the X40:
+The <led number> range is 0 to 7. The set of LEDs that can be
+controlled varies from model to model. Here is the mapping on the X40:
 
        0 - power
        1 - battery (orange)
@@ -376,49 +396,224 @@ the X40:
 
 All of the above can be turned on and off and can be made to blink.
 
-If you try this feature, please send me a report similar to the
-above. I'd like to provide this functionality in an user-friendly way,
-but first I need to identify the which numbers correspond to which
-LEDs on various models.
-
-Experimental: ACPI sounds - /proc/acpi/ibm/beep
------------------------------------------------
+ACPI sounds -- /proc/acpi/ibm/beep
+----------------------------------
 
 The BEEP method is used internally by the ACPI firmware to provide
-audible alerts in various situtation. This feature allows the same
+audible alerts in various situations. This feature allows the same
 sounds to be triggered manually.
 
 The commands are non-negative integer numbers:
 
-       echo 0 >/proc/acpi/ibm/beep
-       echo 1 >/proc/acpi/ibm/beep
-       echo 2 >/proc/acpi/ibm/beep
-       ...
+       echo <number> >/proc/acpi/ibm/beep
 
-The range of numbers which are used internally by various models is 0
-to 17, but it's possible that numbers outside this range are also
-valid. Here is the behavior on the X40:
+The valid <number> range is 0 to 17. Not all numbers trigger sounds
+and the sounds vary from model to model. Here is the behavior on the
+X40:
 
-       2 - two beeps, pause, third beep
+       0 - stop a sound in progress (but use 17 to stop 16)
+       2 - two beeps, pause, third beep ("low battery")
        3 - single beep
-       4 - "unable"    
+       4 - high, followed by low-pitched beep ("unable")
        5 - single beep
-       6 - "AC/DC"
+       6 - very high, followed by high-pitched beep ("AC/DC")
        7 - high-pitched beep
        9 - three short beeps
        10 - very long beep
        12 - low-pitched beep
+       15 - three high-pitched beeps repeating constantly, stop with 0
+       16 - one medium-pitched beep repeating constantly, stop with 17
+       17 - stop 16
+
+Temperature sensors -- /proc/acpi/ibm/thermal
+---------------------------------------------
+
+Most ThinkPads include six or more separate temperature sensors but
+only expose the CPU temperature through the standard ACPI methods.
+This feature shows readings from up to eight different sensors. Some
+readings may not be valid, e.g. may show large negative values. For
+example, on the X40, a typical output may be:
+
+temperatures:   42 42 45 41 36 -128 33 -128
+
+Thomas Gruber took his R51 apart and traced all six active sensors in
+his laptop (the location of sensors may vary on other models):
+
+1:  CPU
+2:  Mini PCI Module
+3:  HDD
+4:  GPU
+5:  Battery
+6:  N/A
+7:  Battery
+8:  N/A
+
+No commands can be written to this file.
+
+EXPERIMENTAL: Embedded controller reigster dump -- /proc/acpi/ibm/ecdump
+------------------------------------------------------------------------
+
+This feature is marked EXPERIMENTAL because the implementation
+directly accesses hardware registers and may not work as expected. USE
+WITH CAUTION! To use this feature, you need to supply the
+experimental=1 parameter when loading the module.
+
+This feature dumps the values of 256 embedded controller
+registers. Values which have changed since the last time the registers
+were dumped are marked with a star:
+
+[root@x40 ibm-acpi]# cat /proc/acpi/ibm/ecdump 
+EC       +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f
+EC 0x00:  a7  47  87  01  fe  96  00  08  01  00  cb  00  00  00  40  00
+EC 0x10:  00  00  ff  ff  f4  3c  87  09  01  ff  42  01  ff  ff  0d  00
+EC 0x20:  00  00  00  00  00  00  00  00  00  00  00  03  43  00  00  80
+EC 0x30:  01  07  1a  00  30  04  00  00 *85  00  00  10  00  50  00  00
+EC 0x40:  00  00  00  00  00  00  14  01  00  04  00  00  00  00  00  00
+EC 0x50:  00  c0  02  0d  00  01  01  02  02  03  03  03  03 *bc *02 *bc
+EC 0x60: *02 *bc *02  00  00  00  00  00  00  00  00  00  00  00  00  00
+EC 0x70:  00  00  00  00  00  12  30  40 *24 *26 *2c *27 *20  80 *1f  80
+EC 0x80:  00  00  00  06 *37 *0e  03  00  00  00  0e  07  00  00  00  00
+EC 0x90:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
+EC 0xa0: *ff  09  ff  09  ff  ff *64  00 *00 *00 *a2  41 *ff *ff *e0  00
+EC 0xb0:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
+EC 0xc0:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
+EC 0xd0:  03  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
+EC 0xe0:  00  00  00  00  00  00  00  00  11  20  49  04  24  06  55  03
+EC 0xf0:  31  55  48  54  35  38  57  57  08  2f  45  73  07  65  6c  1a
+
+This feature can be used to determine the register holding the fan
+speed on some models. To do that, do the following:
+
+       - make sure the battery is fully charged
+       - make sure the fan is running
+       - run 'cat /proc/acpi/ibm/ecdump' several times, once per second or so
+
+The first step makes sure various charging-related values don't
+vary. The second ensures that the fan-related values do vary, since
+the fan speed fluctuates a bit. The third will (hopefully) mark the
+fan register with a star:
+
+[root@x40 ibm-acpi]# cat /proc/acpi/ibm/ecdump 
+EC       +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f
+EC 0x00:  a7  47  87  01  fe  96  00  08  01  00  cb  00  00  00  40  00
+EC 0x10:  00  00  ff  ff  f4  3c  87  09  01  ff  42  01  ff  ff  0d  00
+EC 0x20:  00  00  00  00  00  00  00  00  00  00  00  03  43  00  00  80
+EC 0x30:  01  07  1a  00  30  04  00  00  85  00  00  10  00  50  00  00
+EC 0x40:  00  00  00  00  00  00  14  01  00  04  00  00  00  00  00  00
+EC 0x50:  00  c0  02  0d  00  01  01  02  02  03  03  03  03  bc  02  bc
+EC 0x60:  02  bc  02  00  00  00  00  00  00  00  00  00  00  00  00  00
+EC 0x70:  00  00  00  00  00  12  30  40  24  27  2c  27  21  80  1f  80
+EC 0x80:  00  00  00  06 *be  0d  03  00  00  00  0e  07  00  00  00  00
+EC 0x90:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
+EC 0xa0:  ff  09  ff  09  ff  ff  64  00  00  00  a2  41  ff  ff  e0  00
+EC 0xb0:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
+EC 0xc0:  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
+EC 0xd0:  03  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
+EC 0xe0:  00  00  00  00  00  00  00  00  11  20  49  04  24  06  55  03
+EC 0xf0:  31  55  48  54  35  38  57  57  08  2f  45  73  07  65  6c  1a
+
+Another set of values that varies often is the temperature
+readings. Since temperatures don't change vary fast, you can take
+several quick dumps to eliminate them.
+
+You can use a similar method to figure out the meaning of other
+embedded controller registers - e.g. make sure nothing else changes
+except the charging or discharging battery to determine which
+registers contain the current battery capacity, etc. If you experiment
+with this, do send me your results (including some complete dumps with
+a description of the conditions when they were taken.)
+
+EXPERIMENTAL: LCD brightness control -- /proc/acpi/ibm/brightness
+-----------------------------------------------------------------
+
+This feature is marked EXPERIMENTAL because the implementation
+directly accesses hardware registers and may not work as expected. USE
+WITH CAUTION! To use this feature, you need to supply the
+experimental=1 parameter when loading the module.
+
+This feature allows software control of the LCD brightness on ThinkPad
+models which don't have a hardware brightness slider. The available
+commands are:
+
+       echo up   >/proc/acpi/ibm/brightness
+       echo down >/proc/acpi/ibm/brightness
+       echo 'level <level>' >/proc/acpi/ibm/brightness
+
+The <level> number range is 0 to 7, although not all of them may be
+distinct. The current brightness level is shown in the file.
+
+EXPERIMENTAL: Volume control -- /proc/acpi/ibm/volume
+-----------------------------------------------------
+
+This feature is marked EXPERIMENTAL because the implementation
+directly accesses hardware registers and may not work as expected. USE
+WITH CAUTION! To use this feature, you need to supply the
+experimental=1 parameter when loading the module.
+
+This feature allows volume control on ThinkPad models which don't have
+a hardware volume knob. The available commands are:
+
+       echo up   >/proc/acpi/ibm/volume
+       echo down >/proc/acpi/ibm/volume
+       echo mute >/proc/acpi/ibm/volume
+       echo 'level <level>' >/proc/acpi/ibm/volume
+
+The <level> number range is 0 to 15 although not all of them may be
+distinct. The unmute the volume after the mute command, use either the
+up or down command (the level command will not unmute the volume).
+The current volume level and mute state is shown in the file.
+
+EXPERIMENTAL: fan speed, fan enable/disable -- /proc/acpi/ibm/fan
+-----------------------------------------------------------------
+
+This feature is marked EXPERIMENTAL because the implementation
+directly accesses hardware registers and may not work as expected. USE
+WITH CAUTION! To use this feature, you need to supply the
+experimental=1 parameter when loading the module.
+
+This feature attempts to show the current fan speed. The speed is read
+directly from the hardware registers of the embedded controller. This
+is known to work on later R, T and X series ThinkPads but may show a
+bogus value on other models.
+
+The fan may be enabled or disabled with the following commands:
+
+       echo enable  >/proc/acpi/ibm/fan
+       echo disable >/proc/acpi/ibm/fan
+
+WARNING WARNING WARNING: do not leave the fan disabled unless you are
+monitoring the temperature sensor readings and you are ready to enable
+it if necessary to avoid overheating.
+
+The fan only runs if it's enabled *and* the various temperature
+sensors which control it read high enough. On the X40, this seems to
+depend on the CPU and HDD temperatures. Specifically, the fan is
+turned on when either the CPU temperature climbs to 56 degrees or the
+HDD temperature climbs to 46 degrees. The fan is turned off when the
+CPU temperature drops to 49 degrees and the HDD temperature drops to
+41 degrees. These thresholds cannot currently be controlled.
+
+On the X31 and X40 (and ONLY on those models), the fan speed can be
+controlled to a certain degree. Once the fan is running, it can be
+forced to run faster or slower with the following command:
+
+       echo 'speed <speed>' > /proc/acpi/ibm/thermal
+
+The sustainable range of fan speeds on the X40 appears to be from
+about 3700 to about 7350. Values outside this range either do not have
+any effect or the fan speed eventually settles somewhere in that
+range. The fan cannot be stopped or started with this command.
+
+On the 570, temperature readings are not available through this
+feature and the fan control works a little differently. The fan speed
+is reported in levels from 0 (off) to 7 (max) and can be controlled
+with the following command:
 
-(I've only been able to identify a couple of them).
-
-If you try this feature, please send me a report similar to the
-above. I'd like to provide this functionality in an user-friendly way,
-but first I need to identify the which numbers correspond to which
-sounds on various models.
+       echo 'level <level>' > /proc/acpi/ibm/thermal
 
 
-Multiple Command, Module Parameters
------------------------------------
+Multiple Commands, Module Parameters
+------------------------------------
 
 Multiple commands can be written to the proc files in one shot by
 separating them with commas, for example:
@@ -451,24 +646,19 @@ scripts (included with ibm-acpi for completeness):
        /usr/local/sbin/laptop_mode -- from the Linux kernel source
                distribution, see Documentation/laptop-mode.txt
        /sbin/service -- comes with Redhat/Fedora distributions
+       /usr/sbin/hibernate -- from the Software Suspend 2 distribution,
+               see http://softwaresuspend.berlios.de/
 
-Toan T Nguyen <ntt@control.uchicago.edu> has written a SuSE powersave
-script for the X20, included in config/usr/sbin/ibm_hotkeys_X20
+Toan T Nguyen <ntt@physics.ucla.edu> notes that Suse uses the
+powersave program to suspend ('powersave --suspend-to-ram') or
+hibernate ('powersave --suspend-to-disk'). This means that the
+hibernate script is not needed on that distribution.
 
 Henrik Brix Andersen <brix@gentoo.org> has written a Gentoo ACPI event
 handler script for the X31. You can get the latest version from
 http://dev.gentoo.org/~brix/files/x31.sh
 
 David Schweikert <dws@ee.eth.ch> has written an alternative blank.sh
-script which works on Debian systems, included in
-configs/etc/acpi/actions/blank-debian.sh
-
-
-TODO
-----
-
-I'd like to implement the following features but haven't yet found the
-time and/or I don't yet know how to implement them:
-
-- UltraBay floppy drive support
-
+script which works on Debian systems. This scripts has now been
+extended to also work on Fedora systems and included as the default
+blank.sh in the distribution.
index 3d5cd7a09b2fc1aa56b6c197ee8d35df7116ec4d..d2f0c67ba1fb01e419966178138629048d2202bb 100644 (file)
@@ -1174,6 +1174,11 @@ running once the system is up.
                        New name for the ramdisk parameter.
                        See Documentation/ramdisk.txt.
 
+       rdinit=         [KNL]
+                       Format: <full_path>
+                       Run specified binary instead of /init from the ramdisk,
+                       used for early userspace startup. See initrd.
+
        reboot=         [BUGS=IA-32,BUGS=ARM,BUGS=IA-64] Rebooting mode
                        Format: <reboot_mode>[,<reboot_mode2>[,...]]
                        See arch/*/kernel/reboot.c.
index ddf907fbcc0570ba3acf83ae87a8d702e637871b..b0d50840788ebf80fd478ac9db3e8ef841716e26 100644 (file)
@@ -1,22 +1,20 @@
-From kernel/suspend.c:
+Some warnings, first.
 
  * BIG FAT WARNING *********************************************************
  *
- * If you have unsupported (*) devices using DMA...
- *                             ...say goodbye to your data.
- *
  * If you touch anything on disk between suspend and resume...
  *                             ...kiss your data goodbye.
  *
- * If your disk driver does not support suspend... (IDE does)
- *                             ...you'd better find out how to get along
- *                                without your data.
- *
- * If you change kernel command line between suspend and resume...
- *                             ...prepare for nasty fsck or worse.
+ * If you do resume from initrd after your filesystems are mounted...
+ *                             ...bye bye root partition.
+ *                     [this is actually same case as above]
  *
- * If you change your hardware while system is suspended...
- *                             ...well, it was not good idea.
+ * If you have unsupported (*) devices using DMA, you may have some
+ * problems. If your disk driver does not support suspend... (IDE does),
+ * it may cause some problems, too. If you change kernel command line
+ * between suspend and resume, it may do something wrong. If you change
+ * your hardware while system is suspended... well, it was not good idea;
+ * but it will probably only crash.
  *
  * (*) suspend/resume support is needed to make it safe.
 
@@ -30,6 +28,13 @@ echo shutdown > /sys/power/disk; echo disk > /sys/power/state
 echo platform > /sys/power/disk; echo disk > /sys/power/state
 
 
+Encrypted suspend image:
+------------------------
+If you want to store your suspend image encrypted with a temporary
+key to prevent data gathering after resume you must compile
+crypto and the aes algorithm into the kernel - modules won't work
+as they cannot be loaded at resume time.
+
 
 Article about goals and implementation of Software Suspend for Linux
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -85,11 +90,6 @@ resume.
 You have your server on UPS. Power died, and UPS is indicating 30
 seconds to failure. What do you do? Suspend to disk.
 
-Ethernet card in your server died. You want to replace it. Your
-server is not hotplug capable. What do you do? Suspend to disk,
-replace ethernet card, resume. If you are fast your users will not
-even see broken connections.
-
 
 Q: Maybe I'm missing something, but why don't the regular I/O paths work?
 
@@ -117,31 +117,6 @@ Q: Does linux support ACPI S4?
 
 A: Yes. That's what echo platform > /sys/power/disk does.
 
-Q: My machine doesn't work with ACPI. How can I use swsusp than ?
-
-A: Do a reboot() syscall with right parameters. Warning: glibc gets in
-its way, so check with strace:
-
-reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, 0xd000fce2)
-
-(Thanks to Peter Osterlund:)
-
-#include <unistd.h>
-#include <syscall.h>
-
-#define LINUX_REBOOT_MAGIC1     0xfee1dead
-#define LINUX_REBOOT_MAGIC2     672274793
-#define LINUX_REBOOT_CMD_SW_SUSPEND     0xD000FCE2
-
-int main()
-{
-    syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
-            LINUX_REBOOT_CMD_SW_SUSPEND, 0);
-    return 0;
-}
-
-Also /sys/ interface should be still present.
-
 Q: What is 'suspend2'?
 
 A: suspend2 is 'Software Suspend 2', a forked implementation of
@@ -312,9 +287,45 @@ system is shut down or suspended. Additionally use the encrypted
 suspend image to prevent sensitive data from being stolen after
 resume.
 
-Q: Why we cannot suspend to a swap file?
+Q: Why can't we suspend to a swap file?
 
 A: Because accessing swap file needs the filesystem mounted, and
 filesystem might do something wrong (like replaying the journal)
-during mount. [Probably could be solved by modifying every filesystem
-to support some kind of "really read-only!" option. Patches welcome.]
+during mount.
+
+There are few ways to get that fixed:
+
+1) Probably could be solved by modifying every filesystem to support
+some kind of "really read-only!" option. Patches welcome.
+
+2) suspend2 gets around that by storing absolute positions in on-disk
+image (and blocksize), with resume parameter pointing directly to
+suspend header.
+
+Q: Is there a maximum system RAM size that is supported by swsusp?
+
+A: It should work okay with highmem.
+
+Q: Does swsusp (to disk) use only one swap partition or can it use
+multiple swap partitions (aggregate them into one logical space)?
+
+A: Only one swap partition, sorry.
+
+Q: If my application(s) causes lots of memory & swap space to be used
+(over half of the total system RAM), is it correct that it is likely
+to be useless to try to suspend to disk while that app is running?
+
+A: No, it should work okay, as long as your app does not mlock()
+it. Just prepare big enough swap partition.
+
+Q: What information is usefull for debugging suspend-to-disk problems?
+
+A: Well, last messages on the screen are always useful. If something
+is broken, it is usually some kernel driver, therefore trying with as
+little as possible modules loaded helps a lot. I also prefer people to
+suspend from console, preferably without X running. Booting with
+init=/bin/bash, then swapon and starting suspend sequence manually
+usually does the trick. Then it is good idea to try with latest
+vanilla kernel.
+
+
index 1a44e8acb54cff7575abe6ad0e90b57416474ddd..526d6dd267ea8e38f319c30de9f6accf2967327f 100644 (file)
@@ -120,6 +120,7 @@ IBM ThinkPad T42p (2373-GTG)        s3_bios (2)
 IBM TP X20                     ??? (*)
 IBM TP X30                     s3_bios (2)
 IBM TP X31 / Type 2672-XXH      none (1), use radeontool (http://fdd.com/software/radeon/) to turn off backlight.
+IBM TP X32                     none (1), but backlight is on and video is trashed after long suspend
 IBM Thinkpad X40 Type 2371-7JG  s3_bios,s3_mode (4)
 Medion MD4220                  ??? (*)
 Samsung P35                    vbetool needed (6)
index 160e7354cd1e88dcb4b93cb9209d1c07f0284097..47e74ddc4bc9509b5856b2b8fef0067d6f4eb9d7 100644 (file)
@@ -1,5 +1,5 @@
 ====================================================================
-=    Adaptec Aic7xxx Fast -> Ultra160 Family Manager Set v6.2.28   =
+=    Adaptec Aic7xxx Fast -> Ultra160 Family Manager Set v7.0      =
 =                            README for                            =
 =                     The Linux Operating System                   =
 ====================================================================
@@ -131,6 +131,10 @@ The following information is available in this file:
       SCSI "stub" effects.
 
 2. Version History
+   7.0   (4th August, 2005)
+       - Updated driver to use SCSI transport class infrastructure
+       - Upported sequencer and core fixes from last adaptec released
+         version of the driver.
    6.2.36 (June 3rd, 2003)
         - Correct code that disables PCI parity error checking.
         - Correct and simplify handling of the ignore wide residue
index 7536823c0cb1d392b30876eb1922dffd0a5b9b07..44df89c9c04964bda448cc072b53f1623caabb71 100644 (file)
@@ -373,13 +373,11 @@ Summary:
    scsi_activate_tcq - turn on tag command queueing
    scsi_add_device - creates new scsi device (lu) instance
    scsi_add_host - perform sysfs registration and SCSI bus scan.
-   scsi_add_timer - (re-)start timer on a SCSI command.
    scsi_adjust_queue_depth - change the queue depth on a SCSI device
    scsi_assign_lock - replace default host_lock with given lock
    scsi_bios_ptable - return copy of block device's partition table
    scsi_block_requests - prevent further commands being queued to given host
    scsi_deactivate_tcq - turn off tag command queueing
-   scsi_delete_timer - cancel timer on a SCSI command.
    scsi_host_alloc - return a new scsi_host instance whose refcount==1
    scsi_host_get - increments Scsi_Host instance's refcount
    scsi_host_put - decrements Scsi_Host instance's refcount (free if 0)
@@ -457,27 +455,6 @@ struct scsi_device * scsi_add_device(struct Scsi_Host *shost,
 int scsi_add_host(struct Scsi_Host *shost, struct device * dev)
 
 
-/**
- * scsi_add_timer - (re-)start timer on a SCSI command.
- * @scmd:    pointer to scsi command instance
- * @timeout: duration of timeout in "jiffies"
- * @complete: pointer to function to call if timeout expires
- *
- *      Returns nothing
- *
- *      Might block: no
- *
- *      Notes: Each scsi command has its own timer, and as it is added
- *      to the queue, we set up the timer. When the command completes, 
- *      we cancel the timer. An LLD can use this function to change
- *      the existing timeout value.
- *
- *      Defined in: drivers/scsi/scsi_error.c
- **/
-void scsi_add_timer(struct scsi_cmnd *scmd, int timeout, 
-                    void (*complete)(struct scsi_cmnd *))
-
-
 /**
  * scsi_adjust_queue_depth - allow LLD to change queue depth on a SCSI device
  * @sdev:       pointer to SCSI device to change queue depth on
@@ -565,24 +542,6 @@ void scsi_block_requests(struct Scsi_Host * shost)
 void scsi_deactivate_tcq(struct scsi_device *sdev, int depth)
 
 
-/**
- * scsi_delete_timer - cancel timer on a SCSI command.
- * @scmd:    pointer to scsi command instance
- *
- *      Returns 1 if able to cancel timer else 0 (i.e. too late or already
- *      cancelled).
- *
- *      Might block: no [may in the future if it invokes del_timer_sync()]
- *
- *      Notes: All commands issued by upper levels already have a timeout
- *      associated with them. An LLD can use this function to cancel the
- *      timer.
- *
- *      Defined in: drivers/scsi/scsi_error.c
- **/
-int scsi_delete_timer(struct scsi_cmnd *scmd)
-
-
 /**
  * scsi_host_alloc - create a scsi host adapter instance and perform basic
  *                   initialization.
index 0f3b2405d09edf30c1f0251ce4c7e51d63e960f1..c1237a9255055635475552c519f8199303789c8e 100644 (file)
@@ -99,6 +99,7 @@ statically linked into the kernel). Those options are:
                                SONYPI_MEYE_MASK                0x0400
                                SONYPI_MEMORYSTICK_MASK         0x0800
                                SONYPI_BATTERY_MASK             0x1000
+                               SONYPI_WIRELESS_MASK            0x2000
 
        useinput:       if set (which is the default) two input devices are
                        created, one which interprets the jogdial events as
@@ -137,6 +138,15 @@ Bugs:
          speed handling etc). Use ACPI instead of APM if it works on your
          laptop.
 
+       - sonypi lacks the ability to distinguish between certain key
+         events on some models.
+
+       - some models with the nvidia card (geforce go 6200 tc) uses a
+         different way to adjust the backlighting of the screen. There
+         is a userspace utility to adjust the brightness on those models,
+         which can be downloaded from
+         http://www.acc.umu.se/~erikw/program/smartdimmer-0.1.tar.bz2
+
        - since all development was done by reverse engineering, there is
          _absolutely no guarantee_ that this driver will not crash your
          laptop. Permanently.
index 7e1f67130a16d595d2a7f5879dce0469993de085..8e4e829210708b741327b1f3aeefd032bdd3dd6c 100644 (file)
@@ -202,13 +202,6 @@ P: Colin Leroy
 M:     colin@colino.net
 S:     Maintained
 
-ADVANSYS SCSI DRIVER
-P:     Bob Frey
-M:     linux@advansys.com
-W:     http://www.advansys.com/linux.html
-L:     linux-scsi@vger.kernel.org
-S:     Maintained
-
 AEDSP16 DRIVER
 P:     Riccardo Facchetti
 M:     fizban@tin.it
@@ -696,6 +689,11 @@ M: dz@debian.org
 W:     http://www.debian.org/~dz/i8k/
 S:     Maintained
 
+DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas)
+P:     Doug Warzecha
+M:     Douglas_Warzecha@dell.com
+S:     Maintained
+
 DEVICE-MAPPER
 P:     Alasdair Kergon
 L:     dm-devel@redhat.com
@@ -824,6 +822,13 @@ L: emu10k1-devel@lists.sourceforge.net
 W:     http://sourceforge.net/projects/emu10k1/
 S:     Maintained
 
+EMULEX LPFC FC SCSI DRIVER
+P:      James Smart
+M:      james.smart@emulex.com
+L:      linux-scsi@vger.kernel.org
+W:      http://sourceforge.net/projects/lpfcxxxx
+S:      Supported
+
 EPSON 1355 FRAMEBUFFER DRIVER
 P:     Christopher Hoover
 M:     ch@murgatroid.com, ch@hpl.hp.com
@@ -879,7 +884,7 @@ S:  Maintained
 
 FILESYSTEMS (VFS and infrastructure)
 P:     Alexander Viro
-M:     viro@parcelfarce.linux.theplanet.co.uk
+M:     viro@zeniv.linux.org.uk
 S:     Maintained
 
 FIRMWARE LOADER (request_firmware)
@@ -1967,7 +1972,6 @@ S:        Supported
 
 ROCKETPORT DRIVER
 P:     Comtrol Corp.
-M:     support@comtrol.com
 W:     http://www.comtrol.com
 S:     Maintained
 
index 189d5eababa8d15708e15e354e0eb372d5e7fad1..786491f9ceb2c072ae6108615211b1bf3d95306c 100644 (file)
@@ -479,6 +479,9 @@ config EISA
        depends on ALPHA_GENERIC || ALPHA_JENSEN || ALPHA_ALCOR || ALPHA_MIKASA || ALPHA_SABLE || ALPHA_LYNX || ALPHA_NORITAKE || ALPHA_RAWHIDE
        default y
 
+config ARCH_MAY_HAVE_PC_FDC
+       def_bool y
+
 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
index 8226c5cd788ccb142c3676727fb06161cc5cc574..67be50b7d80afba730e18746ad8e8ac63acc6068 100644 (file)
@@ -149,7 +149,7 @@ irqreturn_t timer_interrupt(int irq, void *dev, struct pt_regs * regs)
         * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
         * called as close as possible to 500 ms before the new second starts.
         */
-       if ((time_status & STA_UNSYNC) == 0
+       if (ntp_synced()
            && xtime.tv_sec > state.last_rtc_update + 660
            && xtime.tv_nsec >= 500000 - ((unsigned) TICK_SIZE) / 2
            && xtime.tv_nsec <= 500000 + ((unsigned) TICK_SIZE) / 2) {
@@ -502,10 +502,7 @@ do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
 
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
index 68dfdba71d74126512efcd4996282ffce11b63a4..0f2899b4159dfb4f12c4cc2d69f411dd9d88e0af 100644 (file)
@@ -64,6 +64,9 @@ config GENERIC_CALIBRATE_DELAY
 config GENERIC_BUST_SPINLOCK
        bool
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+
 config GENERIC_ISA_DMA
        bool
 
@@ -150,6 +153,7 @@ config ARCH_RPC
        select ARCH_ACORN
        select FIQ
        select TIMER_ACORN
+       select ARCH_MAY_HAVE_PC_FDC
        help
          On the Acorn Risc-PC, Linux can support the internal IDE disk and
          CD-ROM interface, serial and parallel port, and the floppy drive.
index d6bf8a2b090d833f6c16e5fa2e81d89c490497c2..59ad69640d6bde4e26cb8b41279ca32aa1b47c65 100644 (file)
@@ -7,7 +7,8 @@
  * so we have to figure out the machine for ourselves...
  *
  * Support for Poodle, Corgi (SL-C700), Shepherd (SL-C750)
- * and Husky (SL-C760).
+ * Husky (SL-C760), Tosa (SL-C6000), Spitz (SL-C3000),
+ * Akita (SL-C1000) and Borzoi (SL-C3100).
  *
  */
 
 
 __SharpSL_start:
 
+/* Check for TC6393 - if found we have a Tosa */
+       ldr     r7, .TOSAID
+       mov     r1, #0x10000000         @ Base address of TC6393 chip
+       mov     r6, #0x03
+       ldrh    r3, [r1, #8]            @ Load TC6393XB Revison: This is 0x0003
+       cmp     r6, r3
+       beq     .SHARPEND               @ Success -> tosa
+
+/* Check for pxa270 - if found, branch */
+       mrc p15, 0, r4, c0, c0          @ Get Processor ID
+       and     r4, r4, #0xffffff00
+       ldr     r3, .PXA270ID
+       cmp     r4, r3
+       beq     .PXA270
+
+/* Check for w100 - if not found we have a Poodle */
        ldr     r1, .W100ADDR           @ Base address of w100 chip + regs offset
 
        mov r6, #0x31                   @ Load Magic Init value
@@ -30,7 +47,7 @@ __SharpSL_start:
        mov r5, #0x3000
 .W100LOOP:
        subs r5, r5, #1
-    bne .W100LOOP
+       bne .W100LOOP
        mov r6, #0x30                   @ Load 2nd Magic Init value
        str     r6, [r1, #0x280]        @ to SCRATCH_UMSK
 
@@ -40,45 +57,52 @@ __SharpSL_start:
        cmp     r6, r3
        bne     .SHARPEND                       @ We have no w100 - Poodle
 
-       mrc p15, 0, r6, c0, c0  @ Get Processor ID
-       and     r6, r6, #0xffffff00
+/* Check for pxa250 - if found we have a Corgi */
        ldr     r7, .CORGIID
        ldr     r3, .PXA255ID
-       cmp     r6, r3
+       cmp     r4, r3
        blo     .SHARPEND                       @ We have a PXA250 - Corgi
 
-       mov     r1, #0x0c000000         @ Base address of NAND chip
-       ldrb    r3, [r1, #24]   @ Load FLASHCTL
-       bic     r3, r3, #0x11           @ SET NCE
-       orr     r3, r3, #0x0a           @ SET CLR + FLWP
-       strb    r3, [r1, #24]   @ Save to FLASHCTL
-       mov     r2, #0x90               @ Command "readid"
-       strb    r2, [r1, #20]   @ Save to FLASHIO
-       bic     r3, r3, #2                      @ CLR CLE
-       orr     r3, r3, #4                      @ SET ALE
-       strb    r3, [r1, #24]   @ Save to FLASHCTL
-       mov             r2, #0                  @ Address 0x00
-       strb    r2, [r1, #20]   @ Save to FLASHIO
-       bic     r3, r3, #4                      @ CLR ALE
-       strb    r3, [r1, #24]   @ Save to FLASHCTL
-.SHARP1:
-       ldrb    r3, [r1, #24]   @ Load FLASHCTL
-       tst     r3, #32                         @ Is chip ready?
-       beq     .SHARP1
-       ldrb    r2, [r1, #20]   @ NAND Manufacturer ID
-       ldrb    r3, [r1, #20]   @ NAND Chip ID
+/* Check for 64MiB flash - if found we have a Shepherd */
+       bl      get_flash_ids
        ldr     r7, .SHEPHERDID
        cmp     r3, #0x76                       @ 64MiB flash
        beq     .SHARPEND                       @ We have Shepherd
+
+/* Must be a Husky */
        ldr     r7, .HUSKYID            @ Must be Husky
        b .SHARPEND
 
+.PXA270:
+/* Check for 16MiB flash - if found we have Spitz */
+       bl      get_flash_ids
+       ldr     r7, .SPITZID
+       cmp     r3, #0x73                       @ 16MiB flash
+       beq     .SHARPEND                       @ We have Spitz
+
+/* Check for a second SCOOP chip - if found we have Borzoi */
+       ldr     r1, .SCOOP2ADDR
+       ldr     r7, .BORZOIID
+       mov     r6, #0x0140
+       strh    r6, [r1]
+       ldrh    r6, [r1]
+       cmp     r6, #0x0140
+       beq     .SHARPEND                       @ We have Borzoi
+
+/* Must be Akita */
+       ldr     r7, .AKITAID
+       b       .SHARPEND                       @ We have Borzoi
+
 .PXA255ID:
        .word   0x69052d00              @ PXA255 Processor ID
+.PXA270ID:
+       .word   0x69054100              @ PXA270 Processor ID
 .W100ID:
        .word   0x57411002              @ w100 Chip ID
 .W100ADDR:
        .word   0x08010000              @ w100 Chip ID Reg Address
+.SCOOP2ADDR:
+       .word   0x08800040
 .POODLEID:
        .word   MACH_TYPE_POODLE
 .CORGIID:
@@ -87,6 +111,41 @@ __SharpSL_start:
        .word   MACH_TYPE_SHEPHERD
 .HUSKYID:
        .word   MACH_TYPE_HUSKY
-.SHARPEND:
+.TOSAID:
+       .word   MACH_TYPE_TOSA
+.SPITZID:
+       .word   MACH_TYPE_SPITZ
+.AKITAID:
+       .word   MACH_TYPE_AKITA
+.BORZOIID:
+       .word   MACH_TYPE_BORZOI
 
+/*
+ * Return: r2 - NAND Manufacturer ID
+ *         r3 - NAND Chip ID
+ * Corrupts: r1
+ */
+get_flash_ids:
+       mov     r1, #0x0c000000         @ Base address of NAND chip
+       ldrb    r3, [r1, #24]           @ Load FLASHCTL
+       bic     r3, r3, #0x11           @ SET NCE
+       orr     r3, r3, #0x0a           @ SET CLR + FLWP
+       strb    r3, [r1, #24]           @ Save to FLASHCTL
+       mov     r2, #0x90               @ Command "readid"
+       strb    r2, [r1, #20]           @ Save to FLASHIO
+       bic     r3, r3, #2              @ CLR CLE
+       orr     r3, r3, #4              @ SET ALE
+       strb    r3, [r1, #24]           @ Save to FLASHCTL
+       mov     r2, #0                  @ Address 0x00
+       strb    r2, [r1, #20]           @ Save to FLASHIO
+       bic     r3, r3, #4              @ CLR ALE
+       strb    r3, [r1, #24]           @ Save to FLASHCTL
+.fids1:
+       ldrb    r3, [r1, #24]           @ Load FLASHCTL
+       tst     r3, #32                 @ Is chip ready?
+       beq     .fids1
+       ldrb    r2, [r1, #20]           @ NAND Manufacturer ID
+       ldrb    r3, [r1, #20]           @ NAND Chip ID
+       mov     pc, lr
 
+.SHARPEND:
index 24955263b0968b06b17809bb363da489bf667b48..4198677cd394c81cebbd5eb068e82fb4fc02e9fa 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.13-rc2
-# Fri Jul  8 04:49:34 2005
+# Linux kernel version: 2.6.13
+# Mon Sep  5 18:07:12 2005
 #
 CONFIG_ARM=y
 CONFIG_MMU=y
@@ -102,9 +102,11 @@ CONFIG_OMAP_MUX_WARNINGS=y
 # CONFIG_OMAP_MPU_TIMER is not set
 CONFIG_OMAP_32K_TIMER=y
 CONFIG_OMAP_32K_TIMER_HZ=128
+# CONFIG_OMAP_DM_TIMER is not set
 CONFIG_OMAP_LL_DEBUG_UART1=y
 # CONFIG_OMAP_LL_DEBUG_UART2 is not set
 # CONFIG_OMAP_LL_DEBUG_UART3 is not set
+CONFIG_OMAP_SERIAL_WAKE=y
 
 #
 # OMAP Core Type
@@ -166,7 +168,6 @@ CONFIG_ISA_DMA_API=y
 #
 # Kernel Features
 #
-# CONFIG_SMP is not set
 CONFIG_PREEMPT=y
 CONFIG_NO_IDLE_HZ=y
 # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
@@ -230,91 +231,82 @@ CONFIG_PM=y
 # CONFIG_APM is not set
 
 #
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
-
-#
-# Memory Technology Devices (MTD)
+# Networking
 #
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=3
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
+CONFIG_NET=y
 
 #
-# User Modules And Translation Layers
+# Networking options
 #
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP 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_FIB_HASH=y
+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_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_IP_TCPDIAG=y
+# CONFIG_IP_TCPDIAG_IPV6 is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
 
 #
-# RAM/ROM/Flash chip drivers
+# SCTP Configuration (EXPERIMENTAL)
 #
-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_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_XIP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK 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_SCHED is not set
+# CONFIG_NET_CLS_ROUTE is not set
 
 #
-# Mapping drivers for chip access
+# Network testing
 #
-# 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
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 
 #
-# Self-contained MTD device drivers
+# Device Drivers
 #
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
 
 #
-# Disk-On-Chip Device Drivers
+# Generic Driver Options
 #
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
 
 #
-# NAND Flash Device Drivers
+# Memory Technology Devices (MTD)
 #
-# CONFIG_MTD_NAND is not set
+# CONFIG_MTD is not set
 
 #
 # Parallel port support
@@ -403,72 +395,8 @@ CONFIG_SCSI_PROC_FS=y
 #
 
 #
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP 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_FIB_HASH=y
-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_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
+# Network device support
 #
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK 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
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -518,6 +446,8 @@ CONFIG_SLIP_COMPRESSED=y
 # CONFIG_SLIP_MODE_SLIP6 is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -615,77 +545,15 @@ CONFIG_WATCHDOG_NOWAYOUT=y
 #
 # I2C support
 #
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ISA is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
+# CONFIG_I2C is not set
+# CONFIG_I2C_SENSOR is not set
+CONFIG_ISP1301_OMAP=y
 
 #
-# Hardware Sensors Chip support
+# Hardware Monitoring support
 #
-# CONFIG_I2C_SENSOR is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-
-#
-# Other I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-CONFIG_ISP1301_OMAP=y
-CONFIG_TPS65010=y
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
 
 #
 # Misc devices
@@ -756,15 +624,9 @@ 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_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 is not set
-# CONFIG_SOUND_TVMIXER is not set
 # CONFIG_SOUND_AD1980 is not set
 
 #
@@ -810,6 +672,7 @@ CONFIG_EXT2_FS=y
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
 
 #
 # XFS support
@@ -817,6 +680,7 @@ CONFIG_EXT2_FS=y
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
@@ -857,15 +721,6 @@ CONFIG_RAMFS=y
 # 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=2
-# CONFIG_JFFS2_FS_NAND is not set
-# CONFIG_JFFS2_FS_NOR_ECC is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
 CONFIG_CRAMFS=y
 # CONFIG_VXFS_FS is not set
 # CONFIG_HPFS_FS is not set
@@ -1007,4 +862,3 @@ CONFIG_CRYPTO_DES=y
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
 CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
index 8880482dcbffd4dbbfb20ea98def232de3b439d1..69449a818dccecd78ac290032124c9998e746d4a 100644 (file)
@@ -102,7 +102,7 @@ static unsigned long next_rtc_update;
  */
 static inline void do_set_rtc(void)
 {
-       if (time_status & STA_UNSYNC || set_rtc == NULL)
+       if (!ntp_synced() || set_rtc == NULL)
                return;
 
        if (next_rtc_update &&
@@ -292,10 +292,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
        return 0;
index 324d9edeec38f3e1dc70cff7248705e0837429ea..bdd257921cfbe639cd0adfb8c30c4febd79487cc 100644 (file)
@@ -87,6 +87,7 @@ config FOOTBRIDGE_ADDIN
 
 # EBSA285 board in either host or addin mode
 config ARCH_EBSA285
+       select ARCH_MAY_HAVE_PC_FDC
        bool
 
 endif
index d53af16695023d16f7867b74c35b56c2dfa952cc..0039793b694a20cd63da8930386a5ba3c6cbf9d1 100644 (file)
@@ -60,7 +60,7 @@ static unsigned long iop321_gettimeoffset(void)
        /*
         * Now convert them to usec.
         */
-       usec = (unsigned long)(elapsed * (tick_nsec / 1000)) / LATCH;
+       usec = (unsigned long)(elapsed / (CLOCK_TICK_RATE/1000000));
 
        return usec;
 }
index 1a6d9d661e4b8ee851ef0867be104309eebe917f..8eddfac7e2b046450d74a6074837b9f73e0fff1b 100644 (file)
@@ -58,7 +58,7 @@ static unsigned long iop331_gettimeoffset(void)
        /*
         * Now convert them to usec.
         */
-       usec = (unsigned long)(elapsed * (tick_nsec / 1000)) / LATCH;
+       usec = (unsigned long)(elapsed / (CLOCK_TICK_RATE/1000000));
 
        return usec;
 }
index 781d10ae00b7dfc5771fd28d99eab154a8de1706..098c817a7fb82a8e6fc7f38c24757ec620f6e47e 100644 (file)
@@ -382,7 +382,7 @@ static void ixp2000_GPIO_irq_unmask(unsigned int irq)
 static struct irqchip ixp2000_GPIO_irq_chip = {
        .ack            = ixp2000_GPIO_irq_mask_ack,
        .mask           = ixp2000_GPIO_irq_mask,
-       .unmask         = ixp2000_GPIO_irq_unmask
+       .unmask         = ixp2000_GPIO_irq_unmask,
        .set_type       = ixp2000_GPIO_irq_type,
 };
 
index 0422e906cc9a64e4ff11d43e866049a72ba52cd0..52ad11328e961225465a6e461b5aa8d564039a45 100644 (file)
@@ -179,17 +179,17 @@ static void ixp4xx_irq_level_unmask(unsigned int irq)
 }
 
 static struct irqchip ixp4xx_irq_level_chip = {
-       .ack    = ixp4xx_irq_mask,
-       .mask   = ixp4xx_irq_mask,
-       .unmask = ixp4xx_irq_level_unmask,
-       .type   = ixp4xx_set_irq_type
+       .ack            = ixp4xx_irq_mask,
+       .mask           = ixp4xx_irq_mask,
+       .unmask         = ixp4xx_irq_level_unmask,
+       .set_type       = ixp4xx_set_irq_type,
 };
 
 static struct irqchip ixp4xx_irq_edge_chip = {
-       .ack    = ixp4xx_irq_ack,
-       .mask   = ixp4xx_irq_mask,
-       .unmask = ixp4xx_irq_unmask,
-       .type   = ixp4xx_set_irq_type
+       .ack            = ixp4xx_irq_ack,
+       .mask           = ixp4xx_irq_mask,
+       .unmask         = ixp4xx_irq_unmask,
+       .set_type       = ixp4xx_set_irq_type,
 };
 
 static void ixp4xx_config_irq(unsigned irq, enum ixp4xx_irq_type type)
index a11b6d807352ccf93add9b87dae0069f204d6bc3..afd5d67e4ae73625e25a88bcf93ef79b34323602 100644 (file)
@@ -165,10 +165,10 @@ static struct omap_irq_bank omap1610_irq_banks[] = {
 #endif
 
 static struct irqchip omap_irq_chip = {
-       .ack    = omap_mask_ack_irq,
-       .mask   = omap_mask_irq,
-       .unmask = omap_unmask_irq,
-       .wake   = omap_wake_irq,
+       .ack            = omap_mask_ack_irq,
+       .mask           = omap_mask_irq,
+       .unmask         = omap_unmask_irq,
+       .set_wake       = omap_wake_irq,
 };
 
 void __init omap_init_irq(void)
index efc2f657184edaf0245863b8782510985f28eb00..33dae99ec2d843290105013226519a47e3a50daf 100644 (file)
@@ -11,7 +11,7 @@ obj-$(CONFIG_PXA27x) += pxa27x.o
 obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o
 obj-$(CONFIG_MACH_MAINSTONE) += mainstone.o
 obj-$(CONFIG_ARCH_PXA_IDP) += idp.o
-obj-$(CONFIG_PXA_SHARP_C7xx)   += corgi.o corgi_ssp.o ssp.o
+obj-$(CONFIG_PXA_SHARP_C7xx)   += corgi.o corgi_ssp.o corgi_lcd.o ssp.o
 obj-$(CONFIG_MACH_POODLE)      += poodle.o
 
 # Support for blinky lights
index 06ea730e8675f713784382b6d76a91e0d0695545..29185acdd9e1ea7e6eb7a8f9182e18bac37f35b1 100644 (file)
@@ -39,7 +39,6 @@
 
 #include <asm/mach/sharpsl_param.h>
 #include <asm/hardware/scoop.h>
-#include <video/w100fb.h>
 
 #include "generic.h"
 
@@ -87,7 +86,7 @@ struct platform_device corgiscoop_device = {
  * also use scoop functions and this makes the power up/down order
  * work correctly.
  */
-static struct platform_device corgissp_device = {
+struct platform_device corgissp_device = {
        .name           = "corgi-ssp",
        .dev            = {
                .parent = &corgiscoop_device.dev,
@@ -97,41 +96,33 @@ static struct platform_device corgissp_device = {
 
 
 /*
- * Corgi w100 Frame Buffer Device
+ * Corgi Backlight Device
  */
-static struct w100fb_mach_info corgi_fb_info = {
-       .w100fb_ssp_send        = corgi_ssp_lcdtg_send,
-       .comadj                         = -1,
-       .phadadj                        = -1,
-};
-
-static struct resource corgi_fb_resources[] = {
-       [0] = {
-               .start          = 0x08000000,
-               .end            = 0x08ffffff,
-               .flags          = IORESOURCE_MEM,
+static struct platform_device corgibl_device = {
+       .name           = "corgi-bl",
+       .dev            = {
+               .parent = &corgifb_device.dev,
        },
+       .id             = -1,
 };
 
-static struct platform_device corgifb_device = {
-       .name           = "w100fb",
+
+/*
+ * Corgi Keyboard Device
+ */
+static struct platform_device corgikbd_device = {
+       .name           = "corgi-keyboard",
        .id             = -1,
-       .dev            = {
-               .platform_data  = &corgi_fb_info,
-               .parent = &corgissp_device.dev,
-       },
-       .num_resources  = ARRAY_SIZE(corgi_fb_resources),
-       .resource       = corgi_fb_resources,
 };
 
 
 /*
- * Corgi Backlight Device
+ * Corgi Touch Screen Device
  */
-static struct platform_device corgibl_device = {
-       .name           = "corgi-bl",
+static struct platform_device corgits_device = {
+       .name           = "corgi-ts",
        .dev            = {
-               .parent = &corgifb_device.dev,
+               .parent = &corgissp_device.dev,
        },
        .id             = -1,
 };
@@ -199,6 +190,11 @@ static void corgi_mci_setpower(struct device *dev, unsigned int vdd)
        }
 }
 
+static int corgi_mci_get_ro(struct device *dev)
+{
+       return GPLR(CORGI_GPIO_nSD_WP) & GPIO_bit(CORGI_GPIO_nSD_WP);
+}
+
 static void corgi_mci_exit(struct device *dev, void *data)
 {
        free_irq(CORGI_IRQ_GPIO_nSD_DETECT, data);
@@ -208,11 +204,13 @@ static void corgi_mci_exit(struct device *dev, void *data)
 static struct pxamci_platform_data corgi_mci_platform_data = {
        .ocr_mask       = MMC_VDD_32_33|MMC_VDD_33_34,
        .init           = corgi_mci_init,
+       .get_ro         = corgi_mci_get_ro,
        .setpower       = corgi_mci_setpower,
        .exit           = corgi_mci_exit,
 };
 
 
+
 /*
  * USB Device Controller
  */
@@ -238,14 +236,13 @@ static struct platform_device *devices[] __initdata = {
        &corgiscoop_device,
        &corgissp_device,
        &corgifb_device,
+       &corgikbd_device,
        &corgibl_device,
+       &corgits_device,
 };
 
 static void __init corgi_init(void)
 {
-       corgi_fb_info.comadj=sharpsl_param.comadj;
-       corgi_fb_info.phadadj=sharpsl_param.phadadj;
-
        pxa_gpio_mode(CORGI_GPIO_USB_PULLUP | GPIO_OUT);
        pxa_set_udc_info(&udc_info);
        pxa_set_mci_info(&corgi_mci_platform_data);
diff --git a/arch/arm/mach-pxa/corgi_lcd.c b/arch/arm/mach-pxa/corgi_lcd.c
new file mode 100644 (file)
index 0000000..deac29c
--- /dev/null
@@ -0,0 +1,396 @@
+/*
+ * linux/drivers/video/w100fb.c
+ *
+ * Corgi LCD Specific Code for ATI Imageon w100 (Wallaby)
+ *
+ * Copyright (C) 2005 Richard Purdie
+ *
+ * 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 <linux/delay.h>
+#include <linux/kernel.h>
+#include <linux/device.h>
+#include <asm/arch/corgi.h>
+#include <asm/mach/sharpsl_param.h>
+#include <video/w100fb.h>
+
+/* Register Addresses */
+#define RESCTL_ADRS     0x00
+#define PHACTRL_ADRS    0x01
+#define DUTYCTRL_ADRS   0x02
+#define POWERREG0_ADRS  0x03
+#define POWERREG1_ADRS  0x04
+#define GPOR3_ADRS      0x05
+#define PICTRL_ADRS     0x06
+#define POLCTRL_ADRS    0x07
+
+/* Resgister Bit Definitions */
+#define RESCTL_QVGA     0x01
+#define RESCTL_VGA      0x00
+
+#define POWER1_VW_ON    0x01  /* VW Supply FET ON */
+#define POWER1_GVSS_ON  0x02  /* GVSS(-8V) Power Supply ON */
+#define POWER1_VDD_ON   0x04  /* VDD(8V),SVSS(-4V) Power Supply ON */
+
+#define POWER1_VW_OFF   0x00  /* VW Supply FET OFF */
+#define POWER1_GVSS_OFF 0x00  /* GVSS(-8V) Power Supply OFF */
+#define POWER1_VDD_OFF  0x00  /* VDD(8V),SVSS(-4V) Power Supply OFF */
+
+#define POWER0_COM_DCLK 0x01  /* COM Voltage DC Bias DAC Serial Data Clock */
+#define POWER0_COM_DOUT 0x02  /* COM Voltage DC Bias DAC Serial Data Out */
+#define POWER0_DAC_ON   0x04  /* DAC Power Supply ON */
+#define POWER0_COM_ON   0x08  /* COM Powewr Supply ON */
+#define POWER0_VCC5_ON  0x10  /* VCC5 Power Supply ON */
+
+#define POWER0_DAC_OFF  0x00  /* DAC Power Supply OFF */
+#define POWER0_COM_OFF  0x00  /* COM Powewr Supply OFF */
+#define POWER0_VCC5_OFF 0x00  /* VCC5 Power Supply OFF */
+
+#define PICTRL_INIT_STATE      0x01
+#define PICTRL_INIOFF          0x02
+#define PICTRL_POWER_DOWN      0x04
+#define PICTRL_COM_SIGNAL_OFF  0x08
+#define PICTRL_DAC_SIGNAL_OFF  0x10
+
+#define POLCTRL_SYNC_POL_FALL  0x01
+#define POLCTRL_EN_POL_FALL    0x02
+#define POLCTRL_DATA_POL_FALL  0x04
+#define POLCTRL_SYNC_ACT_H     0x08
+#define POLCTRL_EN_ACT_L       0x10
+
+#define POLCTRL_SYNC_POL_RISE  0x00
+#define POLCTRL_EN_POL_RISE    0x00
+#define POLCTRL_DATA_POL_RISE  0x00
+#define POLCTRL_SYNC_ACT_L     0x00
+#define POLCTRL_EN_ACT_H       0x00
+
+#define PHACTRL_PHASE_MANUAL   0x01
+#define DEFAULT_PHAD_QVGA     (9)
+#define DEFAULT_COMADJ        (125)
+
+/*
+ * This is only a psuedo I2C interface. We can't use the standard kernel
+ * routines as the interface is write only. We just assume the data is acked...
+ */
+static void lcdtg_ssp_i2c_send(u8 data)
+{
+       corgi_ssp_lcdtg_send(POWERREG0_ADRS, data);
+       udelay(10);
+}
+
+static void lcdtg_i2c_send_bit(u8 data)
+{
+       lcdtg_ssp_i2c_send(data);
+       lcdtg_ssp_i2c_send(data | POWER0_COM_DCLK);
+       lcdtg_ssp_i2c_send(data);
+}
+
+static void lcdtg_i2c_send_start(u8 base)
+{
+       lcdtg_ssp_i2c_send(base | POWER0_COM_DCLK | POWER0_COM_DOUT);
+       lcdtg_ssp_i2c_send(base | POWER0_COM_DCLK);
+       lcdtg_ssp_i2c_send(base);
+}
+
+static void lcdtg_i2c_send_stop(u8 base)
+{
+       lcdtg_ssp_i2c_send(base);
+       lcdtg_ssp_i2c_send(base | POWER0_COM_DCLK);
+       lcdtg_ssp_i2c_send(base | POWER0_COM_DCLK | POWER0_COM_DOUT);
+}
+
+static void lcdtg_i2c_send_byte(u8 base, u8 data)
+{
+       int i;
+       for (i = 0; i < 8; i++) {
+               if (data & 0x80)
+                       lcdtg_i2c_send_bit(base | POWER0_COM_DOUT);
+               else
+                       lcdtg_i2c_send_bit(base);
+               data <<= 1;
+       }
+}
+
+static void lcdtg_i2c_wait_ack(u8 base)
+{
+       lcdtg_i2c_send_bit(base);
+}
+
+static void lcdtg_set_common_voltage(u8 base_data, u8 data)
+{
+       /* Set Common Voltage to M62332FP via I2C */
+       lcdtg_i2c_send_start(base_data);
+       lcdtg_i2c_send_byte(base_data, 0x9c);
+       lcdtg_i2c_wait_ack(base_data);
+       lcdtg_i2c_send_byte(base_data, 0x00);
+       lcdtg_i2c_wait_ack(base_data);
+       lcdtg_i2c_send_byte(base_data, data);
+       lcdtg_i2c_wait_ack(base_data);
+       lcdtg_i2c_send_stop(base_data);
+}
+
+/* Set Phase Adjuct */
+static void lcdtg_set_phadadj(struct w100fb_par *par)
+{
+       int adj;
+       switch(par->xres) {
+               case 480:
+               case 640:
+                       /* Setting for VGA */
+                       adj = sharpsl_param.phadadj;
+                       if (adj < 0) {
+                               adj = PHACTRL_PHASE_MANUAL;
+                       } else {
+                               adj = ((adj & 0x0f) << 1) | PHACTRL_PHASE_MANUAL;
+                       }
+                       break;
+               case 240:
+               case 320:
+               default:
+                       /* Setting for QVGA */
+                       adj = (DEFAULT_PHAD_QVGA << 1) | PHACTRL_PHASE_MANUAL;
+                       break;
+       }
+
+       corgi_ssp_lcdtg_send(PHACTRL_ADRS, adj);
+}
+
+static int lcd_inited;
+
+static void lcdtg_hw_init(struct w100fb_par *par)
+{
+       if (!lcd_inited) {
+               int comadj;
+
+               /* Initialize Internal Logic & Port */
+               corgi_ssp_lcdtg_send(PICTRL_ADRS, PICTRL_POWER_DOWN | PICTRL_INIOFF | PICTRL_INIT_STATE
+                               | PICTRL_COM_SIGNAL_OFF | PICTRL_DAC_SIGNAL_OFF);
+
+               corgi_ssp_lcdtg_send(POWERREG0_ADRS, POWER0_COM_DCLK | POWER0_COM_DOUT | POWER0_DAC_OFF
+                               | POWER0_COM_OFF | POWER0_VCC5_OFF);
+
+               corgi_ssp_lcdtg_send(POWERREG1_ADRS, POWER1_VW_OFF | POWER1_GVSS_OFF | POWER1_VDD_OFF);
+
+               /* VDD(+8V), SVSS(-4V) ON */
+               corgi_ssp_lcdtg_send(POWERREG1_ADRS, POWER1_VW_OFF | POWER1_GVSS_OFF | POWER1_VDD_ON);
+               mdelay(3);
+
+               /* DAC ON */
+               corgi_ssp_lcdtg_send(POWERREG0_ADRS, POWER0_COM_DCLK | POWER0_COM_DOUT | POWER0_DAC_ON
+                               | POWER0_COM_OFF | POWER0_VCC5_OFF);
+
+               /* INIB = H, INI = L  */
+               /* PICTL[0] = H , PICTL[1] = PICTL[2] = PICTL[4] = L */
+               corgi_ssp_lcdtg_send(PICTRL_ADRS, PICTRL_INIT_STATE | PICTRL_COM_SIGNAL_OFF);
+
+               /* Set Common Voltage */
+               comadj = sharpsl_param.comadj;
+               if (comadj < 0)
+                       comadj = DEFAULT_COMADJ;
+               lcdtg_set_common_voltage((POWER0_DAC_ON | POWER0_COM_OFF | POWER0_VCC5_OFF), comadj);
+
+               /* VCC5 ON, DAC ON */
+               corgi_ssp_lcdtg_send(POWERREG0_ADRS, POWER0_COM_DCLK | POWER0_COM_DOUT | POWER0_DAC_ON |
+                               POWER0_COM_OFF | POWER0_VCC5_ON);
+
+               /* GVSS(-8V) ON, VDD ON */
+               corgi_ssp_lcdtg_send(POWERREG1_ADRS, POWER1_VW_OFF | POWER1_GVSS_ON | POWER1_VDD_ON);
+               mdelay(2);
+
+               /* COM SIGNAL ON (PICTL[3] = L) */
+               corgi_ssp_lcdtg_send(PICTRL_ADRS, PICTRL_INIT_STATE);
+
+               /* COM ON, DAC ON, VCC5_ON */
+               corgi_ssp_lcdtg_send(POWERREG0_ADRS, POWER0_COM_DCLK | POWER0_COM_DOUT | POWER0_DAC_ON
+                               | POWER0_COM_ON | POWER0_VCC5_ON);
+
+               /* VW ON, GVSS ON, VDD ON */
+               corgi_ssp_lcdtg_send(POWERREG1_ADRS, POWER1_VW_ON | POWER1_GVSS_ON | POWER1_VDD_ON);
+
+               /* Signals output enable */
+               corgi_ssp_lcdtg_send(PICTRL_ADRS, 0);
+
+               /* Set Phase Adjuct */
+               lcdtg_set_phadadj(par);
+
+               /* Initialize for Input Signals from ATI */
+               corgi_ssp_lcdtg_send(POLCTRL_ADRS, POLCTRL_SYNC_POL_RISE | POLCTRL_EN_POL_RISE
+                               | POLCTRL_DATA_POL_RISE | POLCTRL_SYNC_ACT_L | POLCTRL_EN_ACT_H);
+               udelay(1000);
+
+               lcd_inited=1;
+       } else {
+               lcdtg_set_phadadj(par);
+       }
+
+       switch(par->xres) {
+               case 480:
+               case 640:
+                       /* Set Lcd Resolution (VGA) */
+                       corgi_ssp_lcdtg_send(RESCTL_ADRS, RESCTL_VGA);
+                       break;
+               case 240:
+               case 320:
+               default:
+                       /* Set Lcd Resolution (QVGA) */
+                       corgi_ssp_lcdtg_send(RESCTL_ADRS, RESCTL_QVGA);
+                       break;
+       }
+}
+
+static void lcdtg_suspend(struct w100fb_par *par)
+{
+       /* 60Hz x 2 frame = 16.7msec x 2 = 33.4 msec */
+       mdelay(34);
+
+       /* (1)VW OFF */
+       corgi_ssp_lcdtg_send(POWERREG1_ADRS, POWER1_VW_OFF | POWER1_GVSS_ON | POWER1_VDD_ON);
+
+       /* (2)COM OFF */
+       corgi_ssp_lcdtg_send(PICTRL_ADRS, PICTRL_COM_SIGNAL_OFF);
+       corgi_ssp_lcdtg_send(POWERREG0_ADRS, POWER0_DAC_ON | POWER0_COM_OFF | POWER0_VCC5_ON);
+
+       /* (3)Set Common Voltage Bias 0V */
+       lcdtg_set_common_voltage(POWER0_DAC_ON | POWER0_COM_OFF | POWER0_VCC5_ON, 0);
+
+       /* (4)GVSS OFF */
+       corgi_ssp_lcdtg_send(POWERREG1_ADRS, POWER1_VW_OFF | POWER1_GVSS_OFF | POWER1_VDD_ON);
+
+       /* (5)VCC5 OFF */
+       corgi_ssp_lcdtg_send(POWERREG0_ADRS, POWER0_DAC_ON | POWER0_COM_OFF | POWER0_VCC5_OFF);
+
+       /* (6)Set PDWN, INIOFF, DACOFF */
+       corgi_ssp_lcdtg_send(PICTRL_ADRS, PICTRL_INIOFF | PICTRL_DAC_SIGNAL_OFF |
+                       PICTRL_POWER_DOWN | PICTRL_COM_SIGNAL_OFF);
+
+       /* (7)DAC OFF */
+       corgi_ssp_lcdtg_send(POWERREG0_ADRS, POWER0_DAC_OFF | POWER0_COM_OFF | POWER0_VCC5_OFF);
+
+       /* (8)VDD OFF */
+       corgi_ssp_lcdtg_send(POWERREG1_ADRS, POWER1_VW_OFF | POWER1_GVSS_OFF | POWER1_VDD_OFF);
+
+       lcd_inited = 0;
+}
+
+static struct w100_tg_info corgi_lcdtg_info = {
+       .change=lcdtg_hw_init,
+       .suspend=lcdtg_suspend,
+       .resume=lcdtg_hw_init,
+};
+
+/*
+ * Corgi w100 Frame Buffer Device
+ */
+
+static struct w100_mem_info corgi_fb_mem = {
+       .ext_cntl          = 0x00040003,
+       .sdram_mode_reg    = 0x00650021,
+       .ext_timing_cntl   = 0x10002a4a,
+       .io_cntl           = 0x7ff87012,
+       .size              = 0x1fffff,
+};
+
+static struct w100_gen_regs corgi_fb_regs = {
+       .lcd_format    = 0x00000003,
+       .lcdd_cntl1    = 0x01CC0000,
+       .lcdd_cntl2    = 0x0003FFFF,
+       .genlcd_cntl1  = 0x00FFFF0D,
+       .genlcd_cntl2  = 0x003F3003,
+       .genlcd_cntl3  = 0x000102aa,
+};
+
+static struct w100_gpio_regs corgi_fb_gpio = {
+       .init_data1   = 0x000000bf,
+       .init_data2   = 0x00000000,
+       .gpio_dir1    = 0x00000000,
+       .gpio_oe1     = 0x03c0feff,
+       .gpio_dir2    = 0x00000000,
+       .gpio_oe2     = 0x00000000,
+};
+
+static struct w100_mode corgi_fb_modes[] = {
+{
+       .xres            = 480,
+       .yres            = 640,
+       .left_margin     = 0x56,
+       .right_margin    = 0x55,
+       .upper_margin    = 0x03,
+       .lower_margin    = 0x00,
+       .crtc_ss         = 0x82360056,
+       .crtc_ls         = 0xA0280000,
+       .crtc_gs         = 0x80280028,
+       .crtc_vpos_gs    = 0x02830002,
+       .crtc_rev        = 0x00400008,
+       .crtc_dclk       = 0xA0000000,
+       .crtc_gclk       = 0x8015010F,
+       .crtc_goe        = 0x80100110,
+       .crtc_ps1_active = 0x41060010,
+       .pll_freq        = 75,
+       .fast_pll_freq   = 100,
+       .sysclk_src      = CLK_SRC_PLL,
+       .sysclk_divider  = 0,
+       .pixclk_src      = CLK_SRC_PLL,
+       .pixclk_divider  = 2,
+       .pixclk_divider_rotated = 6,
+},{
+       .xres            = 240,
+       .yres            = 320,
+       .left_margin     = 0x27,
+       .right_margin    = 0x2e,
+       .upper_margin    = 0x01,
+       .lower_margin    = 0x00,
+       .crtc_ss         = 0x81170027,
+       .crtc_ls         = 0xA0140000,
+       .crtc_gs         = 0xC0140014,
+       .crtc_vpos_gs    = 0x00010141,
+       .crtc_rev        = 0x00400008,
+       .crtc_dclk       = 0xA0000000,
+       .crtc_gclk       = 0x8015010F,
+       .crtc_goe        = 0x80100110,
+       .crtc_ps1_active = 0x41060010,
+       .pll_freq        = 0,
+       .fast_pll_freq   = 0,
+       .sysclk_src      = CLK_SRC_XTAL,
+       .sysclk_divider  = 0,
+       .pixclk_src      = CLK_SRC_XTAL,
+       .pixclk_divider  = 1,
+       .pixclk_divider_rotated = 1,
+},
+
+};
+
+static struct w100fb_mach_info corgi_fb_info = {
+       .tg         = &corgi_lcdtg_info,
+       .init_mode  = INIT_MODE_ROTATED,
+       .mem        = &corgi_fb_mem,
+       .regs       = &corgi_fb_regs,
+       .modelist   = &corgi_fb_modes[0],
+       .num_modes  = 2,
+       .gpio       = &corgi_fb_gpio,
+       .xtal_freq  = 12500000,
+       .xtal_dbl   = 0,
+};
+
+static struct resource corgi_fb_resources[] = {
+       [0] = {
+               .start   = 0x08000000,
+               .end     = 0x08ffffff,
+               .flags   = IORESOURCE_MEM,
+       },
+};
+
+struct platform_device corgifb_device = {
+       .name           = "w100fb",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(corgi_fb_resources),
+       .resource       = corgi_fb_resources,
+       .dev            = {
+               .platform_data = &corgi_fb_info,
+               .parent = &corgissp_device.dev,
+       },
+
+};
index d4d03d0daaecdecc053b0cb04c033a20f5189d2d..06807c6ee68aa7d4cc15d22c674e31a32c80285a 100644 (file)
@@ -2,6 +2,13 @@ if ARCH_S3C2410
 
 menu "S3C24XX Implementations"
 
+config MACH_ANUBIS
+       bool "Simtec Electronics ANUBIS"
+       select CPU_S3C2440
+       help
+         Say Y gere if you are using the Simtec Electronics ANUBIS
+         development system
+
 config ARCH_BAST
        bool "Simtec Electronics BAST (EB2410ITX)"
        select CPU_S3C2410
@@ -11,6 +18,14 @@ config ARCH_BAST
 
          Product page: <http://www.simtec.co.uk/products/EB2410ITX/>.
 
+config BAST_PC104_IRQ
+       bool "BAST PC104 IRQ support"
+       depends on ARCH_BAST
+       default y
+       help
+         Say Y here to enable the PC104 IRQ routing on the
+         Simtec BAST (EB2410ITX)
+
 config ARCH_H1940
        bool "IPAQ H1940"
        select CPU_S3C2410
index 55ed7c7e57dabc091c9f6dd5c28f8bfa3ffd9b3b..b4f1e051c768a4dc06d583cdc52da5445e9fb190 100644 (file)
@@ -26,8 +26,13 @@ obj-$(CONFIG_CPU_S3C2440)  += s3c2440.o s3c2440-dsc.o
 obj-$(CONFIG_CPU_S3C2440)  += s3c2440-irq.o
 obj-$(CONFIG_CPU_S3C2440)  += s3c2440-clock.o
 
+# bast extras
+
+obj-$(CONFIG_BAST_PC104_IRQ)   += bast-irq.o
+
 # machine specific support
 
+obj-$(CONFIG_MACH_ANUBIS)      += mach-anubis.o
 obj-$(CONFIG_ARCH_BAST)                += mach-bast.o usb-simtec.o
 obj-$(CONFIG_ARCH_H1940)       += mach-h1940.o
 obj-$(CONFIG_MACH_N30)         += mach-n30.o
index 49914709fa09a9b44007e26fac065530f84751a9..fbbeb05530061eaf24089f3e62acea6d078edad7 100644 (file)
@@ -1,6 +1,6 @@
 /* linux/arch/arm/mach-s3c2410/bast-irq.c
  *
- * Copyright (c) 2004 Simtec Electronics
+ * Copyright (c) 2003,2005 Simtec Electronics
  *   Ben Dooks <ben@simtec.co.uk>
  *
  * http://www.simtec.co.uk/products/EB2410ITX/
@@ -21,7 +21,8 @@
  *
  * Modifications:
  *     08-Jan-2003 BJD  Moved from central IRQ code
- */
+ *     21-Aug-2005 BJD  Fixed missing code and compile errors
+*/
 
 
 #include <linux/init.h>
 #include <linux/ptrace.h>
 #include <linux/sysdev.h>
 
+#include <asm/mach-types.h>
+
 #include <asm/hardware.h>
 #include <asm/irq.h>
 #include <asm/io.h>
 
 #include <asm/mach/irq.h>
-#include <asm/hardware/s3c2410/irq.h>
+
+#include <asm/arch/regs-irq.h>
+#include <asm/arch/bast-map.h>
+#include <asm/arch/bast-irq.h>
+
+#include "irq.h"
 
 #if 0
 #include <asm/debug-ll.h>
@@ -79,15 +87,15 @@ bast_pc104_mask(unsigned int irqno)
        temp = __raw_readb(BAST_VA_PC104_IRQMASK);
        temp &= ~bast_pc104_irqmasks[irqno];
        __raw_writeb(temp, BAST_VA_PC104_IRQMASK);
-
-       if (temp == 0)
-               bast_extint_mask(IRQ_ISA);
 }
 
 static void
-bast_pc104_ack(unsigned int irqno)
+bast_pc104_maskack(unsigned int irqno)
 {
-       bast_extint_ack(IRQ_ISA);
+       struct irqdesc *desc = irq_desc + IRQ_ISA;
+
+       bast_pc104_mask(irqno);
+       desc->chip->ack(IRQ_ISA);
 }
 
 static void
@@ -98,14 +106,12 @@ bast_pc104_unmask(unsigned int irqno)
        temp = __raw_readb(BAST_VA_PC104_IRQMASK);
        temp |= bast_pc104_irqmasks[irqno];
        __raw_writeb(temp, BAST_VA_PC104_IRQMASK);
-
-       bast_extint_unmask(IRQ_ISA);
 }
 
-static struct bast_pc104_chip = {
+static struct irqchip  bast_pc104_chip = {
        .mask        = bast_pc104_mask,
        .unmask      = bast_pc104_unmask,
-       .ack         = bast_pc104_ack
+       .ack         = bast_pc104_maskack
 };
 
 static void
@@ -119,14 +125,49 @@ bast_irq_pc104_demux(unsigned int irq,
 
        stat = __raw_readb(BAST_VA_PC104_IRQREQ) & 0xf;
 
-       for (i = 0; i < 4 && stat != 0; i++) {
-               if (stat & 1) {
-                       irqno = bast_pc104_irqs[i];
-                       desc = irq_desc + irqno;
+       if (unlikely(stat == 0)) {
+               /* ack if we get an irq with nothing (ie, startup) */
+
+               desc = irq_desc + IRQ_ISA;
+               desc->chip->ack(IRQ_ISA);
+       } else {
+               /* handle the IRQ */
+
+               for (i = 0; stat != 0; i++, stat >>= 1) {
+                       if (stat & 1) {
+                               irqno = bast_pc104_irqs[i];
 
-                       desc_handle_irq(irqno, desc, regs);
+                               desc_handle_irq(irqno, irq_desc + irqno, regs);
+                       }
                }
+       }
+}
 
-               stat >>= 1;
+static __init int bast_irq_init(void)
+{
+       unsigned int i;
+
+       if (machine_is_bast()) {
+               printk(KERN_INFO "BAST PC104 IRQ routing, (c) 2005 Simtec Electronics\n");
+
+               /* zap all the IRQs */
+
+               __raw_writeb(0x0, BAST_VA_PC104_IRQMASK);
+
+               set_irq_chained_handler(IRQ_ISA, bast_irq_pc104_demux);
+
+               /* reigster our IRQs */
+
+               for (i = 0; i < 4; i++) {
+                       unsigned int irqno = bast_pc104_irqs[i];
+
+                       set_irq_chip(irqno, &bast_pc104_chip);
+                       set_irq_handler(irqno, do_level_IRQ);
+                       set_irq_flags(irqno, IRQF_VALID);
+               }
        }
+
+       return 0;
 }
+
+arch_initcall(bast_irq_init);
diff --git a/arch/arm/mach-s3c2410/mach-anubis.c b/arch/arm/mach-s3c2410/mach-anubis.c
new file mode 100644 (file)
index 0000000..f87aa0b
--- /dev/null
@@ -0,0 +1,270 @@
+/* linux/arch/arm/mach-s3c2410/mach-anubis.c
+ *
+ * Copyright (c) 2003-2005 Simtec Electronics
+ *     http://armlinux.simtec.co.uk/
+ *     Ben Dooks <ben@simtec.co.uk>
+ *
+ *
+ *
+ * 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.
+ *
+ * Modifications:
+ *     02-May-2005 BJD  Copied from mach-bast.c
+*/
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/interrupt.h>
+#include <linux/list.h>
+#include <linux/timer.h>
+#include <linux/init.h>
+#include <linux/device.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <asm/arch/anubis-map.h>
+#include <asm/arch/anubis-irq.h>
+#include <asm/arch/anubis-cpld.h>
+
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+
+#include <asm/arch/regs-serial.h>
+#include <asm/arch/regs-gpio.h>
+#include <asm/arch/regs-mem.h>
+#include <asm/arch/regs-lcd.h>
+#include <asm/arch/nand.h>
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/nand.h>
+#include <linux/mtd/nand_ecc.h>
+#include <linux/mtd/partitions.h>
+
+#include "clock.h"
+#include "devs.h"
+#include "cpu.h"
+
+#define COPYRIGHT ", (c) 2005 Simtec Electronics"
+
+static struct map_desc anubis_iodesc[] __initdata = {
+  /* ISA IO areas */
+
+  { (u32)S3C24XX_VA_ISA_BYTE, 0x0,        SZ_16M, MT_DEVICE },
+  { (u32)S3C24XX_VA_ISA_WORD, 0x0,        SZ_16M, MT_DEVICE },
+
+  /* we could possibly compress the next set down into a set of smaller tables
+   * pagetables, but that would mean using an L2 section, and it still means
+   * we cannot actually feed the same register to an LDR due to 16K spacing
+   */
+
+  /* CPLD control registers */
+
+  { (u32)ANUBIS_VA_CTRL1,      ANUBIS_PA_CTRL1,        SZ_4K, MT_DEVICE },
+  { (u32)ANUBIS_VA_CTRL2,      ANUBIS_PA_CTRL2,        SZ_4K, MT_DEVICE },
+
+  /* IDE drives */
+
+  { (u32)ANUBIS_IDEPRI,                S3C2410_CS3,            SZ_1M, MT_DEVICE },
+  { (u32)ANUBIS_IDEPRIAUX,     S3C2410_CS3+(1<<26),    SZ_1M, MT_DEVICE },
+
+  { (u32)ANUBIS_IDESEC,                S3C2410_CS4,            SZ_1M, MT_DEVICE },
+  { (u32)ANUBIS_IDESECAUX,     S3C2410_CS4+(1<<26),    SZ_1M, MT_DEVICE },
+};
+
+#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
+#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
+#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
+
+static struct s3c24xx_uart_clksrc anubis_serial_clocks[] = {
+       [0] = {
+               .name           = "uclk",
+               .divisor        = 1,
+               .min_baud       = 0,
+               .max_baud       = 0,
+       },
+       [1] = {
+               .name           = "pclk",
+               .divisor        = 1,
+               .min_baud       = 0,
+               .max_baud       = 0.
+       }
+};
+
+
+static struct s3c2410_uartcfg anubis_uartcfgs[] = {
+       [0] = {
+               .hwport      = 0,
+               .flags       = 0,
+               .ucon        = UCON,
+               .ulcon       = ULCON,
+               .ufcon       = UFCON,
+               .clocks      = anubis_serial_clocks,
+               .clocks_size = ARRAY_SIZE(anubis_serial_clocks)
+       },
+       [1] = {
+               .hwport      = 2,
+               .flags       = 0,
+               .ucon        = UCON,
+               .ulcon       = ULCON,
+               .ufcon       = UFCON,
+               .clocks      = anubis_serial_clocks,
+               .clocks_size = ARRAY_SIZE(anubis_serial_clocks)
+       },
+};
+
+/* NAND Flash on Anubis board */
+
+static int external_map[]   = { 2 };
+static int chip0_map[]      = { 0 };
+static int chip1_map[]      = { 1 };
+
+struct mtd_partition anubis_default_nand_part[] = {
+       [0] = {
+               .name   = "Boot Agent",
+               .size   = SZ_16K,
+               .offset = 0
+       },
+       [1] = {
+               .name   = "/boot",
+               .size   = SZ_4M - SZ_16K,
+               .offset = SZ_16K,
+       },
+       [2] = {
+               .name   = "user1",
+               .offset = SZ_4M,
+               .size   = SZ_32M - SZ_4M,
+       },
+       [3] = {
+               .name   = "user2",
+               .offset = SZ_32M,
+               .size   = MTDPART_SIZ_FULL,
+       }
+};
+
+/* the Anubis has 3 selectable slots for nand-flash, the two
+ * on-board chip areas, as well as the external slot.
+ *
+ * Note, there is no current hot-plug support for the External
+ * socket.
+*/
+
+static struct s3c2410_nand_set anubis_nand_sets[] = {
+       [1] = {
+               .name           = "External",
+               .nr_chips       = 1,
+               .nr_map         = external_map,
+               .nr_partitions  = ARRAY_SIZE(anubis_default_nand_part),
+               .partitions     = anubis_default_nand_part
+       },
+       [0] = {
+               .name           = "chip0",
+               .nr_chips       = 1,
+               .nr_map         = chip0_map,
+               .nr_partitions  = ARRAY_SIZE(anubis_default_nand_part),
+               .partitions     = anubis_default_nand_part
+       },
+       [2] = {
+               .name           = "chip1",
+               .nr_chips       = 1,
+               .nr_map         = chip1_map,
+               .nr_partitions  = ARRAY_SIZE(anubis_default_nand_part),
+               .partitions     = anubis_default_nand_part
+       },
+};
+
+static void anubis_nand_select(struct s3c2410_nand_set *set, int slot)
+{
+       unsigned int tmp;
+
+       slot = set->nr_map[slot] & 3;
+
+       pr_debug("anubis_nand: selecting slot %d (set %p,%p)\n",
+                slot, set, set->nr_map);
+
+       tmp = __raw_readb(ANUBIS_VA_CTRL1);
+       tmp &= ~ANUBIS_CTRL1_NANDSEL;
+       tmp |= slot;
+
+       pr_debug("anubis_nand: ctrl1 now %02x\n", tmp);
+
+       __raw_writeb(tmp, ANUBIS_VA_CTRL1);
+}
+
+static struct s3c2410_platform_nand anubis_nand_info = {
+       .tacls          = 25,
+       .twrph0         = 80,
+       .twrph1         = 80,
+       .nr_sets        = ARRAY_SIZE(anubis_nand_sets),
+       .sets           = anubis_nand_sets,
+       .select_chip    = anubis_nand_select,
+};
+
+
+/* Standard Anubis devices */
+
+static struct platform_device *anubis_devices[] __initdata = {
+       &s3c_device_usb,
+       &s3c_device_wdt,
+       &s3c_device_adc,
+       &s3c_device_i2c,
+       &s3c_device_rtc,
+       &s3c_device_nand,
+};
+
+static struct clk *anubis_clocks[] = {
+       &s3c24xx_dclk0,
+       &s3c24xx_dclk1,
+       &s3c24xx_clkout0,
+       &s3c24xx_clkout1,
+       &s3c24xx_uclk,
+};
+
+static struct s3c24xx_board anubis_board __initdata = {
+       .devices       = anubis_devices,
+       .devices_count = ARRAY_SIZE(anubis_devices),
+       .clocks        = anubis_clocks,
+       .clocks_count  = ARRAY_SIZE(anubis_clocks)
+};
+
+void __init anubis_map_io(void)
+{
+       /* initialise the clocks */
+
+       s3c24xx_dclk0.parent = NULL;
+       s3c24xx_dclk0.rate   = 12*1000*1000;
+
+       s3c24xx_dclk1.parent = NULL;
+       s3c24xx_dclk1.rate   = 24*1000*1000;
+
+       s3c24xx_clkout0.parent  = &s3c24xx_dclk0;
+       s3c24xx_clkout1.parent  = &s3c24xx_dclk1;
+
+       s3c24xx_uclk.parent  = &s3c24xx_clkout1;
+
+       s3c_device_nand.dev.platform_data = &anubis_nand_info;
+
+       s3c24xx_init_io(anubis_iodesc, ARRAY_SIZE(anubis_iodesc));
+       s3c24xx_init_clocks(0);
+       s3c24xx_init_uarts(anubis_uartcfgs, ARRAY_SIZE(anubis_uartcfgs));
+       s3c24xx_set_board(&anubis_board);
+
+       /* ensure that the GPIO is setup */
+       s3c2410_gpio_setpin(S3C2410_GPA0, 1);
+}
+
+MACHINE_START(ANUBIS, "Simtec-Anubis")
+       /* Maintainer: Ben Dooks <ben@simtec.co.uk> */
+       .phys_ram       = S3C2410_SDRAM_PA,
+       .phys_io        = S3C2410_PA_UART,
+       .io_pg_offst    = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
+       .boot_params    = S3C2410_SDRAM_PA + 0x100,
+       .map_io         = anubis_map_io,
+       .init_irq       = s3c24xx_init_irq,
+       .timer          = &s3c24xx_timer,
+MACHINE_END
index 2cb798832223ad9d69c9c0c7feed90f3d48dbc70..4c7ccef6c207d0d2ba67349445324c1b87c2974a 100644 (file)
@@ -48,7 +48,7 @@ static __init int pm_simtec_init(void)
 
        /* check which machine we are running on */
 
-       if (!machine_is_bast() && !machine_is_vr1000())
+       if (!machine_is_bast() && !machine_is_vr1000() && !machine_is_anubis())
                return 0;
 
        printk(KERN_INFO "Simtec Board Power Manangement" COPYRIGHT "\n");
index 765a3a9ae032581b7f6c97217807fb8bc9cdc014..c0acfb2ad790a711c877afda5195be642288f690 100644 (file)
@@ -164,7 +164,7 @@ static void s3c2410_timer_setup (void)
 
        /* configure the system for whichever machine is in use */
 
-       if (machine_is_bast() || machine_is_vr1000()) {
+       if (machine_is_bast() || machine_is_vr1000() || machine_is_anubis()) {
                /* timer is at 12MHz, scaler is 1 */
                timer_usec_ticks = timer_mask_usec_ticks(1, 12000000);
                tcnt = 12000000 / HZ;
index 345365852f8cb999ed4f4ae5fec549236058d0d4..9693e9b4ffd1e70b024803b251b8a3629b5f41f9 100644 (file)
@@ -91,6 +91,13 @@ config OMAP_32K_TIMER_HZ
          Kernel internal timer frequency should be a divisor of 32768,
          such as 64 or 128.
 
+config OMAP_DM_TIMER
+       bool "Use dual-mode timer"
+       default n
+       depends on ARCH_OMAP16XX
+       help
+        Select this option if you want to use OMAP Dual-Mode timers.
+
 choice
        prompt "Low-level debug console UART"
        depends on ARCH_OMAP
@@ -107,6 +114,15 @@ config OMAP_LL_DEBUG_UART3
 
 endchoice
 
+config OMAP_SERIAL_WAKE
+       bool "Enable wake-up events for serial ports"
+       depends OMAP_MUX
+       default y
+       help
+         Select this option if you want to have your system wake up
+         to data on the serial RX line. This allows you to wake the
+         system from serial console.
+
 endmenu
 
 endif
index 531e11af54d4b6c5e2b7b21859bb41bef463e143..7e144f9cad1c3104c05cce4068fc3d7550ed9c45 100644 (file)
@@ -3,7 +3,7 @@
 #
 
 # Common support
-obj-y := common.o dma.o clock.o mux.o gpio.o mcbsp.o usb.o
+obj-y := common.o sram.o sram-fn.o clock.o dma.o mux.o gpio.o mcbsp.o usb.o
 obj-m :=
 obj-n :=
 obj-  :=
@@ -15,3 +15,5 @@ obj-$(CONFIG_ARCH_OMAP16XX) += ocpi.o
 obj-$(CONFIG_PM) += pm.o sleep.o
 
 obj-$(CONFIG_CPU_FREQ) += cpu-omap.o
+obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
+
index 59d91b3262ba0f3a0540a5c7ddb9f79f9bd73d44..52a58b2da2882553121810e75ba9aa1d168674b0 100644 (file)
@@ -21,6 +21,7 @@
 #include <asm/arch/usb.h>
 
 #include "clock.h"
+#include "sram.h"
 
 static LIST_HEAD(clocks);
 static DECLARE_MUTEX(clocks_sem);
@@ -141,7 +142,7 @@ static struct clk arm_ck = {
 static struct clk armper_ck = {
        .name           = "armper_ck",
        .parent         = &ck_dpll1,
-       .flags          = CLOCK_IN_OMAP730 | CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX |
+       .flags          = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX |
                          RATE_CKCTL,
        .enable_reg     = ARM_IDLECT2,
        .enable_bit     = EN_PERCK,
@@ -385,7 +386,8 @@ static struct clk uart2_ck = {
        .name           = "uart2_ck",
        /* Direct from ULPD, no parent */
        .rate           = 12000000,
-       .flags          = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | ENABLE_REG_32BIT,
+       .flags          = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | ENABLE_REG_32BIT |
+                         ALWAYS_ENABLED,
        .enable_reg     = MOD_CONF_CTRL_0,
        .enable_bit     = 30,   /* Chooses between 12MHz and 48MHz */
        .set_rate       = &set_uart_rate,
@@ -443,6 +445,15 @@ static struct clk usb_hhc_ck16xx = {
        .enable_bit     = 8 /* UHOST_EN */,
 };
 
+static struct clk usb_dc_ck = {
+       .name           = "usb_dc_ck",
+       /* Direct from ULPD, no parent */
+       .rate           = 48000000,
+       .flags          = CLOCK_IN_OMAP16XX | RATE_FIXED,
+       .enable_reg     = SOFT_REQ_REG,
+       .enable_bit     = 4,
+};
+
 static struct clk mclk_1510 = {
        .name           = "mclk",
        /* Direct from ULPD, no parent. May be enabled by ext hardware. */
@@ -552,6 +563,7 @@ static struct clk *  onchip_clks[] = {
        &uart3_16xx,
        &usb_clko,
        &usb_hhc_ck1510, &usb_hhc_ck16xx,
+       &usb_dc_ck,
        &mclk_1510,  &mclk_16xx,
        &bclk_1510,  &bclk_16xx,
        &mmc1_ck,
@@ -946,14 +958,13 @@ static int select_table_rate(struct clk *  clk, unsigned long rate)
        if (!ptr->rate)
                return -EINVAL;
 
-       if (!ptr->rate)
-               return -EINVAL;
+       /*
+        * In most cases we should not need to reprogram DPLL.
+        * Reprogramming the DPLL is tricky, it must be done from SRAM.
+        */
+       omap_sram_reprogram_clock(ptr->dpllctl_val, ptr->ckctl_val);
 
-       if (unlikely(ck_dpll1.rate == 0)) {
-               omap_writew(ptr->dpllctl_val, DPLL_CTL);
-               ck_dpll1.rate = ptr->pll_rate;
-       }
-       omap_writew(ptr->ckctl_val, ARM_CKCTL);
+       ck_dpll1.rate = ptr->pll_rate;
        propagate_rate(&ck_dpll1);
        return 0;
 }
@@ -1224,9 +1235,11 @@ int __init clk_init(void)
 #endif
        /* Cache rates for clocks connected to ck_ref (not dpll1) */
        propagate_rate(&ck_ref);
-       printk(KERN_INFO "Clocking rate (xtal/DPLL1/MPU): %ld.%01ld/%ld/%ld MHz\n",
+       printk(KERN_INFO "Clocking rate (xtal/DPLL1/MPU): "
+               "%ld.%01ld/%ld.%01ld/%ld.%01ld MHz\n",
               ck_ref.rate / 1000000, (ck_ref.rate / 100000) % 10,
-              ck_dpll1.rate, arm_ck.rate);
+              ck_dpll1.rate / 1000000, (ck_dpll1.rate / 100000) % 10,
+              arm_ck.rate / 1000000, (arm_ck.rate / 100000) % 10);
 
 #ifdef CONFIG_MACH_OMAP_PERSEUS2
        /* Select slicer output as OMAP input clock */
@@ -1271,7 +1284,9 @@ static int __init omap_late_clk_reset(void)
        struct clk *p;
        __u32 regval32;
 
-       omap_writew(0, SOFT_REQ_REG);
+       /* USB_REQ_EN will be disabled later if necessary (usb_dc_ck) */
+       regval32 = omap_readw(SOFT_REQ_REG) & (1 << 4);
+       omap_writew(regval32, SOFT_REQ_REG);
        omap_writew(0, SOFT_REQ_REG2);
 
        list_for_each_entry(p, &clocks, node) {
index ea967a8f6ce52716a8292dcdf1f5fcf890e27d99..6cb20aea7f518b22dbd9b25a6d93cc6ac93fd1ff 100644 (file)
@@ -26,6 +26,7 @@
 #include <asm/hardware/clock.h>
 #include <asm/io.h>
 #include <asm/mach-types.h>
+#include <asm/setup.h>
 
 #include <asm/arch/board.h>
 #include <asm/arch/mux.h>
 
 #define NO_LENGTH_CHECK 0xffffffff
 
-extern int omap_bootloader_tag_len;
-extern u8 omap_bootloader_tag[];
+unsigned char omap_bootloader_tag[512];
+int omap_bootloader_tag_len;
 
 struct omap_board_config_kernel *omap_board_config;
-int omap_board_config_size = 0;
+int omap_board_config_size;
 
 static const void *get_config(u16 tag, size_t len, int skip, size_t *len_out)
 {
index c0a5c2fa42bdf0784038e21fe14455c97e74b880..da7b6514565884e894d82f729ee38274d63ae46d 100644 (file)
@@ -425,7 +425,7 @@ static int dma_handle_ch(int ch)
                dma_chan[ch + 6].saved_csr = csr >> 7;
                csr &= 0x7f;
        }
-       if (!csr)
+       if ((csr & 0x3f) == 0)
                return 0;
        if (unlikely(dma_chan[ch].dev_id == -1)) {
                printk(KERN_WARNING "Spurious interrupt from DMA channel %d (CSR %04x)\n",
@@ -890,11 +890,11 @@ void omap_enable_lcd_dma(void)
        w |= 1 << 8;
        omap_writew(w, OMAP1610_DMA_LCD_CTRL);
 
+       lcd_dma.active = 1;
+
        w = omap_readw(OMAP1610_DMA_LCD_CCR);
        w |= 1 << 7;
        omap_writew(w, OMAP1610_DMA_LCD_CCR);
-
-       lcd_dma.active = 1;
 }
 
 void omap_setup_lcd_dma(void)
@@ -965,8 +965,8 @@ void omap_clear_dma(int lch)
  */
 dma_addr_t omap_get_dma_src_pos(int lch)
 {
-       return (dma_addr_t) (OMAP_DMA_CSSA_L(lch) |
-                            (OMAP_DMA_CSSA_U(lch) << 16));
+       return (dma_addr_t) (omap_readw(OMAP_DMA_CSSA_L(lch)) |
+       (omap_readw(OMAP_DMA_CSSA_U(lch)) << 16));
 }
 
 /*
@@ -979,8 +979,18 @@ dma_addr_t omap_get_dma_src_pos(int lch)
  */
 dma_addr_t omap_get_dma_dst_pos(int lch)
 {
-       return (dma_addr_t) (OMAP_DMA_CDSA_L(lch) |
-                            (OMAP_DMA_CDSA_U(lch) << 16));
+       return (dma_addr_t) (omap_readw(OMAP_DMA_CDSA_L(lch)) |
+       (omap_readw(OMAP_DMA_CDSA_U(lch)) << 16));
+}
+
+/*
+ * Returns current source transfer counting for the given DMA channel.
+ * Can be used to monitor the progress of a transfer inside a  block.
+ * It must be called with disabled interrupts.
+ */
+int omap_get_dma_src_addr_counter(int lch)
+{
+       return (dma_addr_t) omap_readw(OMAP_DMA_CSAC(lch));
 }
 
 int omap_dma_running(void)
@@ -1076,6 +1086,7 @@ arch_initcall(omap_init_dma);
 
 EXPORT_SYMBOL(omap_get_dma_src_pos);
 EXPORT_SYMBOL(omap_get_dma_dst_pos);
+EXPORT_SYMBOL(omap_get_dma_src_addr_counter);
 EXPORT_SYMBOL(omap_clear_dma);
 EXPORT_SYMBOL(omap_set_dma_priority);
 EXPORT_SYMBOL(omap_request_dma);
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
new file mode 100644 (file)
index 0000000..a1468d7
--- /dev/null
@@ -0,0 +1,260 @@
+/*
+ * linux/arch/arm/plat-omap/dmtimer.c
+ *
+ * OMAP Dual-Mode Timers
+ *
+ * Copyright (C) 2005 Nokia Corporation
+ * Author: Lauri Leukkunen <lauri.leukkunen@nokia.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.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * 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 <linux/init.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/dmtimer.h>
+#include <asm/io.h>
+#include <asm/arch/irqs.h>
+#include <linux/spinlock.h>
+#include <linux/list.h>
+
+#define OMAP_TIMER_COUNT               8
+
+#define OMAP_TIMER_ID_REG              0x00
+#define OMAP_TIMER_OCP_CFG_REG         0x10
+#define OMAP_TIMER_SYS_STAT_REG                0x14
+#define OMAP_TIMER_STAT_REG            0x18
+#define OMAP_TIMER_INT_EN_REG          0x1c
+#define OMAP_TIMER_WAKEUP_EN_REG       0x20
+#define OMAP_TIMER_CTRL_REG            0x24
+#define OMAP_TIMER_COUNTER_REG         0x28
+#define OMAP_TIMER_LOAD_REG            0x2c
+#define OMAP_TIMER_TRIGGER_REG         0x30
+#define OMAP_TIMER_WRITE_PEND_REG      0x34
+#define OMAP_TIMER_MATCH_REG           0x38
+#define OMAP_TIMER_CAPTURE_REG         0x3c
+#define OMAP_TIMER_IF_CTRL_REG         0x40
+
+
+static struct dmtimer_info_struct {
+       struct list_head        unused_timers;
+       struct list_head        reserved_timers;
+} dm_timer_info;
+
+static struct omap_dm_timer dm_timers[] = {
+       { .base=0xfffb1400, .irq=INT_1610_GPTIMER1 },
+       { .base=0xfffb1c00, .irq=INT_1610_GPTIMER2 },
+       { .base=0xfffb2400, .irq=INT_1610_GPTIMER3 },
+       { .base=0xfffb2c00, .irq=INT_1610_GPTIMER4 },
+       { .base=0xfffb3400, .irq=INT_1610_GPTIMER5 },
+       { .base=0xfffb3c00, .irq=INT_1610_GPTIMER6 },
+       { .base=0xfffb4400, .irq=INT_1610_GPTIMER7 },
+       { .base=0xfffb4c00, .irq=INT_1610_GPTIMER8 },
+       { .base=0x0 },
+};
+
+
+static spinlock_t dm_timer_lock;
+
+
+inline void omap_dm_timer_write_reg(struct omap_dm_timer *timer, int reg, u32 value)
+{
+       omap_writel(value, timer->base + reg);
+       while (omap_dm_timer_read_reg(timer, OMAP_TIMER_WRITE_PEND_REG))
+               ;
+}
+
+u32 omap_dm_timer_read_reg(struct omap_dm_timer *timer, int reg)
+{
+       return omap_readl(timer->base + reg);
+}
+
+int omap_dm_timers_active(void)
+{
+       struct omap_dm_timer *timer;
+
+       for (timer = &dm_timers[0]; timer->base; ++timer)
+               if (omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG) &
+                   OMAP_TIMER_CTRL_ST)
+                       return 1;
+
+       return 0;
+}
+
+
+void omap_dm_timer_set_source(struct omap_dm_timer *timer, int source)
+{
+       int n = (timer - dm_timers) << 1;
+       u32 l;
+
+       l = omap_readl(MOD_CONF_CTRL_1) & ~(0x03 << n);
+       l |= source << n;
+       omap_writel(l, MOD_CONF_CTRL_1);
+}
+
+
+static void omap_dm_timer_reset(struct omap_dm_timer *timer)
+{
+       /* Reset and set posted mode */
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG, 0x06);
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_OCP_CFG_REG, 0x02);
+
+       omap_dm_timer_set_source(timer, OMAP_TIMER_SRC_ARMXOR);
+}
+
+
+
+struct omap_dm_timer * omap_dm_timer_request(void)
+{
+       struct omap_dm_timer *timer = NULL;
+       unsigned long flags;
+
+       spin_lock_irqsave(&dm_timer_lock, flags);
+       if (!list_empty(&dm_timer_info.unused_timers)) {
+               timer = (struct omap_dm_timer *)
+                               dm_timer_info.unused_timers.next;
+               list_move_tail((struct list_head *)timer,
+                               &dm_timer_info.reserved_timers);
+       }
+       spin_unlock_irqrestore(&dm_timer_lock, flags);
+
+       return timer;
+}
+
+
+void omap_dm_timer_free(struct omap_dm_timer *timer)
+{
+       unsigned long flags;
+
+       omap_dm_timer_reset(timer);
+
+       spin_lock_irqsave(&dm_timer_lock, flags);
+       list_move_tail((struct list_head *)timer, &dm_timer_info.unused_timers);
+       spin_unlock_irqrestore(&dm_timer_lock, flags);
+}
+
+void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer,
+                               unsigned int value)
+{
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_INT_EN_REG, value);
+}
+
+unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer)
+{
+       return omap_dm_timer_read_reg(timer, OMAP_TIMER_STAT_REG);
+}
+
+void omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value)
+{
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_STAT_REG, value);
+}
+
+void omap_dm_timer_enable_autoreload(struct omap_dm_timer *timer)
+{
+       u32 l;
+       l = omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
+       l |= OMAP_TIMER_CTRL_AR;
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);
+}
+
+void omap_dm_timer_trigger(struct omap_dm_timer *timer)
+{
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_TRIGGER_REG, 1);
+}
+
+void omap_dm_timer_set_trigger(struct omap_dm_timer *timer, unsigned int value)
+{
+       u32 l;
+
+       l = omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
+       l |= value & 0x3;
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);
+}
+
+void omap_dm_timer_start(struct omap_dm_timer *timer)
+{
+       u32 l;
+
+       l = omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
+       l |= OMAP_TIMER_CTRL_ST;
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);
+}
+
+void omap_dm_timer_stop(struct omap_dm_timer *timer)
+{
+       u32 l;
+
+       l = omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
+       l &= ~0x1;
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);
+}
+
+unsigned int omap_dm_timer_read_counter(struct omap_dm_timer *timer)
+{
+       return omap_dm_timer_read_reg(timer, OMAP_TIMER_COUNTER_REG);
+}
+
+void omap_dm_timer_reset_counter(struct omap_dm_timer *timer)
+{
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_COUNTER_REG, 0);
+}
+
+void omap_dm_timer_set_load(struct omap_dm_timer *timer, unsigned int load)
+{
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_LOAD_REG, load);
+}
+
+void omap_dm_timer_set_match(struct omap_dm_timer *timer, unsigned int match)
+{
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_MATCH_REG, match);
+}
+
+void omap_dm_timer_enable_compare(struct omap_dm_timer *timer)
+{
+       u32 l;
+
+       l = omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
+       l |= OMAP_TIMER_CTRL_CE;
+       omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);
+}
+
+
+static inline void __dm_timer_init(void)
+{
+       struct omap_dm_timer *timer;
+
+       spin_lock_init(&dm_timer_lock);
+       INIT_LIST_HEAD(&dm_timer_info.unused_timers);
+       INIT_LIST_HEAD(&dm_timer_info.reserved_timers);
+
+       timer = &dm_timers[0];
+       while (timer->base) {
+               list_add_tail((struct list_head *)timer, &dm_timer_info.unused_timers);
+               omap_dm_timer_reset(timer);
+               timer++;
+       }
+}
+
+static int __init omap_dm_timer_init(void)
+{
+       if (cpu_is_omap16xx())
+               __dm_timer_init();
+       return 0;
+}
+
+arch_initcall(omap_dm_timer_init);
index aa481ea3d702c0fb00035a1941be2bdbc0d999eb..55059a24ad419da31fbc026f5345a9db386ee9fc 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Support functions for OMAP GPIO
  *
- * Copyright (C) 2003 Nokia Corporation
+ * Copyright (C) 2003-2005 Nokia Corporation
  * Written by Juha Yrjölä <juha.yrjola@nokia.com>
  *
  * This program is free software; you can redistribute it and/or modify
 #include <linux/sched.h>
 #include <linux/interrupt.h>
 #include <linux/ptrace.h>
+#include <linux/sysdev.h>
+#include <linux/err.h>
 
 #include <asm/hardware.h>
+#include <asm/hardware/clock.h>
 #include <asm/irq.h>
 #include <asm/arch/irqs.h>
 #include <asm/arch/gpio.h>
@@ -29,7 +32,7 @@
 /*
  * OMAP1510 GPIO registers
  */
-#define OMAP1510_GPIO_BASE             0xfffce000
+#define OMAP1510_GPIO_BASE             (void __iomem *)0xfffce000
 #define OMAP1510_GPIO_DATA_INPUT       0x00
 #define OMAP1510_GPIO_DATA_OUTPUT      0x04
 #define OMAP1510_GPIO_DIR_CONTROL      0x08
 /*
  * OMAP1610 specific GPIO registers
  */
-#define OMAP1610_GPIO1_BASE            0xfffbe400
-#define OMAP1610_GPIO2_BASE            0xfffbec00
-#define OMAP1610_GPIO3_BASE            0xfffbb400
-#define OMAP1610_GPIO4_BASE            0xfffbbc00
+#define OMAP1610_GPIO1_BASE            (void __iomem *)0xfffbe400
+#define OMAP1610_GPIO2_BASE            (void __iomem *)0xfffbec00
+#define OMAP1610_GPIO3_BASE            (void __iomem *)0xfffbb400
+#define OMAP1610_GPIO4_BASE            (void __iomem *)0xfffbbc00
 #define OMAP1610_GPIO_REVISION         0x0000
 #define OMAP1610_GPIO_SYSCONFIG                0x0010
 #define OMAP1610_GPIO_SYSSTATUS                0x0014
 #define OMAP1610_GPIO_IRQSTATUS1       0x0018
 #define OMAP1610_GPIO_IRQENABLE1       0x001c
+#define OMAP1610_GPIO_WAKEUPENABLE     0x0028
 #define OMAP1610_GPIO_DATAIN           0x002c
 #define OMAP1610_GPIO_DATAOUT          0x0030
 #define OMAP1610_GPIO_DIRECTION                0x0034
 #define OMAP1610_GPIO_EDGE_CTRL1       0x0038
 #define OMAP1610_GPIO_EDGE_CTRL2       0x003c
 #define OMAP1610_GPIO_CLEAR_IRQENABLE1 0x009c
+#define OMAP1610_GPIO_CLEAR_WAKEUPENA  0x00a8
 #define OMAP1610_GPIO_CLEAR_DATAOUT    0x00b0
 #define OMAP1610_GPIO_SET_IRQENABLE1   0x00dc
+#define OMAP1610_GPIO_SET_WAKEUPENA    0x00e8
 #define OMAP1610_GPIO_SET_DATAOUT      0x00f0
 
 /*
  * OMAP730 specific GPIO registers
  */
-#define OMAP730_GPIO1_BASE             0xfffbc000
-#define OMAP730_GPIO2_BASE             0xfffbc800
-#define OMAP730_GPIO3_BASE             0xfffbd000
-#define OMAP730_GPIO4_BASE             0xfffbd800
-#define OMAP730_GPIO5_BASE             0xfffbe000
-#define OMAP730_GPIO6_BASE             0xfffbe800
+#define OMAP730_GPIO1_BASE             (void __iomem *)0xfffbc000
+#define OMAP730_GPIO2_BASE             (void __iomem *)0xfffbc800
+#define OMAP730_GPIO3_BASE             (void __iomem *)0xfffbd000
+#define OMAP730_GPIO4_BASE             (void __iomem *)0xfffbd800
+#define OMAP730_GPIO5_BASE             (void __iomem *)0xfffbe000
+#define OMAP730_GPIO6_BASE             (void __iomem *)0xfffbe800
 #define OMAP730_GPIO_DATA_INPUT                0x00
 #define OMAP730_GPIO_DATA_OUTPUT       0x04
 #define OMAP730_GPIO_DIR_CONTROL       0x08
 #define OMAP730_GPIO_INT_MASK          0x10
 #define OMAP730_GPIO_INT_STATUS                0x14
 
+/*
+ * omap24xx specific GPIO registers
+ */
+#define OMAP24XX_GPIO1_BASE            (void __iomem *)0x48018000
+#define OMAP24XX_GPIO2_BASE            (void __iomem *)0x4801a000
+#define OMAP24XX_GPIO3_BASE            (void __iomem *)0x4801c000
+#define OMAP24XX_GPIO4_BASE            (void __iomem *)0x4801e000
+#define OMAP24XX_GPIO_REVISION         0x0000
+#define OMAP24XX_GPIO_SYSCONFIG                0x0010
+#define OMAP24XX_GPIO_SYSSTATUS                0x0014
+#define OMAP24XX_GPIO_IRQSTATUS1       0x0018
+#define OMAP24XX_GPIO_IRQENABLE1       0x001c
+#define OMAP24XX_GPIO_CTRL             0x0030
+#define OMAP24XX_GPIO_OE               0x0034
+#define OMAP24XX_GPIO_DATAIN           0x0038
+#define OMAP24XX_GPIO_DATAOUT          0x003c
+#define OMAP24XX_GPIO_LEVELDETECT0     0x0040
+#define OMAP24XX_GPIO_LEVELDETECT1     0x0044
+#define OMAP24XX_GPIO_RISINGDETECT     0x0048
+#define OMAP24XX_GPIO_FALLINGDETECT    0x004c
+#define OMAP24XX_GPIO_CLEARIRQENABLE1  0x0060
+#define OMAP24XX_GPIO_SETIRQENABLE1    0x0064
+#define OMAP24XX_GPIO_CLEARWKUENA      0x0080
+#define OMAP24XX_GPIO_SETWKUENA                0x0084
+#define OMAP24XX_GPIO_CLEARDATAOUT     0x0090
+#define OMAP24XX_GPIO_SETDATAOUT       0x0094
+
 #define OMAP_MPUIO_MASK                (~OMAP_MAX_GPIO_LINES & 0xff)
 
 struct gpio_bank {
-       u32 base;
+       void __iomem *base;
        u16 irq;
        u16 virtual_irq_start;
-       u8 method;
+       int method;
        u32 reserved_map;
+       u32 suspend_wakeup;
+       u32 saved_wakeup;
        spinlock_t lock;
 };
 
@@ -93,8 +128,9 @@ struct gpio_bank {
 #define METHOD_GPIO_1510       1
 #define METHOD_GPIO_1610       2
 #define METHOD_GPIO_730                3
+#define METHOD_GPIO_24XX       4
 
-#if defined(CONFIG_ARCH_OMAP16XX)
+#ifdef CONFIG_ARCH_OMAP16XX
 static struct gpio_bank gpio_bank_1610[5] = {
        { OMAP_MPUIO_BASE,     INT_MPUIO,           IH_MPUIO_BASE,     METHOD_MPUIO},
        { OMAP1610_GPIO1_BASE, INT_GPIO_BANK1,      IH_GPIO_BASE,      METHOD_GPIO_1610 },
@@ -123,6 +159,15 @@ static struct gpio_bank gpio_bank_730[7] = {
 };
 #endif
 
+#ifdef CONFIG_ARCH_OMAP24XX
+static struct gpio_bank gpio_bank_24xx[4] = {
+       { OMAP24XX_GPIO1_BASE, INT_24XX_GPIO_BANK1, IH_GPIO_BASE,       METHOD_GPIO_24XX },
+       { OMAP24XX_GPIO2_BASE, INT_24XX_GPIO_BANK2, IH_GPIO_BASE + 32,  METHOD_GPIO_24XX },
+       { OMAP24XX_GPIO3_BASE, INT_24XX_GPIO_BANK3, IH_GPIO_BASE + 64,  METHOD_GPIO_24XX },
+       { OMAP24XX_GPIO4_BASE, INT_24XX_GPIO_BANK4, IH_GPIO_BASE + 96,  METHOD_GPIO_24XX },
+};
+#endif
+
 static struct gpio_bank *gpio_bank;
 static int gpio_bank_count;
 
@@ -149,14 +194,23 @@ static inline struct gpio_bank *get_gpio_bank(int gpio)
                return &gpio_bank[1 + (gpio >> 5)];
        }
 #endif
+#ifdef CONFIG_ARCH_OMAP24XX
+       if (cpu_is_omap24xx())
+               return &gpio_bank[gpio >> 5];
+#endif
 }
 
 static inline int get_gpio_index(int gpio)
 {
+#ifdef CONFIG_ARCH_OMAP730
        if (cpu_is_omap730())
                return gpio & 0x1f;
-       else
-               return gpio & 0x0f;
+#endif
+#ifdef CONFIG_ARCH_OMAP24XX
+       if (cpu_is_omap24xx())
+               return gpio & 0x1f;
+#endif
+       return gpio & 0x0f;
 }
 
 static inline int gpio_valid(int gpio)
@@ -179,6 +233,10 @@ static inline int gpio_valid(int gpio)
 #ifdef CONFIG_ARCH_OMAP730
        if (cpu_is_omap730() && gpio < 192)
                return 0;
+#endif
+#ifdef CONFIG_ARCH_OMAP24XX
+       if (cpu_is_omap24xx() && gpio < 128)
+               return 0;
 #endif
        return -1;
 }
@@ -195,7 +253,7 @@ static int check_gpio(int gpio)
 
 static void _set_gpio_direction(struct gpio_bank *bank, int gpio, int is_input)
 {
-       u32 reg = bank->base;
+       void __iomem *reg = bank->base;
        u32 l;
 
        switch (bank->method) {
@@ -211,6 +269,9 @@ static void _set_gpio_direction(struct gpio_bank *bank, int gpio, int is_input)
        case METHOD_GPIO_730:
                reg += OMAP730_GPIO_DIR_CONTROL;
                break;
+       case METHOD_GPIO_24XX:
+               reg += OMAP24XX_GPIO_OE;
+               break;
        }
        l = __raw_readl(reg);
        if (is_input)
@@ -234,7 +295,7 @@ void omap_set_gpio_direction(int gpio, int is_input)
 
 static void _set_gpio_dataout(struct gpio_bank *bank, int gpio, int enable)
 {
-       u32 reg = bank->base;
+       void __iomem *reg = bank->base;
        u32 l = 0;
 
        switch (bank->method) {
@@ -269,6 +330,13 @@ static void _set_gpio_dataout(struct gpio_bank *bank, int gpio, int enable)
                else
                        l &= ~(1 << gpio);
                break;
+       case METHOD_GPIO_24XX:
+               if (enable)
+                       reg += OMAP24XX_GPIO_SETDATAOUT;
+               else
+                       reg += OMAP24XX_GPIO_CLEARDATAOUT;
+               l = 1 << gpio;
+               break;
        default:
                BUG();
                return;
@@ -291,7 +359,7 @@ void omap_set_gpio_dataout(int gpio, int enable)
 int omap_get_gpio_datain(int gpio)
 {
        struct gpio_bank *bank;
-       u32 reg;
+       void __iomem *reg;
 
        if (check_gpio(gpio) < 0)
                return -1;
@@ -310,109 +378,132 @@ int omap_get_gpio_datain(int gpio)
        case METHOD_GPIO_730:
                reg += OMAP730_GPIO_DATA_INPUT;
                break;
+       case METHOD_GPIO_24XX:
+               reg += OMAP24XX_GPIO_DATAIN;
+               break;
        default:
                BUG();
                return -1;
        }
-       return (__raw_readl(reg) & (1 << get_gpio_index(gpio))) != 0;
+       return (__raw_readl(reg)
+                       & (1 << get_gpio_index(gpio))) != 0;
 }
 
-static void _set_gpio_edge_ctrl(struct gpio_bank *bank, int gpio, int edge)
+#define MOD_REG_BIT(reg, bit_mask, set)        \
+do {   \
+       int l = __raw_readl(base + reg); \
+       if (set) l |= bit_mask; \
+       else l &= ~bit_mask; \
+       __raw_writel(l, base + reg); \
+} while(0)
+
+static inline void set_24xx_gpio_triggering(void __iomem *base, int gpio, int trigger)
 {
-       u32 reg = bank->base;
-       u32 l;
+       u32 gpio_bit = 1 << gpio;
+
+       MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT0, gpio_bit,
+               trigger & IRQT_LOW);
+       MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT1, gpio_bit,
+               trigger & IRQT_HIGH);
+       MOD_REG_BIT(OMAP24XX_GPIO_RISINGDETECT, gpio_bit,
+               trigger & IRQT_RISING);
+       MOD_REG_BIT(OMAP24XX_GPIO_FALLINGDETECT, gpio_bit,
+               trigger & IRQT_FALLING);
+       /* FIXME: Possibly do 'set_irq_handler(j, do_level_IRQ)' if only level
+        * triggering requested. */
+}
+
+static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
+{
+       void __iomem *reg = bank->base;
+       u32 l = 0;
 
        switch (bank->method) {
        case METHOD_MPUIO:
                reg += OMAP_MPUIO_GPIO_INT_EDGE;
                l = __raw_readl(reg);
-               if (edge == OMAP_GPIO_RISING_EDGE)
+               if (trigger == IRQT_RISING)
                        l |= 1 << gpio;
-               else
+               else if (trigger == IRQT_FALLING)
                        l &= ~(1 << gpio);
-               __raw_writel(l, reg);
+               else
+                       goto bad;
                break;
        case METHOD_GPIO_1510:
                reg += OMAP1510_GPIO_INT_CONTROL;
                l = __raw_readl(reg);
-               if (edge == OMAP_GPIO_RISING_EDGE)
+               if (trigger == IRQT_RISING)
                        l |= 1 << gpio;
-               else
+               else if (trigger == IRQT_FALLING)
                        l &= ~(1 << gpio);
-               __raw_writel(l, reg);
+               else
+                       goto bad;
                break;
        case METHOD_GPIO_1610:
-               edge &= 0x03;
                if (gpio & 0x08)
                        reg += OMAP1610_GPIO_EDGE_CTRL2;
                else
                        reg += OMAP1610_GPIO_EDGE_CTRL1;
                gpio &= 0x07;
+               /* We allow only edge triggering, i.e. two lowest bits */
+               if (trigger & ~IRQT_BOTHEDGE)
+                       BUG();
+               /* NOTE: knows __IRQT_{FAL,RIS}EDGE match OMAP hardware */
+               trigger &= 0x03;
                l = __raw_readl(reg);
                l &= ~(3 << (gpio << 1));
-               l |= edge << (gpio << 1);
-               __raw_writel(l, reg);
+               l |= trigger << (gpio << 1);
                break;
        case METHOD_GPIO_730:
                reg += OMAP730_GPIO_INT_CONTROL;
                l = __raw_readl(reg);
-               if (edge == OMAP_GPIO_RISING_EDGE)
+               if (trigger == IRQT_RISING)
                        l |= 1 << gpio;
-               else
+               else if (trigger == IRQT_FALLING)
                        l &= ~(1 << gpio);
-               __raw_writel(l, reg);
+               else
+                       goto bad;
+               break;
+       case METHOD_GPIO_24XX:
+               set_24xx_gpio_triggering(reg, gpio, trigger);
                break;
        default:
                BUG();
-               return;
+               goto bad;
        }
+       __raw_writel(l, reg);
+       return 0;
+bad:
+       return -EINVAL;
 }
 
-void omap_set_gpio_edge_ctrl(int gpio, int edge)
+static int gpio_irq_type(unsigned irq, unsigned type)
 {
        struct gpio_bank *bank;
+       unsigned gpio;
+       int retval;
+
+       if (irq > IH_MPUIO_BASE)
+               gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE);
+       else
+               gpio = irq - IH_GPIO_BASE;
 
        if (check_gpio(gpio) < 0)
-               return;
+               return -EINVAL;
+
+       if (type & (__IRQT_LOWLVL|__IRQT_HIGHLVL|IRQT_PROBE))
+               return -EINVAL;
+
        bank = get_gpio_bank(gpio);
        spin_lock(&bank->lock);
-       _set_gpio_edge_ctrl(bank, get_gpio_index(gpio), edge);
+       retval = _set_gpio_triggering(bank, get_gpio_index(gpio), type);
        spin_unlock(&bank->lock);
-}
-
-
-static int _get_gpio_edge_ctrl(struct gpio_bank *bank, int gpio)
-{
-       u32 reg = bank->base, l;
-
-       switch (bank->method) {
-       case METHOD_MPUIO:
-               l = __raw_readl(reg + OMAP_MPUIO_GPIO_INT_EDGE);
-               return (l & (1 << gpio)) ?
-                       OMAP_GPIO_RISING_EDGE : OMAP_GPIO_FALLING_EDGE;
-       case METHOD_GPIO_1510:
-               l = __raw_readl(reg + OMAP1510_GPIO_INT_CONTROL);
-               return (l & (1 << gpio)) ?
-                       OMAP_GPIO_RISING_EDGE : OMAP_GPIO_FALLING_EDGE;
-       case METHOD_GPIO_1610:
-               if (gpio & 0x08)
-                       reg += OMAP1610_GPIO_EDGE_CTRL2;
-               else
-                       reg += OMAP1610_GPIO_EDGE_CTRL1;
-               return (__raw_readl(reg) >> ((gpio & 0x07) << 1)) & 0x03;
-       case METHOD_GPIO_730:
-               l = __raw_readl(reg + OMAP730_GPIO_INT_CONTROL);
-               return (l & (1 << gpio)) ?
-                       OMAP_GPIO_RISING_EDGE : OMAP_GPIO_FALLING_EDGE;
-       default:
-               BUG();
-               return -1;
-       }
+       return retval;
 }
 
 static void _clear_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
 {
-       u32 reg = bank->base;
+       void __iomem *reg = bank->base;
 
        switch (bank->method) {
        case METHOD_MPUIO:
@@ -428,6 +519,9 @@ static void _clear_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
        case METHOD_GPIO_730:
                reg += OMAP730_GPIO_INT_STATUS;
                break;
+       case METHOD_GPIO_24XX:
+               reg += OMAP24XX_GPIO_IRQSTATUS1;
+               break;
        default:
                BUG();
                return;
@@ -442,7 +536,7 @@ static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio)
 
 static void _enable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask, int enable)
 {
-       u32 reg = bank->base;
+       void __iomem *reg = bank->base;
        u32 l;
 
        switch (bank->method) {
@@ -477,6 +571,13 @@ static void _enable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask, int enab
                else
                        l |= gpio_mask;
                break;
+       case METHOD_GPIO_24XX:
+               if (enable)
+                       reg += OMAP24XX_GPIO_SETIRQENABLE1;
+               else
+                       reg += OMAP24XX_GPIO_CLEARIRQENABLE1;
+               l = gpio_mask;
+               break;
        default:
                BUG();
                return;
@@ -489,6 +590,50 @@ static inline void _set_gpio_irqenable(struct gpio_bank *bank, int gpio, int ena
        _enable_gpio_irqbank(bank, 1 << get_gpio_index(gpio), enable);
 }
 
+/*
+ * Note that ENAWAKEUP needs to be enabled in GPIO_SYSCONFIG register.
+ * 1510 does not seem to have a wake-up register. If JTAG is connected
+ * to the target, system will wake up always on GPIO events. While
+ * system is running all registered GPIO interrupts need to have wake-up
+ * enabled. When system is suspended, only selected GPIO interrupts need
+ * to have wake-up enabled.
+ */
+static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable)
+{
+       switch (bank->method) {
+       case METHOD_GPIO_1610:
+       case METHOD_GPIO_24XX:
+               spin_lock(&bank->lock);
+               if (enable)
+                       bank->suspend_wakeup |= (1 << gpio);
+               else
+                       bank->suspend_wakeup &= ~(1 << gpio);
+               spin_unlock(&bank->lock);
+               return 0;
+       default:
+               printk(KERN_ERR "Can't enable GPIO wakeup for method %i\n",
+                      bank->method);
+               return -EINVAL;
+       }
+}
+
+/* Use disable_irq_wake() and enable_irq_wake() functions from drivers */
+static int gpio_wake_enable(unsigned int irq, unsigned int enable)
+{
+       unsigned int gpio = irq - IH_GPIO_BASE;
+       struct gpio_bank *bank;
+       int retval;
+
+       if (check_gpio(gpio) < 0)
+               return -ENODEV;
+       bank = get_gpio_bank(gpio);
+       spin_lock(&bank->lock);
+       retval = _set_gpio_wakeup(bank, get_gpio_index(gpio), enable);
+       spin_unlock(&bank->lock);
+
+       return retval;
+}
+
 int omap_request_gpio(int gpio)
 {
        struct gpio_bank *bank;
@@ -505,14 +650,32 @@ int omap_request_gpio(int gpio)
                return -1;
        }
        bank->reserved_map |= (1 << get_gpio_index(gpio));
+
+       /* Set trigger to none. You need to enable the trigger after request_irq */
+       _set_gpio_triggering(bank, get_gpio_index(gpio), IRQT_NOEDGE);
+
 #ifdef CONFIG_ARCH_OMAP1510
        if (bank->method == METHOD_GPIO_1510) {
-               u32 reg;
+               void __iomem *reg;
 
-               /* Claim the pin for the ARM */
+               /* Claim the pin for MPU */
                reg = bank->base + OMAP1510_GPIO_PIN_CONTROL;
                __raw_writel(__raw_readl(reg) | (1 << get_gpio_index(gpio)), reg);
        }
+#endif
+#ifdef CONFIG_ARCH_OMAP16XX
+       if (bank->method == METHOD_GPIO_1610) {
+               /* Enable wake-up during idle for dynamic tick */
+               void __iomem *reg = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
+               __raw_writel(1 << get_gpio_index(gpio), reg);
+       }
+#endif
+#ifdef CONFIG_ARCH_OMAP24XX
+       if (bank->method == METHOD_GPIO_24XX) {
+               /* Enable wake-up during idle for dynamic tick */
+               void __iomem *reg = bank->base + OMAP24XX_GPIO_SETWKUENA;
+               __raw_writel(1 << get_gpio_index(gpio), reg);
+       }
 #endif
        spin_unlock(&bank->lock);
 
@@ -533,6 +696,20 @@ void omap_free_gpio(int gpio)
                spin_unlock(&bank->lock);
                return;
        }
+#ifdef CONFIG_ARCH_OMAP16XX
+       if (bank->method == METHOD_GPIO_1610) {
+               /* Disable wake-up during idle for dynamic tick */
+               void __iomem *reg = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
+               __raw_writel(1 << get_gpio_index(gpio), reg);
+       }
+#endif
+#ifdef CONFIG_ARCH_OMAP24XX
+       if (bank->method == METHOD_GPIO_24XX) {
+               /* Disable wake-up during idle for dynamic tick */
+               void __iomem *reg = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
+               __raw_writel(1 << get_gpio_index(gpio), reg);
+       }
+#endif
        bank->reserved_map &= ~(1 << get_gpio_index(gpio));
        _set_gpio_direction(bank, get_gpio_index(gpio), 1);
        _set_gpio_irqenable(bank, gpio, 0);
@@ -552,7 +729,7 @@ void omap_free_gpio(int gpio)
 static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc,
                             struct pt_regs *regs)
 {
-       u32 isr_reg = 0;
+       void __iomem *isr_reg = NULL;
        u32 isr;
        unsigned int gpio_irq;
        struct gpio_bank *bank;
@@ -574,24 +751,30 @@ static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc,
        if (bank->method == METHOD_GPIO_730)
                isr_reg = bank->base + OMAP730_GPIO_INT_STATUS;
 #endif
+#ifdef CONFIG_ARCH_OMAP24XX
+       if (bank->method == METHOD_GPIO_24XX)
+               isr_reg = bank->base + OMAP24XX_GPIO_IRQSTATUS1;
+#endif
 
-       isr = __raw_readl(isr_reg);
-       _enable_gpio_irqbank(bank, isr, 0);
-       _clear_gpio_irqbank(bank, isr);
-       _enable_gpio_irqbank(bank, isr, 1);
-       desc->chip->unmask(irq);
-
-       if (unlikely(!isr))
-               return;
-
-       gpio_irq = bank->virtual_irq_start;
-       for (; isr != 0; isr >>= 1, gpio_irq++) {
-               struct irqdesc *d;
-               if (!(isr & 1))
-                       continue;
-               d = irq_desc + gpio_irq;
-               desc_handle_irq(gpio_irq, d, regs);
-       }
+       while(1) {
+               isr = __raw_readl(isr_reg);
+               _enable_gpio_irqbank(bank, isr, 0);
+               _clear_gpio_irqbank(bank, isr);
+               _enable_gpio_irqbank(bank, isr, 1);
+               desc->chip->unmask(irq);
+
+               if (!isr)
+                       break;
+
+               gpio_irq = bank->virtual_irq_start;
+               for (; isr != 0; isr >>= 1, gpio_irq++) {
+                       struct irqdesc *d;
+                       if (!(isr & 1))
+                               continue;
+                       d = irq_desc + gpio_irq;
+                       desc_handle_irq(gpio_irq, d, regs);
+               }
+        }
 }
 
 static void gpio_ack_irq(unsigned int irq)
@@ -613,14 +796,10 @@ static void gpio_mask_irq(unsigned int irq)
 static void gpio_unmask_irq(unsigned int irq)
 {
        unsigned int gpio = irq - IH_GPIO_BASE;
+       unsigned int gpio_idx = get_gpio_index(gpio);
        struct gpio_bank *bank = get_gpio_bank(gpio);
 
-       if (_get_gpio_edge_ctrl(bank, get_gpio_index(gpio)) == OMAP_GPIO_NO_EDGE) {
-               printk(KERN_ERR "OMAP GPIO %d: trying to enable GPIO IRQ while no edge is set\n",
-                      gpio);
-               _set_gpio_edge_ctrl(bank, get_gpio_index(gpio), OMAP_GPIO_RISING_EDGE);
-       }
-       _set_gpio_irqenable(bank, gpio, 1);
+       _set_gpio_irqenable(bank, gpio_idx, 1);
 }
 
 static void mpuio_ack_irq(unsigned int irq)
@@ -645,9 +824,11 @@ static void mpuio_unmask_irq(unsigned int irq)
 }
 
 static struct irqchip gpio_irq_chip = {
-       .ack    = gpio_ack_irq,
-       .mask   = gpio_mask_irq,
-       .unmask = gpio_unmask_irq,
+       .ack            = gpio_ack_irq,
+       .mask           = gpio_mask_irq,
+       .unmask         = gpio_unmask_irq,
+       .set_type       = gpio_irq_type,
+       .set_wake       = gpio_wake_enable,
 };
 
 static struct irqchip mpuio_irq_chip = {
@@ -657,6 +838,7 @@ static struct irqchip mpuio_irq_chip = {
 };
 
 static int initialized = 0;
+static struct clk * gpio_ck = NULL;
 
 static int __init _omap_gpio_init(void)
 {
@@ -665,6 +847,14 @@ static int __init _omap_gpio_init(void)
 
        initialized = 1;
 
+       if (cpu_is_omap1510()) {
+               gpio_ck = clk_get(NULL, "arm_gpio_ck");
+               if (IS_ERR(gpio_ck))
+                       printk("Could not get arm_gpio_ck\n");
+               else
+                       clk_use(gpio_ck);
+       }
+
 #ifdef CONFIG_ARCH_OMAP1510
        if (cpu_is_omap1510()) {
                printk(KERN_INFO "OMAP1510 GPIO hardware\n");
@@ -674,7 +864,7 @@ static int __init _omap_gpio_init(void)
 #endif
 #if defined(CONFIG_ARCH_OMAP16XX)
        if (cpu_is_omap16xx()) {
-               int rev;
+               u32 rev;
 
                gpio_bank_count = 5;
                gpio_bank = gpio_bank_1610;
@@ -689,6 +879,17 @@ static int __init _omap_gpio_init(void)
                gpio_bank_count = 7;
                gpio_bank = gpio_bank_730;
        }
+#endif
+#ifdef CONFIG_ARCH_OMAP24XX
+       if (cpu_is_omap24xx()) {
+               int rev;
+
+               gpio_bank_count = 4;
+               gpio_bank = gpio_bank_24xx;
+               rev = omap_readl(gpio_bank[0].base + OMAP24XX_GPIO_REVISION);
+               printk(KERN_INFO "OMAP24xx GPIO hardware version %d.%d\n",
+                       (rev >> 4) & 0x0f, rev & 0x0f);
+       }
 #endif
        for (i = 0; i < gpio_bank_count; i++) {
                int j, gpio_count = 16;
@@ -710,6 +911,7 @@ static int __init _omap_gpio_init(void)
                if (bank->method == METHOD_GPIO_1610) {
                        __raw_writew(0x0000, bank->base + OMAP1610_GPIO_IRQENABLE1);
                        __raw_writew(0xffff, bank->base + OMAP1610_GPIO_IRQSTATUS1);
+                       __raw_writew(0x0014, bank->base + OMAP1610_GPIO_SYSCONFIG);
                }
 #endif
 #ifdef CONFIG_ARCH_OMAP730
@@ -719,6 +921,14 @@ static int __init _omap_gpio_init(void)
 
                        gpio_count = 32; /* 730 has 32-bit GPIOs */
                }
+#endif
+#ifdef CONFIG_ARCH_OMAP24XX
+               if (bank->method == METHOD_GPIO_24XX) {
+                       __raw_writel(0x00000000, bank->base + OMAP24XX_GPIO_IRQENABLE1);
+                       __raw_writel(0xffffffff, bank->base + OMAP24XX_GPIO_IRQSTATUS1);
+
+                       gpio_count = 32;
+               }
 #endif
                for (j = bank->virtual_irq_start;
                     j < bank->virtual_irq_start + gpio_count; j++) {
@@ -735,12 +945,97 @@ static int __init _omap_gpio_init(void)
 
        /* Enable system clock for GPIO module.
         * The CAM_CLK_CTRL *is* really the right place. */
-       if (cpu_is_omap1610() || cpu_is_omap1710())
+       if (cpu_is_omap16xx())
                omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04, ULPD_CAM_CLK_CTRL);
 
        return 0;
 }
 
+#if defined (CONFIG_ARCH_OMAP16XX) || defined (CONFIG_ARCH_OMAP24XX)
+static int omap_gpio_suspend(struct sys_device *dev, pm_message_t mesg)
+{
+       int i;
+
+       if (!cpu_is_omap24xx() && !cpu_is_omap16xx())
+               return 0;
+
+       for (i = 0; i < gpio_bank_count; i++) {
+               struct gpio_bank *bank = &gpio_bank[i];
+               void __iomem *wake_status;
+               void __iomem *wake_clear;
+               void __iomem *wake_set;
+
+               switch (bank->method) {
+               case METHOD_GPIO_1610:
+                       wake_status = bank->base + OMAP1610_GPIO_WAKEUPENABLE;
+                       wake_clear = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
+                       wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
+                       break;
+               case METHOD_GPIO_24XX:
+                       wake_status = bank->base + OMAP24XX_GPIO_SETWKUENA;
+                       wake_clear = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
+                       wake_set = bank->base + OMAP24XX_GPIO_SETWKUENA;
+                       break;
+               default:
+                       continue;
+               }
+
+               spin_lock(&bank->lock);
+               bank->saved_wakeup = __raw_readl(wake_status);
+               __raw_writel(0xffffffff, wake_clear);
+               __raw_writel(bank->suspend_wakeup, wake_set);
+               spin_unlock(&bank->lock);
+       }
+
+       return 0;
+}
+
+static int omap_gpio_resume(struct sys_device *dev)
+{
+       int i;
+
+       if (!cpu_is_omap24xx() && !cpu_is_omap16xx())
+               return 0;
+
+       for (i = 0; i < gpio_bank_count; i++) {
+               struct gpio_bank *bank = &gpio_bank[i];
+               void __iomem *wake_clear;
+               void __iomem *wake_set;
+
+               switch (bank->method) {
+               case METHOD_GPIO_1610:
+                       wake_clear = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
+                       wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
+                       break;
+               case METHOD_GPIO_24XX:
+                       wake_clear = bank->base + OMAP1610_GPIO_CLEAR_WAKEUPENA;
+                       wake_set = bank->base + OMAP1610_GPIO_SET_WAKEUPENA;
+                       break;
+               default:
+                       continue;
+               }
+
+               spin_lock(&bank->lock);
+               __raw_writel(0xffffffff, wake_clear);
+               __raw_writel(bank->saved_wakeup, wake_set);
+               spin_unlock(&bank->lock);
+       }
+
+       return 0;
+}
+
+static struct sysdev_class omap_gpio_sysclass = {
+       set_kset_name("gpio"),
+       .suspend        = omap_gpio_suspend,
+       .resume         = omap_gpio_resume,
+};
+
+static struct sys_device omap_gpio_device = {
+       .id             = 0,
+       .cls            = &omap_gpio_sysclass,
+};
+#endif
+
 /*
  * This may get called early from board specific init
  */
@@ -752,11 +1047,30 @@ int omap_gpio_init(void)
                return 0;
 }
 
+static int __init omap_gpio_sysinit(void)
+{
+       int ret = 0;
+
+       if (!initialized)
+               ret = _omap_gpio_init();
+
+#if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP24XX)
+       if (cpu_is_omap16xx() || cpu_is_omap24xx()) {
+               if (ret == 0) {
+                       ret = sysdev_class_register(&omap_gpio_sysclass);
+                       if (ret == 0)
+                               ret = sysdev_register(&omap_gpio_device);
+               }
+       }
+#endif
+
+       return ret;
+}
+
 EXPORT_SYMBOL(omap_request_gpio);
 EXPORT_SYMBOL(omap_free_gpio);
 EXPORT_SYMBOL(omap_set_gpio_direction);
 EXPORT_SYMBOL(omap_set_gpio_dataout);
 EXPORT_SYMBOL(omap_get_gpio_datain);
-EXPORT_SYMBOL(omap_set_gpio_edge_ctrl);
 
-arch_initcall(omap_gpio_init);
+arch_initcall(omap_gpio_sysinit);
index 43567d5edddb409124466110e91300743addb0a6..9c9b7df3faf6d2fe15315899cda29e8d43a8466e 100644 (file)
@@ -27,6 +27,7 @@
 #include <asm/arch/dma.h>
 #include <asm/arch/mux.h>
 #include <asm/arch/irqs.h>
+#include <asm/arch/dsp_common.h>
 #include <asm/arch/mcbsp.h>
 
 #include <asm/hardware/clock.h>
@@ -187,9 +188,6 @@ static int omap_mcbsp_check(unsigned int id)
        return -1;
 }
 
-#define EN_XORPCK              1
-#define DSP_RSTCT2              0xe1008014
-
 static void omap_mcbsp_dsp_request(void)
 {
        if (cpu_is_omap1510() || cpu_is_omap16xx()) {
@@ -198,6 +196,11 @@ static void omap_mcbsp_dsp_request(void)
 
                /* enable 12MHz clock to mcbsp 1 & 3 */
                clk_use(mcbsp_dspxor_ck);
+
+               /*
+                * DSP external peripheral reset
+                * FIXME: This should be moved to dsp code
+                */
                __raw_writew(__raw_readw(DSP_RSTCT2) | 1 | 1 << 1,
                             DSP_RSTCT2);
        }
index ea7b955b9c819f05df337590529143ae982cc74b..64482040f89e9a7c0da908cd0bb8429b4ac5e274 100644 (file)
@@ -48,6 +48,9 @@ omap_cfg_reg(const reg_cfg_t reg_cfg)
                pull_orig = 0, pull = 0;
        unsigned int mask, warn = 0;
 
+       if (cpu_is_omap7xx())
+               return 0;
+
        if (reg_cfg > ARRAY_SIZE(reg_cfg_table)) {
                printk(KERN_ERR "MUX: reg_cfg %d\n", reg_cfg);
                return -EINVAL;
index 2ede2ee8cae420ecf4b5a24593e572058c942929..1fb16f9edfd58ba552ddb0bee7f6487e0fb6d5fd 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <linux/config.h>
 #include <linux/module.h>
+#include <linux/version.h>
 #include <linux/types.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
index e6536b16c385b16aabc3a46303a00d668b482239..e15c6c1ddec954775b68ac623738885675da04d4 100644 (file)
 #include <linux/sched.h>
 #include <linux/proc_fs.h>
 #include <linux/pm.h>
+#include <linux/interrupt.h>
 
 #include <asm/io.h>
+#include <asm/irq.h>
 #include <asm/mach/time.h>
-#include <asm/mach-types.h>
+#include <asm/mach/irq.h>
 
-#include <asm/arch/omap16xx.h>
+#include <asm/mach-types.h>
+#include <asm/arch/irqs.h>
+#include <asm/arch/tc.h>
 #include <asm/arch/pm.h>
 #include <asm/arch/mux.h>
-#include <asm/arch/tc.h>
 #include <asm/arch/tps65010.h>
+#include <asm/arch/dsp_common.h>
 
 #include "clock.h"
+#include "sram.h"
 
 static unsigned int arm_sleep_save[ARM_SLEEP_SAVE_SIZE];
 static unsigned short ulpd_sleep_save[ULPD_SLEEP_SAVE_SIZE];
 static unsigned int mpui1510_sleep_save[MPUI1510_SLEEP_SAVE_SIZE];
 static unsigned int mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_SIZE];
 
+static void (*omap_sram_idle)(void) = NULL;
+static void (*omap_sram_suspend)(unsigned long r0, unsigned long r1) = NULL;
+
 /*
  * Let's power down on idle, but only if we are really
  * idle, because once we start down the path of
@@ -65,7 +73,6 @@ static unsigned int mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_SIZE];
  */
 void omap_pm_idle(void)
 {
-       int (*func_ptr)(void) = 0;
        unsigned int mask32 = 0;
 
        /*
@@ -83,6 +90,13 @@ void omap_pm_idle(void)
        }
        mask32 = omap_readl(ARM_SYSST);
 
+       /*
+        * Prevent the ULPD from entering low power state by setting
+        * POWER_CTRL_REG:4 = 0
+        */
+       omap_writew(omap_readw(ULPD_POWER_CTRL) &
+                   ~ULPD_DEEP_SLEEP_TRANSITION_EN, ULPD_POWER_CTRL);
+
        /*
         * Since an interrupt may set up a timer, we don't want to
         * reprogram the hardware timer with interrupts enabled.
@@ -92,18 +106,9 @@ void omap_pm_idle(void)
 
        if ((mask32 & DSP_IDLE) == 0) {
                __asm__ volatile ("mcr  p15, 0, r0, c7, c0, 4");
-       } else {
-
-               if (cpu_is_omap1510()) {
-                       func_ptr = (void *)(OMAP1510_SRAM_IDLE_SUSPEND);
-               } else if (cpu_is_omap1610() || cpu_is_omap1710()) {
-                       func_ptr = (void *)(OMAP1610_SRAM_IDLE_SUSPEND);
-               } else if (cpu_is_omap5912()) {
-                       func_ptr = (void *)(OMAP5912_SRAM_IDLE_SUSPEND);
-               }
+       } else
+               omap_sram_idle();
 
-               func_ptr();
-       }
        local_fiq_enable();
        local_irq_enable();
 }
@@ -115,58 +120,55 @@ void omap_pm_idle(void)
  */
 static void omap_pm_wakeup_setup(void)
 {
-       /*
-        * Enable ARM XOR clock and release peripheral from reset by
-        * writing 1 to PER_EN bit in ARM_RSTCT2, this is required
-        * for UART configuration to use UART2 to wake up.
-        */
-
-       omap_writel(omap_readl(ARM_IDLECT2) | ENABLE_XORCLK, ARM_IDLECT2);
-       omap_writel(omap_readl(ARM_RSTCT2) | PER_EN, ARM_RSTCT2);
-       omap_writew(MODEM_32K_EN, ULPD_CLOCK_CTRL);
+       u32 level1_wake = OMAP_IRQ_BIT(INT_IH2_IRQ);
+       u32 level2_wake = OMAP_IRQ_BIT(INT_UART2) | OMAP_IRQ_BIT(INT_KEYBOARD);
 
        /*
-        * Turn off all interrupts except L1-2nd level cascade,
-        * and the L2 wakeup interrupts: keypad and UART2.
+        * Turn off all interrupts except GPIO bank 1, L1-2nd level cascade,
+        * and the L2 wakeup interrupts: keypad and UART2. Note that the
+        * drivers must still separately call omap_set_gpio_wakeup() to
+        * wake up to a GPIO interrupt.
         */
+       if (cpu_is_omap1510() || cpu_is_omap16xx())
+               level1_wake |= OMAP_IRQ_BIT(INT_GPIO_BANK1);
+       else if (cpu_is_omap730())
+               level1_wake |= OMAP_IRQ_BIT(INT_730_GPIO_BANK1);
 
-       omap_writel(~IRQ_LEVEL2, OMAP_IH1_MIR);
+       omap_writel(~level1_wake, OMAP_IH1_MIR);
 
-       if (cpu_is_omap1510()) {
-               omap_writel(~(IRQ_UART2 | IRQ_KEYBOARD),  OMAP_IH2_MIR);
-       }
+       if (cpu_is_omap1510())
+               omap_writel(~level2_wake,  OMAP_IH2_MIR);
 
+       /* INT_1610_WAKE_UP_REQ is needed for GPIO wakeup... */
        if (cpu_is_omap16xx()) {
-               omap_writel(~(IRQ_UART2 | IRQ_KEYBOARD), OMAP_IH2_0_MIR);
-
-               omap_writel(~0x0, OMAP_IH2_1_MIR);
+               omap_writel(~level2_wake, OMAP_IH2_0_MIR);
+               omap_writel(~OMAP_IRQ_BIT(INT_1610_WAKE_UP_REQ), OMAP_IH2_1_MIR);
                omap_writel(~0x0, OMAP_IH2_2_MIR);
                omap_writel(~0x0, OMAP_IH2_3_MIR);
        }
 
-       /*  New IRQ agreement */
+       /*  New IRQ agreement, recalculate in cascade order */
+       omap_writel(1, OMAP_IH2_CONTROL);
        omap_writel(1, OMAP_IH1_CONTROL);
-
-       /* external PULL to down, bit 22 = 0 */
-       omap_writel(omap_readl(PULL_DWN_CTRL_2) & ~(1<<22), PULL_DWN_CTRL_2);
 }
 
 void omap_pm_suspend(void)
 {
-       unsigned int mask32 = 0;
        unsigned long arg0 = 0, arg1 = 0;
-       int (*func_ptr)(unsigned short, unsigned short) = 0;
-       unsigned short save_dsp_idlect2;
 
-       printk("PM: OMAP%x is entering deep sleep now ...\n", system_rev);
+       printk("PM: OMAP%x is trying to enter deep sleep...\n", system_rev);
+
+       omap_serial_wake_trigger(1);
 
        if (machine_is_omap_osk()) {
                /* Stop LED1 (D9) blink */
                tps65010_set_led(LED1, OFF);
        }
 
+       omap_writew(0xffff, ULPD_SOFT_DISABLE_REQ_REG);
+
        /*
-        * Step 1: turn off interrupts
+        * Step 1: turn off interrupts (FIXME: NOTE: already disabled)
         */
 
        local_irq_disable();
@@ -207,6 +209,8 @@ void omap_pm_suspend(void)
        ARM_SAVE(ARM_CKCTL);
        ARM_SAVE(ARM_IDLECT1);
        ARM_SAVE(ARM_IDLECT2);
+       if (!(cpu_is_omap1510()))
+               ARM_SAVE(ARM_IDLECT3);
        ARM_SAVE(ARM_EWUPCT);
        ARM_SAVE(ARM_RSTCT1);
        ARM_SAVE(ARM_RSTCT2);
@@ -214,42 +218,12 @@ void omap_pm_suspend(void)
        ULPD_SAVE(ULPD_CLOCK_CTRL);
        ULPD_SAVE(ULPD_STATUS_REQ);
 
-       /*
-        * Step 3: LOW_PWR signal enabling
-        *
-        * Allow the LOW_PWR signal to be visible on MPUIO5 ball.
-        */
-       if (cpu_is_omap1510()) {
-               /* POWER_CTRL_REG = 0x1 (LOW_POWER is available) */
-               omap_writew(omap_readw(ULPD_POWER_CTRL) |
-                           OMAP1510_ULPD_LOW_POWER_REQ, ULPD_POWER_CTRL);
-       } else if (cpu_is_omap16xx()) {
-               /* POWER_CTRL_REG = 0x1 (LOW_POWER is available) */
-               omap_writew(omap_readw(ULPD_POWER_CTRL) |
-                           OMAP1610_ULPD_LOW_POWER_REQ, ULPD_POWER_CTRL);
-       }
-
-       /* configure LOW_PWR pin */
-       omap_cfg_reg(T20_1610_LOW_PWR);
+       /* (Step 3 removed - we now allow deep sleep by default) */
 
        /*
         * Step 4: OMAP DSP Shutdown
         */
 
-       /* Set DSP_RST = 1 and DSP_EN = 0, put DSP block into reset */
-       omap_writel((omap_readl(ARM_RSTCT1) | DSP_RST) & ~DSP_ENABLE,
-                   ARM_RSTCT1);
-
-       /* Set DSP boot mode to DSP-IDLE, DSP_BOOT_MODE = 0x2 */
-        omap_writel(DSP_IDLE_MODE, MPUI_DSP_BOOT_CONFIG);
-
-       /* Set EN_DSPCK = 0, stop DSP block clock */
-       omap_writel(omap_readl(ARM_CKCTL) & ~DSP_CLOCK_ENABLE, ARM_CKCTL);
-
-       /* Stop any DSP domain clocks */
-       omap_writel(omap_readl(ARM_IDLECT2) | (1<<EN_APICK), ARM_IDLECT2);
-       save_dsp_idlect2 = __raw_readw(DSP_IDLECT2);
-       __raw_writew(0, DSP_IDLECT2);
 
        /*
         * Step 5: Wakeup Event Setup
@@ -258,24 +232,9 @@ void omap_pm_suspend(void)
        omap_pm_wakeup_setup();
 
        /*
-        * Step 6a: ARM and Traffic controller shutdown
-        *
-        * Step 6 starts here with clock and watchdog disable
+        * Step 6: ARM and Traffic controller shutdown
         */
 
-       /* stop clocks */
-       mask32 = omap_readl(ARM_IDLECT2);
-       mask32 &= ~(1<<EN_WDTCK);  /* bit 0 -> 0 (WDT clock) */
-       mask32 |=  (1<<EN_XORPCK); /* bit 1 -> 1 (XORPCK clock) */
-       mask32 &= ~(1<<EN_PERCK);  /* bit 2 -> 0 (MPUPER_CK clock) */
-       mask32 &= ~(1<<EN_LCDCK);  /* bit 3 -> 0 (LCDC clock) */
-       mask32 &= ~(1<<EN_LBCK);   /* bit 4 -> 0 (local bus clock) */
-       mask32 |=  (1<<EN_APICK);  /* bit 6 -> 1 (MPUI clock) */
-       mask32 &= ~(1<<EN_TIMCK);  /* bit 7 -> 0 (MPU timer clock) */
-       mask32 &= ~(1<<DMACK_REQ); /* bit 8 -> 0 (DMAC clock) */
-       mask32 &= ~(1<<EN_GPIOCK); /* bit 9 -> 0 (GPIO clock) */
-       omap_writel(mask32, ARM_IDLECT2);
-
        /* disable ARM watchdog */
        omap_writel(0x00F5, OMAP_WDT_TIMER_MODE);
        omap_writel(0x00A0, OMAP_WDT_TIMER_MODE);
@@ -295,47 +254,24 @@ void omap_pm_suspend(void)
        arg0 = arm_sleep_save[ARM_SLEEP_SAVE_ARM_IDLECT1];
        arg1 = arm_sleep_save[ARM_SLEEP_SAVE_ARM_IDLECT2];
 
-       if (cpu_is_omap1510()) {
-               func_ptr = (void *)(OMAP1510_SRAM_API_SUSPEND);
-       } else if (cpu_is_omap1610() || cpu_is_omap1710()) {
-               func_ptr = (void *)(OMAP1610_SRAM_API_SUSPEND);
-       } else if (cpu_is_omap5912()) {
-               func_ptr = (void *)(OMAP5912_SRAM_API_SUSPEND);
-       }
-
        /*
         * Step 6c: ARM and Traffic controller shutdown
         *
         * Jump to assembly code. The processor will stay there
         * until wake up.
         */
-
-        func_ptr(arg0, arg1);
+        omap_sram_suspend(arg0, arg1);
 
        /*
         * If we are here, processor is woken up!
         */
 
-       if (cpu_is_omap1510()) {
-               /* POWER_CTRL_REG = 0x0 (LOW_POWER is disabled) */
-               omap_writew(omap_readw(ULPD_POWER_CTRL) &
-                           ~OMAP1510_ULPD_LOW_POWER_REQ, ULPD_POWER_CTRL);
-       } else if (cpu_is_omap16xx()) {
-               /* POWER_CTRL_REG = 0x0 (LOW_POWER is disabled) */
-               omap_writew(omap_readw(ULPD_POWER_CTRL) &
-                           ~OMAP1610_ULPD_LOW_POWER_REQ, ULPD_POWER_CTRL);
-       }
-
-
-       /* Restore DSP clocks */
-       omap_writel(omap_readl(ARM_IDLECT2) | (1<<EN_APICK), ARM_IDLECT2);
-       __raw_writew(save_dsp_idlect2, DSP_IDLECT2);
-       ARM_RESTORE(ARM_IDLECT2);
-
        /*
         * Restore ARM state, except ARM_IDLECT1/2 which omap_cpu_suspend did
         */
 
+       if (!(cpu_is_omap1510()))
+               ARM_RESTORE(ARM_IDLECT3);
        ARM_RESTORE(ARM_CKCTL);
        ARM_RESTORE(ARM_EWUPCT);
        ARM_RESTORE(ARM_RSTCT1);
@@ -366,6 +302,8 @@ void omap_pm_suspend(void)
                MPUI1610_RESTORE(OMAP_IH2_3_MIR);
        }
 
+       omap_writew(0, ULPD_SOFT_DISABLE_REQ_REG);
+
        /*
         * Reenable interrupts
         */
@@ -373,6 +311,8 @@ void omap_pm_suspend(void)
        local_irq_enable();
        local_fiq_enable();
 
+       omap_serial_wake_trigger(0);
+
        printk("PM: OMAP%x is re-starting from deep sleep...\n", system_rev);
 
        if (machine_is_omap_osk()) {
@@ -401,6 +341,8 @@ static int omap_pm_read_proc(
        ARM_SAVE(ARM_CKCTL);
        ARM_SAVE(ARM_IDLECT1);
        ARM_SAVE(ARM_IDLECT2);
+       if (!(cpu_is_omap1510()))
+               ARM_SAVE(ARM_IDLECT3);
        ARM_SAVE(ARM_EWUPCT);
        ARM_SAVE(ARM_RSTCT1);
        ARM_SAVE(ARM_RSTCT2);
@@ -436,6 +378,7 @@ static int omap_pm_read_proc(
                   "ARM_CKCTL_REG:            0x%-8x     \n"
                   "ARM_IDLECT1_REG:          0x%-8x     \n"
                   "ARM_IDLECT2_REG:          0x%-8x     \n"
+                  "ARM_IDLECT3_REG:          0x%-8x     \n"
                   "ARM_EWUPCT_REG:           0x%-8x     \n"
                   "ARM_RSTCT1_REG:           0x%-8x     \n"
                   "ARM_RSTCT2_REG:           0x%-8x     \n"
@@ -449,6 +392,7 @@ static int omap_pm_read_proc(
                   ARM_SHOW(ARM_CKCTL),
                   ARM_SHOW(ARM_IDLECT1),
                   ARM_SHOW(ARM_IDLECT2),
+                  ARM_SHOW(ARM_IDLECT3),
                   ARM_SHOW(ARM_EWUPCT),
                   ARM_SHOW(ARM_RSTCT1),
                   ARM_SHOW(ARM_RSTCT2),
@@ -507,7 +451,7 @@ static void omap_pm_init_proc(void)
 
        entry = create_proc_read_entry("driver/omap_pm",
                                       S_IWUSR | S_IRUGO, NULL,
-                                      omap_pm_read_proc, 0);
+          omap_pm_read_proc, NULL);
 }
 
 #endif /* DEBUG && CONFIG_PROC_FS */
@@ -580,7 +524,21 @@ static int omap_pm_finish(suspend_state_t state)
 }
 
 
-struct pm_ops omap_pm_ops ={
+static irqreturn_t  omap_wakeup_interrupt(int  irq, void *  dev,
+                                    struct pt_regs *  regs)
+{
+       return IRQ_HANDLED;
+}
+
+static struct irqaction omap_wakeup_irq = {
+       .name           = "peripheral wakeup",
+       .flags          = SA_INTERRUPT,
+       .handler        = omap_wakeup_interrupt
+};
+
+
+
+static struct pm_ops omap_pm_ops ={
        .pm_disk_mode = 0,
         .prepare        = omap_pm_prepare,
         .enter          = omap_pm_enter,
@@ -590,42 +548,61 @@ struct pm_ops omap_pm_ops ={
 static int __init omap_pm_init(void)
 {
        printk("Power Management for TI OMAP.\n");
-       pm_idle = omap_pm_idle;
        /*
         * We copy the assembler sleep/wakeup routines to SRAM.
         * These routines need to be in SRAM as that's the only
         * memory the MPU can see when it wakes up.
         */
-
-#ifdef CONFIG_ARCH_OMAP1510
        if (cpu_is_omap1510()) {
-               memcpy((void *)OMAP1510_SRAM_IDLE_SUSPEND,
-                      omap1510_idle_loop_suspend,
-                      omap1510_idle_loop_suspend_sz);
-               memcpy((void *)OMAP1510_SRAM_API_SUSPEND, omap1510_cpu_suspend,
-                      omap1510_cpu_suspend_sz);
-       } else
-#endif
-       if (cpu_is_omap1610() || cpu_is_omap1710()) {
-               memcpy((void *)OMAP1610_SRAM_IDLE_SUSPEND,
-                      omap1610_idle_loop_suspend,
-                      omap1610_idle_loop_suspend_sz);
-               memcpy((void *)OMAP1610_SRAM_API_SUSPEND, omap1610_cpu_suspend,
-                      omap1610_cpu_suspend_sz);
-       } else if (cpu_is_omap5912()) {
-               memcpy((void *)OMAP5912_SRAM_IDLE_SUSPEND,
-                      omap1610_idle_loop_suspend,
-                      omap1610_idle_loop_suspend_sz);
-               memcpy((void *)OMAP5912_SRAM_API_SUSPEND, omap1610_cpu_suspend,
-                      omap1610_cpu_suspend_sz);
+               omap_sram_idle = omap_sram_push(omap1510_idle_loop_suspend,
+                                               omap1510_idle_loop_suspend_sz);
+               omap_sram_suspend = omap_sram_push(omap1510_cpu_suspend,
+                                                  omap1510_cpu_suspend_sz);
+       } else if (cpu_is_omap16xx()) {
+               omap_sram_idle = omap_sram_push(omap1610_idle_loop_suspend,
+                                               omap1610_idle_loop_suspend_sz);
+               omap_sram_suspend = omap_sram_push(omap1610_cpu_suspend,
+                                                  omap1610_cpu_suspend_sz);
        }
 
+       if (omap_sram_idle == NULL || omap_sram_suspend == NULL) {
+               printk(KERN_ERR "PM not initialized: Missing SRAM support\n");
+               return -ENODEV;
+       }
+
+       pm_idle = omap_pm_idle;
+
+       setup_irq(INT_1610_WAKE_UP_REQ, &omap_wakeup_irq);
+#if 0
+       /* --- BEGIN BOARD-DEPENDENT CODE --- */
+       /* Sleepx mask direction */
+       omap_writew((omap_readw(0xfffb5008) & ~2), 0xfffb5008);
+       /* Unmask sleepx signal */
+       omap_writew((omap_readw(0xfffb5004) & ~2), 0xfffb5004);
+       /* --- END BOARD-DEPENDENT CODE --- */
+#endif
+
+       /* Program new power ramp-up time
+        * (0 for most boards since we don't lower voltage when in deep sleep)
+        */
+       omap_writew(ULPD_SETUP_ANALOG_CELL_3_VAL, ULPD_SETUP_ANALOG_CELL_3);
+
+       /* Setup ULPD POWER_CTRL_REG - enter deep sleep whenever possible */
+       omap_writew(ULPD_POWER_CTRL_REG_VAL, ULPD_POWER_CTRL);
+
+       /* Configure IDLECT3 */
+       if (cpu_is_omap16xx())
+               omap_writel(OMAP1610_IDLECT3_VAL, OMAP1610_IDLECT3);
+
        pm_set_ops(&omap_pm_ops);
 
 #if defined(DEBUG) && defined(CONFIG_PROC_FS)
        omap_pm_init_proc();
 #endif
 
+       /* configure LOW_PWR pin */
+       omap_cfg_reg(T20_1610_LOW_PWR);
+
        return 0;
 }
 __initcall(omap_pm_init);
index 279490ce772b16bc9e47cd20718fe8e10ffc69ce..9f745836f6aac97e8b76e8e61c9b516d3d4bf388 100644 (file)
@@ -66,7 +66,7 @@ ENTRY(omap1510_idle_loop_suspend)
        @ get ARM_IDLECT2 into r2
        ldrh    r2, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
        mov     r5, #OMAP1510_IDLE_CLOCK_DOMAINS & 0xff
-       orr     r5,r5, #OMAP1510_IDLE_CLOCK_DOMAINS & 0xff00
+       orr     r5, r5, #OMAP1510_IDLE_CLOCK_DOMAINS & 0xff00
        strh    r5, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
 
        @ request ARM idle
@@ -76,7 +76,7 @@ ENTRY(omap1510_idle_loop_suspend)
        strh    r3, [r4, #ARM_IDLECT1_ASM_OFFSET & 0xff]
 
        mov     r5, #IDLE_WAIT_CYCLES & 0xff
-       orr     r5, r5, #IDLE_WAIT_CYCLES & 0xff00
+       orr     r5, r5, #IDLE_WAIT_CYCLES & 0xff00
 l_1510:        subs    r5, r5, #1
        bne     l_1510
 /*
@@ -96,7 +96,7 @@ l_1510:       subs    r5, r5, #1
        strh    r2, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
        strh    r1, [r4, #ARM_IDLECT1_ASM_OFFSET & 0xff]
 
-       ldmfd   sp!, {r0 - r12, pc}     @ restore regs and return
+       ldmfd   sp!, {r0 - r12, pc}             @ restore regs and return
 
 ENTRY(omap1510_idle_loop_suspend_sz)
        .word   . - omap1510_idle_loop_suspend
@@ -115,8 +115,8 @@ ENTRY(omap1610_idle_loop_suspend)
        @ turn off clock domains
        @ get ARM_IDLECT2 into r2
        ldrh    r2, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
-       mov     r5, #OMAP1610_IDLE_CLOCK_DOMAINS & 0xff
-       orr     r5,r5, #OMAP1610_IDLE_CLOCK_DOMAINS & 0xff00
+       mov     r5, #OMAP1610_IDLECT2_SLEEP_VAL & 0xff
+       orr     r5, r5, #OMAP1610_IDLECT2_SLEEP_VAL & 0xff00
        strh    r5, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
 
        @ request ARM idle
@@ -126,7 +126,7 @@ ENTRY(omap1610_idle_loop_suspend)
        strh    r3, [r4, #ARM_IDLECT1_ASM_OFFSET & 0xff]
 
        mov     r5, #IDLE_WAIT_CYCLES & 0xff
-       orr     r5, r5, #IDLE_WAIT_CYCLES & 0xff00
+       orr     r5, r5, #IDLE_WAIT_CYCLES & 0xff00
 l_1610:        subs    r5, r5, #1
        bne     l_1610
 /*
@@ -146,7 +146,7 @@ l_1610:     subs    r5, r5, #1
        strh    r2, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
        strh    r1, [r4, #ARM_IDLECT1_ASM_OFFSET & 0xff]
 
-       ldmfd   sp!, {r0 - r12, pc}     @ restore regs and return
+       ldmfd   sp!, {r0 - r12, pc}             @ restore regs and return
 
 ENTRY(omap1610_idle_loop_suspend_sz)
        .word   . - omap1610_idle_loop_suspend
@@ -208,7 +208,7 @@ ENTRY(omap1510_cpu_suspend)
 
        @ turn off clock domains
        mov     r5, #OMAP1510_IDLE_CLOCK_DOMAINS & 0xff
-       orr     r5,r5, #OMAP1510_IDLE_CLOCK_DOMAINS & 0xff00
+       orr     r5, r5, #OMAP1510_IDLE_CLOCK_DOMAINS & 0xff00
        strh    r5, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
 
        @ request ARM idle
@@ -217,7 +217,7 @@ ENTRY(omap1510_cpu_suspend)
        strh    r3, [r4, #ARM_IDLECT1_ASM_OFFSET & 0xff]
 
        mov     r5, #IDLE_WAIT_CYCLES & 0xff
-       orr     r5, r5, #IDLE_WAIT_CYCLES & 0xff00
+       orr     r5, r5, #IDLE_WAIT_CYCLES & 0xff00
 l_1510_2:
        subs    r5, r5, #1
        bne     l_1510_2
@@ -237,7 +237,7 @@ l_1510_2:
        strh    r0, [r4, #ARM_IDLECT1_ASM_OFFSET & 0xff]
 
        @ restore regs and return
-       ldmfd   sp!, {r0 - r12, pc}
+       ldmfd   sp!, {r0 - r12, pc}
 
 ENTRY(omap1510_cpu_suspend_sz)
        .word   . - omap1510_cpu_suspend
@@ -249,21 +249,26 @@ ENTRY(omap1610_cpu_suspend)
        @ save registers on stack
        stmfd   sp!, {r0 - r12, lr}
 
+       @ Drain write cache
+       mov     r4, #0
+       mcr     p15, 0, r0, c7, c10, 4
+       nop
+
        @ load base address of Traffic Controller
-       mov     r4, #TCMIF_ASM_BASE & 0xff000000
-       orr     r4, r4, #TCMIF_ASM_BASE & 0x00ff0000
-       orr     r4, r4, #TCMIF_ASM_BASE & 0x0000ff00
+       mov     r6, #TCMIF_ASM_BASE & 0xff000000
+       orr     r6, r6, #TCMIF_ASM_BASE & 0x00ff0000
+       orr     r6, r6, #TCMIF_ASM_BASE & 0x0000ff00
 
        @ prepare to put SDRAM into self-refresh manually
-       ldr     r5, [r4, #EMIFF_SDRAM_CONFIG_ASM_OFFSET & 0xff]
-       orr     r5, r5, #SELF_REFRESH_MODE & 0xff000000
-       orr     r5, r5, #SELF_REFRESH_MODE & 0x000000ff
-       str     r5, [r4, #EMIFF_SDRAM_CONFIG_ASM_OFFSET & 0xff]
+       ldr     r7, [r6, #EMIFF_SDRAM_CONFIG_ASM_OFFSET & 0xff]
+       orr     r9, r7, #SELF_REFRESH_MODE & 0xff000000
+       orr     r9, r9, #SELF_REFRESH_MODE & 0x000000ff
+       str     r9, [r6, #EMIFF_SDRAM_CONFIG_ASM_OFFSET & 0xff]
 
        @ prepare to put EMIFS to Sleep
-       ldr     r5, [r4, #EMIFS_CONFIG_ASM_OFFSET & 0xff]
-       orr     r5, r5, #IDLE_EMIFS_REQUEST & 0xff
-       str     r5, [r4, #EMIFS_CONFIG_ASM_OFFSET & 0xff]
+       ldr     r8, [r6, #EMIFS_CONFIG_ASM_OFFSET & 0xff]
+       orr     r9, r8, #IDLE_EMIFS_REQUEST & 0xff
+       str     r9, [r6, #EMIFS_CONFIG_ASM_OFFSET & 0xff]
 
        @ load base address of ARM_IDLECT1 and ARM_IDLECT2
        mov     r4, #CLKGEN_REG_ASM_BASE & 0xff000000
@@ -271,26 +276,22 @@ ENTRY(omap1610_cpu_suspend)
        orr     r4, r4, #CLKGEN_REG_ASM_BASE & 0x0000ff00
 
        @ turn off clock domains
-       mov     r5, #OMAP1610_IDLE_CLOCK_DOMAINS & 0xff
-       orr     r5,r5, #OMAP1610_IDLE_CLOCK_DOMAINS & 0xff00
-       strh    r5, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
-
-       @ work around errata of OMAP1610/5912. Enable (!) peripheral
-       @ clock to let the chip go into deep sleep
-       ldrh    r5, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
-       orr     r5,r5, #EN_PERCK_BIT & 0xff
+       @ do not disable PERCK (0x04)
+       mov     r5, #OMAP1610_IDLECT2_SLEEP_VAL & 0xff
+       orr     r5, r5, #OMAP1610_IDLECT2_SLEEP_VAL & 0xff00
        strh    r5, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
 
        @ request ARM idle
-       mov     r3, #OMAP1610_DEEP_SLEEP_REQUEST & 0xff
-       orr     r3, r3, #OMAP1610_DEEP_SLEEP_REQUEST & 0xff00
+       mov     r3, #OMAP1610_IDLECT1_SLEEP_VAL & 0xff
+       orr     r3, r3, #OMAP1610_IDLECT1_SLEEP_VAL & 0xff00
        strh    r3, [r4, #ARM_IDLECT1_ASM_OFFSET & 0xff]
 
-       mov     r5, #IDLE_WAIT_CYCLES & 0xff
-       orr     r5, r5, #IDLE_WAIT_CYCLES & 0xff00
-l_1610_2:
-       subs    r5, r5, #1
-       bne     l_1610_2
+       @ disable instruction cache
+       mrc     p15, 0, r9, c1, c0, 0
+       bic     r2, r9, #0x1000
+       mcr     p15, 0, r2, c1, c0, 0
+       nop
+
 /*
  * Let's wait for the next wake up event to wake us up. r0 can't be
  * used here because r0 holds ARM_IDLECT1
@@ -301,13 +302,21 @@ l_1610_2:
  * omap1610_cpu_suspend()'s resume point.
  *
  * It will just start executing here, so we'll restore stuff from the
- * stack, reset the ARM_IDLECT1 and ARM_IDLECT2.
+ * stack.
  */
+       @ re-enable Icache
+       mcr     p15, 0, r9, c1, c0, 0
+
+       @ reset the ARM_IDLECT1 and ARM_IDLECT2.
        strh    r1, [r4, #ARM_IDLECT2_ASM_OFFSET & 0xff]
        strh    r0, [r4, #ARM_IDLECT1_ASM_OFFSET & 0xff]
 
+       @ Restore EMIFF controls
+       str     r7, [r6, #EMIFF_SDRAM_CONFIG_ASM_OFFSET & 0xff]
+       str     r8, [r6, #EMIFS_CONFIG_ASM_OFFSET & 0xff]
+
        @ restore regs and return
-       ldmfd   sp!, {r0 - r12, pc}
+       ldmfd   sp!, {r0 - r12, pc}
 
 ENTRY(omap1610_cpu_suspend_sz)
        .word   . - omap1610_cpu_suspend
diff --git a/arch/arm/plat-omap/sram-fn.S b/arch/arm/plat-omap/sram-fn.S
new file mode 100644 (file)
index 0000000..4bea369
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * linux/arch/arm/plat-omap/sram.S
+ *
+ * Functions that need to be run in internal SRAM
+ *
+ * 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 <linux/config.h>
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/arch/io.h>
+#include <asm/arch/hardware.h>
+
+       .text
+
+/*
+ * Reprograms ULPD and CKCTL.
+ */
+ENTRY(sram_reprogram_clock)
+       stmfd   sp!, {r0 - r12, lr}             @ save registers on stack
+
+       mov     r2, #IO_ADDRESS(DPLL_CTL) & 0xff000000
+       orr     r2, r2, #IO_ADDRESS(DPLL_CTL) & 0x00ff0000
+       orr     r2, r2, #IO_ADDRESS(DPLL_CTL) & 0x0000ff00
+
+       mov     r3, #IO_ADDRESS(ARM_CKCTL) & 0xff000000
+       orr     r3, r3, #IO_ADDRESS(ARM_CKCTL) & 0x00ff0000
+       orr     r3, r3, #IO_ADDRESS(ARM_CKCTL) & 0x0000ff00
+
+       tst     r0, #1 << 4                     @ want lock mode?
+       beq     newck                           @ nope
+       bic     r0, r0, #1 << 4                 @ else clear lock bit
+       strh    r0, [r2]                        @ set dpll into bypass mode
+       orr     r0, r0, #1 << 4                 @ set lock bit again
+
+newck:
+       strh    r1, [r3]                        @ write new ckctl value
+       strh    r0, [r2]                        @ write new dpll value
+
+       mov     r4, #0x0700                     @ let the clocks settle
+       orr     r4, r4, #0x00ff
+delay: sub     r4, r4, #1
+       cmp     r4, #0
+       bne     delay
+
+lock:  ldrh    r4, [r2], #0                    @ read back dpll value
+       tst     r0, #1 << 4                     @ want lock mode?
+       beq     out                             @ nope
+       tst     r4, #1 << 0                     @ dpll rate locked?
+       beq     lock                            @ try again
+
+out:
+       ldmfd   sp!, {r0 - r12, pc}             @ restore regs and return
+ENTRY(sram_reprogram_clock_sz)
+       .word   . - sram_reprogram_clock
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c
new file mode 100644 (file)
index 0000000..7719a40
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * linux/arch/arm/plat-omap/sram.c
+ *
+ * OMAP SRAM detection and management
+ *
+ * Copyright (C) 2005 Nokia Corporation
+ * Written by Tony Lindgren <tony@atomide.com>
+ *
+ * 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 <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+
+#include <asm/mach/map.h>
+#include <asm/io.h>
+#include <asm/cacheflush.h>
+
+#include "sram.h"
+
+#define OMAP1_SRAM_BASE                0xd0000000
+#define OMAP1_SRAM_START       0x20000000
+#define SRAM_BOOTLOADER_SZ     0x80
+
+static unsigned long omap_sram_base;
+static unsigned long omap_sram_size;
+static unsigned long omap_sram_ceil;
+
+/*
+ * The amount of SRAM depends on the core type:
+ * 730 = 200K, 1510 = 512K, 5912 = 256K, 1610 = 16K, 1710 = 16K
+ * Note that we cannot try to test for SRAM here because writes
+ * to secure SRAM will hang the system. Also the SRAM is not
+ * yet mapped at this point.
+ */
+void __init omap_detect_sram(void)
+{
+       omap_sram_base = OMAP1_SRAM_BASE;
+
+       if (cpu_is_omap730())
+               omap_sram_size = 0x32000;
+       else if (cpu_is_omap1510())
+               omap_sram_size = 0x80000;
+       else if (cpu_is_omap1610() || cpu_is_omap1621() || cpu_is_omap1710())
+               omap_sram_size = 0x4000;
+       else if (cpu_is_omap1611())
+               omap_sram_size = 0x3e800;
+       else {
+               printk(KERN_ERR "Could not detect SRAM size\n");
+               omap_sram_size = 0x4000;
+       }
+
+       printk(KERN_INFO "SRAM size: 0x%lx\n", omap_sram_size);
+       omap_sram_ceil = omap_sram_base + omap_sram_size;
+}
+
+static struct map_desc omap_sram_io_desc[] __initdata = {
+       { OMAP1_SRAM_BASE, OMAP1_SRAM_START, 0, MT_DEVICE }
+};
+
+/*
+ * In order to use last 2kB of SRAM on 1611b, we must round the size
+ * up to multiple of PAGE_SIZE. We cannot use ioremap for SRAM, as
+ * clock init needs SRAM early.
+ */
+void __init omap_map_sram(void)
+{
+       if (omap_sram_size == 0)
+               return;
+
+       omap_sram_io_desc[0].length = (omap_sram_size + PAGE_SIZE-1)/PAGE_SIZE;
+       omap_sram_io_desc[0].length *= PAGE_SIZE;
+       iotable_init(omap_sram_io_desc, ARRAY_SIZE(omap_sram_io_desc));
+
+       /*
+        * Looks like we need to preserve some bootloader code at the
+        * beginning of SRAM for jumping to flash for reboot to work...
+        */
+       memset((void *)omap_sram_base + SRAM_BOOTLOADER_SZ, 0,
+              omap_sram_size - SRAM_BOOTLOADER_SZ);
+}
+
+static void (*_omap_sram_reprogram_clock)(u32 dpllctl, u32 ckctl) = NULL;
+
+void omap_sram_reprogram_clock(u32 dpllctl, u32 ckctl)
+{
+       if (_omap_sram_reprogram_clock == NULL)
+               panic("Cannot use SRAM");
+
+       return _omap_sram_reprogram_clock(dpllctl, ckctl);
+}
+
+void * omap_sram_push(void * start, unsigned long size)
+{
+       if (size > (omap_sram_ceil - (omap_sram_base + SRAM_BOOTLOADER_SZ))) {
+               printk(KERN_ERR "Not enough space in SRAM\n");
+               return NULL;
+       }
+       omap_sram_ceil -= size;
+       omap_sram_ceil &= ~0x3;
+       memcpy((void *)omap_sram_ceil, start, size);
+
+       return (void *)omap_sram_ceil;
+}
+
+void __init omap_sram_init(void)
+{
+       omap_detect_sram();
+       omap_map_sram();
+       _omap_sram_reprogram_clock = omap_sram_push(sram_reprogram_clock,
+                                                   sram_reprogram_clock_sz);
+}
diff --git a/arch/arm/plat-omap/sram.h b/arch/arm/plat-omap/sram.h
new file mode 100644 (file)
index 0000000..71984ef
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * linux/arch/arm/plat-omap/sram.h
+ *
+ * Interface for functions that need to be run in internal SRAM
+ *
+ * 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.
+ */
+
+#ifndef __ARCH_ARM_OMAP_SRAM_H
+#define __ARCH_ARM_OMAP_SRAM_H
+
+extern void * omap_sram_push(void * start, unsigned long size);
+extern void omap_sram_reprogram_clock(u32 dpllctl, u32 ckctl);
+
+/* Do not use these */
+extern void sram_reprogram_clock(u32 ckctl, u32 dpllctl);
+extern unsigned long sram_reprogram_clock_sz;
+
+#endif
index 25bc4a8dd763d8c7f7e10c8fa8fb6ef6baf3fa9d..98f1c76f86606f039dad4501651f371f7056f099 100644 (file)
@@ -41,6 +41,7 @@
 
 /* These routines should handle the standard chip-specific modes
  * for usb0/1/2 ports, covering basic mux and transceiver setup.
+ * Call omap_usb_init() once, from INIT_MACHINE().
  *
  * Some board-*.c files will need to set up additional mux options,
  * like for suspend handling, vbus sensing, GPIOs, and the D+ pullup.
index 1f0373267306c20738862141b4dc8f5bd3173bb0..1f00b3d03a076a9a9f70a694198c42e96d9277ba 100644 (file)
@@ -55,6 +55,10 @@ config GENERIC_BUST_SPINLOCK
 config GENERIC_ISA_DMA
        bool
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       default y
+
 source "init/Kconfig"
 
 
index ada8985530a592a147378f7c97fd39e6882e9e60..e9cb8ef4f3fbdf0ae44197e9db145d506f28226a 100644 (file)
@@ -17,10 +17,6 @@ ifeq ($(CONFIG_FRAME_POINTER),y)
 CFLAGS         +=-fno-omit-frame-pointer -mno-sched-prolog
 endif
 
-ifeq ($(CONFIG_DEBUG_INFO),y)
-CFLAGS         +=-g
-endif
-
 CFLAGS_BOOT    :=-mapcs-26 -mcpu=arm3 -msoft-float -Uarm
 CFLAGS         +=-mapcs-26 -mcpu=arm3 -msoft-float -Uarm
 AFLAGS         +=-mapcs-26 -mcpu=arm3 -msoft-float
index 549a6b2e177ef4ca666bfd4355d9b21d7b2dafe8..e66aedd02fad7c2eccf15259efb97c162e3dec5a 100644 (file)
@@ -114,7 +114,7 @@ static unsigned long next_rtc_update;
  */
 static inline void do_set_rtc(void)
 {
-       if (time_status & STA_UNSYNC || set_rtc == NULL)
+       if (!ntp_synced() || set_rtc == NULL)
                return;
 
 //FIXME - timespec.tv_sec is a time_t not unsigned long
@@ -189,10 +189,7 @@ int do_settimeofday(struct timespec *tv)
 
        xtime.tv_sec = tv->tv_sec;
        xtime.tv_nsec = tv->tv_nsec;
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
        return 0;
index 6b7b4e0802e3ac23991abd09fcfbf9312cf274f8..dc3dfe9b4a1aa64f09a8b35a3947d8b32e1346ec 100644 (file)
@@ -240,7 +240,7 @@ timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
         * The division here is not time critical since it will run once in 
         * 11 minutes
         */
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - (tick_nsec / 1000) / 2 &&
            (xtime.tv_nsec / 1000) <= 500000 + (tick_nsec / 1000) / 2) {
index fa2d4323da2592deef3bd5652110d953e7696850..a2d99b4aedcda34f22a5c1ec10fc4f3250050b0c 100644 (file)
@@ -114,10 +114,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
        return 0;
index 075db6644694b460b6428ce41223cc2c546dabbc..8d6558b00e44fe86128e03922e4a402ac18fee8b 100644 (file)
@@ -85,7 +85,7 @@ static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs * regs)
         * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
         * called as close as possible to 500 ms before the new second starts.
         */
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2
@@ -216,10 +216,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
        return 0;
index 8a600218334dfcaba3501a34e9e09d0c40f6395a..af8c5d2057dd56ed6fa30257cd9ab2cd5c521bcb 100644 (file)
@@ -116,10 +116,7 @@ int do_settimeofday(struct timespec *tv)
 
        xtime.tv_sec = tv->tv_sec;
        xtime.tv_nsec = tv->tv_nsec;
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
        return 0;
index 3b3b017e1c154fa9419dfec55b969cb48e91b608..b22f003eaa6d782c02523685501a22753c28a50e 100644 (file)
@@ -37,6 +37,10 @@ config GENERIC_IOMAP
        bool
        default y
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       default y
+
 source "init/Kconfig"
 
 menu "Processor type and features"
@@ -1208,7 +1212,6 @@ config PCI_DIRECT
 config PCI_MMCONFIG
        bool
        depends on PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)
-       select ACPI_BOOT
        default y
 
 source "drivers/pci/pcie/Kconfig"
@@ -1318,6 +1321,11 @@ config GENERIC_IRQ_PROBE
        bool
        default y
 
+config GENERIC_PENDING_IRQ
+       bool
+       depends on GENERIC_HARDIRQS && SMP
+       default y
+
 config X86_SMP
        bool
        depends on SMP && !X86_VOYAGER
index 8cb420f40c58f106972d5ec830e8cd382378470c..ca668d9df16411c29d2928d230c32b99a129104f 100644 (file)
@@ -82,7 +82,7 @@ start:
 # This is the setup header, and it must start at %cs:2 (old 0x9020:2)
 
                .ascii  "HdrS"          # header signature
-               .word   0x0203          # header version number (>= 0x0105)
+               .word   0x0204          # header version number (>= 0x0105)
                                        # or else old loadlin-1.5 will fail)
 realmode_swtch:        .word   0, 0            # default_switch, SETUPSEG
 start_sys_seg: .word   SYSSEG
index 6835f6d47c31e8f5913a670c6bd7bdd57f1e7b7c..05798419a6a93f25be4f347d2eea5e6f04e5ddf6 100644 (file)
@@ -177,7 +177,9 @@ int main(int argc, char ** argv)
                die("Output: seek failed");
        buf[0] = (sys_size & 0xff);
        buf[1] = ((sys_size >> 8) & 0xff);
-       if (write(1, buf, 2) != 2)
+       buf[2] = ((sys_size >> 16) & 0xff);
+       buf[3] = ((sys_size >> 24) & 0xff);
+       if (write(1, buf, 4) != 4)
                die("Write of image length failed");
 
        return 0;                                           /* Everything is OK */
index ca07b95c06b82e6eeffd79fd3649b4c3ca22b8b5..6a431b9260190f52f45b5c463189b104f7e108b8 100644 (file)
@@ -131,8 +131,6 @@ CONFIG_SOFTWARE_SUSPEND=y
 # ACPI (Advanced Configuration and Power Interface) Support
 #
 CONFIG_ACPI=y
-CONFIG_ACPI_BOOT=y
-CONFIG_ACPI_INTERPRETER=y
 CONFIG_ACPI_SLEEP=y
 CONFIG_ACPI_SLEEP_PROC_FS=y
 CONFIG_ACPI_AC=y
@@ -144,10 +142,8 @@ CONFIG_ACPI_THERMAL=y
 # CONFIG_ACPI_ASUS is not set
 # CONFIG_ACPI_TOSHIBA is not set
 # CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_BUS=y
 CONFIG_ACPI_EC=y
 CONFIG_ACPI_POWER=y
-CONFIG_ACPI_PCI=y
 CONFIG_ACPI_SYSTEM=y
 # CONFIG_X86_PM_TIMER is not set
 
index 64682a0edacf5c54490fe5928c1ce716f82be522..f10de0f2c5e622258517b978afac886378a04333 100644 (file)
@@ -11,7 +11,7 @@ obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o vm86.o \
 
 obj-y                          += cpu/
 obj-y                          += timers/
-obj-$(CONFIG_ACPI_BOOT)                += acpi/
+obj-$(CONFIG_ACPI)             += acpi/
 obj-$(CONFIG_X86_BIOS_REBOOT)  += reboot.o
 obj-$(CONFIG_MCA)              += mca.o
 obj-$(CONFIG_X86_MSR)          += msr.o
index 5e291a20c03d1c583bdfa0e20852e7a242280a97..267ca48e1b6c740cc63e86669ee0b992c627cd00 100644 (file)
@@ -1,4 +1,4 @@
-obj-$(CONFIG_ACPI_BOOT)                := boot.o
+obj-y                          := boot.o
 obj-$(CONFIG_X86_IO_APIC)      += earlyquirk.o
 obj-$(CONFIG_ACPI_SLEEP)       += sleep.o wakeup.o
 
index 34ee500c26e59a4a992dd6c89dbb5cd68ae3bd92..a63351c085c66dceeafb990ba75214963fad1cea 100644 (file)
 
 #ifdef CONFIG_X86_64
 
-static inline void  acpi_madt_oem_check(char *oem_id, char *oem_table_id) { }
+static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+{
+}
 extern void __init clustered_apic_check(void);
-static inline int ioapic_setup_disabled(void) { return 0; }
+static inline int ioapic_setup_disabled(void)
+{
+       return 0;
+}
+
 #include <asm/proto.h>
 
-#else  /* X86 */
+#else                          /* X86 */
 
 #ifdef CONFIG_X86_LOCAL_APIC
 #include <mach_apic.h>
 #include <mach_mpparse.h>
-#endif /* CONFIG_X86_LOCAL_APIC */
+#endif                         /* CONFIG_X86_LOCAL_APIC */
 
-#endif /* X86 */
+#endif                         /* X86 */
 
 #define BAD_MADT_ENTRY(entry, end) (                                       \
                (!entry) || (unsigned long)entry + sizeof(*entry) > end ||  \
@@ -60,13 +66,8 @@ static inline int ioapic_setup_disabled(void) { return 0; }
 
 #define PREFIX                 "ACPI: "
 
-#ifdef CONFIG_ACPI_PCI
 int acpi_noirq __initdata;     /* skip ACPI IRQ initialization */
-int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */
-#else
-int acpi_noirq __initdata = 1;
-int acpi_pci_disabled __initdata = 1;
-#endif
+int acpi_pci_disabled __initdata;      /* skip ACPI PCI scan and IRQ initialization */
 int acpi_ht __initdata = 1;    /* enable HT */
 
 int acpi_lapic;
@@ -88,7 +89,7 @@ static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
 
 #define MAX_MADT_ENTRIES       256
 u8 x86_acpiid_to_apicid[MAX_MADT_ENTRIES] =
-                       { [0 ... MAX_MADT_ENTRIES-1] = 0xff };
+    {[0 ... MAX_MADT_ENTRIES - 1] = 0xff };
 EXPORT_SYMBOL(x86_acpiid_to_apicid);
 
 /* --------------------------------------------------------------------------
@@ -99,7 +100,7 @@ EXPORT_SYMBOL(x86_acpiid_to_apicid);
  * The default interrupt routing model is PIC (8259).  This gets
  * overriden if IOAPICs are enumerated (below).
  */
-enum acpi_irq_model_id         acpi_irq_model = ACPI_IRQ_MODEL_PIC;
+enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC;
 
 #ifdef CONFIG_X86_64
 
@@ -107,7 +108,7 @@ enum acpi_irq_model_id              acpi_irq_model = ACPI_IRQ_MODEL_PIC;
 char *__acpi_map_table(unsigned long phys_addr, unsigned long size)
 {
        if (!phys_addr || !size)
-       return NULL;
+               return NULL;
 
        if (phys_addr < (end_pfn_map << PAGE_SHIFT))
                return __va(phys_addr);
@@ -134,8 +135,8 @@ char *__acpi_map_table(unsigned long phys, unsigned long size)
        unsigned long base, offset, mapped_size;
        int idx;
 
-       if (phys + size < 8*1024*1024) 
-               return __va(phys); 
+       if (phys + size < 8 * 1024 * 1024)
+               return __va(phys);
 
        offset = phys & (PAGE_SIZE - 1);
        mapped_size = PAGE_SIZE - offset;
@@ -154,7 +155,7 @@ char *__acpi_map_table(unsigned long phys, unsigned long size)
                mapped_size += PAGE_SIZE;
        }
 
-       return ((unsigned char *) base + offset);
+       return ((unsigned char *)base + offset);
 }
 #endif
 
@@ -172,7 +173,7 @@ int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size)
        if (!phys_addr || !size)
                return -EINVAL;
 
-       mcfg = (struct acpi_table_mcfg *) __acpi_map_table(phys_addr, size);
+       mcfg = (struct acpi_table_mcfg *)__acpi_map_table(phys_addr, size);
        if (!mcfg) {
                printk(KERN_WARNING PREFIX "Unable to map MCFG\n");
                return -ENODEV;
@@ -209,20 +210,17 @@ int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size)
 
        return 0;
 }
-#endif /* CONFIG_PCI_MMCONFIG */
+#endif                         /* CONFIG_PCI_MMCONFIG */
 
 #ifdef CONFIG_X86_LOCAL_APIC
-static int __init
-acpi_parse_madt (
-       unsigned long           phys_addr,
-       unsigned long           size)
+static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size)
 {
-       struct acpi_table_madt  *madt = NULL;
+       struct acpi_table_madt *madt = NULL;
 
        if (!phys_addr || !size)
                return -EINVAL;
 
-       madt = (struct acpi_table_madt *) __acpi_map_table(phys_addr, size);
+       madt = (struct acpi_table_madt *)__acpi_map_table(phys_addr, size);
        if (!madt) {
                printk(KERN_WARNING PREFIX "Unable to map MADT\n");
                return -ENODEV;
@@ -232,22 +230,20 @@ acpi_parse_madt (
                acpi_lapic_addr = (u64) madt->lapic_address;
 
                printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n",
-                       madt->lapic_address);
+                      madt->lapic_address);
        }
 
        acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id);
-       
+
        return 0;
 }
 
-
 static int __init
-acpi_parse_lapic (
-       acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_lapic(acpi_table_entry_header * header, const unsigned long end)
 {
-       struct acpi_table_lapic *processor = NULL;
+       struct acpi_table_lapic *processor = NULL;
 
-       processor = (struct acpi_table_lapic*) header;
+       processor = (struct acpi_table_lapic *)header;
 
        if (BAD_MADT_ENTRY(processor, end))
                return -EINVAL;
@@ -260,20 +256,19 @@ acpi_parse_lapic (
 
        x86_acpiid_to_apicid[processor->acpi_id] = processor->id;
 
-       mp_register_lapic (
-               processor->id,                                     /* APIC ID */
-               processor->flags.enabled);                        /* Enabled? */
+       mp_register_lapic(processor->id,        /* APIC ID */
+                         processor->flags.enabled);    /* Enabled? */
 
        return 0;
 }
 
 static int __init
-acpi_parse_lapic_addr_ovr (
-       acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header,
+                         const unsigned long end)
 {
        struct acpi_table_lapic_addr_ovr *lapic_addr_ovr = NULL;
 
-       lapic_addr_ovr = (struct acpi_table_lapic_addr_ovr*) header;
+       lapic_addr_ovr = (struct acpi_table_lapic_addr_ovr *)header;
 
        if (BAD_MADT_ENTRY(lapic_addr_ovr, end))
                return -EINVAL;
@@ -284,12 +279,11 @@ acpi_parse_lapic_addr_ovr (
 }
 
 static int __init
-acpi_parse_lapic_nmi (
-       acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end)
 {
        struct acpi_table_lapic_nmi *lapic_nmi = NULL;
 
-       lapic_nmi = (struct acpi_table_lapic_nmi*) header;
+       lapic_nmi = (struct acpi_table_lapic_nmi *)header;
 
        if (BAD_MADT_ENTRY(lapic_nmi, end))
                return -EINVAL;
@@ -302,37 +296,32 @@ acpi_parse_lapic_nmi (
        return 0;
 }
 
+#endif                         /*CONFIG_X86_LOCAL_APIC */
 
-#endif /*CONFIG_X86_LOCAL_APIC*/
-
-#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER)
+#ifdef CONFIG_X86_IO_APIC
 
 static int __init
-acpi_parse_ioapic (
-       acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_ioapic(acpi_table_entry_header * header, const unsigned long end)
 {
        struct acpi_table_ioapic *ioapic = NULL;
 
-       ioapic = (struct acpi_table_ioapic*) header;
+       ioapic = (struct acpi_table_ioapic *)header;
 
        if (BAD_MADT_ENTRY(ioapic, end))
                return -EINVAL;
+
        acpi_table_print_madt_entry(header);
 
-       mp_register_ioapic (
-               ioapic->id,
-               ioapic->address,
-               ioapic->global_irq_base);
+       mp_register_ioapic(ioapic->id,
+                          ioapic->address, ioapic->global_irq_base);
+
        return 0;
 }
 
 /*
  * Parse Interrupt Source Override for the ACPI SCI
  */
-static void
-acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
+static void acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
 {
        if (trigger == 0)       /* compatible SCI trigger is level */
                trigger = 3;
@@ -348,7 +337,7 @@ acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
                polarity = acpi_sci_flags.polarity;
 
        /*
-        * mp_config_acpi_legacy_irqs() already setup IRQs < 16
+        * mp_config_acpi_legacy_irqs() already setup IRQs < 16
         * If GSI is < 16, this will update its flags,
         * else it will create a new mp_irqs[] entry.
         */
@@ -363,12 +352,12 @@ acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
 }
 
 static int __init
-acpi_parse_int_src_ovr (
-       acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_int_src_ovr(acpi_table_entry_header * header,
+                      const unsigned long end)
 {
        struct acpi_table_int_src_ovr *intsrc = NULL;
 
-       intsrc = (struct acpi_table_int_src_ovr*) header;
+       intsrc = (struct acpi_table_int_src_ovr *)header;
 
        if (BAD_MADT_ENTRY(intsrc, end))
                return -EINVAL;
@@ -377,33 +366,30 @@ acpi_parse_int_src_ovr (
 
        if (intsrc->bus_irq == acpi_fadt.sci_int) {
                acpi_sci_ioapic_setup(intsrc->global_irq,
-                       intsrc->flags.polarity, intsrc->flags.trigger);
+                                     intsrc->flags.polarity,
+                                     intsrc->flags.trigger);
                return 0;
        }
 
        if (acpi_skip_timer_override &&
-               intsrc->bus_irq == 0 && intsrc->global_irq == 2) {
-                       printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n");
-                       return 0;
+           intsrc->bus_irq == 0 && intsrc->global_irq == 2) {
+               printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n");
+               return 0;
        }
 
-       mp_override_legacy_irq (
-               intsrc->bus_irq,
-               intsrc->flags.polarity,
-               intsrc->flags.trigger,
-               intsrc->global_irq);
+       mp_override_legacy_irq(intsrc->bus_irq,
+                              intsrc->flags.polarity,
+                              intsrc->flags.trigger, intsrc->global_irq);
 
        return 0;
 }
 
-
 static int __init
-acpi_parse_nmi_src (
-       acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_nmi_src(acpi_table_entry_header * header, const unsigned long end)
 {
        struct acpi_table_nmi_src *nmi_src = NULL;
 
-       nmi_src = (struct acpi_table_nmi_src*) header;
+       nmi_src = (struct acpi_table_nmi_src *)header;
 
        if (BAD_MADT_ENTRY(nmi_src, end))
                return -EINVAL;
@@ -415,9 +401,7 @@ acpi_parse_nmi_src (
        return 0;
 }
 
-#endif /* CONFIG_X86_IO_APIC */
-
-#ifdef CONFIG_ACPI_BUS
+#endif                         /* CONFIG_X86_IO_APIC */
 
 /*
  * acpi_pic_sci_set_trigger()
@@ -433,8 +417,7 @@ acpi_parse_nmi_src (
  * ECLR2 is IRQ's 8-15 (IRQ 8, 13 must be 0)
  */
 
-void __init
-acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
+void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
 {
        unsigned int mask = 1 << irq;
        unsigned int old, new;
@@ -454,10 +437,10 @@ acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
         * routing tables..
         */
        switch (trigger) {
-       case 1: /* Edge - clear */
+       case 1:         /* Edge - clear */
                new &= ~mask;
                break;
-       case 3: /* Level - set */
+       case 3:         /* Level - set */
                new |= mask;
                break;
        }
@@ -470,21 +453,22 @@ acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger)
        outb(new >> 8, 0x4d1);
 }
 
-
-#endif /* CONFIG_ACPI_BUS */
-
 int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
 {
 #ifdef CONFIG_X86_IO_APIC
        if (use_pci_vector() && !platform_legacy_irq(gsi))
-               *irq = IO_APIC_VECTOR(gsi);
+               *irq = IO_APIC_VECTOR(gsi);
        else
 #endif
                *irq = gsi;
        return 0;
 }
 
-unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
+/*
+ * success: return IRQ number (>=0)
+ * failure: return < 0
+ */
+int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
 {
        unsigned int irq;
        unsigned int plat_gsi = gsi;
@@ -497,7 +481,7 @@ unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
                extern void eisa_set_level_irq(unsigned int irq);
 
                if (edge_level == ACPI_LEVEL_SENSITIVE)
-                               eisa_set_level_irq(gsi);
+                       eisa_set_level_irq(gsi);
        }
 #endif
 
@@ -509,60 +493,58 @@ unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
        acpi_gsi_to_irq(plat_gsi, &irq);
        return irq;
 }
+
 EXPORT_SYMBOL(acpi_register_gsi);
 
 /*
  *  ACPI based hotplug support for CPU
  */
 #ifdef CONFIG_ACPI_HOTPLUG_CPU
-int
-acpi_map_lsapic(acpi_handle handle, int *pcpu)
+int acpi_map_lsapic(acpi_handle handle, int *pcpu)
 {
        /* TBD */
        return -EINVAL;
 }
-EXPORT_SYMBOL(acpi_map_lsapic);
 
+EXPORT_SYMBOL(acpi_map_lsapic);
 
-int
-acpi_unmap_lsapic(int cpu)
+int acpi_unmap_lsapic(int cpu)
 {
        /* TBD */
        return -EINVAL;
 }
+
 EXPORT_SYMBOL(acpi_unmap_lsapic);
-#endif /* CONFIG_ACPI_HOTPLUG_CPU */
+#endif                         /* CONFIG_ACPI_HOTPLUG_CPU */
 
-int
-acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base)
+int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base)
 {
        /* TBD */
        return -EINVAL;
 }
+
 EXPORT_SYMBOL(acpi_register_ioapic);
 
-int
-acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base)
+int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base)
 {
        /* TBD */
        return -EINVAL;
 }
+
 EXPORT_SYMBOL(acpi_unregister_ioapic);
 
 static unsigned long __init
-acpi_scan_rsdp (
-       unsigned long           start,
-       unsigned long           length)
+acpi_scan_rsdp(unsigned long start, unsigned long length)
 {
-       unsigned long           offset = 0;
-       unsigned long           sig_len = sizeof("RSD PTR ") - 1;
+       unsigned long offset = 0;
+       unsigned long sig_len = sizeof("RSD PTR ") - 1;
 
        /*
         * Scan all 16-byte boundaries of the physical memory region for the
         * RSDP signature.
         */
        for (offset = 0; offset < length; offset += 16) {
-               if (strncmp((char *) (start + offset), "RSD PTR ", sig_len))
+               if (strncmp((char *)(start + offset), "RSD PTR ", sig_len))
                        continue;
                return (start + offset);
        }
@@ -575,20 +557,19 @@ static int __init acpi_parse_sbf(unsigned long phys_addr, unsigned long size)
        struct acpi_table_sbf *sb;
 
        if (!phys_addr || !size)
-       return -EINVAL;
+               return -EINVAL;
 
-       sb = (struct acpi_table_sbf *) __acpi_map_table(phys_addr, size);
+       sb = (struct acpi_table_sbf *)__acpi_map_table(phys_addr, size);
        if (!sb) {
                printk(KERN_WARNING PREFIX "Unable to map SBF\n");
                return -ENODEV;
        }
 
-       sbf_port = sb->sbf_cmos; /* Save CMOS port */
+       sbf_port = sb->sbf_cmos;        /* Save CMOS port */
 
        return 0;
 }
 
-
 #ifdef CONFIG_HPET_TIMER
 
 static int __init acpi_parse_hpet(unsigned long phys, unsigned long size)
@@ -598,7 +579,7 @@ static int __init acpi_parse_hpet(unsigned long phys, unsigned long size)
        if (!phys || !size)
                return -EINVAL;
 
-       hpet_tbl = (struct acpi_table_hpet *) __acpi_map_table(phys, size);
+       hpet_tbl = (struct acpi_table_hpet *)__acpi_map_table(phys, size);
        if (!hpet_tbl) {
                printk(KERN_WARNING PREFIX "Unable to map HPET\n");
                return -ENODEV;
@@ -609,22 +590,21 @@ static int __init acpi_parse_hpet(unsigned long phys, unsigned long size)
                       "memory.\n");
                return -1;
        }
-
 #ifdef CONFIG_X86_64
-        vxtime.hpet_address = hpet_tbl->addr.addrl |
-                ((long) hpet_tbl->addr.addrh << 32);
+       vxtime.hpet_address = hpet_tbl->addr.addrl |
+           ((long)hpet_tbl->addr.addrh << 32);
 
-        printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n",
-               hpet_tbl->id, vxtime.hpet_address);
-#else  /* X86 */
+       printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n",
+              hpet_tbl->id, vxtime.hpet_address);
+#else                          /* X86 */
        {
                extern unsigned long hpet_address;
 
                hpet_address = hpet_tbl->addr.addrl;
                printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n",
-                       hpet_tbl->id, hpet_address);
+                      hpet_tbl->id, hpet_address);
        }
-#endif /* X86 */
+#endif                         /* X86 */
 
        return 0;
 }
@@ -640,28 +620,25 @@ static int __init acpi_parse_fadt(unsigned long phys, unsigned long size)
 {
        struct fadt_descriptor_rev2 *fadt = NULL;
 
-       fadt = (struct fadt_descriptor_rev2*) __acpi_map_table(phys,size);
-       if(!fadt) {
+       fadt = (struct fadt_descriptor_rev2 *)__acpi_map_table(phys, size);
+       if (!fadt) {
                printk(KERN_WARNING PREFIX "Unable to map FADT\n");
                return 0;
        }
-
-#ifdef CONFIG_ACPI_INTERPRETER
        /* initialize sci_int early for INT_SRC_OVR MADT parsing */
        acpi_fadt.sci_int = fadt->sci_int;
-#endif
 
-#ifdef CONFIG_ACPI_BUS
        /* initialize rev and apic_phys_dest_mode for x86_64 genapic */
        acpi_fadt.revision = fadt->revision;
-       acpi_fadt.force_apic_physical_destination_mode = fadt->force_apic_physical_destination_mode;
-#endif
+       acpi_fadt.force_apic_physical_destination_mode =
+           fadt->force_apic_physical_destination_mode;
 
 #ifdef CONFIG_X86_PM_TIMER
        /* detect the location of the ACPI PM Timer */
        if (fadt->revision >= FADT2_REVISION_ID) {
                /* FADT rev. 2 */
-               if (fadt->xpm_tmr_blk.address_space_id != ACPI_ADR_SPACE_SYSTEM_IO)
+               if (fadt->xpm_tmr_blk.address_space_id !=
+                   ACPI_ADR_SPACE_SYSTEM_IO)
                        return 0;
 
                pmtmr_ioport = fadt->xpm_tmr_blk.address;
@@ -670,16 +647,15 @@ static int __init acpi_parse_fadt(unsigned long phys, unsigned long size)
                pmtmr_ioport = fadt->V1_pm_tmr_blk;
        }
        if (pmtmr_ioport)
-               printk(KERN_INFO PREFIX "PM-Timer IO Port: %#x\n", pmtmr_ioport);
+               printk(KERN_INFO PREFIX "PM-Timer IO Port: %#x\n",
+                      pmtmr_ioport);
 #endif
        return 0;
 }
 
-
-unsigned long __init
-acpi_find_rsdp (void)
+unsigned long __init acpi_find_rsdp(void)
 {
-       unsigned long           rsdp_phys = 0;
+       unsigned long rsdp_phys = 0;
 
        if (efi_enabled) {
                if (efi.acpi20)
@@ -691,9 +667,9 @@ acpi_find_rsdp (void)
         * Scan memory looking for the RSDP signature. First search EBDA (low
         * memory) paragraphs and then search upper memory (E0000-FFFFF).
         */
-       rsdp_phys = acpi_scan_rsdp (0, 0x400);
+       rsdp_phys = acpi_scan_rsdp(0, 0x400);
        if (!rsdp_phys)
-               rsdp_phys = acpi_scan_rsdp (0xE0000, 0x20000);
+               rsdp_phys = acpi_scan_rsdp(0xE0000, 0x20000);
 
        return rsdp_phys;
 }
@@ -703,8 +679,7 @@ acpi_find_rsdp (void)
  * Parse LAPIC entries in MADT
  * returns 0 on success, < 0 on error
  */
-static int __init
-acpi_parse_madt_lapic_entries(void)
+static int __init acpi_parse_madt_lapic_entries(void)
 {
        int count;
 
@@ -713,28 +688,31 @@ acpi_parse_madt_lapic_entries(void)
         * and (optionally) overriden by a LAPIC_ADDR_OVR entry (64-bit value).
         */
 
-       count = acpi_table_parse_madt(ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0);
+       count =
+           acpi_table_parse_madt(ACPI_MADT_LAPIC_ADDR_OVR,
+                                 acpi_parse_lapic_addr_ovr, 0);
        if (count < 0) {
-               printk(KERN_ERR PREFIX "Error parsing LAPIC address override entry\n");
+               printk(KERN_ERR PREFIX
+                      "Error parsing LAPIC address override entry\n");
                return count;
        }
 
        mp_register_lapic_address(acpi_lapic_addr);
 
        count = acpi_table_parse_madt(ACPI_MADT_LAPIC, acpi_parse_lapic,
-                                      MAX_APICS);
-       if (!count) { 
+                                     MAX_APICS);
+       if (!count) {
                printk(KERN_ERR PREFIX "No LAPIC entries present\n");
                /* TBD: Cleanup to allow fallback to MPS */
                return -ENODEV;
-       }
-       else if (count < 0) {
+       } else if (count < 0) {
                printk(KERN_ERR PREFIX "Error parsing LAPIC entry\n");
                /* TBD: Cleanup to allow fallback to MPS */
                return count;
        }
 
-       count = acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0);
+       count =
+           acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0);
        if (count < 0) {
                printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n");
                /* TBD: Cleanup to allow fallback to MPS */
@@ -742,15 +720,14 @@ acpi_parse_madt_lapic_entries(void)
        }
        return 0;
 }
-#endif /* CONFIG_X86_LOCAL_APIC */
+#endif                         /* CONFIG_X86_LOCAL_APIC */
 
-#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER)
+#ifdef CONFIG_X86_IO_APIC
 /*
  * Parse IOAPIC related entries in MADT
  * returns 0 on success, < 0 on error
  */
-static int __init
-acpi_parse_madt_ioapic_entries(void)
+static int __init acpi_parse_madt_ioapic_entries(void)
 {
        int count;
 
@@ -762,30 +739,34 @@ acpi_parse_madt_ioapic_entries(void)
         */
        if (acpi_disabled || acpi_noirq) {
                return -ENODEV;
-        }
+       }
 
        /*
-        * if "noapic" boot option, don't look for IO-APICs
+        * if "noapic" boot option, don't look for IO-APICs
         */
        if (skip_ioapic_setup) {
                printk(KERN_INFO PREFIX "Skipping IOAPIC probe "
-                       "due to 'noapic' option.\n");
+                      "due to 'noapic' option.\n");
                return -ENODEV;
        }
 
-       count = acpi_table_parse_madt(ACPI_MADT_IOAPIC, acpi_parse_ioapic, MAX_IO_APICS);
+       count =
+           acpi_table_parse_madt(ACPI_MADT_IOAPIC, acpi_parse_ioapic,
+                                 MAX_IO_APICS);
        if (!count) {
                printk(KERN_ERR PREFIX "No IOAPIC entries present\n");
                return -ENODEV;
-       }
-       else if (count < 0) {
+       } else if (count < 0) {
                printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n");
                return count;
        }
 
-       count = acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, NR_IRQ_VECTORS);
+       count =
+           acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr,
+                                 NR_IRQ_VECTORS);
        if (count < 0) {
-               printk(KERN_ERR PREFIX "Error parsing interrupt source overrides entry\n");
+               printk(KERN_ERR PREFIX
+                      "Error parsing interrupt source overrides entry\n");
                /* TBD: Cleanup to allow fallback to MPS */
                return count;
        }
@@ -800,7 +781,9 @@ acpi_parse_madt_ioapic_entries(void)
        /* Fill in identity legacy mapings where no override */
        mp_config_acpi_legacy_irqs();
 
-       count = acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, NR_IRQ_VECTORS);
+       count =
+           acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src,
+                                 NR_IRQ_VECTORS);
        if (count < 0) {
                printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n");
                /* TBD: Cleanup to allow fallback to MPS */
@@ -814,11 +797,9 @@ static inline int acpi_parse_madt_ioapic_entries(void)
 {
        return -1;
 }
-#endif /* !(CONFIG_X86_IO_APIC && CONFIG_ACPI_INTERPRETER) */
+#endif /* !CONFIG_X86_IO_APIC */
 
-
-static void __init
-acpi_process_madt(void)
+static void __init acpi_process_madt(void)
 {
 #ifdef CONFIG_X86_LOCAL_APIC
        int count, error;
@@ -853,7 +834,8 @@ acpi_process_madt(void)
                        /*
                         * Dell Precision Workstation 410, 610 come here.
                         */
-                       printk(KERN_ERR PREFIX "Invalid BIOS MADT, disabling ACPI\n");
+                       printk(KERN_ERR PREFIX
+                              "Invalid BIOS MADT, disabling ACPI\n");
                        disable_acpi();
                }
        }
@@ -865,7 +847,6 @@ extern int acpi_force;
 
 #ifdef __i386__
 
-#ifdef CONFIG_ACPI_PCI
 static int __init disable_acpi_irq(struct dmi_system_id *d)
 {
        if (!acpi_force) {
@@ -885,12 +866,11 @@ static int __init disable_acpi_pci(struct dmi_system_id *d)
        }
        return 0;
 }
-#endif
 
 static int __init dmi_disable_acpi(struct dmi_system_id *d)
 {
        if (!acpi_force) {
-               printk(KERN_NOTICE "%s detected: acpi off\n",d->ident);
+               printk(KERN_NOTICE "%s detected: acpi off\n", d->ident);
                disable_acpi();
        } else {
                printk(KERN_NOTICE
@@ -905,7 +885,8 @@ static int __init dmi_disable_acpi(struct dmi_system_id *d)
 static int __init force_acpi_ht(struct dmi_system_id *d)
 {
        if (!acpi_force) {
-               printk(KERN_NOTICE "%s detected: force use of acpi=ht\n", d->ident);
+               printk(KERN_NOTICE "%s detected: force use of acpi=ht\n",
+                      d->ident);
                disable_acpi();
                acpi_ht = 1;
        } else {
@@ -924,155 +905,155 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
         * Boxes that need ACPI disabled
         */
        {
-               .callback = dmi_disable_acpi,
-               .ident = "IBM Thinkpad",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
-                       DMI_MATCH(DMI_BOARD_NAME, "2629H1G"),
-               },
-       },
+        .callback = dmi_disable_acpi,
+        .ident = "IBM Thinkpad",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
+                    DMI_MATCH(DMI_BOARD_NAME, "2629H1G"),
+                    },
+        },
 
        /*
         * Boxes that need acpi=ht
         */
        {
-               .callback = force_acpi_ht,
-               .ident = "FSC Primergy T850",
-               .matches = {
-                       DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
-                       DMI_MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "FSC Primergy T850",
+        .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
+                    DMI_MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "DELL GX240",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"),
-                       DMI_MATCH(DMI_BOARD_NAME, "OptiPlex GX240"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "DELL GX240",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"),
+                    DMI_MATCH(DMI_BOARD_NAME, "OptiPlex GX240"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "HP VISUALIZE NT Workstation",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
-                       DMI_MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "HP VISUALIZE NT Workstation",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
+                    DMI_MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "Compaq Workstation W8000",
-               .matches = {
-                       DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
-                       DMI_MATCH(DMI_PRODUCT_NAME, "Workstation W8000"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "Compaq Workstation W8000",
+        .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
+                    DMI_MATCH(DMI_PRODUCT_NAME, "Workstation W8000"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "ASUS P4B266",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
-                       DMI_MATCH(DMI_BOARD_NAME, "P4B266"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "ASUS P4B266",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
+                    DMI_MATCH(DMI_BOARD_NAME, "P4B266"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "ASUS P2B-DS",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
-                       DMI_MATCH(DMI_BOARD_NAME, "P2B-DS"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "ASUS P2B-DS",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
+                    DMI_MATCH(DMI_BOARD_NAME, "P2B-DS"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "ASUS CUR-DLS",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
-                       DMI_MATCH(DMI_BOARD_NAME, "CUR-DLS"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "ASUS CUR-DLS",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
+                    DMI_MATCH(DMI_BOARD_NAME, "CUR-DLS"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "ABIT i440BX-W83977",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"),
-                       DMI_MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "ABIT i440BX-W83977",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"),
+                    DMI_MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "IBM Bladecenter",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
-                       DMI_MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "IBM Bladecenter",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
+                    DMI_MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "IBM eServer xSeries 360",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
-                       DMI_MATCH(DMI_BOARD_NAME, "eServer xSeries 360"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "IBM eServer xSeries 360",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
+                    DMI_MATCH(DMI_BOARD_NAME, "eServer xSeries 360"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "IBM eserver xSeries 330",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
-                       DMI_MATCH(DMI_BOARD_NAME, "eserver xSeries 330"),
-               },
-       },
+        .callback = force_acpi_ht,
+        .ident = "IBM eserver xSeries 330",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
+                    DMI_MATCH(DMI_BOARD_NAME, "eserver xSeries 330"),
+                    },
+        },
        {
-               .callback = force_acpi_ht,
-               .ident = "IBM eserver xSeries 440",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
-                       DMI_MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"),
-               },
-       },
-
-#ifdef CONFIG_ACPI_PCI
+        .callback = force_acpi_ht,
+        .ident = "IBM eserver xSeries 440",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
+                    DMI_MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"),
+                    },
+        },
+
        /*
         * Boxes that need ACPI PCI IRQ routing disabled
         */
        {
-               .callback = disable_acpi_irq,
-               .ident = "ASUS A7V",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"),
-                       DMI_MATCH(DMI_BOARD_NAME, "<A7V>"),
-                       /* newer BIOS, Revision 1011, does work */
-                       DMI_MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"),
-               },
-       },
+        .callback = disable_acpi_irq,
+        .ident = "ASUS A7V",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"),
+                    DMI_MATCH(DMI_BOARD_NAME, "<A7V>"),
+                    /* newer BIOS, Revision 1011, does work */
+                    DMI_MATCH(DMI_BIOS_VERSION,
+                              "ASUS A7V ACPI BIOS Revision 1007"),
+                    },
+        },
 
        /*
         * Boxes that need ACPI PCI IRQ routing and PCI scan disabled
         */
-       {       /* _BBN 0 bug */
-               .callback = disable_acpi_pci,
-               .ident = "ASUS PR-DLS",
-               .matches = {
-                       DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
-                       DMI_MATCH(DMI_BOARD_NAME, "PR-DLS"),
-                       DMI_MATCH(DMI_BIOS_VERSION, "ASUS PR-DLS ACPI BIOS Revision 1010"),
-                       DMI_MATCH(DMI_BIOS_DATE, "03/21/2003")
-               },
-       },
+       {                       /* _BBN 0 bug */
+        .callback = disable_acpi_pci,
+        .ident = "ASUS PR-DLS",
+        .matches = {
+                    DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
+                    DMI_MATCH(DMI_BOARD_NAME, "PR-DLS"),
+                    DMI_MATCH(DMI_BIOS_VERSION,
+                              "ASUS PR-DLS ACPI BIOS Revision 1010"),
+                    DMI_MATCH(DMI_BIOS_DATE, "03/21/2003")
+                    },
+        },
        {
-               .callback = disable_acpi_pci,
-               .ident = "Acer TravelMate 36x Laptop",
-               .matches = {
-                       DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
-                       DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
-               },
-       },
-#endif
-       { }
+        .callback = disable_acpi_pci,
+        .ident = "Acer TravelMate 36x Laptop",
+        .matches = {
+                    DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+                    DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
+                    },
+        },
+       {}
 };
 
-#endif /* __i386__ */
+#endif                         /* __i386__ */
 
 /*
  * acpi_boot_table_init() and acpi_boot_init()
@@ -1097,8 +1078,7 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
  *     !0: failure
  */
 
-int __init
-acpi_boot_table_init(void)
+int __init acpi_boot_table_init(void)
 {
        int error;
 
@@ -1111,7 +1091,7 @@ acpi_boot_table_init(void)
         * One exception: acpi=ht continues far enough to enumerate LAPICs
         */
        if (acpi_disabled && !acpi_ht)
-                return 1;
+               return 1;
 
        /* 
         * Initialize the ACPI boot-time table parser.
@@ -1121,7 +1101,6 @@ acpi_boot_table_init(void)
                disable_acpi();
                return error;
        }
-
 #ifdef __i386__
        check_acpi_pci();
 #endif
@@ -1145,7 +1124,6 @@ acpi_boot_table_init(void)
        return 0;
 }
 
-
 int __init acpi_boot_init(void)
 {
        /*
@@ -1153,7 +1131,7 @@ int __init acpi_boot_init(void)
         * One exception: acpi=ht continues far enough to enumerate LAPICs
         */
        if (acpi_disabled && !acpi_ht)
-                return 1;
+               return 1;
 
        acpi_table_parse(ACPI_BOOT, acpi_parse_sbf);
 
@@ -1171,4 +1149,3 @@ int __init acpi_boot_init(void)
 
        return 0;
 }
-
index 726a5ca4b1655c6449f8c56377e7cc6ca8f604ce..f1b9d2a46dab860c0cbf100e1bf6b9b0b220c024 100644 (file)
@@ -8,44 +8,44 @@
 #include <asm/pci-direct.h>
 #include <asm/acpi.h>
 
-static int __init check_bridge(int vendor, int device) 
+static int __init check_bridge(int vendor, int device)
 {
        /* According to Nvidia all timer overrides are bogus. Just ignore
           them all. */
-       if (vendor == PCI_VENDOR_ID_NVIDIA) { 
-               acpi_skip_timer_override = 1;           
+       if (vendor == PCI_VENDOR_ID_NVIDIA) {
+               acpi_skip_timer_override = 1;
        }
        return 0;
 }
-   
-void __init check_acpi_pci(void) 
-{ 
-       int num,slot,func; 
+
+void __init check_acpi_pci(void)
+{
+       int num, slot, func;
 
        /* Assume the machine supports type 1. If not it will 
           always read ffffffff and should not have any side effect. */
 
        /* Poor man's PCI discovery */
-       for (num = 0; num < 32; num++) { 
-               for (slot = 0; slot < 32; slot++) { 
-                       for (func = 0; func < 8; func++) { 
+       for (num = 0; num < 32; num++) {
+               for (slot = 0; slot < 32; slot++) {
+                       for (func = 0; func < 8; func++) {
                                u32 class;
                                u32 vendor;
-                               class = read_pci_config(num,slot,func,
+                               class = read_pci_config(num, slot, func,
                                                        PCI_CLASS_REVISION);
                                if (class == 0xffffffff)
-                                       break; 
+                                       break;
 
                                if ((class >> 16) != PCI_CLASS_BRIDGE_PCI)
-                                       continue; 
-                               
-                               vendor = read_pci_config(num, slot, func, 
+                                       continue;
+
+                               vendor = read_pci_config(num, slot, func,
                                                         PCI_VENDOR_ID);
-                               
-                               if (check_bridge(vendor&0xffff, vendor >> 16))
-                                       return; 
-                       } 
-                       
+
+                               if (check_bridge(vendor & 0xffff, vendor >> 16))
+                                       return;
+                       }
+
                }
        }
 }
index c1af93032ff32bc02df16891819159e473efb78e..1cb2b186a3aff9ac0cbdc8f4540154a4f5e78e26 100644 (file)
@@ -20,12 +20,13 @@ extern void zap_low_mappings(void);
 
 extern unsigned long FASTCALL(acpi_copy_wakeup_routine(unsigned long));
 
-static void init_low_mapping(pgd_t *pgd, int pgd_limit)
+static void init_low_mapping(pgd_t * pgd, int pgd_limit)
 {
        int pgd_ofs = 0;
 
-       while ((pgd_ofs < pgd_limit) && (pgd_ofs + USER_PTRS_PER_PGD < PTRS_PER_PGD)) {
-               set_pgd(pgd, *(pgd+USER_PTRS_PER_PGD));
+       while ((pgd_ofs < pgd_limit)
+              && (pgd_ofs + USER_PTRS_PER_PGD < PTRS_PER_PGD)) {
+               set_pgd(pgd, *(pgd + USER_PTRS_PER_PGD));
                pgd_ofs++, pgd++;
        }
        flush_tlb_all();
@@ -37,12 +38,13 @@ static void init_low_mapping(pgd_t *pgd, int pgd_limit)
  * Create an identity mapped page table and copy the wakeup routine to
  * low memory.
  */
-int acpi_save_state_mem (void)
+int acpi_save_state_mem(void)
 {
        if (!acpi_wakeup_address)
                return 1;
        init_low_mapping(swapper_pg_dir, USER_PTRS_PER_PGD);
-       memcpy((void *) acpi_wakeup_address, &wakeup_start, &wakeup_end - &wakeup_start);
+       memcpy((void *)acpi_wakeup_address, &wakeup_start,
+              &wakeup_end - &wakeup_start);
        acpi_copy_wakeup_routine(acpi_wakeup_address);
 
        return 0;
@@ -51,7 +53,7 @@ int acpi_save_state_mem (void)
 /*
  * acpi_restore_state - undo effects of acpi_save_state_mem
  */
-void acpi_restore_state_mem (void)
+void acpi_restore_state_mem(void)
 {
        zap_low_mappings();
 }
@@ -67,7 +69,8 @@ void acpi_restore_state_mem (void)
 void __init acpi_reserve_bootmem(void)
 {
        if ((&wakeup_end - &wakeup_start) > PAGE_SIZE) {
-               printk(KERN_ERR "ACPI: Wakeup code way too big, S3 disabled.\n");
+               printk(KERN_ERR
+                      "ACPI: Wakeup code way too big, S3 disabled.\n");
                return;
        }
 
@@ -90,10 +93,8 @@ static int __init acpi_sleep_setup(char *str)
        return 1;
 }
 
-
 __setup("acpi_sleep=", acpi_sleep_setup);
 
-
 static __init int reset_videomode_after_s3(struct dmi_system_id *d)
 {
        acpi_video_flags |= 2;
@@ -101,14 +102,14 @@ static __init int reset_videomode_after_s3(struct dmi_system_id *d)
 }
 
 static __initdata struct dmi_system_id acpisleep_dmi_table[] = {
-       {       /* Reset video mode after returning from ACPI S3 sleep */
-               .callback = reset_videomode_after_s3,
-               .ident = "Toshiba Satellite 4030cdt",
-               .matches = {
-                       DMI_MATCH(DMI_PRODUCT_NAME, "S4030CDT/4.3"),
-               },
-       },
-       { }
+       {                       /* Reset video mode after returning from ACPI S3 sleep */
+        .callback = reset_videomode_after_s3,
+        .ident = "Toshiba Satellite 4030cdt",
+        .matches = {
+                    DMI_MATCH(DMI_PRODUCT_NAME, "S4030CDT/4.3"),
+                    },
+        },
+       {}
 };
 
 static int __init acpisleep_dmi_init(void)
index 60a9e54dd20ee25d223385d2fcc47c7858a5893b..822c8ce9d1f19374618ffa9c633d560dc1833f21 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/cpufreq.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <linux/compiler.h>
 #include <asm/io.h>
 #include <asm/delay.h>
 #include <asm/uaccess.h>
@@ -57,6 +58,8 @@ static struct cpufreq_acpi_io *acpi_io_data[NR_CPUS];
 
 static struct cpufreq_driver acpi_cpufreq_driver;
 
+static unsigned int acpi_pstate_strict;
+
 static int
 acpi_processor_write_port(
        u16     port,
@@ -163,34 +166,44 @@ acpi_processor_set_performance (
        }
 
        /*
-        * Then we read the 'status_register' and compare the value with the
-        * target state's 'status' to make sure the transition was successful.
-        * Note that we'll poll for up to 1ms (100 cycles of 10us) before
-        * giving up.
+        * Assume the write went through when acpi_pstate_strict is not used.
+        * As read status_register is an expensive operation and there 
+        * are no specific error cases where an IO port write will fail.
         */
-
-       port = data->acpi_data.status_register.address;
-       bit_width = data->acpi_data.status_register.bit_width;
-
-       dprintk("Looking for 0x%08x from port 0x%04x\n",
-               (u32) data->acpi_data.states[state].status, port);
-
-       for (i=0; i<100; i++) {
-               ret = acpi_processor_read_port(port, bit_width, &value);
-               if (ret) {      
-                       dprintk("Invalid port width 0x%04x\n", bit_width);
-                       retval = ret;
-                       goto migrate_end;
+       if (acpi_pstate_strict) {
+               /* Then we read the 'status_register' and compare the value 
+                * with the target state's 'status' to make sure the 
+                * transition was successful.
+                * Note that we'll poll for up to 1ms (100 cycles of 10us) 
+                * before giving up.
+                */
+
+               port = data->acpi_data.status_register.address;
+               bit_width = data->acpi_data.status_register.bit_width;
+
+               dprintk("Looking for 0x%08x from port 0x%04x\n",
+                       (u32) data->acpi_data.states[state].status, port);
+
+               for (i=0; i<100; i++) {
+                       ret = acpi_processor_read_port(port, bit_width, &value);
+                       if (ret) {      
+                               dprintk("Invalid port width 0x%04x\n", bit_width);
+                               retval = ret;
+                               goto migrate_end;
+                       }
+                       if (value == (u32) data->acpi_data.states[state].status)
+                               break;
+                       udelay(10);
                }
-               if (value == (u32) data->acpi_data.states[state].status)
-                       break;
-               udelay(10);
+       } else {
+               i = 0;
+               value = (u32) data->acpi_data.states[state].status;
        }
 
        /* notify cpufreq */
        cpufreq_notify_transition(&cpufreq_freqs, CPUFREQ_POSTCHANGE);
 
-       if (value != (u32) data->acpi_data.states[state].status) {
+       if (unlikely(value != (u32) data->acpi_data.states[state].status)) {
                unsigned int tmp = cpufreq_freqs.new;
                cpufreq_freqs.new = cpufreq_freqs.old;
                cpufreq_freqs.old = tmp;
@@ -537,6 +550,8 @@ acpi_cpufreq_exit (void)
        return;
 }
 
+module_param(acpi_pstate_strict, uint, 0644);
+MODULE_PARM_DESC(acpi_pstate_strict, "value 0 or non-zero. non-zero -> strict ACPI checks are performed during frequency changes.");
 
 late_initcall(acpi_cpufreq_init);
 module_exit(acpi_cpufreq_exit);
index a3cdf894302b0d5fe48ecfcd1581be41d99c8932..58516e2ac1728fb4cbeb31e7dae8e23d237f5e27 100644 (file)
@@ -6,32 +6,28 @@
 #include <linux/bootmem.h>
 
 
-struct dmi_header {
-       u8 type;
-       u8 length;
-       u16 handle;
-};
-
-#undef DMI_DEBUG
-
-#ifdef DMI_DEBUG
-#define dmi_printk(x) printk x
-#else
-#define dmi_printk(x)
-#endif
-
 static char * __init dmi_string(struct dmi_header *dm, u8 s)
 {
        u8 *bp = ((u8 *) dm) + dm->length;
+       char *str = "";
 
-       if (!s)
-               return "";
-       s--;
-       while (s > 0 && *bp) {
-               bp += strlen(bp) + 1;
+       if (s) {
                s--;
-       }
-       return bp;
+               while (s > 0 && *bp) {
+                       bp += strlen(bp) + 1;
+                       s--;
+               }
+
+               if (*bp != 0) {
+                       str = alloc_bootmem(strlen(bp) + 1);
+                       if (str != NULL)
+                               strcpy(str, bp);
+                       else
+                               printk(KERN_ERR "dmi_string: out of memory.\n");
+               }
+       }
+
+       return str;
 }
 
 /*
@@ -84,69 +80,76 @@ static int __init dmi_checksum(u8 *buf)
        return sum == 0;
 }
 
-static int __init dmi_iterate(void (*decode)(struct dmi_header *))
+static char *dmi_ident[DMI_STRING_MAX];
+static LIST_HEAD(dmi_devices);
+
+/*
+ *     Save a DMI string
+ */
+static void __init dmi_save_ident(struct dmi_header *dm, int slot, int string)
 {
-       u8 buf[15];
-       char __iomem *p, *q;
+       char *p, *d = (char*) dm;
 
-       /*
-        * no iounmap() for that ioremap(); it would be a no-op, but it's
-        * so early in setup that sucker gets confused into doing what
-        * it shouldn't if we actually call it.
-        */
-       p = ioremap(0xF0000, 0x10000);
+       if (dmi_ident[slot])
+               return;
+
+       p = dmi_string(dm, d[string]);
        if (p == NULL)
-               return -1;
+               return;
 
-       for (q = p; q < p + 0x10000; q += 16) {
-               memcpy_fromio(buf, q, 15);
-               if ((memcmp(buf, "_DMI_", 5) == 0) && dmi_checksum(buf)) {
-                       u16 num = (buf[13] << 8) | buf[12];
-                       u16 len = (buf[7] << 8) | buf[6];
-                       u32 base = (buf[11] << 24) | (buf[10] << 16) |
-                                  (buf[9] << 8) | buf[8];
+       dmi_ident[slot] = p;
+}
 
-                       /*
-                        * DMI version 0.0 means that the real version is taken from
-                        * the SMBIOS version, which we don't know at this point.
-                        */
-                       if (buf[14] != 0)
-                               printk(KERN_INFO "DMI %d.%d present.\n",
-                                       buf[14] >> 4, buf[14] & 0xF);
-                       else
-                               printk(KERN_INFO "DMI present.\n");
+static void __init dmi_save_devices(struct dmi_header *dm)
+{
+       int i, count = (dm->length - sizeof(struct dmi_header)) / 2;
+       struct dmi_device *dev;
+
+       for (i = 0; i < count; i++) {
+               char *d = ((char *) dm) + (i * 2);
 
-                       dmi_printk((KERN_INFO "%d structures occupying %d bytes.\n",
-                               num, len));
-                       dmi_printk((KERN_INFO "DMI table at 0x%08X.\n", base));
+               /* Skip disabled device */
+               if ((*d & 0x80) == 0)
+                       continue;
 
-                       if (dmi_table(base,len, num, decode) == 0)
-                               return 0;
+               dev = alloc_bootmem(sizeof(*dev));
+               if (!dev) {
+                       printk(KERN_ERR "dmi_save_devices: out of memory.\n");
+                       break;
                }
+
+               dev->type = *d++ & 0x7f;
+               dev->name = dmi_string(dm, *d);
+               dev->device_data = NULL;
+
+               list_add(&dev->list, &dmi_devices);
        }
-       return -1;
 }
 
-static char *dmi_ident[DMI_STRING_MAX];
-
-/*
- *     Save a DMI string
- */
-static void __init dmi_save_ident(struct dmi_header *dm, int slot, int string)
+static void __init dmi_save_ipmi_device(struct dmi_header *dm)
 {
-       char *d = (char*)dm;
-       char *p = dmi_string(dm, d[string]);
+       struct dmi_device *dev;
+       void * data;
 
-       if (p == NULL || *p == 0)
+       data = alloc_bootmem(dm->length);
+       if (data == NULL) {
+               printk(KERN_ERR "dmi_save_ipmi_device: out of memory.\n");
                return;
-       if (dmi_ident[slot])
+       }
+
+       memcpy(data, dm, dm->length);
+
+       dev = alloc_bootmem(sizeof(*dev));
+       if (!dev) {
+               printk(KERN_ERR "dmi_save_ipmi_device: out of memory.\n");
                return;
+       }
 
-       dmi_ident[slot] = alloc_bootmem(strlen(p) + 1);
-       if(dmi_ident[slot])
-               strcpy(dmi_ident[slot], p);
-       else
-               printk(KERN_ERR "dmi_save_ident: out of memory.\n");
+       dev->type = DMI_DEV_TYPE_IPMI;
+       dev->name = "IPMI controller";
+       dev->device_data = data;
+
+       list_add(&dev->list, &dmi_devices);
 }
 
 /*
@@ -156,42 +159,69 @@ static void __init dmi_save_ident(struct dmi_header *dm, int slot, int string)
  */
 static void __init dmi_decode(struct dmi_header *dm)
 {
-       u8 *data __attribute__((__unused__)) = (u8 *)dm;
-       
        switch(dm->type) {
-       case  0:
-               dmi_printk(("BIOS Vendor: %s\n", dmi_string(dm, data[4])));
+       case 0:         /* BIOS Information */
                dmi_save_ident(dm, DMI_BIOS_VENDOR, 4);
-               dmi_printk(("BIOS Version: %s\n", dmi_string(dm, data[5])));
                dmi_save_ident(dm, DMI_BIOS_VERSION, 5);
-               dmi_printk(("BIOS Release: %s\n", dmi_string(dm, data[8])));
                dmi_save_ident(dm, DMI_BIOS_DATE, 8);
                break;
-       case 1:
-               dmi_printk(("System Vendor: %s\n", dmi_string(dm, data[4])));
+       case 1:         /* System Information */
                dmi_save_ident(dm, DMI_SYS_VENDOR, 4);
-               dmi_printk(("Product Name: %s\n", dmi_string(dm, data[5])));
                dmi_save_ident(dm, DMI_PRODUCT_NAME, 5);
-               dmi_printk(("Version: %s\n", dmi_string(dm, data[6])));
                dmi_save_ident(dm, DMI_PRODUCT_VERSION, 6);
-               dmi_printk(("Serial Number: %s\n", dmi_string(dm, data[7])));
                dmi_save_ident(dm, DMI_PRODUCT_SERIAL, 7);
                break;
-       case 2:
-               dmi_printk(("Board Vendor: %s\n", dmi_string(dm, data[4])));
+       case 2:         /* Base Board Information */
                dmi_save_ident(dm, DMI_BOARD_VENDOR, 4);
-               dmi_printk(("Board Name: %s\n", dmi_string(dm, data[5])));
                dmi_save_ident(dm, DMI_BOARD_NAME, 5);
-               dmi_printk(("Board Version: %s\n", dmi_string(dm, data[6])));
                dmi_save_ident(dm, DMI_BOARD_VERSION, 6);
                break;
+       case 10:        /* Onboard Devices Information */
+               dmi_save_devices(dm);
+               break;
+       case 38:        /* IPMI Device Information */
+               dmi_save_ipmi_device(dm);
        }
 }
 
 void __init dmi_scan_machine(void)
 {
-       if (dmi_iterate(dmi_decode))
-               printk(KERN_INFO "DMI not present.\n");
+       u8 buf[15];
+       char __iomem *p, *q;
+
+       /*
+        * no iounmap() for that ioremap(); it would be a no-op, but it's
+        * so early in setup that sucker gets confused into doing what
+        * it shouldn't if we actually call it.
+        */
+       p = ioremap(0xF0000, 0x10000);
+       if (p == NULL)
+               goto out;
+
+       for (q = p; q < p + 0x10000; q += 16) {
+               memcpy_fromio(buf, q, 15);
+               if ((memcmp(buf, "_DMI_", 5) == 0) && dmi_checksum(buf)) {
+                       u16 num = (buf[13] << 8) | buf[12];
+                       u16 len = (buf[7] << 8) | buf[6];
+                       u32 base = (buf[11] << 24) | (buf[10] << 16) |
+                                  (buf[9] << 8) | buf[8];
+
+                       /*
+                        * DMI version 0.0 means that the real version is taken from
+                        * the SMBIOS version, which we don't know at this point.
+                        */
+                       if (buf[14] != 0)
+                               printk(KERN_INFO "DMI %d.%d present.\n",
+                                       buf[14] >> 4, buf[14] & 0xF);
+                       else
+                               printk(KERN_INFO "DMI present.\n");
+
+                       if (dmi_table(base,len, num, dmi_decode) == 0)
+                               return;
+               }
+       }
+
+out:   printk(KERN_INFO "DMI not present.\n");
 }
 
 
@@ -218,9 +248,9 @@ int dmi_check_system(struct dmi_system_id *list)
                        /* No match */
                        goto fail;
                }
+               count++;
                if (d->callback && d->callback(d))
                        break;
-               count++;
 fail:          d++;
        }
 
@@ -240,3 +270,32 @@ char *dmi_get_system_info(int field)
        return dmi_ident[field];
 }
 EXPORT_SYMBOL(dmi_get_system_info);
+
+/**
+ *     dmi_find_device - find onboard device by type/name
+ *     @type: device type or %DMI_DEV_TYPE_ANY to match all device types
+ *     @desc: device name string or %NULL to match all
+ *     @from: previous device found in search, or %NULL for new search.
+ *
+ *     Iterates through the list of known onboard devices. If a device is
+ *     found with a matching @vendor and @device, a pointer to its device
+ *     structure is returned.  Otherwise, %NULL is returned.
+ *     A new search is initiated by passing %NULL to the @from argument.
+ *     If @from is not %NULL, searches continue from next device.
+ */
+struct dmi_device * dmi_find_device(int type, const char *name,
+                                   struct dmi_device *from)
+{
+       struct list_head *d, *head = from ? &from->list : &dmi_devices;
+
+       for(d = head->next; d != &dmi_devices; d = d->next) {
+               struct dmi_device *dev = list_entry(d, struct dmi_device, list);
+
+               if (((type == DMI_DEV_TYPE_ANY) || (dev->type == type)) &&
+                   ((name == NULL) || (strcmp(dev->name, name) == 0)))
+                       return dev;
+       }
+
+       return NULL;
+}
+EXPORT_SYMBOL(dmi_find_device);
index abb909793efcdce8e0e393e0da9beb738550dc10..3aad03839660de38dd8c24361ecbd6814de5eb52 100644 (file)
@@ -507,7 +507,7 @@ label:                                              \
        pushl $__KERNEL_CS;                     \
        pushl $sysenter_past_esp
 
-ENTRY(debug)
+KPROBE_ENTRY(debug)
        cmpl $sysenter_entry,(%esp)
        jne debug_stack_correct
        FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn)
@@ -518,7 +518,7 @@ debug_stack_correct:
        movl %esp,%eax                  # pt_regs pointer
        call do_debug
        jmp ret_from_exception
-
+       .previous .text
 /*
  * NMI is doubly nasty. It can happen _while_ we're handling
  * a debug fault, and the debug fault hasn't yet been able to
@@ -591,13 +591,14 @@ nmi_16bit_stack:
        .long 1b,iret_exc
 .previous
 
-ENTRY(int3)
+KPROBE_ENTRY(int3)
        pushl $-1                       # mark this as an int
        SAVE_ALL
        xorl %edx,%edx          # zero error code
        movl %esp,%eax          # pt_regs pointer
        call do_int3
        jmp ret_from_exception
+       .previous .text
 
 ENTRY(overflow)
        pushl $0
@@ -631,17 +632,19 @@ ENTRY(stack_segment)
        pushl $do_stack_segment
        jmp error_code
 
-ENTRY(general_protection)
+KPROBE_ENTRY(general_protection)
        pushl $do_general_protection
        jmp error_code
+       .previous .text
 
 ENTRY(alignment_check)
        pushl $do_alignment_check
        jmp error_code
 
-ENTRY(page_fault)
+KPROBE_ENTRY(page_fault)
        pushl $do_page_fault
        jmp error_code
+       .previous .text
 
 #ifdef CONFIG_X86_MCE
 ENTRY(machine_check)
index 6578f40bd5012a0af9385d889f8a6cd37a6546a9..889eda2d7b17db55bcaee783424622b6c38079b1 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/acpi.h>
 #include <linux/module.h>
 #include <linux/sysdev.h>
+
 #include <asm/io.h>
 #include <asm/smp.h>
 #include <asm/desc.h>
@@ -77,7 +78,7 @@ static struct irq_pin_list {
        int apic, pin, next;
 } irq_2_pin[PIN_MAP_SIZE];
 
-int vector_irq[NR_VECTORS] = { [0 ... NR_VECTORS - 1] = -1};
+int vector_irq[NR_VECTORS] __read_mostly = { [0 ... NR_VECTORS - 1] = -1};
 #ifdef CONFIG_PCI_MSI
 #define vector_to_irq(vector)  \
        (platform_legacy_irq(vector) ? vector : vector_irq[vector])
@@ -222,13 +223,21 @@ static void clear_IO_APIC (void)
                        clear_IO_APIC_pin(apic, pin);
 }
 
+#ifdef CONFIG_SMP
 static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t cpumask)
 {
        unsigned long flags;
        int pin;
        struct irq_pin_list *entry = irq_2_pin + irq;
        unsigned int apicid_value;
+       cpumask_t tmp;
        
+       cpus_and(tmp, cpumask, cpu_online_map);
+       if (cpus_empty(tmp))
+               tmp = TARGET_CPUS;
+
+       cpus_and(cpumask, tmp, CPU_MASK_ALL);
+
        apicid_value = cpu_mask_to_apicid(cpumask);
        /* Prepare to do the io_apic_write */
        apicid_value = apicid_value << 24;
@@ -242,6 +251,7 @@ static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t cpumask)
                        break;
                entry = irq_2_pin + entry->next;
        }
+       set_irq_info(irq, cpumask);
        spin_unlock_irqrestore(&ioapic_lock, flags);
 }
 
@@ -259,7 +269,6 @@ static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t cpumask)
 #  define Dprintk(x...) 
 # endif
 
-cpumask_t __cacheline_aligned pending_irq_balance_cpumask[NR_IRQS];
 
 #define IRQBALANCE_CHECK_ARCH -999
 static int irqbalance_disabled = IRQBALANCE_CHECK_ARCH;
@@ -328,12 +337,7 @@ static inline void balance_irq(int cpu, int irq)
        cpus_and(allowed_mask, cpu_online_map, irq_affinity[irq]);
        new_cpu = move(cpu, allowed_mask, now, 1);
        if (cpu != new_cpu) {
-               irq_desc_t *desc = irq_desc + irq;
-               unsigned long flags;
-
-               spin_lock_irqsave(&desc->lock, flags);
-               pending_irq_balance_cpumask[irq] = cpumask_of_cpu(new_cpu);
-               spin_unlock_irqrestore(&desc->lock, flags);
+               set_pending_irq(irq, cpumask_of_cpu(new_cpu));
        }
 }
 
@@ -528,16 +532,12 @@ tryanotherirq:
        cpus_and(tmp, target_cpu_mask, allowed_mask);
 
        if (!cpus_empty(tmp)) {
-               irq_desc_t *desc = irq_desc + selected_irq;
-               unsigned long flags;
 
                Dprintk("irq = %d moved to cpu = %d\n",
                                selected_irq, min_loaded);
                /* mark for change destination */
-               spin_lock_irqsave(&desc->lock, flags);
-               pending_irq_balance_cpumask[selected_irq] =
-                                       cpumask_of_cpu(min_loaded);
-               spin_unlock_irqrestore(&desc->lock, flags);
+               set_pending_irq(selected_irq, cpumask_of_cpu(min_loaded));
+
                /* Since we made a change, come back sooner to 
                 * check for more variation.
                 */
@@ -568,7 +568,8 @@ static int balanced_irq(void *unused)
        
        /* push everything to CPU 0 to give us a starting point.  */
        for (i = 0 ; i < NR_IRQS ; i++) {
-               pending_irq_balance_cpumask[i] = cpumask_of_cpu(0);
+               pending_irq_cpumask[i] = cpumask_of_cpu(0);
+               set_pending_irq(i, cpumask_of_cpu(0));
        }
 
        for ( ; ; ) {
@@ -647,20 +648,9 @@ int __init irqbalance_disable(char *str)
 
 __setup("noirqbalance", irqbalance_disable);
 
-static inline void move_irq(int irq)
-{
-       /* note - we hold the desc->lock */
-       if (unlikely(!cpus_empty(pending_irq_balance_cpumask[irq]))) {
-               set_ioapic_affinity_irq(irq, pending_irq_balance_cpumask[irq]);
-               cpus_clear(pending_irq_balance_cpumask[irq]);
-       }
-}
-
 late_initcall(balanced_irq_init);
-
-#else /* !CONFIG_IRQBALANCE */
-static inline void move_irq(int irq) { }
 #endif /* CONFIG_IRQBALANCE */
+#endif /* CONFIG_SMP */
 
 #ifndef CONFIG_SMP
 void fastcall send_IPI_self(int vector)
@@ -820,6 +810,7 @@ EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector);
  * we need to reprogram the ioredtbls to cater for the cpus which have come online
  * so mask in all cases should simply be TARGET_CPUS
  */
+#ifdef CONFIG_SMP
 void __init setup_ioapic_dest(void)
 {
        int pin, ioapic, irq, irq_entry;
@@ -838,6 +829,7 @@ void __init setup_ioapic_dest(void)
 
        }
 }
+#endif
 
 /*
  * EISA Edge/Level control register, ELCR
@@ -1127,7 +1119,7 @@ static inline int IO_APIC_irq_trigger(int irq)
 }
 
 /* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */
-u8 irq_vector[NR_IRQ_VECTORS] = { FIRST_DEVICE_VECTOR , 0 };
+u8 irq_vector[NR_IRQ_VECTORS] __read_mostly = { FIRST_DEVICE_VECTOR , 0 };
 
 int assign_irq_vector(int irq)
 {
@@ -1249,6 +1241,7 @@ static void __init setup_IO_APIC_irqs(void)
                spin_lock_irqsave(&ioapic_lock, flags);
                io_apic_write(apic, 0x11+2*pin, *(((int *)&entry)+1));
                io_apic_write(apic, 0x10+2*pin, *(((int *)&entry)+0));
+               set_native_irq_info(irq, TARGET_CPUS);
                spin_unlock_irqrestore(&ioapic_lock, flags);
        }
        }
@@ -1944,6 +1937,7 @@ static void ack_edge_ioapic_vector(unsigned int vector)
 {
        int irq = vector_to_irq(vector);
 
+       move_irq(vector);
        ack_edge_ioapic_irq(irq);
 }
 
@@ -1958,6 +1952,7 @@ static void end_level_ioapic_vector (unsigned int vector)
 {
        int irq = vector_to_irq(vector);
 
+       move_irq(vector);
        end_level_ioapic_irq(irq);
 }
 
@@ -1975,14 +1970,17 @@ static void unmask_IO_APIC_vector (unsigned int vector)
        unmask_IO_APIC_irq(irq);
 }
 
+#ifdef CONFIG_SMP
 static void set_ioapic_affinity_vector (unsigned int vector,
                                        cpumask_t cpu_mask)
 {
        int irq = vector_to_irq(vector);
 
+       set_native_irq_info(vector, cpu_mask);
        set_ioapic_affinity_irq(irq, cpu_mask);
 }
 #endif
+#endif
 
 /*
  * Level and edge triggered IO-APIC interrupts need different handling,
@@ -1992,7 +1990,7 @@ static void set_ioapic_affinity_vector (unsigned int vector,
  * edge-triggered handler, without risking IRQ storms and other ugly
  * races.
  */
-static struct hw_interrupt_type ioapic_edge_type = {
+static struct hw_interrupt_type ioapic_edge_type __read_mostly = {
        .typename       = "IO-APIC-edge",
        .startup        = startup_edge_ioapic,
        .shutdown       = shutdown_edge_ioapic,
@@ -2000,10 +1998,12 @@ static struct hw_interrupt_type ioapic_edge_type = {
        .disable        = disable_edge_ioapic,
        .ack            = ack_edge_ioapic,
        .end            = end_edge_ioapic,
+#ifdef CONFIG_SMP
        .set_affinity   = set_ioapic_affinity,
+#endif
 };
 
-static struct hw_interrupt_type ioapic_level_type = {
+static struct hw_interrupt_type ioapic_level_type __read_mostly = {
        .typename       = "IO-APIC-level",
        .startup        = startup_level_ioapic,
        .shutdown       = shutdown_level_ioapic,
@@ -2011,7 +2011,9 @@ static struct hw_interrupt_type ioapic_level_type = {
        .disable        = disable_level_ioapic,
        .ack            = mask_and_ack_level_ioapic,
        .end            = end_level_ioapic,
+#ifdef CONFIG_SMP
        .set_affinity   = set_ioapic_affinity,
+#endif
 };
 
 static inline void init_IO_APIC_traps(void)
@@ -2074,7 +2076,7 @@ static void ack_lapic_irq (unsigned int irq)
 
 static void end_lapic_irq (unsigned int i) { /* nothing */ }
 
-static struct hw_interrupt_type lapic_irq_type = {
+static struct hw_interrupt_type lapic_irq_type __read_mostly = {
        .typename       = "local-APIC-edge",
        .startup        = NULL, /* startup_irq() not used for IRQ0 */
        .shutdown       = NULL, /* shutdown_irq() not used for IRQ0 */
@@ -2421,7 +2423,7 @@ device_initcall(ioapic_init_sysfs);
                           ACPI-based IOAPIC Configuration
    -------------------------------------------------------------------------- */
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 
 int __init io_apic_get_unique_id (int ioapic, int apic_id)
 {
@@ -2569,9 +2571,10 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
        spin_lock_irqsave(&ioapic_lock, flags);
        io_apic_write(ioapic, 0x11+2*pin, *(((int *)&entry)+1));
        io_apic_write(ioapic, 0x10+2*pin, *(((int *)&entry)+0));
+       set_native_irq_info(use_pci_vector() ? entry.vector : irq, TARGET_CPUS);
        spin_unlock_irqrestore(&ioapic_lock, flags);
 
        return 0;
 }
 
-#endif /*CONFIG_ACPI_BOOT*/
+#endif /* CONFIG_ACPI */
index a6d8c45961d3ccb33503f38535802d3a7e022afc..6345b430b105fd913c1fdca36768910e2f7fd580 100644 (file)
@@ -62,32 +62,32 @@ static inline int is_IF_modifier(kprobe_opcode_t opcode)
        return 0;
 }
 
-int arch_prepare_kprobe(struct kprobe *p)
+int __kprobes arch_prepare_kprobe(struct kprobe *p)
 {
        return 0;
 }
 
-void arch_copy_kprobe(struct kprobe *p)
+void __kprobes arch_copy_kprobe(struct kprobe *p)
 {
        memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
        p->opcode = *p->addr;
 }
 
-void arch_arm_kprobe(struct kprobe *p)
+void __kprobes arch_arm_kprobe(struct kprobe *p)
 {
        *p->addr = BREAKPOINT_INSTRUCTION;
        flush_icache_range((unsigned long) p->addr,
                           (unsigned long) p->addr + sizeof(kprobe_opcode_t));
 }
 
-void arch_disarm_kprobe(struct kprobe *p)
+void __kprobes arch_disarm_kprobe(struct kprobe *p)
 {
        *p->addr = p->opcode;
        flush_icache_range((unsigned long) p->addr,
                           (unsigned long) p->addr + sizeof(kprobe_opcode_t));
 }
 
-void arch_remove_kprobe(struct kprobe *p)
+void __kprobes arch_remove_kprobe(struct kprobe *p)
 {
 }
 
@@ -127,7 +127,8 @@ static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
                regs->eip = (unsigned long)&p->ainsn.insn;
 }
 
-void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs)
+void __kprobes arch_prepare_kretprobe(struct kretprobe *rp,
+                                     struct pt_regs *regs)
 {
        unsigned long *sara = (unsigned long *)&regs->esp;
         struct kretprobe_instance *ri;
@@ -150,7 +151,7 @@ void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs)
  * Interrupts are disabled on entry as trap3 is an interrupt gate and they
  * remain disabled thorough out this function.
  */
-static int kprobe_handler(struct pt_regs *regs)
+static int __kprobes kprobe_handler(struct pt_regs *regs)
 {
        struct kprobe *p;
        int ret = 0;
@@ -176,7 +177,8 @@ static int kprobe_handler(struct pt_regs *regs)
                   Disarm the probe we just hit, and ignore it. */
                p = get_kprobe(addr);
                if (p) {
-                       if (kprobe_status == KPROBE_HIT_SS) {
+                       if (kprobe_status == KPROBE_HIT_SS &&
+                               *p->ainsn.insn == BREAKPOINT_INSTRUCTION) {
                                regs->eflags &= ~TF_MASK;
                                regs->eflags |= kprobe_saved_eflags;
                                unlock_kprobes();
@@ -220,7 +222,10 @@ static int kprobe_handler(struct pt_regs *regs)
                         * either a probepoint or a debugger breakpoint
                         * at this address.  In either case, no further
                         * handling of this interrupt is appropriate.
+                        * Back up over the (now missing) int3 and run
+                        * the original instruction.
                         */
+                       regs->eip -= sizeof(kprobe_opcode_t);
                        ret = 1;
                }
                /* Not one of ours: let kernel handle it */
@@ -259,7 +264,7 @@ no_kprobe:
 /*
  * Called when we hit the probe point at kretprobe_trampoline
  */
-int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
 {
         struct kretprobe_instance *ri = NULL;
         struct hlist_head *head;
@@ -338,7 +343,7 @@ int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
  * that is atop the stack is the address following the copied instruction.
  * We need to make it the address following the original instruction.
  */
-static void resume_execution(struct kprobe *p, struct pt_regs *regs)
+static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs)
 {
        unsigned long *tos = (unsigned long *)&regs->esp;
        unsigned long next_eip = 0;
@@ -444,8 +449,8 @@ static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
 /*
  * Wrapper routine to for handling exceptions.
  */
-int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
-                            void *data)
+int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
+                                      unsigned long val, void *data)
 {
        struct die_args *args = (struct die_args *)data;
        switch (val) {
@@ -473,7 +478,7 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
        return NOTIFY_DONE;
 }
 
-int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
 {
        struct jprobe *jp = container_of(p, struct jprobe, kp);
        unsigned long addr;
@@ -495,7 +500,7 @@ int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
        return 1;
 }
 
-void jprobe_return(void)
+void __kprobes jprobe_return(void)
 {
        preempt_enable_no_resched();
        asm volatile ("       xchgl   %%ebx,%%esp     \n"
@@ -506,7 +511,7 @@ void jprobe_return(void)
                      (jprobe_saved_esp):"memory");
 }
 
-int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
 {
        u8 *addr = (u8 *) (regs->eip - 1);
        unsigned long stack_addr = (unsigned long)jprobe_saved_esp;
index 5d0b9a8fc43dc1e1b1f1da28b560b24c5552abca..cafaeffe381857bd19de265957f9782496063f48 100644 (file)
@@ -668,8 +668,6 @@ void __init get_smp_config (void)
        struct intel_mp_floating *mpf = mpf_found;
 
        /*
-        * ACPI may be used to obtain the entire SMP configuration or just to 
-        * enumerate/configure processors (CONFIG_ACPI_BOOT).  Note that 
         * ACPI supports both logical (e.g. Hyper-Threading) and physical 
         * processors, where MPS only supports physical.
         */
@@ -825,7 +823,7 @@ void __init find_smp_config (void)
                             ACPI-based MP Configuration
    -------------------------------------------------------------------------- */
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 
 void __init mp_register_lapic_address (
        u64                     address)
@@ -871,7 +869,7 @@ void __init mp_register_lapic (
        MP_processor_info(&processor);
 }
 
-#if defined(CONFIG_X86_IO_APIC) && (defined(CONFIG_ACPI_INTERPRETER) || defined(CONFIG_ACPI_BOOT))
+#ifdef CONFIG_X86_IO_APIC
 
 #define MP_ISA_BUS             0
 #define MP_MAX_IOAPIC_PIN      127
@@ -1086,11 +1084,9 @@ int mp_register_gsi (u32 gsi, int edge_level, int active_high_low)
         */
        static int              gsi_to_irq[MAX_GSI_NUM];
 
-#ifdef CONFIG_ACPI_BUS
        /* Don't set up the ACPI SCI because it's already set up */
        if (acpi_fadt.sci_int == gsi)
                return gsi;
-#endif
 
        ioapic = mp_find_ioapic(gsi);
        if (ioapic < 0) {
@@ -1133,13 +1129,11 @@ int mp_register_gsi (u32 gsi, int edge_level, int active_high_low)
                if (gsi < MAX_GSI_NUM) {
                        if (gsi > 15)
                                gsi = pci_irq++;
-#ifdef CONFIG_ACPI_BUS
                        /*
                         * Don't assign IRQ used by ACPI SCI
                         */
                        if (gsi == acpi_fadt.sci_int)
                                gsi = pci_irq++;
-#endif
                        gsi_to_irq[irq] = gsi;
                } else {
                        printk(KERN_ERR "GSI %u is too high\n", gsi);
@@ -1153,5 +1147,5 @@ int mp_register_gsi (u32 gsi, int edge_level, int active_high_low)
        return gsi;
 }
 
-#endif /*CONFIG_X86_IO_APIC && (CONFIG_ACPI_INTERPRETER || CONFIG_ACPI_BOOT)*/
-#endif /*CONFIG_ACPI_BOOT*/
+#endif /* CONFIG_X86_IO_APIC */
+#endif /* CONFIG_ACPI */
index 8bbdbda07a2d6c0dd54d68ec06ea968b52d064fb..0178457db72130b54d3170dfd8150742b8addfe1 100644 (file)
@@ -478,6 +478,11 @@ void touch_nmi_watchdog (void)
         */
        for (i = 0; i < NR_CPUS; i++)
                alert_counter[i] = 0;
+
+       /*
+        * Tickle the softlockup detector too:
+        */
+       touch_softlockup_watchdog();
 }
 
 extern void die_nmi(struct pt_regs *, const char *msg);
index 294bcca985ab7ec2de873dff4716f0681500c0be..a659d274914cf26ccbc7431900d6423a391f66b1 100644 (file)
@@ -82,19 +82,19 @@ EXPORT_SYMBOL(efi_enabled);
 /* cpu data as detected by the assembly code in head.S */
 struct cpuinfo_x86 new_cpu_data __initdata = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
 /* common cpu data for all cpus */
-struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
+struct cpuinfo_x86 boot_cpu_data __read_mostly = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
 EXPORT_SYMBOL(boot_cpu_data);
 
 unsigned long mmu_cr4_features;
 
-#ifdef CONFIG_ACPI_INTERPRETER
+#ifdef CONFIG_ACPI
        int acpi_disabled = 0;
 #else
        int acpi_disabled = 1;
 #endif
 EXPORT_SYMBOL(acpi_disabled);
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 int __initdata acpi_force = 0;
 extern acpi_interrupt_flags    acpi_sci_flags;
 #endif
@@ -798,7 +798,7 @@ static void __init parse_cmdline_early (char ** cmdline_p)
                }
 #endif
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
                /* "acpi=off" disables both ACPI table parsing and interpreter */
                else if (!memcmp(from, "acpi=off", 8)) {
                        disable_acpi();
@@ -854,7 +854,7 @@ static void __init parse_cmdline_early (char ** cmdline_p)
                else if (!memcmp(from, "noapic", 6))
                        disable_ioapic_setup();
 #endif /* CONFIG_X86_LOCAL_APIC */
-#endif /* CONFIG_ACPI_BOOT */
+#endif /* CONFIG_ACPI */
 
 #ifdef CONFIG_X86_LOCAL_APIC
                /* enable local APIC */
@@ -1579,7 +1579,7 @@ void __init setup_arch(char **cmdline_p)
        if (efi_enabled)
                efi_map_memmap();
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
        /*
         * Parse the ACPI tables for possible boot-time SMP configuration.
         */
index 6f794a78ee1e7be1f12074b7c0cfaad15aa8a9fd..eefea7c5500893bd47e9d9485f7111ae34cd76e1 100644 (file)
@@ -194,10 +194,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
        return 0;
@@ -252,8 +249,7 @@ EXPORT_SYMBOL(profile_pc);
  * timer_interrupt() needs to keep up the real-time clock,
  * as well as call the "do_timer()" routine every clocktick
  */
-static inline void do_timer_interrupt(int irq, void *dev_id,
-                                       struct pt_regs *regs)
+static inline void do_timer_interrupt(int irq, struct pt_regs *regs)
 {
 #ifdef CONFIG_X86_IO_APIC
        if (timer_ack) {
@@ -307,7 +303,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
        cur_timer->mark_offset();
  
-       do_timer_interrupt(irq, NULL, regs);
+       do_timer_interrupt(irq, regs);
 
        write_sequnlock(&xtime_lock);
        return IRQ_HANDLED;
@@ -348,7 +344,7 @@ static void sync_cmos_clock(unsigned long dummy)
         * This code is run on a timer.  If the clock is set, that timer
         * may not expire at the correct time.  Thus, we adjust...
         */
-       if ((time_status & STA_UNSYNC) != 0)
+       if (!ntp_synced())
                /*
                 * Not synced, exit, do not restart a timer (if one is
                 * running, let it run out).
@@ -422,6 +418,7 @@ static int timer_resume(struct sys_device *dev)
                last_timer->resume();
        cur_timer = last_timer;
        last_timer = NULL;
+       touch_softlockup_watchdog();
        return 0;
 }
 
index 001de97c9e4a78b720cf5d567e60656739c200a5..d973a8b681fd5256d75212e77e43131141e07641 100644 (file)
@@ -18,8 +18,8 @@
 #include "mach_timer.h"
 #include <asm/hpet.h>
 
-static unsigned long __read_mostly hpet_usec_quotient; /* convert hpet clks to usec */
-static unsigned long tsc_hpet_quotient;                /* convert tsc to hpet clks */
+static unsigned long hpet_usec_quotient __read_mostly; /* convert hpet clks to usec */
+static unsigned long tsc_hpet_quotient __read_mostly;  /* convert tsc to hpet clks */
 static unsigned long hpet_last;        /* hpet counter value at last tick*/
 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 */
index 54629bb5893ae1c9ab6765ea6b84a23c1fae3761..09a58cb6daa7050e018496a127458241f2fa0e30 100644 (file)
@@ -363,8 +363,9 @@ static inline void die_if_kernel(const char * str, struct pt_regs * regs, long e
                die(str, regs, err);
 }
 
-static void do_trap(int trapnr, int signr, char *str, int vm86,
-                          struct pt_regs * regs, long error_code, siginfo_t *info)
+static void __kprobes do_trap(int trapnr, int signr, char *str, int vm86,
+                             struct pt_regs * regs, long error_code,
+                             siginfo_t *info)
 {
        struct task_struct *tsk = current;
        tsk->thread.error_code = error_code;
@@ -460,7 +461,8 @@ DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
 DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
 DO_ERROR_INFO(32, SIGSEGV, "iret exception", iret_error, ILL_BADSTK, 0)
 
-fastcall void do_general_protection(struct pt_regs * regs, long error_code)
+fastcall void __kprobes do_general_protection(struct pt_regs * regs,
+                                             long error_code)
 {
        int cpu = get_cpu();
        struct tss_struct *tss = &per_cpu(init_tss, cpu);
@@ -657,7 +659,7 @@ fastcall void do_nmi(struct pt_regs * regs, long error_code)
 
        ++nmi_count(cpu);
 
-       if (!nmi_callback(regs, cpu))
+       if (!rcu_dereference(nmi_callback)(regs, cpu))
                default_do_nmi(regs);
 
        nmi_exit();
@@ -665,7 +667,7 @@ fastcall void do_nmi(struct pt_regs * regs, long error_code)
 
 void set_nmi_callback(nmi_callback_t callback)
 {
-       nmi_callback = callback;
+       rcu_assign_pointer(nmi_callback, callback);
 }
 EXPORT_SYMBOL_GPL(set_nmi_callback);
 
@@ -676,7 +678,7 @@ void unset_nmi_callback(void)
 EXPORT_SYMBOL_GPL(unset_nmi_callback);
 
 #ifdef CONFIG_KPROBES
-fastcall void do_int3(struct pt_regs *regs, long error_code)
+fastcall void __kprobes do_int3(struct pt_regs *regs, long error_code)
 {
        if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP)
                        == NOTIFY_STOP)
@@ -710,7 +712,7 @@ fastcall void do_int3(struct pt_regs *regs, long error_code)
  * find every occurrence of the TF bit that could be saved away even
  * by user code)
  */
-fastcall void do_debug(struct pt_regs * regs, long error_code)
+fastcall void __kprobes do_debug(struct pt_regs * regs, long error_code)
 {
        unsigned int condition;
        struct task_struct *tsk = current;
index 761972f8cb6c86dadf1ed297d2ea12a6ae234977..13b9c62cbbb45ce1d95357a1784afea6f8e3db89 100644 (file)
@@ -22,6 +22,7 @@ SECTIONS
        *(.text)
        SCHED_TEXT
        LOCK_TEXT
+       KPROBES_TEXT
        *(.fixup)
        *(.gnu.warning)
        } = 0x9090
index 23395fff35d16e59dcade164354dc0045ee95d1f..b64314069e785636a2375ed44c354bd717dd91fb 100644 (file)
@@ -76,7 +76,7 @@ static int __init topology_init(void)
        for_each_online_node(i)
                arch_register_node(i);
 
-       for_each_cpu(i)
+       for_each_present_cpu(i)
                arch_register_cpu(i);
        return 0;
 }
@@ -87,7 +87,7 @@ static int __init topology_init(void)
 {
        int i;
 
-       for_each_cpu(i)
+       for_each_present_cpu(i)
                arch_register_cpu(i);
        return 0;
 }
index 2000bdca2fc2cc3a93a9c9393012bd5db707d91d..dc6660511b075e2b10292c5343a0a2b65a3eddbc 100644 (file)
@@ -51,7 +51,7 @@ struct mip_reg                *host_reg;
 int                    mip_port;
 unsigned long          mip_addr, host_addr;
 
-#if defined(CONFIG_X86_IO_APIC) && (defined(CONFIG_ACPI_INTERPRETER) || defined(CONFIG_ACPI_BOOT))
+#if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI)
 
 /*
  * GSI override for ES7000 platforms.
@@ -73,7 +73,7 @@ es7000_rename_gsi(int ioapic, int gsi)
        return gsi;
 }
 
-#endif // (CONFIG_X86_IO_APIC) && (CONFIG_ACPI_INTERPRETER || CONFIG_ACPI_BOOT)
+#endif /* (CONFIG_X86_IO_APIC) && (CONFIG_ACPI) */
 
 void __init
 setup_unisys ()
index 6711ce3f6916ad3601b33d4ba5a2d694f2bd2989..244d8ec66be2a473361bf00d81e81ba53cdf9fe0 100644 (file)
@@ -37,7 +37,7 @@
 #include <asm/mmzone.h>
 #include <bios_ebda.h>
 
-struct pglist_data *node_data[MAX_NUMNODES];
+struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
 EXPORT_SYMBOL(node_data);
 bootmem_data_t node0_bdata;
 
@@ -49,8 +49,8 @@ bootmem_data_t node0_bdata;
  * 2) node_start_pfn   - the starting page frame number for a node
  * 3) node_end_pfn     - the ending page fram number for a node
  */
-unsigned long node_start_pfn[MAX_NUMNODES];
-unsigned long node_end_pfn[MAX_NUMNODES];
+unsigned long node_start_pfn[MAX_NUMNODES] __read_mostly;
+unsigned long node_end_pfn[MAX_NUMNODES] __read_mostly;
 
 
 #ifdef CONFIG_DISCONTIGMEM
@@ -66,7 +66,7 @@ unsigned long node_end_pfn[MAX_NUMNODES];
  *     physnode_map[4-7] = 1;
  *     physnode_map[8- ] = -1;
  */
-s8 physnode_map[MAX_ELEMENTS] = { [0 ... (MAX_ELEMENTS - 1)] = -1};
+s8 physnode_map[MAX_ELEMENTS] __read_mostly = { [0 ... (MAX_ELEMENTS - 1)] = -1};
 EXPORT_SYMBOL(physnode_map);
 
 void memory_present(int nid, unsigned long start, unsigned long end)
index 411b8500ad1b07736c92412fb3eaced4e5baf4f8..9edd4485b91eafd6396affe5649c92d00b8666ae 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/vt_kern.h>             /* For unblank_screen() */
 #include <linux/highmem.h>
 #include <linux/module.h>
+#include <linux/kprobes.h>
 
 #include <asm/system.h>
 #include <asm/uaccess.h>
@@ -223,7 +224,8 @@ fastcall void do_invalid_op(struct pt_regs *, unsigned long);
  *     bit 1 == 0 means read, 1 means write
  *     bit 2 == 0 means kernel, 1 means user-mode
  */
-fastcall void do_page_fault(struct pt_regs *regs, unsigned long error_code)
+fastcall void __kprobes do_page_fault(struct pt_regs *regs,
+                                     unsigned long error_code)
 {
        struct task_struct *tsk;
        struct mm_struct *mm;
index 9edfc058b8943bb95cf056a86ffe7a2e443e6b5a..2ebaf75f732e92e8e901ea408e490718794b8821 100644 (file)
@@ -393,7 +393,7 @@ void zap_low_mappings (void)
 }
 
 static int disable_nx __initdata = 0;
-u64 __supported_pte_mask = ~_PAGE_NX;
+u64 __supported_pte_mask __read_mostly = ~_PAGE_NX;
 
 /*
  * noexec = on|off
index c90332de582b9a213c5aa91a0557c3ce93179567..5341d481d92fb789e4432abc69eb14fbc268036a 100644 (file)
@@ -15,9 +15,9 @@
  * with the NMI mode driver.
  */
  
-extern int nmi_init(struct oprofile_operations * ops);
-extern int nmi_timer_init(struct oprofile_operations * ops);
-extern void nmi_exit(void);
+extern int op_nmi_init(struct oprofile_operations * ops);
+extern int op_nmi_timer_init(struct oprofile_operations * ops);
+extern void op_nmi_exit(void);
 extern void x86_backtrace(struct pt_regs * const regs, unsigned int depth);
 
 
@@ -28,11 +28,11 @@ int __init oprofile_arch_init(struct oprofile_operations * ops)
        ret = -ENODEV;
 
 #ifdef CONFIG_X86_LOCAL_APIC
-       ret = nmi_init(ops);
+       ret = op_nmi_init(ops);
 #endif
 #ifdef CONFIG_X86_IO_APIC
        if (ret < 0)
-               ret = nmi_timer_init(ops);
+               ret = op_nmi_timer_init(ops);
 #endif
        ops->backtrace = x86_backtrace;
 
@@ -43,6 +43,6 @@ int __init oprofile_arch_init(struct oprofile_operations * ops)
 void oprofile_arch_exit(void)
 {
 #ifdef CONFIG_X86_LOCAL_APIC
-       nmi_exit();
+       op_nmi_exit();
 #endif
 }
index 255e4702d185e363558c5064751ae7be9f9c20c0..0493e8b8ec49266618b155fb3490f02854dc70db 100644 (file)
@@ -355,7 +355,7 @@ static int __init ppro_init(char ** cpu_type)
 /* in order to get driverfs right */
 static int using_nmi;
 
-int __init nmi_init(struct oprofile_operations *ops)
+int __init op_nmi_init(struct oprofile_operations *ops)
 {
        __u8 vendor = boot_cpu_data.x86_vendor;
        __u8 family = boot_cpu_data.x86;
@@ -420,7 +420,7 @@ int __init nmi_init(struct oprofile_operations *ops)
 }
 
 
-void nmi_exit(void)
+void op_nmi_exit(void)
 {
        if (using_nmi)
                exit_driverfs();
index c58d0c14f2744a0ae524f07d3f73089d9486e049..ad93cdd55d63bf20f20b8bf4ad7ab0329910017b 100644 (file)
@@ -40,7 +40,7 @@ static void timer_stop(void)
 }
 
 
-int __init nmi_timer_init(struct oprofile_operations * ops)
+int __init op_nmi_timer_init(struct oprofile_operations * ops)
 {
        extern int nmi_active;
 
index 1bff03f36965aee0ae2dcebc134da9648a752566..ead6122dd06da24b956e689f61f620535689b5e1 100644 (file)
@@ -5,7 +5,7 @@ obj-$(CONFIG_PCI_MMCONFIG)      += mmconfig.o
 obj-$(CONFIG_PCI_DIRECT)       += direct.o
 
 pci-y                          := fixup.o
-pci-$(CONFIG_ACPI_PCI)         += acpi.o
+pci-$(CONFIG_ACPI)             += acpi.o
 pci-y                          += legacy.o irq.o
 
 pci-$(CONFIG_X86_VISWS)                := visws.o fixup.o
index 86348b68fda1a0e5621e48c1b3edb15f173f5cc0..326a2edc38349ca19f278521ab7068563a8c2c13 100644 (file)
@@ -1075,7 +1075,7 @@ static void pirq_penalize_isa_irq(int irq, int active)
 
 void pcibios_penalize_isa_irq(int irq, int active)
 {
-#ifdef CONFIG_ACPI_PCI
+#ifdef CONFIG_ACPI
        if (!acpi_noirq)
                acpi_penalize_isa_irq(irq, active);
        else
index 3deced637f07c814706698e6e90a10088aebe889..00151a8320d8f1732e147d64698e28e747c45833 100644 (file)
@@ -60,6 +60,7 @@ choice
 
 config IA64_GENERIC
        bool "generic"
+       select ACPI
        select NUMA
        select ACPI_NUMA
        select VIRTUAL_MEM_MAP
@@ -340,6 +341,7 @@ config IA64_PALINFO
 
 config ACPI_DEALLOCATE_IRQ
        bool
+       depends on ACPI
        depends on IOSAPIC && EXPERIMENTAL
        default y
 
@@ -351,38 +353,10 @@ endmenu
 
 menu "Power management and ACPI"
 
-config PM
-       bool "Power Management support"
-       depends on !IA64_HP_SIM
-       default y
-       help
-         "Power Management" means that parts of your computer are shut
-         off or put into a power conserving "sleep" mode if they are not
-         being used.  There are two competing standards for doing this: APM
-         and ACPI.  If you want to use either one, say Y here and then also
-         to the requisite support below.
-
-         Power Management is most important for battery powered laptop
-         computers; if you have a laptop, check out the Linux Laptop home
-         page on the WWW at <http://www.linux-on-laptops.com/> and the
-         Battery Powered Linux mini-HOWTO, available from
-         <http://www.tldp.org/docs.html#howto>.
-
-         Note that, even if you say N here, Linux on the x86 architecture
-         will issue the hlt instruction if nothing is to be done, thereby
-         sending the processor to sleep and saving power.
-
-config ACPI
-       bool
-       depends on !IA64_HP_SIM
-       default y
-
-if !IA64_HP_SIM
+source "kernel/power/Kconfig"
 
 source "drivers/acpi/Kconfig"
 
-endif
-
 if PM
 
 source "arch/ia64/kernel/cpufreq/Kconfig"
@@ -434,6 +408,11 @@ config GENERIC_IRQ_PROBE
        bool
        default y
 
+config GENERIC_PENDING_IRQ
+       bool
+       depends on GENERIC_HARDIRQS && SMP
+       default y
+
 source "arch/ia64/hp/sim/Kconfig"
 
 source "arch/ia64/oprofile/Kconfig"
index b95fcf86ea00cf78f79a06847608f99fef54afbb..3b65cbb31b1dd491c0b24c4ca173c23722931e6d 100644 (file)
@@ -107,18 +107,12 @@ CONFIG_ACPI=y
 #
 # ACPI (Advanced Configuration and Power Interface) Support
 #
-CONFIG_ACPI_BOOT=y
-CONFIG_ACPI_INTERPRETER=y
 CONFIG_ACPI_BUTTON=m
-CONFIG_ACPI_VIDEO=m
 CONFIG_ACPI_FAN=m
 CONFIG_ACPI_PROCESSOR=m
 CONFIG_ACPI_THERMAL=m
-CONFIG_ACPI_BLACKLIST_YEAR=0
 # CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_BUS=y
 CONFIG_ACPI_POWER=y
-CONFIG_ACPI_PCI=y
 CONFIG_ACPI_SYSTEM=y
 
 #
index dccf35c60b941845351262e42e87361993760de3..1ca6e6e11b42f51c488bbf448f49df4eaf7e03dd 100644 (file)
@@ -130,19 +130,12 @@ CONFIG_ACPI=y
 #
 # ACPI (Advanced Configuration and Power Interface) Support
 #
-CONFIG_ACPI_BOOT=y
-CONFIG_ACPI_INTERPRETER=y
 # CONFIG_ACPI_BUTTON is not set
-CONFIG_ACPI_VIDEO=m
-CONFIG_ACPI_HOTKEY=m
 # CONFIG_ACPI_FAN is not set
 # CONFIG_ACPI_PROCESSOR is not set
 CONFIG_ACPI_NUMA=y
-CONFIG_ACPI_BLACKLIST_YEAR=0
 # CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_BUS=y
 CONFIG_ACPI_POWER=y
-CONFIG_ACPI_PCI=y
 CONFIG_ACPI_SYSTEM=y
 # CONFIG_ACPI_CONTAINER is not set
 
index c853cfcd2d1123d6ef94271c0d8fab153e3c7c7a..3ec94a12eac0f9a70b3c9fa55f355ef5333aaf70 100644 (file)
@@ -128,20 +128,13 @@ CONFIG_ACPI=y
 #
 # ACPI (Advanced Configuration and Power Interface) Support
 #
-CONFIG_ACPI_BOOT=y
-CONFIG_ACPI_INTERPRETER=y
 CONFIG_ACPI_BUTTON=m
-# CONFIG_ACPI_VIDEO is not set
-# CONFIG_ACPI_HOTKEY is not set
 CONFIG_ACPI_FAN=m
 CONFIG_ACPI_PROCESSOR=m
 # CONFIG_ACPI_HOTPLUG_CPU is not set
 CONFIG_ACPI_THERMAL=m
-CONFIG_ACPI_BLACKLIST_YEAR=0
 # CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_BUS=y
 CONFIG_ACPI_POWER=y
-CONFIG_ACPI_PCI=y
 CONFIG_ACPI_SYSTEM=y
 # CONFIG_ACPI_CONTAINER is not set
 
index 88e8867fa8e82f65092a9e5e99e0f437a3f43191..d4cf73d124bce959ebb5e346a038de342bf56efa 100644 (file)
@@ -128,19 +128,12 @@ CONFIG_ACPI=y
 #
 # ACPI (Advanced Configuration and Power Interface) Support
 #
-CONFIG_ACPI_BOOT=y
-CONFIG_ACPI_INTERPRETER=y
 CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_VIDEO=m
-CONFIG_ACPI_HOTKEY=m
 CONFIG_ACPI_FAN=y
 CONFIG_ACPI_PROCESSOR=y
 CONFIG_ACPI_THERMAL=y
-CONFIG_ACPI_BLACKLIST_YEAR=0
 # CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_BUS=y
 CONFIG_ACPI_POWER=y
-CONFIG_ACPI_PCI=y
 CONFIG_ACPI_SYSTEM=y
 # CONFIG_ACPI_CONTAINER is not set
 
index 8444add763800905e441cd8feb7c2fea1b79770d..b6ec8d32c346ab8310574084a335ced4044f601f 100644 (file)
@@ -118,20 +118,14 @@ CONFIG_ACPI=y
 #
 # ACPI (Advanced Configuration and Power Interface) Support
 #
-CONFIG_ACPI_BOOT=y
-CONFIG_ACPI_INTERPRETER=y
 CONFIG_ACPI_BUTTON=m
-CONFIG_ACPI_VIDEO=m
 CONFIG_ACPI_FAN=m
 CONFIG_ACPI_PROCESSOR=m
 CONFIG_ACPI_HOTPLUG_CPU=y
 CONFIG_ACPI_THERMAL=m
 CONFIG_ACPI_NUMA=y
-CONFIG_ACPI_BLACKLIST_YEAR=0
 # CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_BUS=y
 CONFIG_ACPI_POWER=y
-CONFIG_ACPI_PCI=y
 CONFIG_ACPI_SYSTEM=y
 CONFIG_ACPI_CONTAINER=m
 
index 7dcb8582ae0d6c0b5cc8384485034585899b7a57..b42ec37be51c317911e1037d85718a9b95fdc045 100644 (file)
@@ -130,7 +130,7 @@ static void rs_stop(struct tty_struct *tty)
 
 static void rs_start(struct tty_struct *tty)
 {
-#if SIMSERIAL_DEBUG
+#ifdef SIMSERIAL_DEBUG
        printk("rs_start: tty->stopped=%d tty->hw_stopped=%d tty->flow_stopped=%d\n",
                tty->stopped, tty->hw_stopped, tty->flow_stopped);
 #endif
index 829a6d80711c13827ecd5fe74d19f0ce4732a1dc..0708edb06cc4da8190f76eb4e16e1bafcb2e6833 100644 (file)
@@ -215,7 +215,7 @@ ia32_syscall_table:
        data8 sys32_fork
        data8 sys_read
        data8 sys_write
-       data8 sys32_open          /* 5 */
+       data8 compat_sys_open     /* 5 */
        data8 sys_close
        data8 sys32_waitpid
        data8 sys_creat
index c1e20d65dd6cb4688391f928f43445aea644b66b..e29a8a55486a5e35fdc8eac3a2bb0acefc5cb062 100644 (file)
@@ -2359,37 +2359,6 @@ sys32_brk (unsigned int brk)
        return ret;
 }
 
-/*
- * Exactly like fs/open.c:sys_open(), except that it doesn't set the O_LARGEFILE flag.
- */
-asmlinkage long
-sys32_open (const char __user * filename, int flags, int mode)
-{
-       char * tmp;
-       int fd, error;
-
-       tmp = getname(filename);
-       fd = PTR_ERR(tmp);
-       if (!IS_ERR(tmp)) {
-               fd = get_unused_fd();
-               if (fd >= 0) {
-                       struct file *f = filp_open(tmp, flags, mode);
-                       error = PTR_ERR(f);
-                       if (IS_ERR(f))
-                               goto out_error;
-                       fd_install(fd, f);
-               }
-out:
-               putname(tmp);
-       }
-       return fd;
-
-out_error:
-       put_unused_fd(fd);
-       fd = error;
-       goto out;
-}
-
 /* Structure for ia32 emulation on ia64 */
 struct epoll_event32
 {
index b242594be55b46716d0ddf0a08e01dab60df14dd..307514f7a2826207fc5e8da881f64c61c7f8a06c 100644 (file)
@@ -16,7 +16,7 @@ obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += acpi-ext.o
 obj-$(CONFIG_IA64_PALINFO)     += palinfo.o
 obj-$(CONFIG_IOSAPIC)          += iosapic.o
 obj-$(CONFIG_MODULES)          += module.o
-obj-$(CONFIG_SMP)              += smp.o smpboot.o domain.o
+obj-$(CONFIG_SMP)              += smp.o smpboot.o
 obj-$(CONFIG_NUMA)             += numa.o
 obj-$(CONFIG_PERFMON)          += perfmon_default_smpl.o
 obj-$(CONFIG_IA64_CYCLONE)     += cyclone.o
index 2623df5e26330917da670c402280a463ed0bbb75..13a5b3b49bf869f0fac90186151f00a5296c34d2 100644 (file)
 #include <asm/acpi-ext.h>
 
 struct acpi_vendor_descriptor {
-       u8                              guid_id;
-       efi_guid_t                      guid;
+       u8 guid_id;
+       efi_guid_t guid;
 };
 
 struct acpi_vendor_info {
-       struct acpi_vendor_descriptor   *descriptor;
-       u8                              *data;
-       u32                             length;
+       struct acpi_vendor_descriptor *descriptor;
+       u8 *data;
+       u32 length;
 };
 
 acpi_status
 acpi_vendor_resource_match(struct acpi_resource *resource, void *context)
 {
-       struct acpi_vendor_info *info = (struct acpi_vendor_info *) context;
+       struct acpi_vendor_info *info = (struct acpi_vendor_info *)context;
        struct acpi_resource_vendor *vendor;
        struct acpi_vendor_descriptor *descriptor;
        u32 length;
@@ -38,8 +38,8 @@ acpi_vendor_resource_match(struct acpi_resource *resource, void *context)
        if (resource->id != ACPI_RSTYPE_VENDOR)
                return AE_OK;
 
-       vendor = (struct acpi_resource_vendor *) &resource->data;
-       descriptor = (struct acpi_vendor_descriptor *) vendor->reserved;
+       vendor = (struct acpi_resource_vendor *)&resource->data;
+       descriptor = (struct acpi_vendor_descriptor *)vendor->reserved;
        if (vendor->length <= sizeof(*info->descriptor) ||
            descriptor->guid_id != info->descriptor->guid_id ||
            efi_guidcmp(descriptor->guid, info->descriptor->guid))
@@ -50,21 +50,24 @@ acpi_vendor_resource_match(struct acpi_resource *resource, void *context)
        if (!info->data)
                return AE_NO_MEMORY;
 
-       memcpy(info->data, vendor->reserved + sizeof(struct acpi_vendor_descriptor), length);
+       memcpy(info->data,
+              vendor->reserved + sizeof(struct acpi_vendor_descriptor),
+              length);
        info->length = length;
        return AE_CTRL_TERMINATE;
 }
 
 acpi_status
-acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor *id,
-               u8 **data, u32 *length)
+acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor * id,
+                         u8 ** data, u32 * length)
 {
        struct acpi_vendor_info info;
 
        info.descriptor = id;
        info.data = NULL;
 
-       acpi_walk_resources(obj, METHOD_NAME__CRS, acpi_vendor_resource_match, &info);
+       acpi_walk_resources(obj, METHOD_NAME__CRS, acpi_vendor_resource_match,
+                           &info);
        if (!info.data)
                return AE_NOT_FOUND;
 
@@ -75,17 +78,19 @@ acpi_find_vendor_resource(acpi_handle obj, struct acpi_vendor_descriptor *id,
 
 struct acpi_vendor_descriptor hp_ccsr_descriptor = {
        .guid_id = 2,
-       .guid    = EFI_GUID(0x69e9adf9, 0x924f, 0xab5f, 0xf6, 0x4a, 0x24, 0xd2, 0x01, 0x37, 0x0e, 0xad)
+       .guid =
+           EFI_GUID(0x69e9adf9, 0x924f, 0xab5f, 0xf6, 0x4a, 0x24, 0xd2, 0x01,
+                    0x37, 0x0e, 0xad)
 };
 
-acpi_status
-hp_acpi_csr_space(acpi_handle obj, u64 *csr_base, u64 *csr_length)
+acpi_status hp_acpi_csr_space(acpi_handle obj, u64 * csr_base, u64 * csr_length)
 {
        acpi_status status;
        u8 *data;
        u32 length;
 
-       status = acpi_find_vendor_resource(obj, &hp_ccsr_descriptor, &data, &length);
+       status =
+           acpi_find_vendor_resource(obj, &hp_ccsr_descriptor, &data, &length);
 
        if (ACPI_FAILURE(status) || length != 16)
                return AE_NOT_FOUND;
index 9609f243e5d05d2591393a66e1a542cb6058ecbc..318787c84ac0eda2ec0ae05a7dd2115c5d080f12 100644 (file)
@@ -74,12 +74,11 @@ unsigned int acpi_cpei_override;
 unsigned int acpi_cpei_phys_cpuid;
 
 #define MAX_SAPICS 256
-u16 ia64_acpiid_to_sapicid[MAX_SAPICS] =
-       { [0 ... MAX_SAPICS - 1] = -1 };
+u16 ia64_acpiid_to_sapicid[MAX_SAPICS] = {[0 ... MAX_SAPICS - 1] = -1 };
+
 EXPORT_SYMBOL(ia64_acpiid_to_sapicid);
 
-const char *
-acpi_get_sysname (void)
+const char *acpi_get_sysname(void)
 {
 #ifdef CONFIG_IA64_GENERIC
        unsigned long rsdp_phys;
@@ -89,27 +88,29 @@ acpi_get_sysname (void)
 
        rsdp_phys = acpi_find_rsdp();
        if (!rsdp_phys) {
-               printk(KERN_ERR "ACPI 2.0 RSDP not found, default to \"dig\"\n");
+               printk(KERN_ERR
+                      "ACPI 2.0 RSDP not found, default to \"dig\"\n");
                return "dig";
        }
 
-       rsdp = (struct acpi20_table_rsdp *) __va(rsdp_phys);
+       rsdp = (struct acpi20_table_rsdp *)__va(rsdp_phys);
        if (strncmp(rsdp->signature, RSDP_SIG, sizeof(RSDP_SIG) - 1)) {
-               printk(KERN_ERR "ACPI 2.0 RSDP signature incorrect, default to \"dig\"\n");
+               printk(KERN_ERR
+                      "ACPI 2.0 RSDP signature incorrect, default to \"dig\"\n");
                return "dig";
        }
 
-       xsdt = (struct acpi_table_xsdt *) __va(rsdp->xsdt_address);
+       xsdt = (struct acpi_table_xsdt *)__va(rsdp->xsdt_address);
        hdr = &xsdt->header;
        if (strncmp(hdr->signature, XSDT_SIG, sizeof(XSDT_SIG) - 1)) {
-               printk(KERN_ERR "ACPI 2.0 XSDT signature incorrect, default to \"dig\"\n");
+               printk(KERN_ERR
+                      "ACPI 2.0 XSDT signature incorrect, default to \"dig\"\n");
                return "dig";
        }
 
        if (!strcmp(hdr->oem_id, "HP")) {
                return "hpzx1";
-       }
-       else if (!strcmp(hdr->oem_id, "SGI")) {
+       } else if (!strcmp(hdr->oem_id, "SGI")) {
                return "sn2";
        }
 
@@ -131,7 +132,7 @@ acpi_get_sysname (void)
 #endif
 }
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 
 #define ACPI_MAX_PLATFORM_INTERRUPTS   256
 
@@ -146,8 +147,7 @@ enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_IOSAPIC;
  * Interrupt routing API for device drivers.  Provides interrupt vector for
  * a generic platform event.  Currently only CPEI is implemented.
  */
-int
-acpi_request_vector (u32 int_type)
+int acpi_request_vector(u32 int_type)
 {
        int vector = -1;
 
@@ -155,12 +155,12 @@ acpi_request_vector (u32 int_type)
                /* corrected platform error interrupt */
                vector = platform_intr_list[int_type];
        } else
-               printk(KERN_ERR "acpi_request_vector(): invalid interrupt type\n");
+               printk(KERN_ERR
+                      "acpi_request_vector(): invalid interrupt type\n");
        return vector;
 }
 
-char *
-__acpi_map_table (unsigned long phys_addr, unsigned long size)
+char *__acpi_map_table(unsigned long phys_addr, unsigned long size)
 {
        return __va(phys_addr);
 }
@@ -169,19 +169,18 @@ __acpi_map_table (unsigned long phys_addr, unsigned long size)
                             Boot-time Table Parsing
    -------------------------------------------------------------------------- */
 
-static int                     total_cpus __initdata;
-static int                     available_cpus __initdata;
-struct acpi_table_madt *       acpi_madt __initdata;
-static u8                      has_8259;
-
+static int total_cpus __initdata;
+static int available_cpus __initdata;
+struct acpi_table_madt *acpi_madt __initdata;
+static u8 has_8259;
 
 static int __init
-acpi_parse_lapic_addr_ovr (
-       acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header,
+                         const unsigned long end)
 {
        struct acpi_table_lapic_addr_ovr *lapic;
 
-       lapic = (struct acpi_table_lapic_addr_ovr *) header;
+       lapic = (struct acpi_table_lapic_addr_ovr *)header;
 
        if (BAD_MADT_ENTRY(lapic, end))
                return -EINVAL;
@@ -193,22 +192,23 @@ acpi_parse_lapic_addr_ovr (
        return 0;
 }
 
-
 static int __init
-acpi_parse_lsapic (acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_lsapic(acpi_table_entry_header * header, const unsigned long end)
 {
        struct acpi_table_lsapic *lsapic;
 
-       lsapic = (struct acpi_table_lsapic *) header;
+       lsapic = (struct acpi_table_lsapic *)header;
 
        if (BAD_MADT_ENTRY(lsapic, end))
                return -EINVAL;
 
        if (lsapic->flags.enabled) {
 #ifdef CONFIG_SMP
-               smp_boot_data.cpu_phys_id[available_cpus] = (lsapic->id << 8) | lsapic->eid;
+               smp_boot_data.cpu_phys_id[available_cpus] =
+                   (lsapic->id << 8) | lsapic->eid;
 #endif
-               ia64_acpiid_to_sapicid[lsapic->acpi_id] = (lsapic->id << 8) | lsapic->eid;
+               ia64_acpiid_to_sapicid[lsapic->acpi_id] =
+                   (lsapic->id << 8) | lsapic->eid;
                ++available_cpus;
        }
 
@@ -216,13 +216,12 @@ acpi_parse_lsapic (acpi_table_entry_header *header, const unsigned long end)
        return 0;
 }
 
-
 static int __init
-acpi_parse_lapic_nmi (acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end)
 {
        struct acpi_table_lapic_nmi *lacpi_nmi;
 
-       lacpi_nmi = (struct acpi_table_lapic_nmi*) header;
+       lacpi_nmi = (struct acpi_table_lapic_nmi *)header;
 
        if (BAD_MADT_ENTRY(lacpi_nmi, end))
                return -EINVAL;
@@ -231,13 +230,12 @@ acpi_parse_lapic_nmi (acpi_table_entry_header *header, const unsigned long end)
        return 0;
 }
 
-
 static int __init
-acpi_parse_iosapic (acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_iosapic(acpi_table_entry_header * header, const unsigned long end)
 {
        struct acpi_table_iosapic *iosapic;
 
-       iosapic = (struct acpi_table_iosapic *) header;
+       iosapic = (struct acpi_table_iosapic *)header;
 
        if (BAD_MADT_ENTRY(iosapic, end))
                return -EINVAL;
@@ -245,15 +243,14 @@ acpi_parse_iosapic (acpi_table_entry_header *header, const unsigned long end)
        return iosapic_init(iosapic->address, iosapic->global_irq_base);
 }
 
-
 static int __init
-acpi_parse_plat_int_src (
-       acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_plat_int_src(acpi_table_entry_header * header,
+                       const unsigned long end)
 {
        struct acpi_table_plat_int_src *plintsrc;
        int vector;
 
-       plintsrc = (struct acpi_table_plat_int_src *) header;
+       plintsrc = (struct acpi_table_plat_int_src *)header;
 
        if (BAD_MADT_ENTRY(plintsrc, end))
                return -EINVAL;
@@ -267,8 +264,12 @@ acpi_parse_plat_int_src (
                                                plintsrc->iosapic_vector,
                                                plintsrc->eid,
                                                plintsrc->id,
-                                               (plintsrc->flags.polarity == 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW,
-                                               (plintsrc->flags.trigger == 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL);
+                                               (plintsrc->flags.polarity ==
+                                                1) ? IOSAPIC_POL_HIGH :
+                                               IOSAPIC_POL_LOW,
+                                               (plintsrc->flags.trigger ==
+                                                1) ? IOSAPIC_EDGE :
+                                               IOSAPIC_LEVEL);
 
        platform_intr_list[plintsrc->type] = vector;
        if (acpi_madt_rev > 1) {
@@ -283,7 +284,6 @@ acpi_parse_plat_int_src (
        return 0;
 }
 
-
 unsigned int can_cpei_retarget(void)
 {
        extern int cpe_vector;
@@ -322,29 +322,30 @@ unsigned int get_cpei_target_cpu(void)
 }
 
 static int __init
-acpi_parse_int_src_ovr (
-       acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_int_src_ovr(acpi_table_entry_header * header,
+                      const unsigned long end)
 {
        struct acpi_table_int_src_ovr *p;
 
-       p = (struct acpi_table_int_src_ovr *) header;
+       p = (struct acpi_table_int_src_ovr *)header;
 
        if (BAD_MADT_ENTRY(p, end))
                return -EINVAL;
 
        iosapic_override_isa_irq(p->bus_irq, p->global_irq,
-                                (p->flags.polarity == 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW,
-                                (p->flags.trigger == 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL);
+                                (p->flags.polarity ==
+                                 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW,
+                                (p->flags.trigger ==
+                                 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL);
        return 0;
 }
 
-
 static int __init
-acpi_parse_nmi_src (acpi_table_entry_header *header, const unsigned long end)
+acpi_parse_nmi_src(acpi_table_entry_header * header, const unsigned long end)
 {
        struct acpi_table_nmi_src *nmi_src;
 
-       nmi_src = (struct acpi_table_nmi_src*) header;
+       nmi_src = (struct acpi_table_nmi_src *)header;
 
        if (BAD_MADT_ENTRY(nmi_src, end))
                return -EINVAL;
@@ -353,11 +354,9 @@ acpi_parse_nmi_src (acpi_table_entry_header *header, const unsigned long end)
        return 0;
 }
 
-static void __init
-acpi_madt_oem_check (char *oem_id, char *oem_table_id)
+static void __init acpi_madt_oem_check(char *oem_id, char *oem_table_id)
 {
-       if (!strncmp(oem_id, "IBM", 3) &&
-           (!strncmp(oem_table_id, "SERMOW", 6))) {
+       if (!strncmp(oem_id, "IBM", 3) && (!strncmp(oem_table_id, "SERMOW", 6))) {
 
                /*
                 * Unfortunately ITC_DRIFT is not yet part of the
@@ -370,19 +369,18 @@ acpi_madt_oem_check (char *oem_id, char *oem_table_id)
        }
 }
 
-static int __init
-acpi_parse_madt (unsigned long phys_addr, unsigned long size)
+static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size)
 {
        if (!phys_addr || !size)
                return -EINVAL;
 
-       acpi_madt = (struct acpi_table_madt *) __va(phys_addr);
+       acpi_madt = (struct acpi_table_madt *)__va(phys_addr);
 
        acpi_madt_rev = acpi_madt->header.revision;
 
        /* remember the value for reference after free_initmem() */
 #ifdef CONFIG_ITANIUM
-       has_8259 = 1; /* Firmware on old Itanium systems is broken */
+       has_8259 = 1;           /* Firmware on old Itanium systems is broken */
 #else
        has_8259 = acpi_madt->flags.pcat_compat;
 #endif
@@ -396,19 +394,18 @@ acpi_parse_madt (unsigned long phys_addr, unsigned long size)
        printk(KERN_INFO PREFIX "Local APIC address %p\n", ipi_base_addr);
 
        acpi_madt_oem_check(acpi_madt->header.oem_id,
-               acpi_madt->header.oem_table_id);
+                           acpi_madt->header.oem_table_id);
 
        return 0;
 }
 
-
 #ifdef CONFIG_ACPI_NUMA
 
 #undef SLIT_DEBUG
 
 #define PXM_FLAG_LEN ((MAX_PXM_DOMAINS + 1)/32)
 
-static int __initdata srat_num_cpus;                   /* number of cpus */
+static int __initdata srat_num_cpus;   /* number of cpus */
 static u32 __devinitdata pxm_flag[PXM_FLAG_LEN];
 #define pxm_bit_set(bit)       (set_bit(bit,(void *)pxm_flag))
 #define pxm_bit_test(bit)      (test_bit(bit,(void *)pxm_flag))
@@ -421,15 +418,15 @@ static struct acpi_table_slit __initdata *slit_table;
  * ACPI 2.0 SLIT (System Locality Information Table)
  * http://devresource.hp.com/devresource/Docs/TechPapers/IA64/slit.pdf
  */
-void __init
-acpi_numa_slit_init (struct acpi_table_slit *slit)
+void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
 {
        u32 len;
 
        len = sizeof(struct acpi_table_header) + 8
-               + slit->localities * slit->localities;
+           + slit->localities * slit->localities;
        if (slit->header.length != len) {
-               printk(KERN_ERR "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n",
+               printk(KERN_ERR
+                      "ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n",
                       len, slit->header.length);
                memset(numa_slit, 10, sizeof(numa_slit));
                return;
@@ -438,19 +435,20 @@ acpi_numa_slit_init (struct acpi_table_slit *slit)
 }
 
 void __init
-acpi_numa_processor_affinity_init (struct acpi_table_processor_affinity *pa)
+acpi_numa_processor_affinity_init(struct acpi_table_processor_affinity *pa)
 {
        /* record this node in proximity bitmap */
        pxm_bit_set(pa->proximity_domain);
 
-       node_cpuid[srat_num_cpus].phys_id = (pa->apic_id << 8) | (pa->lsapic_eid);
+       node_cpuid[srat_num_cpus].phys_id =
+           (pa->apic_id << 8) | (pa->lsapic_eid);
        /* nid should be overridden as logical node id later */
        node_cpuid[srat_num_cpus].nid = pa->proximity_domain;
        srat_num_cpus++;
 }
 
 void __init
-acpi_numa_memory_affinity_init (struct acpi_table_memory_affinity *ma)
+acpi_numa_memory_affinity_init(struct acpi_table_memory_affinity *ma)
 {
        unsigned long paddr, size;
        u8 pxm;
@@ -487,8 +485,7 @@ acpi_numa_memory_affinity_init (struct acpi_table_memory_affinity *ma)
        num_node_memblks++;
 }
 
-void __init
-acpi_numa_arch_fixup (void)
+void __init acpi_numa_arch_fixup(void)
 {
        int i, j, node_from, node_to;
 
@@ -534,21 +531,24 @@ acpi_numa_arch_fixup (void)
        for (i = 0; i < srat_num_cpus; i++)
                node_cpuid[i].nid = pxm_to_nid_map[node_cpuid[i].nid];
 
-       printk(KERN_INFO "Number of logical nodes in system = %d\n", num_online_nodes());
-       printk(KERN_INFO "Number of memory chunks in system = %d\n", num_node_memblks);
+       printk(KERN_INFO "Number of logical nodes in system = %d\n",
+              num_online_nodes());
+       printk(KERN_INFO "Number of memory chunks in system = %d\n",
+              num_node_memblks);
 
-       if (!slit_table) return;
+       if (!slit_table)
+               return;
        memset(numa_slit, -1, sizeof(numa_slit));
-       for (i=0; i<slit_table->localities; i++) {
+       for (i = 0; i < slit_table->localities; i++) {
                if (!pxm_bit_test(i))
                        continue;
                node_from = pxm_to_nid_map[i];
-               for (j=0; j<slit_table->localities; j++) {
+               for (j = 0; j < slit_table->localities; j++) {
                        if (!pxm_bit_test(j))
                                continue;
                        node_to = pxm_to_nid_map[j];
                        node_distance(node_from, node_to) =
-                               slit_table->entry[i*slit_table->localities + j];
+                           slit_table->entry[i * slit_table->localities + j];
                }
        }
 
@@ -556,36 +556,43 @@ acpi_numa_arch_fixup (void)
        printk("ACPI 2.0 SLIT locality table:\n");
        for_each_online_node(i) {
                for_each_online_node(j)
-                       printk("%03d ", node_distance(i,j));
+                   printk("%03d ", node_distance(i, j));
                printk("\n");
        }
 #endif
 }
-#endif /* CONFIG_ACPI_NUMA */
+#endif                         /* CONFIG_ACPI_NUMA */
 
-unsigned int
-acpi_register_gsi (u32 gsi, int edge_level, int active_high_low)
+/*
+ * success: return IRQ number (>=0)
+ * failure: return < 0
+ */
+int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
 {
        if (has_8259 && gsi < 16)
                return isa_irq_to_vector(gsi);
 
        return iosapic_register_intr(gsi,
-                       (active_high_low == ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW,
-                       (edge_level == ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : IOSAPIC_LEVEL);
+                                    (active_high_low ==
+                                     ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH :
+                                    IOSAPIC_POL_LOW,
+                                    (edge_level ==
+                                     ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE :
+                                    IOSAPIC_LEVEL);
 }
+
 EXPORT_SYMBOL(acpi_register_gsi);
 
 #ifdef CONFIG_ACPI_DEALLOCATE_IRQ
-void
-acpi_unregister_gsi (u32 gsi)
+void acpi_unregister_gsi(u32 gsi)
 {
        iosapic_unregister_intr(gsi);
 }
+
 EXPORT_SYMBOL(acpi_unregister_gsi);
-#endif /* CONFIG_ACPI_DEALLOCATE_IRQ */
+#endif                         /* CONFIG_ACPI_DEALLOCATE_IRQ */
 
-static int __init
-acpi_parse_fadt (unsigned long phys_addr, unsigned long size)
+static int __init acpi_parse_fadt(unsigned long phys_addr, unsigned long size)
 {
        struct acpi_table_header *fadt_header;
        struct fadt_descriptor_rev2 *fadt;
@@ -593,11 +600,11 @@ acpi_parse_fadt (unsigned long phys_addr, unsigned long size)
        if (!phys_addr || !size)
                return -EINVAL;
 
-       fadt_header = (struct acpi_table_header *) __va(phys_addr);
+       fadt_header = (struct acpi_table_header *)__va(phys_addr);
        if (fadt_header->revision != 3)
-               return -ENODEV;         /* Only deal with ACPI 2.0 FADT */
+               return -ENODEV; /* Only deal with ACPI 2.0 FADT */
 
-       fadt = (struct fadt_descriptor_rev2 *) fadt_header;
+       fadt = (struct fadt_descriptor_rev2 *)fadt_header;
 
        if (!(fadt->iapc_boot_arch & BAF_8042_KEYBOARD_CONTROLLER))
                acpi_kbd_controller_present = 0;
@@ -609,22 +616,19 @@ acpi_parse_fadt (unsigned long phys_addr, unsigned long size)
        return 0;
 }
 
-
-unsigned long __init
-acpi_find_rsdp (void)
+unsigned long __init acpi_find_rsdp(void)
 {
        unsigned long rsdp_phys = 0;
 
        if (efi.acpi20)
                rsdp_phys = __pa(efi.acpi20);
        else if (efi.acpi)
-               printk(KERN_WARNING PREFIX "v1.0/r0.71 tables no longer supported\n");
+               printk(KERN_WARNING PREFIX
+                      "v1.0/r0.71 tables no longer supported\n");
        return rsdp_phys;
 }
 
-
-int __init
-acpi_boot_init (void)
+int __init acpi_boot_init(void)
 {
 
        /*
@@ -642,31 +646,43 @@ acpi_boot_init (void)
 
        /* Local APIC */
 
-       if (acpi_table_parse_madt(ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0) < 0)
-               printk(KERN_ERR PREFIX "Error parsing LAPIC address override entry\n");
+       if (acpi_table_parse_madt
+           (ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0) < 0)
+               printk(KERN_ERR PREFIX
+                      "Error parsing LAPIC address override entry\n");
 
-       if (acpi_table_parse_madt(ACPI_MADT_LSAPIC, acpi_parse_lsapic, NR_CPUS) < 1)
-               printk(KERN_ERR PREFIX "Error parsing MADT - no LAPIC entries\n");
+       if (acpi_table_parse_madt(ACPI_MADT_LSAPIC, acpi_parse_lsapic, NR_CPUS)
+           < 1)
+               printk(KERN_ERR PREFIX
+                      "Error parsing MADT - no LAPIC entries\n");
 
-       if (acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0) < 0)
+       if (acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0)
+           < 0)
                printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n");
 
        /* I/O APIC */
 
-       if (acpi_table_parse_madt(ACPI_MADT_IOSAPIC, acpi_parse_iosapic, NR_IOSAPICS) < 1)
-               printk(KERN_ERR PREFIX "Error parsing MADT - no IOSAPIC entries\n");
+       if (acpi_table_parse_madt
+           (ACPI_MADT_IOSAPIC, acpi_parse_iosapic, NR_IOSAPICS) < 1)
+               printk(KERN_ERR PREFIX
+                      "Error parsing MADT - no IOSAPIC entries\n");
 
        /* System-Level Interrupt Routing */
 
-       if (acpi_table_parse_madt(ACPI_MADT_PLAT_INT_SRC, acpi_parse_plat_int_src, ACPI_MAX_PLATFORM_INTERRUPTS) < 0)
-               printk(KERN_ERR PREFIX "Error parsing platform interrupt source entry\n");
+       if (acpi_table_parse_madt
+           (ACPI_MADT_PLAT_INT_SRC, acpi_parse_plat_int_src,
+            ACPI_MAX_PLATFORM_INTERRUPTS) < 0)
+               printk(KERN_ERR PREFIX
+                      "Error parsing platform interrupt source entry\n");
 
-       if (acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, 0) < 0)
-               printk(KERN_ERR PREFIX "Error parsing interrupt source overrides entry\n");
+       if (acpi_table_parse_madt
+           (ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, 0) < 0)
+               printk(KERN_ERR PREFIX
+                      "Error parsing interrupt source overrides entry\n");
 
        if (acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, 0) < 0)
                printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n");
-  skip_madt:
+      skip_madt:
 
        /*
         * FADT says whether a legacy keyboard controller is present.
@@ -681,8 +697,9 @@ acpi_boot_init (void)
        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_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;
 
@@ -691,8 +708,10 @@ acpi_boot_init (void)
        if (srat_num_cpus == 0) {
                int cpu, i = 1;
                for (cpu = 0; cpu < smp_boot_data.cpu_count; cpu++)
-                       if (smp_boot_data.cpu_phys_id[cpu] != hard_smp_processor_id())
-                               node_cpuid[i++].phys_id = smp_boot_data.cpu_phys_id[cpu];
+                       if (smp_boot_data.cpu_phys_id[cpu] !=
+                           hard_smp_processor_id())
+                               node_cpuid[i++].phys_id =
+                                   smp_boot_data.cpu_phys_id[cpu];
        }
 # endif
 #endif
@@ -700,12 +719,12 @@ acpi_boot_init (void)
        build_cpu_to_node_map();
 #endif
        /* Make boot-up look pretty */
-       printk(KERN_INFO "%d CPUs available, %d CPUs total\n", available_cpus, total_cpus);
+       printk(KERN_INFO "%d CPUs available, %d CPUs total\n", available_cpus,
+              total_cpus);
        return 0;
 }
 
-int
-acpi_gsi_to_irq (u32 gsi, unsigned int *irq)
+int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
 {
        int vector;
 
@@ -726,11 +745,10 @@ acpi_gsi_to_irq (u32 gsi, unsigned int *irq)
  */
 #ifdef CONFIG_ACPI_HOTPLUG_CPU
 static
-int
-acpi_map_cpu2node(acpi_handle handle, int cpu, long physid)
+int acpi_map_cpu2node(acpi_handle handle, int cpu, long physid)
 {
 #ifdef CONFIG_ACPI_NUMA
-       int                     pxm_id;
+       int pxm_id;
 
        pxm_id = acpi_get_pxm(handle);
 
@@ -738,31 +756,28 @@ acpi_map_cpu2node(acpi_handle handle, int cpu, long physid)
         * Assuming that the container driver would have set the proximity
         * domain and would have initialized pxm_to_nid_map[pxm_id] && pxm_flag
         */
-       node_cpuid[cpu].nid = (pxm_id < 0) ? 0:
-                       pxm_to_nid_map[pxm_id];
+       node_cpuid[cpu].nid = (pxm_id < 0) ? 0 : pxm_to_nid_map[pxm_id];
 
-       node_cpuid[cpu].phys_id =  physid;
+       node_cpuid[cpu].phys_id = physid;
 #endif
-       return(0);
+       return (0);
 }
 
-
-int
-acpi_map_lsapic(acpi_handle handle, int *pcpu)
+int acpi_map_lsapic(acpi_handle handle, int *pcpu)
 {
-       struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
        union acpi_object *obj;
        struct acpi_table_lsapic *lsapic;
        cpumask_t tmp_map;
        long physid;
        int cpu;
+
        if (ACPI_FAILURE(acpi_evaluate_object(handle, "_MAT", NULL, &buffer)))
                return -EINVAL;
 
-       if (!buffer.length ||  !buffer.pointer)
+       if (!buffer.length || !buffer.pointer)
                return -EINVAL;
+
        obj = buffer.pointer;
        if (obj->type != ACPI_TYPE_BUFFER ||
            obj->buffer.length < sizeof(*lsapic)) {
@@ -778,7 +793,7 @@ acpi_map_lsapic(acpi_handle handle, int *pcpu)
                return -EINVAL;
        }
 
-       physid = ((lsapic->id <<8) | (lsapic->eid));
+       physid = ((lsapic->id << 8) | (lsapic->eid));
 
        acpi_os_free(buffer.pointer);
        buffer.length = ACPI_ALLOCATE_BUFFER;
@@ -786,50 +801,49 @@ acpi_map_lsapic(acpi_handle handle, int *pcpu)
 
        cpus_complement(tmp_map, cpu_present_map);
        cpu = first_cpu(tmp_map);
-       if(cpu >= NR_CPUS)
+       if (cpu >= NR_CPUS)
                return -EINVAL;
 
        acpi_map_cpu2node(handle, cpu, physid);
 
-       cpu_set(cpu, cpu_present_map);
+       cpu_set(cpu, cpu_present_map);
        ia64_cpu_to_sapicid[cpu] = physid;
        ia64_acpiid_to_sapicid[lsapic->acpi_id] = ia64_cpu_to_sapicid[cpu];
 
        *pcpu = cpu;
-       return(0);
+       return (0);
 }
-EXPORT_SYMBOL(acpi_map_lsapic);
 
+EXPORT_SYMBOL(acpi_map_lsapic);
 
-int
-acpi_unmap_lsapic(int cpu)
+int acpi_unmap_lsapic(int cpu)
 {
        int i;
 
-       for (i=0; i<MAX_SAPICS; i++) {
-               if (ia64_acpiid_to_sapicid[i] == ia64_cpu_to_sapicid[cpu]) {
-                       ia64_acpiid_to_sapicid[i] = -1;
-                       break;
-               }
-       }
+       for (i = 0; i < MAX_SAPICS; i++) {
+               if (ia64_acpiid_to_sapicid[i] == ia64_cpu_to_sapicid[cpu]) {
+                       ia64_acpiid_to_sapicid[i] = -1;
+                       break;
+               }
+       }
        ia64_cpu_to_sapicid[cpu] = -1;
-       cpu_clear(cpu,cpu_present_map);
+       cpu_clear(cpu, cpu_present_map);
 
 #ifdef CONFIG_ACPI_NUMA
        /* NUMA specific cleanup's */
 #endif
 
-       return(0);
+       return (0);
 }
+
 EXPORT_SYMBOL(acpi_unmap_lsapic);
-#endif /* CONFIG_ACPI_HOTPLUG_CPU */
+#endif                         /* CONFIG_ACPI_HOTPLUG_CPU */
 
 #ifdef CONFIG_ACPI_NUMA
 acpi_status __devinit
-acpi_map_iosapic (acpi_handle handle, u32 depth, void *context, void **ret)
+acpi_map_iosapic(acpi_handle handle, u32 depth, void *context, void **ret)
 {
-       struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
        union acpi_object *obj;
        struct acpi_table_iosapic *iosapic;
        unsigned int gsi_base;
@@ -878,10 +892,9 @@ acpi_map_iosapic (acpi_handle handle, u32 depth, void *context, void **ret)
        map_iosapic_to_node(gsi_base, node);
        return AE_OK;
 }
-#endif /* CONFIG_NUMA */
+#endif                         /* CONFIG_NUMA */
 
-int
-acpi_register_ioapic (acpi_handle handle, u64 phys_addr, u32 gsi_base)
+int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base)
 {
        int err;
 
@@ -890,17 +903,18 @@ acpi_register_ioapic (acpi_handle handle, u64 phys_addr, u32 gsi_base)
 
 #if CONFIG_ACPI_NUMA
        acpi_map_iosapic(handle, 0, NULL, NULL);
-#endif /* CONFIG_ACPI_NUMA */
+#endif                         /* CONFIG_ACPI_NUMA */
 
        return 0;
 }
+
 EXPORT_SYMBOL(acpi_register_ioapic);
 
-int
-acpi_unregister_ioapic (acpi_handle handle, u32 gsi_base)
+int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base)
 {
        return iosapic_remove(gsi_base);
 }
+
 EXPORT_SYMBOL(acpi_unregister_ioapic);
 
-#endif /* CONFIG_ACPI_BOOT */
+#endif                         /* CONFIG_ACPI */
diff --git a/arch/ia64/kernel/domain.c b/arch/ia64/kernel/domain.c
deleted file mode 100644 (file)
index bbb8efe..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * arch/ia64/kernel/domain.c
- * Architecture specific sched-domains builder.
- *
- * Copyright (C) 2004 Jesse Barnes
- * Copyright (C) 2004 Silicon Graphics, Inc.
- */
-
-#include <linux/sched.h>
-#include <linux/percpu.h>
-#include <linux/slab.h>
-#include <linux/cpumask.h>
-#include <linux/init.h>
-#include <linux/topology.h>
-#include <linux/nodemask.h>
-
-#define SD_NODES_PER_DOMAIN 16
-
-#ifdef CONFIG_NUMA
-/**
- * find_next_best_node - find the next node to include in a sched_domain
- * @node: node whose sched_domain we're building
- * @used_nodes: nodes already in the sched_domain
- *
- * Find the next node to include in a given scheduling domain.  Simply
- * finds the closest node not already in the @used_nodes map.
- *
- * Should use nodemask_t.
- */
-static int find_next_best_node(int node, unsigned long *used_nodes)
-{
-       int i, n, val, min_val, best_node = 0;
-
-       min_val = INT_MAX;
-
-       for (i = 0; i < MAX_NUMNODES; i++) {
-               /* Start at @node */
-               n = (node + i) % MAX_NUMNODES;
-
-               if (!nr_cpus_node(n))
-                       continue;
-
-               /* Skip already used nodes */
-               if (test_bit(n, used_nodes))
-                       continue;
-
-               /* Simple min distance search */
-               val = node_distance(node, n);
-
-               if (val < min_val) {
-                       min_val = val;
-                       best_node = n;
-               }
-       }
-
-       set_bit(best_node, used_nodes);
-       return best_node;
-}
-
-/**
- * sched_domain_node_span - get a cpumask for a node's sched_domain
- * @node: node whose cpumask we're constructing
- * @size: number of nodes to include in this span
- *
- * Given a node, construct a good cpumask for its sched_domain to span.  It
- * should be one that prevents unnecessary balancing, but also spreads tasks
- * out optimally.
- */
-static cpumask_t sched_domain_node_span(int node)
-{
-       int i;
-       cpumask_t span, nodemask;
-       DECLARE_BITMAP(used_nodes, MAX_NUMNODES);
-
-       cpus_clear(span);
-       bitmap_zero(used_nodes, MAX_NUMNODES);
-
-       nodemask = node_to_cpumask(node);
-       cpus_or(span, span, nodemask);
-       set_bit(node, used_nodes);
-
-       for (i = 1; i < SD_NODES_PER_DOMAIN; i++) {
-               int next_node = find_next_best_node(node, used_nodes);
-               nodemask = node_to_cpumask(next_node);
-               cpus_or(span, span, nodemask);
-       }
-
-       return span;
-}
-#endif
-
-/*
- * At the moment, CONFIG_SCHED_SMT is never defined, but leave it in so we
- * can switch it on easily if needed.
- */
-#ifdef CONFIG_SCHED_SMT
-static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
-static struct sched_group sched_group_cpus[NR_CPUS];
-static int cpu_to_cpu_group(int cpu)
-{
-       return cpu;
-}
-#endif
-
-static DEFINE_PER_CPU(struct sched_domain, phys_domains);
-static struct sched_group sched_group_phys[NR_CPUS];
-static int cpu_to_phys_group(int cpu)
-{
-#ifdef CONFIG_SCHED_SMT
-       return first_cpu(cpu_sibling_map[cpu]);
-#else
-       return cpu;
-#endif
-}
-
-#ifdef CONFIG_NUMA
-/*
- * The init_sched_build_groups can't handle what we want to do with node
- * groups, so roll our own. Now each node has its own list of groups which
- * gets dynamically allocated.
- */
-static DEFINE_PER_CPU(struct sched_domain, node_domains);
-static struct sched_group *sched_group_nodes[MAX_NUMNODES];
-
-static DEFINE_PER_CPU(struct sched_domain, allnodes_domains);
-static struct sched_group sched_group_allnodes[MAX_NUMNODES];
-
-static int cpu_to_allnodes_group(int cpu)
-{
-       return cpu_to_node(cpu);
-}
-#endif
-
-/*
- * Build sched domains for a given set of cpus and attach the sched domains
- * to the individual cpus
- */
-void build_sched_domains(const cpumask_t *cpu_map)
-{
-       int i;
-
-       /*
-        * Set up domains for cpus specified by the cpu_map.
-        */
-       for_each_cpu_mask(i, *cpu_map) {
-               int group;
-               struct sched_domain *sd = NULL, *p;
-               cpumask_t nodemask = node_to_cpumask(cpu_to_node(i));
-
-               cpus_and(nodemask, nodemask, *cpu_map);
-
-#ifdef CONFIG_NUMA
-               if (num_online_cpus()
-                               > SD_NODES_PER_DOMAIN*cpus_weight(nodemask)) {
-                       sd = &per_cpu(allnodes_domains, i);
-                       *sd = SD_ALLNODES_INIT;
-                       sd->span = *cpu_map;
-                       group = cpu_to_allnodes_group(i);
-                       sd->groups = &sched_group_allnodes[group];
-                       p = sd;
-               } else
-                       p = NULL;
-
-               sd = &per_cpu(node_domains, i);
-               *sd = SD_NODE_INIT;
-               sd->span = sched_domain_node_span(cpu_to_node(i));
-               sd->parent = p;
-               cpus_and(sd->span, sd->span, *cpu_map);
-#endif
-
-               p = sd;
-               sd = &per_cpu(phys_domains, i);
-               group = cpu_to_phys_group(i);
-               *sd = SD_CPU_INIT;
-               sd->span = nodemask;
-               sd->parent = p;
-               sd->groups = &sched_group_phys[group];
-
-#ifdef CONFIG_SCHED_SMT
-               p = sd;
-               sd = &per_cpu(cpu_domains, i);
-               group = cpu_to_cpu_group(i);
-               *sd = SD_SIBLING_INIT;
-               sd->span = cpu_sibling_map[i];
-               cpus_and(sd->span, sd->span, *cpu_map);
-               sd->parent = p;
-               sd->groups = &sched_group_cpus[group];
-#endif
-       }
-
-#ifdef CONFIG_SCHED_SMT
-       /* Set up CPU (sibling) groups */
-       for_each_cpu_mask(i, *cpu_map) {
-               cpumask_t this_sibling_map = cpu_sibling_map[i];
-               cpus_and(this_sibling_map, this_sibling_map, *cpu_map);
-               if (i != first_cpu(this_sibling_map))
-                       continue;
-
-               init_sched_build_groups(sched_group_cpus, this_sibling_map,
-                                               &cpu_to_cpu_group);
-       }
-#endif
-
-       /* Set up physical groups */
-       for (i = 0; i < MAX_NUMNODES; i++) {
-               cpumask_t nodemask = node_to_cpumask(i);
-
-               cpus_and(nodemask, nodemask, *cpu_map);
-               if (cpus_empty(nodemask))
-                       continue;
-
-               init_sched_build_groups(sched_group_phys, nodemask,
-                                               &cpu_to_phys_group);
-       }
-
-#ifdef CONFIG_NUMA
-       init_sched_build_groups(sched_group_allnodes, *cpu_map,
-                               &cpu_to_allnodes_group);
-
-       for (i = 0; i < MAX_NUMNODES; i++) {
-               /* Set up node groups */
-               struct sched_group *sg, *prev;
-               cpumask_t nodemask = node_to_cpumask(i);
-               cpumask_t domainspan;
-               cpumask_t covered = CPU_MASK_NONE;
-               int j;
-
-               cpus_and(nodemask, nodemask, *cpu_map);
-               if (cpus_empty(nodemask))
-                       continue;
-
-               domainspan = sched_domain_node_span(i);
-               cpus_and(domainspan, domainspan, *cpu_map);
-
-               sg = kmalloc(sizeof(struct sched_group), GFP_KERNEL);
-               sched_group_nodes[i] = sg;
-               for_each_cpu_mask(j, nodemask) {
-                       struct sched_domain *sd;
-                       sd = &per_cpu(node_domains, j);
-                       sd->groups = sg;
-                       if (sd->groups == NULL) {
-                               /* Turn off balancing if we have no groups */
-                               sd->flags = 0;
-                       }
-               }
-               if (!sg) {
-                       printk(KERN_WARNING
-                       "Can not alloc domain group for node %d\n", i);
-                       continue;
-               }
-               sg->cpu_power = 0;
-               sg->cpumask = nodemask;
-               cpus_or(covered, covered, nodemask);
-               prev = sg;
-
-               for (j = 0; j < MAX_NUMNODES; j++) {
-                       cpumask_t tmp, notcovered;
-                       int n = (i + j) % MAX_NUMNODES;
-
-                       cpus_complement(notcovered, covered);
-                       cpus_and(tmp, notcovered, *cpu_map);
-                       cpus_and(tmp, tmp, domainspan);
-                       if (cpus_empty(tmp))
-                               break;
-
-                       nodemask = node_to_cpumask(n);
-                       cpus_and(tmp, tmp, nodemask);
-                       if (cpus_empty(tmp))
-                               continue;
-
-                       sg = kmalloc(sizeof(struct sched_group), GFP_KERNEL);
-                       if (!sg) {
-                               printk(KERN_WARNING
-                               "Can not alloc domain group for node %d\n", j);
-                               break;
-                       }
-                       sg->cpu_power = 0;
-                       sg->cpumask = tmp;
-                       cpus_or(covered, covered, tmp);
-                       prev->next = sg;
-                       prev = sg;
-               }
-               prev->next = sched_group_nodes[i];
-       }
-#endif
-
-       /* Calculate CPU power for physical packages and nodes */
-       for_each_cpu_mask(i, *cpu_map) {
-               int power;
-               struct sched_domain *sd;
-#ifdef CONFIG_SCHED_SMT
-               sd = &per_cpu(cpu_domains, i);
-               power = SCHED_LOAD_SCALE;
-               sd->groups->cpu_power = power;
-#endif
-
-               sd = &per_cpu(phys_domains, i);
-               power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE *
-                               (cpus_weight(sd->groups->cpumask)-1) / 10;
-               sd->groups->cpu_power = power;
-
-#ifdef CONFIG_NUMA
-               sd = &per_cpu(allnodes_domains, i);
-               if (sd->groups) {
-                       power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE *
-                               (cpus_weight(sd->groups->cpumask)-1) / 10;
-                       sd->groups->cpu_power = power;
-               }
-#endif
-       }
-
-#ifdef CONFIG_NUMA
-       for (i = 0; i < MAX_NUMNODES; i++) {
-               struct sched_group *sg = sched_group_nodes[i];
-               int j;
-
-               if (sg == NULL)
-                       continue;
-next_sg:
-               for_each_cpu_mask(j, sg->cpumask) {
-                       struct sched_domain *sd;
-                       int power;
-
-                       sd = &per_cpu(phys_domains, j);
-                       if (j != first_cpu(sd->groups->cpumask)) {
-                               /*
-                                * Only add "power" once for each
-                                * physical package.
-                                */
-                               continue;
-                       }
-                       power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE *
-                               (cpus_weight(sd->groups->cpumask)-1) / 10;
-
-                       sg->cpu_power += power;
-               }
-               sg = sg->next;
-               if (sg != sched_group_nodes[i])
-                       goto next_sg;
-       }
-#endif
-
-       /* Attach the domains */
-       for_each_cpu_mask(i, *cpu_map) {
-               struct sched_domain *sd;
-#ifdef CONFIG_SCHED_SMT
-               sd = &per_cpu(cpu_domains, i);
-#else
-               sd = &per_cpu(phys_domains, i);
-#endif
-               cpu_attach_domain(sd, i);
-       }
-}
-/*
- * Set up scheduler domains and groups.  Callers must hold the hotplug lock.
- */
-void arch_init_sched_domains(const cpumask_t *cpu_map)
-{
-       cpumask_t cpu_default_map;
-
-       /*
-        * Setup mask for cpus without special case scheduling requirements.
-        * For now this just excludes isolated cpus, but could be used to
-        * exclude other special cases in the future.
-        */
-       cpus_andnot(cpu_default_map, *cpu_map, cpu_isolated_map);
-
-       build_sched_domains(&cpu_default_map);
-}
-
-void arch_destroy_sched_domains(const cpumask_t *cpu_map)
-{
-#ifdef CONFIG_NUMA
-       int i;
-       for (i = 0; i < MAX_NUMNODES; i++) {
-               cpumask_t nodemask = node_to_cpumask(i);
-               struct sched_group *oldsg, *sg = sched_group_nodes[i];
-
-               cpus_and(nodemask, nodemask, *cpu_map);
-               if (cpus_empty(nodemask))
-                       continue;
-
-               if (sg == NULL)
-                       continue;
-               sg = sg->next;
-next_sg:
-               oldsg = sg;
-               sg = sg->next;
-               kfree(oldsg);
-               if (oldsg != sched_group_nodes[i])
-                       goto next_sg;
-               sched_group_nodes[i] = NULL;
-       }
-#endif
-}
-
index 7936b62f7a2e323a0f1d5d4ee4c46a2894bf5682..a13df592ebf7adba9e9f98dba3e53d840c2dcfe1 100644 (file)
@@ -561,7 +561,7 @@ static inline int vector_is_shared (int vector)
        return (iosapic_intr_info[vector].count > 1);
 }
 
-static void
+static int
 register_intr (unsigned int gsi, int vector, unsigned char delivery,
               unsigned long polarity, unsigned long trigger)
 {
@@ -576,7 +576,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
        index = find_iosapic(gsi);
        if (index < 0) {
                printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", __FUNCTION__, gsi);
-               return;
+               return -ENODEV;
        }
 
        iosapic_address = iosapic_lists[index].addr;
@@ -587,7 +587,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
                rte = iosapic_alloc_rte();
                if (!rte) {
                        printk(KERN_WARNING "%s: cannot allocate memory\n", __FUNCTION__);
-                       return;
+                       return -ENOMEM;
                }
 
                rte_index = gsi - gsi_base;
@@ -603,7 +603,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
                struct iosapic_intr_info *info = &iosapic_intr_info[vector];
                if (info->trigger != trigger || info->polarity != polarity) {
                        printk (KERN_WARNING "%s: cannot override the interrupt\n", __FUNCTION__);
-                       return;
+                       return -EINVAL;
                }
        }
 
@@ -623,6 +623,7 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
                               __FUNCTION__, vector, idesc->handler->typename, irq_type->typename);
                idesc->handler = irq_type;
        }
+       return 0;
 }
 
 static unsigned int
@@ -710,7 +711,7 @@ int
 iosapic_register_intr (unsigned int gsi,
                       unsigned long polarity, unsigned long trigger)
 {
-       int vector, mask = 1;
+       int vector, mask = 1, err;
        unsigned int dest;
        unsigned long flags;
        struct iosapic_rte_info *rte;
@@ -737,8 +738,8 @@ again:
        vector = assign_irq_vector(AUTO_ASSIGN);
        if (vector < 0) {
                vector = iosapic_find_sharable_vector(trigger, polarity);
-               if (vector < 0)
-                       panic("%s: out of interrupt vectors!\n", __FUNCTION__);
+               if (vector < 0)
+                       return -ENOSPC;
        }
 
        spin_lock_irqsave(&irq_descp(vector)->lock, flags);
@@ -753,8 +754,13 @@ again:
                }
 
                dest = get_target_cpu(gsi, vector);
-               register_intr(gsi, vector, IOSAPIC_LOWEST_PRIORITY,
+               err = register_intr(gsi, vector, IOSAPIC_LOWEST_PRIORITY,
                              polarity, trigger);
+               if (err < 0) {
+                       spin_unlock(&iosapic_lock);
+                       spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
+                       return err;
+               }
 
                /*
                 * If the vector is shared and already unmasked for
index 28f2aadc38d00ed2318be5690648b563d9044776..205d980282612e8a4f41ccd97858df3ac5da5dde 100644 (file)
@@ -91,23 +91,8 @@ skip:
 }
 
 #ifdef CONFIG_SMP
-/*
- * This is updated when the user sets irq affinity via /proc
- */
-static cpumask_t __cacheline_aligned pending_irq_cpumask[NR_IRQS];
-static unsigned long pending_irq_redir[BITS_TO_LONGS(NR_IRQS)];
-
 static char irq_redir [NR_IRQS]; // = { [0 ... NR_IRQS-1] = 1 };
 
-/*
- * Arch specific routine for deferred write to iosapic rte to reprogram
- * intr destination.
- */
-void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val)
-{
-       pending_irq_cpumask[irq] = mask_val;
-}
-
 void set_irq_affinity_info (unsigned int irq, int hwid, int redir)
 {
        cpumask_t mask = CPU_MASK_NONE;
@@ -116,32 +101,10 @@ void set_irq_affinity_info (unsigned int irq, int hwid, int redir)
 
        if (irq < NR_IRQS) {
                irq_affinity[irq] = mask;
+               set_irq_info(irq, mask);
                irq_redir[irq] = (char) (redir & 0xff);
        }
 }
-
-
-void move_irq(int irq)
-{
-       /* note - we hold desc->lock */
-       cpumask_t tmp;
-       irq_desc_t *desc = irq_descp(irq);
-       int redir = test_bit(irq, pending_irq_redir);
-
-       if (unlikely(!desc->handler->set_affinity))
-               return;
-
-       if (!cpus_empty(pending_irq_cpumask[irq])) {
-               cpus_and(tmp, pending_irq_cpumask[irq], cpu_online_map);
-               if (unlikely(!cpus_empty(tmp))) {
-                       desc->handler->set_affinity(irq | (redir ? IA64_IRQ_REDIRECTED : 0),
-                                                   pending_irq_cpumask[irq]);
-               }
-               cpus_clear(pending_irq_cpumask[irq]);
-       }
-}
-
-
 #endif /* CONFIG_SMP */
 
 #ifdef CONFIG_HOTPLUG_CPU
index b7fa3ccd2b0f7ca124836866284a8762d67207ac..2323377e36950ee236a662bcddada08c2f423d45 100644 (file)
@@ -49,6 +49,7 @@
        /*
         * void jprobe_break(void)
         */
+       .section .kprobes.text, "ax"
 ENTRY(jprobe_break)
        break.m 0x80300
 END(jprobe_break)
index 884f5cd27d8a656856a46342f616d4a198ec25c6..471086b808a4b942781aa19abe940fb08dc8533b 100644 (file)
@@ -87,12 +87,25 @@ static enum instruction_type bundle_encoding[32][3] = {
  * is IP relative instruction and update the kprobe
  * inst flag accordingly
  */
-static void update_kprobe_inst_flag(uint template, uint  slot, uint major_opcode,
-       unsigned long kprobe_inst, struct kprobe *p)
+static void __kprobes update_kprobe_inst_flag(uint template, uint  slot,
+                                             uint major_opcode,
+                                             unsigned long kprobe_inst,
+                                             struct kprobe *p)
 {
        p->ainsn.inst_flag = 0;
        p->ainsn.target_br_reg = 0;
 
+       /* Check for Break instruction
+        * Bits 37:40 Major opcode to be zero
+        * Bits 27:32 X6 to be zero
+        * Bits 32:35 X3 to be zero
+        */
+       if ((!major_opcode) && (!((kprobe_inst >> 27) & 0x1FF)) ) {
+               /* is a break instruction */
+               p->ainsn.inst_flag |= INST_FLAG_BREAK_INST;
+               return;
+       }
+
        if (bundle_encoding[template][slot] == B) {
                switch (major_opcode) {
                  case INDIRECT_CALL_OPCODE:
@@ -126,8 +139,10 @@ static void update_kprobe_inst_flag(uint template, uint  slot, uint major_opcode
  * Returns 0 if supported
  * Returns -EINVAL if unsupported
  */
-static int unsupported_inst(uint template, uint  slot, uint major_opcode,
-       unsigned long kprobe_inst, struct kprobe *p)
+static int __kprobes unsupported_inst(uint template, uint  slot,
+                                     uint major_opcode,
+                                     unsigned long kprobe_inst,
+                                     struct kprobe *p)
 {
        unsigned long addr = (unsigned long)p->addr;
 
@@ -168,8 +183,9 @@ static int unsupported_inst(uint template, uint  slot, uint major_opcode,
  * on which we are inserting kprobe is cmp instruction
  * with ctype as unc.
  */
-static uint is_cmp_ctype_unc_inst(uint template, uint slot, uint major_opcode,
-unsigned long kprobe_inst)
+static uint __kprobes is_cmp_ctype_unc_inst(uint template, uint slot,
+                                           uint major_opcode,
+                                           unsigned long kprobe_inst)
 {
        cmp_inst_t cmp_inst;
        uint ctype_unc = 0;
@@ -201,8 +217,10 @@ out:
  * In this function we override the bundle with
  * the break instruction at the given slot.
  */
-static void prepare_break_inst(uint template, uint  slot, uint major_opcode,
-       unsigned long kprobe_inst, struct kprobe *p)
+static void __kprobes prepare_break_inst(uint template, uint  slot,
+                                        uint major_opcode,
+                                        unsigned long kprobe_inst,
+                                        struct kprobe *p)
 {
        unsigned long break_inst = BREAK_INST;
        bundle_t *bundle = &p->ainsn.insn.bundle;
@@ -271,7 +289,8 @@ static inline int in_ivt_functions(unsigned long addr)
                && addr < (unsigned long)__end_ivt_text);
 }
 
-static int valid_kprobe_addr(int template, int slot, unsigned long addr)
+static int __kprobes valid_kprobe_addr(int template, int slot,
+                                      unsigned long addr)
 {
        if ((slot > 2) || ((bundle_encoding[template][1] == L) && slot > 1)) {
                printk(KERN_WARNING "Attempting to insert unaligned kprobe "
@@ -323,7 +342,7 @@ static void kretprobe_trampoline(void)
  *    - cleanup by marking the instance as unused
  *    - long jump back to the original return address
  */
-int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
 {
        struct kretprobe_instance *ri = NULL;
        struct hlist_head *head;
@@ -381,7 +400,8 @@ int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
         return 1;
 }
 
-void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs)
+void __kprobes arch_prepare_kretprobe(struct kretprobe *rp,
+                                     struct pt_regs *regs)
 {
        struct kretprobe_instance *ri;
 
@@ -399,7 +419,7 @@ void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs)
        }
 }
 
-int arch_prepare_kprobe(struct kprobe *p)
+int __kprobes arch_prepare_kprobe(struct kprobe *p)
 {
        unsigned long addr = (unsigned long) p->addr;
        unsigned long *kprobe_addr = (unsigned long *)(addr & ~0xFULL);
@@ -430,7 +450,7 @@ int arch_prepare_kprobe(struct kprobe *p)
        return 0;
 }
 
-void arch_arm_kprobe(struct kprobe *p)
+void __kprobes arch_arm_kprobe(struct kprobe *p)
 {
        unsigned long addr = (unsigned long)p->addr;
        unsigned long arm_addr = addr & ~0xFULL;
@@ -439,7 +459,7 @@ void arch_arm_kprobe(struct kprobe *p)
        flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t));
 }
 
-void arch_disarm_kprobe(struct kprobe *p)
+void __kprobes arch_disarm_kprobe(struct kprobe *p)
 {
        unsigned long addr = (unsigned long)p->addr;
        unsigned long arm_addr = addr & ~0xFULL;
@@ -449,7 +469,7 @@ void arch_disarm_kprobe(struct kprobe *p)
        flush_icache_range(arm_addr, arm_addr + sizeof(bundle_t));
 }
 
-void arch_remove_kprobe(struct kprobe *p)
+void __kprobes arch_remove_kprobe(struct kprobe *p)
 {
 }
 
@@ -461,7 +481,7 @@ void arch_remove_kprobe(struct kprobe *p)
  * to original stack address, handle the case where we need to fixup the
  * relative IP address and/or fixup branch register.
  */
-static void resume_execution(struct kprobe *p, struct pt_regs *regs)
+static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs)
 {
        unsigned long bundle_addr = ((unsigned long) (&p->opcode.bundle)) & ~0xFULL;
        unsigned long resume_addr = (unsigned long)p->addr & ~0xFULL;
@@ -528,13 +548,16 @@ turn_ss_off:
        ia64_psr(regs)->ss = 0;
 }
 
-static void prepare_ss(struct kprobe *p, struct pt_regs *regs)
+static void __kprobes prepare_ss(struct kprobe *p, struct pt_regs *regs)
 {
        unsigned long bundle_addr = (unsigned long) &p->opcode.bundle;
        unsigned long slot = (unsigned long)p->addr & 0xf;
 
-       /* Update instruction pointer (IIP) and slot number (IPSR.ri) */
-       regs->cr_iip = bundle_addr & ~0xFULL;
+       /* single step inline if break instruction */
+       if (p->ainsn.inst_flag == INST_FLAG_BREAK_INST)
+               regs->cr_iip = (unsigned long)p->addr & ~0xFULL;
+       else
+               regs->cr_iip = bundle_addr & ~0xFULL;
 
        if (slot > 2)
                slot = 0;
@@ -545,7 +568,39 @@ static void prepare_ss(struct kprobe *p, struct pt_regs *regs)
        ia64_psr(regs)->ss = 1;
 }
 
-static int pre_kprobes_handler(struct die_args *args)
+static int __kprobes is_ia64_break_inst(struct pt_regs *regs)
+{
+       unsigned int slot = ia64_psr(regs)->ri;
+       unsigned int template, major_opcode;
+       unsigned long kprobe_inst;
+       unsigned long *kprobe_addr = (unsigned long *)regs->cr_iip;
+       bundle_t bundle;
+
+       memcpy(&bundle, kprobe_addr, sizeof(bundle_t));
+       template = bundle.quad0.template;
+
+       /* Move to slot 2, if bundle is MLX type and kprobe slot is 1 */
+       if (slot == 1 && bundle_encoding[template][1] == L)
+               slot++;
+
+       /* Get Kprobe probe instruction at given slot*/
+       get_kprobe_inst(&bundle, slot, &kprobe_inst, &major_opcode);
+
+       /* For break instruction,
+        * Bits 37:40 Major opcode to be zero
+        * Bits 27:32 X6 to be zero
+        * Bits 32:35 X3 to be zero
+        */
+       if (major_opcode || ((kprobe_inst >> 27) & 0x1FF) ) {
+               /* Not a break instruction */
+               return 0;
+       }
+
+       /* Is a break instruction */
+       return 1;
+}
+
+static int __kprobes pre_kprobes_handler(struct die_args *args)
 {
        struct kprobe *p;
        int ret = 0;
@@ -558,7 +613,9 @@ static int pre_kprobes_handler(struct die_args *args)
        if (kprobe_running()) {
                p = get_kprobe(addr);
                if (p) {
-                       if (kprobe_status == KPROBE_HIT_SS) {
+                       if ( (kprobe_status == KPROBE_HIT_SS) &&
+                            (p->ainsn.inst_flag == INST_FLAG_BREAK_INST)) {
+                               ia64_psr(regs)->ss = 0;
                                unlock_kprobes();
                                goto no_kprobe;
                        }
@@ -592,6 +649,19 @@ static int pre_kprobes_handler(struct die_args *args)
        p = get_kprobe(addr);
        if (!p) {
                unlock_kprobes();
+               if (!is_ia64_break_inst(regs)) {
+                       /*
+                        * The breakpoint instruction was removed right
+                        * after we hit it.  Another cpu has removed
+                        * either a probepoint or a debugger breakpoint
+                        * at this address.  In either case, no further
+                        * handling of this interrupt is appropriate.
+                        */
+                       ret = 1;
+
+               }
+
+               /* Not one of our break, let kernel handle it */
                goto no_kprobe;
        }
 
@@ -616,7 +686,7 @@ no_kprobe:
        return ret;
 }
 
-static int post_kprobes_handler(struct pt_regs *regs)
+static int __kprobes post_kprobes_handler(struct pt_regs *regs)
 {
        if (!kprobe_running())
                return 0;
@@ -641,7 +711,7 @@ out:
        return 1;
 }
 
-static int kprobes_fault_handler(struct pt_regs *regs, int trapnr)
+static int __kprobes kprobes_fault_handler(struct pt_regs *regs, int trapnr)
 {
        if (!kprobe_running())
                return 0;
@@ -659,8 +729,8 @@ static int kprobes_fault_handler(struct pt_regs *regs, int trapnr)
        return 0;
 }
 
-int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
-                            void *data)
+int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
+                                      unsigned long val, void *data)
 {
        struct die_args *args = (struct die_args *)data;
        switch(val) {
@@ -681,7 +751,7 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
        return NOTIFY_DONE;
 }
 
-int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
 {
        struct jprobe *jp = container_of(p, struct jprobe, kp);
        unsigned long addr = ((struct fnptr *)(jp->entry))->ip;
@@ -703,7 +773,7 @@ int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
        return 1;
 }
 
-int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
 {
        *regs = jprobe_saved_regs;
        return 1;
index 84f89da7c6408b079666d47fd91beea38575a25b..1f5c26dbe705500b58c79568c4293eb2e45bc46a 100644 (file)
@@ -384,7 +384,7 @@ setup_arch (char **cmdline_p)
        if (early_console_setup(*cmdline_p) == 0)
                mark_bsp_online();
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
        /* Initialize the ACPI boot-time table parser */
        acpi_table_init();
 # ifdef CONFIG_ACPI_NUMA
@@ -420,7 +420,7 @@ setup_arch (char **cmdline_p)
 
        cpu_init();     /* initialize the bootstrap CPU */
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
        acpi_boot_init();
 #endif
 
index 92ff46ad21e2b0f43f2990bcdf05bf1b4c72d6f8..706b7734e191efbc51112ae4adea0bbeb4d93e19 100644 (file)
@@ -36,7 +36,7 @@ int arch_register_cpu(int num)
        parent = &sysfs_nodes[cpu_to_node(num)];
 #endif /* CONFIG_NUMA */
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
        /*
         * If CPEI cannot be re-targetted, and this is
         * CPEI target, then dont create the control file
index 4440c8343fa4303df0dbc658954d9d3cebc1ab8d..f970359e7edf2fbb67117695c2f7b1a25f86b4d0 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/vt_kern.h>             /* For unblank_screen() */
 #include <linux/module.h>       /* for EXPORT_SYMBOL */
 #include <linux/hardirq.h>
+#include <linux/kprobes.h>
 
 #include <asm/fpswa.h>
 #include <asm/ia32.h>
@@ -122,7 +123,7 @@ die_if_kernel (char *str, struct pt_regs *regs, long err)
 }
 
 void
-ia64_bad_break (unsigned long break_num, struct pt_regs *regs)
+__kprobes ia64_bad_break (unsigned long break_num, struct pt_regs *regs)
 {
        siginfo_t siginfo;
        int sig, code;
@@ -444,7 +445,7 @@ ia64_illegal_op_fault (unsigned long ec, long arg1, long arg2, long arg3,
        return rv;
 }
 
-void
+void __kprobes
 ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
            unsigned long iim, unsigned long itir, long arg5, long arg6,
            long arg7, struct pt_regs regs)
index a676e79e0681bb183986e3036e6484f8878c4e70..30d8564e96032bd9b7cc9735721457627db9ff7d 100644 (file)
@@ -48,6 +48,7 @@ SECTIONS
        *(.text)
        SCHED_TEXT
        LOCK_TEXT
+       KPROBES_TEXT
        *(.gnu.linkonce.t*)
     }
   .text2 : AT(ADDR(.text2) - LOAD_OFFSET)
index 3e2cfa2c6d39436d29f0c05e8f8cb1611fe76560..2a0d27f2f21bdd200df5c62a010e4673bc314abd 100644 (file)
@@ -20,6 +20,7 @@
         *
         *      Note: "in0" and "in1" are preserved for debugging purposes.
         */
+       .section .kprobes.text,"ax"
 GLOBAL_ENTRY(flush_icache_range)
 
        .prologue
index ff62551eb3a125765463768adaec354107200b47..24614869e866ed7f2bd653d1cdc577d4aa02ce89 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/mm.h>
 #include <linux/smp_lock.h>
 #include <linux/interrupt.h>
+#include <linux/kprobes.h>
 
 #include <asm/pgtable.h>
 #include <asm/processor.h>
@@ -76,7 +77,7 @@ mapped_kernel_page_is_present (unsigned long address)
        return pte_present(pte);
 }
 
-void
+void __kprobes
 ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *regs)
 {
        int signal = SIGSEGV, code = SEGV_MAPERR;
index 4564ed0b5ff31e32aab74c819369e3762382f512..906622d9f933374931b07a570c91fa17f7bcd41d 100644 (file)
@@ -431,7 +431,7 @@ void sn_bus_store_sysdata(struct pci_dev *dev)
 {
        struct sysdata_el *element;
 
-       element = kcalloc(1, sizeof(struct sysdata_el), GFP_KERNEL);
+       element = kzalloc(sizeof(struct sysdata_el), GFP_KERNEL);
        if (!element) {
                dev_dbg(dev, "%s: out of memory!\n", __FUNCTION__);
                return;
index 9fc74631ba8aa92568a8fed1e27c0a202e00f92f..01d18b7b5bb3bc785f08b535b903a26b808688ea 100644 (file)
@@ -23,7 +23,7 @@ static void force_interrupt(int irq);
 static void register_intr_pda(struct sn_irq_info *sn_irq_info);
 static void unregister_intr_pda(struct sn_irq_info *sn_irq_info);
 
-extern int sn_force_interrupt_flag;
+int sn_force_interrupt_flag = 1;
 extern int sn_ioif_inited;
 static struct list_head **sn_irq_lh;
 static spinlock_t sn_irq_info_lock = SPIN_LOCK_UNLOCKED; /* non-IRQ lock */
index 51bf82720d994188faf55a74b68888908f78c3e1..a06719d752a03112e697b0a060864ec99267e012 100644 (file)
@@ -52,7 +52,7 @@ static int licenseID_open(struct inode *inode, struct file *file)
  * the bridge chip.  The hardware will then send an interrupt message if the
  * interrupt line is active.  This mimics a level sensitive interrupt.
  */
-int sn_force_interrupt_flag = 1;
+extern int sn_force_interrupt_flag;
 
 static int sn_force_interrupt_show(struct seq_file *s, void *p)
 {
index 254fe15c064b705ab5575cda49634a3c45ab5735..b45db5133f55062abda30bc36b194e3ff8f2012f 100644 (file)
@@ -191,7 +191,7 @@ cx_device_register(nasid_t nasid, int part_num, int mfg_num,
 {
        struct cx_dev *cx_dev;
 
-       cx_dev = kcalloc(1, sizeof(struct cx_dev), GFP_KERNEL);
+       cx_dev = kzalloc(sizeof(struct cx_dev), GFP_KERNEL);
        DBG("cx_dev= 0x%p\n", cx_dev);
        if (cx_dev == NULL)
                return -ENOMEM;
index ea09c12f02586de9d6bc49507951fb919420ea70..19bced34d5f1f1e79998fb11917053c91567ad1f 100644 (file)
@@ -148,7 +148,7 @@ tioca_gart_init(struct tioca_kernel *tioca_kern)
        tioca_kern->ca_pcigart_entries =
            tioca_kern->ca_pciap_size / tioca_kern->ca_ap_pagesize;
        tioca_kern->ca_pcigart_pagemap =
-           kcalloc(1, tioca_kern->ca_pcigart_entries / 8, GFP_KERNEL);
+           kzalloc(tioca_kern->ca_pcigart_entries / 8, GFP_KERNEL);
        if (!tioca_kern->ca_pcigart_pagemap) {
                free_pages((unsigned long)tioca_kern->ca_gart,
                           get_order(tioca_kern->ca_gart_size));
@@ -392,7 +392,7 @@ tioca_dma_mapped(struct pci_dev *pdev, uint64_t paddr, size_t req_size)
         * allocate a map struct
         */
 
-       ca_dmamap = kcalloc(1, sizeof(struct tioca_dmamap), GFP_ATOMIC);
+       ca_dmamap = kzalloc(sizeof(struct tioca_dmamap), GFP_ATOMIC);
        if (!ca_dmamap)
                goto map_return;
 
@@ -600,7 +600,7 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
         * Allocate kernel bus soft and copy from prom.
         */
 
-       tioca_common = kcalloc(1, sizeof(struct tioca_common), GFP_KERNEL);
+       tioca_common = kzalloc(sizeof(struct tioca_common), GFP_KERNEL);
        if (!tioca_common)
                return NULL;
 
@@ -609,7 +609,7 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
 
        /* init kernel-private area */
 
-       tioca_kern = kcalloc(1, sizeof(struct tioca_kernel), GFP_KERNEL);
+       tioca_kern = kzalloc(sizeof(struct tioca_kernel), GFP_KERNEL);
        if (!tioca_kern) {
                kfree(tioca_common);
                return NULL;
index 8a2b77bc5749b50b01a45ef3c81b6d2c8870fc05..539c562cd54de57b04eb45f59ea5bea9fc3f0012 100644 (file)
@@ -171,10 +171,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
 
@@ -221,7 +218,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
         * called as close as possible to 500 ms before the new second starts.
         */
        write_seqlock(&xtime_lock);
-       if ((time_status & STA_UNSYNC) == 0
+       if (ntp_synced()
                && xtime.tv_sec > last_rtc_update + 660
                && (xtime.tv_nsec / 1000) >= 500000 - ((unsigned)TICK_SIZE) / 2
                && (xtime.tv_nsec / 1000) <= 500000 + ((unsigned)TICK_SIZE) / 2)
index 178c4a3fbb72c22229edeec9be348c6899a7bd95..ba960bbc8e6d41124dd9b706ce92f1d27be7b832 100644 (file)
@@ -25,6 +25,11 @@ config GENERIC_CALIBRATE_DELAY
        bool
        default y
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       depends on Q40 || (BROKEN && SUN3X)
+       default y
+
 mainmenu "Linux/68k Kernel Configuration"
 
 source "init/Kconfig"
index c6b2a410bf9abaea143de4e52376dcf06d840909..eb63ca6ed94c591668bbc94c6861571e36da13f6 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/fcntl.h>
 #include <linux/init.h>
 #include <linux/poll.h>
+#include <linux/module.h>
 #include <linux/mc146818rtc.h> /* For struct rtc_time and ioctls, etc */
 #include <linux/smp_lock.h>
 #include <asm/bvme6000hw.h>
@@ -171,7 +172,7 @@ static struct miscdevice rtc_dev = {
        .fops =         &rtc_fops
 };
 
-int __init rtc_DP8570A_init(void)
+static int __init rtc_DP8570A_init(void)
 {
        if (!MACH_IS_BVME6000)
                return -ENODEV;
@@ -179,4 +180,4 @@ int __init rtc_DP8570A_init(void)
        printk(KERN_INFO "DP8570A Real Time Clock Driver v%s\n", RTC_VERSION);
        return misc_register(&rtc_dev);
 }
-
+module_init(rtc_DP8570A_init);
index e47e19588525e47c1fb19edba8ae3621201e6d08..4ec95e3cb8748721ec6b37880d0a87aaf1b55f83 100644 (file)
@@ -166,10 +166,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
        return 0;
index 8a2425069088240e0e87031dd1c103108eca5eb7..7977eae50af27c2344bb432844493c1e8a8a2143 100644 (file)
@@ -161,7 +161,7 @@ static struct miscdevice rtc_dev=
        .fops =         &rtc_fops
 };
 
-int __init rtc_MK48T08_init(void)
+static int __init rtc_MK48T08_init(void)
 {
        if (!MACH_IS_MVME16x)
                return -ENODEV;
@@ -169,4 +169,4 @@ int __init rtc_MK48T08_init(void)
        printk(KERN_INFO "MK48T08 Real Time Clock Driver v%s\n", RTC_VERSION);
        return misc_register(&rtc_dev);
 }
-
+module_init(rtc_MK48T08_init);
index 5c3ca671627c19fdd82cb71e631801448be616c7..b17c1ecba966e103d36ad2f7108b4c28a16d2b1a 100644 (file)
@@ -68,7 +68,7 @@ static irqreturn_t timer_interrupt(int irq, void *dummy, struct pt_regs * regs)
         * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
         * called as close as possible to 500 ms before the new second starts.
         */
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec  / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
@@ -178,10 +178,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
        return 0;
index d79fba0aa8bf12657cdaab3e9946fdd884a76c7e..8d76eb1ff29169080b025ca5f0a7c153c6e4e72c 100644 (file)
@@ -4,6 +4,11 @@ config MIPS
        # Horrible source of confusion.  Die, die, die ...
        select EMBEDDED
 
+# shouldn't it be per-subarchitecture?
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       default y
+
 mainmenu "Linux/MIPS Kernel Configuration"
 
 source "init/Kconfig"
index 4613219dd73ef9f290529589012372b499285418..ece4564919d8f76c077ccf8cdbb6c95545f8d468 100644 (file)
@@ -546,20 +546,20 @@ struct msgbuf32 { s32 mtype; char mtext[1]; };
 struct ipc_perm32
 {
        key_t             key;
-        compat_uid_t  uid;
-        compat_gid_t  gid;
-        compat_uid_t  cuid;
-        compat_gid_t  cgid;
+        __compat_uid_t  uid;
+        __compat_gid_t  gid;
+        __compat_uid_t  cuid;
+        __compat_gid_t  cgid;
         compat_mode_t  mode;
         unsigned short  seq;
 };
 
 struct ipc64_perm32 {
        key_t key;
-       compat_uid_t uid;
-       compat_gid_t gid;
-       compat_uid_t cuid;
-       compat_gid_t cgid;
+       __compat_uid_t uid;
+       __compat_gid_t gid;
+       __compat_uid_t cuid;
+       __compat_gid_t cgid;
        compat_mode_t   mode;
        unsigned short  seq;
        unsigned short __pad1;
index f3bf0e43b8bb207ed0d50d4f01a14525509d2195..b4659546271789c6498967d40f81bb68e7283f83 100644 (file)
@@ -632,10 +632,7 @@ asmlinkage int irix_stime(int value)
        write_seqlock_irq(&xtime_lock);
        xtime.tv_sec = value;
        xtime.tv_nsec = 0;
-       time_adjust = 0;                        /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
 
        return 0;
index 648c82292ed6c8ab8870b09902d694de87f211a1..0dd0df7a3b04af60f095e03bd33cd6db0c3adac9 100644 (file)
@@ -223,10 +223,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                        /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
 
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
@@ -442,7 +439,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
         * called as close as possible to 500 ms before the new second starts.
         */
        write_seqlock(&xtime_lock);
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
index 8c1b96fffa764e8e3a4c9d7ea163c04d2a61620e..cddf1cedf007108daf8bfbb8f286656f7e48e196 100644 (file)
@@ -118,7 +118,7 @@ again:
         * RTC clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
         * called as close as possible to when a second starts.
         */
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
index 1c2d87435233ca911ff1d4773cf7268a0847e504..0b07922a2ac603e32451514a64a5250878389b5c 100644 (file)
@@ -49,6 +49,10 @@ config ISA_DMA_API
        bool
        default y
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       default y
+
 source "init/Kconfig"
 
 
index 6cf7407344badb9c4a7841b94d98251ec6264e27..7ff67f8e9f8c019bd2132cef0e3cabf6768859d9 100644 (file)
@@ -188,10 +188,7 @@ do_settimeofday (struct timespec *tv)
                set_normalized_timespec(&xtime, sec, nsec);
                set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-               time_adjust = 0;                /* stop active adjtime() */
-               time_status |= STA_UNSYNC;
-               time_maxerror = NTP_PHASE_LIMIT;
-               time_esterror = NTP_PHASE_LIMIT;
+               ntp_clear();
        }
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
index 36dee0ff5ca048719ba8b6f9187fb6918ccb7cf7..6ab7e5ea5fcfd9e0ae748d83bde3f31f158fa25b 100644 (file)
@@ -47,6 +47,10 @@ config SCHED_NO_NO_OMIT_FRAME_POINTER
        bool
        default y
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       default y
+
 source "init/Kconfig"
 
 menu "Processor"
index 0a5e723d3be6c820fb116489824e1b963e5b2dcc..ca9518b96c6ebe54ec0df5823b900336203ef8c6 100644 (file)
@@ -453,6 +453,7 @@ label:
 #else
        CRITICAL_EXCEPTION(0x1020, WDTException, UnknownException)
 #endif
+#endif
 
 /* 0x1100 - Data TLB Miss Exception
  * As the name implies, translation is not in the MMU, so search the
index bf4ddca5e853b22f460a7d4f8b0a06e396ae406c..a3c5281a5d2d8c05e328a6fc5c83f10b9981193c 100644 (file)
@@ -169,7 +169,7 @@ void timer_interrupt(struct pt_regs * regs)
                 * We should have an rtc call that only sets the minutes and
                 * seconds like on Intel to avoid problems with non UTC clocks.
                 */
-               if ( ppc_md.set_rtc_time && (time_status & STA_UNSYNC) == 0 &&
+               if ( ppc_md.set_rtc_time && ntp_synced() &&
                     xtime.tv_sec - last_rtc_update >= 659 &&
                     abs((xtime.tv_nsec / 1000) - (1000000-1000000/HZ)) < 500000/HZ &&
                     jiffies - wall_jiffies == 1) {
@@ -271,10 +271,7 @@ int do_settimeofday(struct timespec *tv)
         */
        last_rtc_update = new_sec - 658;
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irqrestore(&xtime_lock, flags);
        clock_was_set();
        return 0;
index e5fd2ae503ea7c2240c373f022ffa0c989ad52e3..9ccce438bd7af7ffc1dce54b32377a5975140bcd 100644 (file)
@@ -165,7 +165,7 @@ ocp_device_remove(struct device *dev)
 }
 
 static int
-ocp_device_suspend(struct device *dev, u32 state)
+ocp_device_suspend(struct device *dev, pm_message_t state)
 {
        struct ocp_device *ocp_dev = to_ocp_dev(dev);
        struct ocp_driver *ocp_drv = to_ocp_drv(dev->driver);
index 13b262f10216aa4d88d88988374ef744f9b3174f..deca68ad644ae41681537867c7e8accdb6d2a18b 100644 (file)
@@ -44,6 +44,10 @@ config SCHED_NO_NO_OMIT_FRAME_POINTER
        bool
        default y
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       default y
+
 # We optimistically allocate largepages from the VM, so make the limit
 # large enough (16MB). This badly named config option is actually
 # max order + 1
index 6350cce82efb9d5c27ed703a6c4fb8e5a9275534..8189953a372c93b6579f150359facb604cb4af46 100644 (file)
@@ -49,7 +49,7 @@ NM            := $(NM) --synthetic
 
 endif
 
-CHECKFLAGS     += -m64 -D__powerpc__
+CHECKFLAGS     += -m64 -D__powerpc__ -D__powerpc64__
 
 LDFLAGS                := -m elf64ppc
 LDFLAGS_vmlinux        := -Bstatic -e $(KERNELLOAD) -Ttext $(KERNELLOAD)
index a3d519518fb8dfe41f2bcf7450bd2d5546bc3987..7e80d49c589a3bf2f5eea3e68f3d3690b1ceeb03 100644 (file)
@@ -44,7 +44,7 @@ static struct kprobe *kprobe_prev;
 static unsigned long kprobe_status_prev, kprobe_saved_msr_prev;
 static struct pt_regs jprobe_saved_regs;
 
-int arch_prepare_kprobe(struct kprobe *p)
+int __kprobes arch_prepare_kprobe(struct kprobe *p)
 {
        int ret = 0;
        kprobe_opcode_t insn = *p->addr;
@@ -68,27 +68,27 @@ int arch_prepare_kprobe(struct kprobe *p)
        return ret;
 }
 
-void arch_copy_kprobe(struct kprobe *p)
+void __kprobes arch_copy_kprobe(struct kprobe *p)
 {
        memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
        p->opcode = *p->addr;
 }
 
-void arch_arm_kprobe(struct kprobe *p)
+void __kprobes arch_arm_kprobe(struct kprobe *p)
 {
        *p->addr = BREAKPOINT_INSTRUCTION;
        flush_icache_range((unsigned long) p->addr,
                           (unsigned long) p->addr + sizeof(kprobe_opcode_t));
 }
 
-void arch_disarm_kprobe(struct kprobe *p)
+void __kprobes arch_disarm_kprobe(struct kprobe *p)
 {
        *p->addr = p->opcode;
        flush_icache_range((unsigned long) p->addr,
                           (unsigned long) p->addr + sizeof(kprobe_opcode_t));
 }
 
-void arch_remove_kprobe(struct kprobe *p)
+void __kprobes arch_remove_kprobe(struct kprobe *p)
 {
        up(&kprobe_mutex);
        free_insn_slot(p->ainsn.insn);
@@ -102,7 +102,7 @@ static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
        regs->msr |= MSR_SE;
 
        /* single step inline if it is a trap variant */
-       if (IS_TW(insn) || IS_TD(insn) || IS_TWI(insn) || IS_TDI(insn))
+       if (is_trap(insn))
                regs->nip = (unsigned long)p->addr;
        else
                regs->nip = (unsigned long)p->ainsn.insn;
@@ -122,7 +122,8 @@ static inline void restore_previous_kprobe(void)
        kprobe_saved_msr = kprobe_saved_msr_prev;
 }
 
-void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs)
+void __kprobes arch_prepare_kretprobe(struct kretprobe *rp,
+                                     struct pt_regs *regs)
 {
        struct kretprobe_instance *ri;
 
@@ -151,7 +152,9 @@ static inline int kprobe_handler(struct pt_regs *regs)
                   Disarm the probe we just hit, and ignore it. */
                p = get_kprobe(addr);
                if (p) {
-                       if (kprobe_status == KPROBE_HIT_SS) {
+                       kprobe_opcode_t insn = *p->ainsn.insn;
+                       if (kprobe_status == KPROBE_HIT_SS &&
+                                       is_trap(insn)) {
                                regs->msr &= ~MSR_SE;
                                regs->msr |= kprobe_saved_msr;
                                unlock_kprobes();
@@ -191,8 +194,7 @@ static inline int kprobe_handler(struct pt_regs *regs)
                         * trap variant, it could belong to someone else
                         */
                        kprobe_opcode_t cur_insn = *addr;
-                       if (IS_TW(cur_insn) || IS_TD(cur_insn) ||
-                                       IS_TWI(cur_insn) || IS_TDI(cur_insn))
+                       if (is_trap(cur_insn))
                                goto no_kprobe;
                        /*
                         * The breakpoint instruction was removed right
@@ -244,7 +246,7 @@ void kretprobe_trampoline_holder(void)
 /*
  * Called when the probe at kretprobe trampoline is hit
  */
-int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
 {
         struct kretprobe_instance *ri = NULL;
         struct hlist_head *head;
@@ -308,7 +310,7 @@ int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
  * single-stepped a copy of the instruction.  The address of this
  * copy is p->ainsn.insn.
  */
-static void resume_execution(struct kprobe *p, struct pt_regs *regs)
+static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs)
 {
        int ret;
        unsigned int insn = *p->ainsn.insn;
@@ -373,8 +375,8 @@ static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
 /*
  * Wrapper routine to for handling exceptions.
  */
-int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
-                            void *data)
+int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
+                                      unsigned long val, void *data)
 {
        struct die_args *args = (struct die_args *)data;
        int ret = NOTIFY_DONE;
@@ -402,11 +404,11 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
        default:
                break;
        }
-       preempt_enable();
+       preempt_enable_no_resched();
        return ret;
 }
 
-int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
 {
        struct jprobe *jp = container_of(p, struct jprobe, kp);
 
@@ -419,16 +421,16 @@ int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
        return 1;
 }
 
-void jprobe_return(void)
+void __kprobes jprobe_return(void)
 {
        asm volatile("trap" ::: "memory");
 }
 
-void jprobe_return_end(void)
+void __kprobes jprobe_return_end(void)
 {
 };
 
-int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
 {
        /*
         * FIXME - we should ideally be validating that we got here 'cos
index 474df0a862bfac60094e0e50c6ba0890f87e03c7..6d860c1d9fa0849f44fab1856d77932d3a35fed3 100644 (file)
@@ -183,7 +183,7 @@ PPC64_CACHES:
  *   flush all bytes from start through stop-1 inclusive
  */
 
-_GLOBAL(__flush_icache_range)
+_KPROBE(__flush_icache_range)
 
 /*
  * Flush the data cache to memory 
@@ -223,7 +223,7 @@ _GLOBAL(__flush_icache_range)
        bdnz    2b
        isync
        blr
-       
+       .previous .text
 /*
  * Like above, but only do the D-cache.
  *
@@ -957,7 +957,7 @@ _GLOBAL(sys_call_table32)
        .llong .ppc_fork
        .llong .sys_read
        .llong .sys_write
-       .llong .sys32_open              /* 5 */
+       .llong .compat_sys_open         /* 5 */
        .llong .sys_close
        .llong .sys32_waitpid
        .llong .sys32_creat
index dc2a69d412a204820546107a47ab7c676036a7de..58c61219d08e0765646450c30cba107936db01ab 100644 (file)
@@ -111,7 +111,7 @@ static int pSeries_reconfig_add_node(const char *path, struct property *proplist
        struct device_node *np;
        int err = -ENOMEM;
 
-       np = kcalloc(1, sizeof(*np), GFP_KERNEL);
+       np = kzalloc(sizeof(*np), GFP_KERNEL);
        if (!np)
                goto out_err;
 
index 206619080e669b42cfdb3003dc85e715bf6e8221..214914a95a504e546a48837995bebfa9571a7eb1 100644 (file)
@@ -867,37 +867,6 @@ off_t ppc32_lseek(unsigned int fd, u32 offset, unsigned int origin)
        return sys_lseek(fd, (int)offset, origin);
 }
 
-/*
- * This is just a version for 32-bit applications which does
- * not force O_LARGEFILE on.
- */
-asmlinkage long sys32_open(const char __user * filename, int flags, int mode)
-{
-       char * tmp;
-       int fd, error;
-
-       tmp = getname(filename);
-       fd = PTR_ERR(tmp);
-       if (!IS_ERR(tmp)) {
-               fd = get_unused_fd();
-               if (fd >= 0) {
-                       struct file * f = filp_open(tmp, flags, mode);
-                       error = PTR_ERR(f);
-                       if (IS_ERR(f))
-                               goto out_error;
-                       fd_install(fd, f);
-               }
-out:
-               putname(tmp);
-       }
-       return fd;
-
-out_error:
-       put_unused_fd(fd);
-       fd = error;
-       goto out;
-}
-
 /* Note: it is necessary to treat bufsiz as an unsigned int,
  * with the corresponding cast to a signed int to insure that the 
  * proper conversion (sign extension) between the register representation of a signed int (msr in 32-bit mode)
index 91ef95ccda4fca400f2efe3fd6d983a2f85a40b8..9939c206afa42c776eef326e92094a29e5eaa211 100644 (file)
@@ -128,7 +128,7 @@ static __inline__ void timer_check_rtc(void)
          * We should have an rtc call that only sets the minutes and
          * seconds like on Intel to avoid problems with non UTC clocks.
          */
-        if ( (time_status & STA_UNSYNC) == 0 &&
+        if (ntp_synced() &&
              xtime.tv_sec - last_rtc_update >= 659 &&
              abs((xtime.tv_nsec/1000) - (1000000-1000000/HZ)) < 500000/HZ &&
              jiffies - wall_jiffies == 1) {
@@ -435,10 +435,7 @@ int do_settimeofday(struct timespec *tv)
         */
        last_rtc_update = new_sec - 658;
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
 
        delta_xsec = mulhdu( (tb_last_stamp-do_gtod.varp->tb_orig_stamp),
                             do_gtod.varp->tb_to_xs );
index a8d5e83ee89fceafa18c46f43001aaebd4938567..7467ae508e6e27e734c1fc9110c2f03e60790900 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/delay.h>
+#include <linux/kprobes.h>
 #include <asm/kdebug.h>
 
 #include <asm/pgtable.h>
@@ -220,7 +221,7 @@ void instruction_breakpoint_exception(struct pt_regs *regs)
        _exception(SIGTRAP, regs, TRAP_BRKPT, regs->nip);
 }
 
-void single_step_exception(struct pt_regs *regs)
+void __kprobes single_step_exception(struct pt_regs *regs)
 {
        regs->msr &= ~MSR_SE;  /* Turn off 'trace' bit */
 
@@ -398,7 +399,7 @@ check_bug_trap(struct pt_regs *regs)
        return 0;
 }
 
-void program_check_exception(struct pt_regs *regs)
+void __kprobes program_check_exception(struct pt_regs *regs)
 {
        if (debugger_fault_handler(regs))
                return;
index 4103cc13f8d62e93eb8d526f3ffa6c061129a52d..0306510bc4ffb00aec0997129c152f2e512890fa 100644 (file)
@@ -15,6 +15,7 @@ SECTIONS
        *(.text .text.*)
        SCHED_TEXT
        LOCK_TEXT
+       KPROBES_TEXT
        *(.fixup)
        . = ALIGN(4096);
        _etext = .;
index 20b0f37e8bf8fbe3ac28c2f0113a97b6aa951675..772f0714a5b7d4be9231b362650c920c1c70cb9c 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/interrupt.h>
 #include <linux/smp_lock.h>
 #include <linux/module.h>
+#include <linux/kprobes.h>
 
 #include <asm/page.h>
 #include <asm/pgtable.h>
@@ -84,8 +85,8 @@ static int store_updates_sp(struct pt_regs *regs)
  * The return value is 0 if the fault was handled, or the signal
  * number if this is a kernel fault that can't be handled here.
  */
-int do_page_fault(struct pt_regs *regs, unsigned long address,
-                 unsigned long error_code)
+int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
+                           unsigned long error_code)
 {
        struct vm_area_struct * vma;
        struct mm_struct *mm = current->mm;
index 8ca485676780de694b31134f2303b094e5053e68..2fd75da1549522b13816e9a9c50e1be8c4db2b42 100644 (file)
@@ -139,10 +139,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
        return 0;
index adc8109f8b7719ca25c910f1600abd90495bc0e2..3e804c736e640eb9340128cf2adb18435a2ee61c 100644 (file)
@@ -37,6 +37,10 @@ config GENERIC_CALIBRATE_DELAY
        bool
        default y
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       default y
+
 source "init/Kconfig"
 
 menu "System type"
index df7a9b9d4cbffb298c77518958b97a9581dbfc4d..02ca69918d7c0992a943f7d7d856149f0145a9a3 100644 (file)
@@ -215,10 +215,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
 
@@ -234,7 +231,7 @@ static long last_rtc_update;
  * timer_interrupt() needs to keep up the real-time clock,
  * as well as call the "do_timer()" routine every clocktick
  */
-static inline void do_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static inline void do_timer_interrupt(int irq, struct pt_regs *regs)
 {
        do_timer(regs);
 #ifndef CONFIG_SMP
@@ -252,7 +249,7 @@ static inline void do_timer_interrupt(int irq, void *dev_id, struct pt_regs *reg
         * RTC clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
         * called as close as possible to 500 ms before the new second starts.
         */
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
@@ -285,7 +282,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
         * locally disabled. -arca
         */
        write_seqlock(&xtime_lock);
-       do_timer_interrupt(irq, NULL, regs);
+       do_timer_interrupt(irq, regs);
        write_sequnlock(&xtime_lock);
 
        return IRQ_HANDLED;
index 6c84da3efc7383d3511434c91ef7815a05b2421d..f4a62a10053c60e6921d00b280d050a90eae8735 100644 (file)
@@ -247,10 +247,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
 
@@ -303,7 +300,7 @@ static long last_rtc_update = 0;
  * timer_interrupt() needs to keep up the real-time clock,
  * as well as call the "do_timer()" routine every clocktick
  */
-static inline void do_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static inline void do_timer_interrupt(int irq, struct pt_regs *regs)
 {
        unsigned long long current_ctc;
        asm ("getcon cr62, %0" : "=r" (current_ctc));
@@ -328,7 +325,7 @@ static inline void do_timer_interrupt(int irq, void *dev_id, struct pt_regs *reg
         * RTC clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
         * called as close as possible to 500 ms before the new second starts.
         */
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
@@ -361,7 +358,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
         * locally disabled. -arca
         */
        write_lock(&xtime_lock);
-       do_timer_interrupt(irq, NULL, regs);
+       do_timer_interrupt(irq, regs);
        write_unlock(&xtime_lock);
 
        return IRQ_HANDLED;
index aca028aa29bfb5d2fb42896a7a73019b4fca4697..aba05394d30a05603685e2bcc62cc9c2b85b4d3b 100644 (file)
@@ -211,6 +211,10 @@ config GENERIC_CALIBRATE_DELAY
        bool
        default y
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       default y
+
 config SUN_PM
        bool
        default y
index 597d3ff6ad68ce16d1a5426a7562cfba3d4e065d..36a40697b8d61e66a9c129a61cb009712199f663 100644 (file)
@@ -840,10 +840,7 @@ static int pci_do_settimeofday(struct timespec *tv)
 
        xtime.tv_sec = tv->tv_sec;
        xtime.tv_nsec = tv->tv_nsec;
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        return 0;
 }
 
index 3b759aefc170e39b69f76d93487da243b46c1dc4..bc015e980341060dc9eb3fa28d6bc9485cb964bd 100644 (file)
@@ -139,7 +139,7 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
 
 
        /* Determine when to update the Mostek clock. */
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
@@ -554,10 +554,7 @@ static int sbus_do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        return 0;
 }
 
index 73ec6aec5ed5c60198f25876bd8e21f079ee3ab2..1e9d8638a28a249823d31f53c7d629d392240088 100644 (file)
@@ -26,6 +26,10 @@ config TIME_INTERPOLATION
        bool
        default y
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       default y
+
 choice
        prompt "Kernel page size"
        default SPARC64_PAGE_SIZE_8KB
index bbf11f85dab15a00a05c4c9d11774a8f93776c13..0d66d07c8c6eead89fa6e5799ec6ba5fcf57873f 100644 (file)
@@ -8,6 +8,7 @@
 #include <linux/kprobes.h>
 #include <asm/kdebug.h>
 #include <asm/signal.h>
+#include <asm/cacheflush.h>
 
 /* We do not have hardware single-stepping on sparc64.
  * So we implement software single-stepping with breakpoint
  * - Mark that we are no longer actively in a kprobe.
  */
 
-int arch_prepare_kprobe(struct kprobe *p)
+int __kprobes arch_prepare_kprobe(struct kprobe *p)
 {
        return 0;
 }
 
-void arch_copy_kprobe(struct kprobe *p)
+void __kprobes arch_copy_kprobe(struct kprobe *p)
 {
        p->ainsn.insn[0] = *p->addr;
        p->ainsn.insn[1] = BREAKPOINT_INSTRUCTION_2;
        p->opcode = *p->addr;
 }
 
-void arch_arm_kprobe(struct kprobe *p)
+void __kprobes arch_arm_kprobe(struct kprobe *p)
 {
        *p->addr = BREAKPOINT_INSTRUCTION;
        flushi(p->addr);
 }
 
-void arch_disarm_kprobe(struct kprobe *p)
+void __kprobes arch_disarm_kprobe(struct kprobe *p)
 {
        *p->addr = p->opcode;
        flushi(p->addr);
 }
 
-void arch_remove_kprobe(struct kprobe *p)
+void __kprobes arch_remove_kprobe(struct kprobe *p)
 {
 }
 
@@ -111,7 +112,7 @@ static inline void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
        }
 }
 
-static int kprobe_handler(struct pt_regs *regs)
+static int __kprobes kprobe_handler(struct pt_regs *regs)
 {
        struct kprobe *p;
        void *addr = (void *) regs->tpc;
@@ -191,8 +192,9 @@ no_kprobe:
  * The original INSN location was REAL_PC, it actually
  * executed at PC and produced destination address NPC.
  */
-static unsigned long relbranch_fixup(u32 insn, unsigned long real_pc,
-                                    unsigned long pc, unsigned long npc)
+static unsigned long __kprobes relbranch_fixup(u32 insn, unsigned long real_pc,
+                                              unsigned long pc,
+                                              unsigned long npc)
 {
        /* Branch not taken, no mods necessary.  */
        if (npc == pc + 0x4UL)
@@ -217,7 +219,8 @@ static unsigned long relbranch_fixup(u32 insn, unsigned long real_pc,
 /* If INSN is an instruction which writes it's PC location
  * into a destination register, fix that up.
  */
-static void retpc_fixup(struct pt_regs *regs, u32 insn, unsigned long real_pc)
+static void __kprobes retpc_fixup(struct pt_regs *regs, u32 insn,
+                                 unsigned long real_pc)
 {
        unsigned long *slot = NULL;
 
@@ -257,7 +260,7 @@ static void retpc_fixup(struct pt_regs *regs, u32 insn, unsigned long real_pc)
  * This function prepares to return from the post-single-step
  * breakpoint trap.
  */
-static void resume_execution(struct kprobe *p, struct pt_regs *regs)
+static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs)
 {
        u32 insn = p->ainsn.insn[0];
 
@@ -315,8 +318,8 @@ static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
 /*
  * Wrapper routine to for handling exceptions.
  */
-int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
-                            void *data)
+int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
+                                      unsigned long val, void *data)
 {
        struct die_args *args = (struct die_args *)data;
        switch (val) {
@@ -344,7 +347,8 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
        return NOTIFY_DONE;
 }
 
-asmlinkage void kprobe_trap(unsigned long trap_level, struct pt_regs *regs)
+asmlinkage void __kprobes kprobe_trap(unsigned long trap_level,
+                                     struct pt_regs *regs)
 {
        BUG_ON(trap_level != 0x170 && trap_level != 0x171);
 
@@ -368,7 +372,7 @@ static struct pt_regs jprobe_saved_regs;
 static struct pt_regs *jprobe_saved_regs_location;
 static struct sparc_stackf jprobe_saved_stack;
 
-int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
 {
        struct jprobe *jp = container_of(p, struct jprobe, kp);
 
@@ -390,7 +394,7 @@ int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
        return 1;
 }
 
-void jprobe_return(void)
+void __kprobes jprobe_return(void)
 {
        preempt_enable_no_resched();
        __asm__ __volatile__(
@@ -403,7 +407,7 @@ extern void jprobe_return_trap_instruction(void);
 
 extern void __show_regs(struct pt_regs * regs);
 
-int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
 {
        u32 *addr = (u32 *) regs->tpc;
 
index 87c1aeb022204eac4faedfb1fc58e0b9e18920e5..7654b8a7f03a6ffb400ac8bbb27a8a02aab82d68 100644 (file)
@@ -152,11 +152,12 @@ asmlinkage int sunos_ioctl (int fd, u32 cmd, u32 arg)
                ret = compat_sys_ioctl(fd, SIOCGIFCONF, arg);
                goto out;
 
-       case _IOW('i', 21, struct ifreq): /* SIOCSIFMTU */
-               ret = sys_ioctl(fd, SIOCSIFMTU, arg);
+       case _IOW('i', 21, struct ifreq32):
+               ret = compat_sys_ioctl(fd, SIOCSIFMTU, arg);
                goto out;
-       case _IOWR('i', 22, struct ifreq): /* SIOCGIFMTU */
-               ret = sys_ioctl(fd, SIOCGIFMTU, arg);
+
+       case _IOWR('i', 22, struct ifreq32):
+               ret = compat_sys_ioctl(fd, SIOCGIFMTU, arg);
                goto out;
 
        case _IOWR('i', 23, struct ifreq32):
index 1d3aa588df8a5a8466113947ae3d3102c021c1e1..7f6239ed252142e52c45f2921de58b339d770086 100644 (file)
@@ -1002,29 +1002,7 @@ asmlinkage long sys32_adjtimex(struct timex32 __user *utp)
 asmlinkage long sparc32_open(const char __user *filename,
                             int flags, int mode)
 {
-       char * tmp;
-       int fd, error;
-
-       tmp = getname(filename);
-       fd = PTR_ERR(tmp);
-       if (!IS_ERR(tmp)) {
-               fd = get_unused_fd();
-               if (fd >= 0) {
-                       struct file * f = filp_open(tmp, flags, mode);
-                       error = PTR_ERR(f);
-                       if (IS_ERR(f))
-                               goto out_error;
-                       fd_install(fd, f);
-               }
-out:
-               putname(tmp);
-       }
-       return fd;
-
-out_error:
-       put_unused_fd(fd);
-       fd = error;
-       goto out;
+       return do_sys_open(filename, flags, mode);
 }
 
 extern unsigned long do_mremap(unsigned long addr,
index 362b9c26871b26af39abe9142bf7ed830ff31e66..3f08a32f51a16d2a91231ddcf15701dbdbe3d51b 100644 (file)
@@ -449,7 +449,7 @@ static inline void timer_check_rtc(void)
        static long last_rtc_update;
 
        /* Determine when to update the Mostek clock. */
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
index 950423da8a6ab395767ce6aa8af112bcc773d493..f47d0be39378a2a7603e4470d0bb5962c1e2dc9e 100644 (file)
@@ -17,6 +17,7 @@ SECTIONS
     *(.text)
     SCHED_TEXT
     LOCK_TEXT
+    KPROBES_TEXT
     *(.gnu.warning)
   } =0
   _etext = .;
index 52e9375288a96f34d63cf94261c5b4ba3498b14e..db1e3310e907dc2ba2f4c60a237f2c69664964ff 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/smp_lock.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
+#include <linux/kprobes.h>
 
 #include <asm/page.h>
 #include <asm/pgtable.h>
@@ -117,8 +118,9 @@ unsigned long __init prom_probe_memory (void)
        return tally;
 }
 
-static void unhandled_fault(unsigned long address, struct task_struct *tsk,
-                           struct pt_regs *regs)
+static void __kprobes unhandled_fault(unsigned long address,
+                                     struct task_struct *tsk,
+                                     struct pt_regs *regs)
 {
        if ((unsigned long) address < PAGE_SIZE) {
                printk(KERN_ALERT "Unable to handle kernel NULL "
@@ -304,7 +306,7 @@ cannot_handle:
        unhandled_fault (address, current, regs);
 }
 
-asmlinkage void do_sparc64_fault(struct pt_regs *regs)
+asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
 {
        struct mm_struct *mm = current->mm;
        struct vm_area_struct *vma;
index 3fbaf342a452368972f0db2c9881d4be555ad41d..fdb1ebb308c95bad153283b87e8665b177e0df2d 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/pagemap.h>
 #include <linux/fs.h>
 #include <linux/seq_file.h>
+#include <linux/kprobes.h>
 
 #include <asm/head.h>
 #include <asm/system.h>
@@ -250,7 +251,7 @@ out:
        put_cpu();
 }
 
-void flush_icache_range(unsigned long start, unsigned long end)
+void __kprobes flush_icache_range(unsigned long start, unsigned long end)
 {
        /* Cheetah has coherent I-cache. */
        if (tlb_type == spitfire) {
index 8dfa825eca51f5a92a269400b15b366f92b766ca..b2ee9b53227f5746b19351dc20ea873231831a58 100644 (file)
@@ -119,6 +119,7 @@ __spitfire_flush_tlb_mm_slow:
 #else
 #error unsupported PAGE_SIZE
 #endif
+       .section .kprobes.text, "ax"
        .align          32
        .globl          __flush_icache_page
 __flush_icache_page:   /* %o0 = phys_page */
@@ -201,6 +202,7 @@ dflush4:stxa                %g0, [%o4] ASI_DCACHE_TAG
         nop
 #endif /* DCACHE_ALIASING_POSSIBLE */
 
+       .previous .text
        .align          32
 __prefill_dtlb:
        rdpr            %pstate, %g7
index a777e57dbf893a2b92517ec804eea57c4ab03acc..1ab431a53ac3d0cc3eb336d5d1c07a996e7ab554 100644 (file)
@@ -27,7 +27,7 @@ export LDFLAGS HOSTCFLAGS HOSTLDFLAGS UML_OBJCOPYFLAGS
 endif
 endif
 
-CFLAGS += -U__$(SUBARCH)__ -U$(SUBARCH) $(STUB_CFLAGS)
+CFLAGS += -U__$(SUBARCH)__ -U$(SUBARCH)
 
 ifneq ($(CONFIG_GPROF),y)
 ARCH_CFLAGS += -DUM_FASTCALL
index d705daa2d8543119127775040796b7904525a306..0aa620970adb5a4e930f139a649ed3874742e3d6 100644 (file)
@@ -12,3 +12,4 @@ DEFINE_STR(UM_KERN_WARNING, KERN_WARNING);
 DEFINE_STR(UM_KERN_NOTICE, KERN_NOTICE);
 DEFINE_STR(UM_KERN_INFO, KERN_INFO);
 DEFINE_STR(UM_KERN_DEBUG, KERN_DEBUG);
+DEFINE(HOST_ELF_CLASS, ELF_CLASS);
index 6e348cb6de24a8eb1a0e6be8fa33868d72bbe73b..84c0868cd5613610c4f874aa280283d2d5f0a35b 100644 (file)
 #define access_ok(type, addr, size) \
        CHOOSE_MODE_PROC(access_ok_tt, access_ok_skas, type, addr, size)
 
-/* this function will go away soon - use access_ok() instead */
-static inline int __deprecated verify_area(int type, const void __user *addr, unsigned long size)
-{
-       return (CHOOSE_MODE_PROC(verify_area_tt, verify_area_skas, type, addr,
-                               size));
-}
-
 static inline int copy_from_user(void *to, const void __user *from, int n)
 {
        return(CHOOSE_MODE_PROC(copy_from_user_tt, copy_from_user_skas, to,
index 5597bd39e6b54a9f9d93ac914327c5eb1fb264ed..64fa062cc1192bd60178d035cfe2e9bad80d67a3 100644 (file)
@@ -196,7 +196,7 @@ static void init_highmem(void)
 
 static void __init fixaddr_user_init( void)
 {
-#if CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA
+#ifdef CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA
        long size = FIXADDR_USER_END - FIXADDR_USER_START;
        pgd_t *pgd;
        pud_t *pud;
index d3c1560e3ed85365bf1a93ffa6c644c38d6f3727..7a1662419c0c6d703e3f8d2f96d877aa379d643d 100644 (file)
@@ -9,6 +9,9 @@ obj-y = aio.o elf_aux.o file.o process.o signal.o start_up.o time.o tt.o \
 USER_OBJS := aio.o elf_aux.o file.o process.o signal.o start_up.o time.o tt.o \
        tty.o
 
+elf_aux.o: $(ARCH_DIR)/kernel-offsets.h
+CFLAGS_elf_aux.o += -I$(objtree)/arch/um
+
 CFLAGS_user_syms.o += -DSUBARCH_$(SUBARCH)
 
 HAVE_AIO_ABI := $(shell [ -r /usr/include/linux/aio_abi.h ] && \
index 4cca3e9c23fe065c3fb2c5a84464d7cd7ab44178..1399520a85889d79c37862f160233946939cbf22 100644 (file)
@@ -12,8 +12,9 @@
 #include "init.h"
 #include "elf_user.h"
 #include "mem_user.h"
+#include <kernel-offsets.h>
 
-#if ELF_CLASS == ELFCLASS32
+#if HOST_ELF_CLASS == ELFCLASS32
 typedef Elf32_auxv_t elf_auxv_t;
 #else
 typedef Elf64_auxv_t elf_auxv_t;
index 9f8ecd1fdd9614b03a05c5fc03dd1d3d01b42132..a1070af2bcd823a1d2c580afbfb1c156b14242f5 100644 (file)
@@ -2,6 +2,7 @@
 #include <linux/stddef.h>
 #include <linux/sched.h>
 #include <linux/time.h>
+#include <linux/elf.h>
 #include <asm/page.h>
 
 #define DEFINE(sym, val) \
index 220e875cbe292c09641f66534610ce55177145d5..998541eade41e0cd80f16cfc0a9de8835dd8467e 100644 (file)
@@ -2,6 +2,7 @@
 #include <linux/stddef.h>
 #include <linux/sched.h>
 #include <linux/time.h>
+#include <linux/elf.h>
 #include <asm/page.h>
 
 #define DEFINE(sym, val) \
index f722a268238a69f8921f09f63c9df3003c4b6763..ea3fd8844ff06b1bc4df01188db13407def7b833 100644 (file)
@@ -66,7 +66,7 @@ static irqreturn_t timer_interrupt (int irq, void *dummy, struct pt_regs *regs)
         * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
         * called as close as possible to 500 ms before the new second starts.
         */
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
@@ -169,10 +169,7 @@ int do_settimeofday(struct timespec *tv)
        xtime.tv_sec = tv->tv_sec;
        xtime.tv_nsec = tv->tv_nsec;
 
-       time_adjust = 0;                /* stop active adjtime () */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
 
        write_sequnlock_irq (&xtime_lock);
        clock_was_set();
index 75e52c57f19c0442e2288e7eefef45355b835e71..e63323e03ea9f17f8bec6c0d6aa9d2c94cad0be9 100644 (file)
@@ -65,6 +65,10 @@ config GENERIC_IOMAP
        bool
        default y
 
+config ARCH_MAY_HAVE_PC_FDC
+       bool
+       default y
+
 source "init/Kconfig"
 
 
@@ -148,7 +152,6 @@ config X86_CPUID
          with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
          /dev/cpu/31/cpuid.
 
-# disable it for opteron optimized builds because it pulls in ACPI_BOOT
 config X86_HT
        bool
        depends on SMP && !MK8
@@ -441,6 +444,11 @@ config ISA_DMA_API
        bool
        default y
 
+config GENERIC_PENDING_IRQ
+       bool
+       depends on GENERIC_HARDIRQS && SMP
+       default y
+
 menu "Power management options"
 
 source kernel/power/Kconfig
@@ -465,7 +473,6 @@ config PCI_DIRECT
 config PCI_MMCONFIG
        bool "Support mmconfig PCI config space access"
        depends on PCI && ACPI
-       select ACPI_BOOT
 
 config UNORDERED_IO
        bool "Unordered IO mapping access"
index ff58b2832b75d5b54df35e57a60fc9dd398c16cd..12ea0b6c52e2a8b48cea525ec530d49b8c1d97a5 100644 (file)
@@ -81,7 +81,7 @@ start:
 # This is the setup header, and it must start at %cs:2 (old 0x9020:2)
 
                .ascii  "HdrS"          # header signature
-               .word   0x0203          # header version number (>= 0x0105)
+               .word   0x0204          # header version number (>= 0x0105)
                                        # or else old loadlin-1.5 will fail)
 realmode_swtch:        .word   0, 0            # default_switch, SETUPSEG
 start_sys_seg: .word   SYSSEG
index 18b5bac1c4282fb94a8bb71afbc79a383164246a..c44f5e2ec1006fc93d09c7b958ccd5d4cb0ad709 100644 (file)
@@ -178,7 +178,9 @@ int main(int argc, char ** argv)
                die("Output: seek failed");
        buf[0] = (sys_size & 0xff);
        buf[1] = ((sys_size >> 8) & 0xff);
-       if (write(1, buf, 2) != 2)
+       buf[2] = ((sys_size >> 16) & 0xff);
+       buf[3] = ((sys_size >> 24) & 0xff);
+       if (write(1, buf, 4) != 4)
                die("Write of image length failed");
 
        return 0;                                           /* Everything is OK */
index b97a61e1c71ccd0f73a964d3db5cecb647c58a49..bf57e2362bf4cbd79bc9f5e02d7f11b8b18abc0b 100644 (file)
@@ -135,8 +135,6 @@ CONFIG_PM_STD_PARTITION=""
 # ACPI (Advanced Configuration and Power Interface) Support
 #
 CONFIG_ACPI=y
-CONFIG_ACPI_BOOT=y
-CONFIG_ACPI_INTERPRETER=y
 CONFIG_ACPI_AC=y
 CONFIG_ACPI_BATTERY=y
 CONFIG_ACPI_BUTTON=y
@@ -151,10 +149,8 @@ CONFIG_ACPI_NUMA=y
 CONFIG_ACPI_TOSHIBA=y
 CONFIG_ACPI_BLACKLIST_YEAR=2001
 # CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_BUS=y
 CONFIG_ACPI_EC=y
 CONFIG_ACPI_POWER=y
-CONFIG_ACPI_PCI=y
 CONFIG_ACPI_SYSTEM=y
 # CONFIG_ACPI_CONTAINER is not set
 
index c45d6a05b984f6d1e43e863e6da10b2b5f96d074..f174083d55672335bdbc0a442ae5c8fc4c2a697e 100644 (file)
@@ -307,7 +307,7 @@ ia32_sys_call_table:
        .quad stub32_fork
        .quad sys_read
        .quad sys_write
-       .quad sys32_open                /* 5 */
+       .quad compat_sys_open           /* 5 */
        .quad sys_close
        .quad sys32_waitpid
        .quad sys_creat
index be996d1b691e19e0061391794706484f2dac18a4..04d80406ce4fed4c1a6ce646253675c65b074269 100644 (file)
@@ -969,32 +969,6 @@ long sys32_kill(int pid, int sig)
        return sys_kill(pid, sig);
 }
  
-asmlinkage long sys32_open(const char __user * filename, int flags, int mode)
-{
-       char * tmp;
-       int fd, error;
-
-       /* don't force O_LARGEFILE */
-       tmp = getname(filename);
-       fd = PTR_ERR(tmp);
-       if (!IS_ERR(tmp)) {
-               fd = get_unused_fd();
-               if (fd >= 0) {
-                       struct file *f = filp_open(tmp, flags, mode);
-                       error = PTR_ERR(f);
-                       if (IS_ERR(f)) {
-                               put_unused_fd(fd); 
-                               fd = error;
-                       } else {
-                               fsnotify_open(f->f_dentry);
-                               fd_install(fd, f);
-                       }
-               }
-               putname(tmp);
-       }
-       return fd;
-}
-
 extern asmlinkage long
 sys_timer_create(clockid_t which_clock,
                 struct sigevent __user *timer_event_spec,
index c32e198d7b2bfa8c734cad85c249da3b230585c7..1579bdd0adcde450ad0a4991e1b6986895800822 100644 (file)
@@ -12,7 +12,7 @@ obj-y := process.o signal.o entry.o traps.o irq.o \
 obj-$(CONFIG_X86_MCE)         += mce.o
 obj-$(CONFIG_X86_MCE_INTEL)    += mce_intel.o
 obj-$(CONFIG_MTRR)             += ../../i386/kernel/cpu/mtrr/
-obj-$(CONFIG_ACPI_BOOT)                += acpi/
+obj-$(CONFIG_ACPI)             += acpi/
 obj-$(CONFIG_X86_MSR)          += msr.o
 obj-$(CONFIG_MICROCODE)                += microcode.o
 obj-$(CONFIG_X86_CPUID)                += cpuid.o
index d2c2ee5f9a88fdcb42a5b00f1bbda0b5da7b82a5..7da9ace890bd1337b8fba3d0da149d6a43378fed 100644 (file)
@@ -1,3 +1,3 @@
-obj-$(CONFIG_ACPI_BOOT)                := boot.o
-boot-$(CONFIG_ACPI_BOOT)       := ../../../i386/kernel/acpi/boot.o
+obj-y                  := boot.o
+boot-y                 := ../../../i386/kernel/acpi/boot.o
 obj-$(CONFIG_ACPI_SLEEP)       += sleep.o wakeup.o
index 7a275de6df22347e01ffb3b7f3926baba350e545..148f6f7ea315889f1bf0d0d64d92b6b44db7bad2 100644 (file)
@@ -47,7 +47,6 @@
 #include <asm/proto.h>
 #include <asm/tlbflush.h>
 
-
 /* --------------------------------------------------------------------------
                               Low-Level Sleep Support
    -------------------------------------------------------------------------- */
@@ -77,11 +76,12 @@ static void init_low_mapping(void)
  * Create an identity mapped page table and copy the wakeup routine to
  * low memory.
  */
-int acpi_save_state_mem (void)
+int acpi_save_state_mem(void)
 {
        init_low_mapping();
 
-       memcpy((void *) acpi_wakeup_address, &wakeup_start, &wakeup_end - &wakeup_start);
+       memcpy((void *)acpi_wakeup_address, &wakeup_start,
+              &wakeup_end - &wakeup_start);
        acpi_copy_wakeup_routine(acpi_wakeup_address);
 
        return 0;
@@ -90,7 +90,7 @@ int acpi_save_state_mem (void)
 /*
  * acpi_restore_state
  */
-void acpi_restore_state_mem (void)
+void acpi_restore_state_mem(void)
 {
        set_pgd(pgd_offset(current->mm, 0UL), low_ptr);
        flush_tlb_all();
@@ -108,7 +108,8 @@ void __init acpi_reserve_bootmem(void)
 {
        acpi_wakeup_address = (unsigned long)alloc_bootmem_low(PAGE_SIZE);
        if ((&wakeup_end - &wakeup_start) > PAGE_SIZE)
-               printk(KERN_CRIT "ACPI: Wakeup code way too big, will crash on attempt to suspend\n");
+               printk(KERN_CRIT
+                      "ACPI: Wakeup code way too big, will crash on attempt to suspend\n");
 }
 
 static int __init acpi_sleep_setup(char *str)
@@ -127,6 +128,8 @@ static int __init acpi_sleep_setup(char *str)
 
 __setup("acpi_sleep=", acpi_sleep_setup);
 
-#endif /*CONFIG_ACPI_SLEEP*/
+#endif                         /*CONFIG_ACPI_SLEEP */
 
-void acpi_pci_link_exit(void) {}
+void acpi_pci_link_exit(void)
+{
+}
index b548dea4e5b95e30c01f369f0c95dcd06db67551..116ac5f53dced70d0098178e57b7e09207d90603 100644 (file)
@@ -85,7 +85,7 @@ int __init e820_mapped(unsigned long start, unsigned long end, unsigned type)
                struct e820entry *ei = &e820.map[i]; 
                if (type && ei->type != type) 
                        continue;
-               if (ei->addr >= end || ei->addr + ei->size < start) 
+               if (ei->addr >= end || ei->addr + ei->size <= start)
                        continue; 
                return 1; 
        } 
index 096d470e280f38d6e64eb179a23525ecaa1252e5..be51dbe1f75ec1a91765e8a4735a052ae144c6e1 100644 (file)
@@ -784,8 +784,9 @@ ENTRY(execve)
        ret
        CFI_ENDPROC
 
-ENTRY(page_fault)
+KPROBE_ENTRY(page_fault)
        errorentry do_page_fault
+       .previous .text
 
 ENTRY(coprocessor_error)
        zeroentry do_coprocessor_error
@@ -797,13 +798,14 @@ ENTRY(device_not_available)
        zeroentry math_state_restore
 
        /* runs on exception stack */
-ENTRY(debug)
+KPROBE_ENTRY(debug)
        CFI_STARTPROC
        pushq $0
        CFI_ADJUST_CFA_OFFSET 8         
        paranoidentry do_debug
        jmp paranoid_exit
        CFI_ENDPROC
+       .previous .text
 
        /* runs on exception stack */   
 ENTRY(nmi)
@@ -854,8 +856,9 @@ paranoid_schedule:
        jmp paranoid_userspace
        CFI_ENDPROC
 
-ENTRY(int3)
+KPROBE_ENTRY(int3)
        zeroentry do_int3       
+       .previous .text
 
 ENTRY(overflow)
        zeroentry do_overflow
@@ -892,8 +895,9 @@ ENTRY(stack_segment)
        jmp paranoid_exit
        CFI_ENDPROC
 
-ENTRY(general_protection)
+KPROBE_ENTRY(general_protection)
        errorentry do_general_protection
+       .previous .text
 
 ENTRY(alignment_check)
        errorentry do_alignment_check
index 30c843a5efddf7cb2c3ed9312e2aadcbfb16d95d..b1c144f73149854da5e9bb277e4309e281b60ba3 100644 (file)
 #include <asm/smp.h>
 #include <asm/ipi.h>
 
-#if defined(CONFIG_ACPI_BUS)
+#if defined(CONFIG_ACPI)
 #include <acpi/acpi_bus.h>
 #endif
 
 /* which logical CPU number maps to which CPU (physical APIC ID) */
-u8 x86_cpu_to_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
+u8 x86_cpu_to_apicid[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = BAD_APICID };
 EXPORT_SYMBOL(x86_cpu_to_apicid);
 u8 x86_cpu_to_log_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
 
@@ -47,7 +47,7 @@ void __init clustered_apic_check(void)
        u8 cluster_cnt[NUM_APIC_CLUSTERS];
        int num_cpus = 0;
 
-#if defined(CONFIG_ACPI_BUS)
+#if defined(CONFIG_ACPI)
        /*
         * Some x86_64 machines use physical APIC mode regardless of how many
         * procs/clusters are present (x86_64 ES7000 is an example).
index 9703da7202e368fe97b73b197c57465f1f3e9f34..f6523dd1bc0938fb6f21ff811af0b8292d77ca46 100644 (file)
@@ -72,10 +72,14 @@ static void cluster_send_IPI_mask(cpumask_t mask, int vector)
 static void cluster_send_IPI_allbutself(int vector)
 {
        cpumask_t mask = cpu_online_map;
-       cpu_clear(smp_processor_id(), mask);
+       int me = get_cpu(); /* Ensure we are not preempted when we clear */
+
+       cpu_clear(me, mask);
 
        if (!cpus_empty(mask))
                cluster_send_IPI_mask(mask, vector);
+
+       put_cpu();
 }
 
 static void cluster_send_IPI_all(int vector)
index d206d7e49cf5a5381e0c72c96d202bb77c677020..40e0aca088fbce3d1ba03e3139c552d23ad3b241 100644 (file)
@@ -70,7 +70,7 @@ static struct irq_pin_list {
        short apic, pin, next;
 } irq_2_pin[PIN_MAP_SIZE];
 
-int vector_irq[NR_VECTORS] = { [0 ... NR_VECTORS - 1] = -1};
+int vector_irq[NR_VECTORS] __read_mostly = { [0 ... NR_VECTORS - 1] = -1};
 #ifdef CONFIG_PCI_MSI
 #define vector_to_irq(vector)  \
        (platform_legacy_irq(vector) ? vector : vector_irq[vector])
@@ -78,6 +78,54 @@ int vector_irq[NR_VECTORS] = { [0 ... NR_VECTORS - 1] = -1};
 #define vector_to_irq(vector)  (vector)
 #endif
 
+#define __DO_ACTION(R, ACTION, FINAL)                                  \
+                                                                       \
+{                                                                      \
+       int pin;                                                        \
+       struct irq_pin_list *entry = irq_2_pin + irq;                   \
+                                                                       \
+       for (;;) {                                                      \
+               unsigned int reg;                                       \
+               pin = entry->pin;                                       \
+               if (pin == -1)                                          \
+                       break;                                          \
+               reg = io_apic_read(entry->apic, 0x10 + R + pin*2);      \
+               reg ACTION;                                             \
+               io_apic_modify(entry->apic, reg);                       \
+               if (!entry->next)                                       \
+                       break;                                          \
+               entry = irq_2_pin + entry->next;                        \
+       }                                                               \
+       FINAL;                                                          \
+}
+
+#ifdef CONFIG_SMP
+static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t mask)
+{
+       unsigned long flags;
+       unsigned int dest;
+       cpumask_t tmp;
+
+       cpus_and(tmp, mask, cpu_online_map);
+       if (cpus_empty(tmp))
+               tmp = TARGET_CPUS;
+
+       cpus_and(mask, tmp, CPU_MASK_ALL);
+
+       dest = cpu_mask_to_apicid(mask);
+
+       /*
+        * Only the high 8 bits are valid.
+        */
+       dest = SET_APIC_LOGICAL_ID(dest);
+
+       spin_lock_irqsave(&ioapic_lock, flags);
+       __DO_ACTION(1, = dest, )
+       set_irq_info(irq, mask);
+       spin_unlock_irqrestore(&ioapic_lock, flags);
+}
+#endif
+
 /*
  * The common case is 1:1 IRQ<->pin mappings. Sometimes there are
  * shared ISA-space IRQs, so we have to support them. We are super
@@ -101,26 +149,6 @@ static void add_pin_to_irq(unsigned int irq, int apic, int pin)
        entry->pin = pin;
 }
 
-#define __DO_ACTION(R, ACTION, FINAL)                                  \
-                                                                       \
-{                                                                      \
-       int pin;                                                        \
-       struct irq_pin_list *entry = irq_2_pin + irq;                   \
-                                                                       \
-       for (;;) {                                                      \
-               unsigned int reg;                                       \
-               pin = entry->pin;                                       \
-               if (pin == -1)                                          \
-                       break;                                          \
-               reg = io_apic_read(entry->apic, 0x10 + R + pin*2);      \
-               reg ACTION;                                             \
-               io_apic_modify(entry->apic, reg);                       \
-               if (!entry->next)                                       \
-                       break;                                          \
-               entry = irq_2_pin + entry->next;                        \
-       }                                                               \
-       FINAL;                                                          \
-}
 
 #define DO_ACTION(name,R,ACTION, FINAL)                                        \
                                                                        \
@@ -655,7 +683,7 @@ static inline int IO_APIC_irq_trigger(int irq)
 }
 
 /* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */
-u8 irq_vector[NR_IRQ_VECTORS] = { FIRST_DEVICE_VECTOR , 0 };
+u8 irq_vector[NR_IRQ_VECTORS] __read_mostly = { FIRST_DEVICE_VECTOR , 0 };
 
 int assign_irq_vector(int irq)
 {
@@ -767,6 +795,7 @@ static void __init setup_IO_APIC_irqs(void)
                spin_lock_irqsave(&ioapic_lock, flags);
                io_apic_write(apic, 0x11+2*pin, *(((int *)&entry)+1));
                io_apic_write(apic, 0x10+2*pin, *(((int *)&entry)+0));
+               set_native_irq_info(irq, TARGET_CPUS);
                spin_unlock_irqrestore(&ioapic_lock, flags);
        }
        }
@@ -1314,6 +1343,7 @@ static unsigned int startup_edge_ioapic_irq(unsigned int irq)
  */
 static void ack_edge_ioapic_irq(unsigned int irq)
 {
+       move_irq(irq);
        if ((irq_desc[irq].status & (IRQ_PENDING | IRQ_DISABLED))
                                        == (IRQ_PENDING | IRQ_DISABLED))
                mask_IO_APIC_irq(irq);
@@ -1343,26 +1373,10 @@ static unsigned int startup_level_ioapic_irq (unsigned int irq)
 
 static void end_level_ioapic_irq (unsigned int irq)
 {
+       move_irq(irq);
        ack_APIC_irq();
 }
 
-static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t mask)
-{
-       unsigned long flags;
-       unsigned int dest;
-
-       dest = cpu_mask_to_apicid(mask);
-
-       /*
-        * Only the high 8 bits are valid.
-        */
-       dest = SET_APIC_LOGICAL_ID(dest);
-
-       spin_lock_irqsave(&ioapic_lock, flags);
-       __DO_ACTION(1, = dest, )
-       spin_unlock_irqrestore(&ioapic_lock, flags);
-}
-
 #ifdef CONFIG_PCI_MSI
 static unsigned int startup_edge_ioapic_vector(unsigned int vector)
 {
@@ -1375,6 +1389,7 @@ static void ack_edge_ioapic_vector(unsigned int vector)
 {
        int irq = vector_to_irq(vector);
 
+       move_native_irq(vector);
        ack_edge_ioapic_irq(irq);
 }
 
@@ -1389,6 +1404,7 @@ static void end_level_ioapic_vector (unsigned int vector)
 {
        int irq = vector_to_irq(vector);
 
+       move_native_irq(vector);
        end_level_ioapic_irq(irq);
 }
 
@@ -1406,14 +1422,17 @@ static void unmask_IO_APIC_vector (unsigned int vector)
        unmask_IO_APIC_irq(irq);
 }
 
+#ifdef CONFIG_SMP
 static void set_ioapic_affinity_vector (unsigned int vector,
                                        cpumask_t cpu_mask)
 {
        int irq = vector_to_irq(vector);
 
+       set_native_irq_info(vector, cpu_mask);
        set_ioapic_affinity_irq(irq, cpu_mask);
 }
-#endif
+#endif // CONFIG_SMP
+#endif // CONFIG_PCI_MSI
 
 /*
  * Level and edge triggered IO-APIC interrupts need different handling,
@@ -1424,7 +1443,7 @@ static void set_ioapic_affinity_vector (unsigned int vector,
  * races.
  */
 
-static struct hw_interrupt_type ioapic_edge_type = {
+static struct hw_interrupt_type ioapic_edge_type __read_mostly = {
        .typename = "IO-APIC-edge",
        .startup        = startup_edge_ioapic,
        .shutdown       = shutdown_edge_ioapic,
@@ -1432,10 +1451,12 @@ static struct hw_interrupt_type ioapic_edge_type = {
        .disable        = disable_edge_ioapic,
        .ack            = ack_edge_ioapic,
        .end            = end_edge_ioapic,
+#ifdef CONFIG_SMP
        .set_affinity = set_ioapic_affinity,
+#endif
 };
 
-static struct hw_interrupt_type ioapic_level_type = {
+static struct hw_interrupt_type ioapic_level_type __read_mostly = {
        .typename = "IO-APIC-level",
        .startup        = startup_level_ioapic,
        .shutdown       = shutdown_level_ioapic,
@@ -1443,7 +1464,9 @@ static struct hw_interrupt_type ioapic_level_type = {
        .disable        = disable_level_ioapic,
        .ack            = mask_and_ack_level_ioapic,
        .end            = end_level_ioapic,
+#ifdef CONFIG_SMP
        .set_affinity = set_ioapic_affinity,
+#endif
 };
 
 static inline void init_IO_APIC_traps(void)
@@ -1506,7 +1529,7 @@ static void ack_lapic_irq (unsigned int irq)
 
 static void end_lapic_irq (unsigned int i) { /* nothing */ }
 
-static struct hw_interrupt_type lapic_irq_type = {
+static struct hw_interrupt_type lapic_irq_type __read_mostly = {
        .typename = "local-APIC-edge",
        .startup = NULL, /* startup_irq() not used for IRQ0 */
        .shutdown = NULL, /* shutdown_irq() not used for IRQ0 */
@@ -1841,7 +1864,7 @@ device_initcall(ioapic_init_sysfs);
                           ACPI-based IOAPIC Configuration
    -------------------------------------------------------------------------- */
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 
 #define IO_APIC_MAX_ID         0xFE
 
@@ -1918,12 +1941,13 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
        spin_lock_irqsave(&ioapic_lock, flags);
        io_apic_write(ioapic, 0x11+2*pin, *(((int *)&entry)+1));
        io_apic_write(ioapic, 0x10+2*pin, *(((int *)&entry)+0));
+       set_native_irq_info(use_pci_vector() ?  entry.vector : irq, TARGET_CPUS);
        spin_unlock_irqrestore(&ioapic_lock, flags);
 
        return 0;
 }
 
-#endif /*CONFIG_ACPI_BOOT*/
+#endif /* CONFIG_ACPI */
 
 
 /*
@@ -1931,6 +1955,7 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
  * we need to reprogram the ioredtbls to cater for the cpus which have come online
  * so mask in all cases should simply be TARGET_CPUS
  */
+#ifdef CONFIG_SMP
 void __init setup_ioapic_dest(void)
 {
        int pin, ioapic, irq, irq_entry;
@@ -1949,3 +1974,4 @@ void __init setup_ioapic_dest(void)
 
        }
 }
+#endif
index 5c6dc705148299e5cede75693244e10ebe367410..df08c43276a07fffee23a7dd7edf28feb92b2de7 100644 (file)
@@ -74,7 +74,7 @@ static inline int is_IF_modifier(kprobe_opcode_t *insn)
        return 0;
 }
 
-int arch_prepare_kprobe(struct kprobe *p)
+int __kprobes arch_prepare_kprobe(struct kprobe *p)
 {
        /* insn: must be on special executable page on x86_64. */
        up(&kprobe_mutex);
@@ -189,7 +189,7 @@ static inline s32 *is_riprel(u8 *insn)
        return NULL;
 }
 
-void arch_copy_kprobe(struct kprobe *p)
+void __kprobes arch_copy_kprobe(struct kprobe *p)
 {
        s32 *ripdisp;
        memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE);
@@ -215,21 +215,21 @@ void arch_copy_kprobe(struct kprobe *p)
        p->opcode = *p->addr;
 }
 
-void arch_arm_kprobe(struct kprobe *p)
+void __kprobes arch_arm_kprobe(struct kprobe *p)
 {
        *p->addr = BREAKPOINT_INSTRUCTION;
        flush_icache_range((unsigned long) p->addr,
                           (unsigned long) p->addr + sizeof(kprobe_opcode_t));
 }
 
-void arch_disarm_kprobe(struct kprobe *p)
+void __kprobes arch_disarm_kprobe(struct kprobe *p)
 {
        *p->addr = p->opcode;
        flush_icache_range((unsigned long) p->addr,
                           (unsigned long) p->addr + sizeof(kprobe_opcode_t));
 }
 
-void arch_remove_kprobe(struct kprobe *p)
+void __kprobes arch_remove_kprobe(struct kprobe *p)
 {
        up(&kprobe_mutex);
        free_insn_slot(p->ainsn.insn);
@@ -261,7 +261,7 @@ static inline void set_current_kprobe(struct kprobe *p, struct pt_regs *regs)
                kprobe_saved_rflags &= ~IF_MASK;
 }
 
-static void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
+static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
 {
        regs->eflags |= TF_MASK;
        regs->eflags &= ~IF_MASK;
@@ -272,7 +272,8 @@ static void prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
                regs->rip = (unsigned long)p->ainsn.insn;
 }
 
-void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs)
+void __kprobes arch_prepare_kretprobe(struct kretprobe *rp,
+                                     struct pt_regs *regs)
 {
        unsigned long *sara = (unsigned long *)regs->rsp;
         struct kretprobe_instance *ri;
@@ -295,7 +296,7 @@ void arch_prepare_kretprobe(struct kretprobe *rp, struct pt_regs *regs)
  * Interrupts are disabled on entry as trap3 is an interrupt gate and they
  * remain disabled thorough out this function.
  */
-int kprobe_handler(struct pt_regs *regs)
+int __kprobes kprobe_handler(struct pt_regs *regs)
 {
        struct kprobe *p;
        int ret = 0;
@@ -310,7 +311,8 @@ int kprobe_handler(struct pt_regs *regs)
                   Disarm the probe we just hit, and ignore it. */
                p = get_kprobe(addr);
                if (p) {
-                       if (kprobe_status == KPROBE_HIT_SS) {
+                       if (kprobe_status == KPROBE_HIT_SS &&
+                               *p->ainsn.insn == BREAKPOINT_INSTRUCTION) {
                                regs->eflags &= ~TF_MASK;
                                regs->eflags |= kprobe_saved_rflags;
                                unlock_kprobes();
@@ -360,7 +362,10 @@ int kprobe_handler(struct pt_regs *regs)
                         * either a probepoint or a debugger breakpoint
                         * at this address.  In either case, no further
                         * handling of this interrupt is appropriate.
+                        * Back up over the (now missing) int3 and run
+                        * the original instruction.
                         */
+                       regs->rip = (unsigned long)addr;
                        ret = 1;
                }
                /* Not one of ours: let kernel handle it */
@@ -399,7 +404,7 @@ no_kprobe:
 /*
  * Called when we hit the probe point at kretprobe_trampoline
  */
-int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
 {
         struct kretprobe_instance *ri = NULL;
         struct hlist_head *head;
@@ -478,7 +483,7 @@ int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
  * that is atop the stack is the address following the copied instruction.
  * We need to make it the address following the original instruction.
  */
-static void resume_execution(struct kprobe *p, struct pt_regs *regs)
+static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs)
 {
        unsigned long *tos = (unsigned long *)regs->rsp;
        unsigned long next_rip = 0;
@@ -536,7 +541,7 @@ static void resume_execution(struct kprobe *p, struct pt_regs *regs)
  * Interrupts are disabled on entry as trap1 is an interrupt gate and they
  * remain disabled thoroughout this function.  And we hold kprobe lock.
  */
-int post_kprobe_handler(struct pt_regs *regs)
+int __kprobes post_kprobe_handler(struct pt_regs *regs)
 {
        if (!kprobe_running())
                return 0;
@@ -571,7 +576,7 @@ out:
 }
 
 /* Interrupts disabled, kprobe_lock held. */
-int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
+int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
 {
        if (current_kprobe->fault_handler
            && current_kprobe->fault_handler(current_kprobe, regs, trapnr))
@@ -590,8 +595,8 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
 /*
  * Wrapper routine for handling exceptions.
  */
-int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
-                            void *data)
+int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
+                                      unsigned long val, void *data)
 {
        struct die_args *args = (struct die_args *)data;
        switch (val) {
@@ -619,7 +624,7 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
        return NOTIFY_DONE;
 }
 
-int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
 {
        struct jprobe *jp = container_of(p, struct jprobe, kp);
        unsigned long addr;
@@ -640,7 +645,7 @@ int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
        return 1;
 }
 
-void jprobe_return(void)
+void __kprobes jprobe_return(void)
 {
        preempt_enable_no_resched();
        asm volatile ("       xchg   %%rbx,%%rsp     \n"
@@ -651,7 +656,7 @@ void jprobe_return(void)
                      (jprobe_saved_rsp):"memory");
 }
 
-int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
+int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
 {
        u8 *addr = (u8 *) (regs->rip - 1);
        unsigned long stack_addr = (unsigned long)jprobe_saved_rsp;
index 79c362d03e2e8badd0602a2fbb7fba7fd1c5a6bf..8d8ed6ae1d0c8d880f96558b7a8f865a80ea2ac5 100644 (file)
@@ -74,7 +74,7 @@ static unsigned int num_processors = 0;
 physid_mask_t phys_cpu_present_map = PHYSID_MASK_NONE;
 
 /* ACPI MADT entry parsing functions */
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 extern struct acpi_boot_flags acpi_boot;
 #ifdef CONFIG_X86_LOCAL_APIC
 extern int acpi_parse_lapic (acpi_table_entry_header *header);
@@ -84,7 +84,7 @@ extern int acpi_parse_lapic_nmi (acpi_table_entry_header *header);
 #ifdef CONFIG_X86_IO_APIC
 extern int acpi_parse_ioapic (acpi_table_entry_header *header);
 #endif /*CONFIG_X86_IO_APIC*/
-#endif /*CONFIG_ACPI_BOOT*/
+#endif /*CONFIG_ACPI*/
 
 u8 bios_cpu_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
 
@@ -519,8 +519,6 @@ void __init get_smp_config (void)
        struct intel_mp_floating *mpf = mpf_found;
 
        /*
-        * ACPI may be used to obtain the entire SMP configuration or just to 
-        * enumerate/configure processors (CONFIG_ACPI_BOOT).  Note that 
         * ACPI supports both logical (e.g. Hyper-Threading) and physical 
         * processors, where MPS only supports physical.
         */
@@ -673,7 +671,7 @@ void __init find_smp_config (void)
                             ACPI-based MP Configuration
    -------------------------------------------------------------------------- */
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 
 void __init mp_register_lapic_address (
        u64                     address)
@@ -929,11 +927,9 @@ int mp_register_gsi(u32 gsi, int edge_level, int active_high_low)
        if (acpi_irq_model != ACPI_IRQ_MODEL_IOAPIC)
                return gsi;
 
-#ifdef CONFIG_ACPI_BUS
        /* Don't set up the ACPI SCI because it's already set up */
        if (acpi_fadt.sci_int == gsi)
                return gsi;
-#endif
 
        ioapic = mp_find_ioapic(gsi);
        if (ioapic < 0) {
@@ -973,13 +969,11 @@ int mp_register_gsi(u32 gsi, int edge_level, int active_high_low)
                if (gsi < MAX_GSI_NUM) {
                        if (gsi > 15)
                                gsi = pci_irq++;
-#ifdef CONFIG_ACPI_BUS
                        /*
                         * Don't assign IRQ used by ACPI SCI
                         */
                        if (gsi == acpi_fadt.sci_int)
                                gsi = pci_irq++;
-#endif
                        gsi_to_irq[irq] = gsi;
                } else {
                        printk(KERN_ERR "GSI %u is too high\n", gsi);
@@ -994,4 +988,4 @@ int mp_register_gsi(u32 gsi, int edge_level, int active_high_low)
 }
 
 #endif /*CONFIG_X86_IO_APIC*/
-#endif /*CONFIG_ACPI_BOOT*/
+#endif /*CONFIG_ACPI*/
index 64a8e05d5811b82fd258365d539ea37c72ed0b2c..caf164959e197d25f100b54c1195ef19257e9c72 100644 (file)
@@ -463,6 +463,8 @@ void touch_nmi_watchdog (void)
         */
        for (i = 0; i < NR_CPUS; i++)
                per_cpu(nmi_touch, i) = 1;
+
+       touch_softlockup_watchdog();
 }
 
 void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason)
@@ -522,14 +524,14 @@ asmlinkage void do_nmi(struct pt_regs * regs, long error_code)
 
        nmi_enter();
        add_pda(__nmi_count,1);
-       if (!nmi_callback(regs, cpu))
+       if (!rcu_dereference(nmi_callback)(regs, cpu))
                default_do_nmi(regs);
        nmi_exit();
 }
 
 void set_nmi_callback(nmi_callback_t callback)
 {
-       nmi_callback = callback;
+       rcu_assign_pointer(nmi_callback, callback);
 }
 
 void unset_nmi_callback(void)
index 7577f9d7a75d8373f1a79be83c4e30c63b867f19..8661f82ac70b409d96a70b31b84ad87c485fbd30 100644 (file)
@@ -310,6 +310,7 @@ void __show_regs(struct pt_regs * regs)
 
 void show_regs(struct pt_regs *regs)
 {
+       printk("CPU %d:", smp_processor_id());
        __show_regs(regs);
        show_trace(&regs->rsp);
 }
index 116a491e2961bbca273d7319559e285be6e2aed0..0511d8087910d077741a93ce811a4241ee67e0e2 100644 (file)
  * Machine setup..
  */
 
-struct cpuinfo_x86 boot_cpu_data;
+struct cpuinfo_x86 boot_cpu_data __read_mostly;
 
 unsigned long mmu_cr4_features;
 
 int acpi_disabled;
 EXPORT_SYMBOL(acpi_disabled);
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 extern int __initdata acpi_ht;
 extern acpi_interrupt_flags    acpi_sci_flags;
 int __initdata acpi_force = 0;
@@ -294,7 +294,7 @@ static __init void parse_cmdline_early (char ** cmdline_p)
                        maxcpus = simple_strtoul(from + 8, NULL, 0);
                }
 #endif
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
                /* "acpi=off" disables both ACPI table parsing and interpreter init */
                if (!memcmp(from, "acpi=off", 8))
                        disable_acpi();
@@ -566,7 +566,7 @@ void __init setup_arch(char **cmdline_p)
 
        init_memory_mapping(0, (end_pfn_map << PAGE_SHIFT));
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
        /*
         * Initialize the ACPI boot-time table parser (gets the RSDP and SDT).
         * Call this early for SRAT node setup.
@@ -658,7 +658,7 @@ void __init setup_arch(char **cmdline_p)
 
        check_ioapic();
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
        /*
         * Read APIC and some other early information from ACPI tables.
         */
index 34082c1cc41e397f4254de5a6d22ba474ffeb90d..e3ffcacc8c90bf40d17a778c684401a9d66b17d3 100644 (file)
@@ -36,7 +36,7 @@ struct desc_ptr idt_descr = { 256 * 16, (unsigned long) idt_table };
 
 char boot_cpu_stack[IRQSTACKSIZE] __attribute__((section(".bss.page_aligned")));
 
-unsigned long __supported_pte_mask = ~0UL;
+unsigned long __supported_pte_mask __read_mostly = ~0UL;
 static int do_not_nx __initdata = 0;
 
 /* noexec=on|off
index fa25e39fe54dfc4aab4390c95b45039da0202558..90aeccd1519074c27b65524c6fa8bc601f0efb09 100644 (file)
 /* Number of siblings per CPU package */
 int smp_num_siblings = 1;
 /* Package ID of each logical CPU */
-u8 phys_proc_id[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
-u8 cpu_core_id[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID };
+u8 phys_proc_id[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = BAD_APICID };
+u8 cpu_core_id[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = BAD_APICID };
 EXPORT_SYMBOL(phys_proc_id);
 EXPORT_SYMBOL(cpu_core_id);
 
 /* Bitmask of currently online CPUs */
-cpumask_t cpu_online_map;
+cpumask_t cpu_online_map __read_mostly;
 
 EXPORT_SYMBOL(cpu_online_map);
 
@@ -88,8 +88,8 @@ struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
 /* Set when the idlers are all forked */
 int smp_threads_ready;
 
-cpumask_t cpu_sibling_map[NR_CPUS] __cacheline_aligned;
-cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned;
+cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly;
+cpumask_t cpu_core_map[NR_CPUS] __read_mostly;
 EXPORT_SYMBOL(cpu_core_map);
 
 /*
index 66bf6ddeb0c334a956c6bc2e75beeca9262b5f9e..7b6abe0582536f54f5c5aea12587d22d3ab92f1d 100644 (file)
@@ -176,10 +176,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
 
        write_sequnlock_irq(&xtime_lock);
        clock_was_set();
@@ -471,7 +468,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  * off) isn't likely to go away much sooner anyway.
  */
 
-       if ((~time_status & STA_UNSYNC) && xtime.tv_sec > rtc_update &&
+       if (ntp_synced() && xtime.tv_sec > rtc_update &&
                abs(xtime.tv_nsec - 500000000) <= tick_nsec / 2) {
                set_rtc_mmss(xtime.tv_sec);
                rtc_update = xtime.tv_sec + 660;
@@ -1041,6 +1038,7 @@ static int timer_resume(struct sys_device *dev)
        write_sequnlock_irqrestore(&xtime_lock,flags);
        jiffies += sleep_length;
        wall_jiffies += sleep_length;
+       touch_softlockup_watchdog();
        return 0;
 }
 
index 6ead433a38851783a915e1abd44269a69cd90d90..f238d6078a5a921fcf94c935903b9aaa3aac5bf0 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/nmi.h>
+#include <linux/kprobes.h>
 
 #include <asm/system.h>
 #include <asm/uaccess.h>
@@ -419,8 +420,9 @@ void die_nmi(char *str, struct pt_regs *regs)
        do_exit(SIGSEGV);
 }
 
-static void do_trap(int trapnr, int signr, char *str, 
-                          struct pt_regs * regs, long error_code, siginfo_t *info)
+static void __kprobes do_trap(int trapnr, int signr, char *str,
+                             struct pt_regs * regs, long error_code,
+                             siginfo_t *info)
 {
        conditional_sti(regs);
 
@@ -504,7 +506,8 @@ DO_ERROR(18, SIGSEGV, "reserved", reserved)
 DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
 DO_ERROR( 8, SIGSEGV, "double fault", double_fault)
 
-asmlinkage void do_general_protection(struct pt_regs * regs, long error_code)
+asmlinkage void __kprobes do_general_protection(struct pt_regs * regs,
+                                               long error_code)
 {
        conditional_sti(regs);
 
@@ -622,7 +625,7 @@ asmlinkage void default_do_nmi(struct pt_regs *regs)
                io_check_error(reason, regs);
 }
 
-asmlinkage void do_int3(struct pt_regs * regs, long error_code)
+asmlinkage void __kprobes do_int3(struct pt_regs * regs, long error_code)
 {
        if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP) == NOTIFY_STOP) {
                return;
@@ -653,7 +656,8 @@ asmlinkage struct pt_regs *sync_regs(struct pt_regs *eregs)
 }
 
 /* runs on IST stack. */
-asmlinkage void do_debug(struct pt_regs * regs, unsigned long error_code)
+asmlinkage void __kprobes do_debug(struct pt_regs * regs,
+                                  unsigned long error_code)
 {
        unsigned long condition;
        struct task_struct *tsk = current;
index 2a94f9b60b2dd3eec9937cab4799f793582129f5..d4abb07af52dbef72da991331845b4438251a60b 100644 (file)
@@ -21,6 +21,7 @@ SECTIONS
        *(.text)
        SCHED_TEXT
        LOCK_TEXT
+       KPROBES_TEXT
        *(.fixup)
        *(.gnu.warning)
        } = 0x9090
index ca914c3bd49cf9ee3042a06426facc57516830fe..816732d8858c3195c7b6d78419b2b0b537de3f10 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/vt_kern.h>             /* For unblank_screen() */
 #include <linux/compiler.h>
 #include <linux/module.h>
+#include <linux/kprobes.h>
 
 #include <asm/system.h>
 #include <asm/uaccess.h>
@@ -294,7 +295,8 @@ int exception_trace = 1;
  *     bit 2 == 0 means kernel, 1 means user-mode
  *      bit 3 == 1 means fault was an instruction fetch
  */
-asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
+asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
+                                       unsigned long error_code)
 {
        struct task_struct *tsk;
        struct mm_struct *mm;
index 6a156f5692ae78a520a4dc0694a78f70b4a6c71a..04f7a33e144c4bbbd05befd65d6c396184e6e75d 100644 (file)
 #define Dprintk(x...)
 #endif
 
-struct pglist_data *node_data[MAX_NUMNODES];
+struct pglist_data *node_data[MAX_NUMNODES] __read_mostly;
 bootmem_data_t plat_node_bdata[MAX_NUMNODES];
 
 int memnode_shift;
 u8  memnodemap[NODEMAPSIZE];
 
-unsigned char cpu_to_node[NR_CPUS] = { [0 ... NR_CPUS-1] = NUMA_NO_NODE };
-cpumask_t     node_to_cpumask[MAX_NUMNODES];
+unsigned char cpu_to_node[NR_CPUS] __read_mostly = { [0 ... NR_CPUS-1] = NUMA_NO_NODE };
+cpumask_t     node_to_cpumask[MAX_NUMNODES] __read_mostly;
 
 int numa_off __initdata;
 
index 37c92e841deca791f5d44df955babcb8d0361bf5..bb34e5ef916c610da0b989cc57fd1b241160b7b6 100644 (file)
@@ -8,7 +8,7 @@ CFLAGS += -Iarch/i386/pci
 obj-y          := i386.o
 obj-$(CONFIG_PCI_DIRECT)+= direct.o
 obj-y          += fixup.o
-obj-$(CONFIG_ACPI_PCI) += acpi.o
+obj-$(CONFIG_ACPI)     += acpi.o
 obj-y                  += legacy.o irq.o common.o
 # mmconfig has a 64bit special
 obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o
index 291985f0d2e4bb37d806b4d9bafb872e2d6602f6..4f0c05abd4089d161f7e32e4a93b3ccdcd9b4446 100644 (file)
@@ -8,7 +8,7 @@ CFLAGS += -I arch/i386/pci
 obj-y          := i386.o
 obj-$(CONFIG_PCI_DIRECT)+= direct.o
 obj-y          += fixup.o
-obj-$(CONFIG_ACPI_PCI) += acpi.o
+obj-$(CONFIG_ACPI)     += acpi.o
 obj-y                  += legacy.o irq.o common.o
 # mmconfig has a 64bit special
 obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o
index e07287db5a40da91f6ce377e14cd9b356843a9f9..1ac7d5ce7456659ecf771df51580aacdb8282454 100644 (file)
@@ -122,10 +122,7 @@ int do_settimeofday(struct timespec *tv)
        set_normalized_timespec(&xtime, sec, nsec);
        set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       time_adjust = 0;                /* stop active adjtime() */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
        write_sequnlock_irq(&xtime_lock);
        return 0;
 }
@@ -184,7 +181,7 @@ again:
                next += CCOUNT_PER_JIFFY;
                do_timer (regs); /* Linux handler in kernel/timer.c */
 
-               if ((time_status & STA_UNSYNC) == 0 &&
+               if (ntp_synced() &&
                    xtime.tv_sec - last_rtc_update >= 659 &&
                    abs((xtime.tv_nsec/1000)-(1000000-1000000/HZ))<5000000/HZ &&
                    jiffies - wall_jiffies == 1) {
index 3df47f93c9db01e0a19da8af237ab800ae9d34b1..dfd4bcfc59758332d8ae82fc1d0db2e009c9b26a 100644 (file)
@@ -191,6 +191,8 @@ static unsigned int cbc_process_encrypt(const struct cipher_desc *desc,
        u8 *iv = desc->info;
        unsigned int done = 0;
 
+       nbytes -= bsize;
+
        do {
                xor(iv, src);
                fn(crypto_tfm_ctx(tfm), dst, iv);
@@ -198,7 +200,7 @@ static unsigned int cbc_process_encrypt(const struct cipher_desc *desc,
 
                src += bsize;
                dst += bsize;
-       } while ((done += bsize) < nbytes);
+       } while ((done += bsize) <= nbytes);
 
        return done;
 }
@@ -219,6 +221,8 @@ static unsigned int cbc_process_decrypt(const struct cipher_desc *desc,
        u8 *iv = desc->info;
        unsigned int done = 0;
 
+       nbytes -= bsize;
+
        do {
                u8 *tmp_dst = *dst_p;
 
@@ -230,7 +234,7 @@ static unsigned int cbc_process_decrypt(const struct cipher_desc *desc,
 
                src += bsize;
                dst += bsize;
-       } while ((done += bsize) < nbytes);
+       } while ((done += bsize) <= nbytes);
 
        return done;
 }
@@ -243,12 +247,14 @@ static unsigned int ecb_process(const struct cipher_desc *desc, u8 *dst,
        void (*fn)(void *, u8 *, const u8 *) = desc->crfn;
        unsigned int done = 0;
 
+       nbytes -= bsize;
+
        do {
                fn(crypto_tfm_ctx(tfm), dst, src);
 
                src += bsize;
                dst += bsize;
-       } while ((done += bsize) < nbytes);
+       } while ((done += bsize) <= nbytes);
 
        return done;
 }
index 9663132ed82547d3584a280b19c14a26c0895a0a..86c8654a0ca940d183adb4f945fa757b358e0d48 100644 (file)
@@ -8,7 +8,7 @@
 obj-$(CONFIG_PCI)              += pci/
 obj-$(CONFIG_PARISC)           += parisc/
 obj-y                          += video/
-obj-$(CONFIG_ACPI_BOOT)                += acpi/
+obj-$(CONFIG_ACPI)             += acpi/
 # PnP must come after ACPI since it will eventually need to check if acpi
 # was used and do nothing if so
 obj-$(CONFIG_PNP)              += pnp/
index ba13896cae407732b29342116790613fe9a5d083..3998c9d35fe19ee59014ae24b17e394f1d4f4581 100644 (file)
@@ -3,7 +3,6 @@
 #
 
 menu "ACPI (Advanced Configuration and Power Interface) Support"
-       depends on PM
        depends on !X86_VISWS
        depends on !IA64_HP_SIM
        depends on IA64 || X86
@@ -11,6 +10,8 @@ menu "ACPI (Advanced Configuration and Power Interface) Support"
 config ACPI
        bool "ACPI Support"
        depends on IA64 || X86
+       select PM
+       select PCI
 
        default y
        ---help---
@@ -43,20 +44,10 @@ config ACPI
 
 if ACPI
 
-config ACPI_BOOT
-       bool
-       default y
-
-config ACPI_INTERPRETER
-       bool
-       default y
-
-if ACPI_INTERPRETER
-
 config ACPI_SLEEP
-       bool "Sleep States (EXPERIMENTAL)"
+       bool "Sleep States"
        depends on X86 && (!SMP || SUSPEND_SMP)
-       depends on EXPERIMENTAL && PM
+       depends on PM
        default y
        ---help---
          This option adds support for ACPI suspend states. 
@@ -90,16 +81,16 @@ config ACPI_SLEEP_PROC_SLEEP
 config ACPI_AC
        tristate "AC Adapter"
        depends on X86
-       default m
+       default y
        help
          This driver adds support for the AC Adapter object, which indicates
-         whether a system is on AC, or not.  Typically, only mobile systems 
-         have this object, since desktops are always on AC.
+         whether a system is on AC, or not. If you have a system that can
+         switch between A/C and battery, say Y.
 
 config ACPI_BATTERY
        tristate "Battery"
        depends on X86
-       default m
+       default y
        help
          This driver adds support for battery information through
          /proc/acpi/battery. If you have a mobile system with a battery, 
@@ -107,18 +98,17 @@ config ACPI_BATTERY
 
 config ACPI_BUTTON
        tristate "Button"
-       default m
+       default y
        help
-         This driver registers for events based on buttons, such as the
-         power, sleep, and lid switch.  In the future, a daemon will read
-         /proc/acpi/event and perform user-defined actions such as shutting
-         down the system.  Until then, you can cat it, and see output when
-         a button is pressed.
+         This driver handles events on the power, sleep and lid buttons.
+         A daemon reads /proc/acpi/event and perform user-defined actions
+         such as shutting down the system.  This is necessary for
+         software controlled poweroff.
 
 config ACPI_VIDEO
        tristate "Video"
-       depends on EXPERIMENTAL
-       default m
+       depends on X86
+       default y
        help
          This driver implement the ACPI Extensions For Display Adapters
          for integrated graphics devices on motherboard, as specified in
@@ -129,10 +119,9 @@ config ACPI_VIDEO
          for your integrated video device.
 
 config ACPI_HOTKEY
-       tristate "Generic Hotkey"
-       depends on ACPI_INTERPRETER
+       tristate "Generic Hotkey (EXPERIMENTAL)"
        depends on EXPERIMENTAL
-       depends on !IA64_SGI_SN
+       depends on X86
        default n
        help
          Experimental consolidated hotkey driver.
@@ -140,31 +129,30 @@ config ACPI_HOTKEY
 
 config ACPI_FAN
        tristate "Fan"
-       default m
+       default y
        help
          This driver adds support for ACPI fan devices, allowing user-mode 
          applications to perform basic fan control (on, off, status).
 
 config ACPI_PROCESSOR
        tristate "Processor"
-       default m
+       default y
        help
          This driver installs ACPI as the idle handler for Linux, and uses
          ACPI C2 and C3 processor states to save power, on systems that
-         support it.
+         support it.  It is required by several flavors of cpufreq
+         Performance-state drivers.
 
 config ACPI_HOTPLUG_CPU
-       bool "Processor Hotplug (EXPERIMENTAL)"
-       depends on ACPI_PROCESSOR && HOTPLUG_CPU && EXPERIMENTAL
+       bool
+       depends on ACPI_PROCESSOR && HOTPLUG_CPU
        select ACPI_CONTAINER
-       default n
-        ---help---
-        Select this option if your platform support physical CPU hotplug.
+       default y
 
 config ACPI_THERMAL
        tristate "Thermal Zone"
        depends on ACPI_PROCESSOR
-       default m
+       default y
        help
          This driver adds support for ACPI thermal zones.  Most mobile and
          some desktop systems support ACPI thermal zones.  It is HIGHLY
@@ -180,7 +168,7 @@ config ACPI_NUMA
 config ACPI_ASUS
         tristate "ASUS/Medion Laptop Extras"
        depends on X86
-       default m
+       default y
         ---help---
           This driver provides support for extra features of ACPI-compatible
           ASUS laptops. As some of Medion laptops are made by ASUS, it may also
@@ -209,7 +197,7 @@ config ACPI_ASUS
 config ACPI_IBM
        tristate "IBM ThinkPad Laptop Extras"
        depends on X86
-       default m
+       default y
        ---help---
          This is a Linux ACPI driver for the IBM ThinkPad laptops. It adds
          support for Fn-Fx key combinations, Bluetooth control, video
@@ -222,7 +210,7 @@ config ACPI_IBM
 config ACPI_TOSHIBA
        tristate "Toshiba Laptop Extras"
        depends on X86
-       default m
+       default y
        ---help---
          This driver adds support for access to certain system settings
          on "legacy free" Toshiba laptops.  These laptops can be recognized by
@@ -263,7 +251,7 @@ config ACPI_CUSTOM_DSDT_FILE
 
 config ACPI_BLACKLIST_YEAR
        int "Disable ACPI for systems before Jan 1st this year"
-       depends on ACPI_INTERPRETER
+       depends on X86
        default 0
        help
          enter a 4-digit year, eg. 2001 to disable ACPI by default
@@ -281,10 +269,6 @@ config ACPI_DEBUG
          of verbosity. Saying Y enables these statements. This will increase
          your kernel size by around 50K.
 
-config ACPI_BUS
-       bool
-       default y
-
 config ACPI_EC
        bool
        depends on X86
@@ -298,10 +282,6 @@ config ACPI_POWER
        bool
        default y
 
-config ACPI_PCI
-       bool
-       default PCI
-
 config ACPI_SYSTEM
        bool
        default y
@@ -309,14 +289,11 @@ config ACPI_SYSTEM
          This driver will enable your system to shut down using ACPI, and
          dump your ACPI DSDT table using /proc/acpi/dsdt.
 
-endif  # ACPI_INTERPRETER
-
 config X86_PM_TIMER
        bool "Power Management Timer Support"
        depends on X86
-       depends on ACPI_BOOT && EXPERIMENTAL
        depends on !X86_64
-       default n
+       default y
        help
          The Power Management Timer is available on all ACPI-capable,
          in most cases even if ACPI is unusable or blacklisted.
index ad67e8f61e6c5ba5db2976155e29ba64d7b35646..a18243488c666cad223183fbe54726f9ba26fbed 100644 (file)
@@ -15,13 +15,13 @@ EXTRA_CFLAGS        += $(ACPI_CFLAGS)
 #
 # ACPI Boot-Time Table Parsing
 #
-obj-$(CONFIG_ACPI_BOOT)                += tables.o
-obj-$(CONFIG_ACPI_INTERPRETER) += blacklist.o
+obj-y                          += tables.o
+obj-y                          += blacklist.o
 
 #
 # ACPI Core Subsystem (Interpreter)
 #
-obj-$(CONFIG_ACPI_INTERPRETER) += osl.o utils.o \
+obj-y                          += osl.o utils.o \
                                   dispatcher/ events/ executer/ hardware/ \
                                   namespace/ parser/ resources/ tables/ \
                                   utilities/
@@ -35,8 +35,8 @@ ifdef CONFIG_CPU_FREQ
 processor-objs += processor_perflib.o                  
 endif
 
-obj-$(CONFIG_ACPI_BUS)         += sleep/
-obj-$(CONFIG_ACPI_BUS)         += bus.o glue.o
+obj-y                          += sleep/
+obj-y                          += bus.o glue.o
 obj-$(CONFIG_ACPI_AC)          += ac.o
 obj-$(CONFIG_ACPI_BATTERY)     += battery.o
 obj-$(CONFIG_ACPI_BUTTON)      += button.o
@@ -44,7 +44,7 @@ obj-$(CONFIG_ACPI_EC)         += ec.o
 obj-$(CONFIG_ACPI_FAN)         += fan.o
 obj-$(CONFIG_ACPI_VIDEO)       += video.o 
 obj-$(CONFIG_ACPI_HOTKEY)      += hotkey.o
-obj-$(CONFIG_ACPI_PCI)         += pci_root.o pci_link.o pci_irq.o pci_bind.o
+obj-y                          += pci_root.o pci_link.o pci_irq.o pci_bind.o
 obj-$(CONFIG_ACPI_POWER)       += power.o
 obj-$(CONFIG_ACPI_PROCESSOR)   += processor.o
 obj-$(CONFIG_ACPI_CONTAINER)   += container.o
@@ -55,5 +55,5 @@ obj-$(CONFIG_ACPI_NUMA)               += numa.o
 obj-$(CONFIG_ACPI_ASUS)                += asus_acpi.o
 obj-$(CONFIG_ACPI_IBM)         += ibm_acpi.o
 obj-$(CONFIG_ACPI_TOSHIBA)     += toshiba_acpi.o
-obj-$(CONFIG_ACPI_BUS)         += scan.o motherboard.o
+obj-y                          += scan.o motherboard.o
 obj-$(CONFIG_ACPI_HOTPLUG_MEMORY)      += acpi_memhotplug.o
index 23ab761dd72176b1b705610433b1536046b877d6..7839b831df94eea57c14a25fc17a310be29982b3 100644 (file)
@@ -32,7 +32,6 @@
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define ACPI_AC_COMPONENT              0x00020000
 #define ACPI_AC_CLASS                  "ac_adapter"
 #define ACPI_AC_HID                    "ACPI0003"
 #define ACPI_AC_STATUS_UNKNOWN         0xFF
 
 #define _COMPONENT             ACPI_AC_COMPONENT
-ACPI_MODULE_NAME               ("acpi_ac")
+ACPI_MODULE_NAME("acpi_ac")
 
-MODULE_AUTHOR("Paul Diefenbaugh");
+    MODULE_AUTHOR("Paul Diefenbaugh");
 MODULE_DESCRIPTION(ACPI_AC_DRIVER_NAME);
 MODULE_LICENSE("GPL");
 
-static int acpi_ac_add (struct acpi_device *device);
-static int acpi_ac_remove (struct acpi_device *device, int type);
+static int acpi_ac_add(struct acpi_device *device);
+static int acpi_ac_remove(struct acpi_device *device, int type);
 static int acpi_ac_open_fs(struct inode *inode, struct file *file);
 
 static struct acpi_driver acpi_ac_driver = {
-       .name =         ACPI_AC_DRIVER_NAME,
-       .class =        ACPI_AC_CLASS,
-       .ids =          ACPI_AC_HID,
-       .ops =          {
-                               .add =          acpi_ac_add,
-                               .remove =       acpi_ac_remove,
-                       },
+       .name = ACPI_AC_DRIVER_NAME,
+       .class = ACPI_AC_CLASS,
+       .ids = ACPI_AC_HID,
+       .ops = {
+               .add = acpi_ac_add,
+               .remove = acpi_ac_remove,
+               },
 };
 
 struct acpi_ac {
-       acpi_handle             handle;
-       unsigned long           state;
+       acpi_handle handle;
+       unsigned long state;
 };
 
 static struct file_operations acpi_ac_fops = {
-       .open           = acpi_ac_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_ac_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 /* --------------------------------------------------------------------------
                                AC Adapter Management
    -------------------------------------------------------------------------- */
 
-static int
-acpi_ac_get_state (
-       struct acpi_ac          *ac)
+static int acpi_ac_get_state(struct acpi_ac *ac)
 {
-       acpi_status             status = AE_OK;
+       acpi_status status = AE_OK;
 
        ACPI_FUNCTION_TRACE("acpi_ac_get_state");
 
@@ -95,24 +92,23 @@ acpi_ac_get_state (
        status = acpi_evaluate_integer(ac->handle, "_PSR", NULL, &ac->state);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error reading AC Adapter state\n"));
+                                 "Error reading AC Adapter state\n"));
                ac->state = ACPI_AC_STATUS_UNKNOWN;
                return_VALUE(-ENODEV);
        }
-       
+
        return_VALUE(0);
 }
 
-
 /* --------------------------------------------------------------------------
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-static struct proc_dir_entry   *acpi_ac_dir;
+static struct proc_dir_entry *acpi_ac_dir;
 
 static int acpi_ac_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_ac          *ac = (struct acpi_ac *) seq->private;
+       struct acpi_ac *ac = (struct acpi_ac *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_ac_seq_show");
 
@@ -139,23 +135,21 @@ static int acpi_ac_seq_show(struct seq_file *seq, void *offset)
 
        return_VALUE(0);
 }
-       
+
 static int acpi_ac_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_ac_seq_show, PDE(inode)->data);
 }
 
-static int
-acpi_ac_add_fs (
-       struct acpi_device      *device)
+static int acpi_ac_add_fs(struct acpi_device *device)
 {
-       struct proc_dir_entry   *entry = NULL;
+       struct proc_dir_entry *entry = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_ac_add_fs");
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
-                       acpi_ac_dir);
+                                                    acpi_ac_dir);
                if (!acpi_device_dir(device))
                        return_VALUE(-ENODEV);
                acpi_device_dir(device)->owner = THIS_MODULE;
@@ -163,11 +157,11 @@ acpi_ac_add_fs (
 
        /* 'state' [R] */
        entry = create_proc_entry(ACPI_AC_FILE_STATE,
-               S_IRUGO, acpi_device_dir(device));
+                                 S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_AC_FILE_STATE));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_AC_FILE_STATE));
        else {
                entry->proc_fops = &acpi_ac_fops;
                entry->data = acpi_driver_data(device);
@@ -177,16 +171,12 @@ acpi_ac_add_fs (
        return_VALUE(0);
 }
 
-
-static int
-acpi_ac_remove_fs (
-       struct acpi_device      *device)
+static int acpi_ac_remove_fs(struct acpi_device *device)
 {
        ACPI_FUNCTION_TRACE("acpi_ac_remove_fs");
 
        if (acpi_device_dir(device)) {
-               remove_proc_entry(ACPI_AC_FILE_STATE,
-                                 acpi_device_dir(device));
+               remove_proc_entry(ACPI_AC_FILE_STATE, acpi_device_dir(device));
 
                remove_proc_entry(acpi_device_bid(device), acpi_ac_dir);
                acpi_device_dir(device) = NULL;
@@ -195,19 +185,14 @@ acpi_ac_remove_fs (
        return_VALUE(0);
 }
 
-
 /* --------------------------------------------------------------------------
                                    Driver Model
    -------------------------------------------------------------------------- */
 
-static void
-acpi_ac_notify (
-       acpi_handle             handle,
-       u32                     event,
-       void                    *data)
+static void acpi_ac_notify(acpi_handle handle, u32 event, void *data)
 {
-       struct acpi_ac          *ac = (struct acpi_ac *) data;
-       struct acpi_device      *device = NULL;
+       struct acpi_ac *ac = (struct acpi_ac *)data;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_ac_notify");
 
@@ -224,21 +209,18 @@ acpi_ac_notify (
                break;
        default:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Unsupported event [0x%x]\n", event));
+                                 "Unsupported event [0x%x]\n", event));
                break;
        }
 
        return_VOID;
 }
 
-
-static int
-acpi_ac_add (
-       struct acpi_device      *device)
+static int acpi_ac_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_ac          *ac = NULL;
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_ac *ac = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_ac_add");
 
@@ -264,19 +246,20 @@ acpi_ac_add (
                goto end;
 
        status = acpi_install_notify_handler(ac->handle,
-               ACPI_DEVICE_NOTIFY, acpi_ac_notify, ac);
+                                            ACPI_DEVICE_NOTIFY, acpi_ac_notify,
+                                            ac);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error installing notify handler\n"));
+                                 "Error installing notify handler\n"));
                result = -ENODEV;
                goto end;
        }
 
-       printk(KERN_INFO PREFIX "%s [%s] (%s)\n", 
-               acpi_device_name(device), acpi_device_bid(device), 
-               ac->state?"on-line":"off-line");
+       printk(KERN_INFO PREFIX "%s [%s] (%s)\n",
+              acpi_device_name(device), acpi_device_bid(device),
+              ac->state ? "on-line" : "off-line");
 
-end:
+      end:
        if (result) {
                acpi_ac_remove_fs(device);
                kfree(ac);
@@ -285,27 +268,23 @@ end:
        return_VALUE(result);
 }
 
-
-static int
-acpi_ac_remove (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_ac_remove(struct acpi_device *device, int type)
 {
-       acpi_status             status = AE_OK;
-       struct acpi_ac          *ac = NULL;
+       acpi_status status = AE_OK;
+       struct acpi_ac *ac = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_ac_remove");
 
        if (!device || !acpi_driver_data(device))
                return_VALUE(-EINVAL);
 
-       ac = (struct acpi_ac *) acpi_driver_data(device);
+       ac = (struct acpi_ac *)acpi_driver_data(device);
 
        status = acpi_remove_notify_handler(ac->handle,
-               ACPI_DEVICE_NOTIFY, acpi_ac_notify);
+                                           ACPI_DEVICE_NOTIFY, acpi_ac_notify);
        if (ACPI_FAILURE(status))
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error removing notify handler\n"));
+                                 "Error removing notify handler\n"));
 
        acpi_ac_remove_fs(device);
 
@@ -314,11 +293,9 @@ acpi_ac_remove (
        return_VALUE(0);
 }
 
-
-static int __init
-acpi_ac_init (void)
+static int __init acpi_ac_init(void)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_ac_init");
 
@@ -336,9 +313,7 @@ acpi_ac_init (void)
        return_VALUE(0);
 }
 
-
-static void __exit
-acpi_ac_exit (void)
+static void __exit acpi_ac_exit(void)
 {
        ACPI_FUNCTION_TRACE("acpi_ac_exit");
 
@@ -349,6 +324,5 @@ acpi_ac_exit (void)
        return_VOID;
 }
 
-
 module_init(acpi_ac_init);
 module_exit(acpi_ac_exit);
index 77285ffe41c5cb0e25360fe23737da2d97fdc760..01a1bd239263bcaa416050ae8184482e1ebbc9e8 100644 (file)
@@ -32,7 +32,6 @@
 #include <linux/memory_hotplug.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define ACPI_MEMORY_DEVICE_COMPONENT           0x08000000UL
 #define ACPI_MEMORY_DEVICE_CLASS               "memory"
 #define ACPI_MEMORY_DEVICE_HID                 "PNP0C80"
@@ -41,8 +40,8 @@
 
 #define _COMPONENT             ACPI_MEMORY_DEVICE_COMPONENT
 
-ACPI_MODULE_NAME               ("acpi_memory")
-MODULE_AUTHOR("Naveen B S <naveen.b.s@intel.com>");
+ACPI_MODULE_NAME("acpi_memory")
+    MODULE_AUTHOR("Naveen B S <naveen.b.s@intel.com>");
 MODULE_DESCRIPTION(ACPI_MEMORY_DEVICE_DRIVER_NAME);
 MODULE_LICENSE("GPL");
 
@@ -56,34 +55,33 @@ MODULE_LICENSE("GPL");
 #define MEMORY_POWER_ON_STATE  1
 #define MEMORY_POWER_OFF_STATE 2
 
-static int acpi_memory_device_add (struct acpi_device *device);
-static int acpi_memory_device_remove (struct acpi_device *device, int type);
+static int acpi_memory_device_add(struct acpi_device *device);
+static int acpi_memory_device_remove(struct acpi_device *device, int type);
 
 static struct acpi_driver acpi_memory_device_driver = {
-       .name =         ACPI_MEMORY_DEVICE_DRIVER_NAME,
-       .class =        ACPI_MEMORY_DEVICE_CLASS,
-       .ids =          ACPI_MEMORY_DEVICE_HID,
-       .ops =          {
-                               .add =          acpi_memory_device_add,
-                               .remove =       acpi_memory_device_remove,
-                       },
+       .name = ACPI_MEMORY_DEVICE_DRIVER_NAME,
+       .class = ACPI_MEMORY_DEVICE_CLASS,
+       .ids = ACPI_MEMORY_DEVICE_HID,
+       .ops = {
+               .add = acpi_memory_device_add,
+               .remove = acpi_memory_device_remove,
+               },
 };
 
 struct acpi_memory_device {
        acpi_handle handle;
-       unsigned int state;             /* State of the memory device */
+       unsigned int state;     /* State of the memory device */
        unsigned short cache_attribute; /* memory cache attribute */
-       unsigned short read_write_attribute;/* memory read/write attribute */
-       u64 start_addr; /* Memory Range start physical addr */
-       u64 end_addr;   /* Memory Range end physical addr */
+       unsigned short read_write_attribute;    /* memory read/write attribute */
+       u64 start_addr;         /* Memory Range start physical addr */
+       u64 end_addr;           /* Memory Range end physical addr */
 };
 
-
 static int
 acpi_memory_get_device_resources(struct acpi_memory_device *mem_device)
 {
        acpi_status status;
-       struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
        struct acpi_resource *resource = NULL;
        struct acpi_resource_address64 address64;
 
@@ -94,15 +92,15 @@ acpi_memory_get_device_resources(struct acpi_memory_device *mem_device)
        if (ACPI_FAILURE(status))
                return_VALUE(-EINVAL);
 
-       resource = (struct acpi_resource *) buffer.pointer;
+       resource = (struct acpi_resource *)buffer.pointer;
        status = acpi_resource_to_address64(resource, &address64);
        if (ACPI_SUCCESS(status)) {
                if (address64.resource_type == ACPI_MEMORY_RANGE) {
                        /* Populate the structure */
                        mem_device->cache_attribute =
-                               address64.attribute.memory.cache_attribute;
+                           address64.attribute.memory.cache_attribute;
                        mem_device->read_write_attribute =
-                       address64.attribute.memory.read_write_attribute;
+                           address64.attribute.memory.read_write_attribute;
                        mem_device->start_addr = address64.min_address_range;
                        mem_device->end_addr = address64.max_address_range;
                }
@@ -114,7 +112,7 @@ acpi_memory_get_device_resources(struct acpi_memory_device *mem_device)
 
 static int
 acpi_memory_get_device(acpi_handle handle,
-       struct acpi_memory_device **mem_device)
+                      struct acpi_memory_device **mem_device)
 {
        acpi_status status;
        acpi_handle phandle;
@@ -128,8 +126,7 @@ acpi_memory_get_device(acpi_handle handle,
 
        status = acpi_get_parent(handle, &phandle);
        if (ACPI_FAILURE(status)) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error in acpi_get_parent\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error in acpi_get_parent\n"));
                return_VALUE(-EINVAL);
        }
 
@@ -137,7 +134,7 @@ acpi_memory_get_device(acpi_handle handle,
        status = acpi_bus_get_device(phandle, &pdevice);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error in acpi_bus_get_device\n"));
+                                 "Error in acpi_bus_get_device\n"));
                return_VALUE(-EINVAL);
        }
 
@@ -147,23 +144,21 @@ acpi_memory_get_device(acpi_handle handle,
         */
        status = acpi_bus_add(&device, pdevice, handle, ACPI_BUS_TYPE_DEVICE);
        if (ACPI_FAILURE(status)) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error in acpi_bus_add\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error in acpi_bus_add\n"));
                return_VALUE(-EINVAL);
        }
 
-end:
+      end:
        *mem_device = acpi_driver_data(device);
        if (!(*mem_device)) {
-               printk(KERN_ERR "\n driver data not found" );
+               printk(KERN_ERR "\n driver data not found");
                return_VALUE(-ENODEV);
        }
 
        return_VALUE(0);
 }
 
-static int
-acpi_memory_check_device(struct acpi_memory_device *mem_device)
+static int acpi_memory_check_device(struct acpi_memory_device *mem_device)
 {
        unsigned long current_status;
 
@@ -171,22 +166,21 @@ acpi_memory_check_device(struct acpi_memory_device *mem_device)
 
        /* Get device present/absent information from the _STA */
        if (ACPI_FAILURE(acpi_evaluate_integer(mem_device->handle, "_STA",
-               NULL, &current_status)))
+                                              NULL, &current_status)))
                return_VALUE(-ENODEV);
        /*
         * Check for device status. Device should be
         * present/enabled/functioning.
         */
        if (!((current_status & ACPI_MEMORY_STA_PRESENT)
-               && (current_status & ACPI_MEMORY_STA_ENABLED)
-               && (current_status & ACPI_MEMORY_STA_FUNCTIONAL)))
+             && (current_status & ACPI_MEMORY_STA_ENABLED)
+             && (current_status & ACPI_MEMORY_STA_FUNCTIONAL)))
                return_VALUE(-ENODEV);
 
        return_VALUE(0);
 }
 
-static int
-acpi_memory_enable_device(struct acpi_memory_device *mem_device)
+static int acpi_memory_enable_device(struct acpi_memory_device *mem_device)
 {
        int result;
 
@@ -196,7 +190,7 @@ acpi_memory_enable_device(struct acpi_memory_device *mem_device)
        result = acpi_memory_get_device_resources(mem_device);
        if (result) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "\nget_device_resources failed\n"));
+                                 "\nget_device_resources failed\n"));
                mem_device->state = MEMORY_INVALID_STATE;
                return result;
        }
@@ -206,11 +200,10 @@ acpi_memory_enable_device(struct acpi_memory_device *mem_device)
         * Note: Assume that this function returns zero on success
         */
        result = add_memory(mem_device->start_addr,
-                       (mem_device->end_addr - mem_device->start_addr) + 1,
-                       mem_device->read_write_attribute);
+                           (mem_device->end_addr - mem_device->start_addr) + 1,
+                           mem_device->read_write_attribute);
        if (result) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "\nadd_memory failed\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "\nadd_memory failed\n"));
                mem_device->state = MEMORY_INVALID_STATE;
                return result;
        }
@@ -218,11 +211,10 @@ acpi_memory_enable_device(struct acpi_memory_device *mem_device)
        return result;
 }
 
-static int
-acpi_memory_powerdown_device(struct acpi_memory_device *mem_device)
+static int acpi_memory_powerdown_device(struct acpi_memory_device *mem_device)
 {
        acpi_status status;
-       struct acpi_object_list arg_list;
+       struct acpi_object_list arg_list;
        union acpi_object arg;
        unsigned long current_status;
 
@@ -234,16 +226,16 @@ acpi_memory_powerdown_device(struct acpi_memory_device *mem_device)
        arg.type = ACPI_TYPE_INTEGER;
        arg.integer.value = 1;
        status = acpi_evaluate_object(mem_device->handle,
-                       "_EJ0", &arg_list, NULL);
+                                     "_EJ0", &arg_list, NULL);
        /* Return on _EJ0 failure */
        if (ACPI_FAILURE(status)) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,"_EJ0 failed.\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "_EJ0 failed.\n"));
                return_VALUE(-ENODEV);
        }
 
        /* Evalute _STA to check if the device is disabled */
        status = acpi_evaluate_integer(mem_device->handle, "_STA",
-               NULL, &current_status);
+                                      NULL, &current_status);
        if (ACPI_FAILURE(status))
                return_VALUE(-ENODEV);
 
@@ -254,8 +246,7 @@ acpi_memory_powerdown_device(struct acpi_memory_device *mem_device)
        return_VALUE(0);
 }
 
-static int
-acpi_memory_disable_device(struct acpi_memory_device *mem_device)
+static int acpi_memory_disable_device(struct acpi_memory_device *mem_device)
 {
        int result;
        u64 start = mem_device->start_addr;
@@ -278,7 +269,7 @@ acpi_memory_disable_device(struct acpi_memory_device *mem_device)
        result = acpi_memory_powerdown_device(mem_device);
        if (result) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                       "Device Power Down failed.\n"));
+                                 "Device Power Down failed.\n"));
                /* Set the status of the device to invalid */
                mem_device->state = MEMORY_INVALID_STATE;
                return result;
@@ -288,8 +279,7 @@ acpi_memory_disable_device(struct acpi_memory_device *mem_device)
        return result;
 }
 
-static void
-acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
+static void acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
 {
        struct acpi_memory_device *mem_device;
        struct acpi_device *device;
@@ -299,37 +289,37 @@ acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
        switch (event) {
        case ACPI_NOTIFY_BUS_CHECK:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "\nReceived BUS CHECK notification for device\n"));
+                                 "\nReceived BUS CHECK notification for device\n"));
                /* Fall Through */
        case ACPI_NOTIFY_DEVICE_CHECK:
                if (event == ACPI_NOTIFY_DEVICE_CHECK)
                        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "\nReceived DEVICE CHECK notification for device\n"));
+                                         "\nReceived DEVICE CHECK notification for device\n"));
                if (acpi_memory_get_device(handle, &mem_device)) {
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                               "Error in finding driver data\n"));
+                                         "Error in finding driver data\n"));
                        return_VOID;
                }
 
                if (!acpi_memory_check_device(mem_device)) {
                        if (acpi_memory_enable_device(mem_device))
                                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                               "Error in acpi_memory_enable_device\n"));
+                                                 "Error in acpi_memory_enable_device\n"));
                }
                break;
        case ACPI_NOTIFY_EJECT_REQUEST:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "\nReceived EJECT REQUEST notification for device\n"));
+                                 "\nReceived EJECT REQUEST notification for device\n"));
 
                if (acpi_bus_get_device(handle, &device)) {
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                       "Device doesn't exist\n"));
+                                         "Device doesn't exist\n"));
                        break;
                }
                mem_device = acpi_driver_data(device);
                if (!mem_device) {
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                       "Driver Data is NULL\n"));
+                                         "Driver Data is NULL\n"));
                        break;
                }
 
@@ -337,26 +327,25 @@ acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
                 * Currently disabling memory device from kernel mode
                 * TBD: Can also be disabled from user mode scripts
                 * TBD: Can also be disabled by Callback registration
-                *      with generic sysfs driver
+                *      with generic sysfs driver
                 */
                if (acpi_memory_disable_device(mem_device))
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                               "Error in acpi_memory_disable_device\n"));
+                                         "Error in acpi_memory_disable_device\n"));
                /*
                 * TBD: Invoke acpi_bus_remove to cleanup data structures
                 */
                break;
        default:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Unsupported event [0x%x]\n", event));
+                                 "Unsupported event [0x%x]\n", event));
                break;
        }
 
        return_VOID;
 }
 
-static int
-acpi_memory_device_add(struct acpi_device *device)
+static int acpi_memory_device_add(struct acpi_device *device)
 {
        int result;
        struct acpi_memory_device *mem_device = NULL;
@@ -391,8 +380,7 @@ acpi_memory_device_add(struct acpi_device *device)
        return_VALUE(result);
 }
 
-static int
-acpi_memory_device_remove (struct acpi_device *device, int type)
+static int acpi_memory_device_remove(struct acpi_device *device, int type)
 {
        struct acpi_memory_device *mem_device = NULL;
 
@@ -401,7 +389,7 @@ acpi_memory_device_remove (struct acpi_device *device, int type)
        if (!device || !acpi_driver_data(device))
                return_VALUE(-EINVAL);
 
-       mem_device = (struct acpi_memory_device *) acpi_driver_data(device);
+       mem_device = (struct acpi_memory_device *)acpi_driver_data(device);
        kfree(mem_device);
 
        return_VALUE(0);
@@ -410,12 +398,11 @@ acpi_memory_device_remove (struct acpi_device *device, int type)
 /*
  * Helper function to check for memory device
  */
-static acpi_status
-is_memory_device(acpi_handle handle)
+static acpi_status is_memory_device(acpi_handle handle)
 {
        char *hardware_id;
        acpi_status status;
-       struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
        struct acpi_device_info *info;
 
        ACPI_FUNCTION_TRACE("is_memory_device");
@@ -432,7 +419,7 @@ is_memory_device(acpi_handle handle)
 
        hardware_id = info->hardware_id.value;
        if ((hardware_id == NULL) ||
-               (strcmp(hardware_id, ACPI_MEMORY_DEVICE_HID)))
+           (strcmp(hardware_id, ACPI_MEMORY_DEVICE_HID)))
                status = AE_ERROR;
 
        acpi_os_free(buffer.pointer);
@@ -440,8 +427,8 @@ is_memory_device(acpi_handle handle)
 }
 
 static acpi_status
-acpi_memory_register_notify_handler (acpi_handle handle,
-       u32 level, void *ctxt, void **retv)
+acpi_memory_register_notify_handler(acpi_handle handle,
+                                   u32 level, void *ctxt, void **retv)
 {
        acpi_status status;
 
@@ -452,10 +439,10 @@ acpi_memory_register_notify_handler (acpi_handle handle,
                return_ACPI_STATUS(AE_OK);      /* continue */
 
        status = acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
-                       acpi_memory_device_notify, NULL);
+                                            acpi_memory_device_notify, NULL);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error installing notify handler\n"));
+                                 "Error installing notify handler\n"));
                return_ACPI_STATUS(AE_OK);      /* continue */
        }
 
@@ -463,8 +450,8 @@ acpi_memory_register_notify_handler (acpi_handle handle,
 }
 
 static acpi_status
-acpi_memory_deregister_notify_handler (acpi_handle handle,
-                              u32 level, void *ctxt, void **retv)
+acpi_memory_deregister_notify_handler(acpi_handle handle,
+                                     u32 level, void *ctxt, void **retv)
 {
        acpi_status status;
 
@@ -475,18 +462,18 @@ acpi_memory_deregister_notify_handler (acpi_handle handle,
                return_ACPI_STATUS(AE_OK);      /* continue */
 
        status = acpi_remove_notify_handler(handle,
-                       ACPI_SYSTEM_NOTIFY, acpi_memory_device_notify);
+                                           ACPI_SYSTEM_NOTIFY,
+                                           acpi_memory_device_notify);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                               "Error removing notify handler\n"));
+                                 "Error removing notify handler\n"));
                return_ACPI_STATUS(AE_OK);      /* continue */
        }
 
        return_ACPI_STATUS(status);
 }
 
-static int __init
-acpi_memory_device_init (void)
+static int __init acpi_memory_device_init(void)
 {
        int result;
        acpi_status status;
@@ -499,21 +486,20 @@ acpi_memory_device_init (void)
                return_VALUE(-ENODEV);
 
        status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
-                               ACPI_UINT32_MAX,
-                               acpi_memory_register_notify_handler,
-                               NULL, NULL);
+                                    ACPI_UINT32_MAX,
+                                    acpi_memory_register_notify_handler,
+                                    NULL, NULL);
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "walk_namespace failed\n"));
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "walk_namespace failed\n"));
                acpi_bus_unregister_driver(&acpi_memory_device_driver);
                return_VALUE(-ENODEV);
-        }
+       }
 
        return_VALUE(0);
 }
 
-static void __exit
-acpi_memory_device_exit (void)
+static void __exit acpi_memory_device_exit(void)
 {
        acpi_status status;
 
@@ -524,12 +510,12 @@ acpi_memory_device_exit (void)
         * handles.
         */
        status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
-                       ACPI_UINT32_MAX,
-                       acpi_memory_deregister_notify_handler,
-                       NULL, NULL);
+                                    ACPI_UINT32_MAX,
+                                    acpi_memory_deregister_notify_handler,
+                                    NULL, NULL);
 
-       if (ACPI_FAILURE (status))
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "walk_namespace failed\n"));
+       if (ACPI_FAILURE(status))
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "walk_namespace failed\n"));
 
        acpi_bus_unregister_driver(&acpi_memory_device_driver);
 
@@ -538,5 +524,3 @@ acpi_memory_device_exit (void)
 
 module_init(acpi_memory_device_init);
 module_exit(acpi_memory_device_exit);
-
-
index a560b1e2da7755319af1c875d3927ffab6fd88fa..fec895af6ae6ccb86587876dd597fa6d25bba4b3 100644 (file)
@@ -61,7 +61,7 @@
 /*
  * Some events we use, same for all Asus
  */
-#define BR_UP       0x10               
+#define BR_UP       0x10
 #define BR_DOWN     0x20
 
 /*
@@ -75,7 +75,6 @@ MODULE_AUTHOR("Julien Lerouge, Karol Kozimor");
 MODULE_DESCRIPTION(ACPI_HOTK_NAME);
 MODULE_LICENSE("GPL");
 
-
 static uid_t asus_uid;
 static gid_t asus_gid;
 module_param(asus_uid, uint, 0);
@@ -83,26 +82,25 @@ MODULE_PARM_DESC(uid, "UID for entries in /proc/acpi/asus.\n");
 module_param(asus_gid, uint, 0);
 MODULE_PARM_DESC(gid, "GID for entries in /proc/acpi/asus.\n");
 
-
 /* For each model, all features implemented, 
  * those marked with R are relative to HOTK, A for absolute */
 struct model_data {
-       char *name;              //name of the laptop________________A
-       char *mt_mled;           //method to handle mled_____________R
-       char *mled_status;       //node to handle mled reading_______A
-       char *mt_wled;           //method to handle wled_____________R
-       char *wled_status;       //node to handle wled reading_______A
-       char *mt_tled;           //method to handle tled_____________R
-       char *tled_status;       //node to handle tled reading_______A
-       char *mt_lcd_switch;     //method to turn LCD ON/OFF_________A
-       char *lcd_status;        //node to read LCD panel state______A
-       char *brightness_up;     //method to set brightness up_______A
-       char *brightness_down;   //guess what ?______________________A
-       char *brightness_set;    //method to set absolute brightness_R
-       char *brightness_get;    //method to get absolute brightness_R
-       char *brightness_status; //node to get brightness____________A
-       char *display_set;       //method to set video output________R
-       char *display_get;       //method to get video output________R
+       char *name;             //name of the laptop________________A
+       char *mt_mled;          //method to handle mled_____________R
+       char *mled_status;      //node to handle mled reading_______A
+       char *mt_wled;          //method to handle wled_____________R
+       char *wled_status;      //node to handle wled reading_______A
+       char *mt_tled;          //method to handle tled_____________R
+       char *tled_status;      //node to handle tled reading_______A
+       char *mt_lcd_switch;    //method to turn LCD ON/OFF_________A
+       char *lcd_status;       //node to read LCD panel state______A
+       char *brightness_up;    //method to set brightness up_______A
+       char *brightness_down;  //guess what ?______________________A
+       char *brightness_set;   //method to set absolute brightness_R
+       char *brightness_get;   //method to get absolute brightness_R
+       char *brightness_status;        //node to get brightness____________A
+       char *display_set;      //method to set video output________R
+       char *display_get;      //method to get video output________R
 };
 
 /*
@@ -110,34 +108,34 @@ struct model_data {
  * about the hotk device
  */
 struct asus_hotk {
-       struct acpi_device *device; //the device we are in
-       acpi_handle handle;         //the handle of the hotk device
-       char status;                //status of the hotk, for LEDs, ...
-       struct model_data *methods; //methods available on the laptop
-       u8 brightness;              //brightness level
+       struct acpi_device *device;     //the device we are in
+       acpi_handle handle;     //the handle of the hotk device
+       char status;            //status of the hotk, for LEDs, ...
+       struct model_data *methods;     //methods available on the laptop
+       u8 brightness;          //brightness level
        enum {
-               A1x = 0,  //A1340D, A1300F
-               A2x,      //A2500H
-               D1x,      //D1
-               L2D,      //L2000D
-               L3C,      //L3800C
-               L3D,      //L3400D
-               L3H,      //L3H, but also L2000E
-               L4R,      //L4500R
-               L5x,      //L5800C 
-               L8L,      //L8400L
-               M1A,      //M1300A
-               M2E,      //M2400E, L4400L
-               M6N,      //M6800N
-               M6R,      //M6700R
-               P30,      //Samsung P30
-               S1x,      //S1300A, but also L1400B and M2400A (L84F)
-               S2x,      //S200 (J1 reported), Victor MP-XP7210
-               xxN,      //M2400N, M3700N, M5200N, S1300N, S5200N, W1OOON
-                         //(Centrino)
+               A1x = 0,        //A1340D, A1300F
+               A2x,            //A2500H
+               D1x,            //D1
+               L2D,            //L2000D
+               L3C,            //L3800C
+               L3D,            //L3400D
+               L3H,            //L3H, but also L2000E
+               L4R,            //L4500R
+               L5x,            //L5800C 
+               L8L,            //L8400L
+               M1A,            //M1300A
+               M2E,            //M2400E, L4400L
+               M6N,            //M6800N
+               M6R,            //M6700R
+               P30,            //Samsung P30
+               S1x,            //S1300A, but also L1400B and M2400A (L84F)
+               S2x,            //S200 (J1 reported), Victor MP-XP7210
+               xxN,            //M2400N, M3700N, M5200N, S1300N, S5200N, W1OOON
+               //(Centrino)
                END_MODEL
-       } model;              //Models currently supported
-       u16 event_count[128]; //count for each event TODO make this better
+       } model;                //Models currently supported
+       u16 event_count[128];   //count for each event TODO make this better
 };
 
 /* Here we go */
@@ -150,7 +148,7 @@ struct asus_hotk {
 #define xxN_PREFIX "\\_SB.PCI0.SBRG.EC0."
 
 static struct model_data model_conf[END_MODEL] = {
-        /*
+       /*
         * Those pathnames are relative to the HOTK / ATKD device :
         *       - mt_mled
         *       - mt_wled
@@ -165,215 +163,197 @@ static struct model_data model_conf[END_MODEL] = {
         */
 
        {
-               .name              = "A1x",
-               .mt_mled           = "MLED",
-               .mled_status       = "\\MAIL",
-               .mt_lcd_switch     = A1x_PREFIX "_Q10",
-               .lcd_status        = "\\BKLI",
-               .brightness_up     = A1x_PREFIX "_Q0E",
-               .brightness_down   = A1x_PREFIX "_Q0F"
-       },
+        .name = "A1x",
+        .mt_mled = "MLED",
+        .mled_status = "\\MAIL",
+        .mt_lcd_switch = A1x_PREFIX "_Q10",
+        .lcd_status = "\\BKLI",
+        .brightness_up = A1x_PREFIX "_Q0E",
+        .brightness_down = A1x_PREFIX "_Q0F"},
 
        {
-               .name              = "A2x",
-               .mt_mled           = "MLED",
-               .mt_wled           = "WLED",
-               .wled_status       = "\\SG66",
-               .mt_lcd_switch     = "\\Q10",
-               .lcd_status        = "\\BAOF",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV",
-               .display_set       = "SDSP",
-               .display_get       = "\\INFB"
-       },
+        .name = "A2x",
+        .mt_mled = "MLED",
+        .mt_wled = "WLED",
+        .wled_status = "\\SG66",
+        .mt_lcd_switch = "\\Q10",
+        .lcd_status = "\\BAOF",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\INFB"},
 
        {
-               .name              = "D1x",
-               .mt_mled           = "MLED",
-               .mt_lcd_switch     = "\\Q0D",
-               .lcd_status        = "\\GP11",
-               .brightness_up     = "\\Q0C",
-               .brightness_down   = "\\Q0B",
-               .brightness_status = "\\BLVL",
-               .display_set       = "SDSP",
-               .display_get       = "\\INFB"
-       },
+        .name = "D1x",
+        .mt_mled = "MLED",
+        .mt_lcd_switch = "\\Q0D",
+        .lcd_status = "\\GP11",
+        .brightness_up = "\\Q0C",
+        .brightness_down = "\\Q0B",
+        .brightness_status = "\\BLVL",
+        .display_set = "SDSP",
+        .display_get = "\\INFB"},
 
        {
-               .name              = "L2D",
-               .mt_mled           = "MLED",
-               .mled_status       = "\\SGP6",
-               .mt_wled           = "WLED",
-               .wled_status       = "\\RCP3",
-               .mt_lcd_switch     = "\\Q10",
-               .lcd_status        = "\\SGP0",
-               .brightness_up     = "\\Q0E",
-               .brightness_down   = "\\Q0F",
-               .display_set       = "SDSP",
-               .display_get       = "\\INFB"
-       },
+        .name = "L2D",
+        .mt_mled = "MLED",
+        .mled_status = "\\SGP6",
+        .mt_wled = "WLED",
+        .wled_status = "\\RCP3",
+        .mt_lcd_switch = "\\Q10",
+        .lcd_status = "\\SGP0",
+        .brightness_up = "\\Q0E",
+        .brightness_down = "\\Q0F",
+        .display_set = "SDSP",
+        .display_get = "\\INFB"},
 
        {
-               .name              = "L3C",
-               .mt_mled           = "MLED",
-               .mt_wled           = "WLED",
-               .mt_lcd_switch     = L3C_PREFIX "_Q10",
-               .lcd_status        = "\\GL32",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV",
-               .display_set       = "SDSP",
-               .display_get       = "\\_SB.PCI0.PCI1.VGAC.NMAP"
-       },
+        .name = "L3C",
+        .mt_mled = "MLED",
+        .mt_wled = "WLED",
+        .mt_lcd_switch = L3C_PREFIX "_Q10",
+        .lcd_status = "\\GL32",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\_SB.PCI0.PCI1.VGAC.NMAP"},
 
        {
-               .name              = "L3D",
-               .mt_mled           = "MLED",
-               .mled_status       = "\\MALD",
-               .mt_wled           = "WLED",
-               .mt_lcd_switch     = "\\Q10",
-               .lcd_status        = "\\BKLG",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV",
-               .display_set       = "SDSP",
-               .display_get       = "\\INFB"
-       },
+        .name = "L3D",
+        .mt_mled = "MLED",
+        .mled_status = "\\MALD",
+        .mt_wled = "WLED",
+        .mt_lcd_switch = "\\Q10",
+        .lcd_status = "\\BKLG",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\INFB"},
 
        {
-               .name              = "L3H",
-               .mt_mled           = "MLED",
-               .mt_wled           = "WLED",
-               .mt_lcd_switch     = "EHK",
-               .lcd_status        = "\\_SB.PCI0.PM.PBC",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV",
-               .display_set       = "SDSP",
-               .display_get       = "\\INFB"
-       },
+        .name = "L3H",
+        .mt_mled = "MLED",
+        .mt_wled = "WLED",
+        .mt_lcd_switch = "EHK",
+        .lcd_status = "\\_SB.PCI0.PM.PBC",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\INFB"},
 
        {
-               .name              = "L4R",
-               .mt_mled           = "MLED",
-               .mt_wled           = "WLED",
-               .wled_status       = "\\_SB.PCI0.SBRG.SG13",
-               .mt_lcd_switch     = xxN_PREFIX "_Q10",
-               .lcd_status        = "\\_SB.PCI0.SBSM.SEO4",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV", 
-               .display_set       = "SDSP",
-               .display_get       = "\\_SB.PCI0.P0P1.VGA.GETD"
-       },
+        .name = "L4R",
+        .mt_mled = "MLED",
+        .mt_wled = "WLED",
+        .wled_status = "\\_SB.PCI0.SBRG.SG13",
+        .mt_lcd_switch = xxN_PREFIX "_Q10",
+        .lcd_status = "\\_SB.PCI0.SBSM.SEO4",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\_SB.PCI0.P0P1.VGA.GETD"},
 
        {
-               .name              = "L5x",
-               .mt_mled           = "MLED",
+        .name = "L5x",
+        .mt_mled = "MLED",
 /* WLED present, but not controlled by ACPI */
-               .mt_tled           = "TLED",
-               .mt_lcd_switch     = "\\Q0D",
-               .lcd_status        = "\\BAOF",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV",
-               .display_set       = "SDSP",
-               .display_get       = "\\INFB"
-       },
+        .mt_tled = "TLED",
+        .mt_lcd_switch = "\\Q0D",
+        .lcd_status = "\\BAOF",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\INFB"},
 
        {
-               .name              = "L8L"
+        .name = "L8L"
 /* No features, but at least support the hotkeys */
-       },
+        },
 
        {
-               .name              = "M1A",
-               .mt_mled           = "MLED",
-               .mt_lcd_switch     = M1A_PREFIX "Q10",
-               .lcd_status        = "\\PNOF",
-               .brightness_up     = M1A_PREFIX "Q0E",
-               .brightness_down   = M1A_PREFIX "Q0F",
-               .brightness_status = "\\BRIT",
-               .display_set       = "SDSP",
-               .display_get       = "\\INFB"
-       },
+        .name = "M1A",
+        .mt_mled = "MLED",
+        .mt_lcd_switch = M1A_PREFIX "Q10",
+        .lcd_status = "\\PNOF",
+        .brightness_up = M1A_PREFIX "Q0E",
+        .brightness_down = M1A_PREFIX "Q0F",
+        .brightness_status = "\\BRIT",
+        .display_set = "SDSP",
+        .display_get = "\\INFB"},
 
        {
-               .name              = "M2E",
-               .mt_mled           = "MLED",
-               .mt_wled           = "WLED",
-               .mt_lcd_switch     = "\\Q10",
-               .lcd_status        = "\\GP06",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV",
-               .display_set       = "SDSP",
-               .display_get       = "\\INFB"
-       },
+        .name = "M2E",
+        .mt_mled = "MLED",
+        .mt_wled = "WLED",
+        .mt_lcd_switch = "\\Q10",
+        .lcd_status = "\\GP06",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\INFB"},
 
        {
-               .name              = "M6N",
-               .mt_mled           = "MLED",
-               .mt_wled           = "WLED",
-               .wled_status       = "\\_SB.PCI0.SBRG.SG13",
-               .mt_lcd_switch     = xxN_PREFIX "_Q10",
-               .lcd_status        = "\\_SB.BKLT",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV",
-               .display_set       = "SDSP",
-               .display_get       = "\\SSTE"
-       },
+        .name = "M6N",
+        .mt_mled = "MLED",
+        .mt_wled = "WLED",
+        .wled_status = "\\_SB.PCI0.SBRG.SG13",
+        .mt_lcd_switch = xxN_PREFIX "_Q10",
+        .lcd_status = "\\_SB.BKLT",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\SSTE"},
        {
-               .name              = "M6R",
-               .mt_mled           = "MLED",
-               .mt_wled           = "WLED",
-               .mt_lcd_switch     = xxN_PREFIX "_Q10",
-               .lcd_status        = "\\_SB.PCI0.SBSM.SEO4",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV",
-               .display_set       = "SDSP",
-               .display_get       = "\\SSTE"
-       },
-
+        .name = "M6R",
+        .mt_mled = "MLED",
+        .mt_wled = "WLED",
+        .mt_lcd_switch = xxN_PREFIX "_Q10",
+        .lcd_status = "\\_SB.PCI0.SBSM.SEO4",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\SSTE"},
 
        {
-               .name              = "P30",
-               .mt_wled           = "WLED",
-               .mt_lcd_switch     = P30_PREFIX "_Q0E",
-               .lcd_status        = "\\BKLT",
-               .brightness_up     = P30_PREFIX "_Q68",
-               .brightness_down   = P30_PREFIX "_Q69",
-               .brightness_get    = "GPLV",
-               .display_set       = "SDSP",
-               .display_get       = "\\DNXT"
-       },
+        .name = "P30",
+        .mt_wled = "WLED",
+        .mt_lcd_switch = P30_PREFIX "_Q0E",
+        .lcd_status = "\\BKLT",
+        .brightness_up = P30_PREFIX "_Q68",
+        .brightness_down = P30_PREFIX "_Q69",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\DNXT"},
 
        {
-               .name              = "S1x",
-               .mt_mled           = "MLED",
-               .mled_status       = "\\EMLE",
-               .mt_wled           = "WLED",
-               .mt_lcd_switch     = S1x_PREFIX "Q10" ,
-               .lcd_status        = "\\PNOF",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV"
-       },
+        .name = "S1x",
+        .mt_mled = "MLED",
+        .mled_status = "\\EMLE",
+        .mt_wled = "WLED",
+        .mt_lcd_switch = S1x_PREFIX "Q10",
+        .lcd_status = "\\PNOF",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV"},
 
        {
-               .name              = "S2x",
-               .mt_mled           = "MLED",
-               .mled_status       = "\\MAIL",
-               .mt_lcd_switch     = S2x_PREFIX "_Q10",
-               .lcd_status        = "\\BKLI",
-               .brightness_up     = S2x_PREFIX "_Q0B",
-               .brightness_down   = S2x_PREFIX "_Q0A"
-       },
+        .name = "S2x",
+        .mt_mled = "MLED",
+        .mled_status = "\\MAIL",
+        .mt_lcd_switch = S2x_PREFIX "_Q10",
+        .lcd_status = "\\BKLI",
+        .brightness_up = S2x_PREFIX "_Q0B",
+        .brightness_down = S2x_PREFIX "_Q0A"},
 
        {
-               .name              = "xxN",
-               .mt_mled           = "MLED",
+        .name = "xxN",
+        .mt_mled = "MLED",
 /* WLED present, but not controlled by ACPI */
-               .mt_lcd_switch     = xxN_PREFIX "_Q10",
-               .lcd_status        = "\\BKLT",
-               .brightness_set    = "SPLV",
-               .brightness_get    = "GPLV",
-               .display_set       = "SDSP",
-               .display_get       = "\\ADVG"
-       }
+        .mt_lcd_switch = xxN_PREFIX "_Q10",
+        .lcd_status = "\\BKLT",
+        .brightness_set = "SPLV",
+        .brightness_get = "GPLV",
+        .display_set = "SDSP",
+        .display_get = "\\ADVG"}
 };
 
 /* procdir we use */
@@ -395,13 +375,13 @@ static struct asus_hotk *hotk;
 static int asus_hotk_add(struct acpi_device *device);
 static int asus_hotk_remove(struct acpi_device *device, int type);
 static struct acpi_driver asus_hotk_driver = {
-       .name =         ACPI_HOTK_NAME,
-       .class =        ACPI_HOTK_CLASS,
-       .ids =          ACPI_HOTK_HID,
-       .ops =          {
-                               .add =          asus_hotk_add,
-                               .remove =       asus_hotk_remove,
-                       },
+       .name = ACPI_HOTK_NAME,
+       .class = ACPI_HOTK_CLASS,
+       .ids = ACPI_HOTK_HID,
+       .ops = {
+               .add = asus_hotk_add,
+               .remove = asus_hotk_remove,
+               },
 };
 
 /* 
@@ -423,11 +403,10 @@ static int write_acpi_int(acpi_handle handle, const char *method, int val,
        in_obj.type = ACPI_TYPE_INTEGER;
        in_obj.integer.value = val;
 
-       status = acpi_evaluate_object(handle, (char *) method, &params, output);
+       status = acpi_evaluate_object(handle, (char *)method, &params, output);
        return (status == AE_OK);
 }
 
-
 static int read_acpi_int(acpi_handle handle, const char *method, int *val)
 {
        struct acpi_buffer output;
@@ -437,7 +416,7 @@ static int read_acpi_int(acpi_handle handle, const char *method, int *val)
        output.length = sizeof(out_obj);
        output.pointer = &out_obj;
 
-       status = acpi_evaluate_object(handle, (char *) method, NULL, &output);
+       status = acpi_evaluate_object(handle, (char *)method, NULL, &output);
        *val = out_obj.integer.value;
        return (status == AE_OK) && (out_obj.type == ACPI_TYPE_INTEGER);
 }
@@ -449,7 +428,7 @@ static int read_acpi_int(acpi_handle handle, const char *method, int *val)
  */
 static int
 proc_read_info(char *page, char **start, off_t off, int count, int *eof,
-               void *data)
+              void *data)
 {
        int len = 0;
        int temp;
@@ -460,7 +439,7 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
         */
 
        len += sprintf(page, ACPI_HOTK_NAME " " ASUS_ACPI_VERSION "\n");
-       len += sprintf(page + len, "Model reference    : %s\n", 
+       len += sprintf(page + len, "Model reference    : %s\n",
                       hotk->methods->name);
        /* 
         * The SFUN method probably allows the original driver to get the list 
@@ -469,7 +448,8 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
         * The significance of others is yet to be found.
         */
        if (read_acpi_int(hotk->handle, "SFUN", &temp))
-               len += sprintf(page + len, "SFUN value         : 0x%04x\n", temp);
+               len +=
+                   sprintf(page + len, "SFUN value         : 0x%04x\n", temp);
        /*
         * Another value for userspace: the ASYM method returns 0x02 for
         * battery low and 0x04 for battery critical, its readings tend to be
@@ -478,7 +458,8 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
         * silently ignored.
         */
        if (read_acpi_int(hotk->handle, "ASYM", &temp))
-               len += sprintf(page + len, "ASYM value         : 0x%04x\n", temp);
+               len +=
+                   sprintf(page + len, "ASYM value         : 0x%04x\n", temp);
        if (asus_info) {
                snprintf(buf, 16, "%d", asus_info->length);
                len += sprintf(page + len, "DSDT length        : %s\n", buf);
@@ -501,7 +482,6 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
        return len;
 }
 
-
 /*
  * /proc handlers
  * We write our info in page, we begin at offset off and cannot write more
@@ -510,8 +490,7 @@ proc_read_info(char *page, char **start, off_t off, int count, int *eof,
  */
 
 /* Generic LED functions */
-static int
-read_led(const char *ledname, int ledmask)
+static int read_led(const char *ledname, int ledmask)
 {
        if (ledname) {
                int led_status;
@@ -525,7 +504,7 @@ read_led(const char *ledname, int ledmask)
        return (hotk->status & ledmask) ? 1 : 0;
 }
 
-static int parse_arg(const char __user *buf, unsigned long count, int *val)
+static int parse_arg(const char __user * buf, unsigned long count, int *val)
 {
        char s[32];
        if (!count)
@@ -542,8 +521,8 @@ static int parse_arg(const char __user *buf, unsigned long count, int *val)
 
 /* FIXME: kill extraneous args so it can be called independently */
 static int
-write_led(const char __user *buffer, unsigned long count,
-          char *ledname, int ledmask, int invert)
+write_led(const char __user * buffer, unsigned long count,
+         char *ledname, int ledmask, int invert)
 {
        int value;
        int led_out = 0;
@@ -555,16 +534,16 @@ write_led(const char __user *buffer, unsigned long count,
        hotk->status =
            (led_out) ? (hotk->status | ledmask) : (hotk->status & ~ledmask);
 
-       if (invert) /* invert target value */
+       if (invert)             /* invert target value */
                led_out = !led_out & 0x1;
 
        if (!write_acpi_int(hotk->handle, ledname, led_out, NULL))
-               printk(KERN_WARNING "Asus ACPI: LED (%s) write failed\n", ledname);
+               printk(KERN_WARNING "Asus ACPI: LED (%s) write failed\n",
+                      ledname);
 
        return count;
 }
 
-
 /*
  * Proc handlers for MLED
  */
@@ -572,12 +551,12 @@ static int
 proc_read_mled(char *page, char **start, off_t off, int count, int *eof,
               void *data)
 {
-       return sprintf(page, "%d\n", read_led(hotk->methods->mled_status, MLED_ON));
+       return sprintf(page, "%d\n",
+                      read_led(hotk->methods->mled_status, MLED_ON));
 }
 
-
 static int
-proc_write_mled(struct file *file, const char __user *buffer,
+proc_write_mled(struct file *file, const char __user * buffer,
                unsigned long count, void *data)
 {
        return write_led(buffer, count, hotk->methods->mt_mled, MLED_ON, 1);
@@ -590,11 +569,12 @@ static int
 proc_read_wled(char *page, char **start, off_t off, int count, int *eof,
               void *data)
 {
-       return sprintf(page, "%d\n", read_led(hotk->methods->wled_status, WLED_ON));
+       return sprintf(page, "%d\n",
+                      read_led(hotk->methods->wled_status, WLED_ON));
 }
 
 static int
-proc_write_wled(struct file *file, const char __user *buffer,
+proc_write_wled(struct file *file, const char __user * buffer,
                unsigned long count, void *data)
 {
        return write_led(buffer, count, hotk->methods->mt_wled, WLED_ON, 0);
@@ -607,35 +587,36 @@ static int
 proc_read_tled(char *page, char **start, off_t off, int count, int *eof,
               void *data)
 {
-       return sprintf(page, "%d\n", read_led(hotk->methods->tled_status, TLED_ON));
+       return sprintf(page, "%d\n",
+                      read_led(hotk->methods->tled_status, TLED_ON));
 }
 
 static int
-proc_write_tled(struct file *file, const char __user *buffer,
+proc_write_tled(struct file *file, const char __user * buffer,
                unsigned long count, void *data)
 {
        return write_led(buffer, count, hotk->methods->mt_tled, TLED_ON, 0);
 }
 
-
 static int get_lcd_state(void)
 {
        int lcd = 0;
 
        if (hotk->model != L3H) {
-       /* We don't have to check anything if we are here */
+               /* We don't have to check anything if we are here */
                if (!read_acpi_int(NULL, hotk->methods->lcd_status, &lcd))
-                       printk(KERN_WARNING "Asus ACPI: Error reading LCD status\n");
-       
+                       printk(KERN_WARNING
+                              "Asus ACPI: Error reading LCD status\n");
+
                if (hotk->model == L2D)
                        lcd = ~lcd;
-       } else { /* L3H and the like have to be handled differently */
+       } else {                /* L3H and the like have to be handled differently */
                acpi_status status = 0;
                struct acpi_object_list input;
                union acpi_object mt_params[2];
                struct acpi_buffer output;
                union acpi_object out_obj;
-               
+
                input.count = 2;
                input.pointer = mt_params;
                /* Note: the following values are partly guessed up, but 
@@ -647,15 +628,17 @@ static int get_lcd_state(void)
 
                output.length = sizeof(out_obj);
                output.pointer = &out_obj;
-               
-               status = acpi_evaluate_object(NULL, hotk->methods->lcd_status, &input, &output);
+
+               status =
+                   acpi_evaluate_object(NULL, hotk->methods->lcd_status,
+                                        &input, &output);
                if (status != AE_OK)
                        return -1;
                if (out_obj.type == ACPI_TYPE_INTEGER)
                        /* That's what the AML code does */
                        lcd = out_obj.integer.value >> 8;
        }
-       
+
        return (lcd & 1);
 }
 
@@ -669,10 +652,13 @@ static int set_lcd_state(int value)
                /* switch */
                if (hotk->model != L3H) {
                        status =
-                           acpi_evaluate_object(NULL, hotk->methods->mt_lcd_switch,
+                           acpi_evaluate_object(NULL,
+                                                hotk->methods->mt_lcd_switch,
                                                 NULL, NULL);
-               } else { /* L3H and the like have to be handled differently */
-                       if (!write_acpi_int(hotk->handle, hotk->methods->mt_lcd_switch, 0x07, NULL))
+               } else {        /* L3H and the like have to be handled differently */
+                       if (!write_acpi_int
+                           (hotk->handle, hotk->methods->mt_lcd_switch, 0x07,
+                            NULL))
                                status = AE_ERROR;
                        /* L3H's AML executes EHK (0x07) upon Fn+F7 keypress, 
                           the exact behaviour is simulated here */
@@ -691,33 +677,33 @@ proc_read_lcd(char *page, char **start, off_t off, int count, int *eof,
        return sprintf(page, "%d\n", get_lcd_state());
 }
 
-
 static int
-proc_write_lcd(struct file *file, const char __user *buffer,
+proc_write_lcd(struct file *file, const char __user * buffer,
               unsigned long count, void *data)
 {
        int value;
-       
+
        count = parse_arg(buffer, count, &value);
        if (count > 0)
                set_lcd_state(value);
        return count;
 }
 
-
 static int read_brightness(void)
 {
        int value;
-       
-       if(hotk->methods->brightness_get) { /* SPLV/GPLV laptop */
-               if (!read_acpi_int(hotk->handle, hotk->methods->brightness_get, 
+
+       if (hotk->methods->brightness_get) {    /* SPLV/GPLV laptop */
+               if (!read_acpi_int(hotk->handle, hotk->methods->brightness_get,
                                   &value))
-                       printk(KERN_WARNING "Asus ACPI: Error reading brightness\n");
-       } else if (hotk->methods->brightness_status) { /* For D1 for example */
-               if (!read_acpi_int(NULL, hotk->methods->brightness_status, 
+                       printk(KERN_WARNING
+                              "Asus ACPI: Error reading brightness\n");
+       } else if (hotk->methods->brightness_status) {  /* For D1 for example */
+               if (!read_acpi_int(NULL, hotk->methods->brightness_status,
                                   &value))
-                       printk(KERN_WARNING "Asus ACPI: Error reading brightness\n");
-       } else /* No GPLV method */
+                       printk(KERN_WARNING
+                              "Asus ACPI: Error reading brightness\n");
+       } else                  /* No GPLV method */
                value = hotk->brightness;
        return value;
 }
@@ -730,23 +716,25 @@ static void set_brightness(int value)
        acpi_status status = 0;
 
        /* SPLV laptop */
-       if(hotk->methods->brightness_set) {
-               if (!write_acpi_int(hotk->handle, hotk->methods->brightness_set, 
+       if (hotk->methods->brightness_set) {
+               if (!write_acpi_int(hotk->handle, hotk->methods->brightness_set,
                                    value, NULL))
-                       printk(KERN_WARNING "Asus ACPI: Error changing brightness\n");
+                       printk(KERN_WARNING
+                              "Asus ACPI: Error changing brightness\n");
                return;
        }
 
        /* No SPLV method if we are here, act as appropriate */
        value -= read_brightness();
        while (value != 0) {
-               status = acpi_evaluate_object(NULL, (value > 0) ? 
-                                             hotk->methods->brightness_up : 
+               status = acpi_evaluate_object(NULL, (value > 0) ?
+                                             hotk->methods->brightness_up :
                                              hotk->methods->brightness_down,
                                              NULL, NULL);
                (value > 0) ? value-- : value++;
                if (ACPI_FAILURE(status))
-                       printk(KERN_WARNING "Asus ACPI: Error changing brightness\n");
+                       printk(KERN_WARNING
+                              "Asus ACPI: Error changing brightness\n");
        }
        return;
 }
@@ -759,7 +747,7 @@ proc_read_brn(char *page, char **start, off_t off, int count, int *eof,
 }
 
 static int
-proc_write_brn(struct file *file, const char __user *buffer,
+proc_write_brn(struct file *file, const char __user * buffer,
               unsigned long count, void *data)
 {
        int value;
@@ -767,7 +755,7 @@ proc_write_brn(struct file *file, const char __user *buffer,
        count = parse_arg(buffer, count, &value);
        if (count > 0) {
                value = (0 < value) ? ((15 < value) ? 15 : value) : 0;
-                       /* 0 <= value <= 15 */
+               /* 0 <= value <= 15 */
                set_brightness(value);
        } else if (count < 0) {
                printk(KERN_WARNING "Asus ACPI: Error reading user input\n");
@@ -779,7 +767,7 @@ proc_write_brn(struct file *file, const char __user *buffer,
 static void set_display(int value)
 {
        /* no sanity check needed for now */
-       if (!write_acpi_int(hotk->handle, hotk->methods->display_set, 
+       if (!write_acpi_int(hotk->handle, hotk->methods->display_set,
                            value, NULL))
                printk(KERN_WARNING "Asus ACPI: Error setting display\n");
        return;
@@ -791,13 +779,14 @@ static void set_display(int value)
  */
 static int
 proc_read_disp(char *page, char **start, off_t off, int count, int *eof,
-             void *data)
+              void *data)
 {
        int value = 0;
-       
+
        if (!read_acpi_int(hotk->handle, hotk->methods->display_get, &value))
-               printk(KERN_WARNING "Asus ACPI: Error reading display status\n");
-       value &= 0x07; /* needed for some models, shouldn't hurt others */
+               printk(KERN_WARNING
+                      "Asus ACPI: Error reading display status\n");
+       value &= 0x07;          /* needed for some models, shouldn't hurt others */
        return sprintf(page, "%d\n", value);
 }
 
@@ -808,8 +797,8 @@ proc_read_disp(char *page, char **start, off_t off, int count, int *eof,
  * simultaneously, so be warned. See the acpi4asus README for more info.
  */
 static int
-proc_write_disp(struct file *file, const char __user *buffer,
-              unsigned long count, void *data)
+proc_write_disp(struct file *file, const char __user * buffer,
+               unsigned long count, void *data)
 {
        int value;
 
@@ -822,19 +811,19 @@ proc_write_disp(struct file *file, const char __user *buffer,
        return count;
 }
 
-
-typedef int (proc_readfunc)(char *page, char **start, off_t off, int count,
-                            int *eof, void *data);
-typedef int (proc_writefunc)(struct file *file, const char __user *buffer,
-                             unsigned long count, void *data);
+typedef int (proc_readfunc) (char *page, char **start, off_t off, int count,
+                            int *eof, void *data);
+typedef int (proc_writefunc) (struct file * file, const char __user * buffer,
+                             unsigned long count, void *data);
 
 static int
-__init asus_proc_add(char *name, proc_writefunc *writefunc,
-                    proc_readfunc *readfunc, mode_t mode,
-                    struct acpi_device *device)
+__init asus_proc_add(char *name, proc_writefunc * writefunc,
+                    proc_readfunc * readfunc, mode_t mode,
+                    struct acpi_device *device)
 {
-       struct proc_dir_entry *proc = create_proc_entry(name, mode, acpi_device_dir(device));
-       if(!proc) {
+       struct proc_dir_entry *proc =
+           create_proc_entry(name, mode, acpi_device_dir(device));
+       if (!proc) {
                printk(KERN_WARNING "  Unable to create %s fs entry\n", name);
                return -1;
        }
@@ -851,14 +840,14 @@ static int __init asus_hotk_add_fs(struct acpi_device *device)
 {
        struct proc_dir_entry *proc;
        mode_t mode;
-       
+
        /*
         * If parameter uid or gid is not changed, keep the default setting for
         * our proc entries (-rw-rw-rw-) else, it means we care about security,
         * and then set to -rw-rw----
         */
 
-       if ((asus_uid == 0) && (asus_gid == 0)){
+       if ((asus_uid == 0) && (asus_gid == 0)) {
                mode = S_IFREG | S_IRUGO | S_IWUGO;
        } else {
                mode = S_IFREG | S_IRUSR | S_IRGRP | S_IWUSR | S_IWGRP;
@@ -881,15 +870,18 @@ static int __init asus_hotk_add_fs(struct acpi_device *device)
        }
 
        if (hotk->methods->mt_wled) {
-               asus_proc_add(PROC_WLED, &proc_write_wled, &proc_read_wled, mode, device);
+               asus_proc_add(PROC_WLED, &proc_write_wled, &proc_read_wled,
+                             mode, device);
        }
 
        if (hotk->methods->mt_mled) {
-               asus_proc_add(PROC_MLED, &proc_write_mled, &proc_read_mled, mode, device);
+               asus_proc_add(PROC_MLED, &proc_write_mled, &proc_read_mled,
+                             mode, device);
        }
 
        if (hotk->methods->mt_tled) {
-               asus_proc_add(PROC_TLED, &proc_write_tled, &proc_read_tled, mode, device);
+               asus_proc_add(PROC_TLED, &proc_write_tled, &proc_read_tled,
+                             mode, device);
        }
 
        /* 
@@ -897,35 +889,40 @@ static int __init asus_hotk_add_fs(struct acpi_device *device)
         * from keyboard 
         */
        if (hotk->methods->mt_lcd_switch && hotk->methods->lcd_status) {
-               asus_proc_add(PROC_LCD, &proc_write_lcd, &proc_read_lcd, mode, device);
+               asus_proc_add(PROC_LCD, &proc_write_lcd, &proc_read_lcd, mode,
+                             device);
        }
-       
+
        if ((hotk->methods->brightness_up && hotk->methods->brightness_down) ||
            (hotk->methods->brightness_get && hotk->methods->brightness_set)) {
-               asus_proc_add(PROC_BRN, &proc_write_brn, &proc_read_brn, mode, device);
+               asus_proc_add(PROC_BRN, &proc_write_brn, &proc_read_brn, mode,
+                             device);
        }
 
        if (hotk->methods->display_set) {
-               asus_proc_add(PROC_DISP, &proc_write_disp, &proc_read_disp, mode, device);
+               asus_proc_add(PROC_DISP, &proc_write_disp, &proc_read_disp,
+                             mode, device);
        }
 
        return 0;
 }
 
-static int asus_hotk_remove_fs(struct acpi_devicedevice)
+static int asus_hotk_remove_fs(struct acpi_device *device)
 {
-       if(acpi_device_dir(device)) {
-               remove_proc_entry(PROC_INFO,acpi_device_dir(device));
+       if (acpi_device_dir(device)) {
+               remove_proc_entry(PROC_INFO, acpi_device_dir(device));
                if (hotk->methods->mt_wled)
-                       remove_proc_entry(PROC_WLED,acpi_device_dir(device));
+                       remove_proc_entry(PROC_WLED, acpi_device_dir(device));
                if (hotk->methods->mt_mled)
-                       remove_proc_entry(PROC_MLED,acpi_device_dir(device));
+                       remove_proc_entry(PROC_MLED, acpi_device_dir(device));
                if (hotk->methods->mt_tled)
-                       remove_proc_entry(PROC_TLED,acpi_device_dir(device));
+                       remove_proc_entry(PROC_TLED, acpi_device_dir(device));
                if (hotk->methods->mt_lcd_switch && hotk->methods->lcd_status)
                        remove_proc_entry(PROC_LCD, acpi_device_dir(device));
-               if ((hotk->methods->brightness_up && hotk->methods->brightness_down) ||
-                   (hotk->methods->brightness_get && hotk->methods->brightness_set))
+               if ((hotk->methods->brightness_up
+                    && hotk->methods->brightness_down)
+                   || (hotk->methods->brightness_get
+                       && hotk->methods->brightness_set))
                        remove_proc_entry(PROC_BRN, acpi_device_dir(device));
                if (hotk->methods->display_set)
                        remove_proc_entry(PROC_DISP, acpi_device_dir(device));
@@ -933,16 +930,15 @@ static int asus_hotk_remove_fs(struct acpi_device* device)
        return 0;
 }
 
-
 static void asus_hotk_notify(acpi_handle handle, u32 event, void *data)
 {
-       /* TODO Find a better way to handle events count.*/
+       /* TODO Find a better way to handle events count. */
        if (!hotk)
                return;
 
        if ((event & ~((u32) BR_UP)) < 16) {
                hotk->brightness = (event & ~((u32) BR_UP));
-       } else if ((event & ~((u32) BR_DOWN)) < 16 ) {
+       } else if ((event & ~((u32) BR_DOWN)) < 16) {
                hotk->brightness = (event & ~((u32) BR_DOWN));
        }
 
@@ -976,7 +972,7 @@ static int __init asus_hotk_get_info(void)
        if (ACPI_FAILURE(status))
                printk(KERN_WARNING "  Couldn't get the DSDT table header\n");
        else
-               asus_info = (struct acpi_table_header *) dsdt.pointer;
+               asus_info = (struct acpi_table_header *)dsdt.pointer;
 
        /* We have to write 0 on init this far for all ASUS models */
        if (!write_acpi_int(hotk->handle, "INIT", 0, &buffer)) {
@@ -988,15 +984,17 @@ static int __init asus_hotk_get_info(void)
        if (!read_acpi_int(hotk->handle, "BSTS", &bsts_result))
                printk(KERN_WARNING "  Error calling BSTS\n");
        else if (bsts_result)
-               printk(KERN_NOTICE "  BSTS called, 0x%02x returned\n", bsts_result);
+               printk(KERN_NOTICE "  BSTS called, 0x%02x returned\n",
+                      bsts_result);
 
        /* Samsung P30 has a device with a valid _HID whose INIT does not 
         * return anything. Catch this one and any similar here */
        if (buffer.pointer == NULL) {
-               if (asus_info && /* Samsung P30 */
+               if (asus_info &&        /* Samsung P30 */
                    strncmp(asus_info->oem_table_id, "ODEM", 4) == 0) {
                        hotk->model = P30;
-                       printk(KERN_NOTICE "  Samsung P30 detected, supported\n");
+                       printk(KERN_NOTICE
+                              "  Samsung P30 detected, supported\n");
                } else {
                        hotk->model = M2E;
                        printk(KERN_WARNING "  no string returned by INIT\n");
@@ -1006,10 +1004,11 @@ static int __init asus_hotk_get_info(void)
                hotk->methods = &model_conf[hotk->model];
                return AE_OK;
        }
-       
-       model = (union acpi_object *) buffer.pointer;
+
+       model = (union acpi_object *)buffer.pointer;
        if (model->type == ACPI_TYPE_STRING) {
-               printk(KERN_NOTICE "  %s model detected, ", model->string.pointer);
+               printk(KERN_NOTICE "  %s model detected, ",
+                      model->string.pointer);
        }
 
        hotk->model = END_MODEL;
@@ -1035,7 +1034,7 @@ static int __init asus_hotk_get_info(void)
                 strncmp(model->string.pointer, "M6N", 3) == 0 ||
                 strncmp(model->string.pointer, "S1N", 3) == 0 ||
                 strncmp(model->string.pointer, "S5N", 3) == 0 ||
-                 strncmp(model->string.pointer, "W1N", 3) == 0)
+                strncmp(model->string.pointer, "W1N", 3) == 0)
                hotk->model = xxN;
        else if (strncmp(model->string.pointer, "M1", 2) == 0)
                hotk->model = M1A;
@@ -1069,21 +1068,21 @@ static int __init asus_hotk_get_info(void)
 
        /* Sort of per-model blacklist */
        if (strncmp(model->string.pointer, "L2B", 3) == 0)
-               hotk->methods->lcd_status = NULL; 
+               hotk->methods->lcd_status = NULL;
        /* L2B is similar enough to L3C to use its settings, with this only 
           exception */
        else if (strncmp(model->string.pointer, "S5N", 3) == 0 ||
                 strncmp(model->string.pointer, "M5N", 3) == 0)
-               hotk->methods->mt_mled = NULL; 
+               hotk->methods->mt_mled = NULL;
        /* S5N and M5N have no MLED */
        else if (strncmp(model->string.pointer, "M2N", 3) == 0 ||
                 strncmp(model->string.pointer, "W1N", 3) == 0)
-               hotk->methods->mt_wled = "WLED"; 
+               hotk->methods->mt_wled = "WLED";
        /* M2N and W1N have a usable WLED */
        else if (asus_info) {
                if (strncmp(asus_info->oem_table_id, "L1", 2) == 0)
                        hotk->methods->mled_status = NULL;
-       /* S1300A reports L84F, but L1400B too, account for that */
+               /* S1300A reports L84F, but L1400B too, account for that */
        }
 
        acpi_os_free(model);
@@ -1091,7 +1090,6 @@ static int __init asus_hotk_get_info(void)
        return AE_OK;
 }
 
-
 static int __init asus_hotk_check(void)
 {
        int result = 0;
@@ -1110,7 +1108,6 @@ static int __init asus_hotk_check(void)
        return result;
 }
 
-
 static int __init asus_hotk_add(struct acpi_device *device)
 {
        acpi_status status = AE_OK;
@@ -1123,7 +1120,7 @@ static int __init asus_hotk_add(struct acpi_device *device)
               ASUS_ACPI_VERSION);
 
        hotk =
-           (struct asus_hotk *) kmalloc(sizeof(struct asus_hotk), GFP_KERNEL);
+           (struct asus_hotk *)kmalloc(sizeof(struct asus_hotk), GFP_KERNEL);
        if (!hotk)
                return -ENOMEM;
        memset(hotk, 0, sizeof(struct asus_hotk));
@@ -1134,7 +1131,6 @@ static int __init asus_hotk_add(struct acpi_device *device)
        acpi_driver_data(device) = hotk;
        hotk->device = device;
 
-
        result = asus_hotk_check();
        if (result)
                goto end;
@@ -1153,17 +1149,22 @@ static int __init asus_hotk_add(struct acpi_device *device)
                printk(KERN_ERR "  Error installing notify handler\n");
 
        /* For laptops without GPLV: init the hotk->brightness value */
-       if ((!hotk->methods->brightness_get) && (!hotk->methods->brightness_status) &&
-           (hotk->methods->brightness_up && hotk->methods->brightness_down)) {
-               status = acpi_evaluate_object(NULL, hotk->methods->brightness_down,
-                                             NULL, NULL);
+       if ((!hotk->methods->brightness_get)
+           && (!hotk->methods->brightness_status)
+           && (hotk->methods->brightness_up
+               && hotk->methods->brightness_down)) {
+               status =
+                   acpi_evaluate_object(NULL, hotk->methods->brightness_down,
+                                        NULL, NULL);
                if (ACPI_FAILURE(status))
                        printk(KERN_WARNING "  Error changing brightness\n");
                else {
-                       status = acpi_evaluate_object(NULL, hotk->methods->brightness_up,
-                                                     NULL, NULL);
+                       status =
+                           acpi_evaluate_object(NULL,
+                                                hotk->methods->brightness_up,
+                                                NULL, NULL);
                        if (ACPI_FAILURE(status))
-                               printk(KERN_WARNING "  Strange, error changing" 
+                               printk(KERN_WARNING "  Strange, error changing"
                                       " brightness\n");
                }
        }
@@ -1176,7 +1177,6 @@ static int __init asus_hotk_add(struct acpi_device *device)
        return result;
 }
 
-
 static int asus_hotk_remove(struct acpi_device *device, int type)
 {
        acpi_status status = 0;
@@ -1196,7 +1196,6 @@ static int asus_hotk_remove(struct acpi_device *device, int type)
        return 0;
 }
 
-
 static int __init asus_acpi_init(void)
 {
        int result;
@@ -1204,9 +1203,9 @@ static int __init asus_acpi_init(void)
        if (acpi_disabled)
                return -ENODEV;
 
-       if (!acpi_specific_hotkey_enabled){
+       if (!acpi_specific_hotkey_enabled) {
                printk(KERN_ERR "Using generic hotkey driver\n");
-               return -ENODEV; 
+               return -ENODEV;
        }
        asus_proc_dir = proc_mkdir(PROC_ASUS, acpi_root_dir);
        if (!asus_proc_dir) {
@@ -1225,7 +1224,6 @@ static int __init asus_acpi_init(void)
        return 0;
 }
 
-
 static void __exit asus_acpi_exit(void)
 {
        acpi_bus_unregister_driver(&asus_hotk_driver);
index c55feca9b7d5e06c1099558e873595eaf944ba14..702e857e98c53f843fa31970d4b78f1c98eaf5bd 100644 (file)
@@ -34,7 +34,6 @@
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF
 
 #define ACPI_BATTERY_FORMAT_BIF        "NNNNNNNNNSSSS"
 #define ACPI_BATTERY_UNITS_WATTS       "mW"
 #define ACPI_BATTERY_UNITS_AMPS                "mA"
 
-
 #define _COMPONENT             ACPI_BATTERY_COMPONENT
-ACPI_MODULE_NAME               ("acpi_battery")
+ACPI_MODULE_NAME("acpi_battery")
 
-MODULE_AUTHOR("Paul Diefenbaugh");
+    MODULE_AUTHOR("Paul Diefenbaugh");
 MODULE_DESCRIPTION(ACPI_BATTERY_DRIVER_NAME);
 MODULE_LICENSE("GPL");
 
-static int acpi_battery_add (struct acpi_device *device);
-static int acpi_battery_remove (struct acpi_device *device, int type);
+static int acpi_battery_add(struct acpi_device *device);
+static int acpi_battery_remove(struct acpi_device *device, int type);
 
 static struct acpi_driver acpi_battery_driver = {
-       .name =         ACPI_BATTERY_DRIVER_NAME,
-       .class =        ACPI_BATTERY_CLASS,
-       .ids =          ACPI_BATTERY_HID,
-       .ops =          {
-                               .add =          acpi_battery_add,
-                               .remove =       acpi_battery_remove,
-                       },
+       .name = ACPI_BATTERY_DRIVER_NAME,
+       .class = ACPI_BATTERY_CLASS,
+       .ids = ACPI_BATTERY_HID,
+       .ops = {
+               .add = acpi_battery_add,
+               .remove = acpi_battery_remove,
+               },
 };
 
 struct acpi_battery_status {
-       acpi_integer            state;
-       acpi_integer            present_rate;
-       acpi_integer            remaining_capacity;
-       acpi_integer            present_voltage;
+       acpi_integer state;
+       acpi_integer present_rate;
+       acpi_integer remaining_capacity;
+       acpi_integer present_voltage;
 };
 
 struct acpi_battery_info {
-       acpi_integer            power_unit;
-       acpi_integer            design_capacity;
-       acpi_integer            last_full_capacity;
-       acpi_integer            battery_technology;
-       acpi_integer            design_voltage;
-       acpi_integer            design_capacity_warning;
-       acpi_integer            design_capacity_low;
-       acpi_integer            battery_capacity_granularity_1;
-       acpi_integer            battery_capacity_granularity_2;
-       acpi_string             model_number;
-       acpi_string             serial_number;
-       acpi_string             battery_type;
-       acpi_string             oem_info;
+       acpi_integer power_unit;
+       acpi_integer design_capacity;
+       acpi_integer last_full_capacity;
+       acpi_integer battery_technology;
+       acpi_integer design_voltage;
+       acpi_integer design_capacity_warning;
+       acpi_integer design_capacity_low;
+       acpi_integer battery_capacity_granularity_1;
+       acpi_integer battery_capacity_granularity_2;
+       acpi_string model_number;
+       acpi_string serial_number;
+       acpi_string battery_type;
+       acpi_string oem_info;
 };
 
 struct acpi_battery_flags {
-       u8                      present:1;      /* Bay occupied? */
-       u8                      power_unit:1;   /* 0=watts, 1=apms */
-       u8                      alarm:1;        /* _BTP present? */
-       u8                      reserved:5;
+       u8 present:1;           /* Bay occupied? */
+       u8 power_unit:1;        /* 0=watts, 1=apms */
+       u8 alarm:1;             /* _BTP present? */
+       u8 reserved:5;
 };
 
 struct acpi_battery_trips {
-       unsigned long           warning;
-       unsigned long           low;
+       unsigned long warning;
+       unsigned long low;
 };
 
 struct acpi_battery {
-       acpi_handle             handle;
+       acpi_handle handle;
        struct acpi_battery_flags flags;
        struct acpi_battery_trips trips;
-       unsigned long           alarm;
+       unsigned long alarm;
        struct acpi_battery_info *info;
 };
 
-
 /* --------------------------------------------------------------------------
                                Battery Management
    -------------------------------------------------------------------------- */
 
 static int
-acpi_battery_get_info (
-       struct acpi_battery     *battery,
-       struct acpi_battery_info **bif)
+acpi_battery_get_info(struct acpi_battery *battery,
+                     struct acpi_battery_info **bif)
 {
-       int                     result = 0;
-       acpi_status             status = 0;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       struct acpi_buffer      format = {sizeof(ACPI_BATTERY_FORMAT_BIF),
-                                               ACPI_BATTERY_FORMAT_BIF};
-       struct acpi_buffer      data = {0, NULL};
-       union acpi_object       *package = NULL;
+       int result = 0;
+       acpi_status status = 0;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       struct acpi_buffer format = { sizeof(ACPI_BATTERY_FORMAT_BIF),
+               ACPI_BATTERY_FORMAT_BIF
+       };
+       struct acpi_buffer data = { 0, NULL };
+       union acpi_object *package = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_battery_get_info");
 
@@ -148,7 +145,7 @@ acpi_battery_get_info (
                return_VALUE(-ENODEV);
        }
 
-       package = (union acpi_object *) buffer.pointer;
+       package = (union acpi_object *)buffer.pointer;
 
        /* Extract Package Data */
 
@@ -174,27 +171,27 @@ acpi_battery_get_info (
                goto end;
        }
 
-end:
+      end:
        acpi_os_free(buffer.pointer);
 
        if (!result)
-               (*bif) = (struct acpi_battery_info *) data.pointer;
+               (*bif) = (struct acpi_battery_info *)data.pointer;
 
        return_VALUE(result);
 }
 
 static int
-acpi_battery_get_status (
-       struct acpi_battery     *battery,
-       struct acpi_battery_status **bst)
+acpi_battery_get_status(struct acpi_battery *battery,
+                       struct acpi_battery_status **bst)
 {
-       int                     result = 0;
-       acpi_status             status = 0;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       struct acpi_buffer      format = {sizeof(ACPI_BATTERY_FORMAT_BST),
-                                               ACPI_BATTERY_FORMAT_BST};
-       struct acpi_buffer      data = {0, NULL};
-       union acpi_object       *package = NULL;
+       int result = 0;
+       acpi_status status = 0;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       struct acpi_buffer format = { sizeof(ACPI_BATTERY_FORMAT_BST),
+               ACPI_BATTERY_FORMAT_BST
+       };
+       struct acpi_buffer data = { 0, NULL };
+       union acpi_object *package = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_battery_get_status");
 
@@ -209,7 +206,7 @@ acpi_battery_get_status (
                return_VALUE(-ENODEV);
        }
 
-       package = (union acpi_object *) buffer.pointer;
+       package = (union acpi_object *)buffer.pointer;
 
        /* Extract Package Data */
 
@@ -235,24 +232,21 @@ acpi_battery_get_status (
                goto end;
        }
 
-end:
+      end:
        acpi_os_free(buffer.pointer);
 
        if (!result)
-               (*bst) = (struct acpi_battery_status *) data.pointer;
+               (*bst) = (struct acpi_battery_status *)data.pointer;
 
        return_VALUE(result);
 }
 
-
 static int
-acpi_battery_set_alarm (
-       struct acpi_battery     *battery,
-       unsigned long           alarm)
+acpi_battery_set_alarm(struct acpi_battery *battery, unsigned long alarm)
 {
-       acpi_status             status = 0;
-       union acpi_object       arg0 = {ACPI_TYPE_INTEGER};
-       struct acpi_object_list arg_list = {1, &arg0};
+       acpi_status status = 0;
+       union acpi_object arg0 = { ACPI_TYPE_INTEGER };
+       struct acpi_object_list arg_list = { 1, &arg0 };
 
        ACPI_FUNCTION_TRACE("acpi_battery_set_alarm");
 
@@ -275,19 +269,16 @@ acpi_battery_set_alarm (
        return_VALUE(0);
 }
 
-
-static int
-acpi_battery_check (
-       struct acpi_battery     *battery)
+static int acpi_battery_check(struct acpi_battery *battery)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       acpi_handle             handle = NULL;
-       struct acpi_device      *device = NULL;
+       int result = 0;
+       acpi_status status = AE_OK;
+       acpi_handle handle = NULL;
+       struct acpi_device *device = NULL;
        struct acpi_battery_info *bif = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_battery_check");
-       
+
        if (!battery)
                return_VALUE(-EINVAL);
 
@@ -336,18 +327,17 @@ acpi_battery_check (
        return_VALUE(result);
 }
 
-
 /* --------------------------------------------------------------------------
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-static struct proc_dir_entry   *acpi_battery_dir;
+static struct proc_dir_entry *acpi_battery_dir;
 static int acpi_battery_read_info(struct seq_file *seq, void *offset)
 {
-       int                     result = 0;
-       struct acpi_battery     *battery = (struct acpi_battery *) seq->private;
+       int result = 0;
+       struct acpi_battery *battery = (struct acpi_battery *)seq->private;
        struct acpi_battery_info *bif = NULL;
-       char                    *units = "?";
+       char *units = "?";
 
        ACPI_FUNCTION_TRACE("acpi_battery_read_info");
 
@@ -369,19 +359,21 @@ static int acpi_battery_read_info(struct seq_file *seq, void *offset)
                goto end;
        }
 
-       units = bif->power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS;
-                                       
+       units =
+           bif->
+           power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS;
+
        if (bif->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN)
                seq_printf(seq, "design capacity:         unknown\n");
        else
                seq_printf(seq, "design capacity:         %d %sh\n",
-                       (u32) bif->design_capacity, units);
+                          (u32) bif->design_capacity, units);
 
        if (bif->last_full_capacity == ACPI_BATTERY_VALUE_UNKNOWN)
                seq_printf(seq, "last full capacity:      unknown\n");
        else
                seq_printf(seq, "last full capacity:      %d %sh\n",
-                       (u32) bif->last_full_capacity, units);
+                          (u32) bif->last_full_capacity, units);
 
        switch ((u32) bif->battery_technology) {
        case 0:
@@ -399,26 +391,22 @@ static int acpi_battery_read_info(struct seq_file *seq, void *offset)
                seq_printf(seq, "design voltage:          unknown\n");
        else
                seq_printf(seq, "design voltage:          %d mV\n",
-                       (u32) bif->design_voltage);
-       
+                          (u32) bif->design_voltage);
+
        seq_printf(seq, "design capacity warning: %d %sh\n",
-               (u32) bif->design_capacity_warning, units);
+                  (u32) bif->design_capacity_warning, units);
        seq_printf(seq, "design capacity low:     %d %sh\n",
-               (u32) bif->design_capacity_low, units);
+                  (u32) bif->design_capacity_low, units);
        seq_printf(seq, "capacity granularity 1:  %d %sh\n",
-               (u32) bif->battery_capacity_granularity_1, units);
+                  (u32) bif->battery_capacity_granularity_1, units);
        seq_printf(seq, "capacity granularity 2:  %d %sh\n",
-               (u32) bif->battery_capacity_granularity_2, units);
-       seq_printf(seq, "model number:            %s\n",
-               bif->model_number);
-       seq_printf(seq, "serial number:           %s\n",
-               bif->serial_number);
-       seq_printf(seq, "battery type:            %s\n",
-               bif->battery_type);
-       seq_printf(seq, "OEM info:                %s\n",
-               bif->oem_info);
-
-end:
+                  (u32) bif->battery_capacity_granularity_2, units);
+       seq_printf(seq, "model number:            %s\n", bif->model_number);
+       seq_printf(seq, "serial number:           %s\n", bif->serial_number);
+       seq_printf(seq, "battery type:            %s\n", bif->battery_type);
+       seq_printf(seq, "OEM info:                %s\n", bif->oem_info);
+
+      end:
        kfree(bif);
 
        return_VALUE(0);
@@ -429,14 +417,12 @@ static int acpi_battery_info_open_fs(struct inode *inode, struct file *file)
        return single_open(file, acpi_battery_read_info, PDE(inode)->data);
 }
 
-
-static int
-acpi_battery_read_state (struct seq_file *seq, void *offset)
+static int acpi_battery_read_state(struct seq_file *seq, void *offset)
 {
-       int                     result = 0;
-       struct acpi_battery     *battery = (struct acpi_battery *) seq->private;
+       int result = 0;
+       struct acpi_battery *battery = (struct acpi_battery *)seq->private;
        struct acpi_battery_status *bst = NULL;
-       char                    *units = "?";
+       char *units = "?";
 
        ACPI_FUNCTION_TRACE("acpi_battery_read_state");
 
@@ -452,7 +438,9 @@ acpi_battery_read_state (struct seq_file *seq, void *offset)
 
        /* Battery Units */
 
-       units = battery->flags.power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS;
+       units =
+           battery->flags.
+           power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS;
 
        /* Battery Status (_BST) */
 
@@ -467,12 +455,12 @@ acpi_battery_read_state (struct seq_file *seq, void *offset)
        else
                seq_printf(seq, "capacity state:          critical\n");
 
-       if ((bst->state & 0x01) && (bst->state & 0x02)){
-               seq_printf(seq, "charging state:          charging/discharging\n");
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Battery Charging and Discharging?\n"));
-       }
-       else if (bst->state & 0x01)
+       if ((bst->state & 0x01) && (bst->state & 0x02)) {
+               seq_printf(seq,
+                          "charging state:          charging/discharging\n");
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Battery Charging and Discharging?\n"));
+       else if (bst->state & 0x01)
                seq_printf(seq, "charging state:          discharging\n");
        else if (bst->state & 0x02)
                seq_printf(seq, "charging state:          charging\n");
@@ -484,21 +472,21 @@ acpi_battery_read_state (struct seq_file *seq, void *offset)
                seq_printf(seq, "present rate:            unknown\n");
        else
                seq_printf(seq, "present rate:            %d %s\n",
-                       (u32) bst->present_rate, units);
+                          (u32) bst->present_rate, units);
 
        if (bst->remaining_capacity == ACPI_BATTERY_VALUE_UNKNOWN)
                seq_printf(seq, "remaining capacity:      unknown\n");
        else
                seq_printf(seq, "remaining capacity:      %d %sh\n",
-                       (u32) bst->remaining_capacity, units);
+                          (u32) bst->remaining_capacity, units);
 
        if (bst->present_voltage == ACPI_BATTERY_VALUE_UNKNOWN)
                seq_printf(seq, "present voltage:         unknown\n");
        else
                seq_printf(seq, "present voltage:         %d mV\n",
-                       (u32) bst->present_voltage);
+                          (u32) bst->present_voltage);
 
-end:
+      end:
        kfree(bst);
 
        return_VALUE(0);
@@ -509,12 +497,10 @@ static int acpi_battery_state_open_fs(struct inode *inode, struct file *file)
        return single_open(file, acpi_battery_read_state, PDE(inode)->data);
 }
 
-
-static int
-acpi_battery_read_alarm (struct seq_file *seq, void *offset)
+static int acpi_battery_read_alarm(struct seq_file *seq, void *offset)
 {
-       struct acpi_battery     *battery = (struct acpi_battery *) seq->private;
-       char                    *units = "?";
+       struct acpi_battery *battery = (struct acpi_battery *)seq->private;
+       char *units = "?";
 
        ACPI_FUNCTION_TRACE("acpi_battery_read_alarm");
 
@@ -527,8 +513,10 @@ acpi_battery_read_alarm (struct seq_file *seq, void *offset)
        }
 
        /* Battery Units */
-       
-       units = battery->flags.power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS;
+
+       units =
+           battery->flags.
+           power_unit ? ACPI_BATTERY_UNITS_AMPS : ACPI_BATTERY_UNITS_WATTS;
 
        /* Battery Alarm */
 
@@ -538,22 +526,19 @@ acpi_battery_read_alarm (struct seq_file *seq, void *offset)
        else
                seq_printf(seq, "%d %sh\n", (u32) battery->alarm, units);
 
-end:
+      end:
        return_VALUE(0);
 }
 
-
 static ssize_t
-acpi_battery_write_alarm (
-       struct file     *file,
-       const char      __user *buffer,
-       size_t          count,
-       loff_t          *ppos)
+acpi_battery_write_alarm(struct file *file,
+                        const char __user * buffer,
+                        size_t count, loff_t * ppos)
 {
-       int                     result = 0;
-       char                    alarm_string[12] = {'\0'};
-       struct seq_file         *m = (struct seq_file *)file->private_data;
-       struct acpi_battery     *battery = (struct acpi_battery *)m->private;
+       int result = 0;
+       char alarm_string[12] = { '\0' };
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_battery *battery = (struct acpi_battery *)m->private;
 
        ACPI_FUNCTION_TRACE("acpi_battery_write_alarm");
 
@@ -565,11 +550,11 @@ acpi_battery_write_alarm (
 
        if (copy_from_user(alarm_string, buffer, count))
                return_VALUE(-EFAULT);
-       
+
        alarm_string[count] = '\0';
 
-       result = acpi_battery_set_alarm(battery, 
-               simple_strtoul(alarm_string, NULL, 0));
+       result = acpi_battery_set_alarm(battery,
+                                       simple_strtoul(alarm_string, NULL, 0));
        if (result)
                return_VALUE(result);
 
@@ -582,41 +567,39 @@ static int acpi_battery_alarm_open_fs(struct inode *inode, struct file *file)
 }
 
 static struct file_operations acpi_battery_info_ops = {
-       .open           = acpi_battery_info_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_battery_info_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
        .owner = THIS_MODULE,
 };
 
 static struct file_operations acpi_battery_state_ops = {
-       .open           = acpi_battery_state_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_battery_state_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
        .owner = THIS_MODULE,
 };
 
 static struct file_operations acpi_battery_alarm_ops = {
-       .open           = acpi_battery_alarm_open_fs,
-       .read           = seq_read,
-       .write          = acpi_battery_write_alarm,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_battery_alarm_open_fs,
+       .read = seq_read,
+       .write = acpi_battery_write_alarm,
+       .llseek = seq_lseek,
+       .release = single_release,
        .owner = THIS_MODULE,
 };
 
-static int
-acpi_battery_add_fs (
-       struct acpi_device      *device)
+static int acpi_battery_add_fs(struct acpi_device *device)
 {
-       struct proc_dir_entry   *entry = NULL;
+       struct proc_dir_entry *entry = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_battery_add_fs");
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
-                       acpi_battery_dir);
+                                                    acpi_battery_dir);
                if (!acpi_device_dir(device))
                        return_VALUE(-ENODEV);
                acpi_device_dir(device)->owner = THIS_MODULE;
@@ -624,24 +607,24 @@ acpi_battery_add_fs (
 
        /* 'info' [R] */
        entry = create_proc_entry(ACPI_BATTERY_FILE_INFO,
-               S_IRUGO, acpi_device_dir(device));
+                                 S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_BATTERY_FILE_INFO));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_BATTERY_FILE_INFO));
        else {
-               entry->proc_fops = &acpi_battery_info_ops; 
+               entry->proc_fops = &acpi_battery_info_ops;
                entry->data = acpi_driver_data(device);
                entry->owner = THIS_MODULE;
        }
 
        /* 'status' [R] */
        entry = create_proc_entry(ACPI_BATTERY_FILE_STATUS,
-               S_IRUGO, acpi_device_dir(device));
+                                 S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_BATTERY_FILE_STATUS));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_BATTERY_FILE_STATUS));
        else {
                entry->proc_fops = &acpi_battery_state_ops;
                entry->data = acpi_driver_data(device);
@@ -650,11 +633,12 @@ acpi_battery_add_fs (
 
        /* 'alarm' [R/W] */
        entry = create_proc_entry(ACPI_BATTERY_FILE_ALARM,
-               S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+                                 S_IFREG | S_IRUGO | S_IWUSR,
+                                 acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_BATTERY_FILE_ALARM));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_BATTERY_FILE_ALARM));
        else {
                entry->proc_fops = &acpi_battery_alarm_ops;
                entry->data = acpi_driver_data(device);
@@ -664,10 +648,7 @@ acpi_battery_add_fs (
        return_VALUE(0);
 }
 
-
-static int
-acpi_battery_remove_fs (
-       struct acpi_device      *device)
+static int acpi_battery_remove_fs(struct acpi_device *device)
 {
        ACPI_FUNCTION_TRACE("acpi_battery_remove_fs");
 
@@ -686,19 +667,14 @@ acpi_battery_remove_fs (
        return_VALUE(0);
 }
 
-
 /* --------------------------------------------------------------------------
                                  Driver Interface
    -------------------------------------------------------------------------- */
 
-static void
-acpi_battery_notify (
-       acpi_handle             handle,
-       u32                     event,
-       void                    *data)
+static void acpi_battery_notify(acpi_handle handle, u32 event, void *data)
 {
-       struct acpi_battery     *battery = (struct acpi_battery *) data;
-       struct acpi_device      *device = NULL;
+       struct acpi_battery *battery = (struct acpi_battery *)data;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_battery_notify");
 
@@ -716,24 +692,21 @@ acpi_battery_notify (
                break;
        default:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Unsupported event [0x%x]\n", event));
+                                 "Unsupported event [0x%x]\n", event));
                break;
        }
 
        return_VOID;
 }
 
-
-static int
-acpi_battery_add (
-       struct acpi_device      *device)
+static int acpi_battery_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = 0;
-       struct acpi_battery     *battery = NULL;
+       int result = 0;
+       acpi_status status = 0;
+       struct acpi_battery *battery = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_battery_add");
-       
+
        if (!device)
                return_VALUE(-EINVAL);
 
@@ -756,19 +729,20 @@ acpi_battery_add (
                goto end;
 
        status = acpi_install_notify_handler(battery->handle,
-               ACPI_DEVICE_NOTIFY, acpi_battery_notify, battery);
+                                            ACPI_DEVICE_NOTIFY,
+                                            acpi_battery_notify, battery);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error installing notify handler\n"));
+                                 "Error installing notify handler\n"));
                result = -ENODEV;
                goto end;
        }
 
        printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n",
-               ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device),
-               device->status.battery_present?"present":"absent");
-               
-end:
+              ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device),
+              device->status.battery_present ? "present" : "absent");
+
+      end:
        if (result) {
                acpi_battery_remove_fs(device);
                kfree(battery);
@@ -777,27 +751,24 @@ end:
        return_VALUE(result);
 }
 
-
-static int
-acpi_battery_remove (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_battery_remove(struct acpi_device *device, int type)
 {
-       acpi_status             status = 0;
-       struct acpi_battery     *battery = NULL;
+       acpi_status status = 0;
+       struct acpi_battery *battery = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_battery_remove");
 
        if (!device || !acpi_driver_data(device))
                return_VALUE(-EINVAL);
 
-       battery = (struct acpi_battery *) acpi_driver_data(device);
+       battery = (struct acpi_battery *)acpi_driver_data(device);
 
        status = acpi_remove_notify_handler(battery->handle,
-               ACPI_DEVICE_NOTIFY, acpi_battery_notify);
+                                           ACPI_DEVICE_NOTIFY,
+                                           acpi_battery_notify);
        if (ACPI_FAILURE(status))
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error removing notify handler\n"));
+                                 "Error removing notify handler\n"));
 
        acpi_battery_remove_fs(device);
 
@@ -806,11 +777,9 @@ acpi_battery_remove (
        return_VALUE(0);
 }
 
-
-static int __init
-acpi_battery_init (void)
+static int __init acpi_battery_init(void)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_battery_init");
 
@@ -828,9 +797,7 @@ acpi_battery_init (void)
        return_VALUE(0);
 }
 
-
-static void __exit
-acpi_battery_exit (void)
+static void __exit acpi_battery_exit(void)
 {
        ACPI_FUNCTION_TRACE("acpi_battery_exit");
 
@@ -841,6 +808,5 @@ acpi_battery_exit (void)
        return_VOID;
 }
 
-
 module_init(acpi_battery_init);
 module_exit(acpi_battery_exit);
index 4c010e7f11b8e58162721564a13c66971c6a87d1..9824f679a910aa83e96078a9bafc646addc3cdf3 100644 (file)
@@ -26,7 +26,6 @@
  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  */
 
-
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <acpi/acpi_bus.h>
 #include <linux/dmi.h>
 
-enum acpi_blacklist_predicates
-{
-        all_versions,
-        less_than_or_equal,
-        equal,
-        greater_than_or_equal,
+enum acpi_blacklist_predicates {
+       all_versions,
+       less_than_or_equal,
+       equal,
+       greater_than_or_equal,
 };
 
-struct acpi_blacklist_item
-{
-        char            oem_id[7];
-        char            oem_table_id[9];
-        u32             oem_revision;
-        acpi_table_type table;
-        enum acpi_blacklist_predicates oem_revision_predicate;
-        char            *reason;
-        u32             is_critical_error;
+struct acpi_blacklist_item {
+       char oem_id[7];
+       char oem_table_id[9];
+       u32 oem_revision;
+       acpi_table_type table;
+       enum acpi_blacklist_predicates oem_revision_predicate;
+       char *reason;
+       u32 is_critical_error;
 };
 
 /*
  * POLICY: If *anything* doesn't work, put it on the blacklist.
  *        If they are critical errors, mark it critical, and abort driver load.
  */
-static struct acpi_blacklist_item acpi_blacklist[] __initdata =
-{
+static struct acpi_blacklist_item acpi_blacklist[] __initdata = {
        /* Compaq Presario 1700 */
-       {"PTLTD ", "  DSDT  ", 0x06040000, ACPI_DSDT, less_than_or_equal, "Multiple problems", 1},
+       {"PTLTD ", "  DSDT  ", 0x06040000, ACPI_DSDT, less_than_or_equal,
+        "Multiple problems", 1},
        /* Sony FX120, FX140, FX150? */
-       {"SONY  ", "U0      ", 0x20010313, ACPI_DSDT, less_than_or_equal, "ACPI driver problem", 1},
+       {"SONY  ", "U0      ", 0x20010313, ACPI_DSDT, less_than_or_equal,
+        "ACPI driver problem", 1},
        /* Compaq Presario 800, Insyde BIOS */
-       {"INT440", "SYSFexxx", 0x00001001, ACPI_DSDT, less_than_or_equal, "Does not use _REG to protect EC OpRegions", 1},
+       {"INT440", "SYSFexxx", 0x00001001, ACPI_DSDT, less_than_or_equal,
+        "Does not use _REG to protect EC OpRegions", 1},
        /* IBM 600E - _ADR should return 7, but it returns 1 */
-       {"IBM   ", "TP600E  ", 0x00000105, ACPI_DSDT, less_than_or_equal, "Incorrect _ADR", 1},
-       {"ASUS\0\0", "P2B-S   ", 0, ACPI_DSDT, all_versions, "Bogus PCI routing", 1},
+       {"IBM   ", "TP600E  ", 0x00000105, ACPI_DSDT, less_than_or_equal,
+        "Incorrect _ADR", 1},
+       {"ASUS\0\0", "P2B-S   ", 0, ACPI_DSDT, all_versions,
+        "Bogus PCI routing", 1},
 
        {""}
 };
 
-
 #if    CONFIG_ACPI_BLACKLIST_YEAR
 
-static int __init
-blacklist_by_year(void)
+static int __init blacklist_by_year(void)
 {
        int year;
        char *s = dmi_get_system_info(DMI_BIOS_DATE);
@@ -92,36 +91,38 @@ blacklist_by_year(void)
 
        s += 1;
 
-       year = simple_strtoul(s,NULL,0); 
+       year = simple_strtoul(s, NULL, 0);
 
-       if (year < 100) {               /* 2-digit year */
+       if (year < 100) {       /* 2-digit year */
                year += 1900;
                if (year < 1996)        /* no dates < spec 1.0 */
                        year += 100;
        }
 
        if (year < CONFIG_ACPI_BLACKLIST_YEAR) {
-               printk(KERN_ERR PREFIX "BIOS age (%d) fails cutoff (%d), " 
-                       "acpi=force is required to enable ACPI\n",
-                       year, CONFIG_ACPI_BLACKLIST_YEAR);
+               printk(KERN_ERR PREFIX "BIOS age (%d) fails cutoff (%d), "
+                      "acpi=force is required to enable ACPI\n",
+                      year, CONFIG_ACPI_BLACKLIST_YEAR);
                return 1;
        }
        return 0;
 }
 #else
-static inline int blacklist_by_year(void) { return 0; }
+static inline int blacklist_by_year(void)
+{
+       return 0;
+}
 #endif
 
-int __init
-acpi_blacklisted(void)
+int __init acpi_blacklisted(void)
 {
        int i = 0;
        int blacklisted = 0;
        struct acpi_table_header *table_header;
 
-       while (acpi_blacklist[i].oem_id[0] != '\0')
-       {
-               if (acpi_get_table_header_early(acpi_blacklist[i].table, &table_header)) {
+       while (acpi_blacklist[i].oem_id[0] != '\0') {
+               if (acpi_get_table_header_early
+                   (acpi_blacklist[i].table, &table_header)) {
                        i++;
                        continue;
                }
@@ -131,33 +132,43 @@ acpi_blacklisted(void)
                        continue;
                }
 
-               if (strncmp(acpi_blacklist[i].oem_table_id, table_header->oem_table_id, 8)) {
+               if (strncmp
+                   (acpi_blacklist[i].oem_table_id, table_header->oem_table_id,
+                    8)) {
                        i++;
                        continue;
                }
 
                if ((acpi_blacklist[i].oem_revision_predicate == all_versions)
-                   || (acpi_blacklist[i].oem_revision_predicate == less_than_or_equal
-                       && table_header->oem_revision <= acpi_blacklist[i].oem_revision)
-                   || (acpi_blacklist[i].oem_revision_predicate == greater_than_or_equal
-                       && table_header->oem_revision >= acpi_blacklist[i].oem_revision)
+                   || (acpi_blacklist[i].oem_revision_predicate ==
+                       less_than_or_equal
+                       && table_header->oem_revision <=
+                       acpi_blacklist[i].oem_revision)
+                   || (acpi_blacklist[i].oem_revision_predicate ==
+                       greater_than_or_equal
+                       && table_header->oem_revision >=
+                       acpi_blacklist[i].oem_revision)
                    || (acpi_blacklist[i].oem_revision_predicate == equal
-                       && table_header->oem_revision == acpi_blacklist[i].oem_revision)) {
-
-                       printk(KERN_ERR PREFIX "Vendor \"%6.6s\" System \"%8.8s\" "
-                               "Revision 0x%x has a known ACPI BIOS problem.\n",
-                               acpi_blacklist[i].oem_id,
-                               acpi_blacklist[i].oem_table_id,
-                               acpi_blacklist[i].oem_revision);
-
-                       printk(KERN_ERR PREFIX "Reason: %s. This is a %s error\n",
-                               acpi_blacklist[i].reason,
-                               (acpi_blacklist[i].is_critical_error ? "non-recoverable" : "recoverable"));
+                       && table_header->oem_revision ==
+                       acpi_blacklist[i].oem_revision)) {
+
+                       printk(KERN_ERR PREFIX
+                              "Vendor \"%6.6s\" System \"%8.8s\" "
+                              "Revision 0x%x has a known ACPI BIOS problem.\n",
+                              acpi_blacklist[i].oem_id,
+                              acpi_blacklist[i].oem_table_id,
+                              acpi_blacklist[i].oem_revision);
+
+                       printk(KERN_ERR PREFIX
+                              "Reason: %s. This is a %s error\n",
+                              acpi_blacklist[i].reason,
+                              (acpi_blacklist[i].
+                               is_critical_error ? "non-recoverable" :
+                               "recoverable"));
 
                        blacklisted = acpi_blacklist[i].is_critical_error;
                        break;
-               }
-               else {
+               } else {
                        i++;
                }
        }
@@ -166,4 +177,3 @@ acpi_blacklisted(void)
 
        return blacklisted;
 }
-
index d77c2307883c65efbf57d34b4dec54799d0a2337..6a4da417c16b1f996435fd49b8418302ad430406 100644 (file)
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define _COMPONENT             ACPI_BUS_COMPONENT
-ACPI_MODULE_NAME               ("acpi_bus")
-
+ACPI_MODULE_NAME("acpi_bus")
 #ifdef CONFIG_X86
 extern void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger);
 #endif
 
-FADT_DESCRIPTOR                        acpi_fadt;
+FADT_DESCRIPTOR acpi_fadt;
 EXPORT_SYMBOL(acpi_fadt);
 
-struct acpi_device             *acpi_root;
-struct proc_dir_entry          *acpi_root_dir;
+struct acpi_device *acpi_root;
+struct proc_dir_entry *acpi_root_dir;
 EXPORT_SYMBOL(acpi_root_dir);
 
 #define STRUCT_TO_INT(s)       (*((int*)&s))
@@ -57,12 +55,9 @@ EXPORT_SYMBOL(acpi_root_dir);
                                 Device Management
    -------------------------------------------------------------------------- */
 
-int
-acpi_bus_get_device (
-       acpi_handle             handle,
-       struct acpi_device      **device)
+int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device)
 {
-       acpi_status             status = AE_OK;
+       acpi_status status = AE_OK;
 
        ACPI_FUNCTION_TRACE("acpi_bus_get_device");
 
@@ -71,24 +66,23 @@ acpi_bus_get_device (
 
        /* TBD: Support fixed-feature devices */
 
-       status = acpi_get_data(handle, acpi_bus_data_handler, (void**) device);
+       status = acpi_get_data(handle, acpi_bus_data_handler, (void **)device);
        if (ACPI_FAILURE(status) || !*device) {
                ACPI_DEBUG_PRINT((ACPI_DB_WARN, "No context for object [%p]\n",
-                       handle));
+                                 handle));
                return_VALUE(-ENODEV);
        }
 
        return_VALUE(0);
 }
+
 EXPORT_SYMBOL(acpi_bus_get_device);
 
-int
-acpi_bus_get_status (
-       struct acpi_device      *device)
+int acpi_bus_get_status(struct acpi_device *device)
 {
-       acpi_status             status = AE_OK;
-       unsigned long           sta = 0;
-       
+       acpi_status status = AE_OK;
+       unsigned long sta = 0;
+
        ACPI_FUNCTION_TRACE("acpi_bus_get_status");
 
        if (!device)
@@ -98,10 +92,11 @@ acpi_bus_get_status (
         * Evaluate _STA if present.
         */
        if (device->flags.dynamic_status) {
-               status = acpi_evaluate_integer(device->handle, "_STA", NULL, &sta);
+               status =
+                   acpi_evaluate_integer(device->handle, "_STA", NULL, &sta);
                if (ACPI_FAILURE(status))
                        return_VALUE(-ENODEV);
-               STRUCT_TO_INT(device->status) = (int) sta;
+               STRUCT_TO_INT(device->status) = (int)sta;
        }
 
        /*
@@ -115,33 +110,30 @@ acpi_bus_get_status (
 
        if (device->status.functional && !device->status.present) {
                printk(KERN_WARNING PREFIX "Device [%s] status [%08x]: "
-                       "functional but not present; setting present\n",
-                       device->pnp.bus_id,
-                       (u32) STRUCT_TO_INT(device->status));
+                      "functional but not present; setting present\n",
+                      device->pnp.bus_id, (u32) STRUCT_TO_INT(device->status));
                device->status.present = 1;
        }
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n", 
-               device->pnp.bus_id, (u32) STRUCT_TO_INT(device->status)));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n",
+                         device->pnp.bus_id,
+                         (u32) STRUCT_TO_INT(device->status)));
 
        return_VALUE(0);
 }
-EXPORT_SYMBOL(acpi_bus_get_status);
 
+EXPORT_SYMBOL(acpi_bus_get_status);
 
 /* --------------------------------------------------------------------------
                                  Power Management
    -------------------------------------------------------------------------- */
 
-int
-acpi_bus_get_power (
-       acpi_handle             handle,
-       int                     *state)
+int acpi_bus_get_power(acpi_handle handle, int *state)
 {
-       int                     result = 0;
-       acpi_status             status = 0;
-       struct acpi_device      *device = NULL;
-       unsigned long           psc = 0;
+       int result = 0;
+       acpi_status status = 0;
+       struct acpi_device *device = NULL;
+       unsigned long psc = 0;
 
        ACPI_FUNCTION_TRACE("acpi_bus_get_power");
 
@@ -157,20 +149,18 @@ acpi_bus_get_power (
                        *state = device->parent->power.state;
                else
                        *state = ACPI_STATE_D0;
-       }
-       else {
+       } else {
                /*
                 * Get the device's power state either directly (via _PSC) or 
                 * indirectly (via power resources).
                 */
                if (device->power.flags.explicit_get) {
-                       status = acpi_evaluate_integer(device->handle, "_PSC", 
-                               NULL, &psc);
+                       status = acpi_evaluate_integer(device->handle, "_PSC",
+                                                      NULL, &psc);
                        if (ACPI_FAILURE(status))
                                return_VALUE(-ENODEV);
-                       device->power.state = (int) psc;
-               }
-               else if (device->power.flags.power_resources) {
+                       device->power.state = (int)psc;
+               } else if (device->power.flags.power_resources) {
                        result = acpi_power_get_inferred_state(device);
                        if (result)
                                return_VALUE(result);
@@ -180,22 +170,19 @@ acpi_bus_get_power (
        }
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] power state is D%d\n",
-               device->pnp.bus_id, device->power.state));
+                         device->pnp.bus_id, device->power.state));
 
        return_VALUE(0);
 }
-EXPORT_SYMBOL(acpi_bus_get_power);
 
+EXPORT_SYMBOL(acpi_bus_get_power);
 
-int
-acpi_bus_set_power (
-       acpi_handle             handle,
-       int                     state)
+int acpi_bus_set_power(acpi_handle handle, int state)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_device      *device = NULL;
-       char                    object_name[5] = {'_','P','S','0'+state,'\0'};
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_device *device = NULL;
+       char object_name[5] = { '_', 'P', 'S', '0' + state, '\0' };
 
        ACPI_FUNCTION_TRACE("acpi_bus_set_power");
 
@@ -209,7 +196,8 @@ acpi_bus_set_power (
        /* Make sure this is a valid target state */
 
        if (!device->flags.power_manageable) {
-               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device is not power manageable\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Device is not power manageable\n"));
                return_VALUE(-ENODEV);
        }
        /*
@@ -219,15 +207,18 @@ acpi_bus_set_power (
        if (device->power.state == ACPI_STATE_UNKNOWN)
                acpi_bus_get_power(device->handle, &device->power.state);
        if (state == device->power.state) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n", state));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n",
+                                 state));
                return_VALUE(0);
        }
        if (!device->power.states[state].flags.valid) {
-               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device does not support D%d\n", state));
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Device does not support D%d\n",
+                                 state));
                return_VALUE(-ENODEV);
        }
        if (device->parent && (state < device->parent->power.state)) {
-               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Cannot set device to a higher-powered state than parent\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Cannot set device to a higher-powered state than parent\n"));
                return_VALUE(-ENODEV);
        }
 
@@ -245,18 +236,17 @@ acpi_bus_set_power (
                                goto end;
                }
                if (device->power.states[state].flags.explicit_set) {
-                       status = acpi_evaluate_object(device->handle, 
-                               object_name, NULL, NULL);
+                       status = acpi_evaluate_object(device->handle,
+                                                     object_name, NULL, NULL);
                        if (ACPI_FAILURE(status)) {
                                result = -ENODEV;
                                goto end;
                        }
                }
-       }
-       else {
+       } else {
                if (device->power.states[state].flags.explicit_set) {
-                       status = acpi_evaluate_object(device->handle, 
-                               object_name, NULL, NULL);
+                       status = acpi_evaluate_object(device->handle,
+                                                     object_name, NULL, NULL);
                        if (ACPI_FAILURE(status)) {
                                result = -ENODEV;
                                goto end;
@@ -269,19 +259,20 @@ acpi_bus_set_power (
                }
        }
 
-end:
+      end:
        if (result)
-               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Error transitioning device [%s] to D%d\n",
-                       device->pnp.bus_id, state));
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Error transitioning device [%s] to D%d\n",
+                                 device->pnp.bus_id, state));
        else
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] transitioned to D%d\n",
-                       device->pnp.bus_id, state));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Device [%s] transitioned to D%d\n",
+                                 device->pnp.bus_id, state));
 
        return_VALUE(result);
 }
-EXPORT_SYMBOL(acpi_bus_set_power);
-
 
+EXPORT_SYMBOL(acpi_bus_set_power);
 
 /* --------------------------------------------------------------------------
                                 Event Management
@@ -292,16 +283,12 @@ static DEFINE_SPINLOCK(acpi_bus_event_lock);
 LIST_HEAD(acpi_bus_event_list);
 DECLARE_WAIT_QUEUE_HEAD(acpi_bus_event_queue);
 
-extern int                     event_is_open;
+extern int event_is_open;
 
-int
-acpi_bus_generate_event (
-       struct acpi_device      *device,
-       u8                      type,
-       int                     data)
+int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data)
 {
-       struct acpi_bus_event   *event = NULL;
-       unsigned long           flags = 0;
+       struct acpi_bus_event *event = NULL;
+       unsigned long flags = 0;
 
        ACPI_FUNCTION_TRACE("acpi_bus_generate_event");
 
@@ -329,14 +316,13 @@ acpi_bus_generate_event (
 
        return_VALUE(0);
 }
+
 EXPORT_SYMBOL(acpi_bus_generate_event);
 
-int
-acpi_bus_receive_event (
-       struct acpi_bus_event   *event)
+int acpi_bus_receive_event(struct acpi_bus_event *event)
 {
-       unsigned long           flags = 0;
-       struct acpi_bus_event   *entry = NULL;
+       unsigned long flags = 0;
+       struct acpi_bus_event *entry = NULL;
 
        DECLARE_WAITQUEUE(wait, current);
 
@@ -361,7 +347,8 @@ acpi_bus_receive_event (
        }
 
        spin_lock_irqsave(&acpi_bus_event_lock, flags);
-       entry = list_entry(acpi_bus_event_list.next, struct acpi_bus_event, node);
+       entry =
+           list_entry(acpi_bus_event_list.next, struct acpi_bus_event, node);
        if (entry)
                list_del(&entry->node);
        spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
@@ -375,19 +362,17 @@ acpi_bus_receive_event (
 
        return_VALUE(0);
 }
-EXPORT_SYMBOL(acpi_bus_receive_event);
 
+EXPORT_SYMBOL(acpi_bus_receive_event);
 
 /* --------------------------------------------------------------------------
                              Notification Handling
    -------------------------------------------------------------------------- */
 
 static int
-acpi_bus_check_device (
-       struct acpi_device      *device,
-       int                     *status_changed)
+acpi_bus_check_device(struct acpi_device *device, int *status_changed)
 {
-       acpi_status             status = 0;
+       acpi_status status = 0;
        struct acpi_device_status old_status;
 
        ACPI_FUNCTION_TRACE("acpi_bus_check_device");
@@ -422,15 +407,14 @@ acpi_bus_check_device (
 
        if (status_changed)
                *status_changed = 1;
-       
+
        /*
         * Device Insertion/Removal
         */
        if ((device->status.present) && !(old_status.present)) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device insertion detected\n"));
                /* TBD: Handle device insertion */
-       }
-       else if (!(device->status.present) && (old_status.present)) {
+       } else if (!(device->status.present) && (old_status.present)) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device removal detected\n"));
                /* TBD: Handle device removal */
        }
@@ -438,13 +422,10 @@ acpi_bus_check_device (
        return_VALUE(0);
 }
 
-
-static int
-acpi_bus_check_scope (
-       struct acpi_device      *device)
+static int acpi_bus_check_scope(struct acpi_device *device)
 {
-       int                     result = 0;
-       int                     status_changed = 0;
+       int result = 0;
+       int status_changed = 0;
 
        ACPI_FUNCTION_TRACE("acpi_bus_check_scope");
 
@@ -467,20 +448,15 @@ acpi_bus_check_scope (
        return_VALUE(0);
 }
 
-
 /**
  * acpi_bus_notify
  * ---------------
  * Callback for all 'system-level' device notifications (values 0x00-0x7F).
  */
-static void 
-acpi_bus_notify (
-       acpi_handle             handle,
-       u32                     type,
-       void                    *data)
+static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
 {
-       int                     result = 0;
-       struct acpi_device      *device = NULL;
+       int result = 0;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_bus_notify");
 
@@ -490,64 +466,73 @@ acpi_bus_notify (
        switch (type) {
 
        case ACPI_NOTIFY_BUS_CHECK:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received BUS CHECK notification for device [%s]\n", 
-                       device->pnp.bus_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Received BUS CHECK notification for device [%s]\n",
+                                 device->pnp.bus_id));
                result = acpi_bus_check_scope(device);
                /* 
                 * TBD: We'll need to outsource certain events to non-ACPI
-                *      drivers via the device manager (device.c).
+                *      drivers via the device manager (device.c).
                 */
                break;
 
        case ACPI_NOTIFY_DEVICE_CHECK:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received DEVICE CHECK notification for device [%s]\n", 
-                       device->pnp.bus_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Received DEVICE CHECK notification for device [%s]\n",
+                                 device->pnp.bus_id));
                result = acpi_bus_check_device(device, NULL);
                /* 
                 * TBD: We'll need to outsource certain events to non-ACPI
-                *      drivers via the device manager (device.c).
+                *      drivers via the device manager (device.c).
                 */
                break;
 
        case ACPI_NOTIFY_DEVICE_WAKE:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received DEVICE WAKE notification for device [%s]\n", 
-                       device->pnp.bus_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Received DEVICE WAKE notification for device [%s]\n",
+                                 device->pnp.bus_id));
                /* TBD */
                break;
 
        case ACPI_NOTIFY_EJECT_REQUEST:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received EJECT REQUEST notification for device [%s]\n", 
-                       device->pnp.bus_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Received EJECT REQUEST notification for device [%s]\n",
+                                 device->pnp.bus_id));
                /* TBD */
                break;
 
        case ACPI_NOTIFY_DEVICE_CHECK_LIGHT:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received DEVICE CHECK LIGHT notification for device [%s]\n", 
-                       device->pnp.bus_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Received DEVICE CHECK LIGHT notification for device [%s]\n",
+                                 device->pnp.bus_id));
                /* TBD: Exactly what does 'light' mean? */
                break;
 
        case ACPI_NOTIFY_FREQUENCY_MISMATCH:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received FREQUENCY MISMATCH notification for device [%s]\n", 
-                       device->pnp.bus_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Received FREQUENCY MISMATCH notification for device [%s]\n",
+                                 device->pnp.bus_id));
                /* TBD */
                break;
 
        case ACPI_NOTIFY_BUS_MODE_MISMATCH:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received BUS MODE MISMATCH notification for device [%s]\n", 
-                       device->pnp.bus_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Received BUS MODE MISMATCH notification for device [%s]\n",
+                                 device->pnp.bus_id));
                /* TBD */
                break;
 
        case ACPI_NOTIFY_POWER_FAULT:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received POWER FAULT notification for device [%s]\n", 
-                       device->pnp.bus_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Received POWER FAULT notification for device [%s]\n",
+                                 device->pnp.bus_id));
                /* TBD */
                break;
 
        default:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Received unknown/unsupported notification [%08x]\n", 
-                       type));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Received unknown/unsupported notification [%08x]\n",
+                                 type));
                break;
        }
 
@@ -558,13 +543,12 @@ acpi_bus_notify (
                              Initialization/Cleanup
    -------------------------------------------------------------------------- */
 
-static int __init
-acpi_bus_init_irq (void)
+static int __init acpi_bus_init_irq(void)
 {
-       acpi_status             status = AE_OK;
-       union acpi_object       arg = {ACPI_TYPE_INTEGER};
-       struct acpi_object_list arg_list = {1, &arg};
-       char                    *message = NULL;
+       acpi_status status = AE_OK;
+       union acpi_object arg = { ACPI_TYPE_INTEGER };
+       struct acpi_object_list arg_list = { 1, &arg };
+       char *message = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_bus_init_irq");
 
@@ -601,12 +585,10 @@ acpi_bus_init_irq (void)
        return_VALUE(0);
 }
 
-
-void __init
-acpi_early_init (void)
+void __init acpi_early_init(void)
 {
-       acpi_status             status = AE_OK;
-       struct acpi_buffer      buffer = {sizeof(acpi_fadt), &acpi_fadt};
+       acpi_status status = AE_OK;
+       struct acpi_buffer buffer = { sizeof(acpi_fadt), &acpi_fadt };
 
        ACPI_FUNCTION_TRACE("acpi_early_init");
 
@@ -619,13 +601,15 @@ acpi_early_init (void)
 
        status = acpi_initialize_subsystem();
        if (ACPI_FAILURE(status)) {
-               printk(KERN_ERR PREFIX "Unable to initialize the ACPI Interpreter\n");
+               printk(KERN_ERR PREFIX
+                      "Unable to initialize the ACPI Interpreter\n");
                goto error0;
        }
 
        status = acpi_load_tables();
        if (ACPI_FAILURE(status)) {
-               printk(KERN_ERR PREFIX "Unable to load the System Description Tables\n");
+               printk(KERN_ERR PREFIX
+                      "Unable to load the System Description Tables\n");
                goto error0;
        }
 
@@ -637,7 +621,6 @@ acpi_early_init (void)
                printk(KERN_ERR PREFIX "Unable to get the FADT\n");
                goto error0;
        }
-
 #ifdef CONFIG_X86
        if (!acpi_ioapic) {
                extern acpi_interrupt_flags acpi_sci_flags;
@@ -647,7 +630,8 @@ acpi_early_init (void)
                        acpi_sci_flags.trigger = 3;
 
                /* Set PIC-mode SCI trigger type */
-               acpi_pic_sci_set_trigger(acpi_fadt.sci_int, acpi_sci_flags.trigger);
+               acpi_pic_sci_set_trigger(acpi_fadt.sci_int,
+                                        acpi_sci_flags.trigger);
        } else {
                extern int acpi_sci_override_gsi;
                /*
@@ -658,7 +642,10 @@ acpi_early_init (void)
        }
 #endif
 
-       status = acpi_enable_subsystem(~(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE));
+       status =
+           acpi_enable_subsystem(~
+                                 (ACPI_NO_HARDWARE_INIT |
+                                  ACPI_NO_ACPI_ENABLE));
        if (ACPI_FAILURE(status)) {
                printk(KERN_ERR PREFIX "Unable to enable ACPI\n");
                goto error0;
@@ -666,30 +653,32 @@ acpi_early_init (void)
 
        return_VOID;
 
-error0:
+      error0:
        disable_acpi();
        return_VOID;
 }
 
-static int __init
-acpi_bus_init (void)
+static int __init acpi_bus_init(void)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       extern acpi_status      acpi_os_initialize1(void);
+       int result = 0;
+       acpi_status status = AE_OK;
+       extern acpi_status acpi_os_initialize1(void);
 
        ACPI_FUNCTION_TRACE("acpi_bus_init");
 
        status = acpi_os_initialize1();
 
-       status = acpi_enable_subsystem(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE);
+       status =
+           acpi_enable_subsystem(ACPI_NO_HARDWARE_INIT | ACPI_NO_ACPI_ENABLE);
        if (ACPI_FAILURE(status)) {
-               printk(KERN_ERR PREFIX "Unable to start the ACPI Interpreter\n");
+               printk(KERN_ERR PREFIX
+                      "Unable to start the ACPI Interpreter\n");
                goto error1;
        }
 
        if (ACPI_FAILURE(status)) {
-               printk(KERN_ERR PREFIX "Unable to initialize ACPI OS objects\n");
+               printk(KERN_ERR PREFIX
+                      "Unable to initialize ACPI OS objects\n");
                goto error1;
        }
 #ifdef CONFIG_ACPI_EC
@@ -723,9 +712,12 @@ acpi_bus_init (void)
        /*
         * Register the for all standard device notifications.
         */
-       status = acpi_install_notify_handler(ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY, &acpi_bus_notify, NULL);
+       status =
+           acpi_install_notify_handler(ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY,
+                                       &acpi_bus_notify, NULL);
        if (ACPI_FAILURE(status)) {
-               printk(KERN_ERR PREFIX "Unable to register for device notifications\n");
+               printk(KERN_ERR PREFIX
+                      "Unable to register for device notifications\n");
                goto error1;
        }
 
@@ -737,21 +729,20 @@ acpi_bus_init (void)
        return_VALUE(0);
 
        /* Mimic structured exception handling */
-error1:
+      error1:
        acpi_terminate();
        return_VALUE(-ENODEV);
 }
 
-decl_subsys(acpi,NULL,NULL);
+decl_subsys(acpi, NULL, NULL);
 
-static int __init acpi_init (void)
+static int __init acpi_init(void)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_init");
 
-       printk(KERN_INFO PREFIX "Subsystem revision %08x\n",
-               ACPI_CA_VERSION);
+       printk(KERN_INFO PREFIX "Subsystem revision %08x\n", ACPI_CA_VERSION);
 
        if (acpi_disabled) {
                printk(KERN_INFO PREFIX "Interpreter disabled.\n");
@@ -767,7 +758,8 @@ static int __init acpi_init (void)
                if (!PM_IS_ACTIVE())
                        pm_active = 1;
                else {
-                       printk(KERN_INFO PREFIX "APM is already active, exiting\n");
+                       printk(KERN_INFO PREFIX
+                              "APM is already active, exiting\n");
                        disable_acpi();
                        result = -ENODEV;
                }
index 8162fd0c21a79fed1c11da240d63025556595c63..4b6d9f0096a10cb8cdf1409f8558cff7674b1e9b 100644 (file)
@@ -32,7 +32,6 @@
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define ACPI_BUTTON_COMPONENT          0x00080000
 #define ACPI_BUTTON_DRIVER_NAME                "ACPI Button Driver"
 #define ACPI_BUTTON_CLASS              "button"
@@ -42,7 +41,7 @@
 #define ACPI_BUTTON_NOTIFY_STATUS      0x80
 
 #define ACPI_BUTTON_SUBCLASS_POWER     "power"
-#define ACPI_BUTTON_HID_POWER          "PNP0C0C"       
+#define ACPI_BUTTON_HID_POWER          "PNP0C0C"
 #define ACPI_BUTTON_DEVICE_NAME_POWER  "Power Button (CM)"
 #define ACPI_BUTTON_DEVICE_NAME_POWERF "Power Button (FF)"
 #define ACPI_BUTTON_TYPE_POWER         0x01
 #define ACPI_BUTTON_TYPE_LID           0x05
 
 #define _COMPONENT             ACPI_BUTTON_COMPONENT
-ACPI_MODULE_NAME               ("acpi_button")
+ACPI_MODULE_NAME("acpi_button")
 
-MODULE_AUTHOR("Paul Diefenbaugh");
+    MODULE_AUTHOR("Paul Diefenbaugh");
 MODULE_DESCRIPTION(ACPI_BUTTON_DRIVER_NAME);
 MODULE_LICENSE("GPL");
 
-
-static int acpi_button_add (struct acpi_device *device);
-static int acpi_button_remove (struct acpi_device *device, int type);
+static int acpi_button_add(struct acpi_device *device);
+static int acpi_button_remove(struct acpi_device *device, int type);
 static int acpi_button_info_open_fs(struct inode *inode, struct file *file);
 static int acpi_button_state_open_fs(struct inode *inode, struct file *file);
 
 static struct acpi_driver acpi_button_driver = {
-       .name =         ACPI_BUTTON_DRIVER_NAME,
-       .class =        ACPI_BUTTON_CLASS,
-       .ids =          "ACPI_FPB,ACPI_FSB,PNP0C0D,PNP0C0C,PNP0C0E",
-       .ops =          {
-                               .add =          acpi_button_add,
-                               .remove =       acpi_button_remove,
-                       },
+       .name = ACPI_BUTTON_DRIVER_NAME,
+       .class = ACPI_BUTTON_CLASS,
+       .ids = "ACPI_FPB,ACPI_FSB,PNP0C0D,PNP0C0C,PNP0C0E",
+       .ops = {
+               .add = acpi_button_add,
+               .remove = acpi_button_remove,
+               },
 };
 
 struct acpi_button {
-       acpi_handle             handle;
-       struct acpi_device      *device;        /* Fixed button kludge */
-       u8                      type;
-       unsigned long           pushed;
+       acpi_handle handle;
+       struct acpi_device *device;     /* Fixed button kludge */
+       u8 type;
+       unsigned long pushed;
 };
 
 static struct file_operations acpi_button_info_fops = {
-       .open           = acpi_button_info_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_button_info_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 static struct file_operations acpi_button_state_fops = {
-       .open           = acpi_button_state_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_button_state_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
+
 /* --------------------------------------------------------------------------
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-static struct proc_dir_entry   *acpi_button_dir;
+static struct proc_dir_entry *acpi_button_dir;
 
 static int acpi_button_info_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_button      *button = (struct acpi_button *) seq->private;
+       struct acpi_button *button = (struct acpi_button *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_button_info_seq_show");
 
        if (!button || !button->device)
                return_VALUE(0);
 
-       seq_printf(seq, "type:                    %s\n", 
-               acpi_device_name(button->device));
+       seq_printf(seq, "type:                    %s\n",
+                  acpi_device_name(button->device));
 
        return_VALUE(0);
 }
@@ -128,24 +127,24 @@ static int acpi_button_info_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_button_info_seq_show, PDE(inode)->data);
 }
-       
+
 static int acpi_button_state_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_button      *button = (struct acpi_button *) seq->private;
-       acpi_status             status;
-       unsigned long           state;
+       struct acpi_button *button = (struct acpi_button *)seq->private;
+       acpi_status status;
+       unsigned long state;
 
        ACPI_FUNCTION_TRACE("acpi_button_state_seq_show");
 
        if (!button || !button->device)
                return_VALUE(0);
 
-       status = acpi_evaluate_integer(button->handle,"_LID",NULL,&state);
+       status = acpi_evaluate_integer(button->handle, "_LID", NULL, &state);
        if (ACPI_FAILURE(status)) {
                seq_printf(seq, "state:      unsupported\n");
-       }
-       else{
-               seq_printf(seq, "state:      %s\n", (state ? "open" : "closed")); 
+       } else {
+               seq_printf(seq, "state:      %s\n",
+                          (state ? "open" : "closed"));
        }
 
        return_VALUE(0);
@@ -160,12 +159,10 @@ static struct proc_dir_entry *acpi_power_dir;
 static struct proc_dir_entry *acpi_sleep_dir;
 static struct proc_dir_entry *acpi_lid_dir;
 
-static int
-acpi_button_add_fs (
-       struct acpi_device      *device)
+static int acpi_button_add_fs(struct acpi_device *device)
 {
-       struct proc_dir_entry   *entry = NULL;
-       struct acpi_button      *button = NULL;
+       struct proc_dir_entry *entry = NULL;
+       struct acpi_button *button = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_button_add_fs");
 
@@ -178,21 +175,21 @@ acpi_button_add_fs (
        case ACPI_BUTTON_TYPE_POWER:
        case ACPI_BUTTON_TYPE_POWERF:
                if (!acpi_power_dir)
-                       acpi_power_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_POWER, 
-                               acpi_button_dir);
+                       acpi_power_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_POWER,
+                                                   acpi_button_dir);
                entry = acpi_power_dir;
                break;
        case ACPI_BUTTON_TYPE_SLEEP:
        case ACPI_BUTTON_TYPE_SLEEPF:
                if (!acpi_sleep_dir)
-                       acpi_sleep_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_SLEEP, 
-                               acpi_button_dir);
+                       acpi_sleep_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_SLEEP,
+                                                   acpi_button_dir);
                entry = acpi_sleep_dir;
                break;
        case ACPI_BUTTON_TYPE_LID:
                if (!acpi_lid_dir)
-                       acpi_lid_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_LID, 
-                               acpi_button_dir);
+                       acpi_lid_dir = proc_mkdir(ACPI_BUTTON_SUBCLASS_LID,
+                                                 acpi_button_dir);
                entry = acpi_lid_dir;
                break;
        }
@@ -208,11 +205,11 @@ acpi_button_add_fs (
 
        /* 'info' [R] */
        entry = create_proc_entry(ACPI_BUTTON_FILE_INFO,
-               S_IRUGO, acpi_device_dir(device));
+                                 S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_BUTTON_FILE_INFO));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_BUTTON_FILE_INFO));
        else {
                entry->proc_fops = &acpi_button_info_fops;
                entry->data = acpi_driver_data(device);
@@ -222,11 +219,11 @@ acpi_button_add_fs (
        /* show lid state [R] */
        if (button->type == ACPI_BUTTON_TYPE_LID) {
                entry = create_proc_entry(ACPI_BUTTON_FILE_STATE,
-                       S_IRUGO, acpi_device_dir(device));
+                                         S_IRUGO, acpi_device_dir(device));
                if (!entry)
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                               "Unable to create '%s' fs entry\n",
-                               ACPI_BUTTON_FILE_INFO));
+                                         "Unable to create '%s' fs entry\n",
+                                         ACPI_BUTTON_FILE_INFO));
                else {
                        entry->proc_fops = &acpi_button_state_fops;
                        entry->data = acpi_driver_data(device);
@@ -237,12 +234,9 @@ acpi_button_add_fs (
        return_VALUE(0);
 }
 
-
-static int
-acpi_button_remove_fs (
-       struct acpi_device      *device)
+static int acpi_button_remove_fs(struct acpi_device *device)
 {
-       struct acpi_button      *button = NULL;
+       struct acpi_button *button = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_button_remove_fs");
 
@@ -250,30 +244,25 @@ acpi_button_remove_fs (
        if (acpi_device_dir(device)) {
                if (button->type == ACPI_BUTTON_TYPE_LID)
                        remove_proc_entry(ACPI_BUTTON_FILE_STATE,
-                                            acpi_device_dir(device));
+                                         acpi_device_dir(device));
                remove_proc_entry(ACPI_BUTTON_FILE_INFO,
-                                    acpi_device_dir(device));
+                                 acpi_device_dir(device));
 
                remove_proc_entry(acpi_device_bid(device),
-                                    acpi_device_dir(device)->parent);
+                                 acpi_device_dir(device)->parent);
                acpi_device_dir(device) = NULL;
        }
 
        return_VALUE(0);
 }
 
-
 /* --------------------------------------------------------------------------
                                 Driver Interface
    -------------------------------------------------------------------------- */
 
-static void
-acpi_button_notify (
-       acpi_handle             handle,
-       u32                     event,
-       void                    *data)
+static void acpi_button_notify(acpi_handle handle, u32 event, void *data)
 {
-       struct acpi_button      *button = (struct acpi_button *) data;
+       struct acpi_button *button = (struct acpi_button *)data;
 
        ACPI_FUNCTION_TRACE("acpi_button_notify");
 
@@ -282,24 +271,22 @@ acpi_button_notify (
 
        switch (event) {
        case ACPI_BUTTON_NOTIFY_STATUS:
-               acpi_bus_generate_event(button->device, event, ++button->pushed);
+               acpi_bus_generate_event(button->device, event,
+                                       ++button->pushed);
                break;
        default:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Unsupported event [0x%x]\n", event));
+                                 "Unsupported event [0x%x]\n", event));
                break;
        }
 
        return_VOID;
 }
 
-
-static acpi_status
-acpi_button_notify_fixed (
-       void                    *data)
+static acpi_status acpi_button_notify_fixed(void *data)
 {
-       struct acpi_button      *button = (struct acpi_button *) data;
-       
+       struct acpi_button *button = (struct acpi_button *)data;
+
        ACPI_FUNCTION_TRACE("acpi_button_notify_fixed");
 
        if (!button)
@@ -310,14 +297,11 @@ acpi_button_notify_fixed (
        return_ACPI_STATUS(AE_OK);
 }
 
-
-static int
-acpi_button_add (
-       struct acpi_device      *device)
+static int acpi_button_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_button      *button = NULL;
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_button *button = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_button_add");
 
@@ -339,42 +323,34 @@ acpi_button_add (
         */
        if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_POWER)) {
                button->type = ACPI_BUTTON_TYPE_POWER;
-               strcpy(acpi_device_name(device),
-                       ACPI_BUTTON_DEVICE_NAME_POWER);
-               sprintf(acpi_device_class(device), "%s/%s", 
+               strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_POWER);
+               sprintf(acpi_device_class(device), "%s/%s",
                        ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER);
-       }
-       else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_POWERF)) {
+       } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_POWERF)) {
                button->type = ACPI_BUTTON_TYPE_POWERF;
                strcpy(acpi_device_name(device),
-                       ACPI_BUTTON_DEVICE_NAME_POWERF);
-               sprintf(acpi_device_class(device), "%s/%s", 
+                      ACPI_BUTTON_DEVICE_NAME_POWERF);
+               sprintf(acpi_device_class(device), "%s/%s",
                        ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_POWER);
-       }
-       else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_SLEEP)) {
+       } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_SLEEP)) {
                button->type = ACPI_BUTTON_TYPE_SLEEP;
-               strcpy(acpi_device_name(device),
-                       ACPI_BUTTON_DEVICE_NAME_SLEEP);
-               sprintf(acpi_device_class(device), "%s/%s", 
+               strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_SLEEP);
+               sprintf(acpi_device_class(device), "%s/%s",
                        ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP);
-       }
-       else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_SLEEPF)) {
+       } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_SLEEPF)) {
                button->type = ACPI_BUTTON_TYPE_SLEEPF;
                strcpy(acpi_device_name(device),
-                       ACPI_BUTTON_DEVICE_NAME_SLEEPF);
-               sprintf(acpi_device_class(device), "%s/%s", 
+                      ACPI_BUTTON_DEVICE_NAME_SLEEPF);
+               sprintf(acpi_device_class(device), "%s/%s",
                        ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_SLEEP);
-       }
-       else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_LID)) {
+       } else if (!strcmp(acpi_device_hid(device), ACPI_BUTTON_HID_LID)) {
                button->type = ACPI_BUTTON_TYPE_LID;
-               strcpy(acpi_device_name(device),
-                       ACPI_BUTTON_DEVICE_NAME_LID);
-               sprintf(acpi_device_class(device), "%s/%s", 
+               strcpy(acpi_device_name(device), ACPI_BUTTON_DEVICE_NAME_LID);
+               sprintf(acpi_device_class(device), "%s/%s",
                        ACPI_BUTTON_CLASS, ACPI_BUTTON_SUBCLASS_LID);
-       }
-       else {
+       } else {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unsupported hid [%s]\n",
-                       acpi_device_hid(device)));
+                                 acpi_device_hid(device)));
                result = -ENODEV;
                goto end;
        }
@@ -385,46 +361,46 @@ acpi_button_add (
 
        switch (button->type) {
        case ACPI_BUTTON_TYPE_POWERF:
-               status = acpi_install_fixed_event_handler (
-                       ACPI_EVENT_POWER_BUTTON,
-                       acpi_button_notify_fixed,
-                       button);
+               status =
+                   acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
+                                                    acpi_button_notify_fixed,
+                                                    button);
                break;
        case ACPI_BUTTON_TYPE_SLEEPF:
-               status = acpi_install_fixed_event_handler (
-                       ACPI_EVENT_SLEEP_BUTTON,
-                       acpi_button_notify_fixed,
-                       button);
+               status =
+                   acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
+                                                    acpi_button_notify_fixed,
+                                                    button);
                break;
        default:
-               status = acpi_install_notify_handler (
-                       button->handle,
-                       ACPI_DEVICE_NOTIFY,
-                       acpi_button_notify,
-                       button);
+               status = acpi_install_notify_handler(button->handle,
+                                                    ACPI_DEVICE_NOTIFY,
+                                                    acpi_button_notify,
+                                                    button);
                break;
        }
 
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error installing notify handler\n"));
+                                 "Error installing notify handler\n"));
                result = -ENODEV;
                goto end;
        }
 
        if (device->wakeup.flags.valid) {
                /* Button's GPE is run-wake GPE */
-               acpi_set_gpe_type(device->wakeup.gpe_device, 
-                       device->wakeup.gpe_number, ACPI_GPE_TYPE_WAKE_RUN);
-               acpi_enable_gpe(device->wakeup.gpe_device, 
-                       device->wakeup.gpe_number, ACPI_NOT_ISR);
+               acpi_set_gpe_type(device->wakeup.gpe_device,
+                                 device->wakeup.gpe_number,
+                                 ACPI_GPE_TYPE_WAKE_RUN);
+               acpi_enable_gpe(device->wakeup.gpe_device,
+                               device->wakeup.gpe_number, ACPI_NOT_ISR);
                device->wakeup.state.enabled = 1;
        }
 
-       printk(KERN_INFO PREFIX "%s [%s]\n", 
-               acpi_device_name(device), acpi_device_bid(device));
+       printk(KERN_INFO PREFIX "%s [%s]\n",
+              acpi_device_name(device), acpi_device_bid(device));
 
-end:
+      end:
        if (result) {
                acpi_button_remove_fs(device);
                kfree(button);
@@ -433,12 +409,10 @@ end:
        return_VALUE(result);
 }
 
-
-static int
-acpi_button_remove (struct acpi_device *device, int type)
+static int acpi_button_remove(struct acpi_device *device, int type)
 {
-       acpi_status             status = 0;
-       struct acpi_button      *button = NULL;
+       acpi_status status = 0;
+       struct acpi_button *button = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_button_remove");
 
@@ -450,35 +424,36 @@ acpi_button_remove (struct acpi_device *device, int type)
        /* Unregister for device notifications. */
        switch (button->type) {
        case ACPI_BUTTON_TYPE_POWERF:
-               status = acpi_remove_fixed_event_handler(
-                       ACPI_EVENT_POWER_BUTTON, acpi_button_notify_fixed);
+               status =
+                   acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
+                                                   acpi_button_notify_fixed);
                break;
        case ACPI_BUTTON_TYPE_SLEEPF:
-               status = acpi_remove_fixed_event_handler(
-                       ACPI_EVENT_SLEEP_BUTTON, acpi_button_notify_fixed);
+               status =
+                   acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
+                                                   acpi_button_notify_fixed);
                break;
        default:
                status = acpi_remove_notify_handler(button->handle,
-                       ACPI_DEVICE_NOTIFY, acpi_button_notify);
+                                                   ACPI_DEVICE_NOTIFY,
+                                                   acpi_button_notify);
                break;
        }
 
        if (ACPI_FAILURE(status))
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error removing notify handler\n"));
+                                 "Error removing notify handler\n"));
 
-       acpi_button_remove_fs(device);  
+       acpi_button_remove_fs(device);
 
        kfree(button);
 
        return_VALUE(0);
 }
 
-
-static int __init
-acpi_button_init (void)
+static int __init acpi_button_init(void)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_button_init");
 
@@ -495,15 +470,13 @@ acpi_button_init (void)
        return_VALUE(0);
 }
 
-
-static void __exit
-acpi_button_exit (void)
+static void __exit acpi_button_exit(void)
 {
        ACPI_FUNCTION_TRACE("acpi_button_exit");
 
        acpi_bus_unregister_driver(&acpi_button_driver);
 
-       if (acpi_power_dir) 
+       if (acpi_power_dir)
                remove_proc_entry(ACPI_BUTTON_SUBCLASS_POWER, acpi_button_dir);
        if (acpi_sleep_dir)
                remove_proc_entry(ACPI_BUTTON_SUBCLASS_SLEEP, acpi_button_dir);
@@ -514,6 +487,5 @@ acpi_button_exit (void)
        return_VOID;
 }
 
-
 module_init(acpi_button_init);
 module_exit(acpi_button_exit);
index 97013ddfa202b5d01678778d8443b0eba6cbfe64..10dd695a1dd93e06d43497b5b4c49ce8680a7cac 100644 (file)
@@ -44,9 +44,9 @@
 
 #define ACPI_CONTAINER_COMPONENT       0x01000000
 #define _COMPONENT                     ACPI_CONTAINER_COMPONENT
-ACPI_MODULE_NAME                       ("acpi_container")
+ACPI_MODULE_NAME("acpi_container")
 
-MODULE_AUTHOR("Anil S Keshavamurthy");
+    MODULE_AUTHOR("Anil S Keshavamurthy");
 MODULE_DESCRIPTION(ACPI_CONTAINER_DRIVER_NAME);
 MODULE_LICENSE("GPL");
 
@@ -56,41 +56,38 @@ static int acpi_container_add(struct acpi_device *device);
 static int acpi_container_remove(struct acpi_device *device, int type);
 
 static struct acpi_driver acpi_container_driver = {
-       .name =         ACPI_CONTAINER_DRIVER_NAME,
-       .class =        ACPI_CONTAINER_CLASS,
-       .ids =          "ACPI0004,PNP0A05,PNP0A06",
-       .ops =          {
-                               .add =          acpi_container_add,
-                               .remove =       acpi_container_remove,
-                       },
+       .name = ACPI_CONTAINER_DRIVER_NAME,
+       .class = ACPI_CONTAINER_CLASS,
+       .ids = "ACPI0004,PNP0A05,PNP0A06",
+       .ops = {
+               .add = acpi_container_add,
+               .remove = acpi_container_remove,
+               },
 };
 
-
 /*******************************************************************/
 
-static int
-is_device_present(acpi_handle handle)
+static int is_device_present(acpi_handle handle)
 {
-       acpi_handle             temp;
-       acpi_status             status;
-       unsigned long   sta;
+       acpi_handle temp;
+       acpi_status status;
+       unsigned long sta;
 
        ACPI_FUNCTION_TRACE("is_device_present");
 
        status = acpi_get_handle(handle, "_STA", &temp);
        if (ACPI_FAILURE(status))
-               return_VALUE(1); /* _STA not found, assmue device present */
+               return_VALUE(1);        /* _STA not found, assmue device present */
 
        status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
        if (ACPI_FAILURE(status))
-               return_VALUE(0); /* Firmware error */
+               return_VALUE(0);        /* Firmware error */
 
        return_VALUE((sta & ACPI_STA_PRESENT) == ACPI_STA_PRESENT);
 }
 
 /*******************************************************************/
-static int
-acpi_container_add(struct acpi_device *device)
+static int acpi_container_add(struct acpi_device *device)
 {
        struct acpi_container *container;
 
@@ -102,28 +99,26 @@ acpi_container_add(struct acpi_device *device)
        }
 
        container = kmalloc(sizeof(struct acpi_container), GFP_KERNEL);
-       if(!container)
+       if (!container)
                return_VALUE(-ENOMEM);
-       
+
        memset(container, 0, sizeof(struct acpi_container));
        container->handle = device->handle;
        strcpy(acpi_device_name(device), ACPI_CONTAINER_DEVICE_NAME);
        strcpy(acpi_device_class(device), ACPI_CONTAINER_CLASS);
        acpi_driver_data(device) = container;
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device <%s> bid <%s>\n",       \
-               acpi_device_name(device), acpi_device_bid(device)));
-
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device <%s> bid <%s>\n",
+                         acpi_device_name(device), acpi_device_bid(device)));
 
        return_VALUE(0);
 }
 
-static int
-acpi_container_remove(struct acpi_device *device, int type)
+static int acpi_container_remove(struct acpi_device *device, int type)
 {
-       acpi_status             status = AE_OK;
-       struct acpi_container   *pc = NULL;
-       pc = (struct acpi_container*) acpi_driver_data(device);
+       acpi_status status = AE_OK;
+       struct acpi_container *pc = NULL;
+       pc = (struct acpi_container *)acpi_driver_data(device);
 
        if (pc)
                kfree(pc);
@@ -131,9 +126,7 @@ acpi_container_remove(struct acpi_device *device, int type)
        return status;
 }
 
-
-static int
-container_device_add(struct acpi_device **device, acpi_handle handle)
+static int container_device_add(struct acpi_device **device, acpi_handle handle)
 {
        acpi_handle phandle;
        struct acpi_device *pdev;
@@ -158,10 +151,9 @@ container_device_add(struct acpi_device **device, acpi_handle handle)
        return_VALUE(result);
 }
 
-static void
-container_notify_cb(acpi_handle handle, u32 type, void *context)
+static void container_notify_cb(acpi_handle handle, u32 type, void *context)
 {
-       struct acpi_device              *device = NULL;
+       struct acpi_device *device = NULL;
        int result;
        int present;
        acpi_status status;
@@ -169,14 +161,14 @@ container_notify_cb(acpi_handle handle, u32 type, void *context)
        ACPI_FUNCTION_TRACE("container_notify_cb");
 
        present = is_device_present(handle);
-       
+
        switch (type) {
        case ACPI_NOTIFY_BUS_CHECK:
                /* Fall through */
        case ACPI_NOTIFY_DEVICE_CHECK:
                printk("Container driver received %s event\n",
-                       (type == ACPI_NOTIFY_BUS_CHECK)?
-                       "ACPI_NOTIFY_BUS_CHECK":"ACPI_NOTIFY_DEVICE_CHECK");
+                      (type == ACPI_NOTIFY_BUS_CHECK) ?
+                      "ACPI_NOTIFY_BUS_CHECK" : "ACPI_NOTIFY_DEVICE_CHECK");
                status = acpi_bus_get_device(handle, &device);
                if (present) {
                        if (ACPI_FAILURE(status) || !device) {
@@ -207,15 +199,13 @@ container_notify_cb(acpi_handle handle, u32 type, void *context)
 
 static acpi_status
 container_walk_namespace_cb(acpi_handle handle,
-       u32 lvl,
-       void *context,
-       void **rv)
+                           u32 lvl, void *context, void **rv)
 {
-       char                            *hid = NULL;
-       struct acpi_buffer              buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       struct acpi_device_info         *info;
-       acpi_status                     status;
-       int                             *action = context;
+       char *hid = NULL;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       struct acpi_device_info *info;
+       acpi_status status;
+       int *action = context;
 
        ACPI_FUNCTION_TRACE("container_walk_namespace_cb");
 
@@ -233,66 +223,60 @@ container_walk_namespace_cb(acpi_handle handle,
        }
 
        if (strcmp(hid, "ACPI0004") && strcmp(hid, "PNP0A05") &&
-                       strcmp(hid, "PNP0A06")) {
+           strcmp(hid, "PNP0A06")) {
                goto end;
        }
 
-       switch(*action) {
+       switch (*action) {
        case INSTALL_NOTIFY_HANDLER:
                acpi_install_notify_handler(handle,
-                       ACPI_SYSTEM_NOTIFY,
-                       container_notify_cb,
-                       NULL);
+                                           ACPI_SYSTEM_NOTIFY,
+                                           container_notify_cb, NULL);
                break;
        case UNINSTALL_NOTIFY_HANDLER:
                acpi_remove_notify_handler(handle,
-                       ACPI_SYSTEM_NOTIFY,
-                       container_notify_cb);
+                                          ACPI_SYSTEM_NOTIFY,
+                                          container_notify_cb);
                break;
        default:
                break;
        }
 
-end:
+      end:
        acpi_os_free(buffer.pointer);
 
        return_ACPI_STATUS(AE_OK);
 }
 
-
-static int __init
-acpi_container_init(void)
+static int __init acpi_container_init(void)
 {
-       int     result = 0;
-       int     action = INSTALL_NOTIFY_HANDLER;
+       int result = 0;
+       int action = INSTALL_NOTIFY_HANDLER;
 
        result = acpi_bus_register_driver(&acpi_container_driver);
        if (result < 0) {
-               return(result);
+               return (result);
        }
 
        /* register notify handler to every container device */
        acpi_walk_namespace(ACPI_TYPE_DEVICE,
-                                    ACPI_ROOT_OBJECT,
-                                    ACPI_UINT32_MAX,
-                                    container_walk_namespace_cb,
-                                    &action, NULL);
+                           ACPI_ROOT_OBJECT,
+                           ACPI_UINT32_MAX,
+                           container_walk_namespace_cb, &action, NULL);
 
-       return(0);
+       return (0);
 }
 
-static void __exit
-acpi_container_exit(void)
+static void __exit acpi_container_exit(void)
 {
-       int                     action = UNINSTALL_NOTIFY_HANDLER;
+       int action = UNINSTALL_NOTIFY_HANDLER;
 
        ACPI_FUNCTION_TRACE("acpi_container_exit");
 
        acpi_walk_namespace(ACPI_TYPE_DEVICE,
-                                    ACPI_ROOT_OBJECT,
-                                    ACPI_UINT32_MAX,
-                                    container_walk_namespace_cb,
-                                    &action, NULL);
+                           ACPI_ROOT_OBJECT,
+                           ACPI_UINT32_MAX,
+                           container_walk_namespace_cb, &action, NULL);
 
        acpi_bus_unregister_driver(&acpi_container_driver);
 
index 2c0dac559f1636487d108a9cae7a4f6367873110..263322b7d113d743caa9200ce7b9b8c592cd284b 100644 (file)
 #include <acpi/acglobal.h>
 
 #define _COMPONENT             ACPI_SYSTEM_COMPONENT
-ACPI_MODULE_NAME               ("debug")
-
+ACPI_MODULE_NAME("debug")
 #define ACPI_SYSTEM_FILE_DEBUG_LAYER   "debug_layer"
 #define ACPI_SYSTEM_FILE_DEBUG_LEVEL   "debug_level"
-
 #ifdef MODULE_PARAM_PREFIX
 #undef MODULE_PARAM_PREFIX
 #endif
-
 #define MODULE_PARAM_PREFIX
-module_param(acpi_dbg_layer, uint, 0400);
+    module_param(acpi_dbg_layer, uint, 0400);
 module_param(acpi_dbg_level, uint, 0400);
 
 struct acpi_dlayer {
@@ -35,8 +32,7 @@ struct acpi_dlevel {
 };
 #define ACPI_DEBUG_INIT(v)     { .name = #v, .value = v }
 
-static const struct acpi_dlayer acpi_debug_layers[] =
-{
+static const struct acpi_dlayer acpi_debug_layers[] = {
        ACPI_DEBUG_INIT(ACPI_UTILITIES),
        ACPI_DEBUG_INIT(ACPI_HARDWARE),
        ACPI_DEBUG_INIT(ACPI_EVENTS),
@@ -53,8 +49,7 @@ static const struct acpi_dlayer acpi_debug_layers[] =
        ACPI_DEBUG_INIT(ACPI_TOOLS),
 };
 
-static const struct acpi_dlevel acpi_debug_levels[] =
-{
+static const struct acpi_dlevel acpi_debug_levels[] = {
        ACPI_DEBUG_INIT(ACPI_LV_ERROR),
        ACPI_DEBUG_INIT(ACPI_LV_WARN),
        ACPI_DEBUG_INIT(ACPI_LV_INIT),
@@ -88,81 +83,77 @@ static const struct acpi_dlevel acpi_debug_levels[] =
        ACPI_DEBUG_INIT(ACPI_LV_AML_DISASSEMBLE),
        ACPI_DEBUG_INIT(ACPI_LV_VERBOSE_INFO),
        ACPI_DEBUG_INIT(ACPI_LV_FULL_TABLES),
-       ACPI_DEBUG_INIT(ACPI_LV_EVENTS),             
+       ACPI_DEBUG_INIT(ACPI_LV_EVENTS),
 };
 
 static int
-acpi_system_read_debug (
-       char                    *page,
-       char                    **start,
-       off_t                   off,
-       int                     count,
-       int                     *eof,
-       void                    *data)
+acpi_system_read_debug(char *page,
+                      char **start, off_t off, int count, int *eof, void *data)
 {
-       char                    *p = page;
-       int                     size = 0;
-       unsigned int            i;
+       char *p = page;
+       int size = 0;
+       unsigned int i;
 
        if (off != 0)
                goto end;
 
        p += sprintf(p, "%-25s\tHex        SET\n", "Description");
 
-       switch ((unsigned long) data) {
+       switch ((unsigned long)data) {
        case 0:
                for (i = 0; i < ARRAY_SIZE(acpi_debug_layers); i++) {
                        p += sprintf(p, "%-25s\t0x%08lX [%c]\n",
-                               acpi_debug_layers[i].name,
-                               acpi_debug_layers[i].value,
-                               (acpi_dbg_layer & acpi_debug_layers[i].value) ?
-                               '*' : ' ');
+                                    acpi_debug_layers[i].name,
+                                    acpi_debug_layers[i].value,
+                                    (acpi_dbg_layer & acpi_debug_layers[i].
+                                     value) ? '*' : ' ');
                }
                p += sprintf(p, "%-25s\t0x%08X [%c]\n", "ACPI_ALL_DRIVERS",
-                       ACPI_ALL_DRIVERS,
-                       (acpi_dbg_layer & ACPI_ALL_DRIVERS) == ACPI_ALL_DRIVERS?
-                       '*' : (acpi_dbg_layer & ACPI_ALL_DRIVERS) == 0 ?
-                       ' ' : '-');
+                            ACPI_ALL_DRIVERS,
+                            (acpi_dbg_layer & ACPI_ALL_DRIVERS) ==
+                            ACPI_ALL_DRIVERS ? '*' : (acpi_dbg_layer &
+                                                      ACPI_ALL_DRIVERS) ==
+                            0 ? ' ' : '-');
                p += sprintf(p,
-                       "--\ndebug_layer = 0x%08X (* = enabled, - = partial)\n",
-                       acpi_dbg_layer);
+                            "--\ndebug_layer = 0x%08X (* = enabled, - = partial)\n",
+                            acpi_dbg_layer);
                break;
        case 1:
                for (i = 0; i < ARRAY_SIZE(acpi_debug_levels); i++) {
                        p += sprintf(p, "%-25s\t0x%08lX [%c]\n",
-                               acpi_debug_levels[i].name,
-                               acpi_debug_levels[i].value,
-                               (acpi_dbg_level & acpi_debug_levels[i].value) ?
-                               '*' : ' ');
+                                    acpi_debug_levels[i].name,
+                                    acpi_debug_levels[i].value,
+                                    (acpi_dbg_level & acpi_debug_levels[i].
+                                     value) ? '*' : ' ');
                }
                p += sprintf(p, "--\ndebug_level = 0x%08X (* = enabled)\n",
-                               acpi_dbg_level);
+                            acpi_dbg_level);
                break;
        default:
                p += sprintf(p, "Invalid debug option\n");
                break;
        }
-       
-end:
+
+      end:
        size = (p - page);
-       if (size <= off+count) *eof = 1;
+       if (size <= off + count)
+               *eof = 1;
        *start = page + off;
        size -= off;
-       if (size>count) size = count;
-       if (size<0) size = 0;
+       if (size > count)
+               size = count;
+       if (size < 0)
+               size = 0;
 
        return size;
 }
 
-
 static int
-acpi_system_write_debug (
-       struct file             *file,
-        const char              __user *buffer,
-       unsigned long           count,
-        void                    *data)
+acpi_system_write_debug(struct file *file,
+                       const char __user * buffer,
+                       unsigned long count, void *data)
 {
-       char                    debug_string[12] = {'\0'};
+       char debug_string[12] = { '\0' };
 
        ACPI_FUNCTION_TRACE("acpi_system_write_debug");
 
@@ -174,7 +165,7 @@ acpi_system_write_debug (
 
        debug_string[count] = '\0';
 
-       switch ((unsigned long) data) {
+       switch ((unsigned long)data) {
        case 0:
                acpi_dbg_layer = simple_strtoul(debug_string, NULL, 0);
                break;
@@ -190,9 +181,9 @@ acpi_system_write_debug (
 
 static int __init acpi_debug_init(void)
 {
-       struct proc_dir_entry   *entry;
+       struct proc_dir_entry *entry;
        int error = 0;
-       char * name;
+       char *name;
 
        ACPI_FUNCTION_TRACE("acpi_debug_init");
 
@@ -201,8 +192,10 @@ static int __init acpi_debug_init(void)
 
        /* 'debug_layer' [R/W] */
        name = ACPI_SYSTEM_FILE_DEBUG_LAYER;
-       entry = create_proc_read_entry(name, S_IFREG|S_IRUGO|S_IWUSR, acpi_root_dir,
-                                      acpi_system_read_debug,(void *)0);
+       entry =
+           create_proc_read_entry(name, S_IFREG | S_IRUGO | S_IWUSR,
+                                  acpi_root_dir, acpi_system_read_debug,
+                                  (void *)0);
        if (entry)
                entry->write_proc = acpi_system_write_debug;
        else
@@ -210,19 +203,21 @@ static int __init acpi_debug_init(void)
 
        /* 'debug_level' [R/W] */
        name = ACPI_SYSTEM_FILE_DEBUG_LEVEL;
-       entry = create_proc_read_entry(name, S_IFREG|S_IRUGO|S_IWUSR, acpi_root_dir,
-                                      acpi_system_read_debug, (void *)1);
-       if (entry) 
+       entry =
+           create_proc_read_entry(name, S_IFREG | S_IRUGO | S_IWUSR,
+                                  acpi_root_dir, acpi_system_read_debug,
+                                  (void *)1);
+       if (entry)
                entry->write_proc = acpi_system_write_debug;
        else
                goto Error;
 
- Done:
     Done:
        return_VALUE(error);
 
- Error:
-       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                        "Unable to create '%s' proc fs entry\n", name));
     Error:
+       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                         "Unable to create '%s' proc fs entry\n", name));
 
        remove_proc_entry(ACPI_SYSTEM_FILE_DEBUG_LEVEL, acpi_root_dir);
        remove_proc_entry(ACPI_SYSTEM_FILE_DEBUG_LAYER, acpi_root_dir);
index 84193983d6ba37bdab69f391fb8ed80cbe8b4ff2..2022aeaecfbbeb357a23500039c809a7bfe6e4c0 100644 (file)
@@ -41,7 +41,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/amlcode.h>
 #include <acpi/acdispat.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acparser.h>
 
-
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dsfield")
+ACPI_MODULE_NAME("dsfield")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ds_get_field_names (
-       struct acpi_create_field_info   *info,
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *arg);
-
+acpi_ds_get_field_names(struct acpi_create_field_info *info,
+                       struct acpi_walk_state *walk_state,
+                       union acpi_parse_object *arg);
 
 /*******************************************************************************
  *
@@ -82,41 +77,36 @@ acpi_ds_get_field_names (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_create_buffer_field (
-       union acpi_parse_object         *op,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_create_buffer_field(union acpi_parse_object *op,
+                           struct acpi_walk_state *walk_state)
 {
-       union acpi_parse_object         *arg;
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *second_desc = NULL;
-       u32                             flags;
-
-
-       ACPI_FUNCTION_TRACE ("ds_create_buffer_field");
+       union acpi_parse_object *arg;
+       struct acpi_namespace_node *node;
+       acpi_status status;
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *second_desc = NULL;
+       u32 flags;
 
+       ACPI_FUNCTION_TRACE("ds_create_buffer_field");
 
        /* Get the name_string argument */
 
        if (op->common.aml_opcode == AML_CREATE_FIELD_OP) {
-               arg = acpi_ps_get_arg (op, 3);
-       }
-       else {
+               arg = acpi_ps_get_arg(op, 3);
+       } else {
                /* Create Bit/Byte/Word/Dword field */
 
-               arg = acpi_ps_get_arg (op, 2);
+               arg = acpi_ps_get_arg(op, 2);
        }
 
        if (!arg) {
-               return_ACPI_STATUS (AE_AML_NO_OPERAND);
+               return_ACPI_STATUS(AE_AML_NO_OPERAND);
        }
 
        if (walk_state->deferred_node) {
                node = walk_state->deferred_node;
                status = AE_OK;
-       }
-       else {
+       } else {
                /*
                 * During the load phase, we want to enter the name of the field into
                 * the namespace.  During the execute phase (when we evaluate the size
@@ -124,21 +114,22 @@ acpi_ds_create_buffer_field (
                 */
                if (walk_state->parse_flags & ACPI_PARSE_EXECUTE) {
                        flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE;
-               }
-               else {
+               } else {
                        flags = ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE |
-                                       ACPI_NS_ERROR_IF_FOUND;
+                           ACPI_NS_ERROR_IF_FOUND;
                }
 
                /*
                 * Enter the name_string into the namespace
                 */
-               status = acpi_ns_lookup (walk_state->scope_info, arg->common.value.string,
-                                ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS1,
-                                flags, walk_state, &(node));
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_NSERROR (arg->common.value.string, status);
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ns_lookup(walk_state->scope_info,
+                                  arg->common.value.string, ACPI_TYPE_ANY,
+                                  ACPI_IMODE_LOAD_PASS1, flags, walk_state,
+                                  &(node));
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_NSERROR(arg->common.value.string, status);
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -153,9 +144,9 @@ acpi_ds_create_buffer_field (
         * and we need to create the field object.  Otherwise, this was a lookup
         * of an existing node and we don't want to create the field object again.
         */
-       obj_desc = acpi_ns_get_attached_object (node);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (obj_desc) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /*
@@ -165,7 +156,7 @@ acpi_ds_create_buffer_field (
 
        /* Create the buffer field object */
 
-       obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER_FIELD);
+       obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER_FIELD);
        if (!obj_desc) {
                status = AE_NO_MEMORY;
                goto cleanup;
@@ -176,28 +167,26 @@ acpi_ds_create_buffer_field (
         * opcode and operands -- since the buffer and index
         * operands must be evaluated.
         */
-       second_desc                 = obj_desc->common.next_object;
+       second_desc = obj_desc->common.next_object;
        second_desc->extra.aml_start = op->named.data;
        second_desc->extra.aml_length = op->named.length;
        obj_desc->buffer_field.node = node;
 
        /* Attach constructed field descriptors to parent node */
 
-       status = acpi_ns_attach_object (node, obj_desc, ACPI_TYPE_BUFFER_FIELD);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ns_attach_object(node, obj_desc, ACPI_TYPE_BUFFER_FIELD);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
-
-cleanup:
+      cleanup:
 
        /* Remove local reference to the object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_get_field_names
@@ -214,17 +203,14 @@ cleanup:
  ******************************************************************************/
 
 static acpi_status
-acpi_ds_get_field_names (
-       struct acpi_create_field_info   *info,
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *arg)
+acpi_ds_get_field_names(struct acpi_create_field_info *info,
+                       struct acpi_walk_state *walk_state,
+                       union acpi_parse_object *arg)
 {
-       acpi_status                     status;
-       acpi_integer                    position;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_get_field_names", info);
+       acpi_status status;
+       acpi_integer position;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_get_field_names", info);
 
        /* First field starts at bit zero */
 
@@ -243,18 +229,16 @@ acpi_ds_get_field_names (
                case AML_INT_RESERVEDFIELD_OP:
 
                        position = (acpi_integer) info->field_bit_position
-                                        + (acpi_integer) arg->common.value.size;
+                           + (acpi_integer) arg->common.value.size;
 
                        if (position > ACPI_UINT32_MAX) {
-                               ACPI_REPORT_ERROR ((
-                                       "Bit offset within field too large (> 0xFFFFFFFF)\n"));
-                               return_ACPI_STATUS (AE_SUPPORT);
+                               ACPI_REPORT_ERROR(("Bit offset within field too large (> 0xFFFFFFFF)\n"));
+                               return_ACPI_STATUS(AE_SUPPORT);
                        }
 
                        info->field_bit_position = (u32) position;
                        break;
 
-
                case AML_INT_ACCESSFIELD_OP:
 
                        /*
@@ -266,73 +250,70 @@ acpi_ds_get_field_names (
                         * ACCESS_TYPE bits
                         */
                        info->field_flags = (u8)
-                               ((info->field_flags & ~(AML_FIELD_ACCESS_TYPE_MASK)) |
-                               ((u8) ((u32) arg->common.value.integer >> 8)));
+                           ((info->
+                             field_flags & ~(AML_FIELD_ACCESS_TYPE_MASK)) |
+                            ((u8) ((u32) arg->common.value.integer >> 8)));
 
                        info->attribute = (u8) (arg->common.value.integer);
                        break;
 
-
                case AML_INT_NAMEDFIELD_OP:
 
                        /* Lookup the name */
 
-                       status = acpi_ns_lookup (walk_state->scope_info,
-                                         (char *) &arg->named.name,
-                                         info->field_type, ACPI_IMODE_EXECUTE,
-                                         ACPI_NS_DONT_OPEN_SCOPE,
-                                         walk_state, &info->field_node);
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_REPORT_NSERROR ((char *) &arg->named.name, status);
+                       status = acpi_ns_lookup(walk_state->scope_info,
+                                               (char *)&arg->named.name,
+                                               info->field_type,
+                                               ACPI_IMODE_EXECUTE,
+                                               ACPI_NS_DONT_OPEN_SCOPE,
+                                               walk_state, &info->field_node);
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_REPORT_NSERROR((char *)&arg->named.name,
+                                                   status);
                                if (status != AE_ALREADY_EXISTS) {
-                                       return_ACPI_STATUS (status);
+                                       return_ACPI_STATUS(status);
                                }
 
                                /* Already exists, ignore error */
-                       }
-                       else {
+                       } else {
                                arg->common.node = info->field_node;
                                info->field_bit_length = arg->common.value.size;
 
                                /* Create and initialize an object for the new Field Node */
 
-                               status = acpi_ex_prep_field_value (info);
-                               if (ACPI_FAILURE (status)) {
-                                       return_ACPI_STATUS (status);
+                               status = acpi_ex_prep_field_value(info);
+                               if (ACPI_FAILURE(status)) {
+                                       return_ACPI_STATUS(status);
                                }
                        }
 
                        /* Keep track of bit position for the next field */
 
                        position = (acpi_integer) info->field_bit_position
-                                        + (acpi_integer) arg->common.value.size;
+                           + (acpi_integer) arg->common.value.size;
 
                        if (position > ACPI_UINT32_MAX) {
-                               ACPI_REPORT_ERROR ((
-                                       "Field [%4.4s] bit offset too large (> 0xFFFFFFFF)\n",
-                                       (char *) &info->field_node->name));
-                               return_ACPI_STATUS (AE_SUPPORT);
+                               ACPI_REPORT_ERROR(("Field [%4.4s] bit offset too large (> 0xFFFFFFFF)\n", (char *)&info->field_node->name));
+                               return_ACPI_STATUS(AE_SUPPORT);
                        }
 
                        info->field_bit_position += info->field_bit_length;
                        break;
 
-
                default:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Invalid opcode in field list: %X\n",
-                               arg->common.aml_opcode));
-                       return_ACPI_STATUS (AE_AML_BAD_OPCODE);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid opcode in field list: %X\n",
+                                         arg->common.aml_opcode));
+                       return_ACPI_STATUS(AE_AML_BAD_OPCODE);
                }
 
                arg = arg->common.next;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_create_field
@@ -348,29 +329,28 @@ acpi_ds_get_field_names (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_create_field (
-       union acpi_parse_object         *op,
-       struct acpi_namespace_node      *region_node,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_create_field(union acpi_parse_object *op,
+                    struct acpi_namespace_node *region_node,
+                    struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       union acpi_parse_object         *arg;
-       struct acpi_create_field_info   info;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_create_field", op);
+       acpi_status status;
+       union acpi_parse_object *arg;
+       struct acpi_create_field_info info;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_create_field", op);
 
        /* First arg is the name of the parent op_region (must already exist) */
 
        arg = op->common.value.arg;
        if (!region_node) {
-               status = acpi_ns_lookup (walk_state->scope_info, arg->common.value.name,
-                                 ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE,
-                                 ACPI_NS_SEARCH_PARENT, walk_state, &region_node);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_NSERROR (arg->common.value.name, status);
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ns_lookup(walk_state->scope_info,
+                                  arg->common.value.name, ACPI_TYPE_REGION,
+                                  ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
+                                  walk_state, &region_node);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_NSERROR(arg->common.value.name, status);
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -385,12 +365,11 @@ acpi_ds_create_field (
        info.field_type = ACPI_TYPE_LOCAL_REGION_FIELD;
        info.region_node = region_node;
 
-       status = acpi_ds_get_field_names (&info, walk_state, arg->common.next);
+       status = acpi_ds_get_field_names(&info, walk_state, arg->common.next);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_init_field_objects
@@ -407,37 +386,34 @@ acpi_ds_create_field (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_init_field_objects (
-       union acpi_parse_object         *op,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_init_field_objects(union acpi_parse_object *op,
+                          struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       union acpi_parse_object         *arg = NULL;
-       struct acpi_namespace_node      *node;
-       u8                              type = 0;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_init_field_objects", op);
+       acpi_status status;
+       union acpi_parse_object *arg = NULL;
+       struct acpi_namespace_node *node;
+       u8 type = 0;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_init_field_objects", op);
 
        switch (walk_state->opcode) {
        case AML_FIELD_OP:
-               arg = acpi_ps_get_arg (op, 2);
+               arg = acpi_ps_get_arg(op, 2);
                type = ACPI_TYPE_LOCAL_REGION_FIELD;
                break;
 
        case AML_BANK_FIELD_OP:
-               arg = acpi_ps_get_arg (op, 4);
+               arg = acpi_ps_get_arg(op, 4);
                type = ACPI_TYPE_LOCAL_BANK_FIELD;
                break;
 
        case AML_INDEX_FIELD_OP:
-               arg = acpi_ps_get_arg (op, 3);
+               arg = acpi_ps_get_arg(op, 3);
                type = ACPI_TYPE_LOCAL_INDEX_FIELD;
                break;
 
        default:
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
@@ -447,16 +423,18 @@ acpi_ds_init_field_objects (
                /* Ignore OFFSET and ACCESSAS terms here */
 
                if (arg->common.aml_opcode == AML_INT_NAMEDFIELD_OP) {
-                       status = acpi_ns_lookup (walk_state->scope_info,
-                                         (char *) &arg->named.name,
-                                         type, ACPI_IMODE_LOAD_PASS1,
-                                         ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE |
-                                         ACPI_NS_ERROR_IF_FOUND,
-                                         walk_state, &node);
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_REPORT_NSERROR ((char *) &arg->named.name, status);
+                       status = acpi_ns_lookup(walk_state->scope_info,
+                                               (char *)&arg->named.name,
+                                               type, ACPI_IMODE_LOAD_PASS1,
+                                               ACPI_NS_NO_UPSEARCH |
+                                               ACPI_NS_DONT_OPEN_SCOPE |
+                                               ACPI_NS_ERROR_IF_FOUND,
+                                               walk_state, &node);
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_REPORT_NSERROR((char *)&arg->named.name,
+                                                   status);
                                if (status != AE_ALREADY_EXISTS) {
-                                       return_ACPI_STATUS (status);
+                                       return_ACPI_STATUS(status);
                                }
 
                                /* Name already exists, just ignore this error */
@@ -472,10 +450,9 @@ acpi_ds_init_field_objects (
                arg = arg->common.next;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_create_bank_field
@@ -491,41 +468,42 @@ acpi_ds_init_field_objects (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_create_bank_field (
-       union acpi_parse_object         *op,
-       struct acpi_namespace_node      *region_node,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_create_bank_field(union acpi_parse_object *op,
+                         struct acpi_namespace_node *region_node,
+                         struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       union acpi_parse_object         *arg;
-       struct acpi_create_field_info   info;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_create_bank_field", op);
+       acpi_status status;
+       union acpi_parse_object *arg;
+       struct acpi_create_field_info info;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_create_bank_field", op);
 
        /* First arg is the name of the parent op_region (must already exist) */
 
        arg = op->common.value.arg;
        if (!region_node) {
-               status = acpi_ns_lookup (walk_state->scope_info, arg->common.value.name,
-                                 ACPI_TYPE_REGION, ACPI_IMODE_EXECUTE,
-                                 ACPI_NS_SEARCH_PARENT, walk_state, &region_node);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_NSERROR (arg->common.value.name, status);
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ns_lookup(walk_state->scope_info,
+                                  arg->common.value.name, ACPI_TYPE_REGION,
+                                  ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
+                                  walk_state, &region_node);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_NSERROR(arg->common.value.name, status);
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Second arg is the Bank Register (Field) (must already exist) */
 
        arg = arg->common.next;
-       status = acpi_ns_lookup (walk_state->scope_info, arg->common.value.string,
-                         ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
-                         ACPI_NS_SEARCH_PARENT, walk_state, &info.register_node);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_NSERROR (arg->common.value.string, status);
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ns_lookup(walk_state->scope_info, arg->common.value.string,
+                          ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
+                          ACPI_NS_SEARCH_PARENT, walk_state,
+                          &info.register_node);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_NSERROR(arg->common.value.string, status);
+               return_ACPI_STATUS(status);
        }
 
        /* Third arg is the bank_value */
@@ -543,12 +521,11 @@ acpi_ds_create_bank_field (
        info.field_type = ACPI_TYPE_LOCAL_BANK_FIELD;
        info.region_node = region_node;
 
-       status = acpi_ds_get_field_names (&info, walk_state, arg->common.next);
+       status = acpi_ds_get_field_names(&info, walk_state, arg->common.next);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_create_index_field
@@ -564,39 +541,40 @@ acpi_ds_create_bank_field (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_create_index_field (
-       union acpi_parse_object         *op,
-       struct acpi_namespace_node      *region_node,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_create_index_field(union acpi_parse_object *op,
+                          struct acpi_namespace_node *region_node,
+                          struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       union acpi_parse_object         *arg;
-       struct acpi_create_field_info   info;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_create_index_field", op);
+       acpi_status status;
+       union acpi_parse_object *arg;
+       struct acpi_create_field_info info;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_create_index_field", op);
 
        /* First arg is the name of the Index register (must already exist) */
 
        arg = op->common.value.arg;
-       status = acpi_ns_lookup (walk_state->scope_info, arg->common.value.string,
-                         ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
-                         ACPI_NS_SEARCH_PARENT, walk_state, &info.register_node);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_NSERROR (arg->common.value.string, status);
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ns_lookup(walk_state->scope_info, arg->common.value.string,
+                          ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
+                          ACPI_NS_SEARCH_PARENT, walk_state,
+                          &info.register_node);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_NSERROR(arg->common.value.string, status);
+               return_ACPI_STATUS(status);
        }
 
        /* Second arg is the data register (must already exist) */
 
        arg = arg->common.next;
-       status = acpi_ns_lookup (walk_state->scope_info, arg->common.value.string,
-                         ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
-                         ACPI_NS_SEARCH_PARENT, walk_state, &info.data_register_node);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_NSERROR (arg->common.value.string, status);
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ns_lookup(walk_state->scope_info, arg->common.value.string,
+                          ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
+                          ACPI_NS_SEARCH_PARENT, walk_state,
+                          &info.data_register_node);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_NSERROR(arg->common.value.string, status);
+               return_ACPI_STATUS(status);
        }
 
        /* Next arg is the field flags */
@@ -609,9 +587,7 @@ acpi_ds_create_index_field (
        info.field_type = ACPI_TYPE_LOCAL_INDEX_FIELD;
        info.region_node = region_node;
 
-       status = acpi_ds_get_field_names (&info, walk_state, arg->common.next);
+       status = acpi_ds_get_field_names(&info, walk_state, arg->common.next);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index d7790db50178a2a8c29b31b7da2fcef0a65abe56..8693c704aea611a6e9495fb3b7ee8ce7fe5ca017 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acdispat.h>
 #include <acpi/acnamesp.h>
 
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dsinit")
+ACPI_MODULE_NAME("dsinit")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ds_init_one_object (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value);
-
+acpi_ds_init_one_object(acpi_handle obj_handle,
+                       u32 level, void *context, void **return_value);
 
 /*******************************************************************************
  *
@@ -80,26 +74,23 @@ acpi_ds_init_one_object (
  ******************************************************************************/
 
 static acpi_status
-acpi_ds_init_one_object (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value)
+acpi_ds_init_one_object(acpi_handle obj_handle,
+                       u32 level, void *context, void **return_value)
 {
-       acpi_object_type                type;
-       acpi_status                     status;
-       struct acpi_init_walk_info      *info = (struct acpi_init_walk_info *) context;
-
-
-       ACPI_FUNCTION_NAME ("ds_init_one_object");
+       struct acpi_init_walk_info *info =
+           (struct acpi_init_walk_info *)context;
+       struct acpi_namespace_node *node =
+           (struct acpi_namespace_node *)obj_handle;
+       acpi_object_type type;
+       acpi_status status;
 
+       ACPI_FUNCTION_NAME("ds_init_one_object");
 
        /*
-        * We are only interested in objects owned by the table that
+        * We are only interested in NS nodes owned by the table that
         * was just loaded
         */
-       if (((struct acpi_namespace_node *) obj_handle)->owner_id !=
-                       info->table_desc->table_id) {
+       if (node->owner_id != info->table_desc->owner_id) {
                return (AE_OK);
        }
 
@@ -107,33 +98,31 @@ acpi_ds_init_one_object (
 
        /* And even then, we are only interested in a few object types */
 
-       type = acpi_ns_get_type (obj_handle);
+       type = acpi_ns_get_type(obj_handle);
 
        switch (type) {
        case ACPI_TYPE_REGION:
 
-               status = acpi_ds_initialize_region (obj_handle);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Region %p [%4.4s] - Init failure, %s\n",
-                               obj_handle, acpi_ut_get_node_name (obj_handle),
-                               acpi_format_exception (status)));
+               status = acpi_ds_initialize_region(obj_handle);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Region %p [%4.4s] - Init failure, %s\n",
+                                         obj_handle,
+                                         acpi_ut_get_node_name(obj_handle),
+                                         acpi_format_exception(status)));
                }
 
                info->op_region_count++;
                break;
 
-
        case ACPI_TYPE_METHOD:
 
-               info->method_count++;
-
                /*
                 * Print a dot for each method unless we are going to print
                 * the entire pathname
                 */
                if (!(acpi_dbg_level & ACPI_LV_INIT_NAMES)) {
-                       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "."));
+                       ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, "."));
                }
 
                /*
@@ -143,41 +132,32 @@ acpi_ds_init_one_object (
                 * on a per-table basis. Currently, we just use a global for the width.
                 */
                if (info->table_desc->pointer->revision == 1) {
-                       ((struct acpi_namespace_node *) obj_handle)->flags |= ANOBJ_DATA_WIDTH_32;
+                       node->flags |= ANOBJ_DATA_WIDTH_32;
                }
 
                /*
                 * Always parse methods to detect errors, we will delete
                 * the parse tree below
                 */
-               status = acpi_ds_parse_method (obj_handle);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Method %p [%4.4s] - parse failure, %s\n",
-                               obj_handle, acpi_ut_get_node_name (obj_handle),
-                               acpi_format_exception (status)));
+               status = acpi_ds_parse_method(obj_handle);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "\n+Method %p [%4.4s] - parse failure, %s\n",
+                                         obj_handle,
+                                         acpi_ut_get_node_name(obj_handle),
+                                         acpi_format_exception(status)));
 
                        /* This parse failed, but we will continue parsing more methods */
-
-                       break;
                }
 
-               /*
-                * Delete the parse tree.  We simply re-parse the method
-                * for every execution since there isn't much overhead
-                */
-               acpi_ns_delete_namespace_subtree (obj_handle);
-               acpi_ns_delete_namespace_by_owner (
-                       ((struct acpi_namespace_node *) obj_handle)->object->method.owning_id);
+               info->method_count++;
                break;
 
-
        case ACPI_TYPE_DEVICE:
 
                info->device_count++;
                break;
 
-
        default:
                break;
        }
@@ -189,7 +169,6 @@ acpi_ds_init_one_object (
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_initialize_objects
@@ -205,45 +184,43 @@ acpi_ds_init_one_object (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_initialize_objects (
-       struct acpi_table_desc          *table_desc,
-       struct acpi_namespace_node      *start_node)
+acpi_ds_initialize_objects(struct acpi_table_desc * table_desc,
+                          struct acpi_namespace_node * start_node)
 {
-       acpi_status                     status;
-       struct acpi_init_walk_info      info;
+       acpi_status status;
+       struct acpi_init_walk_info info;
 
+       ACPI_FUNCTION_TRACE("ds_initialize_objects");
 
-       ACPI_FUNCTION_TRACE ("ds_initialize_objects");
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "**** Starting initialization of namespace objects ****\n"));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, "Parsing all Control Methods:"));
 
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "**** Starting initialization of namespace objects ****\n"));
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "Parsing all Control Methods:"));
-
-       info.method_count   = 0;
+       info.method_count = 0;
        info.op_region_count = 0;
-       info.object_count   = 0;
-       info.device_count   = 0;
-       info.table_desc     = table_desc;
+       info.object_count = 0;
+       info.device_count = 0;
+       info.table_desc = table_desc;
 
        /* Walk entire namespace from the supplied root */
 
-       status = acpi_walk_namespace (ACPI_TYPE_ANY, start_node, ACPI_UINT32_MAX,
-                         acpi_ds_init_one_object, &info, NULL);
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "walk_namespace failed, %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_walk_namespace(ACPI_TYPE_ANY, start_node, ACPI_UINT32_MAX,
+                                    acpi_ds_init_one_object, &info, NULL);
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "walk_namespace failed, %s\n",
+                                 acpi_format_exception(status)));
        }
 
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
-               "\nTable [%4.4s](id %4.4X) - %hd Objects with %hd Devices %hd Methods %hd Regions\n",
-               table_desc->pointer->signature, table_desc->table_id, info.object_count,
-               info.device_count, info.method_count, info.op_region_count));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
+                             "\nTable [%4.4s](id %4.4X) - %hd Objects with %hd Devices %hd Methods %hd Regions\n",
+                             table_desc->pointer->signature,
+                             table_desc->owner_id, info.object_count,
+                             info.device_count, info.method_count,
+                             info.op_region_count));
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "%hd Methods, %hd Regions\n", info.method_count, info.op_region_count));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "%hd Methods, %hd Regions\n", info.method_count,
+                         info.op_region_count));
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
-
index 9fc3f4c033eb6a5796a1e65ca2e18c2afe0cff5c..36c1ca0b9adb71a9b2d19fddd711a4b545a45312 100644 (file)
@@ -41,7 +41,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 #include <acpi/acinterp.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dsmethod")
-
+ACPI_MODULE_NAME("dsmethod")
 
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_parse_method
  *
- * PARAMETERS:  obj_handle      - Method node
+ * PARAMETERS:  Node        - Method node
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Call the parser and parse the AML that is associated with the
- *              method.
+ * DESCRIPTION: Parse the AML that is associated with the method.
  *
  * MUTEX:       Assumes parser is locked
  *
  ******************************************************************************/
-
-acpi_status
-acpi_ds_parse_method (
-       acpi_handle                     obj_handle)
+acpi_status acpi_ds_parse_method(struct acpi_namespace_node *node)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-       union acpi_parse_object         *op;
-       struct acpi_namespace_node      *node;
-       acpi_owner_id                   owner_id;
-       struct acpi_walk_state          *walk_state;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_parse_method", obj_handle);
+       acpi_status status;
+       union acpi_operand_object *obj_desc;
+       union acpi_parse_object *op;
+       struct acpi_walk_state *walk_state;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_parse_method", node);
 
        /* Parameter Validation */
 
-       if (!obj_handle) {
-               return_ACPI_STATUS (AE_NULL_ENTRY);
+       if (!node) {
+               return_ACPI_STATUS(AE_NULL_ENTRY);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Parsing [%4.4s] **** named_obj=%p\n",
-               acpi_ut_get_node_name (obj_handle), obj_handle));
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                         "**** Parsing [%4.4s] **** named_obj=%p\n",
+                         acpi_ut_get_node_name(node), node));
 
        /* Extract the method object from the method Node */
 
-       node = (struct acpi_namespace_node *) obj_handle;
-       obj_desc = acpi_ns_get_attached_object (node);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_NULL_OBJECT);
+               return_ACPI_STATUS(AE_NULL_OBJECT);
        }
 
        /* Create a mutex for the method if there is a concurrency limit */
 
        if ((obj_desc->method.concurrency != ACPI_INFINITE_CONCURRENCY) &&
-               (!obj_desc->method.semaphore)) {
-               status = acpi_os_create_semaphore (obj_desc->method.concurrency,
-                                  obj_desc->method.concurrency,
-                                  &obj_desc->method.semaphore);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+           (!obj_desc->method.semaphore)) {
+               status = acpi_os_create_semaphore(obj_desc->method.concurrency,
+                                                 obj_desc->method.concurrency,
+                                                 &obj_desc->method.semaphore);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -117,14 +106,14 @@ acpi_ds_parse_method (
         * Allocate a new parser op to be the root of the parsed
         * method tree
         */
-       op = acpi_ps_alloc_op (AML_METHOD_OP);
+       op = acpi_ps_alloc_op(AML_METHOD_OP);
        if (!op) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Init new op with the method name and pointer back to the Node */
 
-       acpi_ps_set_name (op, node->name.integer);
+       acpi_ps_set_name(op, node->name.integer);
        op->common.node = node;
 
        /*
@@ -132,22 +121,27 @@ acpi_ds_parse_method (
         * objects (such as Operation Regions) can be created during the
         * first pass parse.
         */
-       owner_id = acpi_ut_allocate_owner_id (ACPI_OWNER_TYPE_METHOD);
-       obj_desc->method.owning_id = owner_id;
+       status = acpi_ut_allocate_owner_id(&obj_desc->method.owner_id);
+       if (ACPI_FAILURE(status)) {
+               goto cleanup;
+       }
 
        /* Create and initialize a new walk state */
 
-       walk_state = acpi_ds_create_walk_state (owner_id, NULL, NULL, NULL);
+       walk_state =
+           acpi_ds_create_walk_state(obj_desc->method.owner_id, NULL, NULL,
+                                     NULL);
        if (!walk_state) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               status = AE_NO_MEMORY;
+               goto cleanup2;
        }
 
-       status = acpi_ds_init_aml_walk (walk_state, op, node,
-                         obj_desc->method.aml_start,
-                         obj_desc->method.aml_length, NULL, 1);
-       if (ACPI_FAILURE (status)) {
-               acpi_ds_delete_walk_state (walk_state);
-               return_ACPI_STATUS (status);
+       status = acpi_ds_init_aml_walk(walk_state, op, node,
+                                      obj_desc->method.aml_start,
+                                      obj_desc->method.aml_length, NULL, 1);
+       if (ACPI_FAILURE(status)) {
+               acpi_ds_delete_walk_state(walk_state);
+               goto cleanup2;
        }
 
        /*
@@ -159,19 +153,30 @@ acpi_ds_parse_method (
         * method so that operands to the named objects can take on dynamic
         * run-time values.
         */
-       status = acpi_ps_parse_aml (walk_state);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ps_parse_aml(walk_state);
+       if (ACPI_FAILURE(status)) {
+               goto cleanup2;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
-               "**** [%4.4s] Parsed **** named_obj=%p Op=%p\n",
-               acpi_ut_get_node_name (obj_handle), obj_handle, op));
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                         "**** [%4.4s] Parsed **** named_obj=%p Op=%p\n",
+                         acpi_ut_get_node_name(node), node, op));
 
-       acpi_ps_delete_parse_tree (op);
-       return_ACPI_STATUS (status);
-}
+       /*
+        * Delete the parse tree. We simply re-parse the method for every
+        * execution since there isn't much overhead (compared to keeping lots
+        * of parse trees around)
+        */
+       acpi_ns_delete_namespace_subtree(node);
+       acpi_ns_delete_namespace_by_owner(obj_desc->method.owner_id);
+
+      cleanup2:
+       acpi_ut_release_owner_id(&obj_desc->method.owner_id);
 
+      cleanup:
+       acpi_ps_delete_parse_tree(op);
+       return_ACPI_STATUS(status);
+}
 
 /*******************************************************************************
  *
@@ -190,19 +195,23 @@ acpi_ds_parse_method (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_begin_method_execution (
-       struct acpi_namespace_node      *method_node,
-       union acpi_operand_object       *obj_desc,
-       struct acpi_namespace_node      *calling_method_node)
+acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
+                              union acpi_operand_object *obj_desc,
+                              struct acpi_namespace_node *calling_method_node)
 {
-       acpi_status                     status = AE_OK;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_begin_method_execution", method_node);
 
-       ACPI_FUNCTION_TRACE_PTR ("ds_begin_method_execution", method_node);
+       if (!method_node) {
+               return_ACPI_STATUS(AE_NULL_ENTRY);
+       }
 
+       /* Prevent wraparound of thread count */
 
-       if (!method_node) {
-               return_ACPI_STATUS (AE_NULL_ENTRY);
+       if (obj_desc->method.thread_count == ACPI_UINT8_MAX) {
+               ACPI_REPORT_ERROR(("Method reached maximum reentrancy limit (255)\n"));
+               return_ACPI_STATUS(AE_AML_METHOD_LIMIT);
        }
 
        /*
@@ -219,8 +228,9 @@ acpi_ds_begin_method_execution (
                 * thread that is making recursive method calls.
                 */
                if (method_node == calling_method_node) {
-                       if (obj_desc->method.thread_count >= obj_desc->method.concurrency) {
-                               return_ACPI_STATUS (AE_AML_METHOD_LIMIT);
+                       if (obj_desc->method.thread_count >=
+                           obj_desc->method.concurrency) {
+                               return_ACPI_STATUS(AE_AML_METHOD_LIMIT);
                        }
                }
 
@@ -228,8 +238,21 @@ acpi_ds_begin_method_execution (
                 * Get a unit from the method semaphore. This releases the
                 * interpreter if we block
                 */
-               status = acpi_ex_system_wait_semaphore (obj_desc->method.semaphore,
-                                ACPI_WAIT_FOREVER);
+               status =
+                   acpi_ex_system_wait_semaphore(obj_desc->method.semaphore,
+                                                 ACPI_WAIT_FOREVER);
+       }
+
+       /*
+        * Allocate an Owner ID for this method, only if this is the first thread
+        * to begin concurrent execution. We only need one owner_id, even if the
+        * method is invoked recursively.
+        */
+       if (!obj_desc->method.owner_id) {
+               status = acpi_ut_allocate_owner_id(&obj_desc->method.owner_id);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
+               }
        }
 
        /*
@@ -237,10 +260,9 @@ acpi_ds_begin_method_execution (
         * reentered one more time (even if it is the same thread)
         */
        obj_desc->method.thread_count++;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_call_control_method
@@ -256,101 +278,99 @@ acpi_ds_begin_method_execution (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_call_control_method (
-       struct acpi_thread_state        *thread,
-       struct acpi_walk_state          *this_walk_state,
-       union acpi_parse_object         *op)
+acpi_ds_call_control_method(struct acpi_thread_state *thread,
+                           struct acpi_walk_state *this_walk_state,
+                           union acpi_parse_object *op)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *method_node;
-       struct acpi_walk_state          *next_walk_state;
-       union acpi_operand_object       *obj_desc;
-       struct acpi_parameter_info      info;
-       u32                             i;
-
+       acpi_status status;
+       struct acpi_namespace_node *method_node;
+       struct acpi_walk_state *next_walk_state = NULL;
+       union acpi_operand_object *obj_desc;
+       struct acpi_parameter_info info;
+       u32 i;
 
-       ACPI_FUNCTION_TRACE_PTR ("ds_call_control_method", this_walk_state);
+       ACPI_FUNCTION_TRACE_PTR("ds_call_control_method", this_walk_state);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Execute method %p, currentstate=%p\n",
-               this_walk_state->prev_op, this_walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "Execute method %p, currentstate=%p\n",
+                         this_walk_state->prev_op, this_walk_state));
 
        /*
         * Get the namespace entry for the control method we are about to call
         */
        method_node = this_walk_state->method_call_node;
        if (!method_node) {
-               return_ACPI_STATUS (AE_NULL_ENTRY);
+               return_ACPI_STATUS(AE_NULL_ENTRY);
        }
 
-       obj_desc = acpi_ns_get_attached_object (method_node);
+       obj_desc = acpi_ns_get_attached_object(method_node);
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_NULL_OBJECT);
+               return_ACPI_STATUS(AE_NULL_OBJECT);
        }
 
-       obj_desc->method.owning_id = acpi_ut_allocate_owner_id (ACPI_OWNER_TYPE_METHOD);
-
        /* Init for new method, wait on concurrency semaphore */
 
-       status = acpi_ds_begin_method_execution (method_node, obj_desc,
-                         this_walk_state->method_node);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ds_begin_method_execution(method_node, obj_desc,
+                                               this_walk_state->method_node);
+       if (ACPI_FAILURE(status)) {
+               goto cleanup;
        }
 
        if (!(obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY)) {
                /* 1) Parse: Create a new walk state for the preempting walk */
 
-               next_walk_state = acpi_ds_create_walk_state (obj_desc->method.owning_id,
-                                 op, obj_desc, NULL);
+               next_walk_state =
+                   acpi_ds_create_walk_state(obj_desc->method.owner_id, op,
+                                             obj_desc, NULL);
                if (!next_walk_state) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                /* Create and init a Root Node */
 
-               op = acpi_ps_create_scope_op ();
+               op = acpi_ps_create_scope_op();
                if (!op) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
                }
 
-               status = acpi_ds_init_aml_walk (next_walk_state, op, method_node,
-                                 obj_desc->method.aml_start, obj_desc->method.aml_length,
-                                 NULL, 1);
-               if (ACPI_FAILURE (status)) {
-                       acpi_ds_delete_walk_state (next_walk_state);
+               status = acpi_ds_init_aml_walk(next_walk_state, op, method_node,
+                                              obj_desc->method.aml_start,
+                                              obj_desc->method.aml_length,
+                                              NULL, 1);
+               if (ACPI_FAILURE(status)) {
+                       acpi_ds_delete_walk_state(next_walk_state);
                        goto cleanup;
                }
 
                /* Begin AML parse */
 
-               status = acpi_ps_parse_aml (next_walk_state);
-               acpi_ps_delete_parse_tree (op);
+               status = acpi_ps_parse_aml(next_walk_state);
+               acpi_ps_delete_parse_tree(op);
        }
 
        /* 2) Execute: Create a new state for the preempting walk */
 
-       next_walk_state = acpi_ds_create_walk_state (obj_desc->method.owning_id,
-                         NULL, obj_desc, thread);
+       next_walk_state = acpi_ds_create_walk_state(obj_desc->method.owner_id,
+                                                   NULL, obj_desc, thread);
        if (!next_walk_state) {
                status = AE_NO_MEMORY;
                goto cleanup;
        }
        /*
         * The resolved arguments were put on the previous walk state's operand
-        * stack.  Operands on the previous walk state stack always
-        * start at index 0.
-        * Null terminate the list of arguments
+        * stack. Operands on the previous walk state stack always
+        * start at index 0. Also, null terminate the list of arguments
         */
-       this_walk_state->operands [this_walk_state->num_operands] = NULL;
+       this_walk_state->operands[this_walk_state->num_operands] = NULL;
 
        info.parameters = &this_walk_state->operands[0];
        info.parameter_type = ACPI_PARAM_ARGS;
 
-       status = acpi_ds_init_aml_walk (next_walk_state, NULL, method_node,
-                         obj_desc->method.aml_start, obj_desc->method.aml_length,
-                         &info, 3);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ds_init_aml_walk(next_walk_state, NULL, method_node,
+                                      obj_desc->method.aml_start,
+                                      obj_desc->method.aml_length, &info, 3);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
@@ -359,38 +379,37 @@ acpi_ds_call_control_method (
         * (they were copied to new objects)
         */
        for (i = 0; i < obj_desc->method.param_count; i++) {
-               acpi_ut_remove_reference (this_walk_state->operands [i]);
-               this_walk_state->operands [i] = NULL;
+               acpi_ut_remove_reference(this_walk_state->operands[i]);
+               this_walk_state->operands[i] = NULL;
        }
 
        /* Clear the operand stack */
 
        this_walk_state->num_operands = 0;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "Starting nested execution, newstate=%p\n", next_walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "Starting nested execution, newstate=%p\n",
+                         next_walk_state));
 
        if (obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) {
-               status = obj_desc->method.implementation (next_walk_state);
-               return_ACPI_STATUS (status);
+               status = obj_desc->method.implementation(next_walk_state);
        }
 
-       return_ACPI_STATUS (AE_OK);
-
+       return_ACPI_STATUS(status);
 
-       /* On error, we must delete the new walk state */
+      cleanup:
+       /* Decrement the thread count on the method parse tree */
 
-cleanup:
        if (next_walk_state && (next_walk_state->method_desc)) {
-               /* Decrement the thread count on the method parse tree */
-
-          next_walk_state->method_desc->method.thread_count--;
+               next_walk_state->method_desc->method.thread_count--;
        }
-       (void) acpi_ds_terminate_control_method (next_walk_state);
-       acpi_ds_delete_walk_state (next_walk_state);
-       return_ACPI_STATUS (status);
-}
 
+       /* On error, we must delete the new walk state */
+
+       acpi_ds_terminate_control_method(next_walk_state);
+       acpi_ds_delete_walk_state(next_walk_state);
+       return_ACPI_STATUS(status);
+}
 
 /*******************************************************************************
  *
@@ -407,25 +426,22 @@ cleanup:
  ******************************************************************************/
 
 acpi_status
-acpi_ds_restart_control_method (
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       *return_desc)
+acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
+                              union acpi_operand_object *return_desc)
 {
-       acpi_status                     status;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_restart_control_method", walk_state);
 
-       ACPI_FUNCTION_TRACE_PTR ("ds_restart_control_method", walk_state);
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "****Restart [%4.4s] Op %p return_value_from_callee %p\n",
+                         (char *)&walk_state->method_node->name,
+                         walk_state->method_call_op, return_desc));
 
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "****Restart [%4.4s] Op %p return_value_from_callee %p\n",
-               (char *) &walk_state->method_node->name, walk_state->method_call_op,
-               return_desc));
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "    return_from_this_method_used?=%X res_stack %p Walk %p\n",
-               walk_state->return_used,
-               walk_state->results, walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "    return_from_this_method_used?=%X res_stack %p Walk %p\n",
+                         walk_state->return_used,
+                         walk_state->results, walk_state));
 
        /* Did the called method return a value? */
 
@@ -435,10 +451,10 @@ acpi_ds_restart_control_method (
                if (walk_state->return_used) {
                        /* Save the return value from the previous method */
 
-                       status = acpi_ds_result_push (return_desc, walk_state);
-                       if (ACPI_FAILURE (status)) {
-                               acpi_ut_remove_reference (return_desc);
-                               return_ACPI_STATUS (status);
+                       status = acpi_ds_result_push(return_desc, walk_state);
+                       if (ACPI_FAILURE(status)) {
+                               acpi_ut_remove_reference(return_desc);
+                               return_ACPI_STATUS(status);
                        }
 
                        /*
@@ -456,26 +472,26 @@ acpi_ds_restart_control_method (
                 * NOTE: this is optional because the ASL language does not actually
                 * support this behavior.
                 */
-               else if (!acpi_ds_do_implicit_return (return_desc, walk_state, FALSE)) {
+               else if (!acpi_ds_do_implicit_return
+                        (return_desc, walk_state, FALSE)) {
                        /*
                         * Delete the return value if it will not be used by the
                         * calling method
                         */
-                       acpi_ut_remove_reference (return_desc);
+                       acpi_ut_remove_reference(return_desc);
                }
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_terminate_control_method
  *
  * PARAMETERS:  walk_state          - State of the method
  *
- * RETURN:      Status
+ * RETURN:      None
  *
  * DESCRIPTION: Terminate a control method.  Delete everything that the method
  *              created, delete all locals and arguments, and delete the parse
@@ -483,63 +499,59 @@ acpi_ds_restart_control_method (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ds_terminate_control_method (
-       struct acpi_walk_state          *walk_state)
+void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       *obj_desc;
-       struct acpi_namespace_node      *method_node;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_terminate_control_method", walk_state);
+       union acpi_operand_object *obj_desc;
+       struct acpi_namespace_node *method_node;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_terminate_control_method", walk_state);
 
        if (!walk_state) {
-               return (AE_BAD_PARAMETER);
+               return_VOID;
        }
 
        /* The current method object was saved in the walk state */
 
        obj_desc = walk_state->method_desc;
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_OK);
+               return_VOID;
        }
 
        /* Delete all arguments and locals */
 
-       acpi_ds_method_data_delete_all (walk_state);
+       acpi_ds_method_data_delete_all(walk_state);
 
        /*
         * Lock the parser while we terminate this method.
         * If this is the last thread executing the method,
         * we have additional cleanup to perform
         */
-       status = acpi_ut_acquire_mutex (ACPI_MTX_PARSER);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_PARSER);
+       if (ACPI_FAILURE(status)) {
+               return_VOID;
        }
 
        /* Signal completion of the execution of this method if necessary */
 
        if (walk_state->method_desc->method.semaphore) {
-               status = acpi_os_signal_semaphore (
-                                 walk_state->method_desc->method.semaphore, 1);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR (("Could not signal method semaphore\n"));
-                       status = AE_OK;
+               status =
+                   acpi_os_signal_semaphore(walk_state->method_desc->method.
+                                            semaphore, 1);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("Could not signal method semaphore\n"));
 
                        /* Ignore error and continue cleanup */
                }
        }
 
        if (walk_state->method_desc->method.thread_count) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                       "*** Not deleting method namespace, there are still %d threads\n",
-                       walk_state->method_desc->method.thread_count));
-       }
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "*** Not deleting method namespace, there are still %d threads\n",
+                                 walk_state->method_desc->method.
+                                 thread_count));
+       } else {                /* This is the last executing thread */
 
-       if (!walk_state->method_desc->method.thread_count) {
                /*
                 * Support to dynamically change a method from not_serialized to
                 * Serialized if it appears that the method is written foolishly and
@@ -551,10 +563,11 @@ acpi_ds_terminate_control_method (
                 * before creating the synchronization semaphore.
                 */
                if ((walk_state->method_desc->method.concurrency == 1) &&
-                       (!walk_state->method_desc->method.semaphore)) {
-                       status = acpi_os_create_semaphore (1,
-                                        1,
-                                        &walk_state->method_desc->method.semaphore);
+                   (!walk_state->method_desc->method.semaphore)) {
+                       status = acpi_os_create_semaphore(1, 1,
+                                                         &walk_state->
+                                                         method_desc->method.
+                                                         semaphore);
                }
 
                /*
@@ -569,28 +582,27 @@ acpi_ds_terminate_control_method (
                 * Delete any namespace entries created immediately underneath
                 * the method
                 */
-               status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+               if (ACPI_FAILURE(status)) {
+                       goto exit;
                }
 
                if (method_node->child) {
-                       acpi_ns_delete_namespace_subtree (method_node);
+                       acpi_ns_delete_namespace_subtree(method_node);
                }
 
                /*
                 * Delete any namespace entries created anywhere else within
                 * the namespace
                 */
-               acpi_ns_delete_namespace_by_owner (walk_state->method_desc->method.owning_id);
-               status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
-               }
+               acpi_ns_delete_namespace_by_owner(walk_state->method_desc->
+                                                 method.owner_id);
+               status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+               acpi_ut_release_owner_id(&walk_state->method_desc->method.
+                                        owner_id);
        }
 
-       status = acpi_ut_release_mutex (ACPI_MTX_PARSER);
-       return_ACPI_STATUS (status);
+      exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_PARSER);
+       return_VOID;
 }
-
-
index f7998306f756492b396fe5fbb57c6685af72d781..4095ce70982bf3fcb1d852523ca25e4c99794b6d 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acdispat.h>
 #include <acpi/amlcode.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acinterp.h>
 
-
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dsmthdat")
+ACPI_MODULE_NAME("dsmthdat")
 
 /* Local prototypes */
-
 static void
-acpi_ds_method_data_delete_value (
-       u16                             opcode,
-       u32                             index,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_method_data_delete_value(u16 opcode,
+                                u32 index, struct acpi_walk_state *walk_state);
 
 static acpi_status
-acpi_ds_method_data_set_value (
-       u16                             opcode,
-       u32                             index,
-       union acpi_operand_object       *object,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_method_data_set_value(u16 opcode,
+                             u32 index,
+                             union acpi_operand_object *object,
+                             struct acpi_walk_state *walk_state);
 
 #ifdef ACPI_OBSOLETE_FUNCTIONS
 acpi_object_type
-acpi_ds_method_data_get_type (
-       u16                             opcode,
-       u32                             index,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_method_data_get_type(u16 opcode,
+                            u32 index, struct acpi_walk_state *walk_state);
 #endif
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_method_data_init
@@ -97,45 +88,41 @@ acpi_ds_method_data_get_type (
  *
  ******************************************************************************/
 
-void
-acpi_ds_method_data_init (
-       struct acpi_walk_state          *walk_state)
+void acpi_ds_method_data_init(struct acpi_walk_state *walk_state)
 {
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("ds_method_data_init");
+       u32 i;
 
+       ACPI_FUNCTION_TRACE("ds_method_data_init");
 
        /* Init the method arguments */
 
        for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++) {
-               ACPI_MOVE_32_TO_32 (&walk_state->arguments[i].name,
+               ACPI_MOVE_32_TO_32(&walk_state->arguments[i].name,
                                   NAMEOF_ARG_NTE);
                walk_state->arguments[i].name.integer |= (i << 24);
-               walk_state->arguments[i].descriptor   = ACPI_DESC_TYPE_NAMED;
-               walk_state->arguments[i].type         = ACPI_TYPE_ANY;
-               walk_state->arguments[i].flags        = ANOBJ_END_OF_PEER_LIST |
-                                 ANOBJ_METHOD_ARG;
+               walk_state->arguments[i].descriptor = ACPI_DESC_TYPE_NAMED;
+               walk_state->arguments[i].type = ACPI_TYPE_ANY;
+               walk_state->arguments[i].flags = ANOBJ_END_OF_PEER_LIST |
+                   ANOBJ_METHOD_ARG;
        }
 
        /* Init the method locals */
 
        for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++) {
-               ACPI_MOVE_32_TO_32 (&walk_state->local_variables[i].name,
+               ACPI_MOVE_32_TO_32(&walk_state->local_variables[i].name,
                                   NAMEOF_LOCAL_NTE);
 
                walk_state->local_variables[i].name.integer |= (i << 24);
-               walk_state->local_variables[i].descriptor  = ACPI_DESC_TYPE_NAMED;
-               walk_state->local_variables[i].type        = ACPI_TYPE_ANY;
-               walk_state->local_variables[i].flags       = ANOBJ_END_OF_PEER_LIST |
-                                ANOBJ_METHOD_LOCAL;
+               walk_state->local_variables[i].descriptor =
+                   ACPI_DESC_TYPE_NAMED;
+               walk_state->local_variables[i].type = ACPI_TYPE_ANY;
+               walk_state->local_variables[i].flags = ANOBJ_END_OF_PEER_LIST |
+                   ANOBJ_METHOD_LOCAL;
        }
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_method_data_delete_all
@@ -149,26 +136,25 @@ acpi_ds_method_data_init (
  *
  ******************************************************************************/
 
-void
-acpi_ds_method_data_delete_all (
-       struct acpi_walk_state          *walk_state)
+void acpi_ds_method_data_delete_all(struct acpi_walk_state *walk_state)
 {
-       u32                             index;
-
-
-       ACPI_FUNCTION_TRACE ("ds_method_data_delete_all");
+       u32 index;
 
+       ACPI_FUNCTION_TRACE("ds_method_data_delete_all");
 
        /* Detach the locals */
 
        for (index = 0; index < ACPI_METHOD_NUM_LOCALS; index++) {
                if (walk_state->local_variables[index].object) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Deleting Local%d=%p\n",
-                                       index, walk_state->local_variables[index].object));
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Deleting Local%d=%p\n",
+                                         index,
+                                         walk_state->local_variables[index].
+                                         object));
 
                        /* Detach object (if present) and remove a reference */
 
-                       acpi_ns_detach_object (&walk_state->local_variables[index]);
+                       acpi_ns_detach_object(&walk_state->
+                                             local_variables[index]);
                }
        }
 
@@ -176,19 +162,19 @@ acpi_ds_method_data_delete_all (
 
        for (index = 0; index < ACPI_METHOD_NUM_ARGS; index++) {
                if (walk_state->arguments[index].object) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Deleting Arg%d=%p\n",
-                                       index, walk_state->arguments[index].object));
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Deleting Arg%d=%p\n",
+                                         index,
+                                         walk_state->arguments[index].object));
 
                        /* Detach object (if present) and remove a reference */
 
-                       acpi_ns_detach_object (&walk_state->arguments[index]);
+                       acpi_ns_detach_object(&walk_state->arguments[index]);
                }
        }
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_method_data_init_args
@@ -206,47 +192,44 @@ acpi_ds_method_data_delete_all (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_method_data_init_args (
-       union acpi_operand_object       **params,
-       u32                             max_param_count,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_method_data_init_args(union acpi_operand_object **params,
+                             u32 max_param_count,
+                             struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       u32                             index = 0;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_method_data_init_args", params);
+       acpi_status status;
+       u32 index = 0;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_method_data_init_args", params);
 
        if (!params) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "No param list passed to method\n"));
-               return_ACPI_STATUS (AE_OK);
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "No param list passed to method\n"));
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Copy passed parameters into the new method stack frame */
 
        while ((index < ACPI_METHOD_NUM_ARGS) &&
-                  (index < max_param_count)      &&
-                       params[index]) {
+              (index < max_param_count) && params[index]) {
                /*
                 * A valid parameter.
                 * Store the argument in the method/walk descriptor.
                 * Do not copy the arg in order to implement call by reference
                 */
-               status = acpi_ds_method_data_set_value (AML_ARG_OP, index,
-                                params[index], walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ds_method_data_set_value(AML_ARG_OP, index,
+                                                      params[index],
+                                                      walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                index++;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%d args passed to method\n", index));
-       return_ACPI_STATUS (AE_OK);
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%d args passed to method\n", index));
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_method_data_get_node
@@ -263,14 +246,12 @@ acpi_ds_method_data_init_args (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_method_data_get_node (
-       u16                             opcode,
-       u32                             index,
-       struct acpi_walk_state          *walk_state,
-       struct acpi_namespace_node      **node)
+acpi_ds_method_data_get_node(u16 opcode,
+                            u32 index,
+                            struct acpi_walk_state *walk_state,
+                            struct acpi_namespace_node **node)
 {
-       ACPI_FUNCTION_TRACE ("ds_method_data_get_node");
-
+       ACPI_FUNCTION_TRACE("ds_method_data_get_node");
 
        /*
         * Method Locals and Arguments are supported
@@ -279,10 +260,10 @@ acpi_ds_method_data_get_node (
        case AML_LOCAL_OP:
 
                if (index > ACPI_METHOD_MAX_LOCAL) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Local index %d is invalid (max %d)\n",
-                               index, ACPI_METHOD_MAX_LOCAL));
-                       return_ACPI_STATUS (AE_AML_INVALID_INDEX);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Local index %d is invalid (max %d)\n",
+                                         index, ACPI_METHOD_MAX_LOCAL));
+                       return_ACPI_STATUS(AE_AML_INVALID_INDEX);
                }
 
                /* Return a pointer to the pseudo-node */
@@ -293,10 +274,10 @@ acpi_ds_method_data_get_node (
        case AML_ARG_OP:
 
                if (index > ACPI_METHOD_MAX_ARG) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Arg index %d is invalid (max %d)\n",
-                               index, ACPI_METHOD_MAX_ARG));
-                       return_ACPI_STATUS (AE_AML_INVALID_INDEX);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Arg index %d is invalid (max %d)\n",
+                                         index, ACPI_METHOD_MAX_ARG));
+                       return_ACPI_STATUS(AE_AML_INVALID_INDEX);
                }
 
                /* Return a pointer to the pseudo-node */
@@ -305,14 +286,14 @@ acpi_ds_method_data_get_node (
                break;
 
        default:
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Opcode %d is invalid\n", opcode));
-               return_ACPI_STATUS (AE_AML_BAD_OPCODE);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Opcode %d is invalid\n",
+                                 opcode));
+               return_ACPI_STATUS(AE_AML_BAD_OPCODE);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_method_data_set_value
@@ -330,29 +311,26 @@ acpi_ds_method_data_get_node (
  ******************************************************************************/
 
 static acpi_status
-acpi_ds_method_data_set_value (
-       u16                             opcode,
-       u32                             index,
-       union acpi_operand_object       *object,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_method_data_set_value(u16 opcode,
+                             u32 index,
+                             union acpi_operand_object *object,
+                             struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-
+       acpi_status status;
+       struct acpi_namespace_node *node;
 
-       ACPI_FUNCTION_TRACE ("ds_method_data_set_value");
+       ACPI_FUNCTION_TRACE("ds_method_data_set_value");
 
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "new_obj %p Opcode %X, Refs=%d [%s]\n", object,
-               opcode, object->common.reference_count,
-               acpi_ut_get_type_name (object->common.type)));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "new_obj %p Opcode %X, Refs=%d [%s]\n", object,
+                         opcode, object->common.reference_count,
+                         acpi_ut_get_type_name(object->common.type)));
 
        /* Get the namespace node for the arg/local */
 
-       status = acpi_ds_method_data_get_node (opcode, index, walk_state, &node);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ds_method_data_get_node(opcode, index, walk_state, &node);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -361,15 +339,14 @@ acpi_ds_method_data_set_value (
         * reference semantics of ACPI Control Method invocation.
         * (See ACPI specification 2.0_c)
         */
-       acpi_ut_add_reference (object);
+       acpi_ut_add_reference(object);
 
        /* Install the object */
 
        node->object = object;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_method_data_get_value
@@ -387,32 +364,30 @@ acpi_ds_method_data_set_value (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_method_data_get_value (
-       u16                             opcode,
-       u32                             index,
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       **dest_desc)
+acpi_ds_method_data_get_value(u16 opcode,
+                             u32 index,
+                             struct acpi_walk_state *walk_state,
+                             union acpi_operand_object **dest_desc)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-       union acpi_operand_object       *object;
-
-
-       ACPI_FUNCTION_TRACE ("ds_method_data_get_value");
+       acpi_status status;
+       struct acpi_namespace_node *node;
+       union acpi_operand_object *object;
 
+       ACPI_FUNCTION_TRACE("ds_method_data_get_value");
 
        /* Validate the object descriptor */
 
        if (!dest_desc) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null object descriptor pointer\n"));
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Null object descriptor pointer\n"));
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Get the namespace node for the arg/local */
 
-       status = acpi_ds_method_data_get_node (opcode, index, walk_state, &node);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ds_method_data_get_node(opcode, index, walk_state, &node);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Get the object from the node */
@@ -433,9 +408,10 @@ acpi_ds_method_data_get_value (
                /* If slack enabled, init the local_x/arg_x to an Integer of value zero */
 
                if (acpi_gbl_enable_interpreter_slack) {
-                       object = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+                       object =
+                           acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                        if (!object) {
-                               return_ACPI_STATUS (AE_NO_MEMORY);
+                               return_ACPI_STATUS(AE_NO_MEMORY);
                        }
 
                        object->integer.value = 0;
@@ -444,27 +420,29 @@ acpi_ds_method_data_get_value (
 
                /* Otherwise, return the error */
 
-               else switch (opcode) {
-               case AML_ARG_OP:
+               else
+                       switch (opcode) {
+                       case AML_ARG_OP:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Uninitialized Arg[%d] at node %p\n",
-                               index, node));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Uninitialized Arg[%d] at node %p\n",
+                                                 index, node));
 
-                       return_ACPI_STATUS (AE_AML_UNINITIALIZED_ARG);
+                               return_ACPI_STATUS(AE_AML_UNINITIALIZED_ARG);
 
-               case AML_LOCAL_OP:
+                       case AML_LOCAL_OP:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Uninitialized Local[%d] at node %p\n",
-                               index, node));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Uninitialized Local[%d] at node %p\n",
+                                                 index, node));
 
-                       return_ACPI_STATUS (AE_AML_UNINITIALIZED_LOCAL);
+                               return_ACPI_STATUS(AE_AML_UNINITIALIZED_LOCAL);
 
-               default:
-                       ACPI_REPORT_ERROR (("Not Arg/Local opcode: %X\n", opcode));
-                       return_ACPI_STATUS (AE_AML_INTERNAL);
-               }
+                       default:
+                               ACPI_REPORT_ERROR(("Not Arg/Local opcode: %X\n",
+                                                  opcode));
+                               return_ACPI_STATUS(AE_AML_INTERNAL);
+                       }
        }
 
        /*
@@ -472,12 +450,11 @@ acpi_ds_method_data_get_value (
         * Return an additional reference to the object
         */
        *dest_desc = object;
-       acpi_ut_add_reference (object);
+       acpi_ut_add_reference(object);
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_method_data_delete_value
@@ -494,29 +471,25 @@ acpi_ds_method_data_get_value (
  ******************************************************************************/
 
 static void
-acpi_ds_method_data_delete_value (
-       u16                             opcode,
-       u32                             index,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_method_data_delete_value(u16 opcode,
+                                u32 index, struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-       union acpi_operand_object       *object;
-
-
-       ACPI_FUNCTION_TRACE ("ds_method_data_delete_value");
+       acpi_status status;
+       struct acpi_namespace_node *node;
+       union acpi_operand_object *object;
 
+       ACPI_FUNCTION_TRACE("ds_method_data_delete_value");
 
        /* Get the namespace node for the arg/local */
 
-       status = acpi_ds_method_data_get_node (opcode, index, walk_state, &node);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ds_method_data_get_node(opcode, index, walk_state, &node);
+       if (ACPI_FAILURE(status)) {
                return_VOID;
        }
 
        /* Get the associated object */
 
-       object = acpi_ns_get_attached_object (node);
+       object = acpi_ns_get_attached_object(node);
 
        /*
         * Undefine the Arg or Local by setting its descriptor
@@ -526,19 +499,18 @@ acpi_ds_method_data_delete_value (
        node->object = NULL;
 
        if ((object) &&
-               (ACPI_GET_DESCRIPTOR_TYPE (object) == ACPI_DESC_TYPE_OPERAND)) {
+           (ACPI_GET_DESCRIPTOR_TYPE(object) == ACPI_DESC_TYPE_OPERAND)) {
                /*
                 * There is a valid object.
                 * Decrement the reference count by one to balance the
                 * increment when the object was stored.
                 */
-               acpi_ut_remove_reference (object);
+               acpi_ut_remove_reference(object);
        }
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_store_object_to_local
@@ -557,40 +529,38 @@ acpi_ds_method_data_delete_value (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_store_object_to_local (
-       u16                             opcode,
-       u32                             index,
-       union acpi_operand_object       *obj_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_store_object_to_local(u16 opcode,
+                             u32 index,
+                             union acpi_operand_object *obj_desc,
+                             struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-       union acpi_operand_object       *current_obj_desc;
-       union acpi_operand_object       *new_obj_desc;
-
+       acpi_status status;
+       struct acpi_namespace_node *node;
+       union acpi_operand_object *current_obj_desc;
+       union acpi_operand_object *new_obj_desc;
 
-       ACPI_FUNCTION_TRACE ("ds_store_object_to_local");
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Opcode=%X Index=%d Obj=%p\n",
-               opcode, index, obj_desc));
+       ACPI_FUNCTION_TRACE("ds_store_object_to_local");
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Opcode=%X Index=%d Obj=%p\n",
+                         opcode, index, obj_desc));
 
        /* Parameter validation */
 
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Get the namespace node for the arg/local */
 
-       status = acpi_ds_method_data_get_node (opcode, index, walk_state, &node);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ds_method_data_get_node(opcode, index, walk_state, &node);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       current_obj_desc = acpi_ns_get_attached_object (node);
+       current_obj_desc = acpi_ns_get_attached_object(node);
        if (current_obj_desc == obj_desc) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p already installed!\n",
-                       obj_desc));
-               return_ACPI_STATUS (status);
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Obj=%p already installed!\n",
+                                 obj_desc));
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -602,9 +572,11 @@ acpi_ds_store_object_to_local (
         */
        new_obj_desc = obj_desc;
        if (obj_desc->common.reference_count > 1) {
-               status = acpi_ut_copy_iobject_to_iobject (obj_desc, &new_obj_desc, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ut_copy_iobject_to_iobject(obj_desc, &new_obj_desc,
+                                                   walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -632,43 +604,40 @@ acpi_ds_store_object_to_local (
                 * Weird, but true.
                 */
                if (opcode == AML_ARG_OP) {
-                       /*
-                        * Make sure that the object is the correct type.  This may be
-                        * overkill, butit is here because references were NS nodes in
-                        *  the past.  Now they are operand objects of type Reference.
-                        */
-                       if (ACPI_GET_DESCRIPTOR_TYPE (current_obj_desc) != ACPI_DESC_TYPE_OPERAND) {
-                               ACPI_REPORT_ERROR ((
-                                       "Invalid descriptor type while storing to method arg: [%s]\n",
-                                       acpi_ut_get_descriptor_name (current_obj_desc)));
-                               return_ACPI_STATUS (AE_AML_INTERNAL);
-                       }
-
                        /*
                         * If we have a valid reference object that came from ref_of(),
                         * do the indirect store
                         */
-                       if ((current_obj_desc->common.type == ACPI_TYPE_LOCAL_REFERENCE) &&
-                               (current_obj_desc->reference.opcode == AML_REF_OF_OP)) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                                               "Arg (%p) is an obj_ref(Node), storing in node %p\n",
-                                               new_obj_desc, current_obj_desc));
+                       if ((ACPI_GET_DESCRIPTOR_TYPE(current_obj_desc) ==
+                            ACPI_DESC_TYPE_OPERAND)
+                           && (current_obj_desc->common.type ==
+                               ACPI_TYPE_LOCAL_REFERENCE)
+                           && (current_obj_desc->reference.opcode ==
+                               AML_REF_OF_OP)) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                                 "Arg (%p) is an obj_ref(Node), storing in node %p\n",
+                                                 new_obj_desc,
+                                                 current_obj_desc));
 
                                /*
                                 * Store this object to the Node (perform the indirect store)
                                 * NOTE: No implicit conversion is performed, as per the ACPI
                                 * specification rules on storing to Locals/Args.
                                 */
-                               status = acpi_ex_store_object_to_node (new_obj_desc,
-                                                current_obj_desc->reference.object, walk_state,
-                                                ACPI_NO_IMPLICIT_CONVERSION);
+                               status =
+                                   acpi_ex_store_object_to_node(new_obj_desc,
+                                                                current_obj_desc->
+                                                                reference.
+                                                                object,
+                                                                walk_state,
+                                                                ACPI_NO_IMPLICIT_CONVERSION);
 
                                /* Remove local reference if we copied the object above */
 
                                if (new_obj_desc != obj_desc) {
-                                       acpi_ut_remove_reference (new_obj_desc);
+                                       acpi_ut_remove_reference(new_obj_desc);
                                }
-                               return_ACPI_STATUS (status);
+                               return_ACPI_STATUS(status);
                        }
                }
 
@@ -676,7 +645,7 @@ acpi_ds_store_object_to_local (
                 * Delete the existing object
                 * before storing the new one
                 */
-               acpi_ds_method_data_delete_value (opcode, index, walk_state);
+               acpi_ds_method_data_delete_value(opcode, index, walk_state);
        }
 
        /*
@@ -684,18 +653,19 @@ acpi_ds_store_object_to_local (
         * the descriptor for the Arg or Local.
         * (increments the object reference count by one)
         */
-       status = acpi_ds_method_data_set_value (opcode, index, new_obj_desc, walk_state);
+       status =
+           acpi_ds_method_data_set_value(opcode, index, new_obj_desc,
+                                         walk_state);
 
        /* Remove local reference if we copied the object above */
 
        if (new_obj_desc != obj_desc) {
-               acpi_ut_remove_reference (new_obj_desc);
+               acpi_ut_remove_reference(new_obj_desc);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 #ifdef ACPI_OBSOLETE_FUNCTIONS
 /*******************************************************************************
  *
@@ -712,39 +682,33 @@ acpi_ds_store_object_to_local (
  ******************************************************************************/
 
 acpi_object_type
-acpi_ds_method_data_get_type (
-       u16                             opcode,
-       u32                             index,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_method_data_get_type(u16 opcode,
+                            u32 index, struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-       union acpi_operand_object       *object;
-
-
-       ACPI_FUNCTION_TRACE ("ds_method_data_get_type");
+       acpi_status status;
+       struct acpi_namespace_node *node;
+       union acpi_operand_object *object;
 
+       ACPI_FUNCTION_TRACE("ds_method_data_get_type");
 
        /* Get the namespace node for the arg/local */
 
-       status = acpi_ds_method_data_get_node (opcode, index, walk_state, &node);
-       if (ACPI_FAILURE (status)) {
-               return_VALUE ((ACPI_TYPE_NOT_FOUND));
+       status = acpi_ds_method_data_get_node(opcode, index, walk_state, &node);
+       if (ACPI_FAILURE(status)) {
+               return_VALUE((ACPI_TYPE_NOT_FOUND));
        }
 
        /* Get the object */
 
-       object = acpi_ns_get_attached_object (node);
+       object = acpi_ns_get_attached_object(node);
        if (!object) {
                /* Uninitialized local/arg, return TYPE_ANY */
 
-               return_VALUE (ACPI_TYPE_ANY);
+               return_VALUE(ACPI_TYPE_ANY);
        }
 
        /* Get the object type */
 
-       return_VALUE (ACPI_GET_OBJECT_TYPE (object));
+       return_VALUE(ACPI_GET_OBJECT_TYPE(object));
 }
 #endif
-
-
index bfbae4e4c667d76159ba480a8799be0b6c5f4480..8ac0cd93adb580b3e70c285bb0c99bf3452dd2d6 100644 (file)
@@ -41,7 +41,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 #include <acpi/acinterp.h>
 
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dsobject")
+ACPI_MODULE_NAME("dsobject")
 
 static acpi_status
-acpi_ds_build_internal_object (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       union acpi_operand_object       **obj_desc_ptr);
-
+acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
+                             union acpi_parse_object *op,
+                             union acpi_operand_object **obj_desc_ptr);
 
 #ifndef ACPI_NO_METHOD_EXECUTION
 /*******************************************************************************
@@ -76,17 +73,14 @@ acpi_ds_build_internal_object (
  ******************************************************************************/
 
 static acpi_status
-acpi_ds_build_internal_object (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       union acpi_operand_object       **obj_desc_ptr)
+acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
+                             union acpi_parse_object *op,
+                             union acpi_operand_object **obj_desc_ptr)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ds_build_internal_object");
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ds_build_internal_object");
 
        *obj_desc_ptr = NULL;
        if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) {
@@ -96,40 +90,44 @@ acpi_ds_build_internal_object (
                 * Otherwise, go ahead and look it up now
                 */
                if (!op->common.node) {
-                       status = acpi_ns_lookup (walk_state->scope_info,
-                                         op->common.value.string,
-                                         ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
-                                         ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
-                                         NULL,
-                                         (struct acpi_namespace_node **) &(op->common.node));
-
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_REPORT_NSERROR (op->common.value.string, status);
-                               return_ACPI_STATUS (status);
+                       status = acpi_ns_lookup(walk_state->scope_info,
+                                               op->common.value.string,
+                                               ACPI_TYPE_ANY,
+                                               ACPI_IMODE_EXECUTE,
+                                               ACPI_NS_SEARCH_PARENT |
+                                               ACPI_NS_DONT_OPEN_SCOPE, NULL,
+                                               (struct acpi_namespace_node **)
+                                               &(op->common.node));
+
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_REPORT_NSERROR(op->common.value.string,
+                                                   status);
+                               return_ACPI_STATUS(status);
                        }
                }
        }
 
        /* Create and init the internal ACPI object */
 
-       obj_desc = acpi_ut_create_internal_object (
-                        (acpi_ps_get_opcode_info (op->common.aml_opcode))->object_type);
+       obj_desc = acpi_ut_create_internal_object((acpi_ps_get_opcode_info
+                                                  (op->common.aml_opcode))->
+                                                 object_type);
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
-       status = acpi_ds_init_object_from_op (walk_state, op, op->common.aml_opcode,
-                        &obj_desc);
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_remove_reference (obj_desc);
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ds_init_object_from_op(walk_state, op, op->common.aml_opcode,
+                                       &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               acpi_ut_remove_reference(obj_desc);
+               return_ACPI_STATUS(status);
        }
 
        *obj_desc_ptr = obj_desc;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_build_internal_buffer_obj
@@ -147,20 +145,17 @@ acpi_ds_build_internal_object (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_build_internal_buffer_obj (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       u32                             buffer_length,
-       union acpi_operand_object       **obj_desc_ptr)
+acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
+                                 union acpi_parse_object *op,
+                                 u32 buffer_length,
+                                 union acpi_operand_object **obj_desc_ptr)
 {
-       union acpi_parse_object         *arg;
-       union acpi_operand_object       *obj_desc;
-       union acpi_parse_object         *byte_list;
-       u32                             byte_list_length = 0;
-
-
-       ACPI_FUNCTION_TRACE ("ds_build_internal_buffer_obj");
+       union acpi_parse_object *arg;
+       union acpi_operand_object *obj_desc;
+       union acpi_parse_object *byte_list;
+       u32 byte_list_length = 0;
 
+       ACPI_FUNCTION_TRACE("ds_build_internal_buffer_obj");
 
        obj_desc = *obj_desc_ptr;
        if (obj_desc) {
@@ -168,14 +163,13 @@ acpi_ds_build_internal_buffer_obj (
                 * We are evaluating a Named buffer object "Name (xxxx, Buffer)".
                 * The buffer object already exists (from the NS node)
                 */
-       }
-       else {
+       } else {
                /* Create a new buffer object */
 
-               obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER);
+               obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER);
                *obj_desc_ptr = obj_desc;
                if (!obj_desc) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
        }
 
@@ -184,16 +178,17 @@ acpi_ds_build_internal_buffer_obj (
         * individual bytes or a string initializer.  In either case, a
         * byte_list appears in the AML.
         */
-       arg = op->common.value.arg;         /* skip first arg */
+       arg = op->common.value.arg;     /* skip first arg */
 
        byte_list = arg->named.next;
        if (byte_list) {
                if (byte_list->common.aml_opcode != AML_INT_BYTELIST_OP) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Expecting bytelist, got AML opcode %X in op %p\n",
-                               byte_list->common.aml_opcode, byte_list));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Expecting bytelist, got AML opcode %X in op %p\n",
+                                         byte_list->common.aml_opcode,
+                                         byte_list));
 
-                       acpi_ut_remove_reference (obj_desc);
+                       acpi_ut_remove_reference(obj_desc);
                        return (AE_TYPE);
                }
 
@@ -214,31 +209,29 @@ acpi_ds_build_internal_buffer_obj (
 
        if (obj_desc->buffer.length == 0) {
                obj_desc->buffer.pointer = NULL;
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "Buffer defined with zero length in AML, creating\n"));
-       }
-       else {
-               obj_desc->buffer.pointer = ACPI_MEM_CALLOCATE (
-                                  obj_desc->buffer.length);
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "Buffer defined with zero length in AML, creating\n"));
+       } else {
+               obj_desc->buffer.pointer =
+                   ACPI_MEM_CALLOCATE(obj_desc->buffer.length);
                if (!obj_desc->buffer.pointer) {
-                       acpi_ut_delete_object_desc (obj_desc);
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       acpi_ut_delete_object_desc(obj_desc);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                /* Initialize buffer from the byte_list (if present) */
 
                if (byte_list) {
-                       ACPI_MEMCPY (obj_desc->buffer.pointer, byte_list->named.data,
-                                         byte_list_length);
+                       ACPI_MEMCPY(obj_desc->buffer.pointer,
+                                   byte_list->named.data, byte_list_length);
                }
        }
 
        obj_desc->buffer.flags |= AOPOBJ_DATA_VALID;
-       op->common.node = (struct acpi_namespace_node *) obj_desc;
-       return_ACPI_STATUS (AE_OK);
+       op->common.node = (struct acpi_namespace_node *)obj_desc;
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_build_internal_package_obj
@@ -256,28 +249,25 @@ acpi_ds_build_internal_buffer_obj (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_build_internal_package_obj (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       u32                             package_length,
-       union acpi_operand_object       **obj_desc_ptr)
+acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
+                                  union acpi_parse_object *op,
+                                  u32 package_length,
+                                  union acpi_operand_object **obj_desc_ptr)
 {
-       union acpi_parse_object         *arg;
-       union acpi_parse_object         *parent;
-       union acpi_operand_object       *obj_desc = NULL;
-       u32                             package_list_length;
-       acpi_status                     status = AE_OK;
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("ds_build_internal_package_obj");
+       union acpi_parse_object *arg;
+       union acpi_parse_object *parent;
+       union acpi_operand_object *obj_desc = NULL;
+       u32 package_list_length;
+       acpi_status status = AE_OK;
+       u32 i;
 
+       ACPI_FUNCTION_TRACE("ds_build_internal_package_obj");
 
        /* Find the parent of a possibly nested package */
 
        parent = op->common.parent;
-       while ((parent->common.aml_opcode == AML_PACKAGE_OP)    ||
-                  (parent->common.aml_opcode == AML_VAR_PACKAGE_OP)) {
+       while ((parent->common.aml_opcode == AML_PACKAGE_OP) ||
+              (parent->common.aml_opcode == AML_VAR_PACKAGE_OP)) {
                parent = parent->common.parent;
        }
 
@@ -287,12 +277,11 @@ acpi_ds_build_internal_package_obj (
                 * We are evaluating a Named package object "Name (xxxx, Package)".
                 * Get the existing package object from the NS node
                 */
-       }
-       else {
-               obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_PACKAGE);
+       } else {
+               obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_PACKAGE);
                *obj_desc_ptr = obj_desc;
                if (!obj_desc) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                obj_desc->package.node = parent->common.node;
@@ -323,12 +312,13 @@ acpi_ds_build_internal_package_obj (
         * individual objects). Add an extra pointer slot so
         * that the list is always null terminated.
         */
-       obj_desc->package.elements = ACPI_MEM_CALLOCATE (
-                        ((acpi_size) obj_desc->package.count + 1) * sizeof (void *));
+       obj_desc->package.elements = ACPI_MEM_CALLOCATE(((acpi_size) obj_desc->
+                                                        package.count +
+                                                        1) * sizeof(void *));
 
        if (!obj_desc->package.elements) {
-               acpi_ut_delete_object_desc (obj_desc);
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               acpi_ut_delete_object_desc(obj_desc);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /*
@@ -342,11 +332,13 @@ acpi_ds_build_internal_package_obj (
                        /* Object (package or buffer) is already built */
 
                        obj_desc->package.elements[i] =
-                               ACPI_CAST_PTR (union acpi_operand_object, arg->common.node);
-               }
-               else {
-                       status = acpi_ds_build_internal_object (walk_state, arg,
-                                        &obj_desc->package.elements[i]);
+                           ACPI_CAST_PTR(union acpi_operand_object,
+                                         arg->common.node);
+               } else {
+                       status = acpi_ds_build_internal_object(walk_state, arg,
+                                                              &obj_desc->
+                                                              package.
+                                                              elements[i]);
                }
 
                i++;
@@ -354,11 +346,10 @@ acpi_ds_build_internal_package_obj (
        }
 
        obj_desc->package.flags |= AOPOBJ_DATA_VALID;
-       op->common.node = (struct acpi_namespace_node *) obj_desc;
-       return_ACPI_STATUS (status);
+       op->common.node = (struct acpi_namespace_node *)obj_desc;
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_create_node
@@ -374,57 +365,53 @@ acpi_ds_build_internal_package_obj (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_create_node (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_namespace_node      *node,
-       union acpi_parse_object         *op)
+acpi_ds_create_node(struct acpi_walk_state *walk_state,
+                   struct acpi_namespace_node *node,
+                   union acpi_parse_object *op)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_create_node", op);
+       acpi_status status;
+       union acpi_operand_object *obj_desc;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_create_node", op);
 
        /*
         * Because of the execution pass through the non-control-method
         * parts of the table, we can arrive here twice.  Only init
         * the named object node the first time through
         */
-       if (acpi_ns_get_attached_object (node)) {
-               return_ACPI_STATUS (AE_OK);
+       if (acpi_ns_get_attached_object(node)) {
+               return_ACPI_STATUS(AE_OK);
        }
 
        if (!op->common.value.arg) {
                /* No arguments, there is nothing to do */
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Build an internal object for the argument(s) */
 
-       status = acpi_ds_build_internal_object (walk_state, op->common.value.arg,
-                        &obj_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ds_build_internal_object(walk_state, op->common.value.arg,
+                                              &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Re-type the object according to its argument */
 
-       node->type = ACPI_GET_OBJECT_TYPE (obj_desc);
+       node->type = ACPI_GET_OBJECT_TYPE(obj_desc);
 
        /* Attach obj to node */
 
-       status = acpi_ns_attach_object (node, obj_desc, node->type);
+       status = acpi_ns_attach_object(node, obj_desc, node->type);
 
        /* Remove local reference to the object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-#endif /* ACPI_NO_METHOD_EXECUTION */
-
+#endif                         /* ACPI_NO_METHOD_EXECUTION */
 
 /*******************************************************************************
  *
@@ -444,55 +431,50 @@ acpi_ds_create_node (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_init_object_from_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       u16                             opcode,
-       union acpi_operand_object       **ret_obj_desc)
+acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
+                           union acpi_parse_object *op,
+                           u16 opcode,
+                           union acpi_operand_object **ret_obj_desc)
 {
-       const struct acpi_opcode_info   *op_info;
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("ds_init_object_from_op");
+       const struct acpi_opcode_info *op_info;
+       union acpi_operand_object *obj_desc;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("ds_init_object_from_op");
 
        obj_desc = *ret_obj_desc;
-       op_info = acpi_ps_get_opcode_info (opcode);
+       op_info = acpi_ps_get_opcode_info(opcode);
        if (op_info->class == AML_CLASS_UNKNOWN) {
                /* Unknown opcode */
 
-               return_ACPI_STATUS (AE_TYPE);
+               return_ACPI_STATUS(AE_TYPE);
        }
 
        /* Perform per-object initialization */
 
-       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
        case ACPI_TYPE_BUFFER:
 
                /*
                 * Defer evaluation of Buffer term_arg operand
                 */
-               obj_desc->buffer.node     = (struct acpi_namespace_node *)
-                                  walk_state->operands[0];
+               obj_desc->buffer.node = (struct acpi_namespace_node *)
+                   walk_state->operands[0];
                obj_desc->buffer.aml_start = op->named.data;
                obj_desc->buffer.aml_length = op->named.length;
                break;
 
-
        case ACPI_TYPE_PACKAGE:
 
                /*
                 * Defer evaluation of Package term_arg operand
                 */
-               obj_desc->package.node     = (struct acpi_namespace_node *)
-                                  walk_state->operands[0];
+               obj_desc->package.node = (struct acpi_namespace_node *)
+                   walk_state->operands[0];
                obj_desc->package.aml_start = op->named.data;
                obj_desc->package.aml_length = op->named.length;
                break;
 
-
        case ACPI_TYPE_INTEGER:
 
                switch (op_info->type) {
@@ -525,7 +507,7 @@ acpi_ds_init_object_from_op (
                                /* Truncate value if we are executing from a 32-bit ACPI table */
 
 #ifndef ACPI_NO_METHOD_EXECUTION
-                               acpi_ex_truncate_for32bit_table (obj_desc);
+                               acpi_ex_truncate_for32bit_table(obj_desc);
 #endif
                                break;
 
@@ -536,33 +518,36 @@ acpi_ds_init_object_from_op (
 
                        default:
 
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Unknown constant opcode %X\n", opcode));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Unknown constant opcode %X\n",
+                                                 opcode));
                                status = AE_AML_OPERAND_TYPE;
                                break;
                        }
                        break;
 
-
                case AML_TYPE_LITERAL:
 
                        obj_desc->integer.value = op->common.value.integer;
+#ifndef ACPI_NO_METHOD_EXECUTION
+                       acpi_ex_truncate_for32bit_table(obj_desc);
+#endif
                        break;
 
-
                default:
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Integer type %X\n",
-                               op_info->type));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Unknown Integer type %X\n",
+                                         op_info->type));
                        status = AE_AML_OPERAND_TYPE;
                        break;
                }
                break;
 
-
        case ACPI_TYPE_STRING:
 
                obj_desc->string.pointer = op->common.value.string;
-               obj_desc->string.length = (u32) ACPI_STRLEN (op->common.value.string);
+               obj_desc->string.length =
+                   (u32) ACPI_STRLEN(op->common.value.string);
 
                /*
                 * The string is contained in the ACPI table, don't ever try
@@ -571,11 +556,9 @@ acpi_ds_init_object_from_op (
                obj_desc->common.flags |= AOPOBJ_STATIC_POINTER;
                break;
 
-
        case ACPI_TYPE_METHOD:
                break;
 
-
        case ACPI_TYPE_LOCAL_REFERENCE:
 
                switch (op_info->type) {
@@ -587,14 +570,17 @@ acpi_ds_init_object_from_op (
                        obj_desc->reference.offset = opcode - AML_LOCAL_OP;
 
 #ifndef ACPI_NO_METHOD_EXECUTION
-                       status = acpi_ds_method_data_get_node (AML_LOCAL_OP,
-                                        obj_desc->reference.offset,
-                                        walk_state,
-                                        (struct acpi_namespace_node **) &obj_desc->reference.object);
+                       status = acpi_ds_method_data_get_node(AML_LOCAL_OP,
+                                                             obj_desc->
+                                                             reference.offset,
+                                                             walk_state,
+                                                             (struct
+                                                              acpi_namespace_node
+                                                              **)&obj_desc->
+                                                             reference.object);
 #endif
                        break;
 
-
                case AML_TYPE_METHOD_ARGUMENT:
 
                        /* Split the opcode into a base opcode + offset */
@@ -603,14 +589,18 @@ acpi_ds_init_object_from_op (
                        obj_desc->reference.offset = opcode - AML_ARG_OP;
 
 #ifndef ACPI_NO_METHOD_EXECUTION
-                       status = acpi_ds_method_data_get_node (AML_ARG_OP,
-                                        obj_desc->reference.offset,
-                                        walk_state,
-                                        (struct acpi_namespace_node **) &obj_desc->reference.object);
+                       status = acpi_ds_method_data_get_node(AML_ARG_OP,
+                                                             obj_desc->
+                                                             reference.offset,
+                                                             walk_state,
+                                                             (struct
+                                                              acpi_namespace_node
+                                                              **)&obj_desc->
+                                                             reference.object);
 #endif
                        break;
 
-               default: /* Other literals, etc.. */
+               default:        /* Other literals, etc.. */
 
                        if (op->common.aml_opcode == AML_INT_NAMEPATH_OP) {
                                /* Node was saved in Op */
@@ -623,17 +613,15 @@ acpi_ds_init_object_from_op (
                }
                break;
 
-
        default:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unimplemented data type: %X\n",
-                       ACPI_GET_OBJECT_TYPE (obj_desc)));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unimplemented data type: %X\n",
+                                 ACPI_GET_OBJECT_TYPE(obj_desc)));
 
                status = AE_AML_OPERAND_TYPE;
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index ba13bca28bee94a27d4e26377c2abbf0b676dd7e..939d167bf87b81eda9041c995950ae5674c11352 100644 (file)
@@ -42,7 +42,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 #include <acpi/acevents.h>
 
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dsopcode")
+ACPI_MODULE_NAME("dsopcode")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ds_execute_arguments (
-       struct acpi_namespace_node      *node,
-       struct acpi_namespace_node      *scope_node,
-       u32                             aml_length,
-       u8                              *aml_start);
+acpi_ds_execute_arguments(struct acpi_namespace_node *node,
+                         struct acpi_namespace_node *scope_node,
+                         u32 aml_length, u8 * aml_start);
 
 static acpi_status
-acpi_ds_init_buffer_field (
-       u16                             aml_opcode,
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       *buffer_desc,
-       union acpi_operand_object       *offset_desc,
-       union acpi_operand_object       *length_desc,
-       union acpi_operand_object       *result_desc);
-
+acpi_ds_init_buffer_field(u16 aml_opcode,
+                         union acpi_operand_object *obj_desc,
+                         union acpi_operand_object *buffer_desc,
+                         union acpi_operand_object *offset_desc,
+                         union acpi_operand_object *length_desc,
+                         union acpi_operand_object *result_desc);
 
 /*******************************************************************************
  *
@@ -89,26 +83,22 @@ acpi_ds_init_buffer_field (
  ******************************************************************************/
 
 static acpi_status
-acpi_ds_execute_arguments (
-       struct acpi_namespace_node      *node,
-       struct acpi_namespace_node      *scope_node,
-       u32                             aml_length,
-       u8                              *aml_start)
+acpi_ds_execute_arguments(struct acpi_namespace_node *node,
+                         struct acpi_namespace_node *scope_node,
+                         u32 aml_length, u8 * aml_start)
 {
-       acpi_status                     status;
-       union acpi_parse_object         *op;
-       struct acpi_walk_state          *walk_state;
-
-
-       ACPI_FUNCTION_TRACE ("ds_execute_arguments");
+       acpi_status status;
+       union acpi_parse_object *op;
+       struct acpi_walk_state *walk_state;
 
+       ACPI_FUNCTION_TRACE("ds_execute_arguments");
 
        /*
         * Allocate a new parser op to be the root of the parsed tree
         */
-       op = acpi_ps_alloc_op (AML_INT_EVAL_SUBTREE_OP);
+       op = acpi_ps_alloc_op(AML_INT_EVAL_SUBTREE_OP);
        if (!op) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Save the Node for use in acpi_ps_parse_aml */
@@ -117,16 +107,17 @@ acpi_ds_execute_arguments (
 
        /* Create and initialize a new parser state */
 
-       walk_state = acpi_ds_create_walk_state (0, NULL, NULL, NULL);
+       walk_state = acpi_ds_create_walk_state(0, NULL, NULL, NULL);
        if (!walk_state) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               status = AE_NO_MEMORY;
+               goto cleanup;
        }
 
-       status = acpi_ds_init_aml_walk (walk_state, op, NULL, aml_start,
-                         aml_length, NULL, 1);
-       if (ACPI_FAILURE (status)) {
-               acpi_ds_delete_walk_state (walk_state);
-               return_ACPI_STATUS (status);
+       status = acpi_ds_init_aml_walk(walk_state, op, NULL, aml_start,
+                                      aml_length, NULL, 1);
+       if (ACPI_FAILURE(status)) {
+               acpi_ds_delete_walk_state(walk_state);
+               goto cleanup;
        }
 
        /* Mark this parse as a deferred opcode */
@@ -136,50 +127,51 @@ acpi_ds_execute_arguments (
 
        /* Pass1: Parse the entire declaration */
 
-       status = acpi_ps_parse_aml (walk_state);
-       if (ACPI_FAILURE (status)) {
-               acpi_ps_delete_parse_tree (op);
-               return_ACPI_STATUS (status);
+       status = acpi_ps_parse_aml(walk_state);
+       if (ACPI_FAILURE(status)) {
+               goto cleanup;
        }
 
        /* Get and init the Op created above */
 
        op->common.node = node;
-       acpi_ps_delete_parse_tree (op);
+       acpi_ps_delete_parse_tree(op);
 
        /* Evaluate the deferred arguments */
 
-       op = acpi_ps_alloc_op (AML_INT_EVAL_SUBTREE_OP);
+       op = acpi_ps_alloc_op(AML_INT_EVAL_SUBTREE_OP);
        if (!op) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        op->common.node = scope_node;
 
        /* Create and initialize a new parser state */
 
-       walk_state = acpi_ds_create_walk_state (0, NULL, NULL, NULL);
+       walk_state = acpi_ds_create_walk_state(0, NULL, NULL, NULL);
        if (!walk_state) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               status = AE_NO_MEMORY;
+               goto cleanup;
        }
 
        /* Execute the opcode and arguments */
 
-       status = acpi_ds_init_aml_walk (walk_state, op, NULL, aml_start,
-                         aml_length, NULL, 3);
-       if (ACPI_FAILURE (status)) {
-               acpi_ds_delete_walk_state (walk_state);
-               return_ACPI_STATUS (status);
+       status = acpi_ds_init_aml_walk(walk_state, op, NULL, aml_start,
+                                      aml_length, NULL, 3);
+       if (ACPI_FAILURE(status)) {
+               acpi_ds_delete_walk_state(walk_state);
+               goto cleanup;
        }
 
        /* Mark this execution as a deferred opcode */
 
        walk_state->deferred_node = node;
-       status = acpi_ps_parse_aml (walk_state);
-       acpi_ps_delete_parse_tree (op);
-       return_ACPI_STATUS (status);
-}
+       status = acpi_ps_parse_aml(walk_state);
 
+      cleanup:
+       acpi_ps_delete_parse_tree(op);
+       return_ACPI_STATUS(status);
+}
 
 /*******************************************************************************
  *
@@ -195,38 +187,36 @@ acpi_ds_execute_arguments (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_get_buffer_field_arguments (
-       union acpi_operand_object       *obj_desc)
+acpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc)
 {
-       union acpi_operand_object       *extra_desc;
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_get_buffer_field_arguments", obj_desc);
+       union acpi_operand_object *extra_desc;
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_get_buffer_field_arguments", obj_desc);
 
        if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Get the AML pointer (method object) and buffer_field node */
 
-       extra_desc = acpi_ns_get_secondary_object (obj_desc);
+       extra_desc = acpi_ns_get_secondary_object(obj_desc);
        node = obj_desc->buffer_field.node;
 
-       ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname (ACPI_TYPE_BUFFER_FIELD, node, NULL));
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] buffer_field Arg Init\n",
-               acpi_ut_get_node_name (node)));
+       ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
+                       (ACPI_TYPE_BUFFER_FIELD, node, NULL));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "[%4.4s] buffer_field Arg Init\n",
+                         acpi_ut_get_node_name(node)));
 
        /* Execute the AML code for the term_arg arguments */
 
-       status = acpi_ds_execute_arguments (node, acpi_ns_get_parent_node (node),
-                        extra_desc->extra.aml_length, extra_desc->extra.aml_start);
-       return_ACPI_STATUS (status);
+       status = acpi_ds_execute_arguments(node, acpi_ns_get_parent_node(node),
+                                          extra_desc->extra.aml_length,
+                                          extra_desc->extra.aml_start);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_get_buffer_arguments
@@ -240,40 +230,35 @@ acpi_ds_get_buffer_field_arguments (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ds_get_buffer_arguments (
-       union acpi_operand_object       *obj_desc)
+acpi_status acpi_ds_get_buffer_arguments(union acpi_operand_object *obj_desc)
 {
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_get_buffer_arguments", obj_desc);
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_get_buffer_arguments", obj_desc);
 
        if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Get the Buffer node */
 
        node = obj_desc->buffer.node;
        if (!node) {
-               ACPI_REPORT_ERROR ((
-                               "No pointer back to NS node in buffer obj %p\n", obj_desc));
-               return_ACPI_STATUS (AE_AML_INTERNAL);
+               ACPI_REPORT_ERROR(("No pointer back to NS node in buffer obj %p\n", obj_desc));
+               return_ACPI_STATUS(AE_AML_INTERNAL);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Buffer Arg Init\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Buffer Arg Init\n"));
 
        /* Execute the AML code for the term_arg arguments */
 
-       status = acpi_ds_execute_arguments (node, node,
-                        obj_desc->buffer.aml_length, obj_desc->buffer.aml_start);
-       return_ACPI_STATUS (status);
+       status = acpi_ds_execute_arguments(node, node,
+                                          obj_desc->buffer.aml_length,
+                                          obj_desc->buffer.aml_start);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_get_package_arguments
@@ -287,40 +272,36 @@ acpi_ds_get_buffer_arguments (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ds_get_package_arguments (
-       union acpi_operand_object       *obj_desc)
+acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc)
 {
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_get_package_arguments", obj_desc);
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_get_package_arguments", obj_desc);
 
        if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Get the Package node */
 
        node = obj_desc->package.node;
        if (!node) {
-               ACPI_REPORT_ERROR ((
-                               "No pointer back to NS node in package %p\n", obj_desc));
-               return_ACPI_STATUS (AE_AML_INTERNAL);
+               ACPI_REPORT_ERROR(("No pointer back to NS node in package %p\n",
+                                  obj_desc));
+               return_ACPI_STATUS(AE_AML_INTERNAL);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Package Arg Init\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Package Arg Init\n"));
 
        /* Execute the AML code for the term_arg arguments */
 
-       status = acpi_ds_execute_arguments (node, node,
-                        obj_desc->package.aml_length, obj_desc->package.aml_start);
-       return_ACPI_STATUS (status);
+       status = acpi_ds_execute_arguments(node, node,
+                                          obj_desc->package.aml_length,
+                                          obj_desc->package.aml_start);
+       return_ACPI_STATUS(status);
 }
 
-
 /*****************************************************************************
  *
  * FUNCTION:    acpi_ds_get_region_arguments
@@ -334,44 +315,43 @@ acpi_ds_get_package_arguments (
  *
  ****************************************************************************/
 
-acpi_status
-acpi_ds_get_region_arguments (
-       union acpi_operand_object       *obj_desc)
+acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *obj_desc)
 {
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-       union acpi_operand_object       *extra_desc;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_get_region_arguments", obj_desc);
+       struct acpi_namespace_node *node;
+       acpi_status status;
+       union acpi_operand_object *extra_desc;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_get_region_arguments", obj_desc);
 
        if (obj_desc->region.flags & AOPOBJ_DATA_VALID) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
-       extra_desc = acpi_ns_get_secondary_object (obj_desc);
+       extra_desc = acpi_ns_get_secondary_object(obj_desc);
        if (!extra_desc) {
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
        /* Get the Region node */
 
        node = obj_desc->region.node;
 
-       ACPI_DEBUG_EXEC (acpi_ut_display_init_pathname (ACPI_TYPE_REGION, node, NULL));
+       ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
+                       (ACPI_TYPE_REGION, node, NULL));
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s] op_region Arg Init at AML %p\n",
-               acpi_ut_get_node_name (node), extra_desc->extra.aml_start));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "[%4.4s] op_region Arg Init at AML %p\n",
+                         acpi_ut_get_node_name(node),
+                         extra_desc->extra.aml_start));
 
        /* Execute the argument AML */
 
-       status = acpi_ds_execute_arguments (node, acpi_ns_get_parent_node (node),
-                        extra_desc->extra.aml_length, extra_desc->extra.aml_start);
-       return_ACPI_STATUS (status);
+       status = acpi_ds_execute_arguments(node, acpi_ns_get_parent_node(node),
+                                          extra_desc->extra.aml_length,
+                                          extra_desc->extra.aml_start);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_initialize_region
@@ -384,23 +364,19 @@ acpi_ds_get_region_arguments (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ds_initialize_region (
-       acpi_handle                     obj_handle)
+acpi_status acpi_ds_initialize_region(acpi_handle obj_handle)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
-
-       obj_desc = acpi_ns_get_attached_object (obj_handle);
+       obj_desc = acpi_ns_get_attached_object(obj_handle);
 
        /* Namespace is NOT locked */
 
-       status = acpi_ev_initialize_region (obj_desc, FALSE);
+       status = acpi_ev_initialize_region(obj_desc, FALSE);
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_init_buffer_field
@@ -419,30 +395,27 @@ acpi_ds_initialize_region (
  ******************************************************************************/
 
 static acpi_status
-acpi_ds_init_buffer_field (
-       u16                             aml_opcode,
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       *buffer_desc,
-       union acpi_operand_object       *offset_desc,
-       union acpi_operand_object       *length_desc,
-       union acpi_operand_object       *result_desc)
+acpi_ds_init_buffer_field(u16 aml_opcode,
+                         union acpi_operand_object *obj_desc,
+                         union acpi_operand_object *buffer_desc,
+                         union acpi_operand_object *offset_desc,
+                         union acpi_operand_object *length_desc,
+                         union acpi_operand_object *result_desc)
 {
-       u32                             offset;
-       u32                             bit_offset;
-       u32                             bit_count;
-       u8                              field_flags;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_init_buffer_field", obj_desc);
+       u32 offset;
+       u32 bit_offset;
+       u32 bit_count;
+       u8 field_flags;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_init_buffer_field", obj_desc);
 
        /* Host object must be a Buffer */
 
-       if (ACPI_GET_OBJECT_TYPE (buffer_desc) != ACPI_TYPE_BUFFER) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Target of Create Field is not a Buffer object - %s\n",
-                       acpi_ut_get_object_type_name (buffer_desc)));
+       if (ACPI_GET_OBJECT_TYPE(buffer_desc) != ACPI_TYPE_BUFFER) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Target of Create Field is not a Buffer object - %s\n",
+                                 acpi_ut_get_object_type_name(buffer_desc)));
 
                status = AE_AML_OPERAND_TYPE;
                goto cleanup;
@@ -453,11 +426,11 @@ acpi_ds_init_buffer_field (
         * out as a name_string, and should therefore now be a NS node
         * after resolution in acpi_ex_resolve_operands().
         */
-       if (ACPI_GET_DESCRIPTOR_TYPE (result_desc) != ACPI_DESC_TYPE_NAMED) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "(%s) destination not a NS Node [%s]\n",
-                               acpi_ps_get_opcode_name (aml_opcode),
-                               acpi_ut_get_descriptor_name (result_desc)));
+       if (ACPI_GET_DESCRIPTOR_TYPE(result_desc) != ACPI_DESC_TYPE_NAMED) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "(%s) destination not a NS Node [%s]\n",
+                                 acpi_ps_get_opcode_name(aml_opcode),
+                                 acpi_ut_get_descriptor_name(result_desc)));
 
                status = AE_AML_OPERAND_TYPE;
                goto cleanup;
@@ -475,13 +448,13 @@ acpi_ds_init_buffer_field (
 
                field_flags = AML_FIELD_ACCESS_BYTE;
                bit_offset = offset;
-               bit_count  = (u32) length_desc->integer.value;
+               bit_count = (u32) length_desc->integer.value;
 
                /* Must have a valid (>0) bit count */
 
                if (bit_count == 0) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Attempt to create_field of length 0\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Attempt to create_field of length 0\n"));
                        status = AE_AML_OPERAND_VALUE;
                        goto cleanup;
                }
@@ -492,7 +465,7 @@ acpi_ds_init_buffer_field (
                /* Offset is in bits, Field is one bit */
 
                bit_offset = offset;
-               bit_count  = 1;
+               bit_count = 1;
                field_flags = AML_FIELD_ACCESS_BYTE;
                break;
 
@@ -501,7 +474,7 @@ acpi_ds_init_buffer_field (
                /* Offset is in bytes, field is one byte */
 
                bit_offset = 8 * offset;
-               bit_count  = 8;
+               bit_count = 8;
                field_flags = AML_FIELD_ACCESS_BYTE;
                break;
 
@@ -510,7 +483,7 @@ acpi_ds_init_buffer_field (
                /* Offset is in bytes, field is one word */
 
                bit_offset = 8 * offset;
-               bit_count  = 16;
+               bit_count = 16;
                field_flags = AML_FIELD_ACCESS_WORD;
                break;
 
@@ -519,7 +492,7 @@ acpi_ds_init_buffer_field (
                /* Offset is in bytes, field is one dword */
 
                bit_offset = 8 * offset;
-               bit_count  = 32;
+               bit_count = 32;
                field_flags = AML_FIELD_ACCESS_DWORD;
                break;
 
@@ -528,29 +501,29 @@ acpi_ds_init_buffer_field (
                /* Offset is in bytes, field is one qword */
 
                bit_offset = 8 * offset;
-               bit_count  = 64;
+               bit_count = 64;
                field_flags = AML_FIELD_ACCESS_QWORD;
                break;
 
        default:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Unknown field creation opcode %02x\n",
-                       aml_opcode));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unknown field creation opcode %02x\n",
+                                 aml_opcode));
                status = AE_AML_BAD_OPCODE;
                goto cleanup;
        }
 
        /* Entire field must fit within the current length of the buffer */
 
-       if ((bit_offset + bit_count) >
-               (8 * (u32) buffer_desc->buffer.length)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Field [%4.4s] size %d exceeds Buffer [%4.4s] size %d (bits)\n",
-                        acpi_ut_get_node_name (result_desc),
-                        bit_offset + bit_count,
-                        acpi_ut_get_node_name (buffer_desc->buffer.node),
-                        8 * (u32) buffer_desc->buffer.length));
+       if ((bit_offset + bit_count) > (8 * (u32) buffer_desc->buffer.length)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Field [%4.4s] size %d exceeds Buffer [%4.4s] size %d (bits)\n",
+                                 acpi_ut_get_node_name(result_desc),
+                                 bit_offset + bit_count,
+                                 acpi_ut_get_node_name(buffer_desc->buffer.
+                                                       node),
+                                 8 * (u32) buffer_desc->buffer.length));
                status = AE_AML_BUFFER_LIMIT;
                goto cleanup;
        }
@@ -560,9 +533,9 @@ acpi_ds_init_buffer_field (
         * For field_flags, use LOCK_RULE = 0 (NO_LOCK),
         * UPDATE_RULE = 0 (UPDATE_PRESERVE)
         */
-       status = acpi_ex_prep_common_field_object (obj_desc, field_flags, 0,
-                         bit_offset, bit_count);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ex_prep_common_field_object(obj_desc, field_flags, 0,
+                                                 bit_offset, bit_count);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
@@ -571,35 +544,33 @@ acpi_ds_init_buffer_field (
        /* Reference count for buffer_desc inherits obj_desc count */
 
        buffer_desc->common.reference_count = (u16)
-               (buffer_desc->common.reference_count + obj_desc->common.reference_count);
+           (buffer_desc->common.reference_count +
+            obj_desc->common.reference_count);
 
-
-cleanup:
+      cleanup:
 
        /* Always delete the operands */
 
-       acpi_ut_remove_reference (offset_desc);
-       acpi_ut_remove_reference (buffer_desc);
+       acpi_ut_remove_reference(offset_desc);
+       acpi_ut_remove_reference(buffer_desc);
 
        if (aml_opcode == AML_CREATE_FIELD_OP) {
-               acpi_ut_remove_reference (length_desc);
+               acpi_ut_remove_reference(length_desc);
        }
 
        /* On failure, delete the result descriptor */
 
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_remove_reference (result_desc); /* Result descriptor */
-       }
-       else {
+       if (ACPI_FAILURE(status)) {
+               acpi_ut_remove_reference(result_desc);  /* Result descriptor */
+       } else {
                /* Now the address and length are valid for this buffer_field */
 
                obj_desc->buffer_field.flags |= AOPOBJ_DATA_VALID;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_eval_buffer_field_operands
@@ -615,24 +586,21 @@ cleanup:
  ******************************************************************************/
 
 acpi_status
-acpi_ds_eval_buffer_field_operands (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op)
+acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state,
+                                  union acpi_parse_object *op)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-       struct acpi_namespace_node      *node;
-       union acpi_parse_object         *next_op;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_eval_buffer_field_operands", op);
+       acpi_status status;
+       union acpi_operand_object *obj_desc;
+       struct acpi_namespace_node *node;
+       union acpi_parse_object *next_op;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_eval_buffer_field_operands", op);
 
        /*
         * This is where we evaluate the address and length fields of the
         * create_xxx_field declaration
         */
-       node =  op->common.node;
+       node = op->common.node;
 
        /* next_op points to the op that holds the Buffer */
 
@@ -640,30 +608,32 @@ acpi_ds_eval_buffer_field_operands (
 
        /* Evaluate/create the address and length operands */
 
-       status = acpi_ds_create_operands (walk_state, next_op);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ds_create_operands(walk_state, next_op);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       obj_desc = acpi_ns_get_attached_object (node);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
        /* Resolve the operands */
 
-       status = acpi_ex_resolve_operands (op->common.aml_opcode,
-                         ACPI_WALK_OPERANDS, walk_state);
+       status = acpi_ex_resolve_operands(op->common.aml_opcode,
+                                         ACPI_WALK_OPERANDS, walk_state);
 
-       ACPI_DUMP_OPERANDS (ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE,
-                         acpi_ps_get_opcode_name (op->common.aml_opcode),
-                         walk_state->num_operands, "after acpi_ex_resolve_operands");
+       ACPI_DUMP_OPERANDS(ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE,
+                          acpi_ps_get_opcode_name(op->common.aml_opcode),
+                          walk_state->num_operands,
+                          "after acpi_ex_resolve_operands");
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "(%s) bad operand(s) (%X)\n",
-                       acpi_ps_get_opcode_name (op->common.aml_opcode), status));
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "(%s) bad operand(s) (%X)\n",
+                                 acpi_ps_get_opcode_name(op->common.
+                                                         aml_opcode), status));
 
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
        /* Initialize the Buffer Field */
@@ -671,22 +641,25 @@ acpi_ds_eval_buffer_field_operands (
        if (op->common.aml_opcode == AML_CREATE_FIELD_OP) {
                /* NOTE: Slightly different operands for this opcode */
 
-               status = acpi_ds_init_buffer_field (op->common.aml_opcode, obj_desc,
-                                walk_state->operands[0], walk_state->operands[1],
-                                walk_state->operands[2], walk_state->operands[3]);
-       }
-       else {
+               status =
+                   acpi_ds_init_buffer_field(op->common.aml_opcode, obj_desc,
+                                             walk_state->operands[0],
+                                             walk_state->operands[1],
+                                             walk_state->operands[2],
+                                             walk_state->operands[3]);
+       } else {
                /* All other, create_xxx_field opcodes */
 
-               status = acpi_ds_init_buffer_field (op->common.aml_opcode, obj_desc,
-                                walk_state->operands[0], walk_state->operands[1],
-                                                 NULL, walk_state->operands[2]);
+               status =
+                   acpi_ds_init_buffer_field(op->common.aml_opcode, obj_desc,
+                                             walk_state->operands[0],
+                                             walk_state->operands[1], NULL,
+                                             walk_state->operands[2]);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_eval_region_operands
@@ -702,25 +675,22 @@ acpi_ds_eval_buffer_field_operands (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_eval_region_operands (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op)
+acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
+                            union acpi_parse_object *op)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *operand_desc;
-       struct acpi_namespace_node      *node;
-       union acpi_parse_object         *next_op;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_eval_region_operands", op);
+       acpi_status status;
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *operand_desc;
+       struct acpi_namespace_node *node;
+       union acpi_parse_object *next_op;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_eval_region_operands", op);
 
        /*
         * This is where we evaluate the address and length fields of the
         * op_region declaration
         */
-       node =  op->common.node;
+       node = op->common.node;
 
        /* next_op points to the op that holds the space_iD */
 
@@ -732,26 +702,26 @@ acpi_ds_eval_region_operands (
 
        /* Evaluate/create the address and length operands */
 
-       status = acpi_ds_create_operands (walk_state, next_op);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ds_create_operands(walk_state, next_op);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Resolve the length and address operands to numbers */
 
-       status = acpi_ex_resolve_operands (op->common.aml_opcode,
-                        ACPI_WALK_OPERANDS, walk_state);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ex_resolve_operands(op->common.aml_opcode,
+                                         ACPI_WALK_OPERANDS, walk_state);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       ACPI_DUMP_OPERANDS (ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE,
-                         acpi_ps_get_opcode_name (op->common.aml_opcode),
-                         1, "after acpi_ex_resolve_operands");
+       ACPI_DUMP_OPERANDS(ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE,
+                          acpi_ps_get_opcode_name(op->common.aml_opcode),
+                          1, "after acpi_ex_resolve_operands");
 
-       obj_desc = acpi_ns_get_attached_object (node);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
        /*
@@ -761,7 +731,7 @@ acpi_ds_eval_region_operands (
        operand_desc = walk_state->operands[walk_state->num_operands - 1];
 
        obj_desc->region.length = (u32) operand_desc->integer.value;
-       acpi_ut_remove_reference (operand_desc);
+       acpi_ut_remove_reference(operand_desc);
 
        /*
         * Get the address and save it
@@ -770,22 +740,21 @@ acpi_ds_eval_region_operands (
        operand_desc = walk_state->operands[walk_state->num_operands - 2];
 
        obj_desc->region.address = (acpi_physical_address)
-                         operand_desc->integer.value;
-       acpi_ut_remove_reference (operand_desc);
+           operand_desc->integer.value;
+       acpi_ut_remove_reference(operand_desc);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "rgn_obj %p Addr %8.8X%8.8X Len %X\n",
-               obj_desc,
-               ACPI_FORMAT_UINT64 (obj_desc->region.address),
-               obj_desc->region.length));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "rgn_obj %p Addr %8.8X%8.8X Len %X\n",
+                         obj_desc,
+                         ACPI_FORMAT_UINT64(obj_desc->region.address),
+                         obj_desc->region.length));
 
        /* Now the address and length are valid for this opregion */
 
        obj_desc->region.flags |= AOPOBJ_DATA_VALID;
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_eval_data_object_operands
@@ -802,46 +771,44 @@ acpi_ds_eval_region_operands (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_eval_data_object_operands (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       union acpi_operand_object       *obj_desc)
+acpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state,
+                                 union acpi_parse_object *op,
+                                 union acpi_operand_object *obj_desc)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *arg_desc;
-       u32                             length;
-
-
-       ACPI_FUNCTION_TRACE ("ds_eval_data_object_operands");
+       acpi_status status;
+       union acpi_operand_object *arg_desc;
+       u32 length;
 
+       ACPI_FUNCTION_TRACE("ds_eval_data_object_operands");
 
        /* The first operand (for all of these data objects) is the length */
 
-       status = acpi_ds_create_operand (walk_state, op->common.value.arg, 1);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ds_create_operand(walk_state, op->common.value.arg, 1);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_ex_resolve_operands (walk_state->opcode,
-                         &(walk_state->operands [walk_state->num_operands -1]),
-                         walk_state);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ex_resolve_operands(walk_state->opcode,
+                                         &(walk_state->
+                                           operands[walk_state->num_operands -
+                                                    1]), walk_state);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Extract length operand */
 
-       arg_desc = walk_state->operands [walk_state->num_operands - 1];
+       arg_desc = walk_state->operands[walk_state->num_operands - 1];
        length = (u32) arg_desc->integer.value;
 
        /* Cleanup for length operand */
 
-       status = acpi_ds_obj_stack_pop (1, walk_state);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ds_obj_stack_pop(1, walk_state);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       acpi_ut_remove_reference (arg_desc);
+       acpi_ut_remove_reference(arg_desc);
 
        /*
         * Create the actual data object
@@ -849,37 +816,42 @@ acpi_ds_eval_data_object_operands (
        switch (op->common.aml_opcode) {
        case AML_BUFFER_OP:
 
-               status = acpi_ds_build_internal_buffer_obj (walk_state, op, length, &obj_desc);
+               status =
+                   acpi_ds_build_internal_buffer_obj(walk_state, op, length,
+                                                     &obj_desc);
                break;
 
        case AML_PACKAGE_OP:
        case AML_VAR_PACKAGE_OP:
 
-               status = acpi_ds_build_internal_package_obj (walk_state, op, length, &obj_desc);
+               status =
+                   acpi_ds_build_internal_package_obj(walk_state, op, length,
+                                                      &obj_desc);
                break;
 
        default:
-               return_ACPI_STATUS (AE_AML_BAD_OPCODE);
+               return_ACPI_STATUS(AE_AML_BAD_OPCODE);
        }
 
-       if (ACPI_SUCCESS (status)) {
+       if (ACPI_SUCCESS(status)) {
                /*
                 * Return the object in the walk_state, unless the parent is a package -
                 * in this case, the return object will be stored in the parse tree
                 * for the package.
                 */
                if ((!op->common.parent) ||
-                       ((op->common.parent->common.aml_opcode != AML_PACKAGE_OP) &&
-                        (op->common.parent->common.aml_opcode != AML_VAR_PACKAGE_OP) &&
-                        (op->common.parent->common.aml_opcode != AML_NAME_OP))) {
+                   ((op->common.parent->common.aml_opcode != AML_PACKAGE_OP) &&
+                    (op->common.parent->common.aml_opcode !=
+                     AML_VAR_PACKAGE_OP)
+                    && (op->common.parent->common.aml_opcode !=
+                        AML_NAME_OP))) {
                        walk_state->result_obj = obj_desc;
                }
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_exec_begin_control_op
@@ -895,19 +867,16 @@ acpi_ds_eval_data_object_operands (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_exec_begin_control_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op)
+acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state,
+                             union acpi_parse_object *op)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_generic_state        *control_state;
-
+       acpi_status status = AE_OK;
+       union acpi_generic_state *control_state;
 
-       ACPI_FUNCTION_NAME ("ds_exec_begin_control_op");
+       ACPI_FUNCTION_NAME("ds_exec_begin_control_op");
 
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p Opcode=%2.2X State=%p\n", op,
-               op->common.aml_opcode, walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p Opcode=%2.2X State=%p\n", op,
+                         op->common.aml_opcode, walk_state));
 
        switch (op->common.aml_opcode) {
        case AML_IF_OP:
@@ -918,7 +887,7 @@ acpi_ds_exec_begin_control_op (
                 * constructs. We need to manage these as a stack, in order
                 * to handle nesting.
                 */
-               control_state = acpi_ut_create_control_state ();
+               control_state = acpi_ut_create_control_state();
                if (!control_state) {
                        status = AE_NO_MEMORY;
                        break;
@@ -927,14 +896,16 @@ acpi_ds_exec_begin_control_op (
                 * Save a pointer to the predicate for multiple executions
                 * of a loop
                 */
-               control_state->control.aml_predicate_start = walk_state->parser_state.aml - 1;
-               control_state->control.package_end = walk_state->parser_state.pkg_end;
+               control_state->control.aml_predicate_start =
+                   walk_state->parser_state.aml - 1;
+               control_state->control.package_end =
+                   walk_state->parser_state.pkg_end;
                control_state->control.opcode = op->common.aml_opcode;
 
-
                /* Push the control state on this walk's control stack */
 
-               acpi_ut_push_generic_state (&walk_state->control_state, control_state);
+               acpi_ut_push_generic_state(&walk_state->control_state,
+                                          control_state);
                break;
 
        case AML_ELSE_OP:
@@ -959,7 +930,6 @@ acpi_ds_exec_begin_control_op (
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_exec_end_control_op
@@ -975,46 +945,42 @@ acpi_ds_exec_begin_control_op (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_exec_end_control_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op)
+acpi_ds_exec_end_control_op(struct acpi_walk_state * walk_state,
+                           union acpi_parse_object * op)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_generic_state        *control_state;
-
-
-       ACPI_FUNCTION_NAME ("ds_exec_end_control_op");
+       acpi_status status = AE_OK;
+       union acpi_generic_state *control_state;
 
+       ACPI_FUNCTION_NAME("ds_exec_end_control_op");
 
        switch (op->common.aml_opcode) {
        case AML_IF_OP:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[IF_OP] Op=%p\n", op));
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "[IF_OP] Op=%p\n", op));
 
                /*
                 * Save the result of the predicate in case there is an
                 * ELSE to come
                 */
                walk_state->last_predicate =
-                       (u8) walk_state->control_state->common.value;
+                   (u8) walk_state->control_state->common.value;
 
                /*
                 * Pop the control state that was created at the start
                 * of the IF and free it
                 */
-               control_state = acpi_ut_pop_generic_state (&walk_state->control_state);
-               acpi_ut_delete_generic_state (control_state);
+               control_state =
+                   acpi_ut_pop_generic_state(&walk_state->control_state);
+               acpi_ut_delete_generic_state(control_state);
                break;
 
-
        case AML_ELSE_OP:
 
                break;
 
-
        case AML_WHILE_OP:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[WHILE_OP] Op=%p\n", op));
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "[WHILE_OP] Op=%p\n", op));
 
                if (walk_state->control_state->common.value) {
                        /* Predicate was true, go back and evaluate it again! */
@@ -1022,22 +988,24 @@ acpi_ds_exec_end_control_op (
                        status = AE_CTRL_PENDING;
                }
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                       "[WHILE_OP] termination! Op=%p\n",op));
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "[WHILE_OP] termination! Op=%p\n", op));
 
                /* Pop this control state and free it */
 
-               control_state = acpi_ut_pop_generic_state (&walk_state->control_state);
+               control_state =
+                   acpi_ut_pop_generic_state(&walk_state->control_state);
 
-               walk_state->aml_last_while = control_state->control.aml_predicate_start;
-               acpi_ut_delete_generic_state (control_state);
+               walk_state->aml_last_while =
+                   control_state->control.aml_predicate_start;
+               acpi_ut_delete_generic_state(control_state);
                break;
 
-
        case AML_RETURN_OP:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                       "[RETURN_OP] Op=%p Arg=%p\n",op, op->common.value.arg));
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "[RETURN_OP] Op=%p Arg=%p\n", op,
+                                 op->common.value.arg));
 
                /*
                 * One optional operand -- the return value
@@ -1047,12 +1015,14 @@ acpi_ds_exec_end_control_op (
                if (op->common.value.arg) {
                        /* Since we have a real Return(), delete any implicit return */
 
-                       acpi_ds_clear_implicit_return (walk_state);
+                       acpi_ds_clear_implicit_return(walk_state);
 
                        /* Return statement has an immediate operand */
 
-                       status = acpi_ds_create_operands (walk_state, op->common.value.arg);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_ds_create_operands(walk_state,
+                                                   op->common.value.arg);
+                       if (ACPI_FAILURE(status)) {
                                return (status);
                        }
 
@@ -1061,8 +1031,10 @@ acpi_ds_exec_end_control_op (
                         * an arg or local), resolve it now because it may
                         * cease to exist at the end of the method.
                         */
-                       status = acpi_ex_resolve_to_value (&walk_state->operands [0], walk_state);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_ex_resolve_to_value(&walk_state->operands[0],
+                                                    walk_state);
+                       if (ACPI_FAILURE(status)) {
                                return (status);
                        }
 
@@ -1072,12 +1044,11 @@ acpi_ds_exec_end_control_op (
                         * is set to anything other than zero!
                         */
                        walk_state->return_desc = walk_state->operands[0];
-               }
-               else if ((walk_state->results) &&
-                                (walk_state->results->results.num_results > 0)) {
+               } else if ((walk_state->results) &&
+                          (walk_state->results->results.num_results > 0)) {
                        /* Since we have a real Return(), delete any implicit return */
 
-                       acpi_ds_clear_implicit_return (walk_state);
+                       acpi_ds_clear_implicit_return(walk_state);
 
                        /*
                         * The return value has come from a previous calculation.
@@ -1088,67 +1059,78 @@ acpi_ds_exec_end_control_op (
                         *
                         * Allow references created by the Index operator to return unchanged.
                         */
-                       if ((ACPI_GET_DESCRIPTOR_TYPE (walk_state->results->results.obj_desc[0]) == ACPI_DESC_TYPE_OPERAND) &&
-                               (ACPI_GET_OBJECT_TYPE (walk_state->results->results.obj_desc [0]) == ACPI_TYPE_LOCAL_REFERENCE) &&
-                               ((walk_state->results->results.obj_desc [0])->reference.opcode != AML_INDEX_OP)) {
-                               status = acpi_ex_resolve_to_value (&walk_state->results->results.obj_desc [0], walk_state);
-                               if (ACPI_FAILURE (status)) {
+                       if ((ACPI_GET_DESCRIPTOR_TYPE
+                            (walk_state->results->results.obj_desc[0]) ==
+                            ACPI_DESC_TYPE_OPERAND)
+                           &&
+                           (ACPI_GET_OBJECT_TYPE
+                            (walk_state->results->results.obj_desc[0]) ==
+                            ACPI_TYPE_LOCAL_REFERENCE)
+                           && ((walk_state->results->results.obj_desc[0])->
+                               reference.opcode != AML_INDEX_OP)) {
+                               status =
+                                   acpi_ex_resolve_to_value(&walk_state->
+                                                            results->results.
+                                                            obj_desc[0],
+                                                            walk_state);
+                               if (ACPI_FAILURE(status)) {
                                        return (status);
                                }
                        }
 
-                       walk_state->return_desc = walk_state->results->results.obj_desc [0];
-               }
-               else {
+                       walk_state->return_desc =
+                           walk_state->results->results.obj_desc[0];
+               else {
                        /* No return operand */
 
                        if (walk_state->num_operands) {
-                               acpi_ut_remove_reference (walk_state->operands [0]);
+                               acpi_ut_remove_reference(walk_state->
+                                                        operands[0]);
                        }
 
-                       walk_state->operands [0]    = NULL;
-                       walk_state->num_operands    = 0;
-                       walk_state->return_desc     = NULL;
+                       walk_state->operands[0] = NULL;
+                       walk_state->num_operands = 0;
+                       walk_state->return_desc = NULL;
                }
 
-
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                       "Completed RETURN_OP State=%p, ret_val=%p\n",
-                       walk_state, walk_state->return_desc));
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "Completed RETURN_OP State=%p, ret_val=%p\n",
+                                 walk_state, walk_state->return_desc));
 
                /* End the control method execution right now */
 
                status = AE_CTRL_TERMINATE;
                break;
 
-
        case AML_NOOP_OP:
 
                /* Just do nothing! */
                break;
 
-
        case AML_BREAK_POINT_OP:
 
                /* Call up to the OS service layer to handle this */
 
-               status = acpi_os_signal (ACPI_SIGNAL_BREAKPOINT, "Executed AML Breakpoint opcode");
+               status =
+                   acpi_os_signal(ACPI_SIGNAL_BREAKPOINT,
+                                  "Executed AML Breakpoint opcode");
 
                /* If and when it returns, all done. */
 
                break;
 
-
        case AML_BREAK_OP:
-       case AML_CONTINUE_OP: /* ACPI 2.0 */
-
+       case AML_CONTINUE_OP:   /* ACPI 2.0 */
 
                /* Pop and delete control states until we find a while */
 
                while (walk_state->control_state &&
-                               (walk_state->control_state->control.opcode != AML_WHILE_OP)) {
-                       control_state = acpi_ut_pop_generic_state (&walk_state->control_state);
-                       acpi_ut_delete_generic_state (control_state);
+                      (walk_state->control_state->control.opcode !=
+                       AML_WHILE_OP)) {
+                       control_state =
+                           acpi_ut_pop_generic_state(&walk_state->
+                                                     control_state);
+                       acpi_ut_delete_generic_state(control_state);
                }
 
                /* No while found? */
@@ -1159,23 +1141,23 @@ acpi_ds_exec_end_control_op (
 
                /* Was: walk_state->aml_last_while = walk_state->control_state->Control.aml_predicate_start; */
 
-               walk_state->aml_last_while = walk_state->control_state->control.package_end;
+               walk_state->aml_last_while =
+                   walk_state->control_state->control.package_end;
 
                /* Return status depending on opcode */
 
                if (op->common.aml_opcode == AML_BREAK_OP) {
                        status = AE_CTRL_BREAK;
-               }
-               else {
+               } else {
                        status = AE_CTRL_CONTINUE;
                }
                break;
 
-
        default:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown control opcode=%X Op=%p\n",
-                       op->common.aml_opcode, op));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unknown control opcode=%X Op=%p\n",
+                                 op->common.aml_opcode, op));
 
                status = AE_AML_BAD_OPCODE;
                break;
@@ -1183,4 +1165,3 @@ acpi_ds_exec_end_control_op (
 
        return (status);
 }
-
index 9613349ac31d1cdec063a1f1e1b120c354dc610d..83ae1c1aa28668ff8b931ac4e0837233b9a7901e 100644 (file)
@@ -41,7 +41,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
@@ -51,8 +50,7 @@
 #include <acpi/acdebug.h>
 
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dsutils")
-
+ACPI_MODULE_NAME("dsutils")
 
 /*******************************************************************************
  *
  *              parent method exits.)
  *
  ******************************************************************************/
-
-void
-acpi_ds_clear_implicit_return (
-       struct acpi_walk_state          *walk_state)
+void acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state)
 {
-       ACPI_FUNCTION_NAME ("ds_clear_implicit_return");
-
+       ACPI_FUNCTION_NAME("ds_clear_implicit_return");
 
        /*
         * Slack must be enabled for this feature
@@ -89,16 +83,15 @@ acpi_ds_clear_implicit_return (
                 * complex statements, the implicit return value can be
                 * bubbled up several levels.
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                       "Removing reference on stale implicit return obj %p\n",
-                       walk_state->implicit_return_obj));
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "Removing reference on stale implicit return obj %p\n",
+                                 walk_state->implicit_return_obj));
 
-               acpi_ut_remove_reference (walk_state->implicit_return_obj);
+               acpi_ut_remove_reference(walk_state->implicit_return_obj);
                walk_state->implicit_return_obj = NULL;
        }
 }
 
-
 #ifndef ACPI_NO_METHOD_EXECUTION
 /*******************************************************************************
  *
@@ -119,27 +112,22 @@ acpi_ds_clear_implicit_return (
  ******************************************************************************/
 
 u8
-acpi_ds_do_implicit_return (
-       union acpi_operand_object       *return_desc,
-       struct acpi_walk_state          *walk_state,
-       u8                              add_reference)
+acpi_ds_do_implicit_return(union acpi_operand_object *return_desc,
+                          struct acpi_walk_state *walk_state, u8 add_reference)
 {
-       ACPI_FUNCTION_NAME ("ds_do_implicit_return");
-
+       ACPI_FUNCTION_NAME("ds_do_implicit_return");
 
        /*
         * Slack must be enabled for this feature, and we must
         * have a valid return object
         */
-       if ((!acpi_gbl_enable_interpreter_slack) ||
-               (!return_desc)) {
+       if ((!acpi_gbl_enable_interpreter_slack) || (!return_desc)) {
                return (FALSE);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                       "Result %p will be implicitly returned; Prev=%p\n",
-                       return_desc,
-                       walk_state->implicit_return_obj));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "Result %p will be implicitly returned; Prev=%p\n",
+                         return_desc, walk_state->implicit_return_obj));
 
        /*
         * Delete any "stale" implicit return value first. However, in
@@ -151,20 +139,19 @@ acpi_ds_do_implicit_return (
                if (walk_state->implicit_return_obj == return_desc) {
                        return (TRUE);
                }
-               acpi_ds_clear_implicit_return (walk_state);
+               acpi_ds_clear_implicit_return(walk_state);
        }
 
        /* Save the implicit return value, add a reference if requested */
 
        walk_state->implicit_return_obj = return_desc;
        if (add_reference) {
-               acpi_ut_add_reference (return_desc);
+               acpi_ut_add_reference(return_desc);
        }
 
        return (TRUE);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_is_result_used
@@ -179,20 +166,18 @@ acpi_ds_do_implicit_return (
  ******************************************************************************/
 
 u8
-acpi_ds_is_result_used (
-       union acpi_parse_object         *op,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_is_result_used(union acpi_parse_object * op,
+                      struct acpi_walk_state * walk_state)
 {
-       const struct acpi_opcode_info   *parent_info;
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_is_result_used", op);
+       const struct acpi_opcode_info *parent_info;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_is_result_used", op);
 
        /* Must have both an Op and a Result Object */
 
        if (!op) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null Op\n"));
-               return_VALUE (TRUE);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Null Op\n"));
+               return_VALUE(TRUE);
        }
 
        /*
@@ -204,7 +189,8 @@ acpi_ds_is_result_used (
         * NOTE: this is optional because the ASL language does not actually
         * support this behavior.
         */
-       (void) acpi_ds_do_implicit_return (walk_state->result_obj, walk_state, TRUE);
+       (void)acpi_ds_do_implicit_return(walk_state->result_obj, walk_state,
+                                        TRUE);
 
        /*
         * Now determine if the parent will use the result
@@ -215,22 +201,24 @@ acpi_ds_is_result_used (
         * via execute_control_method has a scope_op as the parent.
         */
        if ((!op->common.parent) ||
-               (op->common.parent->common.aml_opcode == AML_SCOPE_OP)) {
+           (op->common.parent->common.aml_opcode == AML_SCOPE_OP)) {
                /* No parent, the return value cannot possibly be used */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                       "At Method level, result of [%s] not used\n",
-                       acpi_ps_get_opcode_name (op->common.aml_opcode)));
-               return_VALUE (FALSE);
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "At Method level, result of [%s] not used\n",
+                                 acpi_ps_get_opcode_name(op->common.
+                                                         aml_opcode)));
+               return_VALUE(FALSE);
        }
 
        /* Get info on the parent. The root_op is AML_SCOPE */
 
-       parent_info = acpi_ps_get_opcode_info (op->common.parent->common.aml_opcode);
+       parent_info =
+           acpi_ps_get_opcode_info(op->common.parent->common.aml_opcode);
        if (parent_info->class == AML_CLASS_UNKNOWN) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Unknown parent opcode. Op=%p\n", op));
-               return_VALUE (FALSE);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unknown parent opcode. Op=%p\n", op));
+               return_VALUE(FALSE);
        }
 
        /*
@@ -256,8 +244,10 @@ acpi_ds_is_result_used (
                         * If we are executing the predicate AND this is the predicate op,
                         * we will use the return value
                         */
-                       if ((walk_state->control_state->common.state == ACPI_CONTROL_PREDICATE_EXECUTING) &&
-                               (walk_state->control_state->control.predicate_op == op)) {
+                       if ((walk_state->control_state->common.state ==
+                            ACPI_CONTROL_PREDICATE_EXECUTING)
+                           && (walk_state->control_state->control.
+                               predicate_op == op)) {
                                goto result_used;
                        }
                        break;
@@ -271,7 +261,6 @@ acpi_ds_is_result_used (
 
                goto result_not_used;
 
-
        case AML_CLASS_CREATE:
 
                /*
@@ -280,15 +269,16 @@ acpi_ds_is_result_used (
                 */
                goto result_used;
 
-
        case AML_CLASS_NAMED_OBJECT:
 
-               if ((op->common.parent->common.aml_opcode == AML_REGION_OP)      ||
-                       (op->common.parent->common.aml_opcode == AML_DATA_REGION_OP) ||
-                       (op->common.parent->common.aml_opcode == AML_PACKAGE_OP)     ||
-                       (op->common.parent->common.aml_opcode == AML_VAR_PACKAGE_OP) ||
-                       (op->common.parent->common.aml_opcode == AML_BUFFER_OP)      ||
-                       (op->common.parent->common.aml_opcode == AML_INT_EVAL_SUBTREE_OP)) {
+               if ((op->common.parent->common.aml_opcode == AML_REGION_OP) ||
+                   (op->common.parent->common.aml_opcode == AML_DATA_REGION_OP)
+                   || (op->common.parent->common.aml_opcode == AML_PACKAGE_OP)
+                   || (op->common.parent->common.aml_opcode ==
+                       AML_VAR_PACKAGE_OP)
+                   || (op->common.parent->common.aml_opcode == AML_BUFFER_OP)
+                   || (op->common.parent->common.aml_opcode ==
+                       AML_INT_EVAL_SUBTREE_OP)) {
                        /*
                         * These opcodes allow term_arg(s) as operands and therefore
                         * the operands can be method calls.  The result is used.
@@ -298,7 +288,6 @@ acpi_ds_is_result_used (
 
                goto result_not_used;
 
-
        default:
 
                /*
@@ -308,26 +297,25 @@ acpi_ds_is_result_used (
                goto result_used;
        }
 
+      result_used:
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "Result of [%s] used by Parent [%s] Op=%p\n",
+                         acpi_ps_get_opcode_name(op->common.aml_opcode),
+                         acpi_ps_get_opcode_name(op->common.parent->common.
+                                                 aml_opcode), op));
 
-result_used:
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "Result of [%s] used by Parent [%s] Op=%p\n",
-               acpi_ps_get_opcode_name (op->common.aml_opcode),
-               acpi_ps_get_opcode_name (op->common.parent->common.aml_opcode), op));
-
-       return_VALUE (TRUE);
-
+       return_VALUE(TRUE);
 
-result_not_used:
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "Result of [%s] not used by Parent [%s] Op=%p\n",
-               acpi_ps_get_opcode_name (op->common.aml_opcode),
-               acpi_ps_get_opcode_name (op->common.parent->common.aml_opcode), op));
+      result_not_used:
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "Result of [%s] not used by Parent [%s] Op=%p\n",
+                         acpi_ps_get_opcode_name(op->common.aml_opcode),
+                         acpi_ps_get_opcode_name(op->common.parent->common.
+                                                 aml_opcode), op));
 
-       return_VALUE (FALSE);
+       return_VALUE(FALSE);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_delete_result_if_not_used
@@ -346,20 +334,17 @@ result_not_used:
  ******************************************************************************/
 
 void
-acpi_ds_delete_result_if_not_used (
-       union acpi_parse_object         *op,
-       union acpi_operand_object       *result_obj,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_delete_result_if_not_used(union acpi_parse_object *op,
+                                 union acpi_operand_object *result_obj,
+                                 struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_delete_result_if_not_used", result_obj);
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_delete_result_if_not_used", result_obj);
 
        if (!op) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null Op\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Null Op\n"));
                return_VOID;
        }
 
@@ -367,19 +352,18 @@ acpi_ds_delete_result_if_not_used (
                return_VOID;
        }
 
-       if (!acpi_ds_is_result_used (op, walk_state)) {
+       if (!acpi_ds_is_result_used(op, walk_state)) {
                /* Must pop the result stack (obj_desc should be equal to result_obj) */
 
-               status = acpi_ds_result_pop (&obj_desc, walk_state);
-               if (ACPI_SUCCESS (status)) {
-                       acpi_ut_remove_reference (result_obj);
+               status = acpi_ds_result_pop(&obj_desc, walk_state);
+               if (ACPI_SUCCESS(status)) {
+                       acpi_ut_remove_reference(result_obj);
                }
        }
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_resolve_operands
@@ -394,16 +378,12 @@ acpi_ds_delete_result_if_not_used (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ds_resolve_operands (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ds_resolve_operands(struct acpi_walk_state *walk_state)
 {
-       u32                             i;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_resolve_operands", walk_state);
+       u32 i;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_resolve_operands", walk_state);
 
        /*
         * Attempt to resolve each of the valid operands
@@ -411,16 +391,17 @@ acpi_ds_resolve_operands (
         * that the actual objects are passed, not copies of the objects.
         */
        for (i = 0; i < walk_state->num_operands; i++) {
-               status = acpi_ex_resolve_to_value (&walk_state->operands[i], walk_state);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_ex_resolve_to_value(&walk_state->operands[i],
+                                            walk_state);
+               if (ACPI_FAILURE(status)) {
                        break;
                }
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_clear_operands
@@ -433,15 +414,11 @@ acpi_ds_resolve_operands (
  *
  ******************************************************************************/
 
-void
-acpi_ds_clear_operands (
-       struct acpi_walk_state          *walk_state)
+void acpi_ds_clear_operands(struct acpi_walk_state *walk_state)
 {
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_clear_operands", walk_state);
+       u32 i;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_clear_operands", walk_state);
 
        /* Remove a reference on each operand on the stack */
 
@@ -450,7 +427,7 @@ acpi_ds_clear_operands (
                 * Remove a reference to all operands, including both
                 * "Arguments" and "Targets".
                 */
-               acpi_ut_remove_reference (walk_state->operands[i]);
+               acpi_ut_remove_reference(walk_state->operands[i]);
                walk_state->operands[i] = NULL;
        }
 
@@ -459,7 +436,6 @@ acpi_ds_clear_operands (
 }
 #endif
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_create_operand
@@ -478,37 +454,36 @@ acpi_ds_clear_operands (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_create_operand (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *arg,
-       u32                             arg_index)
+acpi_ds_create_operand(struct acpi_walk_state *walk_state,
+                      union acpi_parse_object *arg, u32 arg_index)
 {
-       acpi_status                     status = AE_OK;
-       char                            *name_string;
-       u32                             name_length;
-       union acpi_operand_object       *obj_desc;
-       union acpi_parse_object         *parent_op;
-       u16                             opcode;
-       acpi_interpreter_mode           interpreter_mode;
-       const struct acpi_opcode_info   *op_info;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_create_operand", arg);
+       acpi_status status = AE_OK;
+       char *name_string;
+       u32 name_length;
+       union acpi_operand_object *obj_desc;
+       union acpi_parse_object *parent_op;
+       u16 opcode;
+       acpi_interpreter_mode interpreter_mode;
+       const struct acpi_opcode_info *op_info;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_create_operand", arg);
 
        /* A valid name must be looked up in the namespace */
 
        if ((arg->common.aml_opcode == AML_INT_NAMEPATH_OP) &&
-               (arg->common.value.string)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Getting a name: Arg=%p\n", arg));
+           (arg->common.value.string)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Getting a name: Arg=%p\n",
+                                 arg));
 
                /* Get the entire name string from the AML stream */
 
-               status = acpi_ex_get_name_string (ACPI_TYPE_ANY, arg->common.value.buffer,
-                                 &name_string, &name_length);
+               status =
+                   acpi_ex_get_name_string(ACPI_TYPE_ANY,
+                                           arg->common.value.buffer,
+                                           &name_string, &name_length);
 
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /* All prefixes have been handled, and the name is in name_string */
@@ -523,13 +498,14 @@ acpi_ds_create_operand (
                 * actual opcode exists.
                 */
                if ((walk_state->deferred_node) &&
-                       (walk_state->deferred_node->type == ACPI_TYPE_BUFFER_FIELD) &&
-                       (arg_index != 0)) {
-                       obj_desc = ACPI_CAST_PTR (
-                                        union acpi_operand_object, walk_state->deferred_node);
+                   (walk_state->deferred_node->type == ACPI_TYPE_BUFFER_FIELD)
+                   && (arg_index != 0)) {
+                       obj_desc =
+                           ACPI_CAST_PTR(union acpi_operand_object,
+                                         walk_state->deferred_node);
                        status = AE_OK;
-               }
-               else    /* All other opcodes */ {
+               } else {        /* All other opcodes */
+
                        /*
                         * Differentiate between a namespace "create" operation
                         * versus a "lookup" operation (IMODE_LOAD_PASS2 vs.
@@ -537,43 +513,51 @@ acpi_ds_create_operand (
                         * namespace objects during the execution of control methods.
                         */
                        parent_op = arg->common.parent;
-                       op_info = acpi_ps_get_opcode_info (parent_op->common.aml_opcode);
-                       if ((op_info->flags & AML_NSNODE) &&
-                               (parent_op->common.aml_opcode != AML_INT_METHODCALL_OP) &&
-                               (parent_op->common.aml_opcode != AML_REGION_OP) &&
-                               (parent_op->common.aml_opcode != AML_INT_NAMEPATH_OP)) {
+                       op_info =
+                           acpi_ps_get_opcode_info(parent_op->common.
+                                                   aml_opcode);
+                       if ((op_info->flags & AML_NSNODE)
+                           && (parent_op->common.aml_opcode !=
+                               AML_INT_METHODCALL_OP)
+                           && (parent_op->common.aml_opcode != AML_REGION_OP)
+                           && (parent_op->common.aml_opcode !=
+                               AML_INT_NAMEPATH_OP)) {
                                /* Enter name into namespace if not found */
 
                                interpreter_mode = ACPI_IMODE_LOAD_PASS2;
-                       }
-                       else {
+                       } else {
                                /* Return a failure if name not found */
 
                                interpreter_mode = ACPI_IMODE_EXECUTE;
                        }
 
-                       status = acpi_ns_lookup (walk_state->scope_info, name_string,
-                                        ACPI_TYPE_ANY, interpreter_mode,
-                                        ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
-                                        walk_state,
-                                        ACPI_CAST_INDIRECT_PTR (struct acpi_namespace_node, &obj_desc));
+                       status =
+                           acpi_ns_lookup(walk_state->scope_info, name_string,
+                                          ACPI_TYPE_ANY, interpreter_mode,
+                                          ACPI_NS_SEARCH_PARENT |
+                                          ACPI_NS_DONT_OPEN_SCOPE, walk_state,
+                                          ACPI_CAST_INDIRECT_PTR(struct
+                                                                 acpi_namespace_node,
+                                                                 &obj_desc));
                        /*
                         * The only case where we pass through (ignore) a NOT_FOUND
                         * error is for the cond_ref_of opcode.
                         */
                        if (status == AE_NOT_FOUND) {
-                               if (parent_op->common.aml_opcode == AML_COND_REF_OF_OP) {
+                               if (parent_op->common.aml_opcode ==
+                                   AML_COND_REF_OF_OP) {
                                        /*
                                         * For the Conditional Reference op, it's OK if
                                         * the name is not found;  We just need a way to
                                         * indicate this to the interpreter, set the
                                         * object to the root
                                         */
-                                       obj_desc = ACPI_CAST_PTR (
-                                                        union acpi_operand_object, acpi_gbl_root_node);
+                                       obj_desc =
+                                           ACPI_CAST_PTR(union
+                                                         acpi_operand_object,
+                                                         acpi_gbl_root_node);
                                        status = AE_OK;
-                               }
-                               else {
+                               } else {
                                        /*
                                         * We just plain didn't find it -- which is a
                                         * very serious error at this point
@@ -582,30 +566,30 @@ acpi_ds_create_operand (
                                }
                        }
 
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_REPORT_NSERROR (name_string, status);
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_REPORT_NSERROR(name_string, status);
                        }
                }
 
                /* Free the namestring created above */
 
-               ACPI_MEM_FREE (name_string);
+               ACPI_MEM_FREE(name_string);
 
                /* Check status from the lookup */
 
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /* Put the resulting object onto the current object stack */
 
-               status = acpi_ds_obj_stack_push (obj_desc, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ds_obj_stack_push(obj_desc, walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
-               ACPI_DEBUGGER_EXEC (acpi_db_display_argument_object (obj_desc, walk_state));
-       }
-       else {
+               ACPI_DEBUGGER_EXEC(acpi_db_display_argument_object
+                                  (obj_desc, walk_state));
+       else {
                /* Check for null name case */
 
                if (arg->common.aml_opcode == AML_INT_NAMEPATH_OP) {
@@ -615,77 +599,83 @@ acpi_ds_create_operand (
                         * in the original ASL.  Create a Zero Constant for a
                         * placeholder.  (Store to a constant is a Noop.)
                         */
-                       opcode = AML_ZERO_OP;       /* Has no arguments! */
+                       opcode = AML_ZERO_OP;   /* Has no arguments! */
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                               "Null namepath: Arg=%p\n", arg));
-               }
-               else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                         "Null namepath: Arg=%p\n", arg));
+               } else {
                        opcode = arg->common.aml_opcode;
                }
 
                /* Get the object type of the argument */
 
-               op_info = acpi_ps_get_opcode_info (opcode);
+               op_info = acpi_ps_get_opcode_info(opcode);
                if (op_info->object_type == ACPI_TYPE_INVALID) {
-                       return_ACPI_STATUS (AE_NOT_IMPLEMENTED);
+                       return_ACPI_STATUS(AE_NOT_IMPLEMENTED);
                }
 
                if (op_info->flags & AML_HAS_RETVAL) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                               "Argument previously created, already stacked \n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                         "Argument previously created, already stacked \n"));
 
-                       ACPI_DEBUGGER_EXEC (acpi_db_display_argument_object (
-                               walk_state->operands [walk_state->num_operands - 1], walk_state));
+                       ACPI_DEBUGGER_EXEC(acpi_db_display_argument_object
+                                          (walk_state->
+                                           operands[walk_state->num_operands -
+                                                    1], walk_state));
 
                        /*
                         * Use value that was already previously returned
                         * by the evaluation of this argument
                         */
-                       status = acpi_ds_result_pop_from_bottom (&obj_desc, walk_state);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_ds_result_pop_from_bottom(&obj_desc,
+                                                          walk_state);
+                       if (ACPI_FAILURE(status)) {
                                /*
                                 * Only error is underflow, and this indicates
                                 * a missing or null operand!
                                 */
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Missing or null operand, %s\n",
-                                       acpi_format_exception (status)));
-                               return_ACPI_STATUS (status);
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Missing or null operand, %s\n",
+                                                 acpi_format_exception
+                                                 (status)));
+                               return_ACPI_STATUS(status);
                        }
-               }
-               else {
+               } else {
                        /* Create an ACPI_INTERNAL_OBJECT for the argument */
 
-                       obj_desc = acpi_ut_create_internal_object (op_info->object_type);
+                       obj_desc =
+                           acpi_ut_create_internal_object(op_info->
+                                                          object_type);
                        if (!obj_desc) {
-                               return_ACPI_STATUS (AE_NO_MEMORY);
+                               return_ACPI_STATUS(AE_NO_MEMORY);
                        }
 
                        /* Initialize the new object */
 
-                       status = acpi_ds_init_object_from_op (
-                                        walk_state, arg, opcode, &obj_desc);
-                       if (ACPI_FAILURE (status)) {
-                               acpi_ut_delete_object_desc (obj_desc);
-                               return_ACPI_STATUS (status);
+                       status =
+                           acpi_ds_init_object_from_op(walk_state, arg, opcode,
+                                                       &obj_desc);
+                       if (ACPI_FAILURE(status)) {
+                               acpi_ut_delete_object_desc(obj_desc);
+                               return_ACPI_STATUS(status);
                        }
                }
 
                /* Put the operand object on the object stack */
 
-               status = acpi_ds_obj_stack_push (obj_desc, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ds_obj_stack_push(obj_desc, walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
-               ACPI_DEBUGGER_EXEC (acpi_db_display_argument_object (obj_desc, walk_state));
+               ACPI_DEBUGGER_EXEC(acpi_db_display_argument_object
+                                  (obj_desc, walk_state));
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_create_operands
@@ -702,29 +692,27 @@ acpi_ds_create_operand (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_create_operands (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *first_arg)
+acpi_ds_create_operands(struct acpi_walk_state *walk_state,
+                       union acpi_parse_object *first_arg)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_parse_object         *arg;
-       u32                             arg_count = 0;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_create_operands", first_arg);
+       acpi_status status = AE_OK;
+       union acpi_parse_object *arg;
+       u32 arg_count = 0;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_create_operands", first_arg);
 
        /* For all arguments in the list... */
 
        arg = first_arg;
        while (arg) {
-               status = acpi_ds_create_operand (walk_state, arg, arg_count);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ds_create_operand(walk_state, arg, arg_count);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Arg #%d (%p) done, Arg1=%p\n",
-                       arg_count, arg, first_arg));
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "Arg #%d (%p) done, Arg1=%p\n", arg_count,
+                                 arg, first_arg));
 
                /* Move on to next argument, if any */
 
@@ -732,20 +720,17 @@ acpi_ds_create_operands (
                arg_count++;
        }
 
-       return_ACPI_STATUS (status);
-
+       return_ACPI_STATUS(status);
 
-cleanup:
+      cleanup:
        /*
         * We must undo everything done above; meaning that we must
         * pop everything off of the operand stack and delete those
         * objects
         */
-       (void) acpi_ds_obj_stack_pop_and_delete (arg_count, walk_state);
+       (void)acpi_ds_obj_stack_pop_and_delete(arg_count, walk_state);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "While creating Arg %d - %s\n",
-               (arg_count + 1), acpi_format_exception (status)));
-       return_ACPI_STATUS (status);
+       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "While creating Arg %d - %s\n",
+                         (arg_count + 1), acpi_format_exception(status)));
+       return_ACPI_STATUS(status);
 }
-
-
index 10f71318e23b81f9b40b428dc109dff0f2f0428d..e522763bb692aeacdb568a51a3e1a2fe7b73a213 100644 (file)
@@ -42,7 +42,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 #include <acpi/acdebug.h>
 #include <acpi/acdisasm.h>
 
-
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dswexec")
+ACPI_MODULE_NAME("dswexec")
 
 /*
  * Dispatch table for opcode classes
  */
-static ACPI_EXECUTE_OP      acpi_gbl_op_type_dispatch [] = {
-                         acpi_ex_opcode_0A_0T_1R,
-                         acpi_ex_opcode_1A_0T_0R,
-                         acpi_ex_opcode_1A_0T_1R,
-                         acpi_ex_opcode_1A_1T_0R,
-                         acpi_ex_opcode_1A_1T_1R,
-                         acpi_ex_opcode_2A_0T_0R,
-                         acpi_ex_opcode_2A_0T_1R,
-                         acpi_ex_opcode_2A_1T_1R,
-                         acpi_ex_opcode_2A_2T_1R,
-                         acpi_ex_opcode_3A_0T_0R,
-                         acpi_ex_opcode_3A_1T_1R,
-                         acpi_ex_opcode_6A_0T_1R};
-
+static ACPI_EXECUTE_OP acpi_gbl_op_type_dispatch[] = {
+       acpi_ex_opcode_0A_0T_1R,
+       acpi_ex_opcode_1A_0T_0R,
+       acpi_ex_opcode_1A_0T_1R,
+       acpi_ex_opcode_1A_1T_0R,
+       acpi_ex_opcode_1A_1T_1R,
+       acpi_ex_opcode_2A_0T_0R,
+       acpi_ex_opcode_2A_0T_1R,
+       acpi_ex_opcode_2A_1T_1R,
+       acpi_ex_opcode_2A_2T_1R,
+       acpi_ex_opcode_3A_0T_0R,
+       acpi_ex_opcode_3A_1T_1R,
+       acpi_ex_opcode_6A_0T_1R
+};
 
 /*****************************************************************************
  *
@@ -88,64 +86,64 @@ static ACPI_EXECUTE_OP      acpi_gbl_op_type_dispatch [] = {
  ****************************************************************************/
 
 acpi_status
-acpi_ds_get_predicate_value (
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       *result_obj) {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *local_obj_desc = NULL;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_get_predicate_value", walk_state);
+acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
+                           union acpi_operand_object *result_obj)
+{
+       acpi_status status = AE_OK;
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *local_obj_desc = NULL;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_get_predicate_value", walk_state);
 
        walk_state->control_state->common.state = 0;
 
        if (result_obj) {
-               status = acpi_ds_result_pop (&obj_desc, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Could not get result from predicate evaluation, %s\n",
-                               acpi_format_exception (status)));
+               status = acpi_ds_result_pop(&obj_desc, walk_state);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Could not get result from predicate evaluation, %s\n",
+                                         acpi_format_exception(status)));
 
-                       return_ACPI_STATUS (status);
+                       return_ACPI_STATUS(status);
                }
-       }
-       else {
-               status = acpi_ds_create_operand (walk_state, walk_state->op, 0);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+       } else {
+               status = acpi_ds_create_operand(walk_state, walk_state->op, 0);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
-               status = acpi_ex_resolve_to_value (&walk_state->operands [0], walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ex_resolve_to_value(&walk_state->operands[0],
+                                            walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
-               obj_desc = walk_state->operands [0];
+               obj_desc = walk_state->operands[0];
        }
 
        if (!obj_desc) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "No predicate obj_desc=%p State=%p\n",
-                       obj_desc, walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "No predicate obj_desc=%p State=%p\n",
+                                 obj_desc, walk_state));
 
-               return_ACPI_STATUS (AE_AML_NO_OPERAND);
+               return_ACPI_STATUS(AE_AML_NO_OPERAND);
        }
 
        /*
         * Result of predicate evaluation must be an Integer
         * object. Implicitly convert the argument if necessary.
         */
-       status = acpi_ex_convert_to_integer (obj_desc, &local_obj_desc, 16);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ex_convert_to_integer(obj_desc, &local_obj_desc, 16);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
-       if (ACPI_GET_OBJECT_TYPE (local_obj_desc) != ACPI_TYPE_INTEGER) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Bad predicate (not an integer) obj_desc=%p State=%p Type=%X\n",
-                       obj_desc, walk_state, ACPI_GET_OBJECT_TYPE (obj_desc)));
+       if (ACPI_GET_OBJECT_TYPE(local_obj_desc) != ACPI_TYPE_INTEGER) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Bad predicate (not an integer) obj_desc=%p State=%p Type=%X\n",
+                                 obj_desc, walk_state,
+                                 ACPI_GET_OBJECT_TYPE(obj_desc)));
 
                status = AE_AML_OPERAND_TYPE;
                goto cleanup;
@@ -153,7 +151,7 @@ acpi_ds_get_predicate_value (
 
        /* Truncate the predicate to 32-bits if necessary */
 
-       acpi_ex_truncate_for32bit_table (local_obj_desc);
+       acpi_ex_truncate_for32bit_table(local_obj_desc);
 
        /*
         * Save the result of the predicate evaluation on
@@ -161,8 +159,7 @@ acpi_ds_get_predicate_value (
         */
        if (local_obj_desc->integer.value) {
                walk_state->control_state->common.value = TRUE;
-       }
-       else {
+       } else {
                /*
                 * Predicate is FALSE, we will just toss the
                 * rest of the package
@@ -171,30 +168,30 @@ acpi_ds_get_predicate_value (
                status = AE_CTRL_FALSE;
        }
 
+      cleanup:
 
-cleanup:
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Completed a predicate eval=%X Op=%p\n",
+                         walk_state->control_state->common.value,
+                         walk_state->op));
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Completed a predicate eval=%X Op=%p\n",
-               walk_state->control_state->common.value, walk_state->op));
+       /* Break to debugger to display result */
 
-        /* Break to debugger to display result */
-
-       ACPI_DEBUGGER_EXEC (acpi_db_display_result_object (local_obj_desc, walk_state));
+       ACPI_DEBUGGER_EXEC(acpi_db_display_result_object
+                          (local_obj_desc, walk_state));
 
        /*
         * Delete the predicate result object (we know that
         * we don't need it anymore)
         */
        if (local_obj_desc != obj_desc) {
-               acpi_ut_remove_reference (local_obj_desc);
+               acpi_ut_remove_reference(local_obj_desc);
        }
-       acpi_ut_remove_reference (obj_desc);
+       acpi_ut_remove_reference(obj_desc);
 
        walk_state->control_state->common.state = ACPI_CONTROL_NORMAL;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*****************************************************************************
  *
  * FUNCTION:    acpi_ds_exec_begin_op
@@ -211,38 +208,39 @@ cleanup:
  ****************************************************************************/
 
 acpi_status
-acpi_ds_exec_begin_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         **out_op)
+acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
+                     union acpi_parse_object **out_op)
 {
-       union acpi_parse_object         *op;
-       acpi_status                     status = AE_OK;
-       u32                             opcode_class;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_exec_begin_op", walk_state);
+       union acpi_parse_object *op;
+       acpi_status status = AE_OK;
+       u32 opcode_class;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_exec_begin_op", walk_state);
 
        op = walk_state->op;
        if (!op) {
-               status = acpi_ds_load2_begin_op (walk_state, out_op);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ds_load2_begin_op(walk_state, out_op);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                op = *out_op;
                walk_state->op = op;
                walk_state->opcode = op->common.aml_opcode;
-               walk_state->op_info = acpi_ps_get_opcode_info (op->common.aml_opcode);
-
-               if (acpi_ns_opens_scope (walk_state->op_info->object_type)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                               "(%s) Popping scope for Op %p\n",
-                               acpi_ut_get_type_name (walk_state->op_info->object_type), op));
-
-                       status = acpi_ds_scope_stack_pop (walk_state);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+               walk_state->op_info =
+                   acpi_ps_get_opcode_info(op->common.aml_opcode);
+
+               if (acpi_ns_opens_scope(walk_state->op_info->object_type)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                         "(%s) Popping scope for Op %p\n",
+                                         acpi_ut_get_type_name(walk_state->
+                                                               op_info->
+                                                               object_type),
+                                         op));
+
+                       status = acpi_ds_scope_stack_pop(walk_state);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
                }
        }
@@ -252,7 +250,7 @@ acpi_ds_exec_begin_op (
                        *out_op = op;
                }
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /*
@@ -261,19 +259,20 @@ acpi_ds_exec_begin_op (
         * Save this knowledge in the current scope descriptor
         */
        if ((walk_state->control_state) &&
-               (walk_state->control_state->common.state ==
-                       ACPI_CONTROL_CONDITIONAL_EXECUTING)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Exec predicate Op=%p State=%p\n",
-                                 op, walk_state));
+           (walk_state->control_state->common.state ==
+            ACPI_CONTROL_CONDITIONAL_EXECUTING)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "Exec predicate Op=%p State=%p\n", op,
+                                 walk_state));
 
-               walk_state->control_state->common.state = ACPI_CONTROL_PREDICATE_EXECUTING;
+               walk_state->control_state->common.state =
+                   ACPI_CONTROL_PREDICATE_EXECUTING;
 
                /* Save start of predicate */
 
                walk_state->control_state->control.predicate_op = op;
        }
 
-
        opcode_class = walk_state->op_info->class;
 
        /* We want to send namepaths to the load code */
@@ -288,15 +287,14 @@ acpi_ds_exec_begin_op (
        switch (opcode_class) {
        case AML_CLASS_CONTROL:
 
-               status = acpi_ds_result_stack_push (walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ds_result_stack_push(walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
-               status = acpi_ds_exec_begin_control_op (walk_state, op);
+               status = acpi_ds_exec_begin_control_op(walk_state, op);
                break;
 
-
        case AML_CLASS_NAMED_OBJECT:
 
                if (walk_state->walk_type == ACPI_WALK_METHOD) {
@@ -306,15 +304,14 @@ acpi_ds_exec_begin_op (
                         * object is temporary and will be deleted upon completion of
                         * the execution of this method.
                         */
-                       status = acpi_ds_load2_begin_op (walk_state, NULL);
+                       status = acpi_ds_load2_begin_op(walk_state, NULL);
                }
 
                if (op->common.aml_opcode == AML_REGION_OP) {
-                       status = acpi_ds_result_stack_push (walk_state);
+                       status = acpi_ds_result_stack_push(walk_state);
                }
                break;
 
-
        case AML_CLASS_EXECUTE:
        case AML_CLASS_CREATE:
 
@@ -322,20 +319,18 @@ acpi_ds_exec_begin_op (
                 * Most operators with arguments.
                 * Start a new result/operand state
                 */
-               status = acpi_ds_result_stack_push (walk_state);
+               status = acpi_ds_result_stack_push(walk_state);
                break;
 
-
        default:
                break;
        }
 
        /* Nothing to do here during method execution */
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*****************************************************************************
  *
  * FUNCTION:    acpi_ds_exec_end_op
@@ -350,28 +345,25 @@ acpi_ds_exec_begin_op (
  *
  ****************************************************************************/
 
-acpi_status
-acpi_ds_exec_end_op (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
 {
-       union acpi_parse_object         *op;
-       acpi_status                     status = AE_OK;
-       u32                             op_type;
-       u32                             op_class;
-       union acpi_parse_object         *next_op;
-       union acpi_parse_object         *first_arg;
+       union acpi_parse_object *op;
+       acpi_status status = AE_OK;
+       u32 op_type;
+       u32 op_class;
+       union acpi_parse_object *next_op;
+       union acpi_parse_object *first_arg;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_exec_end_op", walk_state);
 
-       ACPI_FUNCTION_TRACE_PTR ("ds_exec_end_op", walk_state);
-
-
-       op      = walk_state->op;
+       op = walk_state->op;
        op_type = walk_state->op_info->type;
        op_class = walk_state->op_info->class;
 
        if (op_class == AML_CLASS_UNKNOWN) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown opcode %X\n", op->common.aml_opcode));
-               return_ACPI_STATUS (AE_NOT_IMPLEMENTED);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unknown opcode %X\n",
+                                 op->common.aml_opcode));
+               return_ACPI_STATUS(AE_NOT_IMPLEMENTED);
        }
 
        first_arg = op->common.value.arg;
@@ -384,29 +376,31 @@ acpi_ds_exec_end_op (
 
        /* Call debugger for single step support (DEBUG build only) */
 
-       ACPI_DEBUGGER_EXEC (status = acpi_db_single_step (walk_state, op, op_class));
-       ACPI_DEBUGGER_EXEC (if (ACPI_FAILURE (status)) {return_ACPI_STATUS (status);});
+       ACPI_DEBUGGER_EXEC(status =
+                          acpi_db_single_step(walk_state, op, op_class));
+       ACPI_DEBUGGER_EXEC(if (ACPI_FAILURE(status)) {
+                          return_ACPI_STATUS(status);}
+       ) ;
 
        /* Decode the Opcode Class */
 
        switch (op_class) {
-       case AML_CLASS_ARGUMENT:    /* constants, literals, etc. - do nothing */
+       case AML_CLASS_ARGUMENT:        /* constants, literals, etc. - do nothing */
                break;
 
-
-       case AML_CLASS_EXECUTE:     /* most operators with arguments */
+       case AML_CLASS_EXECUTE: /* most operators with arguments */
 
                /* Build resolved operand stack */
 
-               status = acpi_ds_create_operands (walk_state, first_arg);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ds_create_operands(walk_state, first_arg);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
 
                /* Done with this result state (Now that operand stack is built) */
 
-               status = acpi_ds_result_stack_pop (walk_state);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ds_result_stack_pop(walk_state);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
 
@@ -417,86 +411,93 @@ acpi_ds_exec_end_op (
                if (!(walk_state->op_info->flags & AML_NO_OPERAND_RESOLVE)) {
                        /* Resolve all operands */
 
-                       status = acpi_ex_resolve_operands (walk_state->opcode,
-                                        &(walk_state->operands [walk_state->num_operands -1]),
-                                        walk_state);
-                       if (ACPI_SUCCESS (status)) {
-                               ACPI_DUMP_OPERANDS (ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE,
-                                       acpi_ps_get_opcode_name (walk_state->opcode),
-                                       walk_state->num_operands, "after ex_resolve_operands");
+                       status = acpi_ex_resolve_operands(walk_state->opcode,
+                                                         &(walk_state->
+                                                           operands
+                                                           [walk_state->
+                                                            num_operands - 1]),
+                                                         walk_state);
+                       if (ACPI_SUCCESS(status)) {
+                               ACPI_DUMP_OPERANDS(ACPI_WALK_OPERANDS,
+                                                  ACPI_IMODE_EXECUTE,
+                                                  acpi_ps_get_opcode_name
+                                                  (walk_state->opcode),
+                                                  walk_state->num_operands,
+                                                  "after ex_resolve_operands");
                        }
                }
 
-               if (ACPI_SUCCESS (status)) {
+               if (ACPI_SUCCESS(status)) {
                        /*
                         * Dispatch the request to the appropriate interpreter handler
                         * routine.  There is one routine per opcode "type" based upon the
                         * number of opcode arguments and return type.
                         */
-                       status = acpi_gbl_op_type_dispatch[op_type] (walk_state);
-               }
-               else {
+                       status =
+                           acpi_gbl_op_type_dispatch[op_type] (walk_state);
+               else {
                        /*
                         * Treat constructs of the form "Store(local_x,local_x)" as noops when the
                         * Local is uninitialized.
                         */
-                       if  ((status == AE_AML_UNINITIALIZED_LOCAL) &&
-                               (walk_state->opcode == AML_STORE_OP) &&
-                               (walk_state->operands[0]->common.type == ACPI_TYPE_LOCAL_REFERENCE) &&
-                               (walk_state->operands[1]->common.type == ACPI_TYPE_LOCAL_REFERENCE) &&
-                               (walk_state->operands[0]->reference.opcode ==
-                                walk_state->operands[1]->reference.opcode) &&
-                               (walk_state->operands[0]->reference.offset ==
-                                walk_state->operands[1]->reference.offset)) {
+                       if ((status == AE_AML_UNINITIALIZED_LOCAL) &&
+                           (walk_state->opcode == AML_STORE_OP) &&
+                           (walk_state->operands[0]->common.type ==
+                            ACPI_TYPE_LOCAL_REFERENCE)
+                           && (walk_state->operands[1]->common.type ==
+                               ACPI_TYPE_LOCAL_REFERENCE)
+                           && (walk_state->operands[0]->reference.opcode ==
+                               walk_state->operands[1]->reference.opcode)
+                           && (walk_state->operands[0]->reference.offset ==
+                               walk_state->operands[1]->reference.offset)) {
                                status = AE_OK;
-                       }
-                       else {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "[%s]: Could not resolve operands, %s\n",
-                                       acpi_ps_get_opcode_name (walk_state->opcode),
-                                       acpi_format_exception (status)));
+                       } else {
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "[%s]: Could not resolve operands, %s\n",
+                                                 acpi_ps_get_opcode_name
+                                                 (walk_state->opcode),
+                                                 acpi_format_exception
+                                                 (status)));
                        }
                }
 
                /* Always delete the argument objects and clear the operand stack */
 
-               acpi_ds_clear_operands (walk_state);
+               acpi_ds_clear_operands(walk_state);
 
                /*
                 * If a result object was returned from above, push it on the
                 * current result stack
                 */
-               if (ACPI_SUCCESS (status) &&
-                       walk_state->result_obj) {
-                       status = acpi_ds_result_push (walk_state->result_obj, walk_state);
+               if (ACPI_SUCCESS(status) && walk_state->result_obj) {
+                       status =
+                           acpi_ds_result_push(walk_state->result_obj,
+                                               walk_state);
                }
 
                break;
 
-
        default:
 
                switch (op_type) {
-               case AML_TYPE_CONTROL:    /* Type 1 opcode, IF/ELSE/WHILE/NOOP */
+               case AML_TYPE_CONTROL:  /* Type 1 opcode, IF/ELSE/WHILE/NOOP */
 
                        /* 1 Operand, 0 external_result, 0 internal_result */
 
-                       status = acpi_ds_exec_end_control_op (walk_state, op);
+                       status = acpi_ds_exec_end_control_op(walk_state, op);
 
                        /* Make sure to properly pop the result stack */
 
-                       if (ACPI_SUCCESS (status)) {
-                               status = acpi_ds_result_stack_pop (walk_state);
-                       }
-                       else if (status == AE_CTRL_PENDING) {
-                               status = acpi_ds_result_stack_pop (walk_state);
-                               if (ACPI_SUCCESS (status)) {
+                       if (ACPI_SUCCESS(status)) {
+                               status = acpi_ds_result_stack_pop(walk_state);
+                       } else if (status == AE_CTRL_PENDING) {
+                               status = acpi_ds_result_stack_pop(walk_state);
+                               if (ACPI_SUCCESS(status)) {
                                        status = AE_CTRL_PENDING;
                                }
                        }
                        break;
 
-
                case AML_TYPE_METHOD_CALL:
 
                        /*
@@ -505,16 +506,22 @@ acpi_ds_exec_end_op (
                         * a reference to it.
                         */
                        if ((op->asl.parent) &&
-                          ((op->asl.parent->asl.aml_opcode == AML_PACKAGE_OP) ||
-                               (op->asl.parent->asl.aml_opcode == AML_VAR_PACKAGE_OP))) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                                       "Method Reference in a Package, Op=%p\n", op));
-                               op->common.node = (struct acpi_namespace_node *) op->asl.value.arg->asl.node->object;
-                               acpi_ut_add_reference (op->asl.value.arg->asl.node->object);
-                               return_ACPI_STATUS (AE_OK);
+                           ((op->asl.parent->asl.aml_opcode == AML_PACKAGE_OP)
+                            || (op->asl.parent->asl.aml_opcode ==
+                                AML_VAR_PACKAGE_OP))) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                                 "Method Reference in a Package, Op=%p\n",
+                                                 op));
+                               op->common.node =
+                                   (struct acpi_namespace_node *)op->asl.value.
+                                   arg->asl.node->object;
+                               acpi_ut_add_reference(op->asl.value.arg->asl.
+                                                     node->object);
+                               return_ACPI_STATUS(AE_OK);
                        }
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Method invocation, Op=%p\n", op));
+                       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                         "Method invocation, Op=%p\n", op));
 
                        /*
                         * (AML_METHODCALL) Op->Asl.Value.Arg->Asl.Node contains
@@ -531,8 +538,8 @@ acpi_ds_exec_end_op (
                        /*
                         * Get the method's arguments and put them on the operand stack
                         */
-                       status = acpi_ds_create_operands (walk_state, next_op);
-                       if (ACPI_FAILURE (status)) {
+                       status = acpi_ds_create_operands(walk_state, next_op);
+                       if (ACPI_FAILURE(status)) {
                                break;
                        }
 
@@ -541,11 +548,11 @@ acpi_ds_exec_end_op (
                         * we must resolve all local references here (Local variables,
                         * arguments to *this* method, etc.)
                         */
-                       status = acpi_ds_resolve_operands (walk_state);
-                       if (ACPI_FAILURE (status)) {
+                       status = acpi_ds_resolve_operands(walk_state);
+                       if (ACPI_FAILURE(status)) {
                                /* On error, clear all resolved operands */
 
-                               acpi_ds_clear_operands (walk_state);
+                               acpi_ds_clear_operands(walk_state);
                                break;
                        }
 
@@ -559,27 +566,28 @@ acpi_ds_exec_end_op (
                         * Return now; we don't want to disturb anything,
                         * especially the operand count!
                         */
-                       return_ACPI_STATUS (status);
-
+                       return_ACPI_STATUS(status);
 
                case AML_TYPE_CREATE_FIELD:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                               "Executing create_field Buffer/Index Op=%p\n", op));
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                         "Executing create_field Buffer/Index Op=%p\n",
+                                         op));
 
-                       status = acpi_ds_load2_end_op (walk_state);
-                       if (ACPI_FAILURE (status)) {
+                       status = acpi_ds_load2_end_op(walk_state);
+                       if (ACPI_FAILURE(status)) {
                                break;
                        }
 
-                       status = acpi_ds_eval_buffer_field_operands (walk_state, op);
+                       status =
+                           acpi_ds_eval_buffer_field_operands(walk_state, op);
                        break;
 
-
                case AML_TYPE_CREATE_OBJECT:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                               "Executing create_object (Buffer/Package) Op=%p\n", op));
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                         "Executing create_object (Buffer/Package) Op=%p\n",
+                                         op));
 
                        switch (op->common.parent->common.aml_opcode) {
                        case AML_NAME_OP:
@@ -588,13 +596,15 @@ acpi_ds_exec_end_op (
                                 * Put the Node on the object stack (Contains the ACPI Name
                                 * of this object)
                                 */
-                               walk_state->operands[0] = (void *) op->common.parent->common.node;
+                               walk_state->operands[0] =
+                                   (void *)op->common.parent->common.node;
                                walk_state->num_operands = 1;
 
-                               status = acpi_ds_create_node (walk_state,
-                                                op->common.parent->common.node,
-                                                op->common.parent);
-                               if (ACPI_FAILURE (status)) {
+                               status = acpi_ds_create_node(walk_state,
+                                                            op->common.parent->
+                                                            common.node,
+                                                            op->common.parent);
+                               if (ACPI_FAILURE(status)) {
                                        break;
                                }
 
@@ -603,20 +613,26 @@ acpi_ds_exec_end_op (
 
                        case AML_INT_EVAL_SUBTREE_OP:
 
-                               status = acpi_ds_eval_data_object_operands (walk_state, op,
-                                                acpi_ns_get_attached_object (op->common.parent->common.node));
+                               status =
+                                   acpi_ds_eval_data_object_operands
+                                   (walk_state, op,
+                                    acpi_ns_get_attached_object(op->common.
+                                                                parent->common.
+                                                                node));
                                break;
 
                        default:
 
-                               status = acpi_ds_eval_data_object_operands (walk_state, op, NULL);
+                               status =
+                                   acpi_ds_eval_data_object_operands
+                                   (walk_state, op, NULL);
                                break;
                        }
 
                        /* Done with result state (Now that operand stack is built) */
 
-                       status = acpi_ds_result_stack_pop (walk_state);
-                       if (ACPI_FAILURE (status)) {
+                       status = acpi_ds_result_stack_pop(walk_state);
+                       if (ACPI_FAILURE(status)) {
                                goto cleanup;
                        }
 
@@ -625,56 +641,58 @@ acpi_ds_exec_end_op (
                         * current result stack
                         */
                        if (walk_state->result_obj) {
-                               status = acpi_ds_result_push (walk_state->result_obj, walk_state);
+                               status =
+                                   acpi_ds_result_push(walk_state->result_obj,
+                                                       walk_state);
                        }
                        break;
 
-
                case AML_TYPE_NAMED_FIELD:
                case AML_TYPE_NAMED_COMPLEX:
                case AML_TYPE_NAMED_SIMPLE:
                case AML_TYPE_NAMED_NO_OBJ:
 
-                       status = acpi_ds_load2_end_op (walk_state);
-                       if (ACPI_FAILURE (status)) {
+                       status = acpi_ds_load2_end_op(walk_state);
+                       if (ACPI_FAILURE(status)) {
                                break;
                        }
 
                        if (op->common.aml_opcode == AML_REGION_OP) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                                       "Executing op_region Address/Length Op=%p\n", op));
-
-                               status = acpi_ds_eval_region_operands (walk_state, op);
-                               if (ACPI_FAILURE (status)) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                                 "Executing op_region Address/Length Op=%p\n",
+                                                 op));
+
+                               status =
+                                   acpi_ds_eval_region_operands(walk_state,
+                                                                op);
+                               if (ACPI_FAILURE(status)) {
                                        break;
                                }
 
-                               status = acpi_ds_result_stack_pop (walk_state);
+                               status = acpi_ds_result_stack_pop(walk_state);
                        }
 
                        break;
 
-
                case AML_TYPE_UNDEFINED:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Undefined opcode type Op=%p\n", op));
-                       return_ACPI_STATUS (AE_NOT_IMPLEMENTED);
-
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Undefined opcode type Op=%p\n", op));
+                       return_ACPI_STATUS(AE_NOT_IMPLEMENTED);
 
                case AML_TYPE_BOGUS:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                               "Internal opcode=%X type Op=%p\n",
-                               walk_state->opcode, op));
+                       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                         "Internal opcode=%X type Op=%p\n",
+                                         walk_state->opcode, op));
                        break;
 
-
                default:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Unimplemented opcode, class=%X type=%X Opcode=%X Op=%p\n",
-                               op_class, op_type, op->common.aml_opcode, op));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Unimplemented opcode, class=%X type=%X Opcode=%X Op=%p\n",
+                                         op_class, op_type,
+                                         op->common.aml_opcode, op));
 
                        status = AE_NOT_IMPLEMENTED;
                        break;
@@ -685,55 +703,58 @@ acpi_ds_exec_end_op (
         * ACPI 2.0 support for 64-bit integers: Truncate numeric
         * result value if we are executing from a 32-bit ACPI table
         */
-       acpi_ex_truncate_for32bit_table (walk_state->result_obj);
+       acpi_ex_truncate_for32bit_table(walk_state->result_obj);
 
        /*
         * Check if we just completed the evaluation of a
         * conditional predicate
         */
 
-       if ((ACPI_SUCCESS (status)) &&
-               (walk_state->control_state) &&
-               (walk_state->control_state->common.state ==
-                       ACPI_CONTROL_PREDICATE_EXECUTING) &&
-               (walk_state->control_state->control.predicate_op == op)) {
-               status = acpi_ds_get_predicate_value (walk_state, walk_state->result_obj);
+       if ((ACPI_SUCCESS(status)) &&
+           (walk_state->control_state) &&
+           (walk_state->control_state->common.state ==
+            ACPI_CONTROL_PREDICATE_EXECUTING) &&
+           (walk_state->control_state->control.predicate_op == op)) {
+               status =
+                   acpi_ds_get_predicate_value(walk_state,
+                                               walk_state->result_obj);
                walk_state->result_obj = NULL;
        }
 
-
-cleanup:
+      cleanup:
 
        /* Invoke exception handler on error */
 
-       if (ACPI_FAILURE (status) &&
-               acpi_gbl_exception_handler &&
-               !(status & AE_CODE_CONTROL)) {
-               acpi_ex_exit_interpreter ();
-               status = acpi_gbl_exception_handler (status,
-                                walk_state->method_node->name.integer, walk_state->opcode,
-                                walk_state->aml_offset, NULL);
-               (void) acpi_ex_enter_interpreter ();
+       if (ACPI_FAILURE(status) &&
+           acpi_gbl_exception_handler && !(status & AE_CODE_CONTROL)) {
+               acpi_ex_exit_interpreter();
+               status = acpi_gbl_exception_handler(status,
+                                                   walk_state->method_node->
+                                                   name.integer,
+                                                   walk_state->opcode,
+                                                   walk_state->aml_offset,
+                                                   NULL);
+               (void)acpi_ex_enter_interpreter();
        }
 
        if (walk_state->result_obj) {
                /* Break to debugger to display result */
 
-               ACPI_DEBUGGER_EXEC (acpi_db_display_result_object (walk_state->result_obj,
-                                walk_state));
+               ACPI_DEBUGGER_EXEC(acpi_db_display_result_object
+                                  (walk_state->result_obj, walk_state));
 
                /*
                 * Delete the result op if and only if:
                 * Parent will not use the result -- such as any
                 * non-nested type2 op in a method (parent will be method)
                 */
-               acpi_ds_delete_result_if_not_used (op, walk_state->result_obj, walk_state);
+               acpi_ds_delete_result_if_not_used(op, walk_state->result_obj,
+                                                 walk_state);
        }
-
 #ifdef _UNDER_DEVELOPMENT
 
        if (walk_state->parser_state.aml == walk_state->parser_state.aml_end) {
-               acpi_db_method_end (walk_state);
+               acpi_db_method_end(walk_state);
        }
 #endif
 
@@ -745,12 +766,10 @@ cleanup:
 
        /* On error, display method locals/args */
 
-       if (ACPI_FAILURE (status)) {
-               acpi_dm_dump_method_info (status, walk_state, op);
+       if (ACPI_FAILURE(status)) {
+               acpi_dm_dump_method_info(status, walk_state, op);
        }
 #endif
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index d11620018421486f1559c3fc4be1afbd7578a8ef..411731261c2986b2c19e01104bd0e48e89be6131 100644 (file)
@@ -41,7 +41,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acevents.h>
 
-#ifdef _ACPI_ASL_COMPILER
+#ifdef ACPI_ASL_COMPILER
 #include <acpi/acdisasm.h>
 #endif
 
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dswload")
-
+ACPI_MODULE_NAME("dswload")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Init walk state callbacks
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ds_init_callbacks (
-       struct acpi_walk_state          *walk_state,
-       u32                             pass_number)
+acpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number)
 {
 
        switch (pass_number) {
        case 1:
-               walk_state->parse_flags       = ACPI_PARSE_LOAD_PASS1 |
-                                  ACPI_PARSE_DELETE_TREE;
+               walk_state->parse_flags = ACPI_PARSE_LOAD_PASS1 |
+                   ACPI_PARSE_DELETE_TREE;
                walk_state->descending_callback = acpi_ds_load1_begin_op;
                walk_state->ascending_callback = acpi_ds_load1_end_op;
                break;
 
        case 2:
-               walk_state->parse_flags       = ACPI_PARSE_LOAD_PASS1 |
-                                  ACPI_PARSE_DELETE_TREE;
+               walk_state->parse_flags = ACPI_PARSE_LOAD_PASS1 |
+                   ACPI_PARSE_DELETE_TREE;
                walk_state->descending_callback = acpi_ds_load2_begin_op;
                walk_state->ascending_callback = acpi_ds_load2_end_op;
                break;
 
        case 3:
 #ifndef ACPI_NO_METHOD_EXECUTION
-               walk_state->parse_flags      |= ACPI_PARSE_EXECUTE  |
-                                  ACPI_PARSE_DELETE_TREE;
+               walk_state->parse_flags |= ACPI_PARSE_EXECUTE |
+                   ACPI_PARSE_DELETE_TREE;
                walk_state->descending_callback = acpi_ds_exec_begin_op;
                walk_state->ascending_callback = acpi_ds_exec_end_op;
 #endif
@@ -108,7 +103,6 @@ acpi_ds_init_callbacks (
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_load1_begin_op
@@ -123,37 +117,26 @@ acpi_ds_init_callbacks (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_load1_begin_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         **out_op)
+acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state,
+                      union acpi_parse_object ** out_op)
 {
-       union acpi_parse_object         *op;
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-       acpi_object_type                object_type;
-       char                            *path;
-       u32                             flags;
-
-
-       ACPI_FUNCTION_NAME ("ds_load1_begin_op");
+       union acpi_parse_object *op;
+       struct acpi_namespace_node *node;
+       acpi_status status;
+       acpi_object_type object_type;
+       char *path;
+       u32 flags;
 
+       ACPI_FUNCTION_NAME("ds_load1_begin_op");
 
        op = walk_state->op;
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op, walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op,
+                         walk_state));
 
        /* We are only interested in opcodes that have an associated name */
 
        if (op) {
                if (!(walk_state->op_info->flags & AML_NAMED)) {
-#if 0
-                       if ((walk_state->op_info->class == AML_CLASS_EXECUTE) ||
-                               (walk_state->op_info->class == AML_CLASS_CONTROL)) {
-                               acpi_os_printf ("\n\n***EXECUTABLE OPCODE %s***\n\n",
-                                       walk_state->op_info->name);
-                               *out_op = op;
-                               return (AE_CTRL_SKIP);
-                       }
-#endif
                        *out_op = op;
                        return (AE_OK);
                }
@@ -166,14 +149,15 @@ acpi_ds_load1_begin_op (
                }
        }
 
-       path = acpi_ps_get_next_namestring (&walk_state->parser_state);
+       path = acpi_ps_get_next_namestring(&walk_state->parser_state);
 
        /* Map the raw opcode into an internal object type */
 
        object_type = walk_state->op_info->object_type;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "State=%p Op=%p [%s]\n", walk_state, op, acpi_ut_get_type_name (object_type)));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "State=%p Op=%p [%s]\n", walk_state, op,
+                         acpi_ut_get_type_name(object_type)));
 
        switch (walk_state->opcode) {
        case AML_SCOPE_OP:
@@ -183,23 +167,27 @@ acpi_ds_load1_begin_op (
                 * that we can actually open the scope to enter new names underneath it.
                 * Allow search-to-root for single namesegs.
                 */
-               status = acpi_ns_lookup (walk_state->scope_info, path, object_type,
-                                 ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, walk_state, &(node));
-#ifdef _ACPI_ASL_COMPILER
+               status =
+                   acpi_ns_lookup(walk_state->scope_info, path, object_type,
+                                  ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
+                                  walk_state, &(node));
+#ifdef ACPI_ASL_COMPILER
                if (status == AE_NOT_FOUND) {
                        /*
                         * Table disassembly:
                         * Target of Scope() not found.  Generate an External for it, and
                         * insert the name into the namespace.
                         */
-                       acpi_dm_add_to_external_list (path);
-                       status = acpi_ns_lookup (walk_state->scope_info, path, object_type,
-                                          ACPI_IMODE_LOAD_PASS1, ACPI_NS_SEARCH_PARENT,
-                                          walk_state, &(node));
+                       acpi_dm_add_to_external_list(path);
+                       status =
+                           acpi_ns_lookup(walk_state->scope_info, path,
+                                          object_type, ACPI_IMODE_LOAD_PASS1,
+                                          ACPI_NS_SEARCH_PARENT, walk_state,
+                                          &(node));
                }
 #endif
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_NSERROR (path, status);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_NSERROR(path, status);
                        return (status);
                }
 
@@ -208,7 +196,7 @@ acpi_ds_load1_begin_op (
                 * one of the opcodes that actually opens a scope
                 */
                switch (node->type) {
-               case ACPI_TYPE_LOCAL_SCOPE:         /* Scope  */
+               case ACPI_TYPE_LOCAL_SCOPE:     /* Scope  */
                case ACPI_TYPE_DEVICE:
                case ACPI_TYPE_POWER:
                case ACPI_TYPE_PROCESSOR:
@@ -232,9 +220,10 @@ acpi_ds_load1_begin_op (
                         * a warning
                         */
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                               "Type override - [%4.4s] had invalid type (%s) for Scope operator, changed to (Scope)\n",
-                               path, acpi_ut_get_type_name (node->type)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "Type override - [%4.4s] had invalid type (%s) for Scope operator, changed to (Scope)\n",
+                                         path,
+                                         acpi_ut_get_type_name(node->type)));
 
                        node->type = ACPI_TYPE_ANY;
                        walk_state->scope_info->common.value = ACPI_TYPE_ANY;
@@ -244,15 +233,12 @@ acpi_ds_load1_begin_op (
 
                        /* All other types are an error */
 
-                       ACPI_REPORT_ERROR ((
-                               "Invalid type (%s) for target of Scope operator [%4.4s] (Cannot override)\n",
-                               acpi_ut_get_type_name (node->type), path));
+                       ACPI_REPORT_ERROR(("Invalid type (%s) for target of Scope operator [%4.4s] (Cannot override)\n", acpi_ut_get_type_name(node->type), path));
 
                        return (AE_AML_OPERAND_TYPE);
                }
                break;
 
-
        default:
 
                /*
@@ -281,15 +267,15 @@ acpi_ds_load1_begin_op (
 
                flags = ACPI_NS_NO_UPSEARCH;
                if ((walk_state->opcode != AML_SCOPE_OP) &&
-                       (!(walk_state->parse_flags & ACPI_PARSE_DEFERRED_OP))) {
+                   (!(walk_state->parse_flags & ACPI_PARSE_DEFERRED_OP))) {
                        flags |= ACPI_NS_ERROR_IF_FOUND;
-                       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "[%s] Cannot already exist\n",
-                                       acpi_ut_get_type_name (object_type)));
-               }
-               else {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                               "[%s] Both Find or Create allowed\n",
-                                       acpi_ut_get_type_name (object_type)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                         "[%s] Cannot already exist\n",
+                                         acpi_ut_get_type_name(object_type)));
+               else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                         "[%s] Both Find or Create allowed\n",
+                                         acpi_ut_get_type_name(object_type)));
                }
 
                /*
@@ -298,22 +284,23 @@ acpi_ds_load1_begin_op (
                 * involve arguments to the opcode must be created as we go back up the
                 * parse tree later.
                 */
-               status = acpi_ns_lookup (walk_state->scope_info, path, object_type,
-                                 ACPI_IMODE_LOAD_PASS1, flags, walk_state, &(node));
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_NSERROR (path, status);
+               status =
+                   acpi_ns_lookup(walk_state->scope_info, path, object_type,
+                                  ACPI_IMODE_LOAD_PASS1, flags, walk_state,
+                                  &(node));
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_NSERROR(path, status);
                        return (status);
                }
                break;
        }
 
-
        /* Common exit */
 
        if (!op) {
                /* Create a new op */
 
-               op = acpi_ps_alloc_op (walk_state->opcode);
+               op = acpi_ps_alloc_op(walk_state->opcode);
                if (!op) {
                        return (AE_NO_MEMORY);
                }
@@ -327,19 +314,18 @@ acpi_ds_load1_begin_op (
        op->named.path = (u8 *) path;
 #endif
 
-
        /*
         * Put the Node in the "op" object that the parser uses, so we
         * can get it again quickly when this scope is closed
         */
        op->common.node = node;
-       acpi_ps_append_arg (acpi_ps_get_parent_scope (&walk_state->parser_state), op);
+       acpi_ps_append_arg(acpi_ps_get_parent_scope(&walk_state->parser_state),
+                          op);
 
        *out_op = op;
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_load1_end_op
@@ -353,20 +339,17 @@ acpi_ds_load1_begin_op (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ds_load1_end_op (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ds_load1_end_op(struct acpi_walk_state * walk_state)
 {
-       union acpi_parse_object         *op;
-       acpi_object_type                object_type;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_NAME ("ds_load1_end_op");
+       union acpi_parse_object *op;
+       acpi_object_type object_type;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_NAME("ds_load1_end_op");
 
        op = walk_state->op;
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op, walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op,
+                         walk_state));
 
        /* We are only interested in opcodes that have an associated name */
 
@@ -380,21 +363,20 @@ acpi_ds_load1_end_op (
 
 #ifndef ACPI_NO_METHOD_EXECUTION
        if (walk_state->op_info->flags & AML_FIELD) {
-               if (walk_state->opcode == AML_FIELD_OP         ||
-                       walk_state->opcode == AML_BANK_FIELD_OP    ||
-                       walk_state->opcode == AML_INDEX_FIELD_OP) {
-                       status = acpi_ds_init_field_objects (op, walk_state);
+               if (walk_state->opcode == AML_FIELD_OP ||
+                   walk_state->opcode == AML_BANK_FIELD_OP ||
+                   walk_state->opcode == AML_INDEX_FIELD_OP) {
+                       status = acpi_ds_init_field_objects(op, walk_state);
                }
                return (status);
        }
 
-
        if (op->common.aml_opcode == AML_REGION_OP) {
-               status = acpi_ex_create_region (op->named.data, op->named.length,
-                                  (acpi_adr_space_type)
-                                                ((op->common.value.arg)->common.value.integer),
-                                                walk_state);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ex_create_region(op->named.data, op->named.length,
+                                              (acpi_adr_space_type)
+                                              ((op->common.value.arg)->common.
+                                               value.integer), walk_state);
+               if (ACPI_FAILURE(status)) {
                        return (status);
                }
        }
@@ -404,8 +386,11 @@ acpi_ds_load1_end_op (
                /* For Name opcode, get the object type from the argument */
 
                if (op->common.value.arg) {
-                       object_type = (acpi_ps_get_opcode_info (
-                               (op->common.value.arg)->common.aml_opcode))->object_type;
+                       object_type = (acpi_ps_get_opcode_info((op->common.
+                                                               value.arg)->
+                                                              common.
+                                                              aml_opcode))->
+                           object_type;
                        op->common.node->type = (u8) object_type;
                }
        }
@@ -419,23 +404,26 @@ acpi_ds_load1_end_op (
                 * of invocations of the method (need to know the number of
                 * arguments.)
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                       "LOADING-Method: State=%p Op=%p named_obj=%p\n",
-                       walk_state, op, op->named.node));
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "LOADING-Method: State=%p Op=%p named_obj=%p\n",
+                                 walk_state, op, op->named.node));
 
-               if (!acpi_ns_get_attached_object (op->named.node)) {
-                       walk_state->operands[0] = (void *) op->named.node;
+               if (!acpi_ns_get_attached_object(op->named.node)) {
+                       walk_state->operands[0] = (void *)op->named.node;
                        walk_state->num_operands = 1;
 
-                       status = acpi_ds_create_operands (walk_state, op->common.value.arg);
-                       if (ACPI_SUCCESS (status)) {
-                               status = acpi_ex_create_method (op->named.data,
-                                                  op->named.length, walk_state);
+                       status =
+                           acpi_ds_create_operands(walk_state,
+                                                   op->common.value.arg);
+                       if (ACPI_SUCCESS(status)) {
+                               status = acpi_ex_create_method(op->named.data,
+                                                              op->named.length,
+                                                              walk_state);
                        }
                        walk_state->operands[0] = NULL;
                        walk_state->num_operands = 0;
 
-                       if (ACPI_FAILURE (status)) {
+                       if (ACPI_FAILURE(status)) {
                                return (status);
                        }
                }
@@ -443,17 +431,17 @@ acpi_ds_load1_end_op (
 
        /* Pop the scope stack */
 
-       if (acpi_ns_opens_scope (object_type)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s): Popping scope for Op %p\n",
-                       acpi_ut_get_type_name (object_type), op));
+       if (acpi_ns_opens_scope(object_type)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "(%s): Popping scope for Op %p\n",
+                                 acpi_ut_get_type_name(object_type), op));
 
-               status = acpi_ds_scope_stack_pop (walk_state);
+               status = acpi_ds_scope_stack_pop(walk_state);
        }
 
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_load2_begin_op
@@ -468,30 +456,53 @@ acpi_ds_load1_end_op (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_load2_begin_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         **out_op)
+acpi_ds_load2_begin_op(struct acpi_walk_state * walk_state,
+                      union acpi_parse_object ** out_op)
 {
-       union acpi_parse_object         *op;
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-       acpi_object_type                object_type;
-       char                            *buffer_ptr;
-
-
-       ACPI_FUNCTION_TRACE ("ds_load2_begin_op");
+       union acpi_parse_object *op;
+       struct acpi_namespace_node *node;
+       acpi_status status;
+       acpi_object_type object_type;
+       char *buffer_ptr;
 
+       ACPI_FUNCTION_TRACE("ds_load2_begin_op");
 
        op = walk_state->op;
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op, walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Op=%p State=%p\n", op,
+                         walk_state));
 
        if (op) {
+               if ((walk_state->control_state) &&
+                   (walk_state->control_state->common.state ==
+                    ACPI_CONTROL_CONDITIONAL_EXECUTING)) {
+                       /* We are executing a while loop outside of a method */
+
+                       status = acpi_ds_exec_begin_op(walk_state, out_op);
+                       return_ACPI_STATUS(status);
+               }
+
                /* We only care about Namespace opcodes here */
 
                if ((!(walk_state->op_info->flags & AML_NSOPCODE) &&
-                         (walk_state->opcode != AML_INT_NAMEPATH_OP)) ||
-                       (!(walk_state->op_info->flags & AML_NAMED))) {
-                       return_ACPI_STATUS (AE_OK);
+                    (walk_state->opcode != AML_INT_NAMEPATH_OP)) ||
+                   (!(walk_state->op_info->flags & AML_NAMED))) {
+#ifdef ACPI_ENABLE_MODULE_LEVEL_CODE
+                       if ((walk_state->op_info->class == AML_CLASS_EXECUTE) ||
+                           (walk_state->op_info->class == AML_CLASS_CONTROL)) {
+
+                               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                                 "Begin/EXEC: %s (fl %8.8X)\n",
+                                                 walk_state->op_info->name,
+                                                 walk_state->op_info->flags));
+
+                               /* Executing a type1 or type2 opcode outside of a method */
+
+                               status =
+                                   acpi_ds_exec_begin_op(walk_state, out_op);
+                               return_ACPI_STATUS(status);
+                       }
+#endif
+                       return_ACPI_STATUS(AE_OK);
                }
 
                /* Get the name we are going to enter or lookup in the namespace */
@@ -503,28 +514,27 @@ acpi_ds_load2_begin_op (
                        if (!buffer_ptr) {
                                /* No name, just exit */
 
-                               return_ACPI_STATUS (AE_OK);
+                               return_ACPI_STATUS(AE_OK);
                        }
-               }
-               else {
+               } else {
                        /* Get name from the op */
 
-                       buffer_ptr = (char *) &op->named.name;
+                       buffer_ptr = (char *)&op->named.name;
                }
-       }
-       else {
+       } else {
                /* Get the namestring from the raw AML */
 
-               buffer_ptr = acpi_ps_get_next_namestring (&walk_state->parser_state);
+               buffer_ptr =
+                   acpi_ps_get_next_namestring(&walk_state->parser_state);
        }
 
        /* Map the opcode into an internal object type */
 
        object_type = walk_state->op_info->object_type;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "State=%p Op=%p Type=%X\n", walk_state, op, object_type));
-
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "State=%p Op=%p Type=%X\n", walk_state, op,
+                         object_type));
 
        switch (walk_state->opcode) {
        case AML_FIELD_OP:
@@ -542,9 +552,10 @@ acpi_ds_load2_begin_op (
                 * Don't enter the name into the namespace, but look it up
                 * for use later.
                 */
-               status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type,
-                                 ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
-                                 walk_state, &(node));
+               status =
+                   acpi_ns_lookup(walk_state->scope_info, buffer_ptr,
+                                  object_type, ACPI_IMODE_EXECUTE,
+                                  ACPI_NS_SEARCH_PARENT, walk_state, &(node));
                break;
 
        case AML_SCOPE_OP:
@@ -554,28 +565,28 @@ acpi_ds_load2_begin_op (
                 * Don't enter the name into the namespace, but look it up
                 * for use later.
                 */
-               status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type,
-                                 ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
-                                 walk_state, &(node));
-               if (ACPI_FAILURE (status)) {
-#ifdef _ACPI_ASL_COMPILER
+               status =
+                   acpi_ns_lookup(walk_state->scope_info, buffer_ptr,
+                                  object_type, ACPI_IMODE_EXECUTE,
+                                  ACPI_NS_SEARCH_PARENT, walk_state, &(node));
+               if (ACPI_FAILURE(status)) {
+#ifdef ACPI_ASL_COMPILER
                        if (status == AE_NOT_FOUND) {
                                status = AE_OK;
-                       }
-                       else {
-                               ACPI_REPORT_NSERROR (buffer_ptr, status);
+                       } else {
+                               ACPI_REPORT_NSERROR(buffer_ptr, status);
                        }
 #else
-                       ACPI_REPORT_NSERROR (buffer_ptr, status);
+                       ACPI_REPORT_NSERROR(buffer_ptr, status);
 #endif
-                       return_ACPI_STATUS (status);
+                       return_ACPI_STATUS(status);
                }
                /*
                 * We must check to make sure that the target is
                 * one of the opcodes that actually opens a scope
                 */
                switch (node->type) {
-               case ACPI_TYPE_LOCAL_SCOPE:         /* Scope */
+               case ACPI_TYPE_LOCAL_SCOPE:     /* Scope */
                case ACPI_TYPE_DEVICE:
                case ACPI_TYPE_POWER:
                case ACPI_TYPE_PROCESSOR:
@@ -596,9 +607,7 @@ acpi_ds_load2_begin_op (
                         *  Scope (DEB) { ... }
                         */
 
-                       ACPI_REPORT_WARNING ((
-                               "Type override - [%4.4s] had invalid type (%s) for Scope operator, changed to (Scope)\n",
-                               buffer_ptr, acpi_ut_get_type_name (node->type)));
+                       ACPI_REPORT_WARNING(("Type override - [%4.4s] had invalid type (%s) for Scope operator, changed to (Scope)\n", buffer_ptr, acpi_ut_get_type_name(node->type)));
 
                        node->type = ACPI_TYPE_ANY;
                        walk_state->scope_info->common.value = ACPI_TYPE_ANY;
@@ -608,9 +617,7 @@ acpi_ds_load2_begin_op (
 
                        /* All other types are an error */
 
-                       ACPI_REPORT_ERROR ((
-                               "Invalid type (%s) for target of Scope operator [%4.4s]\n",
-                               acpi_ut_get_type_name (node->type), buffer_ptr));
+                       ACPI_REPORT_ERROR(("Invalid type (%s) for target of Scope operator [%4.4s]\n", acpi_ut_get_type_name(node->type), buffer_ptr));
 
                        return (AE_AML_OPERAND_TYPE);
                }
@@ -625,14 +632,16 @@ acpi_ds_load2_begin_op (
 
                        node = op->common.node;
 
-                       if (acpi_ns_opens_scope (object_type)) {
-                               status = acpi_ds_scope_stack_push (node, object_type, walk_state);
-                               if (ACPI_FAILURE (status)) {
-                                       return_ACPI_STATUS (status);
+                       if (acpi_ns_opens_scope(object_type)) {
+                               status =
+                                   acpi_ds_scope_stack_push(node, object_type,
+                                                            walk_state);
+                               if (ACPI_FAILURE(status)) {
+                                       return_ACPI_STATUS(status);
                                }
 
                        }
-                       return_ACPI_STATUS (AE_OK);
+                       return_ACPI_STATUS(AE_OK);
                }
 
                /*
@@ -651,24 +660,26 @@ acpi_ds_load2_begin_op (
                        break;
                }
 
-               status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr, object_type,
-                                 ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH,
-                                 walk_state, &(node));
+               /* Add new entry into namespace */
+
+               status =
+                   acpi_ns_lookup(walk_state->scope_info, buffer_ptr,
+                                  object_type, ACPI_IMODE_LOAD_PASS2,
+                                  ACPI_NS_NO_UPSEARCH, walk_state, &(node));
                break;
        }
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_NSERROR (buffer_ptr, status);
-               return_ACPI_STATUS (status);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_NSERROR(buffer_ptr, status);
+               return_ACPI_STATUS(status);
        }
 
-
        if (!op) {
                /* Create a new op */
 
-               op = acpi_ps_alloc_op (walk_state->opcode);
+               op = acpi_ps_alloc_op(walk_state->opcode);
                if (!op) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                /* Initialize the new op */
@@ -676,9 +687,7 @@ acpi_ds_load2_begin_op (
                if (node) {
                        op->named.name = node->name.integer;
                }
-               if (out_op) {
-                       *out_op = op;
-               }
+               *out_op = op;
        }
 
        /*
@@ -687,10 +696,9 @@ acpi_ds_load2_begin_op (
         */
        op->common.node = node;
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_load2_end_op
@@ -704,39 +712,54 @@ acpi_ds_load2_begin_op (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ds_load2_end_op (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
 {
-       union acpi_parse_object         *op;
-       acpi_status                     status = AE_OK;
-       acpi_object_type                object_type;
-       struct acpi_namespace_node      *node;
-       union acpi_parse_object         *arg;
-       struct acpi_namespace_node      *new_node;
+       union acpi_parse_object *op;
+       acpi_status status = AE_OK;
+       acpi_object_type object_type;
+       struct acpi_namespace_node *node;
+       union acpi_parse_object *arg;
+       struct acpi_namespace_node *new_node;
 #ifndef ACPI_NO_METHOD_EXECUTION
-       u32                             i;
+       u32 i;
 #endif
 
-
-       ACPI_FUNCTION_TRACE ("ds_load2_end_op");
+       ACPI_FUNCTION_TRACE("ds_load2_end_op");
 
        op = walk_state->op;
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Opcode [%s] Op %p State %p\n",
-                       walk_state->op_info->name, op, walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, "Opcode [%s] Op %p State %p\n",
+                         walk_state->op_info->name, op, walk_state));
 
-       /* Only interested in opcodes that have namespace objects */
+       /* Check if opcode had an associated namespace object */
 
        if (!(walk_state->op_info->flags & AML_NSOBJECT)) {
-               return_ACPI_STATUS (AE_OK);
+#ifndef ACPI_NO_METHOD_EXECUTION
+#ifdef ACPI_ENABLE_MODULE_LEVEL_CODE
+               /* No namespace object. Executable opcode? */
+
+               if ((walk_state->op_info->class == AML_CLASS_EXECUTE) ||
+                   (walk_state->op_info->class == AML_CLASS_CONTROL)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                         "End/EXEC:   %s (fl %8.8X)\n",
+                                         walk_state->op_info->name,
+                                         walk_state->op_info->flags));
+
+                       /* Executing a type1 or type2 opcode outside of a method */
+
+                       status = acpi_ds_exec_end_op(walk_state);
+                       return_ACPI_STATUS(status);
+               }
+#endif
+#endif
+               return_ACPI_STATUS(AE_OK);
        }
 
        if (op->common.aml_opcode == AML_SCOPE_OP) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                       "Ending scope Op=%p State=%p\n", op, walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "Ending scope Op=%p State=%p\n", op,
+                                 walk_state));
        }
 
-
        object_type = walk_state->op_info->object_type;
 
        /*
@@ -749,18 +772,19 @@ acpi_ds_load2_end_op (
         * Put the Node on the object stack (Contains the ACPI Name of
         * this object)
         */
-       walk_state->operands[0] = (void *) node;
+       walk_state->operands[0] = (void *)node;
        walk_state->num_operands = 1;
 
        /* Pop the scope stack */
 
-       if (acpi_ns_opens_scope (object_type) &&
-          (op->common.aml_opcode != AML_INT_METHODCALL_OP)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s) Popping scope for Op %p\n",
-                       acpi_ut_get_type_name (object_type), op));
+       if (acpi_ns_opens_scope(object_type) &&
+           (op->common.aml_opcode != AML_INT_METHODCALL_OP)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "(%s) Popping scope for Op %p\n",
+                                 acpi_ut_get_type_name(object_type), op));
 
-               status = acpi_ds_scope_stack_pop (walk_state);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ds_scope_stack_pop(walk_state);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
        }
@@ -793,9 +817,10 @@ acpi_ds_load2_end_op (
         * AML_THERMALZONE
         */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "Create-Load [%s] State=%p Op=%p named_obj=%p\n",
-               acpi_ps_get_opcode_name (op->common.aml_opcode), walk_state, op, node));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "Create-Load [%s] State=%p Op=%p named_obj=%p\n",
+                         acpi_ps_get_opcode_name(op->common.aml_opcode),
+                         walk_state, op, node));
 
        /* Decode the opcode */
 
@@ -810,27 +835,32 @@ acpi_ds_load2_end_op (
                 * Create the field object, but the field buffer and index must
                 * be evaluated later during the execution phase
                 */
-               status = acpi_ds_create_buffer_field (op, walk_state);
+               status = acpi_ds_create_buffer_field(op, walk_state);
                break;
 
-
-        case AML_TYPE_NAMED_FIELD:
+       case AML_TYPE_NAMED_FIELD:
 
                switch (op->common.aml_opcode) {
                case AML_INDEX_FIELD_OP:
 
-                       status = acpi_ds_create_index_field (op, (acpi_handle) arg->common.node,
-                                        walk_state);
+                       status =
+                           acpi_ds_create_index_field(op,
+                                                      (acpi_handle) arg->
+                                                      common.node, walk_state);
                        break;
 
                case AML_BANK_FIELD_OP:
 
-                       status = acpi_ds_create_bank_field (op, arg->common.node, walk_state);
+                       status =
+                           acpi_ds_create_bank_field(op, arg->common.node,
+                                                     walk_state);
                        break;
 
                case AML_FIELD_OP:
 
-                       status = acpi_ds_create_field (op, arg->common.node, walk_state);
+                       status =
+                           acpi_ds_create_field(op, arg->common.node,
+                                                walk_state);
                        break;
 
                default:
@@ -839,43 +869,42 @@ acpi_ds_load2_end_op (
                }
                break;
 
+       case AML_TYPE_NAMED_SIMPLE:
 
-        case AML_TYPE_NAMED_SIMPLE:
-
-               status = acpi_ds_create_operands (walk_state, arg);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ds_create_operands(walk_state, arg);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
 
                switch (op->common.aml_opcode) {
                case AML_PROCESSOR_OP:
 
-                       status = acpi_ex_create_processor (walk_state);
+                       status = acpi_ex_create_processor(walk_state);
                        break;
 
                case AML_POWER_RES_OP:
 
-                       status = acpi_ex_create_power_resource (walk_state);
+                       status = acpi_ex_create_power_resource(walk_state);
                        break;
 
                case AML_MUTEX_OP:
 
-                       status = acpi_ex_create_mutex (walk_state);
+                       status = acpi_ex_create_mutex(walk_state);
                        break;
 
                case AML_EVENT_OP:
 
-                       status = acpi_ex_create_event (walk_state);
+                       status = acpi_ex_create_event(walk_state);
                        break;
 
                case AML_DATA_REGION_OP:
 
-                       status = acpi_ex_create_table_region (walk_state);
+                       status = acpi_ex_create_table_region(walk_state);
                        break;
 
                case AML_ALIAS_OP:
 
-                       status = acpi_ex_create_alias (walk_state);
+                       status = acpi_ex_create_alias(walk_state);
                        break;
 
                default:
@@ -888,12 +917,12 @@ acpi_ds_load2_end_op (
                /* Delete operands */
 
                for (i = 1; i < walk_state->num_operands; i++) {
-                       acpi_ut_remove_reference (walk_state->operands[i]);
+                       acpi_ut_remove_reference(walk_state->operands[i]);
                        walk_state->operands[i] = NULL;
                }
 
                break;
-#endif /* ACPI_NO_METHOD_EXECUTION */
+#endif                         /* ACPI_NO_METHOD_EXECUTION */
 
        case AML_TYPE_NAMED_COMPLEX:
 
@@ -909,9 +938,10 @@ acpi_ds_load2_end_op (
                         * If we have a valid region, initialize it
                         * Namespace is NOT locked at this point.
                         */
-                       status = acpi_ev_initialize_region (acpi_ns_get_attached_object (node),
-                                        FALSE);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_ev_initialize_region
+                           (acpi_ns_get_attached_object(node), FALSE);
+                       if (ACPI_FAILURE(status)) {
                                /*
                                 *  If AE_NOT_EXIST is returned, it is not fatal
                                 *  because many regions get created before a handler
@@ -923,13 +953,11 @@ acpi_ds_load2_end_op (
                        }
                        break;
 
-
                case AML_NAME_OP:
 
-                       status = acpi_ds_create_node (walk_state, node, op);
+                       status = acpi_ds_create_node(walk_state, node, op);
                        break;
-#endif /* ACPI_NO_METHOD_EXECUTION */
-
+#endif                         /* ACPI_NO_METHOD_EXECUTION */
 
                default:
                        /* All NAMED_COMPLEX opcodes must be handled above */
@@ -938,27 +966,29 @@ acpi_ds_load2_end_op (
                }
                break;
 
-
        case AML_CLASS_INTERNAL:
 
                /* case AML_INT_NAMEPATH_OP: */
                break;
 
-
        case AML_CLASS_METHOD_CALL:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-                       "RESOLVING-method_call: State=%p Op=%p named_obj=%p\n",
-                       walk_state, op, node));
+               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                 "RESOLVING-method_call: State=%p Op=%p named_obj=%p\n",
+                                 walk_state, op, node));
 
                /*
                 * Lookup the method name and save the Node
                 */
-               status = acpi_ns_lookup (walk_state->scope_info, arg->common.value.string,
-                                 ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS2,
-                                 ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
-                                 walk_state, &(new_node));
-               if (ACPI_SUCCESS (status)) {
+               status =
+                   acpi_ns_lookup(walk_state->scope_info,
+                                  arg->common.value.string, ACPI_TYPE_ANY,
+                                  ACPI_IMODE_LOAD_PASS2,
+                                  ACPI_NS_SEARCH_PARENT |
+                                  ACPI_NS_DONT_OPEN_SCOPE, walk_state,
+                                  &(new_node));
+               if (ACPI_SUCCESS(status)) {
+
                        /*
                         * Make sure that what we found is indeed a method
                         * We didn't search for a method on purpose, to see if the name
@@ -973,24 +1003,20 @@ acpi_ds_load2_end_op (
                         * parser uses, so we can get it again at the end of this scope
                         */
                        op->common.node = new_node;
-               }
-               else {
-                       ACPI_REPORT_NSERROR (arg->common.value.string, status);
+               } else {
+                       ACPI_REPORT_NSERROR(arg->common.value.string, status);
                }
                break;
 
-
        default:
                break;
        }
 
-cleanup:
+      cleanup:
 
        /* Remove the Node pushed at the very beginning */
 
        walk_state->operands[0] = NULL;
        walk_state->num_operands = 0;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 21f4548ff323f9c19af28d8973a845c558cbf5bf..defe956ef7517ebc46a968dfe8d770bf9fa0f6ef 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acdispat.h>
 
-
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dswscope")
-
+ACPI_MODULE_NAME("dswscope")
 
 /****************************************************************************
  *
  *              root scope object (which remains at the stack top.)
  *
  ***************************************************************************/
-
-void
-acpi_ds_scope_stack_clear (
-       struct acpi_walk_state          *walk_state)
+void acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state)
 {
-       union acpi_generic_state        *scope_info;
-
-       ACPI_FUNCTION_NAME ("ds_scope_stack_clear");
+       union acpi_generic_state *scope_info;
 
+       ACPI_FUNCTION_NAME("ds_scope_stack_clear");
 
        while (walk_state->scope_info) {
                /* Pop a scope off the stack */
@@ -78,14 +71,14 @@ acpi_ds_scope_stack_clear (
                scope_info = walk_state->scope_info;
                walk_state->scope_info = scope_info->scope.next;
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "Popped object type (%s)\n",
-                       acpi_ut_get_type_name (scope_info->common.value)));
-               acpi_ut_delete_generic_state (scope_info);
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "Popped object type (%s)\n",
+                                 acpi_ut_get_type_name(scope_info->common.
+                                                       value)));
+               acpi_ut_delete_generic_state(scope_info);
        }
 }
 
-
 /****************************************************************************
  *
  * FUNCTION:    acpi_ds_scope_stack_push
@@ -102,74 +95,70 @@ acpi_ds_scope_stack_clear (
  ***************************************************************************/
 
 acpi_status
-acpi_ds_scope_stack_push (
-       struct acpi_namespace_node      *node,
-       acpi_object_type                type,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_scope_stack_push(struct acpi_namespace_node *node,
+                        acpi_object_type type,
+                        struct acpi_walk_state *walk_state)
 {
-       union acpi_generic_state        *scope_info;
-       union acpi_generic_state        *old_scope_info;
-
-
-       ACPI_FUNCTION_TRACE ("ds_scope_stack_push");
+       union acpi_generic_state *scope_info;
+       union acpi_generic_state *old_scope_info;
 
+       ACPI_FUNCTION_TRACE("ds_scope_stack_push");
 
        if (!node) {
                /* Invalid scope   */
 
-               ACPI_REPORT_ERROR (("ds_scope_stack_push: null scope passed\n"));
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               ACPI_REPORT_ERROR(("ds_scope_stack_push: null scope passed\n"));
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Make sure object type is valid */
 
-       if (!acpi_ut_valid_object_type (type)) {
-               ACPI_REPORT_WARNING ((
-                       "ds_scope_stack_push: Invalid object type: 0x%X\n", type));
+       if (!acpi_ut_valid_object_type(type)) {
+               ACPI_REPORT_WARNING(("ds_scope_stack_push: Invalid object type: 0x%X\n", type));
        }
 
        /* Allocate a new scope object */
 
-       scope_info = acpi_ut_create_generic_state ();
+       scope_info = acpi_ut_create_generic_state();
        if (!scope_info) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Init new scope object */
 
        scope_info->common.data_type = ACPI_DESC_TYPE_STATE_WSCOPE;
-       scope_info->scope.node      = node;
-       scope_info->common.value    = (u16) type;
+       scope_info->scope.node = node;
+       scope_info->common.value = (u16) type;
 
        walk_state->scope_depth++;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "[%.2d] Pushed scope ", (u32) walk_state->scope_depth));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "[%.2d] Pushed scope ",
+                         (u32) walk_state->scope_depth));
 
        old_scope_info = walk_state->scope_info;
        if (old_scope_info) {
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC,
-                       "[%4.4s] (%s)",
-                       acpi_ut_get_node_name (old_scope_info->scope.node),
-                       acpi_ut_get_type_name (old_scope_info->common.value)));
-       }
-       else {
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC,
-                       "[\\___] (%s)", "ROOT"));
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC,
+                                     "[%4.4s] (%s)",
+                                     acpi_ut_get_node_name(old_scope_info->
+                                                           scope.node),
+                                     acpi_ut_get_type_name(old_scope_info->
+                                                           common.value)));
+       } else {
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "[\\___] (%s)", "ROOT"));
        }
 
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC,
-               ", New scope -> [%4.4s] (%s)\n",
-               acpi_ut_get_node_name (scope_info->scope.node),
-               acpi_ut_get_type_name (scope_info->common.value)));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC,
+                             ", New scope -> [%4.4s] (%s)\n",
+                             acpi_ut_get_node_name(scope_info->scope.node),
+                             acpi_ut_get_type_name(scope_info->common.value)));
 
        /* Push new scope object onto stack */
 
-       acpi_ut_push_generic_state (&walk_state->scope_info, scope_info);
-       return_ACPI_STATUS (AE_OK);
+       acpi_ut_push_generic_state(&walk_state->scope_info, scope_info);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /****************************************************************************
  *
  * FUNCTION:    acpi_ds_scope_stack_pop
@@ -182,47 +171,41 @@ acpi_ds_scope_stack_push (
  *
  ***************************************************************************/
 
-acpi_status
-acpi_ds_scope_stack_pop (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state)
 {
-       union acpi_generic_state        *scope_info;
-       union acpi_generic_state        *new_scope_info;
-
-
-       ACPI_FUNCTION_TRACE ("ds_scope_stack_pop");
+       union acpi_generic_state *scope_info;
+       union acpi_generic_state *new_scope_info;
 
+       ACPI_FUNCTION_TRACE("ds_scope_stack_pop");
 
        /*
         * Pop scope info object off the stack.
         */
-       scope_info = acpi_ut_pop_generic_state (&walk_state->scope_info);
+       scope_info = acpi_ut_pop_generic_state(&walk_state->scope_info);
        if (!scope_info) {
-               return_ACPI_STATUS (AE_STACK_UNDERFLOW);
+               return_ACPI_STATUS(AE_STACK_UNDERFLOW);
        }
 
        walk_state->scope_depth--;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "[%.2d] Popped scope [%4.4s] (%s), New scope -> ",
-               (u32) walk_state->scope_depth,
-               acpi_ut_get_node_name (scope_info->scope.node),
-               acpi_ut_get_type_name (scope_info->common.value)));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "[%.2d] Popped scope [%4.4s] (%s), New scope -> ",
+                         (u32) walk_state->scope_depth,
+                         acpi_ut_get_node_name(scope_info->scope.node),
+                         acpi_ut_get_type_name(scope_info->common.value)));
 
        new_scope_info = walk_state->scope_info;
        if (new_scope_info) {
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC,
-                       "[%4.4s] (%s)\n",
-                       acpi_ut_get_node_name (new_scope_info->scope.node),
-                       acpi_ut_get_type_name (new_scope_info->common.value)));
-       }
-       else {
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC,
-                       "[\\___] (ROOT)\n"));
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC,
+                                     "[%4.4s] (%s)\n",
+                                     acpi_ut_get_node_name(new_scope_info->
+                                                           scope.node),
+                                     acpi_ut_get_type_name(new_scope_info->
+                                                           common.value)));
+       } else {
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "[\\___] (ROOT)\n"));
        }
 
-       acpi_ut_delete_generic_state (scope_info);
-       return_ACPI_STATUS (AE_OK);
+       acpi_ut_delete_generic_state(scope_info);
+       return_ACPI_STATUS(AE_OK);
 }
-
-
index 9cd3db652b31cf622fb029522a4bebedc44c37d7..7d68a5aaf3c43bb6423b1d8a33dfdb54bc625840 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/acdispat.h>
 #include <acpi/acnamesp.h>
 
 #define _COMPONENT          ACPI_DISPATCHER
-        ACPI_MODULE_NAME    ("dswstate")
+ACPI_MODULE_NAME("dswstate")
 
 /* Local prototypes */
-
 #ifdef ACPI_OBSOLETE_FUNCTIONS
 acpi_status
-acpi_ds_result_insert (
-       void                            *object,
-       u32                             index,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_result_insert(void *object,
+                     u32 index, struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ds_obj_stack_delete_all (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ds_obj_stack_delete_all(struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_obj_stack_pop_object (
-       union acpi_operand_object       **object,
-       struct acpi_walk_state          *walk_state);
-
-void *
-acpi_ds_obj_stack_get_value (
-       u32                             index,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_obj_stack_pop_object(union acpi_operand_object **object,
+                            struct acpi_walk_state *walk_state);
+
+void *acpi_ds_obj_stack_get_value(u32 index,
+                                 struct acpi_walk_state *walk_state);
 #endif
 
 #ifdef ACPI_FUTURE_USAGE
@@ -92,36 +83,35 @@ acpi_ds_obj_stack_get_value (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_result_remove (
-       union acpi_operand_object       **object,
-       u32                             index,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_result_remove(union acpi_operand_object **object,
+                     u32 index, struct acpi_walk_state *walk_state)
 {
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_NAME ("ds_result_remove");
+       union acpi_generic_state *state;
 
+       ACPI_FUNCTION_NAME("ds_result_remove");
 
        state = walk_state->results;
        if (!state) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result object pushed! State=%p\n",
-                       walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "No result object pushed! State=%p\n",
+                                 walk_state));
                return (AE_NOT_EXIST);
        }
 
        if (index >= ACPI_OBJ_MAX_OPERAND) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Index out of range: %X State=%p Num=%X\n",
-                       index, walk_state, state->results.num_results));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Index out of range: %X State=%p Num=%X\n",
+                                 index, walk_state,
+                                 state->results.num_results));
        }
 
        /* Check for a valid result object */
 
-       if (!state->results.obj_desc [index]) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Null operand! State=%p #Ops=%X, Index=%X\n",
-                       walk_state, state->results.num_results, index));
+       if (!state->results.obj_desc[index]) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Null operand! State=%p #Ops=%X, Index=%X\n",
+                                 walk_state, state->results.num_results,
+                                 index));
                return (AE_AML_NO_RETURN_VALUE);
        }
 
@@ -129,18 +119,20 @@ acpi_ds_result_remove (
 
        state->results.num_results--;
 
-       *object = state->results.obj_desc [index];
-       state->results.obj_desc [index] = NULL;
+       *object = state->results.obj_desc[index];
+       state->results.obj_desc[index] = NULL;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "Obj=%p [%s] Index=%X State=%p Num=%X\n",
-               *object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL",
-               index, walk_state, state->results.num_results));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "Obj=%p [%s] Index=%X State=%p Num=%X\n",
+                         *object,
+                         (*object) ? acpi_ut_get_object_type_name(*object) :
+                         "NULL", index, walk_state,
+                         state->results.num_results));
 
        return (AE_OK);
 }
 
-#endif  /*  ACPI_FUTURE_USAGE  */
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*******************************************************************************
  *
@@ -157,16 +149,13 @@ acpi_ds_result_remove (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_result_pop (
-       union acpi_operand_object       **object,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_result_pop(union acpi_operand_object ** object,
+                  struct acpi_walk_state * walk_state)
 {
-       acpi_native_uint                index;
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_NAME ("ds_result_pop");
+       acpi_native_uint index;
+       union acpi_generic_state *state;
 
+       ACPI_FUNCTION_NAME("ds_result_pop");
 
        state = walk_state->results;
        if (!state) {
@@ -174,8 +163,9 @@ acpi_ds_result_pop (
        }
 
        if (!state->results.num_results) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Result stack is empty! State=%p\n",
-                       walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Result stack is empty! State=%p\n",
+                                 walk_state));
                return (AE_AML_NO_RETURN_VALUE);
        }
 
@@ -186,26 +176,27 @@ acpi_ds_result_pop (
        for (index = ACPI_OBJ_NUM_OPERANDS; index; index--) {
                /* Check for a valid result object */
 
-               if (state->results.obj_desc [index -1]) {
-                       *object = state->results.obj_desc [index -1];
-                       state->results.obj_desc [index -1] = NULL;
+               if (state->results.obj_desc[index - 1]) {
+                       *object = state->results.obj_desc[index - 1];
+                       state->results.obj_desc[index - 1] = NULL;
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                               "Obj=%p [%s] Index=%X State=%p Num=%X\n",
-                               *object,
-                               (*object) ? acpi_ut_get_object_type_name (*object) : "NULL",
-                               (u32) index -1, walk_state, state->results.num_results));
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                         "Obj=%p [%s] Index=%X State=%p Num=%X\n",
+                                         *object,
+                                         (*object) ?
+                                         acpi_ut_get_object_type_name(*object)
+                                         : "NULL", (u32) index - 1, walk_state,
+                                         state->results.num_results));
 
                        return (AE_OK);
                }
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-               "No result objects! State=%p\n", walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                         "No result objects! State=%p\n", walk_state));
        return (AE_AML_NO_RETURN_VALUE);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_result_pop_from_bottom
@@ -221,38 +212,37 @@ acpi_ds_result_pop (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_result_pop_from_bottom (
-       union acpi_operand_object       **object,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_result_pop_from_bottom(union acpi_operand_object ** object,
+                              struct acpi_walk_state * walk_state)
 {
-       acpi_native_uint                index;
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_NAME ("ds_result_pop_from_bottom");
+       acpi_native_uint index;
+       union acpi_generic_state *state;
 
+       ACPI_FUNCTION_NAME("ds_result_pop_from_bottom");
 
        state = walk_state->results;
        if (!state) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Warning: No result object pushed! State=%p\n", walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Warning: No result object pushed! State=%p\n",
+                                 walk_state));
                return (AE_NOT_EXIST);
        }
 
        if (!state->results.num_results) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result objects! State=%p\n",
-                       walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "No result objects! State=%p\n", walk_state));
                return (AE_AML_NO_RETURN_VALUE);
        }
 
        /* Remove Bottom element */
 
-       *object = state->results.obj_desc [0];
+       *object = state->results.obj_desc[0];
 
        /* Push entire stack down one element */
 
        for (index = 0; index < state->results.num_results; index++) {
-               state->results.obj_desc [index] = state->results.obj_desc [index + 1];
+               state->results.obj_desc[index] =
+                   state->results.obj_desc[index + 1];
        }
 
        state->results.num_results--;
@@ -260,20 +250,21 @@ acpi_ds_result_pop_from_bottom (
        /* Check for a valid result object */
 
        if (!*object) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Null operand! State=%p #Ops=%X, Index=%X\n",
-                       walk_state, state->results.num_results, (u32) index));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Null operand! State=%p #Ops=%X Index=%X\n",
+                                 walk_state, state->results.num_results,
+                                 (u32) index));
                return (AE_AML_NO_RETURN_VALUE);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s], Results=%p State=%p\n",
-               *object, (*object) ? acpi_ut_get_object_type_name (*object) : "NULL",
-               state, walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Obj=%p [%s] Results=%p State=%p\n",
+                         *object,
+                         (*object) ? acpi_ut_get_object_type_name(*object) :
+                         "NULL", state, walk_state));
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_result_push
@@ -288,47 +279,50 @@ acpi_ds_result_pop_from_bottom (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_result_push (
-       union acpi_operand_object       *object,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_result_push(union acpi_operand_object * object,
+                   struct acpi_walk_state * walk_state)
 {
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_NAME ("ds_result_push");
+       union acpi_generic_state *state;
 
+       ACPI_FUNCTION_NAME("ds_result_push");
 
        state = walk_state->results;
        if (!state) {
-               ACPI_REPORT_ERROR (("No result stack frame during push\n"));
+               ACPI_REPORT_ERROR(("No result stack frame during push\n"));
                return (AE_AML_INTERNAL);
        }
 
        if (state->results.num_results == ACPI_OBJ_NUM_OPERANDS) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Result stack overflow: Obj=%p State=%p Num=%X\n",
-                       object, walk_state, state->results.num_results));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Result stack overflow: Obj=%p State=%p Num=%X\n",
+                                 object, walk_state,
+                                 state->results.num_results));
                return (AE_STACK_OVERFLOW);
        }
 
        if (!object) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Null Object! Obj=%p State=%p Num=%X\n",
-                       object, walk_state, state->results.num_results));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Null Object! Obj=%p State=%p Num=%X\n",
+                                 object, walk_state,
+                                 state->results.num_results));
                return (AE_BAD_PARAMETER);
        }
 
-       state->results.obj_desc [state->results.num_results] = object;
+       state->results.obj_desc[state->results.num_results] = object;
        state->results.num_results++;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p Num=%X Cur=%X\n",
-               object, object ? acpi_ut_get_object_type_name ((union acpi_operand_object *) object) : "NULL",
-               walk_state, state->results.num_results, walk_state->current_result));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Obj=%p [%s] State=%p Num=%X Cur=%X\n",
+                         object,
+                         object ?
+                         acpi_ut_get_object_type_name((union
+                                                       acpi_operand_object *)
+                                                      object) : "NULL",
+                         walk_state, state->results.num_results,
+                         walk_state->current_result));
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_result_stack_push
@@ -341,30 +335,26 @@ acpi_ds_result_push (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ds_result_stack_push (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ds_result_stack_push(struct acpi_walk_state * walk_state)
 {
-       union acpi_generic_state        *state;
-
-       ACPI_FUNCTION_NAME ("ds_result_stack_push");
+       union acpi_generic_state *state;
 
+       ACPI_FUNCTION_NAME("ds_result_stack_push");
 
-       state = acpi_ut_create_generic_state ();
+       state = acpi_ut_create_generic_state();
        if (!state) {
                return (AE_NO_MEMORY);
        }
 
        state->common.data_type = ACPI_DESC_TYPE_STATE_RESULT;
-       acpi_ut_push_generic_state (&walk_state->results, state);
+       acpi_ut_push_generic_state(&walk_state->results, state);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Results=%p State=%p\n",
-               state, walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Results=%p State=%p\n",
+                         state, walk_state));
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_result_stack_pop
@@ -377,35 +367,31 @@ acpi_ds_result_stack_push (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ds_result_stack_pop (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ds_result_stack_pop(struct acpi_walk_state * walk_state)
 {
-       union acpi_generic_state        *state;
-
-       ACPI_FUNCTION_NAME ("ds_result_stack_pop");
+       union acpi_generic_state *state;
 
+       ACPI_FUNCTION_NAME("ds_result_stack_pop");
 
        /* Check for stack underflow */
 
        if (walk_state->results == NULL) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Underflow - State=%p\n",
-                       walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Underflow - State=%p\n",
+                                 walk_state));
                return (AE_AML_NO_OPERAND);
        }
 
-       state = acpi_ut_pop_generic_state (&walk_state->results);
+       state = acpi_ut_pop_generic_state(&walk_state->results);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "Result=%p remaining_results=%X State=%p\n",
-               state, state->results.num_results, walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "Result=%p remaining_results=%X State=%p\n",
+                         state, state->results.num_results, walk_state));
 
-       acpi_ut_delete_generic_state (state);
+       acpi_ut_delete_generic_state(state);
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_obj_stack_push
@@ -420,35 +406,35 @@ acpi_ds_result_stack_pop (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_obj_stack_push (
-       void                            *object,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_obj_stack_push(void *object, struct acpi_walk_state * walk_state)
 {
-       ACPI_FUNCTION_NAME ("ds_obj_stack_push");
-
+       ACPI_FUNCTION_NAME("ds_obj_stack_push");
 
        /* Check for stack overflow */
 
        if (walk_state->num_operands >= ACPI_OBJ_NUM_OPERANDS) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "overflow! Obj=%p State=%p #Ops=%X\n",
-                       object, walk_state, walk_state->num_operands));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "overflow! Obj=%p State=%p #Ops=%X\n",
+                                 object, walk_state,
+                                 walk_state->num_operands));
                return (AE_STACK_OVERFLOW);
        }
 
        /* Put the object onto the stack */
 
-       walk_state->operands [walk_state->num_operands] = object;
+       walk_state->operands[walk_state->num_operands] = object;
        walk_state->num_operands++;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n",
-                         object, acpi_ut_get_object_type_name ((union acpi_operand_object *) object),
-                         walk_state, walk_state->num_operands));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n",
+                         object,
+                         acpi_ut_get_object_type_name((union
+                                                       acpi_operand_object *)
+                                                      object), walk_state,
+                         walk_state->num_operands));
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_obj_stack_pop
@@ -464,38 +450,35 @@ acpi_ds_obj_stack_push (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_obj_stack_pop (
-       u32                             pop_count,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state * walk_state)
 {
-       u32                             i;
-
-       ACPI_FUNCTION_NAME ("ds_obj_stack_pop");
+       u32 i;
 
+       ACPI_FUNCTION_NAME("ds_obj_stack_pop");
 
        for (i = 0; i < pop_count; i++) {
                /* Check for stack underflow */
 
                if (walk_state->num_operands == 0) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Underflow! Count=%X State=%p #Ops=%X\n",
-                               pop_count, walk_state, walk_state->num_operands));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Underflow! Count=%X State=%p #Ops=%X\n",
+                                         pop_count, walk_state,
+                                         walk_state->num_operands));
                        return (AE_STACK_UNDERFLOW);
                }
 
                /* Just set the stack entry to null */
 
                walk_state->num_operands--;
-               walk_state->operands [walk_state->num_operands] = NULL;
+               walk_state->operands[walk_state->num_operands] = NULL;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n",
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n",
                          pop_count, walk_state, walk_state->num_operands));
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_obj_stack_pop_and_delete
@@ -511,44 +494,43 @@ acpi_ds_obj_stack_pop (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_obj_stack_pop_and_delete (
-       u32                             pop_count,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
+                                struct acpi_walk_state * walk_state)
 {
-       u32                             i;
-       union acpi_operand_object       *obj_desc;
-
-
-       ACPI_FUNCTION_NAME ("ds_obj_stack_pop_and_delete");
+       u32 i;
+       union acpi_operand_object *obj_desc;
 
+       ACPI_FUNCTION_NAME("ds_obj_stack_pop_and_delete");
 
        for (i = 0; i < pop_count; i++) {
                /* Check for stack underflow */
 
                if (walk_state->num_operands == 0) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Underflow! Count=%X State=%p #Ops=%X\n",
-                               pop_count, walk_state, walk_state->num_operands));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Underflow! Count=%X State=%p #Ops=%X\n",
+                                         pop_count, walk_state,
+                                         walk_state->num_operands));
                        return (AE_STACK_UNDERFLOW);
                }
 
                /* Pop the stack and delete an object if present in this stack entry */
 
                walk_state->num_operands--;
-               obj_desc = walk_state->operands [walk_state->num_operands];
+               obj_desc = walk_state->operands[walk_state->num_operands];
                if (obj_desc) {
-                       acpi_ut_remove_reference (walk_state->operands [walk_state->num_operands]);
-                       walk_state->operands [walk_state->num_operands] = NULL;
+                       acpi_ut_remove_reference(walk_state->
+                                                operands[walk_state->
+                                                         num_operands]);
+                       walk_state->operands[walk_state->num_operands] = NULL;
                }
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n",
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Count=%X State=%p #Ops=%X\n",
                          pop_count, walk_state, walk_state->num_operands));
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_get_current_walk_state
@@ -562,25 +544,21 @@ acpi_ds_obj_stack_pop_and_delete (
  *
  ******************************************************************************/
 
-struct acpi_walk_state *
-acpi_ds_get_current_walk_state (
-       struct acpi_thread_state        *thread)
-
+struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state
+                                                      *thread)
 {
-       ACPI_FUNCTION_NAME ("ds_get_current_walk_state");
-
+       ACPI_FUNCTION_NAME("ds_get_current_walk_state");
 
        if (!thread) {
                return (NULL);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Current walk_state %p\n",
-               thread->walk_state_list));
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "Current walk_state %p\n",
+                         thread->walk_state_list));
 
        return (thread->walk_state_list);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_push_walk_state
@@ -595,20 +573,17 @@ acpi_ds_get_current_walk_state (
  ******************************************************************************/
 
 void
-acpi_ds_push_walk_state (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_thread_state        *thread)
+acpi_ds_push_walk_state(struct acpi_walk_state *walk_state,
+                       struct acpi_thread_state *thread)
 {
-       ACPI_FUNCTION_TRACE ("ds_push_walk_state");
-
+       ACPI_FUNCTION_TRACE("ds_push_walk_state");
 
-       walk_state->next      = thread->walk_state_list;
+       walk_state->next = thread->walk_state_list;
        thread->walk_state_list = walk_state;
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_pop_walk_state
@@ -623,15 +598,11 @@ acpi_ds_push_walk_state (
  *
  ******************************************************************************/
 
-struct acpi_walk_state *
-acpi_ds_pop_walk_state (
-       struct acpi_thread_state        *thread)
+struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state *thread)
 {
-       struct acpi_walk_state          *walk_state;
-
-
-       ACPI_FUNCTION_TRACE ("ds_pop_walk_state");
+       struct acpi_walk_state *walk_state;
 
+       ACPI_FUNCTION_TRACE("ds_pop_walk_state");
 
        walk_state = thread->walk_state_list;
 
@@ -647,10 +618,9 @@ acpi_ds_pop_walk_state (
                 */
        }
 
-       return_PTR (walk_state);
+       return_PTR(walk_state);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_create_walk_state
@@ -667,57 +637,55 @@ acpi_ds_pop_walk_state (
  *
  ******************************************************************************/
 
-struct acpi_walk_state *
-acpi_ds_create_walk_state (
-       acpi_owner_id                   owner_id,
-       union acpi_parse_object         *origin,
-       union acpi_operand_object       *mth_desc,
-       struct acpi_thread_state        *thread)
+struct acpi_walk_state *acpi_ds_create_walk_state(acpi_owner_id owner_id,
+                                                 union acpi_parse_object
+                                                 *origin,
+                                                 union acpi_operand_object
+                                                 *mth_desc,
+                                                 struct acpi_thread_state
+                                                 *thread)
 {
-       struct acpi_walk_state          *walk_state;
-       acpi_status                     status;
-
+       struct acpi_walk_state *walk_state;
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("ds_create_walk_state");
+       ACPI_FUNCTION_TRACE("ds_create_walk_state");
 
-
-       walk_state = acpi_ut_acquire_from_cache (ACPI_MEM_LIST_WALK);
+       walk_state = ACPI_MEM_CALLOCATE(sizeof(struct acpi_walk_state));
        if (!walk_state) {
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
-       walk_state->data_type       = ACPI_DESC_TYPE_WALK;
-       walk_state->owner_id        = owner_id;
-       walk_state->origin          = origin;
-       walk_state->method_desc     = mth_desc;
-       walk_state->thread          = thread;
+       walk_state->data_type = ACPI_DESC_TYPE_WALK;
+       walk_state->owner_id = owner_id;
+       walk_state->origin = origin;
+       walk_state->method_desc = mth_desc;
+       walk_state->thread = thread;
 
        walk_state->parser_state.start_op = origin;
 
        /* Init the method args/local */
 
 #if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
-       acpi_ds_method_data_init (walk_state);
+       acpi_ds_method_data_init(walk_state);
 #endif
 
        /* Create an initial result stack entry */
 
-       status = acpi_ds_result_stack_push (walk_state);
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_release_to_cache (ACPI_MEM_LIST_WALK, walk_state);
-               return_PTR (NULL);
+       status = acpi_ds_result_stack_push(walk_state);
+       if (ACPI_FAILURE(status)) {
+               ACPI_MEM_FREE(walk_state);
+               return_PTR(NULL);
        }
 
        /* Put the new state at the head of the walk list */
 
        if (thread) {
-               acpi_ds_push_walk_state (walk_state, thread);
+               acpi_ds_push_walk_state(walk_state, thread);
        }
 
-       return_PTR (walk_state);
+       return_PTR(walk_state);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_init_aml_walk
@@ -737,70 +705,70 @@ acpi_ds_create_walk_state (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_init_aml_walk (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       struct acpi_namespace_node      *method_node,
-       u8                              *aml_start,
-       u32                             aml_length,
-       struct acpi_parameter_info      *info,
-       u32                             pass_number)
+acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
+                     union acpi_parse_object *op,
+                     struct acpi_namespace_node *method_node,
+                     u8 * aml_start,
+                     u32 aml_length,
+                     struct acpi_parameter_info *info, u8 pass_number)
 {
-       acpi_status                     status;
-       struct acpi_parse_state         *parser_state = &walk_state->parser_state;
-       union acpi_parse_object         *extra_op;
+       acpi_status status;
+       struct acpi_parse_state *parser_state = &walk_state->parser_state;
+       union acpi_parse_object *extra_op;
 
+       ACPI_FUNCTION_TRACE("ds_init_aml_walk");
 
-       ACPI_FUNCTION_TRACE ("ds_init_aml_walk");
-
-
-       walk_state->parser_state.aml    =
-       walk_state->parser_state.aml_start = aml_start;
+       walk_state->parser_state.aml =
+           walk_state->parser_state.aml_start = aml_start;
        walk_state->parser_state.aml_end =
-       walk_state->parser_state.pkg_end = aml_start + aml_length;
+           walk_state->parser_state.pkg_end = aml_start + aml_length;
 
        /* The next_op of the next_walk will be the beginning of the method */
 
        walk_state->next_op = NULL;
+       walk_state->pass_number = pass_number;
 
        if (info) {
                if (info->parameter_type == ACPI_PARAM_GPE) {
-                       walk_state->gpe_event_info = ACPI_CAST_PTR (struct acpi_gpe_event_info,
-                                          info->parameters);
-               }
-               else {
-                       walk_state->params          = info->parameters;
+                       walk_state->gpe_event_info =
+                           ACPI_CAST_PTR(struct acpi_gpe_event_info,
+                                         info->parameters);
+               else {
+                       walk_state->params = info->parameters;
                        walk_state->caller_return_desc = &info->return_object;
                }
        }
 
-       status = acpi_ps_init_scope (&walk_state->parser_state, op);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ps_init_scope(&walk_state->parser_state, op);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        if (method_node) {
                walk_state->parser_state.start_node = method_node;
-               walk_state->walk_type            = ACPI_WALK_METHOD;
-               walk_state->method_node          = method_node;
-               walk_state->method_desc          = acpi_ns_get_attached_object (method_node);
+               walk_state->walk_type = ACPI_WALK_METHOD;
+               walk_state->method_node = method_node;
+               walk_state->method_desc =
+                   acpi_ns_get_attached_object(method_node);
 
                /* Push start scope on scope stack and make it current  */
 
-               status = acpi_ds_scope_stack_push (method_node, ACPI_TYPE_METHOD, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ds_scope_stack_push(method_node, ACPI_TYPE_METHOD,
+                                            walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /* Init the method arguments */
 
-               status = acpi_ds_method_data_init_args (walk_state->params,
-                                ACPI_METHOD_NUM_ARGS, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ds_method_data_init_args(walk_state->params,
+                                                      ACPI_METHOD_NUM_ARGS,
+                                                      walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
-       }
-       else {
+       } else {
                /*
                 * Setup the current scope.
                 * Find a Named Op that has a namespace node associated with it.
@@ -814,27 +782,27 @@ acpi_ds_init_aml_walk (
 
                if (!extra_op) {
                        parser_state->start_node = NULL;
-               }
-               else {
+               } else {
                        parser_state->start_node = extra_op->common.node;
                }
 
                if (parser_state->start_node) {
                        /* Push start scope on scope stack and make it current  */
 
-                       status = acpi_ds_scope_stack_push (parser_state->start_node,
-                                         parser_state->start_node->type, walk_state);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status =
+                           acpi_ds_scope_stack_push(parser_state->start_node,
+                                                    parser_state->start_node->
+                                                    type, walk_state);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
                }
        }
 
-       status = acpi_ds_init_callbacks (walk_state, pass_number);
-       return_ACPI_STATUS (status);
+       status = acpi_ds_init_callbacks(walk_state, pass_number);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_delete_walk_state
@@ -847,29 +815,27 @@ acpi_ds_init_aml_walk (
  *
  ******************************************************************************/
 
-void
-acpi_ds_delete_walk_state (
-       struct acpi_walk_state          *walk_state)
+void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state)
 {
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_delete_walk_state", walk_state);
+       union acpi_generic_state *state;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_delete_walk_state", walk_state);
 
        if (!walk_state) {
                return;
        }
 
        if (walk_state->data_type != ACPI_DESC_TYPE_WALK) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p is not a valid walk state\n",
-                       walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "%p is not a valid walk state\n",
+                                 walk_state));
                return;
        }
 
        if (walk_state->parser_state.scope) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%p walk still has a scope list\n",
-                       walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "%p walk still has a scope list\n",
+                                 walk_state));
        }
 
        /* Always must free any linked control states */
@@ -878,7 +844,7 @@ acpi_ds_delete_walk_state (
                state = walk_state->control_state;
                walk_state->control_state = state->common.next;
 
-               acpi_ut_delete_generic_state (state);
+               acpi_ut_delete_generic_state(state);
        }
 
        /* Always must free any linked parse states */
@@ -887,7 +853,7 @@ acpi_ds_delete_walk_state (
                state = walk_state->scope_info;
                walk_state->scope_info = state->common.next;
 
-               acpi_ut_delete_generic_state (state);
+               acpi_ut_delete_generic_state(state);
        }
 
        /* Always must free any stacked result states */
@@ -896,40 +862,12 @@ acpi_ds_delete_walk_state (
                state = walk_state->results;
                walk_state->results = state->common.next;
 
-               acpi_ut_delete_generic_state (state);
+               acpi_ut_delete_generic_state(state);
        }
 
-       acpi_ut_release_to_cache (ACPI_MEM_LIST_WALK, walk_state);
-       return_VOID;
-}
-
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
-/******************************************************************************
- *
- * FUNCTION:    acpi_ds_delete_walk_state_cache
- *
- * PARAMETERS:  None
- *
- * RETURN:      None
- *
- * DESCRIPTION: Purge the global state object cache.  Used during subsystem
- *              termination.
- *
- ******************************************************************************/
-
-void
-acpi_ds_delete_walk_state_cache (
-       void)
-{
-       ACPI_FUNCTION_TRACE ("ds_delete_walk_state_cache");
-
-
-       acpi_ut_delete_generic_cache (ACPI_MEM_LIST_WALK);
+       ACPI_MEM_FREE(walk_state);
        return_VOID;
 }
-#endif
-
 
 #ifdef ACPI_OBSOLETE_FUNCTIONS
 /*******************************************************************************
@@ -947,50 +885,53 @@ acpi_ds_delete_walk_state_cache (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_result_insert (
-       void                            *object,
-       u32                             index,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_result_insert(void *object,
+                     u32 index, struct acpi_walk_state *walk_state)
 {
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_NAME ("ds_result_insert");
+       union acpi_generic_state *state;
 
+       ACPI_FUNCTION_NAME("ds_result_insert");
 
        state = walk_state->results;
        if (!state) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No result object pushed! State=%p\n",
-                       walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "No result object pushed! State=%p\n",
+                                 walk_state));
                return (AE_NOT_EXIST);
        }
 
        if (index >= ACPI_OBJ_NUM_OPERANDS) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Index out of range: %X Obj=%p State=%p Num=%X\n",
-                       index, object, walk_state, state->results.num_results));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Index out of range: %X Obj=%p State=%p Num=%X\n",
+                                 index, object, walk_state,
+                                 state->results.num_results));
                return (AE_BAD_PARAMETER);
        }
 
        if (!object) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Null Object! Index=%X Obj=%p State=%p Num=%X\n",
-                       index, object, walk_state, state->results.num_results));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Null Object! Index=%X Obj=%p State=%p Num=%X\n",
+                                 index, object, walk_state,
+                                 state->results.num_results));
                return (AE_BAD_PARAMETER);
        }
 
-       state->results.obj_desc [index] = object;
+       state->results.obj_desc[index] = object;
        state->results.num_results++;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "Obj=%p [%s] State=%p Num=%X Cur=%X\n",
-               object, object ? acpi_ut_get_object_type_name ((union acpi_operand_object *) object) : "NULL",
-               walk_state, state->results.num_results, walk_state->current_result));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "Obj=%p [%s] State=%p Num=%X Cur=%X\n",
+                         object,
+                         object ?
+                         acpi_ut_get_object_type_name((union
+                                                       acpi_operand_object *)
+                                                      object) : "NULL",
+                         walk_state, state->results.num_results,
+                         walk_state->current_result));
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_obj_stack_delete_all
@@ -1004,29 +945,24 @@ acpi_ds_result_insert (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ds_obj_stack_delete_all (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ds_obj_stack_delete_all(struct acpi_walk_state * walk_state)
 {
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ds_obj_stack_delete_all", walk_state);
+       u32 i;
 
+       ACPI_FUNCTION_TRACE_PTR("ds_obj_stack_delete_all", walk_state);
 
        /* The stack size is configurable, but fixed */
 
        for (i = 0; i < ACPI_OBJ_NUM_OPERANDS; i++) {
                if (walk_state->operands[i]) {
-                       acpi_ut_remove_reference (walk_state->operands[i]);
+                       acpi_ut_remove_reference(walk_state->operands[i]);
                        walk_state->operands[i] = NULL;
                }
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_obj_stack_pop_object
@@ -1042,19 +978,17 @@ acpi_ds_obj_stack_delete_all (
  ******************************************************************************/
 
 acpi_status
-acpi_ds_obj_stack_pop_object (
-       union acpi_operand_object       **object,
-       struct acpi_walk_state          *walk_state)
+acpi_ds_obj_stack_pop_object(union acpi_operand_object **object,
+                            struct acpi_walk_state *walk_state)
 {
-       ACPI_FUNCTION_NAME ("ds_obj_stack_pop_object");
-
+       ACPI_FUNCTION_NAME("ds_obj_stack_pop_object");
 
        /* Check for stack underflow */
 
        if (walk_state->num_operands == 0) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Missing operand/stack empty! State=%p #Ops=%X\n",
-                       walk_state, walk_state->num_operands));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Missing operand/stack empty! State=%p #Ops=%X\n",
+                                 walk_state, walk_state->num_operands));
                *object = NULL;
                return (AE_AML_NO_OPERAND);
        }
@@ -1065,27 +999,26 @@ acpi_ds_obj_stack_pop_object (
 
        /* Check for a valid operand */
 
-       if (!walk_state->operands [walk_state->num_operands]) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Null operand! State=%p #Ops=%X\n",
-                       walk_state, walk_state->num_operands));
+       if (!walk_state->operands[walk_state->num_operands]) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Null operand! State=%p #Ops=%X\n",
+                                 walk_state, walk_state->num_operands));
                *object = NULL;
                return (AE_AML_NO_OPERAND);
        }
 
        /* Get operand and set stack entry to null */
 
-       *object = walk_state->operands [walk_state->num_operands];
-       walk_state->operands [walk_state->num_operands] = NULL;
+       *object = walk_state->operands[walk_state->num_operands];
+       walk_state->operands[walk_state->num_operands] = NULL;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n",
-                         *object, acpi_ut_get_object_type_name (*object),
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Obj=%p [%s] State=%p #Ops=%X\n",
+                         *object, acpi_ut_get_object_type_name(*object),
                          walk_state, walk_state->num_operands));
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_obj_stack_get_value
@@ -1101,30 +1034,25 @@ acpi_ds_obj_stack_pop_object (
  *
  ******************************************************************************/
 
-void *
-acpi_ds_obj_stack_get_value (
-       u32                             index,
-       struct acpi_walk_state          *walk_state)
+void *acpi_ds_obj_stack_get_value(u32 index, struct acpi_walk_state *walk_state)
 {
 
-       ACPI_FUNCTION_TRACE_PTR ("ds_obj_stack_get_value", walk_state);
-
+       ACPI_FUNCTION_TRACE_PTR("ds_obj_stack_get_value", walk_state);
 
        /* Can't do it if the stack is empty */
 
        if (walk_state->num_operands == 0) {
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
        /* or if the index is past the top of the stack */
 
        if (index > (walk_state->num_operands - (u32) 1)) {
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
-       return_PTR (walk_state->operands[(acpi_native_uint)(walk_state->num_operands - 1) -
-                         index]);
+       return_PTR(walk_state->
+                  operands[(acpi_native_uint) (walk_state->num_operands - 1) -
+                           index]);
 }
 #endif
-
-
index 1ac5731d45e5aece6a021e7bb548139a9034b9b5..7e1a445955bc1fd5a747038a4b2b1e867cf42b08 100644 (file)
 #include <acpi/actypes.h>
 
 #define _COMPONENT             ACPI_EC_COMPONENT
-ACPI_MODULE_NAME               ("acpi_ec")
-
+ACPI_MODULE_NAME("acpi_ec")
 #define ACPI_EC_COMPONENT              0x00100000
 #define ACPI_EC_CLASS                  "embedded_controller"
 #define ACPI_EC_HID                    "PNP0C09"
 #define ACPI_EC_DRIVER_NAME            "ACPI Embedded Controller Driver"
 #define ACPI_EC_DEVICE_NAME            "Embedded Controller"
 #define ACPI_EC_FILE_INFO              "info"
-
-
 #define ACPI_EC_FLAG_OBF       0x01    /* Output buffer full */
 #define ACPI_EC_FLAG_IBF       0x02    /* Input buffer full */
 #define ACPI_EC_FLAG_BURST     0x10    /* burst mode */
 #define ACPI_EC_FLAG_SCI       0x20    /* EC-SCI occurred */
-
 #define ACPI_EC_EVENT_OBF      0x01    /* Output buffer full */
 #define ACPI_EC_EVENT_IBE      0x02    /* Input buffer empty */
-
 #define ACPI_EC_DELAY          50      /* Wait 50ms max. during EC ops */
 #define ACPI_EC_UDELAY_GLK     1000    /* Wait 1ms max. to get global lock */
-
-#define ACPI_EC_UDELAY         100     /* Poll @ 100us increments */
-#define ACPI_EC_UDELAY_COUNT   1000    /* Wait 10ms max. during EC ops */
-
+#define ACPI_EC_UDELAY         100     /* Poll @ 100us increments */
+#define ACPI_EC_UDELAY_COUNT   1000    /* Wait 10ms max. during EC ops */
 #define ACPI_EC_COMMAND_READ   0x80
 #define ACPI_EC_COMMAND_WRITE  0x81
 #define ACPI_EC_BURST_ENABLE   0x82
 #define ACPI_EC_BURST_DISABLE  0x83
 #define ACPI_EC_COMMAND_QUERY  0x84
-
 #define EC_POLLING             0xFF
 #define EC_BURST               0x00
-
-
-static int acpi_ec_remove (struct acpi_device *device, int type);
-static int acpi_ec_start (struct acpi_device *device);
-static int acpi_ec_stop (struct acpi_device *device, int type);
-static int acpi_ec_burst_add ( struct acpi_device *device);
-static int acpi_ec_polling_add ( struct acpi_device    *device);
+static int acpi_ec_remove(struct acpi_device *device, int type);
+static int acpi_ec_start(struct acpi_device *device);
+static int acpi_ec_stop(struct acpi_device *device, int type);
+static int acpi_ec_burst_add(struct acpi_device *device);
+static int acpi_ec_polling_add(struct acpi_device *device);
 
 static struct acpi_driver acpi_ec_driver = {
-       .name =         ACPI_EC_DRIVER_NAME,
-       .class =        ACPI_EC_CLASS,
-       .ids =          ACPI_EC_HID,
-       .ops =          {
-                               .add =          acpi_ec_polling_add,
-                               .remove =       acpi_ec_remove,
-                               .start =        acpi_ec_start,
-                               .stop =         acpi_ec_stop,
-                       },
+       .name = ACPI_EC_DRIVER_NAME,
+       .class = ACPI_EC_CLASS,
+       .ids = ACPI_EC_HID,
+       .ops = {
+               .add = acpi_ec_polling_add,
+               .remove = acpi_ec_remove,
+               .start = acpi_ec_start,
+               .stop = acpi_ec_stop,
+               },
 };
 union acpi_ec {
        struct {
-               u32                             mode;
-               acpi_handle                     handle;
-               unsigned long                   uid;
-               unsigned long                   gpe_bit;
-               struct acpi_generic_address     status_addr;
-               struct acpi_generic_address     command_addr;
-               struct acpi_generic_address     data_addr;
-               unsigned long                   global_lock;
+               u32 mode;
+               acpi_handle handle;
+               unsigned long uid;
+               unsigned long gpe_bit;
+               struct acpi_generic_address status_addr;
+               struct acpi_generic_address command_addr;
+               struct acpi_generic_address data_addr;
+               unsigned long global_lock;
        } common;
 
        struct {
-               u32                             mode;
-               acpi_handle                     handle;
-               unsigned long                   uid;
-               unsigned long                   gpe_bit;
-               struct acpi_generic_address     status_addr;
-               struct acpi_generic_address     command_addr;
-               struct acpi_generic_address     data_addr;
-               unsigned long                   global_lock;
-               unsigned int                    expect_event;
-               atomic_t                        leaving_burst; /* 0 : No, 1 : Yes, 2: abort*/
-               atomic_t                        pending_gpe;
-               struct semaphore                sem;
-               wait_queue_head_t               wait;
-       }burst;
+               u32 mode;
+               acpi_handle handle;
+               unsigned long uid;
+               unsigned long gpe_bit;
+               struct acpi_generic_address status_addr;
+               struct acpi_generic_address command_addr;
+               struct acpi_generic_address data_addr;
+               unsigned long global_lock;
+               unsigned int expect_event;
+               atomic_t leaving_burst; /* 0 : No, 1 : Yes, 2: abort */
+               atomic_t pending_gpe;
+               struct semaphore sem;
+               wait_queue_head_t wait;
+       } burst;
 
        struct {
-               u32                             mode;
-               acpi_handle                     handle;
-               unsigned long                   uid;
-               unsigned long                   gpe_bit;
-               struct acpi_generic_address     status_addr;
-               struct acpi_generic_address     command_addr;
-               struct acpi_generic_address     data_addr;
-               unsigned long                   global_lock;
-                       spinlock_t                      lock;
-       }polling;
+               u32 mode;
+               acpi_handle handle;
+               unsigned long uid;
+               unsigned long gpe_bit;
+               struct acpi_generic_address status_addr;
+               struct acpi_generic_address command_addr;
+               struct acpi_generic_address data_addr;
+               unsigned long global_lock;
+               spinlock_t lock;
+       } polling;
 };
 
-static int acpi_ec_polling_wait ( union acpi_ec *ec, u8 event); 
+static int acpi_ec_polling_wait(union acpi_ec *ec, u8 event);
 static int acpi_ec_burst_wait(union acpi_ec *ec, unsigned int event);
-static int acpi_ec_polling_read ( union acpi_ec *ec, u8 address, u32 *data);
-static int acpi_ec_burst_read( union acpi_ec *ec, u8 address, u32 *data);
-static int acpi_ec_polling_write ( union acpi_ec *ec, u8 address, u8 data);
-static int acpi_ec_burst_write ( union acpi_ec *ec, u8 address, u8 data);
-static int acpi_ec_polling_query ( union acpi_ec *ec, u32 *data);
-static int acpi_ec_burst_query ( union acpi_ec *ec, u32 *data);
-static void acpi_ec_gpe_polling_query ( void *ec_cxt);
-static void acpi_ec_gpe_burst_query ( void *ec_cxt);
-static u32 acpi_ec_gpe_polling_handler ( void *data);
-static u32 acpi_ec_gpe_burst_handler ( void *data);
+static int acpi_ec_polling_read(union acpi_ec *ec, u8 address, u32 * data);
+static int acpi_ec_burst_read(union acpi_ec *ec, u8 address, u32 * data);
+static int acpi_ec_polling_write(union acpi_ec *ec, u8 address, u8 data);
+static int acpi_ec_burst_write(union acpi_ec *ec, u8 address, u8 data);
+static int acpi_ec_polling_query(union acpi_ec *ec, u32 * data);
+static int acpi_ec_burst_query(union acpi_ec *ec, u32 * data);
+static void acpi_ec_gpe_polling_query(void *ec_cxt);
+static void acpi_ec_gpe_burst_query(void *ec_cxt);
+static u32 acpi_ec_gpe_polling_handler(void *data);
+static u32 acpi_ec_gpe_burst_handler(void *data);
 static acpi_status __init
-acpi_fake_ecdt_polling_callback (
-       acpi_handle     handle,
-       u32             Level,
-       void            *context,
-       void            **retval);
+acpi_fake_ecdt_polling_callback(acpi_handle handle,
+                               u32 Level, void *context, void **retval);
 
 static acpi_status __init
-acpi_fake_ecdt_burst_callback (
-       acpi_handle     handle,
-       u32             Level,
-       void            *context,
-       void            **retval);
-
-static int __init
-acpi_ec_polling_get_real_ecdt(void);
-static int __init
-acpi_ec_burst_get_real_ecdt(void);
+acpi_fake_ecdt_burst_callback(acpi_handle handle,
+                             u32 Level, void *context, void **retval);
+
+static int __init acpi_ec_polling_get_real_ecdt(void);
+static int __init acpi_ec_burst_get_real_ecdt(void);
 /* If we find an EC via the ECDT, we need to keep a ptr to its context */
-static union acpi_ec   *ec_ecdt;
+static union acpi_ec *ec_ecdt;
 
 /* External interfaces use first EC only, so remember */
 static struct acpi_device *first_ec;
@@ -173,30 +155,24 @@ static int acpi_ec_polling_mode = EC_POLLING;
 
 static inline u32 acpi_ec_read_status(union acpi_ec *ec)
 {
-       u32     status = 0;
+       u32 status = 0;
 
        acpi_hw_low_level_read(8, &status, &ec->common.status_addr);
        return status;
 }
 
-static int
-acpi_ec_wait (
-       union acpi_ec           *ec,
-       u8                      event)
+static int acpi_ec_wait(union acpi_ec *ec, u8 event)
 {
-       if (acpi_ec_polling_mode) 
-               return acpi_ec_polling_wait (ec, event);
+       if (acpi_ec_polling_mode)
+               return acpi_ec_polling_wait(ec, event);
        else
-               return acpi_ec_burst_wait (ec, event);
+               return acpi_ec_burst_wait(ec, event);
 }
 
-static int
-acpi_ec_polling_wait (
-       union acpi_ec           *ec,
-       u8                      event)
+static int acpi_ec_polling_wait(union acpi_ec *ec, u8 event)
 {
-       u32                     acpi_ec_status = 0;
-       u32                     i = ACPI_EC_UDELAY_COUNT;
+       u32 acpi_ec_status = 0;
+       u32 i = ACPI_EC_UDELAY_COUNT;
 
        if (!ec)
                return -EINVAL;
@@ -205,19 +181,21 @@ acpi_ec_polling_wait (
        switch (event) {
        case ACPI_EC_EVENT_OBF:
                do {
-                       acpi_hw_low_level_read(8, &acpi_ec_status, &ec->common.status_addr);
+                       acpi_hw_low_level_read(8, &acpi_ec_status,
+                                              &ec->common.status_addr);
                        if (acpi_ec_status & ACPI_EC_FLAG_OBF)
                                return 0;
                        udelay(ACPI_EC_UDELAY);
-               } while (--i>0);
+               } while (--i > 0);
                break;
        case ACPI_EC_EVENT_IBE:
                do {
-                       acpi_hw_low_level_read(8, &acpi_ec_status, &ec->common.status_addr);
+                       acpi_hw_low_level_read(8, &acpi_ec_status,
+                                              &ec->common.status_addr);
                        if (!(acpi_ec_status & ACPI_EC_FLAG_IBF))
                                return 0;
                        udelay(ACPI_EC_UDELAY);
-               } while (--i>0);
+               } while (--i > 0);
                break;
        default:
                return -EINVAL;
@@ -227,25 +205,36 @@ acpi_ec_polling_wait (
 }
 static int acpi_ec_burst_wait(union acpi_ec *ec, unsigned int event)
 {
-       int     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_ec_wait");
 
        ec->burst.expect_event = event;
        smp_mb();
 
-       result = wait_event_interruptible_timeout(ec->burst.wait,
-                                       !ec->burst.expect_event,
-                                       msecs_to_jiffies(ACPI_EC_DELAY));
-       
-       ec->burst.expect_event = 0;
-       smp_mb();
+       switch (event) {
+       case ACPI_EC_EVENT_OBF:
+               if (acpi_ec_read_status(ec) & event) {
+                       ec->burst.expect_event = 0;
+                       return_VALUE(0);
+               }
+               break;
 
-       if (result < 0){
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR," result  = %d ", result));
-               return_VALUE(result);
+       case ACPI_EC_EVENT_IBE:
+               if (~acpi_ec_read_status(ec) & event) {
+                       ec->burst.expect_event = 0;
+                       return_VALUE(0);
+               }
+               break;
        }
 
+       result = wait_event_timeout(ec->burst.wait,
+                                   !ec->burst.expect_event,
+                                   msecs_to_jiffies(ACPI_EC_DELAY));
+
+       ec->burst.expect_event = 0;
+       smp_mb();
+
        /*
         * Verify that the event in question has actually happened by
         * querying EC status. Do the check even if operation timed-out
@@ -266,95 +255,65 @@ static int acpi_ec_burst_wait(union acpi_ec *ec, unsigned int event)
        return_VALUE(-ETIME);
 }
 
-
-
-static int
-acpi_ec_enter_burst_mode (
-       union acpi_ec           *ec)
+static int acpi_ec_enter_burst_mode(union acpi_ec *ec)
 {
-       u32                     tmp = 0;
-       int                     status = 0;
+       u32 tmp = 0;
+       int status = 0;
 
        ACPI_FUNCTION_TRACE("acpi_ec_enter_burst_mode");
 
        status = acpi_ec_read_status(ec);
-       if (status != -EINVAL &&
-               !(status & ACPI_EC_FLAG_BURST)){
-               acpi_hw_low_level_write(8, ACPI_EC_BURST_ENABLE, &ec->common.command_addr);
+       if (status != -EINVAL && !(status & ACPI_EC_FLAG_BURST)) {
+               status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
+               if (status)
+                       goto end;
+               acpi_hw_low_level_write(8, ACPI_EC_BURST_ENABLE,
+                                       &ec->common.command_addr);
                status = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
-               if (status){
-                       acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
+               if (status)
                        return_VALUE(-EINVAL);
-               }
                acpi_hw_low_level_read(8, &tmp, &ec->common.data_addr);
-               acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
-               if(tmp != 0x90 ) {/* Burst ACK byte*/
+               if (tmp != 0x90) {      /* Burst ACK byte */
                        return_VALUE(-EINVAL);
                }
        }
 
-       atomic_set(&ec->burst.leaving_burst , 0);
+       atomic_set(&ec->burst.leaving_burst, 0);
        return_VALUE(0);
+      end:
+       printk("Error in acpi_ec_wait\n");
+       return_VALUE(-1);
 }
 
-static int
-acpi_ec_leave_burst_mode (
-       union acpi_ec           *ec)
+static int acpi_ec_leave_burst_mode(union acpi_ec *ec)
 {
-       int                     status =0;
 
        ACPI_FUNCTION_TRACE("acpi_ec_leave_burst_mode");
 
-       atomic_set(&ec->burst.leaving_burst , 1);
-       status = acpi_ec_read_status(ec);
-       if (status != -EINVAL &&
-               (status & ACPI_EC_FLAG_BURST)){
-               acpi_hw_low_level_write(8, ACPI_EC_BURST_DISABLE, &ec->common.command_addr);
-               status = acpi_ec_wait(ec, ACPI_EC_FLAG_IBF);
-               if (status){
-                       acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,"------->wait fail\n"));
-                       return_VALUE(-EINVAL);
-               }
-               acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
-               status = acpi_ec_read_status(ec);
-       }
-
+       atomic_set(&ec->burst.leaving_burst, 1);
        return_VALUE(0);
 }
 
-static int
-acpi_ec_read (
-       union acpi_ec           *ec,
-       u8                      address,
-       u32                     *data)
+static int acpi_ec_read(union acpi_ec *ec, u8 address, u32 * data)
 {
-       if (acpi_ec_polling_mode) 
+       if (acpi_ec_polling_mode)
                return acpi_ec_polling_read(ec, address, data);
        else
                return acpi_ec_burst_read(ec, address, data);
 }
-static int
-acpi_ec_write (
-       union acpi_ec           *ec,
-       u8                      address,
-       u8                      data)
+static int acpi_ec_write(union acpi_ec *ec, u8 address, u8 data)
 {
-       if (acpi_ec_polling_mode) 
+       if (acpi_ec_polling_mode)
                return acpi_ec_polling_write(ec, address, data);
        else
                return acpi_ec_burst_write(ec, address, data);
 }
-static int
-acpi_ec_polling_read (
-       union acpi_ec           *ec,
-       u8                      address,
-       u32                     *data)
+static int acpi_ec_polling_read(union acpi_ec *ec, u8 address, u32 * data)
 {
-       acpi_status             status = AE_OK;
-       int                     result = 0;
-       unsigned long           flags = 0;
-       u32                     glk = 0;
+       acpi_status status = AE_OK;
+       int result = 0;
+       unsigned long flags = 0;
+       u32 glk = 0;
 
        ACPI_FUNCTION_TRACE("acpi_ec_read");
 
@@ -371,7 +330,8 @@ acpi_ec_polling_read (
 
        spin_lock_irqsave(&ec->polling.lock, flags);
 
-       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_READ, &ec->common.command_addr);
+       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_READ,
+                               &ec->common.command_addr);
        result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
        if (result)
                goto end;
@@ -384,9 +344,9 @@ acpi_ec_polling_read (
        acpi_hw_low_level_read(8, data, &ec->common.data_addr);
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Read [%02x] from address [%02x]\n",
-               *data, address));
-       
-end:
+                         *data, address));
+
+      end:
        spin_unlock_irqrestore(&ec->polling.lock, flags);
 
        if (ec->common.global_lock)
@@ -395,17 +355,12 @@ end:
        return_VALUE(result);
 }
 
-
-static int
-acpi_ec_polling_write (
-       union acpi_ec           *ec,
-       u8                      address,
-       u8                      data)
+static int acpi_ec_polling_write(union acpi_ec *ec, u8 address, u8 data)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       unsigned long           flags = 0;
-       u32                     glk = 0;
+       int result = 0;
+       acpi_status status = AE_OK;
+       unsigned long flags = 0;
+       u32 glk = 0;
 
        ACPI_FUNCTION_TRACE("acpi_ec_write");
 
@@ -420,7 +375,8 @@ acpi_ec_polling_write (
 
        spin_lock_irqsave(&ec->polling.lock, flags);
 
-       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_WRITE, &ec->common.command_addr);
+       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_WRITE,
+                               &ec->common.command_addr);
        result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
        if (result)
                goto end;
@@ -436,9 +392,9 @@ acpi_ec_polling_write (
                goto end;
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Wrote [%02x] to address [%02x]\n",
-               data, address));
+                         data, address));
 
-end:
+      end:
        spin_unlock_irqrestore(&ec->polling.lock, flags);
 
        if (ec->common.global_lock)
@@ -447,21 +403,16 @@ end:
        return_VALUE(result);
 }
 
-static int
-acpi_ec_burst_read (
-       union acpi_ec           *ec,
-       u8                      address,
-       u32                     *data)
+static int acpi_ec_burst_read(union acpi_ec *ec, u8 address, u32 * data)
 {
-       int                     status = 0;
-       u32                     glk;
+       int status = 0;
+       u32 glk;
 
        ACPI_FUNCTION_TRACE("acpi_ec_read");
 
        if (!ec || !data)
                return_VALUE(-EINVAL);
 
-retry:
        *data = 0;
 
        if (ec->common.global_lock) {
@@ -473,64 +424,49 @@ retry:
        WARN_ON(in_interrupt());
        down(&ec->burst.sem);
 
-       if(acpi_ec_enter_burst_mode(ec))
-               goto end;
-
-       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_READ, &ec->common.command_addr);
+       acpi_ec_enter_burst_mode(ec);
        status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
-       acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
        if (status) {
+               printk("read EC, IB not empty\n");
                goto end;
        }
+       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_READ,
+                               &ec->common.command_addr);
+       status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
+       if (status) {
+               printk("read EC, IB not empty\n");
+       }
 
        acpi_hw_low_level_write(8, address, &ec->common.data_addr);
-       status= acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
-       if (status){
-               acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
+       status = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
+       if (status) {
+               printk("read EC, OB not full\n");
                goto end;
        }
-
        acpi_hw_low_level_read(8, data, &ec->common.data_addr);
-       acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
-
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Read [%02x] from address [%02x]\n",
-               *data, address));
-       
-end:
+                         *data, address));
+
+      end:
        acpi_ec_leave_burst_mode(ec);
        up(&ec->burst.sem);
 
        if (ec->common.global_lock)
                acpi_release_global_lock(glk);
 
-       if(atomic_read(&ec->burst.leaving_burst) == 2){
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO,"aborted, retry ...\n"));
-               while(atomic_read(&ec->burst.pending_gpe)){
-                       msleep(1);      
-               }
-               acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
-               goto retry;
-       }
-
        return_VALUE(status);
 }
 
-
-static int
-acpi_ec_burst_write (
-       union acpi_ec           *ec,
-       u8                      address,
-       u8                      data)
+static int acpi_ec_burst_write(union acpi_ec *ec, u8 address, u8 data)
 {
-       int                     status = 0;
-       u32                     glk;
-       u32                     tmp;
+       int status = 0;
+       u32 glk;
 
        ACPI_FUNCTION_TRACE("acpi_ec_write");
 
        if (!ec)
                return_VALUE(-EINVAL);
-retry:
+
        if (ec->common.global_lock) {
                status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk);
                if (ACPI_FAILURE(status))
@@ -540,69 +476,43 @@ retry:
        WARN_ON(in_interrupt());
        down(&ec->burst.sem);
 
-       if(acpi_ec_enter_burst_mode(ec))
-               goto end;
+       acpi_ec_enter_burst_mode(ec);
 
-       status = acpi_ec_read_status(ec);
-       if (status != -EINVAL &&
-               !(status & ACPI_EC_FLAG_BURST)){
-               acpi_hw_low_level_write(8, ACPI_EC_BURST_ENABLE, &ec->common.command_addr);
-               status = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
-               if (status)
-                       goto end;
-               acpi_hw_low_level_read(8, &tmp, &ec->common.data_addr);
-               if(tmp != 0x90 ) /* Burst ACK byte*/
-                       goto end;
+       status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
+       if (status) {
+               printk("write EC, IB not empty\n");
        }
-       /*Now we are in burst mode*/
-
-       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_WRITE, &ec->common.command_addr);
+       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_WRITE,
+                               &ec->common.command_addr);
        status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
-       acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
-       if (status){
-               goto end;
+       if (status) {
+               printk("write EC, IB not empty\n");
        }
 
        acpi_hw_low_level_write(8, address, &ec->common.data_addr);
        status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
-       if (status){
-               acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
-               goto end;
+       if (status) {
+               printk("write EC, IB not empty\n");
        }
 
        acpi_hw_low_level_write(8, data, &ec->common.data_addr);
-       status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
-       acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
-       if (status)
-               goto end;
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Wrote [%02x] to address [%02x]\n",
-               data, address));
+                         data, address));
 
-end:
        acpi_ec_leave_burst_mode(ec);
        up(&ec->burst.sem);
 
        if (ec->common.global_lock)
                acpi_release_global_lock(glk);
 
-       if(atomic_read(&ec->burst.leaving_burst) == 2){
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO,"aborted, retry ...\n"));
-               while(atomic_read(&ec->burst.pending_gpe)){
-                       msleep(1);      
-               }
-               acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
-               goto retry;
-       }
-
        return_VALUE(status);
 }
 
 /*
  * Externally callable EC access functions. For now, assume 1 EC only
  */
-int
-ec_read(u8 addr, u8 *val)
+int ec_read(u8 addr, u8 * val)
 {
        union acpi_ec *ec;
        int err;
@@ -618,14 +528,13 @@ ec_read(u8 addr, u8 *val)
        if (!err) {
                *val = temp_data;
                return 0;
-       }
-       else
+       } else
                return err;
 }
+
 EXPORT_SYMBOL(ec_read);
 
-int
-ec_write(u8 addr, u8 val)
+int ec_write(u8 addr, u8 val)
 {
        union acpi_ec *ec;
        int err;
@@ -639,27 +548,22 @@ ec_write(u8 addr, u8 val)
 
        return err;
 }
+
 EXPORT_SYMBOL(ec_write);
 
-static int
-acpi_ec_query (
-       union acpi_ec           *ec,
-       u32                     *data)
+static int acpi_ec_query(union acpi_ec *ec, u32 * data)
 {
-       if (acpi_ec_polling_mode) 
+       if (acpi_ec_polling_mode)
                return acpi_ec_polling_query(ec, data);
        else
                return acpi_ec_burst_query(ec, data);
 }
-static int
-acpi_ec_polling_query (
-       union acpi_ec           *ec,
-       u32                     *data)
+static int acpi_ec_polling_query(union acpi_ec *ec, u32 * data)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       unsigned long           flags = 0;
-       u32                     glk = 0;
+       int result = 0;
+       acpi_status status = AE_OK;
+       unsigned long flags = 0;
+       u32 glk = 0;
 
        ACPI_FUNCTION_TRACE("acpi_ec_query");
 
@@ -681,7 +585,8 @@ acpi_ec_polling_query (
         */
        spin_lock_irqsave(&ec->polling.lock, flags);
 
-       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_QUERY, &ec->common.command_addr);
+       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_QUERY,
+                               &ec->common.command_addr);
        result = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
        if (result)
                goto end;
@@ -690,7 +595,7 @@ acpi_ec_polling_query (
        if (!*data)
                result = -ENODATA;
 
-end:
+      end:
        spin_unlock_irqrestore(&ec->polling.lock, flags);
 
        if (ec->common.global_lock)
@@ -698,13 +603,10 @@ end:
 
        return_VALUE(result);
 }
-static int
-acpi_ec_burst_query (
-       union acpi_ec           *ec,
-       u32                     *data)
+static int acpi_ec_burst_query(union acpi_ec *ec, u32 * data)
 {
-       int                     status = 0;
-       u32                     glk;
+       int status = 0;
+       u32 glk;
 
        ACPI_FUNCTION_TRACE("acpi_ec_query");
 
@@ -719,70 +621,64 @@ acpi_ec_burst_query (
        }
 
        down(&ec->burst.sem);
-       if(acpi_ec_enter_burst_mode(ec))
+
+       status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBE);
+       if (status) {
+               printk("query EC, IB not empty\n");
                goto end;
+       }
        /*
         * Query the EC to find out which _Qxx method we need to evaluate.
         * Note that successful completion of the query causes the ACPI_EC_SCI
         * bit to be cleared (and thus clearing the interrupt source).
         */
-       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_QUERY, &ec->common.command_addr);
+       acpi_hw_low_level_write(8, ACPI_EC_COMMAND_QUERY,
+                               &ec->common.command_addr);
        status = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF);
-       if (status){
-               acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
+       if (status) {
+               printk("query EC, OB not full\n");
                goto end;
        }
 
        acpi_hw_low_level_read(8, data, &ec->common.data_addr);
-       acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
        if (!*data)
                status = -ENODATA;
 
-end:
-       acpi_ec_leave_burst_mode(ec);
+      end:
        up(&ec->burst.sem);
 
        if (ec->common.global_lock)
                acpi_release_global_lock(glk);
 
-       if(atomic_read(&ec->burst.leaving_burst) == 2){
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO,"aborted, retry ...\n"));
-               acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
-               status = -ENODATA;
-       }
        return_VALUE(status);
 }
 
-
 /* --------------------------------------------------------------------------
                                 Event Management
    -------------------------------------------------------------------------- */
 
 union acpi_ec_query_data {
-       acpi_handle             handle;
-       u8                      data;
+       acpi_handle handle;
+       u8 data;
 };
 
-static void
-acpi_ec_gpe_query (
-       void                    *ec_cxt)
+static void acpi_ec_gpe_query(void *ec_cxt)
 {
-       if (acpi_ec_polling_mode) 
+       if (acpi_ec_polling_mode)
                acpi_ec_gpe_polling_query(ec_cxt);
        else
                acpi_ec_gpe_burst_query(ec_cxt);
 }
 
-static void
-acpi_ec_gpe_polling_query (
-       void                    *ec_cxt)
+static void acpi_ec_gpe_polling_query(void *ec_cxt)
 {
-       union acpi_ec           *ec = (union acpi_ec *) ec_cxt;
-       u32                     value = 0;
-       unsigned long           flags = 0;
-       static char             object_name[5] = {'_','Q','0','0','\0'};
-       const char              hex[] = {'0','1','2','3','4','5','6','7',
-                                        '8','9','A','B','C','D','E','F'};
+       union acpi_ec *ec = (union acpi_ec *)ec_cxt;
+       u32 value = 0;
+       unsigned long flags = 0;
+       static char object_name[5] = { '_', 'Q', '0', '0', '\0' };
+       const char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7',
+               '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+       };
 
        ACPI_FUNCTION_TRACE("acpi_ec_gpe_query");
 
@@ -812,19 +708,18 @@ acpi_ec_gpe_polling_query (
 
        acpi_evaluate_object(ec->common.handle, object_name, NULL, NULL);
 
-end:   
+      end:
        acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
 }
-static void
-acpi_ec_gpe_burst_query (
-       void                    *ec_cxt)
+static void acpi_ec_gpe_burst_query(void *ec_cxt)
 {
-       union acpi_ec           *ec = (union acpi_ec *) ec_cxt;
-       u32                     value;
-       int                     result = -ENODATA;
-       static char             object_name[5] = {'_','Q','0','0','\0'};
-       const char              hex[] = {'0','1','2','3','4','5','6','7',
-                                        '8','9','A','B','C','D','E','F'};
+       union acpi_ec *ec = (union acpi_ec *)ec_cxt;
+       u32 value;
+       int result = -ENODATA;
+       static char object_name[5] = { '_', 'Q', '0', '0', '\0' };
+       const char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7',
+               '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+       };
 
        ACPI_FUNCTION_TRACE("acpi_ec_gpe_query");
 
@@ -840,26 +735,22 @@ acpi_ec_gpe_burst_query (
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluating %s\n", object_name));
 
        acpi_evaluate_object(ec->common.handle, object_name, NULL, NULL);
-end:   
+      end:
        atomic_dec(&ec->burst.pending_gpe);
        return;
 }
 
-static u32
-acpi_ec_gpe_handler (
-       void                    *data)
+static u32 acpi_ec_gpe_handler(void *data)
 {
-       if (acpi_ec_polling_mode) 
+       if (acpi_ec_polling_mode)
                return acpi_ec_gpe_polling_handler(data);
        else
-               return acpi_ec_gpe_burst_handler(data); 
+               return acpi_ec_gpe_burst_handler(data);
 }
-static u32
-acpi_ec_gpe_polling_handler (
-       void                    *data)
+static u32 acpi_ec_gpe_polling_handler(void *data)
 {
-       acpi_status             status = AE_OK;
-       union acpi_ec           *ec = (union acpi_ec *) data;
+       acpi_status status = AE_OK;
+       union acpi_ec *ec = (union acpi_ec *)data;
 
        if (!ec)
                return ACPI_INTERRUPT_NOT_HANDLED;
@@ -867,61 +758,49 @@ acpi_ec_gpe_polling_handler (
        acpi_disable_gpe(NULL, ec->common.gpe_bit, ACPI_ISR);
 
        status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
-               acpi_ec_gpe_query, ec);
+                                            acpi_ec_gpe_query, ec);
 
        if (status == AE_OK)
                return ACPI_INTERRUPT_HANDLED;
        else
                return ACPI_INTERRUPT_NOT_HANDLED;
 }
-static u32
-acpi_ec_gpe_burst_handler (
-       void                    *data)
+static u32 acpi_ec_gpe_burst_handler(void *data)
 {
-       acpi_status             status = AE_OK;
-       u32                     value;
-       union acpi_ec           *ec = (union acpi_ec *) data;
+       acpi_status status = AE_OK;
+       u32 value;
+       union acpi_ec *ec = (union acpi_ec *)data;
 
        if (!ec)
                return ACPI_INTERRUPT_NOT_HANDLED;
 
-       acpi_disable_gpe(NULL, ec->common.gpe_bit, ACPI_ISR);
-
+       acpi_clear_gpe(NULL, ec->common.gpe_bit, ACPI_ISR);
        value = acpi_ec_read_status(ec);
 
-       if((value & ACPI_EC_FLAG_IBF) &&
-               !(value & ACPI_EC_FLAG_BURST) &&
-                       (atomic_read(&ec->burst.leaving_burst) == 0)) { 
-       /*
-        * the embedded controller disables 
-        * burst mode for any reason other 
-        * than the burst disable command
-        * to process critical event.
-        */
-               atomic_set(&ec->burst.leaving_burst , 2); /* block current pending transaction
-                                       and retry */
+       switch (ec->burst.expect_event) {
+       case ACPI_EC_EVENT_OBF:
+               if (!(value & ACPI_EC_FLAG_OBF))
+                       break;
+       case ACPI_EC_EVENT_IBE:
+               if ((value & ACPI_EC_FLAG_IBF))
+                       break;
+               ec->burst.expect_event = 0;
                wake_up(&ec->burst.wait);
-       }else {
-               if ((ec->burst.expect_event == ACPI_EC_EVENT_OBF &&
-                               (value & ACPI_EC_FLAG_OBF)) ||
-                               (ec->burst.expect_event == ACPI_EC_EVENT_IBE &&
-                               !(value & ACPI_EC_FLAG_IBF))) {
-                       ec->burst.expect_event = 0;
-                       wake_up(&ec->burst.wait);
-                       return ACPI_INTERRUPT_HANDLED;
-               }
+               return ACPI_INTERRUPT_HANDLED;
+       default:
+               break;
        }
 
-       if (value & ACPI_EC_FLAG_SCI){
-               atomic_add(1, &ec->burst.pending_gpe) ;
+       if (value & ACPI_EC_FLAG_SCI) {
+               atomic_add(1, &ec->burst.pending_gpe);
                status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
-                                               acpi_ec_gpe_query, ec);
+                                                    acpi_ec_gpe_query, ec);
                return status == AE_OK ?
-               ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
-       } 
+                   ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
+       }
        acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_ISR);
        return status == AE_OK ?
-               ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
+           ACPI_INTERRUPT_HANDLED : ACPI_INTERRUPT_NOT_HANDLED;
 }
 
 /* --------------------------------------------------------------------------
@@ -929,37 +808,31 @@ acpi_ec_gpe_burst_handler (
    -------------------------------------------------------------------------- */
 
 static acpi_status
-acpi_ec_space_setup (
-       acpi_handle             region_handle,
-       u32                     function,
-       void                    *handler_context,
-       void                    **return_context)
+acpi_ec_space_setup(acpi_handle region_handle,
+                   u32 function, void *handler_context, void **return_context)
 {
        /*
         * The EC object is in the handler context and is needed
         * when calling the acpi_ec_space_handler.
         */
-       *return_context  = (function != ACPI_REGION_DEACTIVATE) ?
-                                               handler_context : NULL;
+       *return_context = (function != ACPI_REGION_DEACTIVATE) ?
+           handler_context : NULL;
 
        return AE_OK;
 }
 
-
 static acpi_status
-acpi_ec_space_handler (
-       u32                     function,
-       acpi_physical_address   address,
-       u32                     bit_width,
-       acpi_integer            *value,
-       void                    *handler_context,
-       void                    *region_context)
+acpi_ec_space_handler(u32 function,
+                     acpi_physical_address address,
+                     u32 bit_width,
+                     acpi_integer * value,
+                     void *handler_context, void *region_context)
 {
-       int                     result = 0;
-       union acpi_ec           *ec = NULL;
-       u64                     temp = *value;
-       acpi_integer            f_v = 0;
-       int                     i = 0;
+       int result = 0;
+       union acpi_ec *ec = NULL;
+       u64 temp = *value;
+       acpi_integer f_v = 0;
+       int i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_ec_space_handler");
 
@@ -967,17 +840,18 @@ acpi_ec_space_handler (
                return_VALUE(AE_BAD_PARAMETER);
 
        if (bit_width != 8 && acpi_strict) {
-               printk(KERN_WARNING PREFIX "acpi_ec_space_handler: bit_width should be 8\n");
+               printk(KERN_WARNING PREFIX
+                      "acpi_ec_space_handler: bit_width should be 8\n");
                return_VALUE(AE_BAD_PARAMETER);
        }
 
-       ec = (union acpi_ec *) handler_context;
+       ec = (union acpi_ec *)handler_context;
 
-next_byte:
+      next_byte:
        switch (function) {
        case ACPI_READ:
                temp = 0;
-               result = acpi_ec_read(ec, (u8) address, (u32 *)&temp);
+               result = acpi_ec_read(ec, (u8) address, (u32 *) & temp);
                break;
        case ACPI_WRITE:
                result = acpi_ec_write(ec, (u8) address, (u8) temp);
@@ -1004,8 +878,7 @@ next_byte:
                *value = f_v;
        }
 
-               
-out:
+      out:
        switch (result) {
        case -EINVAL:
                return_VALUE(AE_BAD_PARAMETER);
@@ -1021,18 +894,15 @@ out:
        }
 }
 
-
 /* --------------------------------------------------------------------------
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-static struct proc_dir_entry   *acpi_ec_dir;
-
+static struct proc_dir_entry *acpi_ec_dir;
 
-static int
-acpi_ec_read_info (struct seq_file *seq, void *offset)
+static int acpi_ec_read_info(struct seq_file *seq, void *offset)
 {
-       union acpi_ec           *ec = (union acpi_ec *) seq->private;
+       union acpi_ec *ec = (union acpi_ec *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_ec_read_info");
 
@@ -1040,14 +910,15 @@ acpi_ec_read_info (struct seq_file *seq, void *offset)
                goto end;
 
        seq_printf(seq, "gpe bit:                 0x%02x\n",
-               (u32) ec->common.gpe_bit);
+                  (u32) ec->common.gpe_bit);
        seq_printf(seq, "ports:                   0x%02x, 0x%02x\n",
-               (u32) ec->common.status_addr.address, (u32) ec->common.data_addr.address);
+                  (u32) ec->common.status_addr.address,
+                  (u32) ec->common.data_addr.address);
        seq_printf(seq, "use global lock:         %s\n",
-               ec->common.global_lock?"yes":"no");
+                  ec->common.global_lock ? "yes" : "no");
        acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
 
-end:
+      end:
        return_VALUE(0);
 }
 
@@ -1057,34 +928,32 @@ static int acpi_ec_info_open_fs(struct inode *inode, struct file *file)
 }
 
 static struct file_operations acpi_ec_info_ops = {
-       .open           = acpi_ec_info_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_ec_info_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
        .owner = THIS_MODULE,
 };
 
-static int
-acpi_ec_add_fs (
-       struct acpi_device      *device)
+static int acpi_ec_add_fs(struct acpi_device *device)
 {
-       struct proc_dir_entry   *entry = NULL;
+       struct proc_dir_entry *entry = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_ec_add_fs");
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
-                       acpi_ec_dir);
+                                                    acpi_ec_dir);
                if (!acpi_device_dir(device))
                        return_VALUE(-ENODEV);
        }
 
        entry = create_proc_entry(ACPI_EC_FILE_INFO, S_IRUGO,
-               acpi_device_dir(device));
+                                 acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_WARN,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_EC_FILE_INFO));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_EC_FILE_INFO));
        else {
                entry->proc_fops = &acpi_ec_info_ops;
                entry->data = acpi_driver_data(device);
@@ -1094,10 +963,7 @@ acpi_ec_add_fs (
        return_VALUE(0);
 }
 
-
-static int
-acpi_ec_remove_fs (
-       struct acpi_device      *device)
+static int acpi_ec_remove_fs(struct acpi_device *device)
 {
        ACPI_FUNCTION_TRACE("acpi_ec_remove_fs");
 
@@ -1110,20 +976,16 @@ acpi_ec_remove_fs (
        return_VALUE(0);
 }
 
-
 /* --------------------------------------------------------------------------
                                Driver Interface
    -------------------------------------------------------------------------- */
 
-
-static int
-acpi_ec_polling_add (
-       struct acpi_device      *device)
+static int acpi_ec_polling_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       union acpi_ec           *ec = NULL;
-       unsigned long           uid;
+       int result = 0;
+       acpi_status status = AE_OK;
+       union acpi_ec *ec = NULL;
+       unsigned long uid;
 
        ACPI_FUNCTION_TRACE("acpi_ec_add");
 
@@ -1143,26 +1005,31 @@ acpi_ec_polling_add (
        acpi_driver_data(device) = ec;
 
        /* Use the global lock for all EC transactions? */
-       acpi_evaluate_integer(ec->common.handle, "_GLK", NULL, &ec->common.global_lock);
+       acpi_evaluate_integer(ec->common.handle, "_GLK", NULL,
+                             &ec->common.global_lock);
 
        /* If our UID matches the UID for the ECDT-enumerated EC,
-          we now have the *real* EC info, so kill the makeshift one.*/
+          we now have the *real* EC info, so kill the makeshift one. */
        acpi_evaluate_integer(ec->common.handle, "_UID", NULL, &uid);
        if (ec_ecdt && ec_ecdt->common.uid == uid) {
                acpi_remove_address_space_handler(ACPI_ROOT_OBJECT,
-                       ACPI_ADR_SPACE_EC, &acpi_ec_space_handler);
-       
-               acpi_remove_gpe_handler(NULL, ec_ecdt->common.gpe_bit, &acpi_ec_gpe_handler);
+                                                 ACPI_ADR_SPACE_EC,
+                                                 &acpi_ec_space_handler);
+
+               acpi_remove_gpe_handler(NULL, ec_ecdt->common.gpe_bit,
+                                       &acpi_ec_gpe_handler);
 
                kfree(ec_ecdt);
        }
 
        /* Get GPE bit assignment (EC events). */
        /* TODO: Add support for _GPE returning a package */
-       status = acpi_evaluate_integer(ec->common.handle, "_GPE", NULL, &ec->common.gpe_bit);
+       status =
+           acpi_evaluate_integer(ec->common.handle, "_GPE", NULL,
+                                 &ec->common.gpe_bit);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error obtaining GPE bit assignment\n"));
+                                 "Error obtaining GPE bit assignment\n"));
                result = -ENODEV;
                goto end;
        }
@@ -1172,26 +1039,24 @@ acpi_ec_polling_add (
                goto end;
 
        printk(KERN_INFO PREFIX "%s [%s] (gpe %d)\n",
-               acpi_device_name(device), acpi_device_bid(device),
-               (u32) ec->common.gpe_bit);
+              acpi_device_name(device), acpi_device_bid(device),
+              (u32) ec->common.gpe_bit);
 
        if (!first_ec)
                first_ec = device;
 
-end:
+      end:
        if (result)
                kfree(ec);
 
        return_VALUE(result);
 }
-static int
-acpi_ec_burst_add (
-       struct acpi_device      *device)
+static int acpi_ec_burst_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       union acpi_ec           *ec = NULL;
-       unsigned long           uid;
+       int result = 0;
+       acpi_status status = AE_OK;
+       union acpi_ec *ec = NULL;
+       unsigned long uid;
 
        ACPI_FUNCTION_TRACE("acpi_ec_add");
 
@@ -1205,35 +1070,40 @@ acpi_ec_burst_add (
 
        ec->common.handle = device->handle;
        ec->common.uid = -1;
-       atomic_set(&ec->burst.pending_gpe, 0);
-       atomic_set(&ec->burst.leaving_burst , 1);
-       init_MUTEX(&ec->burst.sem);
-       init_waitqueue_head(&ec->burst.wait);
+       atomic_set(&ec->burst.pending_gpe, 0);
+       atomic_set(&ec->burst.leaving_burst, 1);
+       init_MUTEX(&ec->burst.sem);
+       init_waitqueue_head(&ec->burst.wait);
        strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
        strcpy(acpi_device_class(device), ACPI_EC_CLASS);
        acpi_driver_data(device) = ec;
 
        /* Use the global lock for all EC transactions? */
-       acpi_evaluate_integer(ec->common.handle, "_GLK", NULL, &ec->common.global_lock);
+       acpi_evaluate_integer(ec->common.handle, "_GLK", NULL,
+                             &ec->common.global_lock);
 
        /* If our UID matches the UID for the ECDT-enumerated EC,
-          we now have the *real* EC info, so kill the makeshift one.*/
+          we now have the *real* EC info, so kill the makeshift one. */
        acpi_evaluate_integer(ec->common.handle, "_UID", NULL, &uid);
        if (ec_ecdt && ec_ecdt->common.uid == uid) {
                acpi_remove_address_space_handler(ACPI_ROOT_OBJECT,
-                       ACPI_ADR_SPACE_EC, &acpi_ec_space_handler);
+                                                 ACPI_ADR_SPACE_EC,
+                                                 &acpi_ec_space_handler);
 
-               acpi_remove_gpe_handler(NULL, ec_ecdt->common.gpe_bit, &acpi_ec_gpe_handler);
+               acpi_remove_gpe_handler(NULL, ec_ecdt->common.gpe_bit,
+                                       &acpi_ec_gpe_handler);
 
                kfree(ec_ecdt);
        }
 
        /* Get GPE bit assignment (EC events). */
        /* TODO: Add support for _GPE returning a package */
-       status = acpi_evaluate_integer(ec->common.handle, "_GPE", NULL, &ec->common.gpe_bit);
+       status =
+           acpi_evaluate_integer(ec->common.handle, "_GPE", NULL,
+                                 &ec->common.gpe_bit);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error obtaining GPE bit assignment\n"));
+                                 "Error obtaining GPE bit assignment\n"));
                result = -ENODEV;
                goto end;
        }
@@ -1242,27 +1112,24 @@ acpi_ec_burst_add (
        if (result)
                goto end;
 
+       printk("burst-mode-ec-10-Aug\n");
        printk(KERN_INFO PREFIX "%s [%s] (gpe %d)\n",
-               acpi_device_name(device), acpi_device_bid(device),
-               (u32) ec->common.gpe_bit);
+              acpi_device_name(device), acpi_device_bid(device),
+              (u32) ec->common.gpe_bit);
 
        if (!first_ec)
                first_ec = device;
 
-end:
+      end:
        if (result)
                kfree(ec);
 
        return_VALUE(result);
 }
 
-
-static int
-acpi_ec_remove (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_ec_remove(struct acpi_device *device, int type)
 {
-       union acpi_ec           *ec = NULL;
+       union acpi_ec *ec = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_ec_remove");
 
@@ -1278,13 +1145,10 @@ acpi_ec_remove (
        return_VALUE(0);
 }
 
-
 static acpi_status
-acpi_ec_io_ports (
-       struct acpi_resource    *resource,
-       void                    *context)
+acpi_ec_io_ports(struct acpi_resource *resource, void *context)
 {
-       union acpi_ec           *ec = (union acpi_ec *) context;
+       union acpi_ec *ec = (union acpi_ec *)context;
        struct acpi_generic_address *addr;
 
        if (resource->id != ACPI_RSTYPE_IO) {
@@ -1312,13 +1176,10 @@ acpi_ec_io_ports (
        return AE_OK;
 }
 
-
-static int
-acpi_ec_start (
-       struct acpi_device      *device)
+static int acpi_ec_start(struct acpi_device *device)
 {
-       acpi_status             status = AE_OK;
-       union acpi_ec           *ec = NULL;
+       acpi_status status = AE_OK;
+       union acpi_ec *ec = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_ec_start");
 
@@ -1334,49 +1195,50 @@ acpi_ec_start (
         * Get I/O port addresses. Convert to GAS format.
         */
        status = acpi_walk_resources(ec->common.handle, METHOD_NAME__CRS,
-               acpi_ec_io_ports, ec);
-       if (ACPI_FAILURE(status) || ec->common.command_addr.register_bit_width == 0) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error getting I/O port addresses"));
+                                    acpi_ec_io_ports, ec);
+       if (ACPI_FAILURE(status)
+           || ec->common.command_addr.register_bit_width == 0) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Error getting I/O port addresses"));
                return_VALUE(-ENODEV);
        }
 
        ec->common.status_addr = ec->common.command_addr;
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "gpe=0x%02x, ports=0x%2x,0x%2x\n",
-               (u32) ec->common.gpe_bit, (u32) ec->common.command_addr.address,
-               (u32) ec->common.data_addr.address));
-
+                         (u32) ec->common.gpe_bit,
+                         (u32) ec->common.command_addr.address,
+                         (u32) ec->common.data_addr.address));
 
        /*
         * Install GPE handler
         */
        status = acpi_install_gpe_handler(NULL, ec->common.gpe_bit,
-               ACPI_GPE_EDGE_TRIGGERED, &acpi_ec_gpe_handler, ec);
+                                         ACPI_GPE_EDGE_TRIGGERED,
+                                         &acpi_ec_gpe_handler, ec);
        if (ACPI_FAILURE(status)) {
                return_VALUE(-ENODEV);
        }
-       acpi_set_gpe_type (NULL, ec->common.gpe_bit, ACPI_GPE_TYPE_RUNTIME);
-       acpi_enable_gpe (NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
+       acpi_set_gpe_type(NULL, ec->common.gpe_bit, ACPI_GPE_TYPE_RUNTIME);
+       acpi_enable_gpe(NULL, ec->common.gpe_bit, ACPI_NOT_ISR);
 
-       status = acpi_install_address_space_handler (ec->common.handle,
-                       ACPI_ADR_SPACE_EC, &acpi_ec_space_handler,
-                       &acpi_ec_space_setup, ec);
+       status = acpi_install_address_space_handler(ec->common.handle,
+                                                   ACPI_ADR_SPACE_EC,
+                                                   &acpi_ec_space_handler,
+                                                   &acpi_ec_space_setup, ec);
        if (ACPI_FAILURE(status)) {
-               acpi_remove_gpe_handler(NULL, ec->common.gpe_bit, &acpi_ec_gpe_handler);
+               acpi_remove_gpe_handler(NULL, ec->common.gpe_bit,
+                                       &acpi_ec_gpe_handler);
                return_VALUE(-ENODEV);
        }
 
        return_VALUE(AE_OK);
 }
 
-
-static int
-acpi_ec_stop (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_ec_stop(struct acpi_device *device, int type)
 {
-       acpi_status             status = AE_OK;
-       union acpi_ec           *ec = NULL;
+       acpi_status status = AE_OK;
+       union acpi_ec *ec = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_ec_stop");
 
@@ -1386,11 +1248,14 @@ acpi_ec_stop (
        ec = acpi_driver_data(device);
 
        status = acpi_remove_address_space_handler(ec->common.handle,
-               ACPI_ADR_SPACE_EC, &acpi_ec_space_handler);
+                                                  ACPI_ADR_SPACE_EC,
+                                                  &acpi_ec_space_handler);
        if (ACPI_FAILURE(status))
                return_VALUE(-ENODEV);
 
-       status = acpi_remove_gpe_handler(NULL, ec->common.gpe_bit, &acpi_ec_gpe_handler);
+       status =
+           acpi_remove_gpe_handler(NULL, ec->common.gpe_bit,
+                                   &acpi_ec_gpe_handler);
        if (ACPI_FAILURE(status))
                return_VALUE(-ENODEV);
 
@@ -1398,32 +1263,26 @@ acpi_ec_stop (
 }
 
 static acpi_status __init
-acpi_fake_ecdt_callback (
-       acpi_handle     handle,
-       u32             Level,
-       void            *context,
-       void            **retval)
+acpi_fake_ecdt_callback(acpi_handle handle,
+                       u32 Level, void *context, void **retval)
 {
 
        if (acpi_ec_polling_mode)
                return acpi_fake_ecdt_polling_callback(handle,
-                       Level, context, retval);
+                                                      Level, context, retval);
        else
                return acpi_fake_ecdt_burst_callback(handle,
-                       Level, context, retval);
+                                                    Level, context, retval);
 }
 
 static acpi_status __init
-acpi_fake_ecdt_polling_callback (
-       acpi_handle     handle,
-       u32             Level,
-       void            *context,
-       void            **retval)
+acpi_fake_ecdt_polling_callback(acpi_handle handle,
+                               u32 Level, void *context, void **retval)
 {
-       acpi_status     status;
+       acpi_status status;
 
        status = acpi_walk_resources(handle, METHOD_NAME__CRS,
-               acpi_ec_io_ports, ec_ecdt);
+                                    acpi_ec_io_ports, ec_ecdt);
        if (ACPI_FAILURE(status))
                return status;
        ec_ecdt->common.status_addr = ec_ecdt->common.command_addr;
@@ -1431,33 +1290,33 @@ acpi_fake_ecdt_polling_callback (
        ec_ecdt->common.uid = -1;
        acpi_evaluate_integer(handle, "_UID", NULL, &ec_ecdt->common.uid);
 
-       status = acpi_evaluate_integer(handle, "_GPE", NULL, &ec_ecdt->common.gpe_bit);
+       status =
+           acpi_evaluate_integer(handle, "_GPE", NULL,
+                                 &ec_ecdt->common.gpe_bit);
        if (ACPI_FAILURE(status))
                return status;
        spin_lock_init(&ec_ecdt->polling.lock);
        ec_ecdt->common.global_lock = TRUE;
        ec_ecdt->common.handle = handle;
 
-       printk(KERN_INFO PREFIX  "GPE=0x%02x, ports=0x%2x, 0x%2x\n",
-               (u32) ec_ecdt->common.gpe_bit, (u32) ec_ecdt->common.command_addr.address,
-               (u32) ec_ecdt->common.data_addr.address);
+       printk(KERN_INFO PREFIX "GPE=0x%02x, ports=0x%2x, 0x%2x\n",
+              (u32) ec_ecdt->common.gpe_bit,
+              (u32) ec_ecdt->common.command_addr.address,
+              (u32) ec_ecdt->common.data_addr.address);
 
        return AE_CTRL_TERMINATE;
 }
 
 static acpi_status __init
-acpi_fake_ecdt_burst_callback (
-       acpi_handle     handle,
-       u32             Level,
-       void            *context,
-       void            **retval)
+acpi_fake_ecdt_burst_callback(acpi_handle handle,
+                             u32 Level, void *context, void **retval)
 {
-       acpi_status     status;
+       acpi_status status;
 
        init_MUTEX(&ec_ecdt->burst.sem);
        init_waitqueue_head(&ec_ecdt->burst.wait);
        status = acpi_walk_resources(handle, METHOD_NAME__CRS,
-               acpi_ec_io_ports, ec_ecdt);
+                                    acpi_ec_io_ports, ec_ecdt);
        if (ACPI_FAILURE(status))
                return status;
        ec_ecdt->common.status_addr = ec_ecdt->common.command_addr;
@@ -1465,15 +1324,18 @@ acpi_fake_ecdt_burst_callback (
        ec_ecdt->common.uid = -1;
        acpi_evaluate_integer(handle, "_UID", NULL, &ec_ecdt->common.uid);
 
-       status = acpi_evaluate_integer(handle, "_GPE", NULL, &ec_ecdt->common.gpe_bit);
+       status =
+           acpi_evaluate_integer(handle, "_GPE", NULL,
+                                 &ec_ecdt->common.gpe_bit);
        if (ACPI_FAILURE(status))
                return status;
        ec_ecdt->common.global_lock = TRUE;
        ec_ecdt->common.handle = handle;
 
-       printk(KERN_INFO PREFIX  "GPE=0x%02x, ports=0x%2x, 0x%2x\n",
-               (u32) ec_ecdt->common.gpe_bit, (u32) ec_ecdt->common.command_addr.address,
-               (u32) ec_ecdt->common.data_addr.address);
+       printk(KERN_INFO PREFIX "GPE=0x%02x, ports=0x%2x, 0x%2x\n",
+              (u32) ec_ecdt->common.gpe_bit,
+              (u32) ec_ecdt->common.command_addr.address,
+              (u32) ec_ecdt->common.data_addr.address);
 
        return AE_CTRL_TERMINATE;
 }
@@ -1488,11 +1350,10 @@ acpi_fake_ecdt_burst_callback (
  * op region (since _REG isn't invoked yet). The assumption is true for
  * all systems found.
  */
-static int __init
-acpi_ec_fake_ecdt(void)
+static int __init acpi_ec_fake_ecdt(void)
 {
-       acpi_status     status;
-       int             ret = 0;
+       acpi_status status;
+       int ret = 0;
 
        printk(KERN_INFO PREFIX "Try to make an fake ECDT\n");
 
@@ -1503,10 +1364,8 @@ acpi_ec_fake_ecdt(void)
        }
        memset(ec_ecdt, 0, sizeof(union acpi_ec));
 
-       status = acpi_get_devices (ACPI_EC_HID,
-                               acpi_fake_ecdt_callback,
-                               NULL,
-                               NULL);
+       status = acpi_get_devices(ACPI_EC_HID,
+                                 acpi_fake_ecdt_callback, NULL, NULL);
        if (ACPI_FAILURE(status)) {
                kfree(ec_ecdt);
                ec_ecdt = NULL;
@@ -1514,13 +1373,12 @@ acpi_ec_fake_ecdt(void)
                goto error;
        }
        return 0;
-error:
+      error:
        printk(KERN_ERR PREFIX "Can't make an fake ECDT\n");
        return ret;
 }
 
-static int __init
-acpi_ec_get_real_ecdt(void)
+static int __init acpi_ec_get_real_ecdt(void)
 {
        if (acpi_ec_polling_mode)
                return acpi_ec_polling_get_real_ecdt();
@@ -1528,14 +1386,14 @@ acpi_ec_get_real_ecdt(void)
                return acpi_ec_burst_get_real_ecdt();
 }
 
-static int __init
-acpi_ec_polling_get_real_ecdt(void)
+static int __init acpi_ec_polling_get_real_ecdt(void)
 {
-       acpi_status             status;
-       struct acpi_table_ecdt  *ecdt_ptr;
+       acpi_status status;
+       struct acpi_table_ecdt *ecdt_ptr;
 
-       status = acpi_get_firmware_table("ECDT", 1, ACPI_LOGICAL_ADDRESSING, 
-               (struct acpi_table_header **) &ecdt_ptr);
+       status = acpi_get_firmware_table("ECDT", 1, ACPI_LOGICAL_ADDRESSING,
+                                        (struct acpi_table_header **)
+                                        &ecdt_ptr);
        if (ACPI_FAILURE(status))
                return -ENODEV;
 
@@ -1558,13 +1416,14 @@ acpi_ec_polling_get_real_ecdt(void)
        ec_ecdt->common.global_lock = TRUE;
        ec_ecdt->common.uid = ecdt_ptr->uid;
 
-       status = acpi_get_handle(NULL, ecdt_ptr->ec_id, &ec_ecdt->common.handle);
+       status =
+           acpi_get_handle(NULL, ecdt_ptr->ec_id, &ec_ecdt->common.handle);
        if (ACPI_FAILURE(status)) {
                goto error;
        }
 
        return 0;
-error:
+      error:
        printk(KERN_ERR PREFIX "Could not use ECDT\n");
        kfree(ec_ecdt);
        ec_ecdt = NULL;
@@ -1572,15 +1431,14 @@ error:
        return -ENODEV;
 }
 
-
-static int __init
-acpi_ec_burst_get_real_ecdt(void)
+static int __init acpi_ec_burst_get_real_ecdt(void)
 {
-       acpi_status             status;
-       struct acpi_table_ecdt  *ecdt_ptr;
+       acpi_status status;
+       struct acpi_table_ecdt *ecdt_ptr;
 
        status = acpi_get_firmware_table("ECDT", 1, ACPI_LOGICAL_ADDRESSING,
-               (struct acpi_table_header **) &ecdt_ptr);
+                                        (struct acpi_table_header **)
+                                        &ecdt_ptr);
        if (ACPI_FAILURE(status))
                return -ENODEV;
 
@@ -1594,8 +1452,8 @@ acpi_ec_burst_get_real_ecdt(void)
                return -ENOMEM;
        memset(ec_ecdt, 0, sizeof(union acpi_ec));
 
-       init_MUTEX(&ec_ecdt->burst.sem);
-       init_waitqueue_head(&ec_ecdt->burst.wait);
+       init_MUTEX(&ec_ecdt->burst.sem);
+       init_waitqueue_head(&ec_ecdt->burst.wait);
        ec_ecdt->common.command_addr = ecdt_ptr->ec_control;
        ec_ecdt->common.status_addr = ecdt_ptr->ec_control;
        ec_ecdt->common.data_addr = ecdt_ptr->ec_data;
@@ -1604,13 +1462,14 @@ acpi_ec_burst_get_real_ecdt(void)
        ec_ecdt->common.global_lock = TRUE;
        ec_ecdt->common.uid = ecdt_ptr->uid;
 
-       status = acpi_get_handle(NULL, ecdt_ptr->ec_id, &ec_ecdt->common.handle);
+       status =
+           acpi_get_handle(NULL, ecdt_ptr->ec_id, &ec_ecdt->common.handle);
        if (ACPI_FAILURE(status)) {
                goto error;
        }
 
        return 0;
-error:
+      error:
        printk(KERN_ERR PREFIX "Could not use ECDT\n");
        kfree(ec_ecdt);
        ec_ecdt = NULL;
@@ -1619,11 +1478,10 @@ error:
 }
 
 static int __initdata acpi_fake_ecdt_enabled;
-int __init
-acpi_ec_ecdt_probe (void)
+int __init acpi_ec_ecdt_probe(void)
 {
-       acpi_status             status;
-       int                     ret;
+       acpi_status status;
+       int ret;
 
        ret = acpi_ec_get_real_ecdt();
        /* Try to make a fake ECDT */
@@ -1638,26 +1496,28 @@ acpi_ec_ecdt_probe (void)
         * Install GPE handler
         */
        status = acpi_install_gpe_handler(NULL, ec_ecdt->common.gpe_bit,
-               ACPI_GPE_EDGE_TRIGGERED, &acpi_ec_gpe_handler,
-               ec_ecdt);
+                                         ACPI_GPE_EDGE_TRIGGERED,
+                                         &acpi_ec_gpe_handler, ec_ecdt);
        if (ACPI_FAILURE(status)) {
                goto error;
        }
-       acpi_set_gpe_type (NULL, ec_ecdt->common.gpe_bit, ACPI_GPE_TYPE_RUNTIME);
-       acpi_enable_gpe (NULL, ec_ecdt->common.gpe_bit, ACPI_NOT_ISR);
-
-       status = acpi_install_address_space_handler (ACPI_ROOT_OBJECT,
-                       ACPI_ADR_SPACE_EC, &acpi_ec_space_handler,
-                       &acpi_ec_space_setup, ec_ecdt);
+       acpi_set_gpe_type(NULL, ec_ecdt->common.gpe_bit, ACPI_GPE_TYPE_RUNTIME);
+       acpi_enable_gpe(NULL, ec_ecdt->common.gpe_bit, ACPI_NOT_ISR);
+
+       status = acpi_install_address_space_handler(ACPI_ROOT_OBJECT,
+                                                   ACPI_ADR_SPACE_EC,
+                                                   &acpi_ec_space_handler,
+                                                   &acpi_ec_space_setup,
+                                                   ec_ecdt);
        if (ACPI_FAILURE(status)) {
                acpi_remove_gpe_handler(NULL, ec_ecdt->common.gpe_bit,
-                       &acpi_ec_gpe_handler);
+                                       &acpi_ec_gpe_handler);
                goto error;
        }
 
        return 0;
 
-error:
+      error:
        printk(KERN_ERR PREFIX "Could not use ECDT\n");
        kfree(ec_ecdt);
        ec_ecdt = NULL;
@@ -1665,10 +1525,9 @@ error:
        return -ENODEV;
 }
 
-
-static int __init acpi_ec_init (void)
+static int __init acpi_ec_init(void)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_ec_init");
 
@@ -1693,8 +1552,7 @@ subsys_initcall(acpi_ec_init);
 
 /* EC driver currently not unloadable */
 #if 0
-static void __exit
-acpi_ec_exit (void)
+static void __exit acpi_ec_exit(void)
 {
        ACPI_FUNCTION_TRACE("acpi_ec_exit");
 
@@ -1704,7 +1562,7 @@ acpi_ec_exit (void)
 
        return_VOID;
 }
-#endif /* 0 */
+#endif                         /* 0 */
 
 static int __init acpi_fake_ecdt_setup(char *str)
 {
@@ -1727,8 +1585,8 @@ static int __init acpi_ec_set_polling_mode(char *str)
                acpi_ec_polling_mode = EC_POLLING;
                acpi_ec_driver.ops.add = acpi_ec_polling_add;
        }
-       printk(KERN_INFO PREFIX "EC %s mode.\n",
-               burst ? "burst": "polling");
+       printk(KERN_INFO PREFIX "EC %s mode.\n", burst ? "burst" : "polling");
        return 0;
 }
+
 __setup("ec_burst=", acpi_ec_set_polling_mode);
index 43c49f66a3283b8fa20f7ea796eb9402ef6f4028..bfa8b76de403019c88a32009ab8863124f1a6364 100644 (file)
 #include <acpi/acpi_drivers.h>
 
 #define _COMPONENT             ACPI_SYSTEM_COMPONENT
-ACPI_MODULE_NAME               ("event")
+ACPI_MODULE_NAME("event")
 
 /* Global vars for handling event proc entry */
 static DEFINE_SPINLOCK(acpi_system_event_lock);
-int                            event_is_open = 0;
-extern struct list_head                acpi_bus_event_list;
-extern wait_queue_head_t       acpi_bus_event_queue;
+int event_is_open = 0;
+extern struct list_head acpi_bus_event_list;
+extern wait_queue_head_t acpi_bus_event_queue;
 
-static int
-acpi_system_open_event(struct inode *inode, struct file *file)
+static int acpi_system_open_event(struct inode *inode, struct file *file)
 {
-       spin_lock_irq (&acpi_system_event_lock);
+       spin_lock_irq(&acpi_system_event_lock);
 
-       if(event_is_open)
+       if (event_is_open)
                goto out_busy;
 
        event_is_open = 1;
 
-       spin_unlock_irq (&acpi_system_event_lock);
+       spin_unlock_irq(&acpi_system_event_lock);
        return 0;
 
-out_busy:
-       spin_unlock_irq (&acpi_system_event_lock);
+      out_busy:
+       spin_unlock_irq(&acpi_system_event_lock);
        return -EBUSY;
 }
 
 static ssize_t
-acpi_system_read_event (
-       struct file             *file,
-       char                    __user *buffer,
-       size_t                  count,
-       loff_t                  *ppos)
+acpi_system_read_event(struct file *file, char __user * buffer, size_t count,
+                      loff_t * ppos)
 {
-       int                     result = 0;
-       struct acpi_bus_event   event;
-       static char             str[ACPI_MAX_STRING];
-       static int              chars_remaining = 0;
-       static char             *ptr;
-
+       int result = 0;
+       struct acpi_bus_event event;
+       static char str[ACPI_MAX_STRING];
+       static int chars_remaining = 0;
+       static char *ptr;
 
        ACPI_FUNCTION_TRACE("acpi_system_read_event");
 
@@ -67,10 +62,12 @@ acpi_system_read_event (
                        return_VALUE(-EIO);
                }
 
-               chars_remaining = sprintf(str, "%s %s %08x %08x\n", 
-                       event.device_class?event.device_class:"<unknown>",
-                       event.bus_id?event.bus_id:"<unknown>", 
-                       event.type, event.data);
+               chars_remaining = sprintf(str, "%s %s %08x %08x\n",
+                                         event.device_class ? event.
+                                         device_class : "<unknown>",
+                                         event.bus_id ? event.
+                                         bus_id : "<unknown>", event.type,
+                                         event.data);
                ptr = str;
        }
 
@@ -88,19 +85,15 @@ acpi_system_read_event (
        return_VALUE(count);
 }
 
-static int
-acpi_system_close_event(struct inode *inode, struct file *file)
+static int acpi_system_close_event(struct inode *inode, struct file *file)
 {
-       spin_lock_irq (&acpi_system_event_lock);
+       spin_lock_irq(&acpi_system_event_lock);
        event_is_open = 0;
-       spin_unlock_irq (&acpi_system_event_lock);
+       spin_unlock_irq(&acpi_system_event_lock);
        return 0;
 }
 
-static unsigned int
-acpi_system_poll_event(
-       struct file             *file,
-       poll_table              *wait)
+static unsigned int acpi_system_poll_event(struct file *file, poll_table * wait)
 {
        poll_wait(file, &acpi_bus_event_queue, wait);
        if (!list_empty(&acpi_bus_event_list))
@@ -109,15 +102,15 @@ acpi_system_poll_event(
 }
 
 static struct file_operations acpi_system_event_ops = {
-       .open =         acpi_system_open_event,
-       .read =         acpi_system_read_event,
-       .release =      acpi_system_close_event,
-       .poll =         acpi_system_poll_event,
+       .open = acpi_system_open_event,
+       .read = acpi_system_read_event,
+       .release = acpi_system_close_event,
+       .poll = acpi_system_poll_event,
 };
 
 static int __init acpi_event_init(void)
 {
-       struct proc_dir_entry   *entry;
+       struct proc_dir_entry *entry;
        int error = 0;
 
        ACPI_FUNCTION_TRACE("acpi_event_init");
@@ -130,8 +123,9 @@ static int __init acpi_event_init(void)
        if (entry)
                entry->proc_fops = &acpi_system_event_ops;
        else {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                                 "Unable to create '%s' proc fs entry\n","event" ));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create '%s' proc fs entry\n",
+                                 "event"));
                error = -EFAULT;
        }
        return_VALUE(error);
index dd3a72a869f4adf0d410ee433d148df529cbec3c..842d1e3fb37b968c66ec45c8a6a5f9485d55df1a 100644 (file)
 #include <acpi/acevents.h>
 
 #define _COMPONENT          ACPI_EVENTS
-        ACPI_MODULE_NAME    ("evevent")
+ACPI_MODULE_NAME("evevent")
 
 /* Local prototypes */
+static acpi_status acpi_ev_fixed_event_initialize(void);
 
-static acpi_status
-acpi_ev_fixed_event_initialize (
-       void);
-
-static u32
-acpi_ev_fixed_event_dispatch (
-       u32                             event);
-
+static u32 acpi_ev_fixed_event_dispatch(u32 event);
 
 /*******************************************************************************
  *
@@ -70,21 +64,17 @@ acpi_ev_fixed_event_dispatch (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_initialize_events (
-       void)
+acpi_status acpi_ev_initialize_events(void)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_initialize_events");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_initialize_events");
 
        /* Make sure we have ACPI tables */
 
        if (!acpi_gbl_DSDT) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "No ACPI tables present!\n"));
-               return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "No ACPI tables present!\n"));
+               return_ACPI_STATUS(AE_NO_ACPI_TABLES);
        }
 
        /*
@@ -92,26 +82,22 @@ acpi_ev_initialize_events (
         * enabling SCIs to prevent interrupts from occurring before the handlers are
         * installed.
         */
-       status = acpi_ev_fixed_event_initialize ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR ((
-                               "Unable to initialize fixed events, %s\n",
-                               acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       status = acpi_ev_fixed_event_initialize();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Unable to initialize fixed events, %s\n",
+                                  acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_ev_gpe_initialize ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR ((
-                               "Unable to initialize general purpose events, %s\n",
-                               acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       status = acpi_ev_gpe_initialize();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Unable to initialize general purpose events, %s\n", acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_install_xrupt_handlers
@@ -124,41 +110,32 @@ acpi_ev_initialize_events (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_install_xrupt_handlers (
-       void)
+acpi_status acpi_ev_install_xrupt_handlers(void)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_install_xrupt_handlers");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_install_xrupt_handlers");
 
        /* Install the SCI handler */
 
-       status = acpi_ev_install_sci_handler ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR ((
-                               "Unable to install System Control Interrupt Handler, %s\n",
-                               acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       status = acpi_ev_install_sci_handler();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Unable to install System Control Interrupt Handler, %s\n", acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
        /* Install the handler for the Global Lock */
 
-       status = acpi_ev_init_global_lock_handler ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR ((
-                               "Unable to initialize Global Lock handler, %s\n",
-                               acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       status = acpi_ev_init_global_lock_handler();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Unable to initialize Global Lock handler, %s\n", acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
        acpi_gbl_events_initialized = TRUE;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_fixed_event_initialize
@@ -171,13 +148,10 @@ acpi_ev_install_xrupt_handlers (
  *
  ******************************************************************************/
 
-static acpi_status
-acpi_ev_fixed_event_initialize (
-       void)
+static acpi_status acpi_ev_fixed_event_initialize(void)
 {
-       acpi_native_uint                i;
-       acpi_status                     status;
-
+       acpi_native_uint i;
+       acpi_status status;
 
        /*
         * Initialize the structure that keeps track of fixed event handlers
@@ -190,10 +164,11 @@ acpi_ev_fixed_event_initialize (
                /* Enable the fixed event */
 
                if (acpi_gbl_fixed_event_info[i].enable_register_id != 0xFF) {
-                       status = acpi_set_register (
-                                        acpi_gbl_fixed_event_info[i].enable_register_id,
-                                        0, ACPI_MTX_LOCK);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_set_register(acpi_gbl_fixed_event_info[i].
+                                             enable_register_id, 0,
+                                             ACPI_MTX_LOCK);
+                       if (ACPI_FAILURE(status)) {
                                return (status);
                        }
                }
@@ -202,7 +177,6 @@ acpi_ev_fixed_event_initialize (
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_fixed_event_detect
@@ -215,31 +189,27 @@ acpi_ev_fixed_event_initialize (
  *
  ******************************************************************************/
 
-u32
-acpi_ev_fixed_event_detect (
-       void)
+u32 acpi_ev_fixed_event_detect(void)
 {
-       u32                             int_status = ACPI_INTERRUPT_NOT_HANDLED;
-       u32                             fixed_status;
-       u32                             fixed_enable;
-       acpi_native_uint                i;
-
-
-       ACPI_FUNCTION_NAME ("ev_fixed_event_detect");
+       u32 int_status = ACPI_INTERRUPT_NOT_HANDLED;
+       u32 fixed_status;
+       u32 fixed_enable;
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_NAME("ev_fixed_event_detect");
 
        /*
         * Read the fixed feature status and enable registers, as all the cases
         * depend on their values.  Ignore errors here.
         */
-       (void) acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_STATUS,
-                        &fixed_status);
-       (void) acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, ACPI_REGISTER_PM1_ENABLE,
-                        &fixed_enable);
+       (void)acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK,
+                                   ACPI_REGISTER_PM1_STATUS, &fixed_status);
+       (void)acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK,
+                                   ACPI_REGISTER_PM1_ENABLE, &fixed_enable);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS,
-               "Fixed Event Block: Enable %08X Status %08X\n",
-               fixed_enable, fixed_status));
+       ACPI_DEBUG_PRINT((ACPI_DB_INTERRUPTS,
+                         "Fixed Event Block: Enable %08X Status %08X\n",
+                         fixed_enable, fixed_status));
 
        /*
         * Check for all possible Fixed Events and dispatch those that are active
@@ -247,18 +217,19 @@ acpi_ev_fixed_event_detect (
        for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) {
                /* Both the status and enable bits must be on for this event */
 
-               if ((fixed_status & acpi_gbl_fixed_event_info[i].status_bit_mask) &&
-                       (fixed_enable & acpi_gbl_fixed_event_info[i].enable_bit_mask)) {
+               if ((fixed_status & acpi_gbl_fixed_event_info[i].
+                    status_bit_mask)
+                   && (fixed_enable & acpi_gbl_fixed_event_info[i].
+                       enable_bit_mask)) {
                        /* Found an active (signalled) event */
 
-                       int_status |= acpi_ev_fixed_event_dispatch ((u32) i);
+                       int_status |= acpi_ev_fixed_event_dispatch((u32) i);
                }
        }
 
        return (int_status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_fixed_event_dispatch
@@ -272,39 +243,32 @@ acpi_ev_fixed_event_detect (
  *
  ******************************************************************************/
 
-static u32
-acpi_ev_fixed_event_dispatch (
-       u32                             event)
+static u32 acpi_ev_fixed_event_dispatch(u32 event)
 {
 
-
-       ACPI_FUNCTION_ENTRY ();
-
+       ACPI_FUNCTION_ENTRY();
 
        /* Clear the status bit */
 
-       (void) acpi_set_register (acpi_gbl_fixed_event_info[event].status_register_id,
-                        1, ACPI_MTX_DO_NOT_LOCK);
+       (void)acpi_set_register(acpi_gbl_fixed_event_info[event].
+                               status_register_id, 1, ACPI_MTX_DO_NOT_LOCK);
 
        /*
         * Make sure we've got a handler.  If not, report an error.
         * The event is disabled to prevent further interrupts.
         */
        if (NULL == acpi_gbl_fixed_event_handlers[event].handler) {
-               (void) acpi_set_register (acpi_gbl_fixed_event_info[event].enable_register_id,
-                               0, ACPI_MTX_DO_NOT_LOCK);
+               (void)acpi_set_register(acpi_gbl_fixed_event_info[event].
+                                       enable_register_id, 0,
+                                       ACPI_MTX_DO_NOT_LOCK);
 
-               ACPI_REPORT_ERROR (
-                       ("No installed handler for fixed event [%08X]\n",
-                       event));
+               ACPI_REPORT_ERROR(("No installed handler for fixed event [%08X]\n", event));
 
                return (ACPI_INTERRUPT_NOT_HANDLED);
        }
 
        /* Invoke the Fixed Event handler */
 
-       return ((acpi_gbl_fixed_event_handlers[event].handler)(
-                         acpi_gbl_fixed_event_handlers[event].context));
+       return ((acpi_gbl_fixed_event_handlers[event].
+                handler) (acpi_gbl_fixed_event_handlers[event].context));
 }
-
-
index 081120b109ba98953e7acc247c50c4580d6d56bd..b2f232df13d89e48eeab7df18f64aabdf24111dc 100644 (file)
 #include <acpi/acnamesp.h>
 
 #define _COMPONENT          ACPI_EVENTS
-        ACPI_MODULE_NAME    ("evgpe")
+ACPI_MODULE_NAME("evgpe")
 
 /* Local prototypes */
-
-static void ACPI_SYSTEM_XFACE
-acpi_ev_asynch_execute_gpe_method (
-       void                            *context);
-
+static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context);
 
 /*******************************************************************************
  *
@@ -69,15 +65,11 @@ acpi_ev_asynch_execute_gpe_method (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_set_gpe_type (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       u8                              type)
+acpi_ev_set_gpe_type(struct acpi_gpe_event_info *gpe_event_info, u8 type)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_set_gpe_type");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_set_gpe_type");
 
        /* Validate type and update register enable masks */
 
@@ -88,21 +80,20 @@ acpi_ev_set_gpe_type (
                break;
 
        default:
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Disable the GPE if currently enabled */
 
-       status = acpi_ev_disable_gpe (gpe_event_info);
+       status = acpi_ev_disable_gpe(gpe_event_info);
 
        /* Type was validated above */
 
-       gpe_event_info->flags &= ~ACPI_GPE_TYPE_MASK; /* Clear type bits */
-       gpe_event_info->flags |= type;              /* Insert type */
-       return_ACPI_STATUS (status);
+       gpe_event_info->flags &= ~ACPI_GPE_TYPE_MASK;   /* Clear type bits */
+       gpe_event_info->flags |= type;  /* Insert type */
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_update_gpe_enable_masks
@@ -118,57 +109,55 @@ acpi_ev_set_gpe_type (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_update_gpe_enable_masks (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       u8                              type)
+acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info,
+                               u8 type)
 {
-       struct acpi_gpe_register_info   *gpe_register_info;
-       u8                              register_bit;
-
-
-       ACPI_FUNCTION_TRACE ("ev_update_gpe_enable_masks");
+       struct acpi_gpe_register_info *gpe_register_info;
+       u8 register_bit;
 
+       ACPI_FUNCTION_TRACE("ev_update_gpe_enable_masks");
 
        gpe_register_info = gpe_event_info->register_info;
        if (!gpe_register_info) {
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
        register_bit = gpe_event_info->register_bit;
 
        /* 1) Disable case.  Simply clear all enable bits */
 
        if (type == ACPI_GPE_DISABLE) {
-               ACPI_CLEAR_BIT (gpe_register_info->enable_for_wake, register_bit);
-               ACPI_CLEAR_BIT (gpe_register_info->enable_for_run, register_bit);
-               return_ACPI_STATUS (AE_OK);
+               ACPI_CLEAR_BIT(gpe_register_info->enable_for_wake,
+                              register_bit);
+               ACPI_CLEAR_BIT(gpe_register_info->enable_for_run, register_bit);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* 2) Enable case.  Set/Clear the appropriate enable bits */
 
        switch (gpe_event_info->flags & ACPI_GPE_TYPE_MASK) {
        case ACPI_GPE_TYPE_WAKE:
-               ACPI_SET_BIT   (gpe_register_info->enable_for_wake, register_bit);
-               ACPI_CLEAR_BIT (gpe_register_info->enable_for_run, register_bit);
+               ACPI_SET_BIT(gpe_register_info->enable_for_wake, register_bit);
+               ACPI_CLEAR_BIT(gpe_register_info->enable_for_run, register_bit);
                break;
 
        case ACPI_GPE_TYPE_RUNTIME:
-               ACPI_CLEAR_BIT (gpe_register_info->enable_for_wake, register_bit);
-               ACPI_SET_BIT   (gpe_register_info->enable_for_run, register_bit);
+               ACPI_CLEAR_BIT(gpe_register_info->enable_for_wake,
+                              register_bit);
+               ACPI_SET_BIT(gpe_register_info->enable_for_run, register_bit);
                break;
 
        case ACPI_GPE_TYPE_WAKE_RUN:
-               ACPI_SET_BIT   (gpe_register_info->enable_for_wake, register_bit);
-               ACPI_SET_BIT   (gpe_register_info->enable_for_run, register_bit);
+               ACPI_SET_BIT(gpe_register_info->enable_for_wake, register_bit);
+               ACPI_SET_BIT(gpe_register_info->enable_for_run, register_bit);
                break;
 
        default:
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_enable_gpe
@@ -184,21 +173,19 @@ acpi_ev_update_gpe_enable_masks (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_enable_gpe (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       u8                              write_to_hardware)
+acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info,
+                  u8 write_to_hardware)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_enable_gpe");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_enable_gpe");
 
        /* Make sure HW enable masks are updated */
 
-       status = acpi_ev_update_gpe_enable_masks (gpe_event_info, ACPI_GPE_ENABLE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ev_update_gpe_enable_masks(gpe_event_info, ACPI_GPE_ENABLE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Mark wake-enabled or HW enable, or both */
@@ -206,41 +193,40 @@ acpi_ev_enable_gpe (
        switch (gpe_event_info->flags & ACPI_GPE_TYPE_MASK) {
        case ACPI_GPE_TYPE_WAKE:
 
-               ACPI_SET_BIT (gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
+               ACPI_SET_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
                break;
 
        case ACPI_GPE_TYPE_WAKE_RUN:
 
-               ACPI_SET_BIT (gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
+               ACPI_SET_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
 
                /*lint -fallthrough */
 
        case ACPI_GPE_TYPE_RUNTIME:
 
-               ACPI_SET_BIT (gpe_event_info->flags, ACPI_GPE_RUN_ENABLED);
+               ACPI_SET_BIT(gpe_event_info->flags, ACPI_GPE_RUN_ENABLED);
 
                if (write_to_hardware) {
                        /* Clear the GPE (of stale events), then enable it */
 
-                       status = acpi_hw_clear_gpe (gpe_event_info);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status = acpi_hw_clear_gpe(gpe_event_info);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
 
                        /* Enable the requested runtime GPE */
 
-                       status = acpi_hw_write_gpe_enable_reg (gpe_event_info);
+                       status = acpi_hw_write_gpe_enable_reg(gpe_event_info);
                }
                break;
 
        default:
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_disable_gpe
@@ -253,36 +239,33 @@ acpi_ev_enable_gpe (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_disable_gpe (
-       struct acpi_gpe_event_info      *gpe_event_info)
+acpi_status acpi_ev_disable_gpe(struct acpi_gpe_event_info *gpe_event_info)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_disable_gpe");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_disable_gpe");
 
        if (!(gpe_event_info->flags & ACPI_GPE_ENABLE_MASK)) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Make sure HW enable masks are updated */
 
-       status = acpi_ev_update_gpe_enable_masks (gpe_event_info, ACPI_GPE_DISABLE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ev_update_gpe_enable_masks(gpe_event_info, ACPI_GPE_DISABLE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Mark wake-disabled or HW disable, or both */
 
        switch (gpe_event_info->flags & ACPI_GPE_TYPE_MASK) {
        case ACPI_GPE_TYPE_WAKE:
-               ACPI_CLEAR_BIT (gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
+               ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
                break;
 
        case ACPI_GPE_TYPE_WAKE_RUN:
-               ACPI_CLEAR_BIT (gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
+               ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_WAKE_ENABLED);
 
                /*lint -fallthrough */
 
@@ -290,18 +273,17 @@ acpi_ev_disable_gpe (
 
                /* Disable the requested runtime GPE */
 
-               ACPI_CLEAR_BIT (gpe_event_info->flags, ACPI_GPE_RUN_ENABLED);
-               status = acpi_hw_write_gpe_enable_reg (gpe_event_info);
+               ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_RUN_ENABLED);
+               status = acpi_hw_write_gpe_enable_reg(gpe_event_info);
                break;
 
        default:
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_get_gpe_event_info
@@ -319,18 +301,14 @@ acpi_ev_disable_gpe (
  *
  ******************************************************************************/
 
-struct acpi_gpe_event_info *
-acpi_ev_get_gpe_event_info (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number)
+struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device,
+                                                      u32 gpe_number)
 {
-       union acpi_operand_object       *obj_desc;
-       struct acpi_gpe_block_info      *gpe_block;
-       acpi_native_uint                i;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       union acpi_operand_object *obj_desc;
+       struct acpi_gpe_block_info *gpe_block;
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* A NULL gpe_block means use the FADT-defined GPE block(s) */
 
@@ -340,11 +318,14 @@ acpi_ev_get_gpe_event_info (
                for (i = 0; i < ACPI_MAX_GPE_BLOCKS; i++) {
                        gpe_block = acpi_gbl_gpe_fadt_blocks[i];
                        if (gpe_block) {
-                               if ((gpe_number >= gpe_block->block_base_number) &&
-                                       (gpe_number < gpe_block->block_base_number +
-                                               (gpe_block->register_count * 8))) {
-                                       return (&gpe_block->event_info[gpe_number -
-                                               gpe_block->block_base_number]);
+                               if ((gpe_number >= gpe_block->block_base_number)
+                                   && (gpe_number <
+                                       gpe_block->block_base_number +
+                                       (gpe_block->register_count * 8))) {
+                                       return (&gpe_block->
+                                               event_info[gpe_number -
+                                                          gpe_block->
+                                                          block_base_number]);
                                }
                        }
                }
@@ -356,23 +337,25 @@ acpi_ev_get_gpe_event_info (
 
        /* A Non-NULL gpe_device means this is a GPE Block Device */
 
-       obj_desc = acpi_ns_get_attached_object ((struct acpi_namespace_node *) gpe_device);
-       if (!obj_desc ||
-               !obj_desc->device.gpe_block) {
+       obj_desc =
+           acpi_ns_get_attached_object((struct acpi_namespace_node *)
+                                       gpe_device);
+       if (!obj_desc || !obj_desc->device.gpe_block) {
                return (NULL);
        }
 
        gpe_block = obj_desc->device.gpe_block;
 
        if ((gpe_number >= gpe_block->block_base_number) &&
-               (gpe_number < gpe_block->block_base_number + (gpe_block->register_count * 8))) {
-               return (&gpe_block->event_info[gpe_number - gpe_block->block_base_number]);
+           (gpe_number <
+            gpe_block->block_base_number + (gpe_block->register_count * 8))) {
+               return (&gpe_block->
+                       event_info[gpe_number - gpe_block->block_base_number]);
        }
 
        return (NULL);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_gpe_detect
@@ -387,22 +370,20 @@ acpi_ev_get_gpe_event_info (
  *
  ******************************************************************************/
 
-u32
-acpi_ev_gpe_detect (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_list)
+u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
 {
-       u32                             int_status = ACPI_INTERRUPT_NOT_HANDLED;
-       u8                              enabled_status_byte;
-       struct acpi_gpe_register_info   *gpe_register_info;
-       u32                             status_reg;
-       u32                             enable_reg;
-       acpi_status                     status;
-       struct acpi_gpe_block_info      *gpe_block;
-       acpi_native_uint                i;
-       acpi_native_uint                j;
-
-
-       ACPI_FUNCTION_NAME ("ev_gpe_detect");
+       u32 int_status = ACPI_INTERRUPT_NOT_HANDLED;
+       u8 enabled_status_byte;
+       struct acpi_gpe_register_info *gpe_register_info;
+       u32 status_reg;
+       u32 enable_reg;
+       u32 flags;
+       acpi_status status;
+       struct acpi_gpe_block_info *gpe_block;
+       acpi_native_uint i;
+       acpi_native_uint j;
+
+       ACPI_FUNCTION_NAME("ev_gpe_detect");
 
        /* Check for the case where there are no GPEs */
 
@@ -412,7 +393,7 @@ acpi_ev_gpe_detect (
 
        /* Examine all GPE blocks attached to this interrupt level */
 
-       acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_ISR);
+       flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
        gpe_block = gpe_xrupt_list->gpe_block_list_head;
        while (gpe_block) {
                /*
@@ -427,23 +408,30 @@ acpi_ev_gpe_detect (
 
                        /* Read the Status Register */
 
-                       status = acpi_hw_low_level_read (ACPI_GPE_REGISTER_WIDTH, &status_reg,
-                                        &gpe_register_info->status_address);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_hw_low_level_read(ACPI_GPE_REGISTER_WIDTH,
+                                                  &status_reg,
+                                                  &gpe_register_info->
+                                                  status_address);
+                       if (ACPI_FAILURE(status)) {
                                goto unlock_and_exit;
                        }
 
                        /* Read the Enable Register */
 
-                       status = acpi_hw_low_level_read (ACPI_GPE_REGISTER_WIDTH, &enable_reg,
-                                        &gpe_register_info->enable_address);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_hw_low_level_read(ACPI_GPE_REGISTER_WIDTH,
+                                                  &enable_reg,
+                                                  &gpe_register_info->
+                                                  enable_address);
+                       if (ACPI_FAILURE(status)) {
                                goto unlock_and_exit;
                        }
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS,
-                               "Read GPE Register at GPE%X: Status=%02X, Enable=%02X\n",
-                               gpe_register_info->base_gpe_number, status_reg, enable_reg));
+                       ACPI_DEBUG_PRINT((ACPI_DB_INTERRUPTS,
+                                         "Read GPE Register at GPE%X: Status=%02X, Enable=%02X\n",
+                                         gpe_register_info->base_gpe_number,
+                                         status_reg, enable_reg));
 
                        /* Check if there is anything active at all in this register */
 
@@ -459,14 +447,21 @@ acpi_ev_gpe_detect (
                        for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) {
                                /* Examine one GPE bit */
 
-                               if (enabled_status_byte & acpi_gbl_decode_to8bit[j]) {
+                               if (enabled_status_byte &
+                                   acpi_gbl_decode_to8bit[j]) {
                                        /*
                                         * Found an active GPE. Dispatch the event to a handler
                                         * or method.
                                         */
-                                       int_status |= acpi_ev_gpe_dispatch (
-                                               &gpe_block->event_info[(i * ACPI_GPE_REGISTER_WIDTH) + j],
-                                               (u32) j + gpe_register_info->base_gpe_number);
+                                       int_status |=
+                                           acpi_ev_gpe_dispatch(&gpe_block->
+                                                                event_info[(i *
+                                                                            ACPI_GPE_REGISTER_WIDTH)
+                                                                           +
+                                                                           j],
+                                                                (u32) j +
+                                                                gpe_register_info->
+                                                                base_gpe_number);
                                }
                        }
                }
@@ -474,13 +469,12 @@ acpi_ev_gpe_detect (
                gpe_block = gpe_block->next;
        }
 
-unlock_and_exit:
+      unlock_and_exit:
 
-       acpi_os_release_lock (acpi_gbl_gpe_lock, ACPI_ISR);
+       acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
        return (int_status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_asynch_execute_gpe_method
@@ -497,45 +491,41 @@ unlock_and_exit:
  *
  ******************************************************************************/
 
-static void ACPI_SYSTEM_XFACE
-acpi_ev_asynch_execute_gpe_method (
-       void                            *context)
+static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context)
 {
-       struct acpi_gpe_event_info      *gpe_event_info = (void *) context;
-       u32                             gpe_number = 0;
-       acpi_status                     status;
-       struct acpi_gpe_event_info      local_gpe_event_info;
-       struct acpi_parameter_info      info;
-
+       struct acpi_gpe_event_info *gpe_event_info = (void *)context;
+       u32 gpe_number = 0;
+       acpi_status status;
+       struct acpi_gpe_event_info local_gpe_event_info;
+       struct acpi_parameter_info info;
 
-       ACPI_FUNCTION_TRACE ("ev_asynch_execute_gpe_method");
+       ACPI_FUNCTION_TRACE("ev_asynch_execute_gpe_method");
 
-
-       status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+       if (ACPI_FAILURE(status)) {
                return_VOID;
        }
 
        /* Must revalidate the gpe_number/gpe_block */
 
-       if (!acpi_ev_valid_gpe_event (gpe_event_info)) {
-               status = acpi_ut_release_mutex (ACPI_MTX_EVENTS);
+       if (!acpi_ev_valid_gpe_event(gpe_event_info)) {
+               status = acpi_ut_release_mutex(ACPI_MTX_EVENTS);
                return_VOID;
        }
 
        /* Set the GPE flags for return to enabled state */
 
-       (void) acpi_ev_enable_gpe (gpe_event_info, FALSE);
+       (void)acpi_ev_enable_gpe(gpe_event_info, FALSE);
 
        /*
         * Take a snapshot of the GPE info for this level - we copy the
         * info to prevent a race condition with remove_handler/remove_block.
         */
-       ACPI_MEMCPY (&local_gpe_event_info, gpe_event_info,
-               sizeof (struct acpi_gpe_event_info));
+       ACPI_MEMCPY(&local_gpe_event_info, gpe_event_info,
+                   sizeof(struct acpi_gpe_event_info));
 
-       status = acpi_ut_release_mutex (ACPI_MTX_EVENTS);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_release_mutex(ACPI_MTX_EVENTS);
+       if (ACPI_FAILURE(status)) {
                return_VOID;
        }
 
@@ -544,44 +534,40 @@ acpi_ev_asynch_execute_gpe_method (
         * time to avoid race with ev_gpe_install_handler
         */
        if ((local_gpe_event_info.flags & ACPI_GPE_DISPATCH_MASK) ==
-                       ACPI_GPE_DISPATCH_METHOD) {
+           ACPI_GPE_DISPATCH_METHOD) {
                /*
                 * Invoke the GPE Method (_Lxx, _Exx) i.e., evaluate the _Lxx/_Exx
                 * control method that corresponds to this GPE
                 */
                info.node = local_gpe_event_info.dispatch.method_node;
-               info.parameters = ACPI_CAST_PTR (union acpi_operand_object *, gpe_event_info);
+               info.parameters =
+                   ACPI_CAST_PTR(union acpi_operand_object *, gpe_event_info);
                info.parameter_type = ACPI_PARAM_GPE;
 
-               status = acpi_ns_evaluate_by_handle (&info);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR ((
-                               "%s while evaluating method [%4.4s] for GPE[%2X]\n",
-                               acpi_format_exception (status),
-                               acpi_ut_get_node_name (local_gpe_event_info.dispatch.method_node),
-                               gpe_number));
+               status = acpi_ns_evaluate_by_handle(&info);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("%s while evaluating method [%4.4s] for GPE[%2X]\n", acpi_format_exception(status), acpi_ut_get_node_name(local_gpe_event_info.dispatch.method_node), gpe_number));
                }
        }
 
        if ((local_gpe_event_info.flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
-                       ACPI_GPE_LEVEL_TRIGGERED) {
+           ACPI_GPE_LEVEL_TRIGGERED) {
                /*
                 * GPE is level-triggered, we clear the GPE status bit after
                 * handling the event.
                 */
-               status = acpi_hw_clear_gpe (&local_gpe_event_info);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_hw_clear_gpe(&local_gpe_event_info);
+               if (ACPI_FAILURE(status)) {
                        return_VOID;
                }
        }
 
        /* Enable this GPE */
 
-       (void) acpi_hw_write_gpe_enable_reg (&local_gpe_event_info);
+       (void)acpi_hw_write_gpe_enable_reg(&local_gpe_event_info);
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_gpe_dispatch
@@ -599,38 +585,31 @@ acpi_ev_asynch_execute_gpe_method (
  ******************************************************************************/
 
 u32
-acpi_ev_gpe_dispatch (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       u32                             gpe_number)
+acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info, u32 gpe_number)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_gpe_dispatch");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_gpe_dispatch");
 
        /*
         * If edge-triggered, clear the GPE status bit now.  Note that
         * level-triggered events are cleared after the GPE is serviced.
         */
        if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
-                       ACPI_GPE_EDGE_TRIGGERED) {
-               status = acpi_hw_clear_gpe (gpe_event_info);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR ((
-                               "acpi_ev_gpe_dispatch: %s, Unable to clear GPE[%2X]\n",
-                               acpi_format_exception (status), gpe_number));
-                       return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
+           ACPI_GPE_EDGE_TRIGGERED) {
+               status = acpi_hw_clear_gpe(gpe_event_info);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("acpi_ev_gpe_dispatch: %s, Unable to clear GPE[%2X]\n", acpi_format_exception(status), gpe_number));
+                       return_VALUE(ACPI_INTERRUPT_NOT_HANDLED);
                }
        }
 
        /* Save current system state */
 
        if (acpi_gbl_system_awake_and_running) {
-               ACPI_SET_BIT (gpe_event_info->flags, ACPI_GPE_SYSTEM_RUNNING);
-       }
-       else {
-               ACPI_CLEAR_BIT (gpe_event_info->flags, ACPI_GPE_SYSTEM_RUNNING);
+               ACPI_SET_BIT(gpe_event_info->flags, ACPI_GPE_SYSTEM_RUNNING);
+       } else {
+               ACPI_CLEAR_BIT(gpe_event_info->flags, ACPI_GPE_SYSTEM_RUNNING);
        }
 
        /*
@@ -647,19 +626,19 @@ acpi_ev_gpe_dispatch (
                 * Invoke the installed handler (at interrupt level)
                 * Ignore return status for now.  TBD: leave GPE disabled on error?
                 */
-               (void) gpe_event_info->dispatch.handler->address (
-                                 gpe_event_info->dispatch.handler->context);
+               (void)gpe_event_info->dispatch.handler->address(gpe_event_info->
+                                                               dispatch.
+                                                               handler->
+                                                               context);
 
                /* It is now safe to clear level-triggered events. */
 
                if ((gpe_event_info->flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
-                               ACPI_GPE_LEVEL_TRIGGERED) {
-                       status = acpi_hw_clear_gpe (gpe_event_info);
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_REPORT_ERROR ((
-                                       "acpi_ev_gpe_dispatch: %s, Unable to clear GPE[%2X]\n",
-                                       acpi_format_exception (status), gpe_number));
-                               return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
+                   ACPI_GPE_LEVEL_TRIGGERED) {
+                       status = acpi_hw_clear_gpe(gpe_event_info);
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_REPORT_ERROR(("acpi_ev_gpe_dispatch: %s, Unable to clear GPE[%2X]\n", acpi_format_exception(status), gpe_number));
+                               return_VALUE(ACPI_INTERRUPT_NOT_HANDLED);
                        }
                }
                break;
@@ -670,24 +649,21 @@ acpi_ev_gpe_dispatch (
                 * Disable GPE, so it doesn't keep firing before the method has a
                 * chance to run.
                 */
-               status = acpi_ev_disable_gpe (gpe_event_info);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR ((
-                               "acpi_ev_gpe_dispatch: %s, Unable to disable GPE[%2X]\n",
-                               acpi_format_exception (status), gpe_number));
-                       return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
+               status = acpi_ev_disable_gpe(gpe_event_info);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("acpi_ev_gpe_dispatch: %s, Unable to disable GPE[%2X]\n", acpi_format_exception(status), gpe_number));
+                       return_VALUE(ACPI_INTERRUPT_NOT_HANDLED);
                }
 
                /*
                 * Execute the method associated with the GPE
                 * NOTE: Level-triggered GPEs are cleared after the method completes.
                 */
-               status = acpi_os_queue_for_execution (OSD_PRIORITY_GPE,
-                                acpi_ev_asynch_execute_gpe_method, gpe_event_info);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR ((
-                               "acpi_ev_gpe_dispatch: %s, Unable to queue handler for GPE[%2X] - event disabled\n",
-                               acpi_format_exception (status), gpe_number));
+               status = acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
+                                                    acpi_ev_asynch_execute_gpe_method,
+                                                    gpe_event_info);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("acpi_ev_gpe_dispatch: %s, Unable to queue handler for GPE[%2X] - event disabled\n", acpi_format_exception(status), gpe_number));
                }
                break;
 
@@ -695,28 +671,23 @@ acpi_ev_gpe_dispatch (
 
                /* No handler or method to run! */
 
-               ACPI_REPORT_ERROR ((
-                       "acpi_ev_gpe_dispatch: No handler or method for GPE[%2X], disabling event\n",
-                       gpe_number));
+               ACPI_REPORT_ERROR(("acpi_ev_gpe_dispatch: No handler or method for GPE[%2X], disabling event\n", gpe_number));
 
                /*
                 * Disable the GPE.  The GPE will remain disabled until the ACPI
                 * Core Subsystem is restarted, or a handler is installed.
                 */
-               status = acpi_ev_disable_gpe (gpe_event_info);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR ((
-                               "acpi_ev_gpe_dispatch: %s, Unable to disable GPE[%2X]\n",
-                               acpi_format_exception (status), gpe_number));
-                       return_VALUE (ACPI_INTERRUPT_NOT_HANDLED);
+               status = acpi_ev_disable_gpe(gpe_event_info);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("acpi_ev_gpe_dispatch: %s, Unable to disable GPE[%2X]\n", acpi_format_exception(status), gpe_number));
+                       return_VALUE(ACPI_INTERRUPT_NOT_HANDLED);
                }
                break;
        }
 
-       return_VALUE (ACPI_INTERRUPT_HANDLED);
+       return_VALUE(ACPI_INTERRUPT_HANDLED);
 }
 
-
 #ifdef ACPI_GPE_NOTIFY_CHECK
 /*******************************************************************************
  * TBD: NOT USED, PROTOTYPE ONLY AND WILL PROBABLY BE REMOVED
@@ -735,35 +706,29 @@ acpi_ev_gpe_dispatch (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_check_for_wake_only_gpe (
-       struct acpi_gpe_event_info      *gpe_event_info)
+acpi_ev_check_for_wake_only_gpe(struct acpi_gpe_event_info *gpe_event_info)
 {
-       acpi_status                     status;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_check_for_wake_only_gpe");
 
-       ACPI_FUNCTION_TRACE ("ev_check_for_wake_only_gpe");
-
-
-       if ((gpe_event_info) &&  /* Only >0 for _Lxx/_Exx */
-          ((gpe_event_info->flags & ACPI_GPE_SYSTEM_MASK) == ACPI_GPE_SYSTEM_RUNNING)) /* System state at GPE time */ {
+       if ((gpe_event_info) && /* Only >0 for _Lxx/_Exx */
+           ((gpe_event_info->flags & ACPI_GPE_SYSTEM_MASK) == ACPI_GPE_SYSTEM_RUNNING)) {      /* System state at GPE time */
                /* This must be a wake-only GPE, disable it */
 
-               status = acpi_ev_disable_gpe (gpe_event_info);
+               status = acpi_ev_disable_gpe(gpe_event_info);
 
                /* Set GPE to wake-only.  Do not change wake disabled/enabled status */
 
-               acpi_ev_set_gpe_type (gpe_event_info, ACPI_GPE_TYPE_WAKE);
+               acpi_ev_set_gpe_type(gpe_event_info, ACPI_GPE_TYPE_WAKE);
 
-               ACPI_REPORT_INFO (("GPE %p was updated from wake/run to wake-only\n",
-                               gpe_event_info));
+               ACPI_REPORT_INFO(("GPE %p was updated from wake/run to wake-only\n", gpe_event_info));
 
                /* This was a wake-only GPE */
 
-               return_ACPI_STATUS (AE_WAKE_ONLY_GPE);
+               return_ACPI_STATUS(AE_WAKE_ONLY_GPE);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 #endif
-
-
index 84186a7d17b2cb414de0622f6c098fd8b44d344a..b312eb33c43ee6086123f2b50a23da722b124091 100644 (file)
 #include <acpi/acnamesp.h>
 
 #define _COMPONENT          ACPI_EVENTS
-        ACPI_MODULE_NAME    ("evgpeblk")
+ACPI_MODULE_NAME("evgpeblk")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ev_save_method_info (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *obj_desc,
-       void                            **return_value);
+acpi_ev_save_method_info(acpi_handle obj_handle,
+                        u32 level, void *obj_desc, void **return_value);
 
 static acpi_status
-acpi_ev_match_prw_and_gpe (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *info,
-       void                            **return_value);
+acpi_ev_match_prw_and_gpe(acpi_handle obj_handle,
+                         u32 level, void *info, void **return_value);
 
-static struct acpi_gpe_xrupt_info *
-acpi_ev_get_gpe_xrupt_block (
-       u32                             interrupt_level);
+static struct acpi_gpe_xrupt_info *acpi_ev_get_gpe_xrupt_block(u32
+                                                              interrupt_number);
 
 static acpi_status
-acpi_ev_delete_gpe_xrupt (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt);
+acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt);
 
 static acpi_status
-acpi_ev_install_gpe_block (
-       struct acpi_gpe_block_info      *gpe_block,
-       u32                             interrupt_level);
+acpi_ev_install_gpe_block(struct acpi_gpe_block_info *gpe_block,
+                         u32 interrupt_number);
 
 static acpi_status
-acpi_ev_create_gpe_info_blocks (
-       struct acpi_gpe_block_info      *gpe_block);
-
+acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block);
 
 /*******************************************************************************
  *
@@ -96,16 +84,12 @@ acpi_ev_create_gpe_info_blocks (
  *
  ******************************************************************************/
 
-u8
-acpi_ev_valid_gpe_event (
-       struct acpi_gpe_event_info      *gpe_event_info)
+u8 acpi_ev_valid_gpe_event(struct acpi_gpe_event_info *gpe_event_info)
 {
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_block;
-       struct acpi_gpe_block_info      *gpe_block;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_gpe_xrupt_info *gpe_xrupt_block;
+       struct acpi_gpe_block_info *gpe_block;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* No need for spin lock since we are not changing any list elements */
 
@@ -119,7 +103,10 @@ acpi_ev_valid_gpe_event (
 
                while (gpe_block) {
                        if ((&gpe_block->event_info[0] <= gpe_event_info) &&
-                               (&gpe_block->event_info[((acpi_size) gpe_block->register_count) * 8] > gpe_event_info)) {
+                           (&gpe_block->
+                            event_info[((acpi_size) gpe_block->
+                                        register_count) * 8] >
+                            gpe_event_info)) {
                                return (TRUE);
                        }
 
@@ -132,13 +119,11 @@ acpi_ev_valid_gpe_event (
        return (FALSE);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_walk_gpe_list
  *
  * PARAMETERS:  gpe_walk_callback   - Routine called for each GPE block
- *              Flags               - ACPI_NOT_ISR or ACPI_ISR
  *
  * RETURN:      Status
  *
@@ -146,20 +131,16 @@ acpi_ev_valid_gpe_event (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_walk_gpe_list (
-       ACPI_GPE_CALLBACK       gpe_walk_callback,
-       u32                             flags)
+acpi_status acpi_ev_walk_gpe_list(ACPI_GPE_CALLBACK gpe_walk_callback)
 {
-       struct acpi_gpe_block_info      *gpe_block;
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info;
-       acpi_status                     status = AE_OK;
-
+       struct acpi_gpe_block_info *gpe_block;
+       struct acpi_gpe_xrupt_info *gpe_xrupt_info;
+       acpi_status status = AE_OK;
+       u32 flags;
 
-       ACPI_FUNCTION_TRACE ("ev_walk_gpe_list");
+       ACPI_FUNCTION_TRACE("ev_walk_gpe_list");
 
-
-       acpi_os_acquire_lock (acpi_gbl_gpe_lock, flags);
+       flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
 
        /* Walk the interrupt level descriptor list */
 
@@ -171,8 +152,8 @@ acpi_ev_walk_gpe_list (
                while (gpe_block) {
                        /* One callback per GPE block */
 
-                       status = gpe_walk_callback (gpe_xrupt_info, gpe_block);
-                       if (ACPI_FAILURE (status)) {
+                       status = gpe_walk_callback(gpe_xrupt_info, gpe_block);
+                       if (ACPI_FAILURE(status)) {
                                goto unlock_and_exit;
                        }
 
@@ -182,12 +163,11 @@ acpi_ev_walk_gpe_list (
                gpe_xrupt_info = gpe_xrupt_info->next;
        }
 
-unlock_and_exit:
-       acpi_os_release_lock (acpi_gbl_gpe_lock, flags);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_delete_gpe_handlers
@@ -203,17 +183,14 @@ unlock_and_exit:
  ******************************************************************************/
 
 acpi_status
-acpi_ev_delete_gpe_handlers (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block)
+acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
+                           struct acpi_gpe_block_info *gpe_block)
 {
-       struct acpi_gpe_event_info      *gpe_event_info;
-       acpi_native_uint                i;
-       acpi_native_uint                j;
-
-
-       ACPI_FUNCTION_TRACE ("ev_delete_gpe_handlers");
+       struct acpi_gpe_event_info *gpe_event_info;
+       acpi_native_uint i;
+       acpi_native_uint j;
 
+       ACPI_FUNCTION_TRACE("ev_delete_gpe_handlers");
 
        /* Examine each GPE Register within the block */
 
@@ -221,21 +198,23 @@ acpi_ev_delete_gpe_handlers (
                /* Now look at the individual GPEs in this byte register */
 
                for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) {
-                       gpe_event_info = &gpe_block->event_info[(i * ACPI_GPE_REGISTER_WIDTH) + j];
+                       gpe_event_info =
+                           &gpe_block->
+                           event_info[(i * ACPI_GPE_REGISTER_WIDTH) + j];
 
                        if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) ==
-                                       ACPI_GPE_DISPATCH_HANDLER) {
-                               ACPI_MEM_FREE (gpe_event_info->dispatch.handler);
+                           ACPI_GPE_DISPATCH_HANDLER) {
+                               ACPI_MEM_FREE(gpe_event_info->dispatch.handler);
                                gpe_event_info->dispatch.handler = NULL;
-                               gpe_event_info->flags &= ~ACPI_GPE_DISPATCH_MASK;
+                               gpe_event_info->flags &=
+                                   ~ACPI_GPE_DISPATCH_MASK;
                        }
                }
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_save_method_info
@@ -259,30 +238,26 @@ acpi_ev_delete_gpe_handlers (
  ******************************************************************************/
 
 static acpi_status
-acpi_ev_save_method_info (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *obj_desc,
-       void                            **return_value)
+acpi_ev_save_method_info(acpi_handle obj_handle,
+                        u32 level, void *obj_desc, void **return_value)
 {
-       struct acpi_gpe_block_info      *gpe_block = (void *) obj_desc;
-       struct acpi_gpe_event_info      *gpe_event_info;
-       u32                             gpe_number;
-       char                            name[ACPI_NAME_SIZE + 1];
-       u8                              type;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_save_method_info");
+       struct acpi_gpe_block_info *gpe_block = (void *)obj_desc;
+       struct acpi_gpe_event_info *gpe_event_info;
+       u32 gpe_number;
+       char name[ACPI_NAME_SIZE + 1];
+       u8 type;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_save_method_info");
 
        /*
         * _Lxx and _Exx GPE method support
         *
         * 1) Extract the name from the object and convert to a string
         */
-       ACPI_MOVE_32_TO_32 (name,
-                          &((struct acpi_namespace_node *) obj_handle)->name.integer);
+       ACPI_MOVE_32_TO_32(name,
+                          &((struct acpi_namespace_node *)obj_handle)->name.
+                          integer);
        name[ACPI_NAME_SIZE] = 0;
 
        /*
@@ -304,34 +279,36 @@ acpi_ev_save_method_info (
        default:
                /* Unknown method type, just ignore it! */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Unknown GPE method type: %s (name not of form _Lxx or _Exx)\n",
-                       name));
-               return_ACPI_STATUS (AE_OK);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unknown GPE method type: %s (name not of form _Lxx or _Exx)\n",
+                                 name));
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Convert the last two characters of the name to the GPE Number */
 
-       gpe_number = ACPI_STRTOUL (&name[2], NULL, 16);
+       gpe_number = ACPI_STRTOUL(&name[2], NULL, 16);
        if (gpe_number == ACPI_UINT32_MAX) {
                /* Conversion failed; invalid method, just ignore it */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Could not extract GPE number from name: %s (name is not of form _Lxx or _Exx)\n",
-                       name));
-               return_ACPI_STATUS (AE_OK);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Could not extract GPE number from name: %s (name is not of form _Lxx or _Exx)\n",
+                                 name));
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Ensure that we have a valid GPE number for this GPE block */
 
        if ((gpe_number < gpe_block->block_base_number) ||
-               (gpe_number >= (gpe_block->block_base_number + (gpe_block->register_count * 8)))) {
+           (gpe_number >=
+            (gpe_block->block_base_number +
+             (gpe_block->register_count * 8)))) {
                /*
                 * Not valid for this GPE block, just ignore it
                 * However, it may be valid for a different GPE block, since GPE0 and GPE1
                 * methods both appear under \_GPE.
                 */
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /*
@@ -339,24 +316,25 @@ acpi_ev_save_method_info (
         * for use during dispatch of this GPE.  Default type is RUNTIME, although
         * this may change when the _PRW methods are executed later.
         */
-       gpe_event_info = &gpe_block->event_info[gpe_number - gpe_block->block_base_number];
+       gpe_event_info =
+           &gpe_block->event_info[gpe_number - gpe_block->block_base_number];
 
        gpe_event_info->flags = (u8) (type | ACPI_GPE_DISPATCH_METHOD |
-                          ACPI_GPE_TYPE_RUNTIME);
+                                     ACPI_GPE_TYPE_RUNTIME);
 
-       gpe_event_info->dispatch.method_node = (struct acpi_namespace_node *) obj_handle;
+       gpe_event_info->dispatch.method_node =
+           (struct acpi_namespace_node *)obj_handle;
 
        /* Update enable mask, but don't enable the HW GPE as of yet */
 
-       status = acpi_ev_enable_gpe (gpe_event_info, FALSE);
+       status = acpi_ev_enable_gpe(gpe_event_info, FALSE);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_LOAD,
-               "Registered GPE method %s as GPE number 0x%.2X\n",
-               name, gpe_number));
-       return_ACPI_STATUS (status);
+       ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
+                         "Registered GPE method %s as GPE number 0x%.2X\n",
+                         name, gpe_number));
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_match_prw_and_gpe
@@ -373,34 +351,29 @@ acpi_ev_save_method_info (
  ******************************************************************************/
 
 static acpi_status
-acpi_ev_match_prw_and_gpe (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *info,
-       void                            **return_value)
+acpi_ev_match_prw_and_gpe(acpi_handle obj_handle,
+                         u32 level, void *info, void **return_value)
 {
-       struct acpi_gpe_walk_info       *gpe_info = (void *) info;
-       struct acpi_namespace_node      *gpe_device;
-       struct acpi_gpe_block_info      *gpe_block;
-       struct acpi_namespace_node      *target_gpe_device;
-       struct acpi_gpe_event_info      *gpe_event_info;
-       union acpi_operand_object       *pkg_desc;
-       union acpi_operand_object       *obj_desc;
-       u32                             gpe_number;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_match_prw_and_gpe");
-
+       struct acpi_gpe_walk_info *gpe_info = (void *)info;
+       struct acpi_namespace_node *gpe_device;
+       struct acpi_gpe_block_info *gpe_block;
+       struct acpi_namespace_node *target_gpe_device;
+       struct acpi_gpe_event_info *gpe_event_info;
+       union acpi_operand_object *pkg_desc;
+       union acpi_operand_object *obj_desc;
+       u32 gpe_number;
+       acpi_status status;
+
+       ACPI_FUNCTION_TRACE("ev_match_prw_and_gpe");
 
        /* Check for a _PRW method under this device */
 
-       status = acpi_ut_evaluate_object (obj_handle, METHOD_NAME__PRW,
-                        ACPI_BTYPE_PACKAGE, &pkg_desc);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_evaluate_object(obj_handle, METHOD_NAME__PRW,
+                                        ACPI_BTYPE_PACKAGE, &pkg_desc);
+       if (ACPI_FAILURE(status)) {
                /* Ignore all errors from _PRW, we don't want to abort the subsystem */
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* The returned _PRW package must have at least two elements */
@@ -420,7 +393,7 @@ acpi_ev_match_prw_and_gpe (
         */
        obj_desc = pkg_desc->package.elements[0];
 
-       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {
+       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
                /* Use FADT-defined GPE device (from definition of _PRW) */
 
                target_gpe_device = acpi_gbl_fadt_gpe_device;
@@ -428,22 +401,23 @@ acpi_ev_match_prw_and_gpe (
                /* Integer is the GPE number in the FADT described GPE blocks */
 
                gpe_number = (u32) obj_desc->integer.value;
-       }
-       else if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_PACKAGE) {
+       } else if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) {
                /* Package contains a GPE reference and GPE number within a GPE block */
 
                if ((obj_desc->package.count < 2) ||
-                       (ACPI_GET_OBJECT_TYPE (obj_desc->package.elements[0]) != ACPI_TYPE_LOCAL_REFERENCE) ||
-                       (ACPI_GET_OBJECT_TYPE (obj_desc->package.elements[1]) != ACPI_TYPE_INTEGER)) {
+                   (ACPI_GET_OBJECT_TYPE(obj_desc->package.elements[0]) !=
+                    ACPI_TYPE_LOCAL_REFERENCE)
+                   || (ACPI_GET_OBJECT_TYPE(obj_desc->package.elements[1]) !=
+                       ACPI_TYPE_INTEGER)) {
                        goto cleanup;
                }
 
                /* Get GPE block reference and decode */
 
-               target_gpe_device = obj_desc->package.elements[0]->reference.node;
+               target_gpe_device =
+                   obj_desc->package.elements[0]->reference.node;
                gpe_number = (u32) obj_desc->package.elements[1]->integer.value;
-       }
-       else {
+       } else {
                /* Unknown type, just ignore it */
 
                goto cleanup;
@@ -458,31 +432,37 @@ acpi_ev_match_prw_and_gpe (
         *          associated with the GPE device.
         */
        if ((gpe_device == target_gpe_device) &&
-               (gpe_number >= gpe_block->block_base_number) &&
-               (gpe_number < gpe_block->block_base_number + (gpe_block->register_count * 8))) {
-               gpe_event_info = &gpe_block->event_info[gpe_number - gpe_block->block_base_number];
+           (gpe_number >= gpe_block->block_base_number) &&
+           (gpe_number <
+            gpe_block->block_base_number + (gpe_block->register_count * 8))) {
+               gpe_event_info =
+                   &gpe_block->event_info[gpe_number -
+                                          gpe_block->block_base_number];
 
                /* Mark GPE for WAKE-ONLY but WAKE_DISABLED */
 
-               gpe_event_info->flags &= ~(ACPI_GPE_WAKE_ENABLED | ACPI_GPE_RUN_ENABLED);
-               status = acpi_ev_set_gpe_type (gpe_event_info, ACPI_GPE_TYPE_WAKE);
-               if (ACPI_FAILURE (status)) {
+               gpe_event_info->flags &=
+                   ~(ACPI_GPE_WAKE_ENABLED | ACPI_GPE_RUN_ENABLED);
+               status =
+                   acpi_ev_set_gpe_type(gpe_event_info, ACPI_GPE_TYPE_WAKE);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
-               status = acpi_ev_update_gpe_enable_masks (gpe_event_info, ACPI_GPE_DISABLE);
+               status =
+                   acpi_ev_update_gpe_enable_masks(gpe_event_info,
+                                                   ACPI_GPE_DISABLE);
        }
 
-cleanup:
-       acpi_ut_remove_reference (pkg_desc);
-       return_ACPI_STATUS (AE_OK);
+      cleanup:
+       acpi_ut_remove_reference(pkg_desc);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_get_gpe_xrupt_block
  *
- * PARAMETERS:  interrupt_level     - Interrupt for a GPE block
+ * PARAMETERS:  interrupt_number     - Interrupt for a GPE block
  *
  * RETURN:      A GPE interrupt block
  *
@@ -493,24 +473,22 @@ cleanup:
  *
  ******************************************************************************/
 
-static struct acpi_gpe_xrupt_info *
-acpi_ev_get_gpe_xrupt_block (
-       u32                             interrupt_level)
+static struct acpi_gpe_xrupt_info *acpi_ev_get_gpe_xrupt_block(u32
+                                                              interrupt_number)
 {
-       struct acpi_gpe_xrupt_info      *next_gpe_xrupt;
-       struct acpi_gpe_xrupt_info      *gpe_xrupt;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_get_gpe_xrupt_block");
+       struct acpi_gpe_xrupt_info *next_gpe_xrupt;
+       struct acpi_gpe_xrupt_info *gpe_xrupt;
+       acpi_status status;
+       u32 flags;
 
+       ACPI_FUNCTION_TRACE("ev_get_gpe_xrupt_block");
 
        /* No need for lock since we are not changing any list elements here */
 
        next_gpe_xrupt = acpi_gbl_gpe_xrupt_list_head;
        while (next_gpe_xrupt) {
-               if (next_gpe_xrupt->interrupt_level == interrupt_level) {
-                       return_PTR (next_gpe_xrupt);
+               if (next_gpe_xrupt->interrupt_number == interrupt_number) {
+                       return_PTR(next_gpe_xrupt);
                }
 
                next_gpe_xrupt = next_gpe_xrupt->next;
@@ -518,16 +496,16 @@ acpi_ev_get_gpe_xrupt_block (
 
        /* Not found, must allocate a new xrupt descriptor */
 
-       gpe_xrupt = ACPI_MEM_CALLOCATE (sizeof (struct acpi_gpe_xrupt_info));
+       gpe_xrupt = ACPI_MEM_CALLOCATE(sizeof(struct acpi_gpe_xrupt_info));
        if (!gpe_xrupt) {
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
-       gpe_xrupt->interrupt_level = interrupt_level;
+       gpe_xrupt->interrupt_number = interrupt_number;
 
        /* Install new interrupt descriptor with spin lock */
 
-       acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+       flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
        if (acpi_gbl_gpe_xrupt_list_head) {
                next_gpe_xrupt = acpi_gbl_gpe_xrupt_list_head;
                while (next_gpe_xrupt->next) {
@@ -536,29 +514,28 @@ acpi_ev_get_gpe_xrupt_block (
 
                next_gpe_xrupt->next = gpe_xrupt;
                gpe_xrupt->previous = next_gpe_xrupt;
-       }
-       else {
+       } else {
                acpi_gbl_gpe_xrupt_list_head = gpe_xrupt;
        }
-       acpi_os_release_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+       acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
 
        /* Install new interrupt handler if not SCI_INT */
 
-       if (interrupt_level != acpi_gbl_FADT->sci_int) {
-               status = acpi_os_install_interrupt_handler (interrupt_level,
-                                acpi_ev_gpe_xrupt_handler, gpe_xrupt);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Could not install GPE interrupt handler at level 0x%X\n",
-                               interrupt_level));
-                       return_PTR (NULL);
+       if (interrupt_number != acpi_gbl_FADT->sci_int) {
+               status = acpi_os_install_interrupt_handler(interrupt_number,
+                                                          acpi_ev_gpe_xrupt_handler,
+                                                          gpe_xrupt);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Could not install GPE interrupt handler at level 0x%X\n",
+                                         interrupt_number));
+                       return_PTR(NULL);
                }
        }
 
-       return_PTR (gpe_xrupt);
+       return_PTR(gpe_xrupt);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_delete_gpe_xrupt
@@ -573,33 +550,31 @@ acpi_ev_get_gpe_xrupt_block (
  ******************************************************************************/
 
 static acpi_status
-acpi_ev_delete_gpe_xrupt (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt)
+acpi_ev_delete_gpe_xrupt(struct acpi_gpe_xrupt_info *gpe_xrupt)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_delete_gpe_xrupt");
+       acpi_status status;
+       u32 flags;
 
+       ACPI_FUNCTION_TRACE("ev_delete_gpe_xrupt");
 
        /* We never want to remove the SCI interrupt handler */
 
-       if (gpe_xrupt->interrupt_level == acpi_gbl_FADT->sci_int) {
+       if (gpe_xrupt->interrupt_number == acpi_gbl_FADT->sci_int) {
                gpe_xrupt->gpe_block_list_head = NULL;
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Disable this interrupt */
 
-       status = acpi_os_remove_interrupt_handler (gpe_xrupt->interrupt_level,
-                          acpi_ev_gpe_xrupt_handler);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_os_remove_interrupt_handler(gpe_xrupt->interrupt_number,
+                                                 acpi_ev_gpe_xrupt_handler);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Unlink the interrupt block with lock */
 
-       acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+       flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
        if (gpe_xrupt->previous) {
                gpe_xrupt->previous->next = gpe_xrupt->next;
        }
@@ -607,21 +582,20 @@ acpi_ev_delete_gpe_xrupt (
        if (gpe_xrupt->next) {
                gpe_xrupt->next->previous = gpe_xrupt->previous;
        }
-       acpi_os_release_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+       acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
 
        /* Free the block */
 
-       ACPI_MEM_FREE (gpe_xrupt);
-       return_ACPI_STATUS (AE_OK);
+       ACPI_MEM_FREE(gpe_xrupt);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_install_gpe_block
  *
  * PARAMETERS:  gpe_block       - New GPE block
- *              interrupt_level - Level to be associated with this GPE block
+ *              interrupt_number - Xrupt to be associated with this GPE block
  *
  * RETURN:      Status
  *
@@ -630,24 +604,22 @@ acpi_ev_delete_gpe_xrupt (
  ******************************************************************************/
 
 static acpi_status
-acpi_ev_install_gpe_block (
-       struct acpi_gpe_block_info      *gpe_block,
-       u32                             interrupt_level)
+acpi_ev_install_gpe_block(struct acpi_gpe_block_info *gpe_block,
+                         u32 interrupt_number)
 {
-       struct acpi_gpe_block_info      *next_gpe_block;
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_block;
-       acpi_status                     status;
+       struct acpi_gpe_block_info *next_gpe_block;
+       struct acpi_gpe_xrupt_info *gpe_xrupt_block;
+       acpi_status status;
+       u32 flags;
 
+       ACPI_FUNCTION_TRACE("ev_install_gpe_block");
 
-       ACPI_FUNCTION_TRACE ("ev_install_gpe_block");
-
-
-       status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       gpe_xrupt_block = acpi_ev_get_gpe_xrupt_block (interrupt_level);
+       gpe_xrupt_block = acpi_ev_get_gpe_xrupt_block(interrupt_number);
        if (!gpe_xrupt_block) {
                status = AE_NO_MEMORY;
                goto unlock_and_exit;
@@ -655,7 +627,7 @@ acpi_ev_install_gpe_block (
 
        /* Install the new block at the end of the list with lock */
 
-       acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+       flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
        if (gpe_xrupt_block->gpe_block_list_head) {
                next_gpe_block = gpe_xrupt_block->gpe_block_list_head;
                while (next_gpe_block->next) {
@@ -664,20 +636,18 @@ acpi_ev_install_gpe_block (
 
                next_gpe_block->next = gpe_block;
                gpe_block->previous = next_gpe_block;
-       }
-       else {
+       } else {
                gpe_xrupt_block->gpe_block_list_head = gpe_block;
        }
 
        gpe_block->xrupt_block = gpe_xrupt_block;
-       acpi_os_release_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+       acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
 
-unlock_and_exit:
-       status = acpi_ut_release_mutex (ACPI_MTX_EVENTS);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       status = acpi_ut_release_mutex(ACPI_MTX_EVENTS);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_delete_gpe_block
@@ -690,62 +660,57 @@ unlock_and_exit:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_delete_gpe_block (
-       struct acpi_gpe_block_info      *gpe_block)
+acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_install_gpe_block");
+       acpi_status status;
+       u32 flags;
 
+       ACPI_FUNCTION_TRACE("ev_install_gpe_block");
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Disable all GPEs in this block */
 
-       status = acpi_hw_disable_gpe_block (gpe_block->xrupt_block, gpe_block);
+       status = acpi_hw_disable_gpe_block(gpe_block->xrupt_block, gpe_block);
 
        if (!gpe_block->previous && !gpe_block->next) {
                /* This is the last gpe_block on this interrupt */
 
-               status = acpi_ev_delete_gpe_xrupt (gpe_block->xrupt_block);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ev_delete_gpe_xrupt(gpe_block->xrupt_block);
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
-       }
-       else {
+       } else {
                /* Remove the block on this interrupt with lock */
 
-               acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+               flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
                if (gpe_block->previous) {
                        gpe_block->previous->next = gpe_block->next;
-               }
-               else {
-                       gpe_block->xrupt_block->gpe_block_list_head = gpe_block->next;
+               } else {
+                       gpe_block->xrupt_block->gpe_block_list_head =
+                           gpe_block->next;
                }
 
                if (gpe_block->next) {
                        gpe_block->next->previous = gpe_block->previous;
                }
-               acpi_os_release_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+               acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
        }
 
        /* Free the gpe_block */
 
-       ACPI_MEM_FREE (gpe_block->register_info);
-       ACPI_MEM_FREE (gpe_block->event_info);
-       ACPI_MEM_FREE (gpe_block);
+       ACPI_MEM_FREE(gpe_block->register_info);
+       ACPI_MEM_FREE(gpe_block->event_info);
+       ACPI_MEM_FREE(gpe_block);
 
-unlock_and_exit:
-       status = acpi_ut_release_mutex (ACPI_MTX_EVENTS);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       status = acpi_ut_release_mutex(ACPI_MTX_EVENTS);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_create_gpe_info_blocks
@@ -759,43 +724,41 @@ unlock_and_exit:
  ******************************************************************************/
 
 static acpi_status
-acpi_ev_create_gpe_info_blocks (
-       struct acpi_gpe_block_info      *gpe_block)
+acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)
 {
-       struct acpi_gpe_register_info   *gpe_register_info = NULL;
-       struct acpi_gpe_event_info      *gpe_event_info = NULL;
-       struct acpi_gpe_event_info      *this_event;
-       struct acpi_gpe_register_info   *this_register;
-       acpi_native_uint                i;
-       acpi_native_uint                j;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_create_gpe_info_blocks");
+       struct acpi_gpe_register_info *gpe_register_info = NULL;
+       struct acpi_gpe_event_info *gpe_event_info = NULL;
+       struct acpi_gpe_event_info *this_event;
+       struct acpi_gpe_register_info *this_register;
+       acpi_native_uint i;
+       acpi_native_uint j;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_create_gpe_info_blocks");
 
        /* Allocate the GPE register information block */
 
-       gpe_register_info = ACPI_MEM_CALLOCATE (
-                         (acpi_size) gpe_block->register_count *
-                         sizeof (struct acpi_gpe_register_info));
+       gpe_register_info = ACPI_MEM_CALLOCATE((acpi_size) gpe_block->
+                                              register_count *
+                                              sizeof(struct
+                                                     acpi_gpe_register_info));
        if (!gpe_register_info) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Could not allocate the gpe_register_info table\n"));
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Could not allocate the gpe_register_info table\n"));
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /*
         * Allocate the GPE event_info block. There are eight distinct GPEs
         * per register.  Initialization to zeros is sufficient.
         */
-       gpe_event_info = ACPI_MEM_CALLOCATE (
-                          ((acpi_size) gpe_block->register_count *
-                          ACPI_GPE_REGISTER_WIDTH) *
-                          sizeof (struct acpi_gpe_event_info));
+       gpe_event_info = ACPI_MEM_CALLOCATE(((acpi_size) gpe_block->
+                                            register_count *
+                                            ACPI_GPE_REGISTER_WIDTH) *
+                                           sizeof(struct acpi_gpe_event_info));
        if (!gpe_event_info) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Could not allocate the gpe_event_info table\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Could not allocate the gpe_event_info table\n"));
                status = AE_NO_MEMORY;
                goto error_exit;
        }
@@ -803,7 +766,7 @@ acpi_ev_create_gpe_info_blocks (
        /* Save the new Info arrays in the GPE block */
 
        gpe_block->register_info = gpe_register_info;
-       gpe_block->event_info  = gpe_event_info;
+       gpe_block->event_info = gpe_event_info;
 
        /*
         * Initialize the GPE Register and Event structures.  A goal of these
@@ -812,29 +775,34 @@ acpi_ev_create_gpe_info_blocks (
         * and the enable registers occupy the second half.
         */
        this_register = gpe_register_info;
-       this_event   = gpe_event_info;
+       this_event = gpe_event_info;
 
        for (i = 0; i < gpe_block->register_count; i++) {
                /* Init the register_info for this GPE register (8 GPEs) */
 
-               this_register->base_gpe_number = (u8) (gpe_block->block_base_number +
-                                  (i * ACPI_GPE_REGISTER_WIDTH));
-
-               ACPI_STORE_ADDRESS (this_register->status_address.address,
-                                (gpe_block->block_address.address
-                                + i));
-
-               ACPI_STORE_ADDRESS (this_register->enable_address.address,
-                                (gpe_block->block_address.address
-                                + i
-                                + gpe_block->register_count));
-
-               this_register->status_address.address_space_id = gpe_block->block_address.address_space_id;
-               this_register->enable_address.address_space_id = gpe_block->block_address.address_space_id;
-               this_register->status_address.register_bit_width = ACPI_GPE_REGISTER_WIDTH;
-               this_register->enable_address.register_bit_width = ACPI_GPE_REGISTER_WIDTH;
-               this_register->status_address.register_bit_offset = ACPI_GPE_REGISTER_WIDTH;
-               this_register->enable_address.register_bit_offset = ACPI_GPE_REGISTER_WIDTH;
+               this_register->base_gpe_number =
+                   (u8) (gpe_block->block_base_number +
+                         (i * ACPI_GPE_REGISTER_WIDTH));
+
+               ACPI_STORE_ADDRESS(this_register->status_address.address,
+                                  (gpe_block->block_address.address + i));
+
+               ACPI_STORE_ADDRESS(this_register->enable_address.address,
+                                  (gpe_block->block_address.address
+                                   + i + gpe_block->register_count));
+
+               this_register->status_address.address_space_id =
+                   gpe_block->block_address.address_space_id;
+               this_register->enable_address.address_space_id =
+                   gpe_block->block_address.address_space_id;
+               this_register->status_address.register_bit_width =
+                   ACPI_GPE_REGISTER_WIDTH;
+               this_register->enable_address.register_bit_width =
+                   ACPI_GPE_REGISTER_WIDTH;
+               this_register->status_address.register_bit_offset =
+                   ACPI_GPE_REGISTER_WIDTH;
+               this_register->enable_address.register_bit_offset =
+                   ACPI_GPE_REGISTER_WIDTH;
 
                /* Init the event_info for each GPE within this register */
 
@@ -849,36 +817,36 @@ acpi_ev_create_gpe_info_blocks (
                 * are cleared by writing a '1', while enable registers are cleared
                 * by writing a '0'.
                 */
-               status = acpi_hw_low_level_write (ACPI_GPE_REGISTER_WIDTH, 0x00,
-                                &this_register->enable_address);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_hw_low_level_write(ACPI_GPE_REGISTER_WIDTH, 0x00,
+                                                &this_register->
+                                                enable_address);
+               if (ACPI_FAILURE(status)) {
                        goto error_exit;
                }
 
-               status = acpi_hw_low_level_write (ACPI_GPE_REGISTER_WIDTH, 0xFF,
-                                &this_register->status_address);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_hw_low_level_write(ACPI_GPE_REGISTER_WIDTH, 0xFF,
+                                                &this_register->
+                                                status_address);
+               if (ACPI_FAILURE(status)) {
                        goto error_exit;
                }
 
                this_register++;
        }
 
-       return_ACPI_STATUS (AE_OK);
-
+       return_ACPI_STATUS(AE_OK);
 
-error_exit:
+      error_exit:
        if (gpe_register_info) {
-               ACPI_MEM_FREE (gpe_register_info);
+               ACPI_MEM_FREE(gpe_register_info);
        }
        if (gpe_event_info) {
-               ACPI_MEM_FREE (gpe_event_info);
+               ACPI_MEM_FREE(gpe_event_info);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_create_gpe_block
@@ -887,7 +855,7 @@ error_exit:
  *              gpe_block_address   - Address and space_iD
  *              register_count      - Number of GPE register pairs in the block
  *              gpe_block_base_number - Starting GPE number for the block
- *              interrupt_level     - H/W interrupt for the block
+ *              interrupt_number    - H/W interrupt for the block
  *              return_gpe_block    - Where the new block descriptor is returned
  *
  * RETURN:      Status
@@ -897,68 +865,66 @@ error_exit:
  ******************************************************************************/
 
 acpi_status
-acpi_ev_create_gpe_block (
-       struct acpi_namespace_node      *gpe_device,
-       struct acpi_generic_address     *gpe_block_address,
-       u32                             register_count,
-       u8                              gpe_block_base_number,
-       u32                             interrupt_level,
-       struct acpi_gpe_block_info      **return_gpe_block)
+acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
+                        struct acpi_generic_address *gpe_block_address,
+                        u32 register_count,
+                        u8 gpe_block_base_number,
+                        u32 interrupt_number,
+                        struct acpi_gpe_block_info **return_gpe_block)
 {
-       struct acpi_gpe_block_info      *gpe_block;
-       struct acpi_gpe_event_info      *gpe_event_info;
-       acpi_native_uint                i;
-       acpi_native_uint                j;
-       u32                             wake_gpe_count;
-       u32                             gpe_enabled_count;
-       acpi_status                     status;
-       struct acpi_gpe_walk_info       gpe_info;
-
-
-       ACPI_FUNCTION_TRACE ("ev_create_gpe_block");
+       struct acpi_gpe_block_info *gpe_block;
+       struct acpi_gpe_event_info *gpe_event_info;
+       acpi_native_uint i;
+       acpi_native_uint j;
+       u32 wake_gpe_count;
+       u32 gpe_enabled_count;
+       acpi_status status;
+       struct acpi_gpe_walk_info gpe_info;
 
+       ACPI_FUNCTION_TRACE("ev_create_gpe_block");
 
        if (!register_count) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Allocate a new GPE block */
 
-       gpe_block = ACPI_MEM_CALLOCATE (sizeof (struct acpi_gpe_block_info));
+       gpe_block = ACPI_MEM_CALLOCATE(sizeof(struct acpi_gpe_block_info));
        if (!gpe_block) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Initialize the new GPE block */
 
        gpe_block->register_count = register_count;
        gpe_block->block_base_number = gpe_block_base_number;
-       gpe_block->node           = gpe_device;
+       gpe_block->node = gpe_device;
 
-       ACPI_MEMCPY (&gpe_block->block_address, gpe_block_address,
-               sizeof (struct acpi_generic_address));
+       ACPI_MEMCPY(&gpe_block->block_address, gpe_block_address,
+                   sizeof(struct acpi_generic_address));
 
        /* Create the register_info and event_info sub-structures */
 
-       status = acpi_ev_create_gpe_info_blocks (gpe_block);
-       if (ACPI_FAILURE (status)) {
-               ACPI_MEM_FREE (gpe_block);
-               return_ACPI_STATUS (status);
+       status = acpi_ev_create_gpe_info_blocks(gpe_block);
+       if (ACPI_FAILURE(status)) {
+               ACPI_MEM_FREE(gpe_block);
+               return_ACPI_STATUS(status);
        }
 
        /* Install the new block in the global list(s) */
 
-       status = acpi_ev_install_gpe_block (gpe_block, interrupt_level);
-       if (ACPI_FAILURE (status)) {
-               ACPI_MEM_FREE (gpe_block);
-               return_ACPI_STATUS (status);
+       status = acpi_ev_install_gpe_block(gpe_block, interrupt_number);
+       if (ACPI_FAILURE(status)) {
+               ACPI_MEM_FREE(gpe_block);
+               return_ACPI_STATUS(status);
        }
 
        /* Find all GPE methods (_Lxx, _Exx) for this block */
 
-       status = acpi_ns_walk_namespace (ACPI_TYPE_METHOD, gpe_device,
-                         ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, acpi_ev_save_method_info,
-                         gpe_block, NULL);
+       status = acpi_ns_walk_namespace(ACPI_TYPE_METHOD, gpe_device,
+                                       ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK,
+                                       acpi_ev_save_method_info, gpe_block,
+                                       NULL);
 
        /*
         * Runtime option: Should Wake GPEs be enabled at runtime?  The default
@@ -974,9 +940,11 @@ acpi_ev_create_gpe_block (
                gpe_info.gpe_block = gpe_block;
                gpe_info.gpe_device = gpe_device;
 
-               status = acpi_ns_walk_namespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
-                                 ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK, acpi_ev_match_prw_and_gpe,
-                                 &gpe_info, NULL);
+               status =
+                   acpi_ns_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
+                                          ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK,
+                                          acpi_ev_match_prw_and_gpe, &gpe_info,
+                                          NULL);
        }
 
        /*
@@ -991,10 +959,14 @@ acpi_ev_create_gpe_block (
                for (j = 0; j < 8; j++) {
                        /* Get the info block for this particular GPE */
 
-                       gpe_event_info = &gpe_block->event_info[(i * ACPI_GPE_REGISTER_WIDTH) + j];
+                       gpe_event_info =
+                           &gpe_block->
+                           event_info[(i * ACPI_GPE_REGISTER_WIDTH) + j];
 
-                       if (((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) == ACPI_GPE_DISPATCH_METHOD) &&
-                                (gpe_event_info->flags & ACPI_GPE_TYPE_RUNTIME)) {
+                       if (((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) ==
+                            ACPI_GPE_DISPATCH_METHOD)
+                           && (gpe_event_info->
+                               flags & ACPI_GPE_TYPE_RUNTIME)) {
                                gpe_enabled_count++;
                        }
 
@@ -1006,22 +978,22 @@ acpi_ev_create_gpe_block (
 
        /* Dump info about this GPE block */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
-               "GPE %02X to %02X [%4.4s] %u regs on int 0x%X\n",
-               (u32) gpe_block->block_base_number,
-               (u32) (gpe_block->block_base_number +
-                               ((gpe_block->register_count * ACPI_GPE_REGISTER_WIDTH) -1)),
-               gpe_device->name.ascii,
-               gpe_block->register_count,
-               interrupt_level));
+       ACPI_DEBUG_PRINT((ACPI_DB_INIT,
+                         "GPE %02X to %02X [%4.4s] %u regs on int 0x%X\n",
+                         (u32) gpe_block->block_base_number,
+                         (u32) (gpe_block->block_base_number +
+                                ((gpe_block->register_count *
+                                  ACPI_GPE_REGISTER_WIDTH) - 1)),
+                         gpe_device->name.ascii, gpe_block->register_count,
+                         interrupt_number));
 
        /* Enable all valid GPEs found above */
 
-       status = acpi_hw_enable_runtime_gpe_block (NULL, gpe_block);
+       status = acpi_hw_enable_runtime_gpe_block(NULL, gpe_block);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
-                       "Found %u Wake, Enabled %u Runtime GPEs in this block\n",
-                       wake_gpe_count, gpe_enabled_count));
+       ACPI_DEBUG_PRINT((ACPI_DB_INIT,
+                         "Found %u Wake, Enabled %u Runtime GPEs in this block\n",
+                         wake_gpe_count, gpe_enabled_count));
 
        /* Return the new block */
 
@@ -1029,10 +1001,9 @@ acpi_ev_create_gpe_block (
                (*return_gpe_block) = gpe_block;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_gpe_initialize
@@ -1045,22 +1016,18 @@ acpi_ev_create_gpe_block (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_gpe_initialize (
-       void)
+acpi_status acpi_ev_gpe_initialize(void)
 {
-       u32                             register_count0 = 0;
-       u32                             register_count1 = 0;
-       u32                             gpe_number_max = 0;
-       acpi_status                     status;
+       u32 register_count0 = 0;
+       u32 register_count1 = 0;
+       u32 gpe_number_max = 0;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_gpe_initialize");
 
-       ACPI_FUNCTION_TRACE ("ev_gpe_initialize");
-
-
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -1088,29 +1055,29 @@ acpi_ev_gpe_initialize (
         * If EITHER the register length OR the block address are zero, then that
         * particular block is not supported.
         */
-       if (acpi_gbl_FADT->gpe0_blk_len &&
-               acpi_gbl_FADT->xgpe0_blk.address) {
+       if (acpi_gbl_FADT->gpe0_blk_len && acpi_gbl_FADT->xgpe0_blk.address) {
                /* GPE block 0 exists (has both length and address > 0) */
 
                register_count0 = (u16) (acpi_gbl_FADT->gpe0_blk_len / 2);
 
-               gpe_number_max = (register_count0 * ACPI_GPE_REGISTER_WIDTH) - 1;
+               gpe_number_max =
+                   (register_count0 * ACPI_GPE_REGISTER_WIDTH) - 1;
 
                /* Install GPE Block 0 */
 
-               status = acpi_ev_create_gpe_block (acpi_gbl_fadt_gpe_device,
-                                &acpi_gbl_FADT->xgpe0_blk, register_count0, 0,
-                                acpi_gbl_FADT->sci_int, &acpi_gbl_gpe_fadt_blocks[0]);
+               status = acpi_ev_create_gpe_block(acpi_gbl_fadt_gpe_device,
+                                                 &acpi_gbl_FADT->xgpe0_blk,
+                                                 register_count0, 0,
+                                                 acpi_gbl_FADT->sci_int,
+                                                 &acpi_gbl_gpe_fadt_blocks[0]);
 
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR ((
-                               "Could not create GPE Block 0, %s\n",
-                               acpi_format_exception (status)));
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("Could not create GPE Block 0, %s\n",
+                                          acpi_format_exception(status)));
                }
        }
 
-       if (acpi_gbl_FADT->gpe1_blk_len &&
-               acpi_gbl_FADT->xgpe1_blk.address) {
+       if (acpi_gbl_FADT->gpe1_blk_len && acpi_gbl_FADT->xgpe1_blk.address) {
                /* GPE block 1 exists (has both length and address > 0) */
 
                register_count1 = (u16) (acpi_gbl_FADT->gpe1_blk_len / 2);
@@ -1118,29 +1085,26 @@ acpi_ev_gpe_initialize (
                /* Check for GPE0/GPE1 overlap (if both banks exist) */
 
                if ((register_count0) &&
-                       (gpe_number_max >= acpi_gbl_FADT->gpe1_base)) {
-                       ACPI_REPORT_ERROR ((
-                               "GPE0 block (GPE 0 to %d) overlaps the GPE1 block (GPE %d to %d) - Ignoring GPE1\n",
-                               gpe_number_max, acpi_gbl_FADT->gpe1_base,
-                               acpi_gbl_FADT->gpe1_base +
-                               ((register_count1 * ACPI_GPE_REGISTER_WIDTH) - 1)));
+                   (gpe_number_max >= acpi_gbl_FADT->gpe1_base)) {
+                       ACPI_REPORT_ERROR(("GPE0 block (GPE 0 to %d) overlaps the GPE1 block (GPE %d to %d) - Ignoring GPE1\n", gpe_number_max, acpi_gbl_FADT->gpe1_base, acpi_gbl_FADT->gpe1_base + ((register_count1 * ACPI_GPE_REGISTER_WIDTH) - 1)));
 
                        /* Ignore GPE1 block by setting the register count to zero */
 
                        register_count1 = 0;
-               }
-               else {
+               } else {
                        /* Install GPE Block 1 */
 
-                       status = acpi_ev_create_gpe_block (acpi_gbl_fadt_gpe_device,
-                                        &acpi_gbl_FADT->xgpe1_blk, register_count1,
-                                        acpi_gbl_FADT->gpe1_base,
-                                        acpi_gbl_FADT->sci_int, &acpi_gbl_gpe_fadt_blocks[1]);
-
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_REPORT_ERROR ((
-                                       "Could not create GPE Block 1, %s\n",
-                                       acpi_format_exception (status)));
+                       status =
+                           acpi_ev_create_gpe_block(acpi_gbl_fadt_gpe_device,
+                                                    &acpi_gbl_FADT->xgpe1_blk,
+                                                    register_count1,
+                                                    acpi_gbl_FADT->gpe1_base,
+                                                    acpi_gbl_FADT->sci_int,
+                                                    &acpi_gbl_gpe_fadt_blocks
+                                                    [1]);
+
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_REPORT_ERROR(("Could not create GPE Block 1, %s\n", acpi_format_exception(status)));
                        }
 
                        /*
@@ -1148,7 +1112,7 @@ acpi_ev_gpe_initialize (
                         * space. However, GPE0 always starts at GPE number zero.
                         */
                        gpe_number_max = acpi_gbl_FADT->gpe1_base +
-                                         ((register_count1 * ACPI_GPE_REGISTER_WIDTH) - 1);
+                           ((register_count1 * ACPI_GPE_REGISTER_WIDTH) - 1);
                }
        }
 
@@ -1157,8 +1121,8 @@ acpi_ev_gpe_initialize (
        if ((register_count0 + register_count1) == 0) {
                /* GPEs are not required by ACPI, this is OK */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
-                               "There are no GPE blocks defined in the FADT\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INIT,
+                                 "There are no GPE blocks defined in the FADT\n"));
                status = AE_OK;
                goto cleanup;
        }
@@ -1166,15 +1130,12 @@ acpi_ev_gpe_initialize (
        /* Check for Max GPE number out-of-range */
 
        if (gpe_number_max > ACPI_GPE_MAX) {
-               ACPI_REPORT_ERROR (("Maximum GPE number from FADT is too large: 0x%X\n",
-                       gpe_number_max));
+               ACPI_REPORT_ERROR(("Maximum GPE number from FADT is too large: 0x%X\n", gpe_number_max));
                status = AE_BAD_VALUE;
                goto cleanup;
        }
 
-cleanup:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (AE_OK);
+      cleanup:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(AE_OK);
 }
-
-
index 659e909561124cd89b28ddfaa182f7353e9792da..7e57b8470f55a7aa39af4c97c7d395d411a19499 100644 (file)
 #include <acpi/acinterp.h>
 
 #define _COMPONENT          ACPI_EVENTS
-        ACPI_MODULE_NAME    ("evmisc")
-
+ACPI_MODULE_NAME("evmisc")
 
 #ifdef ACPI_DEBUG_OUTPUT
-static const char                *acpi_notify_value_names[] =
-{
+static const char *acpi_notify_value_names[] = {
        "Bus Check",
        "Device Check",
        "Device Wake",
@@ -66,18 +64,11 @@ static const char                *acpi_notify_value_names[] =
 
 /* Local prototypes */
 
-static void ACPI_SYSTEM_XFACE
-acpi_ev_notify_dispatch (
-       void                            *context);
-
-static void ACPI_SYSTEM_XFACE
-acpi_ev_global_lock_thread (
-       void                            *context);
+static void ACPI_SYSTEM_XFACE acpi_ev_notify_dispatch(void *context);
 
-static u32
-acpi_ev_global_lock_handler (
-       void                            *context);
+static void ACPI_SYSTEM_XFACE acpi_ev_global_lock_thread(void *context);
 
+static u32 acpi_ev_global_lock_handler(void *context);
 
 /*******************************************************************************
  *
@@ -93,9 +84,7 @@ acpi_ev_global_lock_handler (
  *
  ******************************************************************************/
 
-u8
-acpi_ev_is_notify_object (
-       struct acpi_namespace_node      *node)
+u8 acpi_ev_is_notify_object(struct acpi_namespace_node *node)
 {
        switch (node->type) {
        case ACPI_TYPE_DEVICE:
@@ -112,7 +101,6 @@ acpi_ev_is_notify_object (
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_queue_notify_request
@@ -128,18 +116,15 @@ acpi_ev_is_notify_object (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_queue_notify_request (
-       struct acpi_namespace_node      *node,
-       u32                             notify_value)
+acpi_ev_queue_notify_request(struct acpi_namespace_node * node,
+                            u32 notify_value)
 {
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *handler_obj = NULL;
-       union acpi_generic_state        *notify_info;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_NAME ("ev_queue_notify_request");
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *handler_obj = NULL;
+       union acpi_generic_state *notify_info;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_NAME("ev_queue_notify_request");
 
        /*
         * For value 3 (Ejection Request), some device method may need to be run.
@@ -148,22 +133,22 @@ acpi_ev_queue_notify_request (
         * For value 0x80 (Status Change) on the power button or sleep button,
         *   initiate soft-off or sleep operation?
         */
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "Dispatching Notify(%X) on node %p\n", notify_value, node));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Dispatching Notify(%X) on node %p\n", notify_value,
+                         node));
 
        if (notify_value <= 7) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Notify value: %s\n",
-                               acpi_notify_value_names[notify_value]));
-       }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                       "Notify value: 0x%2.2X **Device Specific**\n",
-                       notify_value));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Notify value: %s\n",
+                                 acpi_notify_value_names[notify_value]));
+       } else {
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Notify value: 0x%2.2X **Device Specific**\n",
+                                 notify_value));
        }
 
        /* Get the notify object attached to the NS Node */
 
-       obj_desc = acpi_ns_get_attached_object (node);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (obj_desc) {
                /* We have the notify object, Get the right handler */
 
@@ -174,10 +159,11 @@ acpi_ev_queue_notify_request (
                case ACPI_TYPE_POWER:
 
                        if (notify_value <= ACPI_MAX_SYS_NOTIFY) {
-                               handler_obj = obj_desc->common_notify.system_notify;
-                       }
-                       else {
-                               handler_obj = obj_desc->common_notify.device_notify;
+                               handler_obj =
+                                   obj_desc->common_notify.system_notify;
+                       } else {
+                               handler_obj =
+                                   obj_desc->common_notify.device_notify;
                        }
                        break;
 
@@ -189,23 +175,25 @@ acpi_ev_queue_notify_request (
 
        /* If there is any handler to run, schedule the dispatcher */
 
-       if ((acpi_gbl_system_notify.handler && (notify_value <= ACPI_MAX_SYS_NOTIFY)) ||
-               (acpi_gbl_device_notify.handler && (notify_value > ACPI_MAX_SYS_NOTIFY)) ||
-               handler_obj) {
-               notify_info = acpi_ut_create_generic_state ();
+       if ((acpi_gbl_system_notify.handler
+            && (notify_value <= ACPI_MAX_SYS_NOTIFY))
+           || (acpi_gbl_device_notify.handler
+               && (notify_value > ACPI_MAX_SYS_NOTIFY)) || handler_obj) {
+               notify_info = acpi_ut_create_generic_state();
                if (!notify_info) {
                        return (AE_NO_MEMORY);
                }
 
                notify_info->common.data_type = ACPI_DESC_TYPE_STATE_NOTIFY;
-               notify_info->notify.node      = node;
-               notify_info->notify.value     = (u16) notify_value;
+               notify_info->notify.node = node;
+               notify_info->notify.value = (u16) notify_value;
                notify_info->notify.handler_obj = handler_obj;
 
-               status = acpi_os_queue_for_execution (OSD_PRIORITY_HIGH,
-                                 acpi_ev_notify_dispatch, notify_info);
-               if (ACPI_FAILURE (status)) {
-                       acpi_ut_delete_generic_state (notify_info);
+               status = acpi_os_queue_for_execution(OSD_PRIORITY_HIGH,
+                                                    acpi_ev_notify_dispatch,
+                                                    notify_info);
+               if (ACPI_FAILURE(status)) {
+                       acpi_ut_delete_generic_state(notify_info);
                }
        }
 
@@ -214,15 +202,15 @@ acpi_ev_queue_notify_request (
                 * There is no per-device notify handler for this device.
                 * This may or may not be a problem.
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                       "No notify handler for Notify(%4.4s, %X) node %p\n",
-                       acpi_ut_get_node_name (node), notify_value, node));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "No notify handler for Notify(%4.4s, %X) node %p\n",
+                                 acpi_ut_get_node_name(node), notify_value,
+                                 node));
        }
 
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_notify_dispatch
@@ -236,18 +224,15 @@ acpi_ev_queue_notify_request (
  *
  ******************************************************************************/
 
-static void ACPI_SYSTEM_XFACE
-acpi_ev_notify_dispatch (
-       void                            *context)
+static void ACPI_SYSTEM_XFACE acpi_ev_notify_dispatch(void *context)
 {
-       union acpi_generic_state        *notify_info = (union acpi_generic_state *) context;
-       acpi_notify_handler             global_handler = NULL;
-       void                            *global_context = NULL;
-       union acpi_operand_object       *handler_obj;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       union acpi_generic_state *notify_info =
+           (union acpi_generic_state *)context;
+       acpi_notify_handler global_handler = NULL;
+       void *global_context = NULL;
+       union acpi_operand_object *handler_obj;
 
+       ACPI_FUNCTION_ENTRY();
 
        /*
         * We will invoke a global notify handler if installed.
@@ -261,8 +246,7 @@ acpi_ev_notify_dispatch (
                        global_handler = acpi_gbl_system_notify.handler;
                        global_context = acpi_gbl_system_notify.context;
                }
-       }
-       else {
+       } else {
                /* Global driver notification handler */
 
                if (acpi_gbl_device_notify.handler) {
@@ -274,25 +258,24 @@ acpi_ev_notify_dispatch (
        /* Invoke the system handler first, if present */
 
        if (global_handler) {
-               global_handler (notify_info->notify.node, notify_info->notify.value,
-                       global_context);
+               global_handler(notify_info->notify.node,
+                              notify_info->notify.value, global_context);
        }
 
        /* Now invoke the per-device handler, if present */
 
        handler_obj = notify_info->notify.handler_obj;
        if (handler_obj) {
-               handler_obj->notify.handler (notify_info->notify.node,
-                       notify_info->notify.value,
-                       handler_obj->notify.context);
+               handler_obj->notify.handler(notify_info->notify.node,
+                                           notify_info->notify.value,
+                                           handler_obj->notify.context);
        }
 
        /* All done with the info object */
 
-       acpi_ut_delete_generic_state (notify_info);
+       acpi_ut_delete_generic_state(notify_info);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_global_lock_thread
@@ -307,27 +290,24 @@ acpi_ev_notify_dispatch (
  *
  ******************************************************************************/
 
-static void ACPI_SYSTEM_XFACE
-acpi_ev_global_lock_thread (
-       void                            *context)
+static void ACPI_SYSTEM_XFACE acpi_ev_global_lock_thread(void *context)
 {
-       acpi_status                     status;
-
+       acpi_status status;
 
        /* Signal threads that are waiting for the lock */
 
        if (acpi_gbl_global_lock_thread_count) {
                /* Send sufficient units to the semaphore */
 
-               status = acpi_os_signal_semaphore (acpi_gbl_global_lock_semaphore,
-                                acpi_gbl_global_lock_thread_count);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR (("Could not signal Global Lock semaphore\n"));
+               status =
+                   acpi_os_signal_semaphore(acpi_gbl_global_lock_semaphore,
+                                            acpi_gbl_global_lock_thread_count);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("Could not signal Global Lock semaphore\n"));
                }
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_global_lock_handler
@@ -342,20 +322,17 @@ acpi_ev_global_lock_thread (
  *
  ******************************************************************************/
 
-static u32
-acpi_ev_global_lock_handler (
-       void                            *context)
+static u32 acpi_ev_global_lock_handler(void *context)
 {
-       u8                              acquired = FALSE;
-       acpi_status                     status;
-
+       u8 acquired = FALSE;
+       acpi_status status;
 
        /*
         * Attempt to get the lock
         * If we don't get it now, it will be marked pending and we will
         * take another interrupt when it becomes free.
         */
-       ACPI_ACQUIRE_GLOBAL_LOCK (acpi_gbl_common_fACS.global_lock, acquired);
+       ACPI_ACQUIRE_GLOBAL_LOCK(acpi_gbl_common_fACS.global_lock, acquired);
        if (acquired) {
                /* Got the lock, now wake all threads waiting for it */
 
@@ -363,11 +340,11 @@ acpi_ev_global_lock_handler (
 
                /* Run the Global Lock thread which will signal all waiting threads */
 
-               status = acpi_os_queue_for_execution (OSD_PRIORITY_HIGH,
-                                 acpi_ev_global_lock_thread, context);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR (("Could not queue Global Lock thread, %s\n",
-                               acpi_format_exception (status)));
+               status = acpi_os_queue_for_execution(OSD_PRIORITY_HIGH,
+                                                    acpi_ev_global_lock_thread,
+                                                    context);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("Could not queue Global Lock thread, %s\n", acpi_format_exception(status)));
 
                        return (ACPI_INTERRUPT_NOT_HANDLED);
                }
@@ -376,7 +353,6 @@ acpi_ev_global_lock_handler (
        return (ACPI_INTERRUPT_HANDLED);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_init_global_lock_handler
@@ -389,19 +365,16 @@ acpi_ev_global_lock_handler (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_init_global_lock_handler (
-       void)
+acpi_status acpi_ev_init_global_lock_handler(void)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_init_global_lock_handler");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_init_global_lock_handler");
 
        acpi_gbl_global_lock_present = TRUE;
-       status = acpi_install_fixed_event_handler (ACPI_EVENT_GLOBAL,
-                        acpi_ev_global_lock_handler, NULL);
+       status = acpi_install_fixed_event_handler(ACPI_EVENT_GLOBAL,
+                                                 acpi_ev_global_lock_handler,
+                                                 NULL);
 
        /*
         * If the global lock does not exist on this platform, the attempt
@@ -411,14 +384,15 @@ acpi_ev_init_global_lock_handler (
         * with an error.
         */
        if (status == AE_NO_HARDWARE_RESPONSE) {
+               ACPI_REPORT_ERROR(("No response from Global Lock hardware, disabling lock\n"));
+
                acpi_gbl_global_lock_present = FALSE;
                status = AE_OK;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_ev_acquire_global_lock
@@ -431,22 +405,18 @@ acpi_ev_init_global_lock_handler (
  *
  *****************************************************************************/
 
-acpi_status
-acpi_ev_acquire_global_lock (
-       u16                             timeout)
+acpi_status acpi_ev_acquire_global_lock(u16 timeout)
 {
-       acpi_status                     status = AE_OK;
-       u8                              acquired = FALSE;
-
-
-       ACPI_FUNCTION_TRACE ("ev_acquire_global_lock");
+       acpi_status status = AE_OK;
+       u8 acquired = FALSE;
 
+       ACPI_FUNCTION_TRACE("ev_acquire_global_lock");
 
 #ifndef ACPI_APPLICATION
        /* Make sure that we actually have a global lock */
 
        if (!acpi_gbl_global_lock_present) {
-               return_ACPI_STATUS (AE_NO_GLOBAL_LOCK);
+               return_ACPI_STATUS(AE_NO_GLOBAL_LOCK);
        }
 #endif
 
@@ -459,37 +429,37 @@ acpi_ev_acquire_global_lock (
         * we are done
         */
        if (acpi_gbl_global_lock_acquired) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* We must acquire the actual hardware lock */
 
-       ACPI_ACQUIRE_GLOBAL_LOCK (acpi_gbl_common_fACS.global_lock, acquired);
+       ACPI_ACQUIRE_GLOBAL_LOCK(acpi_gbl_common_fACS.global_lock, acquired);
        if (acquired) {
-          /* We got the lock */
+               /* We got the lock */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Acquired the HW Global Lock\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "Acquired the HW Global Lock\n"));
 
                acpi_gbl_global_lock_acquired = TRUE;
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /*
         * Did not get the lock.  The pending bit was set above, and we must now
         * wait until we get the global lock released interrupt.
         */
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Waiting for the HW Global Lock\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Waiting for the HW Global Lock\n"));
 
        /*
         * Acquire the global lock semaphore first.
         * Since this wait will block, we must release the interpreter
         */
-       status = acpi_ex_system_wait_semaphore (acpi_gbl_global_lock_semaphore,
-                         timeout);
-       return_ACPI_STATUS (status);
+       status = acpi_ex_system_wait_semaphore(acpi_gbl_global_lock_semaphore,
+                                              timeout);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_release_global_lock
@@ -502,21 +472,16 @@ acpi_ev_acquire_global_lock (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_release_global_lock (
-       void)
+acpi_status acpi_ev_release_global_lock(void)
 {
-       u8                              pending = FALSE;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("ev_release_global_lock");
+       u8 pending = FALSE;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("ev_release_global_lock");
 
        if (!acpi_gbl_global_lock_thread_count) {
-               ACPI_REPORT_WARNING((
-                       "Cannot release HW Global Lock, it has not been acquired\n"));
-               return_ACPI_STATUS (AE_NOT_ACQUIRED);
+               ACPI_REPORT_WARNING(("Cannot release HW Global Lock, it has not been acquired\n"));
+               return_ACPI_STATUS(AE_NOT_ACQUIRED);
        }
 
        /* One fewer thread has the global lock */
@@ -525,14 +490,14 @@ acpi_ev_release_global_lock (
        if (acpi_gbl_global_lock_thread_count) {
                /* There are still some threads holding the lock, cannot release */
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /*
         * No more threads holding lock, we can do the actual hardware
         * release
         */
-       ACPI_RELEASE_GLOBAL_LOCK (acpi_gbl_common_fACS.global_lock, pending);
+       ACPI_RELEASE_GLOBAL_LOCK(acpi_gbl_common_fACS.global_lock, pending);
        acpi_gbl_global_lock_acquired = FALSE;
 
        /*
@@ -540,14 +505,13 @@ acpi_ev_release_global_lock (
         * register
         */
        if (pending) {
-               status = acpi_set_register (ACPI_BITREG_GLOBAL_LOCK_RELEASE,
-                                1, ACPI_MTX_LOCK);
+               status = acpi_set_register(ACPI_BITREG_GLOBAL_LOCK_RELEASE,
+                                          1, ACPI_MTX_LOCK);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_ev_terminate
@@ -560,16 +524,12 @@ acpi_ev_release_global_lock (
  *
  ******************************************************************************/
 
-void
-acpi_ev_terminate (
-       void)
+void acpi_ev_terminate(void)
 {
-       acpi_native_uint                i;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_terminate");
+       acpi_native_uint i;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_terminate");
 
        if (acpi_gbl_events_initialized) {
                /*
@@ -580,38 +540,39 @@ acpi_ev_terminate (
                /* Disable all fixed events */
 
                for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) {
-                       status = acpi_disable_event ((u32) i, 0);
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Could not disable fixed event %d\n", (u32) i));
+                       status = acpi_disable_event((u32) i, 0);
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Could not disable fixed event %d\n",
+                                                 (u32) i));
                        }
                }
 
                /* Disable all GPEs in all GPE blocks */
 
-               status = acpi_ev_walk_gpe_list (acpi_hw_disable_gpe_block, ACPI_NOT_ISR);
+               status = acpi_ev_walk_gpe_list(acpi_hw_disable_gpe_block);
 
                /* Remove SCI handler */
 
-               status = acpi_ev_remove_sci_handler ();
+               status = acpi_ev_remove_sci_handler();
                if (ACPI_FAILURE(status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Could not remove SCI handler\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Could not remove SCI handler\n"));
                }
        }
 
        /* Deallocate all handler objects installed within GPE info structs */
 
-       status = acpi_ev_walk_gpe_list (acpi_ev_delete_gpe_handlers, ACPI_NOT_ISR);
+       status = acpi_ev_walk_gpe_list(acpi_ev_delete_gpe_handlers);
 
        /* Return to original mode if necessary */
 
        if (acpi_gbl_original_mode == ACPI_SYS_MODE_LEGACY) {
-               status = acpi_disable ();
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "acpi_disable failed\n"));
+               status = acpi_disable();
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                         "acpi_disable failed\n"));
                }
        }
        return_VOID;
 }
-
index a1d7276c5742ff31064c86cc4bb0ab900fb9c5cb..84fad082d80d22205b2c559313ddb6f02e690e00 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acevents.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acinterp.h>
 
 #define _COMPONENT          ACPI_EVENTS
-        ACPI_MODULE_NAME    ("evregion")
-
+ACPI_MODULE_NAME("evregion")
 #define ACPI_NUM_DEFAULT_SPACES     4
-
-static u8                   acpi_gbl_default_address_spaces[ACPI_NUM_DEFAULT_SPACES] = {
-                        ACPI_ADR_SPACE_SYSTEM_MEMORY,
-                        ACPI_ADR_SPACE_SYSTEM_IO,
-                        ACPI_ADR_SPACE_PCI_CONFIG,
-                        ACPI_ADR_SPACE_DATA_TABLE};
+static u8 acpi_gbl_default_address_spaces[ACPI_NUM_DEFAULT_SPACES] = {
+       ACPI_ADR_SPACE_SYSTEM_MEMORY,
+       ACPI_ADR_SPACE_SYSTEM_IO,
+       ACPI_ADR_SPACE_PCI_CONFIG,
+       ACPI_ADR_SPACE_DATA_TABLE
+};
 
 /* Local prototypes */
 
 static acpi_status
-acpi_ev_reg_run (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value);
+acpi_ev_reg_run(acpi_handle obj_handle,
+               u32 level, void *context, void **return_value);
 
 static acpi_status
-acpi_ev_install_handler (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value);
-
+acpi_ev_install_handler(acpi_handle obj_handle,
+                       u32 level, void *context, void **return_value);
 
 /*******************************************************************************
  *
@@ -87,19 +78,16 @@ acpi_ev_install_handler (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_install_region_handlers (
-       void) {
-       acpi_status                     status;
-       acpi_native_uint                i;
-
-
-       ACPI_FUNCTION_TRACE ("ev_install_region_handlers");
+acpi_status acpi_ev_install_region_handlers(void)
+{
+       acpi_status status;
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_TRACE("ev_install_region_handlers");
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -121,9 +109,11 @@ acpi_ev_install_region_handlers (
         * Similar for AE_SAME_HANDLER.
         */
        for (i = 0; i < ACPI_NUM_DEFAULT_SPACES; i++) {
-               status = acpi_ev_install_space_handler (acpi_gbl_root_node,
-                                 acpi_gbl_default_address_spaces[i],
-                                 ACPI_DEFAULT_HANDLER, NULL, NULL);
+               status = acpi_ev_install_space_handler(acpi_gbl_root_node,
+                                                      acpi_gbl_default_address_spaces
+                                                      [i],
+                                                      ACPI_DEFAULT_HANDLER,
+                                                      NULL, NULL);
                switch (status) {
                case AE_OK:
                case AE_SAME_HANDLER:
@@ -140,12 +130,11 @@ acpi_ev_install_region_handlers (
                }
        }
 
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_initialize_op_regions
@@ -159,20 +148,16 @@ unlock_and_exit:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_initialize_op_regions (
-       void)
+acpi_status acpi_ev_initialize_op_regions(void)
 {
-       acpi_status                     status;
-       acpi_native_uint                i;
-
+       acpi_status status;
+       acpi_native_uint i;
 
-       ACPI_FUNCTION_TRACE ("ev_initialize_op_regions");
+       ACPI_FUNCTION_TRACE("ev_initialize_op_regions");
 
-
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -182,15 +167,15 @@ acpi_ev_initialize_op_regions (
                /* TBD: Make sure handler is the DEFAULT handler, otherwise
                 * _REG will have already been run.
                 */
-               status = acpi_ev_execute_reg_methods (acpi_gbl_root_node,
-                                 acpi_gbl_default_address_spaces[i]);
+               status = acpi_ev_execute_reg_methods(acpi_gbl_root_node,
+                                                    acpi_gbl_default_address_spaces
+                                                    [i]);
        }
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (status);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_execute_reg_method
@@ -205,26 +190,22 @@ acpi_ev_initialize_op_regions (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_execute_reg_method (
-       union acpi_operand_object       *region_obj,
-       u32                             function)
+acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)
 {
-       struct acpi_parameter_info      info;
-       union acpi_operand_object       *params[3];
-       union acpi_operand_object       *region_obj2;
-       acpi_status                     status;
-
+       struct acpi_parameter_info info;
+       union acpi_operand_object *params[3];
+       union acpi_operand_object *region_obj2;
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("ev_execute_reg_method");
+       ACPI_FUNCTION_TRACE("ev_execute_reg_method");
 
-
-       region_obj2 = acpi_ns_get_secondary_object (region_obj);
+       region_obj2 = acpi_ns_get_secondary_object(region_obj);
        if (!region_obj2) {
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
        if (region_obj2->extra.method_REG == NULL) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /*
@@ -237,12 +218,12 @@ acpi_ev_execute_reg_method (
         *          0 for disconnecting the handler
         *          Passed as a parameter
         */
-       params[0] = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+       params[0] = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
        if (!params[0]) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
-       params[1] = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+       params[1] = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
        if (!params[1]) {
                status = AE_NO_MEMORY;
                goto cleanup;
@@ -260,19 +241,18 @@ acpi_ev_execute_reg_method (
 
        /* Execute the method, no return value */
 
-       ACPI_DEBUG_EXEC (acpi_ut_display_init_pathname (
-                          ACPI_TYPE_METHOD, info.node, NULL));
-       status = acpi_ns_evaluate_by_handle (&info);
+       ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
+                       (ACPI_TYPE_METHOD, info.node, NULL));
+       status = acpi_ns_evaluate_by_handle(&info);
 
-       acpi_ut_remove_reference (params[1]);
+       acpi_ut_remove_reference(params[1]);
 
-cleanup:
-       acpi_ut_remove_reference (params[0]);
+      cleanup:
+       acpi_ut_remove_reference(params[0]);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_address_space_dispatch
@@ -291,40 +271,38 @@ cleanup:
  ******************************************************************************/
 
 acpi_status
-acpi_ev_address_space_dispatch (
-       union acpi_operand_object       *region_obj,
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       void                            *value)
+acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
+                              u32 function,
+                              acpi_physical_address address,
+                              u32 bit_width, void *value)
 {
-       acpi_status                     status;
-       acpi_status                     status2;
-       acpi_adr_space_handler          handler;
-       acpi_adr_space_setup            region_setup;
-       union acpi_operand_object       *handler_desc;
-       union acpi_operand_object       *region_obj2;
-       void                            *region_context = NULL;
+       acpi_status status;
+       acpi_status status2;
+       acpi_adr_space_handler handler;
+       acpi_adr_space_setup region_setup;
+       union acpi_operand_object *handler_desc;
+       union acpi_operand_object *region_obj2;
+       void *region_context = NULL;
 
+       ACPI_FUNCTION_TRACE("ev_address_space_dispatch");
 
-       ACPI_FUNCTION_TRACE ("ev_address_space_dispatch");
-
-
-       region_obj2 = acpi_ns_get_secondary_object (region_obj);
+       region_obj2 = acpi_ns_get_secondary_object(region_obj);
        if (!region_obj2) {
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
        /* Ensure that there is a handler associated with this region */
 
        handler_desc = region_obj->region.handler;
        if (!handler_desc) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "No handler for Region [%4.4s] (%p) [%s]\n",
-                       acpi_ut_get_node_name (region_obj->region.node),
-                       region_obj, acpi_ut_get_region_name (region_obj->region.space_id)));
-
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "No handler for Region [%4.4s] (%p) [%s]\n",
+                                 acpi_ut_get_node_name(region_obj->region.
+                                                       node), region_obj,
+                                 acpi_ut_get_region_name(region_obj->region.
+                                                         space_id)));
+
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
        /*
@@ -339,10 +317,13 @@ acpi_ev_address_space_dispatch (
                if (!region_setup) {
                        /* No initialization routine, exit with error */
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "No init routine for region(%p) [%s]\n",
-                               region_obj, acpi_ut_get_region_name (region_obj->region.space_id)));
-                       return_ACPI_STATUS (AE_NOT_EXIST);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "No init routine for region(%p) [%s]\n",
+                                         region_obj,
+                                         acpi_ut_get_region_name(region_obj->
+                                                                 region.
+                                                                 space_id)));
+                       return_ACPI_STATUS(AE_NOT_EXIST);
                }
 
                /*
@@ -350,25 +331,29 @@ acpi_ev_address_space_dispatch (
                 * setup will potentially execute control methods
                 * (e.g., _REG method for this region)
                 */
-               acpi_ex_exit_interpreter ();
+               acpi_ex_exit_interpreter();
 
-               status = region_setup (region_obj, ACPI_REGION_ACTIVATE,
-                                 handler_desc->address_space.context, &region_context);
+               status = region_setup(region_obj, ACPI_REGION_ACTIVATE,
+                                     handler_desc->address_space.context,
+                                     &region_context);
 
                /* Re-enter the interpreter */
 
-               status2 = acpi_ex_enter_interpreter ();
-               if (ACPI_FAILURE (status2)) {
-                       return_ACPI_STATUS (status2);
+               status2 = acpi_ex_enter_interpreter();
+               if (ACPI_FAILURE(status2)) {
+                       return_ACPI_STATUS(status2);
                }
 
                /* Check for failure of the Region Setup */
 
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Region Init: %s [%s]\n",
-                               acpi_format_exception (status),
-                               acpi_ut_get_region_name (region_obj->region.space_id)));
-                       return_ACPI_STATUS (status);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Region Init: %s [%s]\n",
+                                         acpi_format_exception(status),
+                                         acpi_ut_get_region_name(region_obj->
+                                                                 region.
+                                                                 space_id)));
+                       return_ACPI_STATUS(status);
                }
 
                /*
@@ -380,14 +365,14 @@ acpi_ev_address_space_dispatch (
                        if (region_obj2->extra.region_context) {
                                /* The handler for this region was already installed */
 
-                               ACPI_MEM_FREE (region_context);
-                       }
-                       else {
+                               ACPI_MEM_FREE(region_context);
+                       } else {
                                /*
                                 * Save the returned context for use in all accesses to
                                 * this particular region
                                 */
-                               region_obj2->extra.region_context = region_context;
+                               region_obj2->extra.region_context =
+                                   region_context;
                        }
                }
        }
@@ -396,13 +381,16 @@ acpi_ev_address_space_dispatch (
 
        handler = handler_desc->address_space.handler;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-               "Handler %p (@%p) Address %8.8X%8.8X [%s]\n",
-               &region_obj->region.handler->address_space, handler,
-               ACPI_FORMAT_UINT64 (address),
-               acpi_ut_get_region_name (region_obj->region.space_id)));
+       ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                         "Handler %p (@%p) Address %8.8X%8.8X [%s]\n",
+                         &region_obj->region.handler->address_space, handler,
+                         ACPI_FORMAT_UINT64(address),
+                         acpi_ut_get_region_name(region_obj->region.
+                                                 space_id)));
 
-       if (!(handler_desc->address_space.hflags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) {
+       if (!
+           (handler_desc->address_space.
+            hflags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) {
                /*
                 * For handlers other than the default (supplied) handlers, we must
                 * exit the interpreter because the handler *might* block -- we don't
@@ -413,31 +401,33 @@ acpi_ev_address_space_dispatch (
 
        /* Call the handler */
 
-       status = handler (function, address, bit_width, value,
+       status = handler(function, address, bit_width, value,
                         handler_desc->address_space.context,
                         region_obj2->extra.region_context);
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Handler for [%s] returned %s\n",
-                       acpi_ut_get_region_name (region_obj->region.space_id),
-                       acpi_format_exception (status)));
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Handler for [%s] returned %s\n",
+                                  acpi_ut_get_region_name(region_obj->region.
+                                                          space_id),
+                                  acpi_format_exception(status)));
        }
 
-       if (!(handler_desc->address_space.hflags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) {
+       if (!
+           (handler_desc->address_space.
+            hflags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED)) {
                /*
                 * We just returned from a non-default handler, we must re-enter the
                 * interpreter
                 */
-               status2 = acpi_ex_enter_interpreter ();
-               if (ACPI_FAILURE (status2)) {
-                       return_ACPI_STATUS (status2);
+               status2 = acpi_ex_enter_interpreter();
+               if (ACPI_FAILURE(status2)) {
+                       return_ACPI_STATUS(status2);
                }
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_detach_region
@@ -453,23 +443,20 @@ acpi_ev_address_space_dispatch (
  ******************************************************************************/
 
 void
-acpi_ev_detach_region(
-       union acpi_operand_object       *region_obj,
-       u8                              acpi_ns_is_locked)
+acpi_ev_detach_region(union acpi_operand_object *region_obj,
+                     u8 acpi_ns_is_locked)
 {
-       union acpi_operand_object       *handler_obj;
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       **last_obj_ptr;
-       acpi_adr_space_setup            region_setup;
-       void                            **region_context;
-       union acpi_operand_object       *region_obj2;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_detach_region");
+       union acpi_operand_object *handler_obj;
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object **last_obj_ptr;
+       acpi_adr_space_setup region_setup;
+       void **region_context;
+       union acpi_operand_object *region_obj2;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_detach_region");
 
-       region_obj2 = acpi_ns_get_secondary_object (region_obj);
+       region_obj2 = acpi_ns_get_secondary_object(region_obj);
        if (!region_obj2) {
                return_VOID;
        }
@@ -493,34 +480,39 @@ acpi_ev_detach_region(
                /* Is this the correct Region? */
 
                if (obj_desc == region_obj) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-                               "Removing Region %p from address handler %p\n",
-                               region_obj, handler_obj));
+                       ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                                         "Removing Region %p from address handler %p\n",
+                                         region_obj, handler_obj));
 
                        /* This is it, remove it from the handler's list */
 
                        *last_obj_ptr = obj_desc->region.next;
-                       obj_desc->region.next = NULL;           /* Must clear field */
+                       obj_desc->region.next = NULL;   /* Must clear field */
 
                        if (acpi_ns_is_locked) {
-                               status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-                               if (ACPI_FAILURE (status)) {
+                               status =
+                                   acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+                               if (ACPI_FAILURE(status)) {
                                        return_VOID;
                                }
                        }
 
                        /* Now stop region accesses by executing the _REG method */
 
-                       status = acpi_ev_execute_reg_method (region_obj, 0);
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s from region _REG, [%s]\n",
-                                       acpi_format_exception (status),
-                                       acpi_ut_get_region_name (region_obj->region.space_id)));
+                       status = acpi_ev_execute_reg_method(region_obj, 0);
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "%s from region _REG, [%s]\n",
+                                                 acpi_format_exception(status),
+                                                 acpi_ut_get_region_name
+                                                 (region_obj->region.
+                                                  space_id)));
                        }
 
                        if (acpi_ns_is_locked) {
-                               status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-                               if (ACPI_FAILURE (status)) {
+                               status =
+                                   acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+                               if (ACPI_FAILURE(status)) {
                                        return_VOID;
                                }
                        }
@@ -528,15 +520,20 @@ acpi_ev_detach_region(
                        /* Call the setup handler with the deactivate notification */
 
                        region_setup = handler_obj->address_space.setup;
-                       status = region_setup (region_obj, ACPI_REGION_DEACTIVATE,
-                                         handler_obj->address_space.context, region_context);
+                       status =
+                           region_setup(region_obj, ACPI_REGION_DEACTIVATE,
+                                        handler_obj->address_space.context,
+                                        region_context);
 
                        /* Init routine may fail, Just ignore errors */
 
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s from region init, [%s]\n",
-                                       acpi_format_exception (status),
-                                       acpi_ut_get_region_name (region_obj->region.space_id)));
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "%s from region init, [%s]\n",
+                                                 acpi_format_exception(status),
+                                                 acpi_ut_get_region_name
+                                                 (region_obj->region.
+                                                  space_id)));
                        }
 
                        region_obj->region.flags &= ~(AOPOBJ_SETUP_COMPLETE);
@@ -552,7 +549,7 @@ acpi_ev_detach_region(
                         * this better be the region's handler
                         */
                        region_obj->region.handler = NULL;
-                       acpi_ut_remove_reference (handler_obj);
+                       acpi_ut_remove_reference(handler_obj);
 
                        return_VOID;
                }
@@ -565,14 +562,13 @@ acpi_ev_detach_region(
 
        /* If we get here, the region was not in the handler's region list */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-               "Cannot remove region %p from address handler %p\n",
-               region_obj, handler_obj));
+       ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                         "Cannot remove region %p from address handler %p\n",
+                         region_obj, handler_obj));
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_attach_region
@@ -589,20 +585,19 @@ acpi_ev_detach_region(
  ******************************************************************************/
 
 acpi_status
-acpi_ev_attach_region (
-       union acpi_operand_object       *handler_obj,
-       union acpi_operand_object       *region_obj,
-       u8                              acpi_ns_is_locked)
+acpi_ev_attach_region(union acpi_operand_object *handler_obj,
+                     union acpi_operand_object *region_obj,
+                     u8 acpi_ns_is_locked)
 {
 
-       ACPI_FUNCTION_TRACE ("ev_attach_region");
-
+       ACPI_FUNCTION_TRACE("ev_attach_region");
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-               "Adding Region [%4.4s] %p to address handler %p [%s]\n",
-               acpi_ut_get_node_name (region_obj->region.node),
-               region_obj, handler_obj,
-               acpi_ut_get_region_name (region_obj->region.space_id)));
+       ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                         "Adding Region [%4.4s] %p to address handler %p [%s]\n",
+                         acpi_ut_get_node_name(region_obj->region.node),
+                         region_obj, handler_obj,
+                         acpi_ut_get_region_name(region_obj->region.
+                                                 space_id)));
 
        /* Link this region to the front of the handler's list */
 
@@ -612,16 +607,15 @@ acpi_ev_attach_region (
        /* Install the region's handler */
 
        if (region_obj->region.handler) {
-               return_ACPI_STATUS (AE_ALREADY_EXISTS);
+               return_ACPI_STATUS(AE_ALREADY_EXISTS);
        }
 
        region_obj->region.handler = handler_obj;
-       acpi_ut_add_reference (handler_obj);
+       acpi_ut_add_reference(handler_obj);
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_install_handler
@@ -640,23 +634,18 @@ acpi_ev_attach_region (
  ******************************************************************************/
 
 static acpi_status
-acpi_ev_install_handler (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value)
+acpi_ev_install_handler(acpi_handle obj_handle,
+                       u32 level, void *context, void **return_value)
 {
-       union acpi_operand_object       *handler_obj;
-       union acpi_operand_object       *next_handler_obj;
-       union acpi_operand_object       *obj_desc;
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
+       union acpi_operand_object *handler_obj;
+       union acpi_operand_object *next_handler_obj;
+       union acpi_operand_object *obj_desc;
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
+       ACPI_FUNCTION_NAME("ev_install_handler");
 
-       ACPI_FUNCTION_NAME ("ev_install_handler");
-
-
-       handler_obj = (union acpi_operand_object   *) context;
+       handler_obj = (union acpi_operand_object *)context;
 
        /* Parameter validation */
 
@@ -666,7 +655,7 @@ acpi_ev_install_handler (
 
        /* Convert and validate the device handle */
 
-       node = acpi_ns_map_handle_to_node (obj_handle);
+       node = acpi_ns_map_handle_to_node(obj_handle);
        if (!node) {
                return (AE_BAD_PARAMETER);
        }
@@ -676,14 +665,13 @@ acpi_ev_install_handler (
         * that are allowed to have address space handlers
         */
        if ((node->type != ACPI_TYPE_DEVICE) &&
-               (node->type != ACPI_TYPE_REGION) &&
-               (node != acpi_gbl_root_node)) {
+           (node->type != ACPI_TYPE_REGION) && (node != acpi_gbl_root_node)) {
                return (AE_OK);
        }
 
        /* Check for an existing internal object */
 
-       obj_desc = acpi_ns_get_attached_object (node);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (!obj_desc) {
                /* No object, just exit */
 
@@ -692,18 +680,22 @@ acpi_ev_install_handler (
 
        /* Devices are handled different than regions */
 
-       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_DEVICE) {
+       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_DEVICE) {
                /* Check if this Device already has a handler for this address space */
 
                next_handler_obj = obj_desc->device.handler;
                while (next_handler_obj) {
                        /* Found a handler, is it for the same address space? */
 
-                       if (next_handler_obj->address_space.space_id == handler_obj->address_space.space_id) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-                                       "Found handler for region [%s] in device %p(%p) handler %p\n",
-                                       acpi_ut_get_region_name (handler_obj->address_space.space_id),
-                                       obj_desc, next_handler_obj, handler_obj));
+                       if (next_handler_obj->address_space.space_id ==
+                           handler_obj->address_space.space_id) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                                                 "Found handler for region [%s] in device %p(%p) handler %p\n",
+                                                 acpi_ut_get_region_name
+                                                 (handler_obj->address_space.
+                                                  space_id), obj_desc,
+                                                 next_handler_obj,
+                                                 handler_obj));
 
                                /*
                                 * Since the object we found it on was a device, then it
@@ -744,15 +736,14 @@ acpi_ev_install_handler (
         *
         * First disconnect region for any previous handler (if any)
         */
-       acpi_ev_detach_region (obj_desc, FALSE);
+       acpi_ev_detach_region(obj_desc, FALSE);
 
        /* Connect the region to the new handler */
 
-       status = acpi_ev_attach_region (handler_obj, obj_desc, FALSE);
+       status = acpi_ev_attach_region(handler_obj, obj_desc, FALSE);
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_install_space_handler
@@ -771,32 +762,27 @@ acpi_ev_install_handler (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_install_space_handler (
-       struct acpi_namespace_node      *node,
-       acpi_adr_space_type             space_id,
-       acpi_adr_space_handler          handler,
-       acpi_adr_space_setup            setup,
-       void                            *context)
+acpi_ev_install_space_handler(struct acpi_namespace_node * node,
+                             acpi_adr_space_type space_id,
+                             acpi_adr_space_handler handler,
+                             acpi_adr_space_setup setup, void *context)
 {
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *handler_obj;
-       acpi_status                     status;
-       acpi_object_type                type;
-       u16                             flags = 0;
-
-
-       ACPI_FUNCTION_TRACE ("ev_install_space_handler");
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *handler_obj;
+       acpi_status status;
+       acpi_object_type type;
+       u16 flags = 0;
 
+       ACPI_FUNCTION_TRACE("ev_install_space_handler");
 
        /*
         * This registration is valid for only the types below
         * and the root.  This is where the default handlers
         * get placed.
         */
-       if ((node->type != ACPI_TYPE_DEVICE)     &&
-               (node->type != ACPI_TYPE_PROCESSOR)  &&
-               (node->type != ACPI_TYPE_THERMAL)    &&
-               (node != acpi_gbl_root_node)) {
+       if ((node->type != ACPI_TYPE_DEVICE) &&
+           (node->type != ACPI_TYPE_PROCESSOR) &&
+           (node->type != ACPI_TYPE_THERMAL) && (node != acpi_gbl_root_node)) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
        }
@@ -807,32 +793,32 @@ acpi_ev_install_space_handler (
                switch (space_id) {
                case ACPI_ADR_SPACE_SYSTEM_MEMORY:
                        handler = acpi_ex_system_memory_space_handler;
-                       setup   = acpi_ev_system_memory_region_setup;
+                       setup = acpi_ev_system_memory_region_setup;
                        break;
 
                case ACPI_ADR_SPACE_SYSTEM_IO:
                        handler = acpi_ex_system_io_space_handler;
-                       setup   = acpi_ev_io_space_region_setup;
+                       setup = acpi_ev_io_space_region_setup;
                        break;
 
                case ACPI_ADR_SPACE_PCI_CONFIG:
                        handler = acpi_ex_pci_config_space_handler;
-                       setup   = acpi_ev_pci_config_region_setup;
+                       setup = acpi_ev_pci_config_region_setup;
                        break;
 
                case ACPI_ADR_SPACE_CMOS:
                        handler = acpi_ex_cmos_space_handler;
-                       setup   = acpi_ev_cmos_region_setup;
+                       setup = acpi_ev_cmos_region_setup;
                        break;
 
                case ACPI_ADR_SPACE_PCI_BAR_TARGET:
                        handler = acpi_ex_pci_bar_space_handler;
-                       setup   = acpi_ev_pci_bar_region_setup;
+                       setup = acpi_ev_pci_bar_region_setup;
                        break;
 
                case ACPI_ADR_SPACE_DATA_TABLE:
                        handler = acpi_ex_data_table_space_handler;
-                       setup   = NULL;
+                       setup = NULL;
                        break;
 
                default:
@@ -849,7 +835,7 @@ acpi_ev_install_space_handler (
 
        /* Check for an existing internal object */
 
-       obj_desc = acpi_ns_get_attached_object (node);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (obj_desc) {
                /*
                 * The attached device object already exists.
@@ -863,7 +849,8 @@ acpi_ev_install_space_handler (
                        /* Same space_id indicates a handler already installed */
 
                        if (handler_obj->address_space.space_id == space_id) {
-                               if (handler_obj->address_space.handler == handler) {
+                               if (handler_obj->address_space.handler ==
+                                   handler) {
                                        /*
                                         * It is (relatively) OK to attempt to install the SAME
                                         * handler twice. This can easily happen
@@ -871,8 +858,7 @@ acpi_ev_install_space_handler (
                                         */
                                        status = AE_SAME_HANDLER;
                                        goto unlock_and_exit;
-                               }
-                               else {
+                               } else {
                                        /* A handler is already installed */
 
                                        status = AE_ALREADY_EXISTS;
@@ -884,21 +870,20 @@ acpi_ev_install_space_handler (
 
                        handler_obj = handler_obj->address_space.next;
                }
-       }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-                       "Creating object on Device %p while installing handler\n", node));
+       } else {
+               ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                                 "Creating object on Device %p while installing handler\n",
+                                 node));
 
                /* obj_desc does not exist, create one */
 
                if (node->type == ACPI_TYPE_ANY) {
                        type = ACPI_TYPE_DEVICE;
-               }
-               else {
+               } else {
                        type = node->type;
                }
 
-               obj_desc = acpi_ut_create_internal_object (type);
+               obj_desc = acpi_ut_create_internal_object(type);
                if (!obj_desc) {
                        status = AE_NO_MEMORY;
                        goto unlock_and_exit;
@@ -910,21 +895,21 @@ acpi_ev_install_space_handler (
 
                /* Attach the new object to the Node */
 
-               status = acpi_ns_attach_object (node, obj_desc, type);
+               status = acpi_ns_attach_object(node, obj_desc, type);
 
                /* Remove local reference to the object */
 
-               acpi_ut_remove_reference (obj_desc);
+               acpi_ut_remove_reference(obj_desc);
 
-               if (ACPI_FAILURE (status)) {
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-               "Installing address handler for region %s(%X) on Device %4.4s %p(%p)\n",
-               acpi_ut_get_region_name (space_id), space_id,
-               acpi_ut_get_node_name (node), node, obj_desc));
+       ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                         "Installing address handler for region %s(%X) on Device %4.4s %p(%p)\n",
+                         acpi_ut_get_region_name(space_id), space_id,
+                         acpi_ut_get_node_name(node), node, obj_desc));
 
        /*
         * Install the handler
@@ -933,7 +918,8 @@ acpi_ev_install_space_handler (
         * Just allocate the object for the handler and link it
         * into the list.
         */
-       handler_obj = acpi_ut_create_internal_object (ACPI_TYPE_LOCAL_ADDRESS_HANDLER);
+       handler_obj =
+           acpi_ut_create_internal_object(ACPI_TYPE_LOCAL_ADDRESS_HANDLER);
        if (!handler_obj) {
                status = AE_NO_MEMORY;
                goto unlock_and_exit;
@@ -941,17 +927,17 @@ acpi_ev_install_space_handler (
 
        /* Init handler obj */
 
-       handler_obj->address_space.space_id  = (u8) space_id;
-       handler_obj->address_space.hflags    = flags;
+       handler_obj->address_space.space_id = (u8) space_id;
+       handler_obj->address_space.hflags = flags;
        handler_obj->address_space.region_list = NULL;
-       handler_obj->address_space.node      = node;
-       handler_obj->address_space.handler   = handler;
-       handler_obj->address_space.context   = context;
-       handler_obj->address_space.setup     = setup;
+       handler_obj->address_space.node = node;
+       handler_obj->address_space.handler = handler;
+       handler_obj->address_space.context = context;
+       handler_obj->address_space.setup = setup;
 
        /* Install at head of Device.address_space list */
 
-       handler_obj->address_space.next      = obj_desc->device.handler;
+       handler_obj->address_space.next = obj_desc->device.handler;
 
        /*
         * The Device object is the first reference on the handler_obj.
@@ -971,15 +957,15 @@ acpi_ev_install_space_handler (
         * In either case, back up and search down the remainder
         * of the branch
         */
-       status = acpi_ns_walk_namespace (ACPI_TYPE_ANY, node, ACPI_UINT32_MAX,
-                         ACPI_NS_WALK_UNLOCK, acpi_ev_install_handler,
-                         handler_obj, NULL);
+       status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, node, ACPI_UINT32_MAX,
+                                       ACPI_NS_WALK_UNLOCK,
+                                       acpi_ev_install_handler, handler_obj,
+                                       NULL);
 
-unlock_and_exit:
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_execute_reg_methods
@@ -995,15 +981,12 @@ unlock_and_exit:
  ******************************************************************************/
 
 acpi_status
-acpi_ev_execute_reg_methods (
-       struct acpi_namespace_node      *node,
-       acpi_adr_space_type             space_id)
+acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
+                           acpi_adr_space_type space_id)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_execute_reg_methods");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_execute_reg_methods");
 
        /*
         * Run all _REG methods for all Operation Regions for this
@@ -1012,14 +995,13 @@ acpi_ev_execute_reg_methods (
         * must be installed for all regions of this Space ID before we
         * can run any _REG methods)
         */
-       status = acpi_ns_walk_namespace (ACPI_TYPE_ANY, node, ACPI_UINT32_MAX,
-                         ACPI_NS_WALK_UNLOCK, acpi_ev_reg_run,
-                         &space_id, NULL);
+       status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, node, ACPI_UINT32_MAX,
+                                       ACPI_NS_WALK_UNLOCK, acpi_ev_reg_run,
+                                       &space_id, NULL);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_reg_run
@@ -1031,23 +1013,19 @@ acpi_ev_execute_reg_methods (
  ******************************************************************************/
 
 static acpi_status
-acpi_ev_reg_run (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value)
+acpi_ev_reg_run(acpi_handle obj_handle,
+               u32 level, void *context, void **return_value)
 {
-       union acpi_operand_object       *obj_desc;
-       struct acpi_namespace_node      *node;
-       acpi_adr_space_type             space_id;
-       acpi_status                     status;
+       union acpi_operand_object *obj_desc;
+       struct acpi_namespace_node *node;
+       acpi_adr_space_type space_id;
+       acpi_status status;
 
-
-       space_id = *ACPI_CAST_PTR (acpi_adr_space_type, context);
+       space_id = *ACPI_CAST_PTR(acpi_adr_space_type, context);
 
        /* Convert and validate the device handle */
 
-       node = acpi_ns_map_handle_to_node (obj_handle);
+       node = acpi_ns_map_handle_to_node(obj_handle);
        if (!node) {
                return (AE_BAD_PARAMETER);
        }
@@ -1056,14 +1034,13 @@ acpi_ev_reg_run (
         * We only care about regions.and objects
         * that are allowed to have address space handlers
         */
-       if ((node->type != ACPI_TYPE_REGION) &&
-               (node != acpi_gbl_root_node)) {
+       if ((node->type != ACPI_TYPE_REGION) && (node != acpi_gbl_root_node)) {
                return (AE_OK);
        }
 
        /* Check for an existing internal object */
 
-       obj_desc = acpi_ns_get_attached_object (node);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (!obj_desc) {
                /* No object, just exit */
 
@@ -1080,7 +1057,6 @@ acpi_ev_reg_run (
                return (AE_OK);
        }
 
-       status = acpi_ev_execute_reg_method (obj_desc, 1);
+       status = acpi_ev_execute_reg_method(obj_desc, 1);
        return (status);
 }
-
index 95bc09c73a6aa359d19f19c9b508251ac9761912..a1bd2da27c45e5517d533459b79debae3e262404 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acevents.h>
 #include <acpi/acnamesp.h>
 
 #define _COMPONENT          ACPI_EVENTS
-        ACPI_MODULE_NAME    ("evrgnini")
-
+ACPI_MODULE_NAME("evrgnini")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Setup a system_memory operation region
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ev_system_memory_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context)
+acpi_ev_system_memory_region_setup(acpi_handle handle,
+                                  u32 function,
+                                  void *handler_context, void **region_context)
 {
-       union acpi_operand_object       *region_desc = (union acpi_operand_object *) handle;
-       struct acpi_mem_space_context   *local_region_context;
-
-
-       ACPI_FUNCTION_TRACE ("ev_system_memory_region_setup");
+       union acpi_operand_object *region_desc =
+           (union acpi_operand_object *)handle;
+       struct acpi_mem_space_context *local_region_context;
 
+       ACPI_FUNCTION_TRACE("ev_system_memory_region_setup");
 
        if (function == ACPI_REGION_DEACTIVATE) {
                if (*region_context) {
-                       ACPI_MEM_FREE (*region_context);
+                       ACPI_MEM_FREE(*region_context);
                        *region_context = NULL;
                }
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Create a new context */
 
-       local_region_context = ACPI_MEM_CALLOCATE (sizeof (struct acpi_mem_space_context));
+       local_region_context =
+           ACPI_MEM_CALLOCATE(sizeof(struct acpi_mem_space_context));
        if (!(local_region_context)) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Save the region length and address for use in the handler */
@@ -100,10 +95,9 @@ acpi_ev_system_memory_region_setup (
        local_region_context->address = region_desc->region.address;
 
        *region_context = local_region_context;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_io_space_region_setup
@@ -120,26 +114,21 @@ acpi_ev_system_memory_region_setup (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_io_space_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context)
+acpi_ev_io_space_region_setup(acpi_handle handle,
+                             u32 function,
+                             void *handler_context, void **region_context)
 {
-       ACPI_FUNCTION_TRACE ("ev_io_space_region_setup");
-
+       ACPI_FUNCTION_TRACE("ev_io_space_region_setup");
 
        if (function == ACPI_REGION_DEACTIVATE) {
                *region_context = NULL;
-       }
-       else {
+       } else {
                *region_context = handler_context;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_pci_config_region_setup
@@ -158,24 +147,21 @@ acpi_ev_io_space_region_setup (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_pci_config_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context)
+acpi_ev_pci_config_region_setup(acpi_handle handle,
+                               u32 function,
+                               void *handler_context, void **region_context)
 {
-       acpi_status                     status = AE_OK;
-       acpi_integer                    pci_value;
-       struct acpi_pci_id              *pci_id = *region_context;
-       union acpi_operand_object       *handler_obj;
-       struct acpi_namespace_node      *parent_node;
-       struct acpi_namespace_node      *pci_root_node;
-       union acpi_operand_object       *region_obj = (union acpi_operand_object   *) handle;
-       struct acpi_device_id           object_hID;
-
-
-       ACPI_FUNCTION_TRACE ("ev_pci_config_region_setup");
-
+       acpi_status status = AE_OK;
+       acpi_integer pci_value;
+       struct acpi_pci_id *pci_id = *region_context;
+       union acpi_operand_object *handler_obj;
+       struct acpi_namespace_node *parent_node;
+       struct acpi_namespace_node *pci_root_node;
+       union acpi_operand_object *region_obj =
+           (union acpi_operand_object *)handle;
+       struct acpi_device_id object_hID;
+
+       ACPI_FUNCTION_TRACE("ev_pci_config_region_setup");
 
        handler_obj = region_obj->region.handler;
        if (!handler_obj) {
@@ -183,20 +169,21 @@ acpi_ev_pci_config_region_setup (
                 * No installed handler. This shouldn't happen because the dispatch
                 * routine checks before we get here, but we check again just in case.
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-                       "Attempting to init a region %p, with no handler\n", region_obj));
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                                 "Attempting to init a region %p, with no handler\n",
+                                 region_obj));
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
        *region_context = NULL;
        if (function == ACPI_REGION_DEACTIVATE) {
                if (pci_id) {
-                       ACPI_MEM_FREE (pci_id);
+                       ACPI_MEM_FREE(pci_id);
                }
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
-       parent_node = acpi_ns_get_parent_node (region_obj->region.node);
+       parent_node = acpi_ns_get_parent_node(region_obj->region.node);
 
        /*
         * Get the _SEG and _BBN values from the device upon which the handler
@@ -216,18 +203,28 @@ acpi_ev_pci_config_region_setup (
 
                pci_root_node = parent_node;
                while (pci_root_node != acpi_gbl_root_node) {
-                       status = acpi_ut_execute_HID (pci_root_node, &object_hID);
-                       if (ACPI_SUCCESS (status)) {
-                               /* Got a valid _HID, check if this is a PCI root */
-
-                               if (!(ACPI_STRNCMP (object_hID.value, PCI_ROOT_HID_STRING,
-                                                  sizeof (PCI_ROOT_HID_STRING)))) {
+                       status =
+                           acpi_ut_execute_HID(pci_root_node, &object_hID);
+                       if (ACPI_SUCCESS(status)) {
+                               /*
+                                * Got a valid _HID string, check if this is a PCI root.
+                                * New for ACPI 3.0: check for a PCI Express root also.
+                                */
+                               if (!
+                                   (ACPI_STRNCMP
+                                    (object_hID.value, PCI_ROOT_HID_STRING,
+                                     sizeof(PCI_ROOT_HID_STRING))
+                                    ||
+                                    !(ACPI_STRNCMP
+                                      (object_hID.value,
+                                       PCI_EXPRESS_ROOT_HID_STRING,
+                                       sizeof(PCI_EXPRESS_ROOT_HID_STRING)))))
+                               {
                                        /* Install a handler for this PCI root bridge */
 
-                                       status = acpi_install_address_space_handler ((acpi_handle) pci_root_node,
-                                                          ACPI_ADR_SPACE_PCI_CONFIG,
-                                                          ACPI_DEFAULT_HANDLER, NULL, NULL);
-                                       if (ACPI_FAILURE (status)) {
+                                       status =
+                                           acpi_install_address_space_handler((acpi_handle) pci_root_node, ACPI_ADR_SPACE_PCI_CONFIG, ACPI_DEFAULT_HANDLER, NULL, NULL);
+                                       if (ACPI_FAILURE(status)) {
                                                if (status == AE_SAME_HANDLER) {
                                                        /*
                                                         * It is OK if the handler is already installed on the root
@@ -235,23 +232,19 @@ acpi_ev_pci_config_region_setup (
                                                         * new PCI_Config operation region, however.
                                                         */
                                                        status = AE_OK;
-                                               }
-                                               else {
-                                                       ACPI_REPORT_ERROR ((
-                                                               "Could not install pci_config handler for Root Bridge %4.4s, %s\n",
-                                                               acpi_ut_get_node_name (pci_root_node), acpi_format_exception (status)));
+                                               } else {
+                                                       ACPI_REPORT_ERROR(("Could not install pci_config handler for Root Bridge %4.4s, %s\n", acpi_ut_get_node_name(pci_root_node), acpi_format_exception(status)));
                                                }
                                        }
                                        break;
                                }
                        }
 
-                       pci_root_node = acpi_ns_get_parent_node (pci_root_node);
+                       pci_root_node = acpi_ns_get_parent_node(pci_root_node);
                }
 
                /* PCI root bridge not found, use namespace root node */
-       }
-       else {
+       } else {
                pci_root_node = handler_obj->address_space.node;
        }
 
@@ -260,14 +253,14 @@ acpi_ev_pci_config_region_setup (
         * (install_address_space_handler could have initialized it)
         */
        if (region_obj->region.flags & AOPOBJ_SETUP_COMPLETE) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Region is still not initialized. Create a new context */
 
-       pci_id = ACPI_MEM_CALLOCATE (sizeof (struct acpi_pci_id));
+       pci_id = ACPI_MEM_CALLOCATE(sizeof(struct acpi_pci_id));
        if (!pci_id) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /*
@@ -279,40 +272,45 @@ acpi_ev_pci_config_region_setup (
         * Get the PCI device and function numbers from the _ADR object
         * contained in the parent's scope.
         */
-       status = acpi_ut_evaluate_numeric_object (METHOD_NAME__ADR, parent_node, &pci_value);
+       status =
+           acpi_ut_evaluate_numeric_object(METHOD_NAME__ADR, parent_node,
+                                           &pci_value);
 
        /*
         * The default is zero, and since the allocation above zeroed
         * the data, just do nothing on failure.
         */
-       if (ACPI_SUCCESS (status)) {
-               pci_id->device  = ACPI_HIWORD (ACPI_LODWORD (pci_value));
-               pci_id->function = ACPI_LOWORD (ACPI_LODWORD (pci_value));
+       if (ACPI_SUCCESS(status)) {
+               pci_id->device = ACPI_HIWORD(ACPI_LODWORD(pci_value));
+               pci_id->function = ACPI_LOWORD(ACPI_LODWORD(pci_value));
        }
 
        /* The PCI segment number comes from the _SEG method */
 
-       status = acpi_ut_evaluate_numeric_object (METHOD_NAME__SEG, pci_root_node, &pci_value);
-       if (ACPI_SUCCESS (status)) {
-               pci_id->segment = ACPI_LOWORD (pci_value);
+       status =
+           acpi_ut_evaluate_numeric_object(METHOD_NAME__SEG, pci_root_node,
+                                           &pci_value);
+       if (ACPI_SUCCESS(status)) {
+               pci_id->segment = ACPI_LOWORD(pci_value);
        }
 
        /* The PCI bus number comes from the _BBN method */
 
-       status = acpi_ut_evaluate_numeric_object (METHOD_NAME__BBN, pci_root_node, &pci_value);
-       if (ACPI_SUCCESS (status)) {
-               pci_id->bus = ACPI_LOWORD (pci_value);
+       status =
+           acpi_ut_evaluate_numeric_object(METHOD_NAME__BBN, pci_root_node,
+                                           &pci_value);
+       if (ACPI_SUCCESS(status)) {
+               pci_id->bus = ACPI_LOWORD(pci_value);
        }
 
        /* Complete this device's pci_id */
 
-       acpi_os_derive_pci_id (pci_root_node, region_obj->region.node, &pci_id);
+       acpi_os_derive_pci_id(pci_root_node, region_obj->region.node, &pci_id);
 
        *region_context = pci_id;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_pci_bar_region_setup
@@ -331,19 +329,15 @@ acpi_ev_pci_config_region_setup (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_pci_bar_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context)
+acpi_ev_pci_bar_region_setup(acpi_handle handle,
+                            u32 function,
+                            void *handler_context, void **region_context)
 {
-       ACPI_FUNCTION_TRACE ("ev_pci_bar_region_setup");
-
+       ACPI_FUNCTION_TRACE("ev_pci_bar_region_setup");
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_cmos_region_setup
@@ -362,19 +356,15 @@ acpi_ev_pci_bar_region_setup (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_cmos_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context)
+acpi_ev_cmos_region_setup(acpi_handle handle,
+                         u32 function,
+                         void *handler_context, void **region_context)
 {
-       ACPI_FUNCTION_TRACE ("ev_cmos_region_setup");
-
+       ACPI_FUNCTION_TRACE("ev_cmos_region_setup");
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_default_region_setup
@@ -391,26 +381,21 @@ acpi_ev_cmos_region_setup (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_default_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context)
+acpi_ev_default_region_setup(acpi_handle handle,
+                            u32 function,
+                            void *handler_context, void **region_context)
 {
-       ACPI_FUNCTION_TRACE ("ev_default_region_setup");
-
+       ACPI_FUNCTION_TRACE("ev_default_region_setup");
 
        if (function == ACPI_REGION_DEACTIVATE) {
                *region_context = NULL;
-       }
-       else {
+       } else {
                *region_context = handler_context;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_initialize_region
@@ -434,37 +419,34 @@ acpi_ev_default_region_setup (
  ******************************************************************************/
 
 acpi_status
-acpi_ev_initialize_region (
-       union acpi_operand_object       *region_obj,
-       u8                              acpi_ns_locked)
+acpi_ev_initialize_region(union acpi_operand_object *region_obj,
+                         u8 acpi_ns_locked)
 {
-       union acpi_operand_object       *handler_obj;
-       union acpi_operand_object       *obj_desc;
-       acpi_adr_space_type             space_id;
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-       struct acpi_namespace_node      *method_node;
-       acpi_name                       *reg_name_ptr = (acpi_name *) METHOD_NAME__REG;
-       union acpi_operand_object       *region_obj2;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ev_initialize_region", acpi_ns_locked);
+       union acpi_operand_object *handler_obj;
+       union acpi_operand_object *obj_desc;
+       acpi_adr_space_type space_id;
+       struct acpi_namespace_node *node;
+       acpi_status status;
+       struct acpi_namespace_node *method_node;
+       acpi_name *reg_name_ptr = (acpi_name *) METHOD_NAME__REG;
+       union acpi_operand_object *region_obj2;
 
+       ACPI_FUNCTION_TRACE_U32("ev_initialize_region", acpi_ns_locked);
 
        if (!region_obj) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        if (region_obj->common.flags & AOPOBJ_OBJECT_INITIALIZED) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
-       region_obj2 = acpi_ns_get_secondary_object (region_obj);
+       region_obj2 = acpi_ns_get_secondary_object(region_obj);
        if (!region_obj2) {
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
-       node = acpi_ns_get_parent_node (region_obj->region.node);
+       node = acpi_ns_get_parent_node(region_obj->region.node);
        space_id = region_obj->region.space_id;
 
        /* Setup defaults */
@@ -476,9 +458,9 @@ acpi_ev_initialize_region (
 
        /* Find any "_REG" method associated with this region definition */
 
-       status = acpi_ns_search_node (*reg_name_ptr, node,
-                         ACPI_TYPE_METHOD, &method_node);
-       if (ACPI_SUCCESS (status)) {
+       status = acpi_ns_search_node(*reg_name_ptr, node,
+                                    ACPI_TYPE_METHOD, &method_node);
+       if (ACPI_SUCCESS(status)) {
                /*
                 * The _REG method is optional and there can be only one per region
                 * definition.  This will be executed when the handler is attached
@@ -495,7 +477,7 @@ acpi_ev_initialize_region (
                /* Check to see if a handler exists */
 
                handler_obj = NULL;
-               obj_desc = acpi_ns_get_attached_object (node);
+               obj_desc = acpi_ns_get_attached_object(node);
                if (obj_desc) {
                        /* Can only be a handler if the object exists */
 
@@ -523,37 +505,50 @@ acpi_ev_initialize_region (
                        while (handler_obj) {
                                /* Is this handler of the correct type? */
 
-                               if (handler_obj->address_space.space_id == space_id) {
+                               if (handler_obj->address_space.space_id ==
+                                   space_id) {
                                        /* Found correct handler */
 
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-                                               "Found handler %p for region %p in obj %p\n",
-                                               handler_obj, region_obj, obj_desc));
+                                       ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                                                         "Found handler %p for region %p in obj %p\n",
+                                                         handler_obj,
+                                                         region_obj,
+                                                         obj_desc));
 
-                                       status = acpi_ev_attach_region (handler_obj, region_obj,
-                                                        acpi_ns_locked);
+                                       status =
+                                           acpi_ev_attach_region(handler_obj,
+                                                                 region_obj,
+                                                                 acpi_ns_locked);
 
                                        /*
                                         * Tell all users that this region is usable by running the _REG
                                         * method
                                         */
                                        if (acpi_ns_locked) {
-                                               status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-                                               if (ACPI_FAILURE (status)) {
-                                                       return_ACPI_STATUS (status);
+                                               status =
+                                                   acpi_ut_release_mutex
+                                                   (ACPI_MTX_NAMESPACE);
+                                               if (ACPI_FAILURE(status)) {
+                                                       return_ACPI_STATUS
+                                                           (status);
                                                }
                                        }
 
-                                       status = acpi_ev_execute_reg_method (region_obj, 1);
+                                       status =
+                                           acpi_ev_execute_reg_method
+                                           (region_obj, 1);
 
                                        if (acpi_ns_locked) {
-                                               status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-                                               if (ACPI_FAILURE (status)) {
-                                                       return_ACPI_STATUS (status);
+                                               status =
+                                                   acpi_ut_acquire_mutex
+                                                   (ACPI_MTX_NAMESPACE);
+                                               if (ACPI_FAILURE(status)) {
+                                                       return_ACPI_STATUS
+                                                           (status);
                                                }
                                        }
 
-                                       return_ACPI_STATUS (AE_OK);
+                                       return_ACPI_STATUS(AE_OK);
                                }
 
                                /* Try next handler in the list */
@@ -566,15 +561,15 @@ acpi_ev_initialize_region (
                 * This node does not have the handler we need;
                 * Pop up one level
                 */
-               node = acpi_ns_get_parent_node (node);
+               node = acpi_ns_get_parent_node(node);
        }
 
        /* If we get here, there is no handler for this region */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-               "No handler for region_type %s(%X) (region_obj %p)\n",
-               acpi_ut_get_region_name (space_id), space_id, region_obj));
+       ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                         "No handler for region_type %s(%X) (region_obj %p)\n",
+                         acpi_ut_get_region_name(space_id), space_id,
+                         region_obj));
 
-       return_ACPI_STATUS (AE_NOT_EXIST);
+       return_ACPI_STATUS(AE_NOT_EXIST);
 }
-
index f3123c26ae987be2e4d489268283417aa36ebbb6..1418359770022a462e1e4f2a53edce4bfacdc6e4 100644 (file)
 #include <acpi/acpi.h>
 #include <acpi/acevents.h>
 
-
 #define _COMPONENT          ACPI_EVENTS
-        ACPI_MODULE_NAME    ("evsci")
+ACPI_MODULE_NAME("evsci")
 
 /* Local prototypes */
-
-static u32 ACPI_SYSTEM_XFACE
-acpi_ev_sci_xrupt_handler (
-       void                            *context);
-
+static u32 ACPI_SYSTEM_XFACE acpi_ev_sci_xrupt_handler(void *context);
 
 /*******************************************************************************
  *
@@ -69,17 +64,13 @@ acpi_ev_sci_xrupt_handler (
  *
  ******************************************************************************/
 
-static u32 ACPI_SYSTEM_XFACE
-acpi_ev_sci_xrupt_handler (
-       void                            *context)
+static u32 ACPI_SYSTEM_XFACE acpi_ev_sci_xrupt_handler(void *context)
 {
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_list = context;
-       u32                             interrupt_handled = ACPI_INTERRUPT_NOT_HANDLED;
-
+       struct acpi_gpe_xrupt_info *gpe_xrupt_list = context;
+       u32 interrupt_handled = ACPI_INTERRUPT_NOT_HANDLED;
 
        ACPI_FUNCTION_TRACE("ev_sci_xrupt_handler");
 
-
        /*
         * We are guaranteed by the ACPI CA initialization/shutdown code that
         * if this interrupt handler is installed, ACPI is enabled.
@@ -89,18 +80,17 @@ acpi_ev_sci_xrupt_handler (
         * Fixed Events:
         * Check for and dispatch any Fixed Events that have occurred
         */
-       interrupt_handled |= acpi_ev_fixed_event_detect ();
+       interrupt_handled |= acpi_ev_fixed_event_detect();
 
        /*
         * General Purpose Events:
         * Check for and dispatch any GPEs that have occurred
         */
-       interrupt_handled |= acpi_ev_gpe_detect (gpe_xrupt_list);
+       interrupt_handled |= acpi_ev_gpe_detect(gpe_xrupt_list);
 
-       return_VALUE (interrupt_handled);
+       return_VALUE(interrupt_handled);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ev_gpe_xrupt_handler
@@ -113,17 +103,13 @@ acpi_ev_sci_xrupt_handler (
  *
  ******************************************************************************/
 
-u32 ACPI_SYSTEM_XFACE
-acpi_ev_gpe_xrupt_handler (
-       void                            *context)
+u32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context)
 {
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_list = context;
-       u32                             interrupt_handled = ACPI_INTERRUPT_NOT_HANDLED;
-
+       struct acpi_gpe_xrupt_info *gpe_xrupt_list = context;
+       u32 interrupt_handled = ACPI_INTERRUPT_NOT_HANDLED;
 
        ACPI_FUNCTION_TRACE("ev_gpe_xrupt_handler");
 
-
        /*
         * We are guaranteed by the ACPI CA initialization/shutdown code that
         * if this interrupt handler is installed, ACPI is enabled.
@@ -133,12 +119,11 @@ acpi_ev_gpe_xrupt_handler (
         * GPEs:
         * Check for and dispatch any GPEs that have occurred
         */
-       interrupt_handled |= acpi_ev_gpe_detect (gpe_xrupt_list);
+       interrupt_handled |= acpi_ev_gpe_detect(gpe_xrupt_list);
 
-       return_VALUE (interrupt_handled);
+       return_VALUE(interrupt_handled);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_ev_install_sci_handler
@@ -151,22 +136,18 @@ acpi_ev_gpe_xrupt_handler (
  *
  ******************************************************************************/
 
-u32
-acpi_ev_install_sci_handler (
-       void)
+u32 acpi_ev_install_sci_handler(void)
 {
-       u32                             status = AE_OK;
-
+       u32 status = AE_OK;
 
-       ACPI_FUNCTION_TRACE ("ev_install_sci_handler");
+       ACPI_FUNCTION_TRACE("ev_install_sci_handler");
 
-
-       status = acpi_os_install_interrupt_handler ((u32) acpi_gbl_FADT->sci_int,
-                          acpi_ev_sci_xrupt_handler, acpi_gbl_gpe_xrupt_list_head);
-       return_ACPI_STATUS (status);
+       status = acpi_os_install_interrupt_handler((u32) acpi_gbl_FADT->sci_int,
+                                                  acpi_ev_sci_xrupt_handler,
+                                                  acpi_gbl_gpe_xrupt_list_head);
+       return_ACPI_STATUS(status);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_ev_remove_sci_handler
@@ -186,22 +167,16 @@ acpi_ev_install_sci_handler (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ev_remove_sci_handler (
-       void)
+acpi_status acpi_ev_remove_sci_handler(void)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ev_remove_sci_handler");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ev_remove_sci_handler");
 
        /* Just let the OS remove the handler and disable the level */
 
-       status = acpi_os_remove_interrupt_handler ((u32) acpi_gbl_FADT->sci_int,
-                          acpi_ev_sci_xrupt_handler);
+       status = acpi_os_remove_interrupt_handler((u32) acpi_gbl_FADT->sci_int,
+                                                 acpi_ev_sci_xrupt_handler);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 4092d47f67586d823fc2777b25f02a59012bc8c0..43b33d19cdf9169b751b275fb9466cc9b6fa2811 100644 (file)
@@ -49,8 +49,7 @@
 #include <acpi/acinterp.h>
 
 #define _COMPONENT          ACPI_EVENTS
-        ACPI_MODULE_NAME    ("evxface")
-
+ACPI_MODULE_NAME("evxface")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Saves the pointer to the handler function
  *
  ******************************************************************************/
-
 #ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_install_exception_handler (
-       acpi_exception_handler          handler)
+acpi_status acpi_install_exception_handler(acpi_exception_handler handler)
 {
-       acpi_status                     status;
-
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("acpi_install_exception_handler");
+       ACPI_FUNCTION_TRACE("acpi_install_exception_handler");
 
-
-       status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Don't allow two handlers. */
@@ -92,12 +86,11 @@ acpi_install_exception_handler (
 
        acpi_gbl_exception_handler = handler;
 
-cleanup:
-       (void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
-       return_ACPI_STATUS (status);
+      cleanup:
+       (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
+       return_ACPI_STATUS(status);
 }
-#endif  /*  ACPI_FUTURE_USAGE  */
-
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*******************************************************************************
  *
@@ -116,26 +109,22 @@ cleanup:
  ******************************************************************************/
 
 acpi_status
-acpi_install_fixed_event_handler (
-       u32                             event,
-       acpi_event_handler              handler,
-       void                            *context)
+acpi_install_fixed_event_handler(u32 event,
+                                acpi_event_handler handler, void *context)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_install_fixed_event_handler");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_install_fixed_event_handler");
 
        /* Parameter validation */
 
        if (event > ACPI_EVENT_MAX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Don't allow two handlers. */
@@ -150,29 +139,29 @@ acpi_install_fixed_event_handler (
        acpi_gbl_fixed_event_handlers[event].handler = handler;
        acpi_gbl_fixed_event_handlers[event].context = context;
 
-       status = acpi_clear_event (event);
+       status = acpi_clear_event(event);
        if (ACPI_SUCCESS(status))
-               status = acpi_enable_event (event, 0);
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Could not enable fixed event.\n"));
+               status = acpi_enable_event(event, 0);
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Could not enable fixed event.\n"));
 
                /* Remove the handler */
 
                acpi_gbl_fixed_event_handlers[event].handler = NULL;
                acpi_gbl_fixed_event_handlers[event].context = NULL;
-       }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                       "Enabled fixed event %X, Handler=%p\n", event, handler));
+       } else {
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Enabled fixed event %X, Handler=%p\n", event,
+                                 handler));
        }
 
-
-cleanup:
-       (void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
-       return_ACPI_STATUS (status);
+      cleanup:
+       (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_install_fixed_event_handler);
 
+EXPORT_SYMBOL(acpi_install_fixed_event_handler);
 
 /*******************************************************************************
  *
@@ -188,49 +177,45 @@ EXPORT_SYMBOL(acpi_install_fixed_event_handler);
  ******************************************************************************/
 
 acpi_status
-acpi_remove_fixed_event_handler (
-       u32                             event,
-       acpi_event_handler              handler)
+acpi_remove_fixed_event_handler(u32 event, acpi_event_handler handler)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_remove_fixed_event_handler");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("acpi_remove_fixed_event_handler");
 
        /* Parameter validation */
 
        if (event > ACPI_EVENT_MAX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Disable the event before removing the handler */
 
-       status = acpi_disable_event (event, 0);
+       status = acpi_disable_event(event, 0);
 
        /* Always Remove the handler */
 
        acpi_gbl_fixed_event_handlers[event].handler = NULL;
        acpi_gbl_fixed_event_handlers[event].context = NULL;
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_WARN,
-                       "Could not write to fixed event enable register.\n"));
-       }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Disabled fixed event %X.\n", event));
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Could not write to fixed event enable register.\n"));
+       } else {
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Disabled fixed event %X.\n",
+                                 event));
        }
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
-       return_ACPI_STATUS (status);
+       (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_remove_fixed_event_handler);
 
+EXPORT_SYMBOL(acpi_remove_fixed_event_handler);
 
 /*******************************************************************************
  *
@@ -251,37 +236,32 @@ EXPORT_SYMBOL(acpi_remove_fixed_event_handler);
  ******************************************************************************/
 
 acpi_status
-acpi_install_notify_handler (
-       acpi_handle                     device,
-       u32                             handler_type,
-       acpi_notify_handler             handler,
-       void                            *context)
+acpi_install_notify_handler(acpi_handle device,
+                           u32 handler_type,
+                           acpi_notify_handler handler, void *context)
 {
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *notify_obj;
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_install_notify_handler");
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *notify_obj;
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_install_notify_handler");
 
        /* Parameter validation */
 
-       if ((!device)  ||
-               (!handler) ||
-               (handler_type > ACPI_MAX_NOTIFY_HANDLER_TYPE)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((!device) ||
+           (!handler) || (handler_type > ACPI_MAX_NOTIFY_HANDLER_TYPE)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Convert and validate the device handle */
 
-       node = acpi_ns_map_handle_to_node (device);
+       node = acpi_ns_map_handle_to_node(device);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -297,21 +277,21 @@ acpi_install_notify_handler (
                /* Make sure the handler is not already installed */
 
                if (((handler_type & ACPI_SYSTEM_NOTIFY) &&
-                               acpi_gbl_system_notify.handler)     ||
-                       ((handler_type & ACPI_DEVICE_NOTIFY) &&
-                               acpi_gbl_device_notify.handler)) {
+                    acpi_gbl_system_notify.handler) ||
+                   ((handler_type & ACPI_DEVICE_NOTIFY) &&
+                    acpi_gbl_device_notify.handler)) {
                        status = AE_ALREADY_EXISTS;
                        goto unlock_and_exit;
                }
 
                if (handler_type & ACPI_SYSTEM_NOTIFY) {
-                       acpi_gbl_system_notify.node  = node;
+                       acpi_gbl_system_notify.node = node;
                        acpi_gbl_system_notify.handler = handler;
                        acpi_gbl_system_notify.context = context;
                }
 
                if (handler_type & ACPI_DEVICE_NOTIFY) {
-                       acpi_gbl_device_notify.node  = node;
+                       acpi_gbl_device_notify.node = node;
                        acpi_gbl_device_notify.handler = handler;
                        acpi_gbl_device_notify.context = context;
                }
@@ -327,29 +307,28 @@ acpi_install_notify_handler (
        else {
                /* Notifies allowed on this object? */
 
-               if (!acpi_ev_is_notify_object (node)) {
+               if (!acpi_ev_is_notify_object(node)) {
                        status = AE_TYPE;
                        goto unlock_and_exit;
                }
 
                /* Check for an existing internal object */
 
-               obj_desc = acpi_ns_get_attached_object (node);
+               obj_desc = acpi_ns_get_attached_object(node);
                if (obj_desc) {
                        /* Object exists - make sure there's no handler */
 
                        if (((handler_type & ACPI_SYSTEM_NOTIFY) &&
-                                       obj_desc->common_notify.system_notify) ||
-                               ((handler_type & ACPI_DEVICE_NOTIFY) &&
-                                       obj_desc->common_notify.device_notify)) {
+                            obj_desc->common_notify.system_notify) ||
+                           ((handler_type & ACPI_DEVICE_NOTIFY) &&
+                            obj_desc->common_notify.device_notify)) {
                                status = AE_ALREADY_EXISTS;
                                goto unlock_and_exit;
                        }
-               }
-               else {
+               } else {
                        /* Create a new object */
 
-                       obj_desc = acpi_ut_create_internal_object (node->type);
+                       obj_desc = acpi_ut_create_internal_object(node->type);
                        if (!obj_desc) {
                                status = AE_NO_MEMORY;
                                goto unlock_and_exit;
@@ -357,25 +336,27 @@ acpi_install_notify_handler (
 
                        /* Attach new object to the Node */
 
-                       status = acpi_ns_attach_object (device, obj_desc, node->type);
+                       status =
+                           acpi_ns_attach_object(device, obj_desc, node->type);
 
                        /* Remove local reference to the object */
 
-                       acpi_ut_remove_reference (obj_desc);
-                       if (ACPI_FAILURE (status)) {
+                       acpi_ut_remove_reference(obj_desc);
+                       if (ACPI_FAILURE(status)) {
                                goto unlock_and_exit;
                        }
                }
 
                /* Install the handler */
 
-               notify_obj = acpi_ut_create_internal_object (ACPI_TYPE_LOCAL_NOTIFY);
+               notify_obj =
+                   acpi_ut_create_internal_object(ACPI_TYPE_LOCAL_NOTIFY);
                if (!notify_obj) {
                        status = AE_NO_MEMORY;
                        goto unlock_and_exit;
                }
 
-               notify_obj->notify.node   = node;
+               notify_obj->notify.node = node;
                notify_obj->notify.handler = handler;
                notify_obj->notify.context = context;
 
@@ -390,17 +371,16 @@ acpi_install_notify_handler (
                if (handler_type == ACPI_ALL_NOTIFY) {
                        /* Extra ref if installed in both */
 
-                       acpi_ut_add_reference (notify_obj);
+                       acpi_ut_add_reference(notify_obj);
                }
        }
 
-
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_install_notify_handler);
 
+EXPORT_SYMBOL(acpi_install_notify_handler);
 
 /*******************************************************************************
  *
@@ -420,36 +400,31 @@ EXPORT_SYMBOL(acpi_install_notify_handler);
  ******************************************************************************/
 
 acpi_status
-acpi_remove_notify_handler (
-       acpi_handle                     device,
-       u32                             handler_type,
-       acpi_notify_handler             handler)
+acpi_remove_notify_handler(acpi_handle device,
+                          u32 handler_type, acpi_notify_handler handler)
 {
-       union acpi_operand_object       *notify_obj;
-       union acpi_operand_object       *obj_desc;
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_remove_notify_handler");
+       union acpi_operand_object *notify_obj;
+       union acpi_operand_object *obj_desc;
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_remove_notify_handler");
 
        /* Parameter validation */
 
-       if ((!device)  ||
-               (!handler) ||
-               (handler_type > ACPI_MAX_NOTIFY_HANDLER_TYPE)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((!device) ||
+           (!handler) || (handler_type > ACPI_MAX_NOTIFY_HANDLER_TYPE)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Convert and validate the device handle */
 
-       node = acpi_ns_map_handle_to_node (device);
+       node = acpi_ns_map_handle_to_node(device);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -458,34 +433,34 @@ acpi_remove_notify_handler (
        /* Root Object */
 
        if (device == ACPI_ROOT_OBJECT) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                       "Removing notify handler for ROOT object.\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Removing notify handler for ROOT object.\n"));
 
                if (((handler_type & ACPI_SYSTEM_NOTIFY) &&
-                         !acpi_gbl_system_notify.handler)      ||
-                       ((handler_type & ACPI_DEVICE_NOTIFY) &&
-                         !acpi_gbl_device_notify.handler)) {
+                    !acpi_gbl_system_notify.handler) ||
+                   ((handler_type & ACPI_DEVICE_NOTIFY) &&
+                    !acpi_gbl_device_notify.handler)) {
                        status = AE_NOT_EXIST;
                        goto unlock_and_exit;
                }
 
                /* Make sure all deferred tasks are completed */
 
-               (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+               (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
                acpi_os_wait_events_complete(NULL);
-               status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
-               }
+               status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
+               }
 
                if (handler_type & ACPI_SYSTEM_NOTIFY) {
-                       acpi_gbl_system_notify.node  = NULL;
+                       acpi_gbl_system_notify.node = NULL;
                        acpi_gbl_system_notify.handler = NULL;
                        acpi_gbl_system_notify.context = NULL;
                }
 
                if (handler_type & ACPI_DEVICE_NOTIFY) {
-                       acpi_gbl_device_notify.node  = NULL;
+                       acpi_gbl_device_notify.node = NULL;
                        acpi_gbl_device_notify.handler = NULL;
                        acpi_gbl_device_notify.context = NULL;
                }
@@ -496,14 +471,14 @@ acpi_remove_notify_handler (
        else {
                /* Notifies allowed on this object? */
 
-               if (!acpi_ev_is_notify_object (node)) {
+               if (!acpi_ev_is_notify_object(node)) {
                        status = AE_TYPE;
                        goto unlock_and_exit;
                }
 
                /* Check for an existing internal object */
 
-               obj_desc = acpi_ns_get_attached_object (node);
+               obj_desc = acpi_ns_get_attached_object(node);
                if (!obj_desc) {
                        status = AE_NOT_EXIST;
                        goto unlock_and_exit;
@@ -514,53 +489,52 @@ acpi_remove_notify_handler (
                if (handler_type & ACPI_SYSTEM_NOTIFY) {
                        notify_obj = obj_desc->common_notify.system_notify;
                        if ((!notify_obj) ||
-                                (notify_obj->notify.handler != handler)) {
+                           (notify_obj->notify.handler != handler)) {
                                status = AE_BAD_PARAMETER;
                                goto unlock_and_exit;
                        }
                        /* Make sure all deferred tasks are completed */
 
-                       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+                       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
                        acpi_os_wait_events_complete(NULL);
-                       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
-                       }
+                       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
+                       }
 
                        /* Remove the handler */
                        obj_desc->common_notify.system_notify = NULL;
-                       acpi_ut_remove_reference (notify_obj);
+                       acpi_ut_remove_reference(notify_obj);
                }
 
                if (handler_type & ACPI_DEVICE_NOTIFY) {
                        notify_obj = obj_desc->common_notify.device_notify;
                        if ((!notify_obj) ||
-                                (notify_obj->notify.handler != handler)) {
+                           (notify_obj->notify.handler != handler)) {
                                status = AE_BAD_PARAMETER;
                                goto unlock_and_exit;
                        }
                        /* Make sure all deferred tasks are completed */
 
-                       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+                       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
                        acpi_os_wait_events_complete(NULL);
-                       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
-                       }
+                       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
+                       }
 
                        /* Remove the handler */
                        obj_desc->common_notify.device_notify = NULL;
-                       acpi_ut_remove_reference (notify_obj);
+                       acpi_ut_remove_reference(notify_obj);
                }
        }
 
-
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_remove_notify_handler);
 
+EXPORT_SYMBOL(acpi_remove_notify_handler);
 
 /*******************************************************************************
  *
@@ -581,35 +555,31 @@ EXPORT_SYMBOL(acpi_remove_notify_handler);
  ******************************************************************************/
 
 acpi_status
-acpi_install_gpe_handler (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             type,
-       acpi_event_handler              address,
-       void                            *context)
+acpi_install_gpe_handler(acpi_handle gpe_device,
+                        u32 gpe_number,
+                        u32 type, acpi_event_handler address, void *context)
 {
-       struct acpi_gpe_event_info      *gpe_event_info;
-       struct acpi_handler_info        *handler;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_install_gpe_handler");
+       struct acpi_gpe_event_info *gpe_event_info;
+       struct acpi_handler_info *handler;
+       acpi_status status;
+       u32 flags;
 
+       ACPI_FUNCTION_TRACE("acpi_install_gpe_handler");
 
        /* Parameter validation */
 
        if ((!address) || (type > ACPI_GPE_XRUPT_TYPE_MASK)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Ensure that we have a valid GPE number */
 
-       gpe_event_info = acpi_ev_get_gpe_event_info (gpe_device, gpe_number);
+       gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number);
        if (!gpe_event_info) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -617,49 +587,49 @@ acpi_install_gpe_handler (
 
        /* Make sure that there isn't a handler there already */
 
-       if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) == ACPI_GPE_DISPATCH_HANDLER) {
+       if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) ==
+           ACPI_GPE_DISPATCH_HANDLER) {
                status = AE_ALREADY_EXISTS;
                goto unlock_and_exit;
        }
 
        /* Allocate and init handler object */
 
-       handler = ACPI_MEM_CALLOCATE (sizeof (struct acpi_handler_info));
+       handler = ACPI_MEM_CALLOCATE(sizeof(struct acpi_handler_info));
        if (!handler) {
                status = AE_NO_MEMORY;
                goto unlock_and_exit;
        }
 
-       handler->address    = address;
-       handler->context    = context;
+       handler->address = address;
+       handler->context = context;
        handler->method_node = gpe_event_info->dispatch.method_node;
 
        /* Disable the GPE before installing the handler */
 
-       status = acpi_ev_disable_gpe (gpe_event_info);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ev_disable_gpe(gpe_event_info);
+       if (ACPI_FAILURE(status)) {
                goto unlock_and_exit;
        }
 
        /* Install the handler */
 
-       acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+       flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
        gpe_event_info->dispatch.handler = handler;
 
        /* Setup up dispatch flags to indicate handler (vs. method) */
 
-       gpe_event_info->flags &= ~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK); /* Clear bits */
+       gpe_event_info->flags &= ~(ACPI_GPE_XRUPT_TYPE_MASK | ACPI_GPE_DISPATCH_MASK);  /* Clear bits */
        gpe_event_info->flags |= (u8) (type | ACPI_GPE_DISPATCH_HANDLER);
 
-       acpi_os_release_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
-
+       acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
 
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_install_gpe_handler);
 
+EXPORT_SYMBOL(acpi_install_gpe_handler);
 
 /*******************************************************************************
  *
@@ -677,33 +647,30 @@ EXPORT_SYMBOL(acpi_install_gpe_handler);
  ******************************************************************************/
 
 acpi_status
-acpi_remove_gpe_handler (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       acpi_event_handler              address)
+acpi_remove_gpe_handler(acpi_handle gpe_device,
+                       u32 gpe_number, acpi_event_handler address)
 {
-       struct acpi_gpe_event_info      *gpe_event_info;
-       struct acpi_handler_info        *handler;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_remove_gpe_handler");
+       struct acpi_gpe_event_info *gpe_event_info;
+       struct acpi_handler_info *handler;
+       acpi_status status;
+       u32 flags;
 
+       ACPI_FUNCTION_TRACE("acpi_remove_gpe_handler");
 
        /* Parameter validation */
 
        if (!address) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Ensure that we have a valid GPE number */
 
-       gpe_event_info = acpi_ev_get_gpe_event_info (gpe_device, gpe_number);
+       gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number);
        if (!gpe_event_info) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -711,7 +678,8 @@ acpi_remove_gpe_handler (
 
        /* Make sure that a handler is indeed installed */
 
-       if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) != ACPI_GPE_DISPATCH_HANDLER) {
+       if ((gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) !=
+           ACPI_GPE_DISPATCH_HANDLER) {
                status = AE_NOT_EXIST;
                goto unlock_and_exit;
        }
@@ -725,45 +693,44 @@ acpi_remove_gpe_handler (
 
        /* Disable the GPE before removing the handler */
 
-       status = acpi_ev_disable_gpe (gpe_event_info);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ev_disable_gpe(gpe_event_info);
+       if (ACPI_FAILURE(status)) {
                goto unlock_and_exit;
        }
 
        /* Make sure all deferred tasks are completed */
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
+       (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
        acpi_os_wait_events_complete(NULL);
-       status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
-       }
+       status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
+       }
 
        /* Remove the handler */
 
-       acpi_os_acquire_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+       flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
        handler = gpe_event_info->dispatch.handler;
 
        /* Restore Method node (if any), set dispatch flags */
 
        gpe_event_info->dispatch.method_node = handler->method_node;
-       gpe_event_info->flags &= ~ACPI_GPE_DISPATCH_MASK; /* Clear bits */
+       gpe_event_info->flags &= ~ACPI_GPE_DISPATCH_MASK;       /* Clear bits */
        if (handler->method_node) {
                gpe_event_info->flags |= ACPI_GPE_DISPATCH_METHOD;
        }
-       acpi_os_release_lock (acpi_gbl_gpe_lock, ACPI_NOT_ISR);
+       acpi_os_release_lock(acpi_gbl_gpe_lock, flags);
 
        /* Now we can free the handler object */
 
-       ACPI_MEM_FREE (handler);
+       ACPI_MEM_FREE(handler);
 
-
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_remove_gpe_handler);
 
+EXPORT_SYMBOL(acpi_remove_gpe_handler);
 
 /*******************************************************************************
  *
@@ -779,35 +746,31 @@ EXPORT_SYMBOL(acpi_remove_gpe_handler);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_acquire_global_lock (
-       u16                             timeout,
-       u32                             *handle)
+acpi_status acpi_acquire_global_lock(u16 timeout, u32 * handle)
 {
-       acpi_status                     status;
-
+       acpi_status status;
 
        if (!handle) {
                return (AE_BAD_PARAMETER);
        }
 
-       status = acpi_ex_enter_interpreter ();
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ex_enter_interpreter();
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
-       status = acpi_ev_acquire_global_lock (timeout);
-       acpi_ex_exit_interpreter ();
+       status = acpi_ev_acquire_global_lock(timeout);
+       acpi_ex_exit_interpreter();
 
-       if (ACPI_SUCCESS (status)) {
+       if (ACPI_SUCCESS(status)) {
                acpi_gbl_global_lock_handle++;
                *handle = acpi_gbl_global_lock_handle;
        }
 
        return (status);
 }
-EXPORT_SYMBOL(acpi_acquire_global_lock);
 
+EXPORT_SYMBOL(acpi_acquire_global_lock);
 
 /*******************************************************************************
  *
@@ -821,19 +784,16 @@ EXPORT_SYMBOL(acpi_acquire_global_lock);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_release_global_lock (
-       u32                             handle)
+acpi_status acpi_release_global_lock(u32 handle)
 {
-       acpi_status                     status;
-
+       acpi_status status;
 
        if (handle != acpi_gbl_global_lock_handle) {
                return (AE_NOT_ACQUIRED);
        }
 
-       status = acpi_ev_release_global_lock ();
+       status = acpi_ev_release_global_lock();
        return (status);
 }
-EXPORT_SYMBOL(acpi_release_global_lock);
 
+EXPORT_SYMBOL(acpi_release_global_lock);
index f337dc2cc56984db838a5b490194aa52082b5a71..887ff9f28a0d254277ad31192d17bdcfde3edf17 100644 (file)
@@ -48,8 +48,7 @@
 #include <acpi/acnamesp.h>
 
 #define _COMPONENT          ACPI_EVENTS
-        ACPI_MODULE_NAME    ("evxfevnt")
-
+ACPI_MODULE_NAME("evxfevnt")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Transfers the system into ACPI mode.
  *
  ******************************************************************************/
-
-acpi_status
-acpi_enable (
-       void)
+acpi_status acpi_enable(void)
 {
-       acpi_status                     status = AE_OK;
-
+       acpi_status status = AE_OK;
 
-       ACPI_FUNCTION_TRACE ("acpi_enable");
+       ACPI_FUNCTION_TRACE("acpi_enable");
 
-
-       /* Make sure we have the FADT*/
+       /* Make sure we have the FADT */
 
        if (!acpi_gbl_FADT) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "No FADT information present!\n"));
-               return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "No FADT information present!\n"));
+               return_ACPI_STATUS(AE_NO_ACPI_TABLES);
        }
 
        if (acpi_hw_get_mode() == ACPI_SYS_MODE_ACPI) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "System is already in ACPI mode\n"));
-       }
-       else {
+               ACPI_DEBUG_PRINT((ACPI_DB_INIT,
+                                 "System is already in ACPI mode\n"));
+       else {
                /* Transition to ACPI mode */
 
-               status = acpi_hw_set_mode (ACPI_SYS_MODE_ACPI);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR (("Could not transition to ACPI mode.\n"));
-                       return_ACPI_STATUS (status);
+               status = acpi_hw_set_mode(ACPI_SYS_MODE_ACPI);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("Could not transition to ACPI mode.\n"));
+                       return_ACPI_STATUS(status);
                }
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
-                       "Transition to ACPI mode successful\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INIT,
+                                 "Transition to ACPI mode successful\n"));
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_disable
@@ -112,43 +106,38 @@ acpi_enable (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_disable (
-       void)
+acpi_status acpi_disable(void)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_disable");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("acpi_disable");
 
        if (!acpi_gbl_FADT) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "No FADT information present!\n"));
-               return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "No FADT information present!\n"));
+               return_ACPI_STATUS(AE_NO_ACPI_TABLES);
        }
 
        if (acpi_hw_get_mode() == ACPI_SYS_MODE_LEGACY) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
-                       "System is already in legacy (non-ACPI) mode\n"));
-       }
-       else {
+               ACPI_DEBUG_PRINT((ACPI_DB_INIT,
+                                 "System is already in legacy (non-ACPI) mode\n"));
+       } else {
                /* Transition to LEGACY mode */
 
-               status = acpi_hw_set_mode (ACPI_SYS_MODE_LEGACY);
+               status = acpi_hw_set_mode(ACPI_SYS_MODE_LEGACY);
 
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Could not exit ACPI mode to legacy mode"));
-                       return_ACPI_STATUS (status);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Could not exit ACPI mode to legacy mode"));
+                       return_ACPI_STATUS(status);
                }
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "ACPI mode disabled\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INIT, "ACPI mode disabled\n"));
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_enable_event
@@ -162,52 +151,50 @@ acpi_disable (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_enable_event (
-       u32                             event,
-       u32                             flags)
+acpi_status acpi_enable_event(u32 event, u32 flags)
 {
-       acpi_status                     status = AE_OK;
-       u32                             value;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_enable_event");
+       acpi_status status = AE_OK;
+       u32 value;
 
+       ACPI_FUNCTION_TRACE("acpi_enable_event");
 
        /* Decode the Fixed Event */
 
        if (event > ACPI_EVENT_MAX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
         * Enable the requested fixed event (by writing a one to the
         * enable register bit)
         */
-       status = acpi_set_register (acpi_gbl_fixed_event_info[event].enable_register_id,
-                        1, ACPI_MTX_LOCK);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_set_register(acpi_gbl_fixed_event_info[event].
+                             enable_register_id, 1, ACPI_MTX_LOCK);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Make sure that the hardware responded */
 
-       status = acpi_get_register (acpi_gbl_fixed_event_info[event].enable_register_id,
-                         &value, ACPI_MTX_LOCK);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_get_register(acpi_gbl_fixed_event_info[event].
+                             enable_register_id, &value, ACPI_MTX_LOCK);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        if (value != 1) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Could not enable %s event\n", acpi_ut_get_event_name (event)));
-               return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Could not enable %s event\n",
+                                 acpi_ut_get_event_name(event)));
+               return_ACPI_STATUS(AE_NO_HARDWARE_RESPONSE);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_enable_event);
 
+EXPORT_SYMBOL(acpi_enable_event);
 
 /*******************************************************************************
  *
@@ -223,40 +210,34 @@ EXPORT_SYMBOL(acpi_enable_event);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_set_gpe_type (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u8                              type)
+acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_gpe_event_info      *gpe_event_info;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_set_gpe_type");
+       acpi_status status = AE_OK;
+       struct acpi_gpe_event_info *gpe_event_info;
 
+       ACPI_FUNCTION_TRACE("acpi_set_gpe_type");
 
        /* Ensure that we have a valid GPE number */
 
-       gpe_event_info = acpi_ev_get_gpe_event_info (gpe_device, gpe_number);
+       gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number);
        if (!gpe_event_info) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
        }
 
        if ((gpe_event_info->flags & ACPI_GPE_TYPE_MASK) == type) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Set the new type (will disable GPE if currently enabled) */
 
-       status = acpi_ev_set_gpe_type (gpe_event_info, type);
+       status = acpi_ev_set_gpe_type(gpe_event_info, type);
 
-unlock_and_exit:
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_set_gpe_type);
 
+EXPORT_SYMBOL(acpi_set_gpe_type);
 
 /*******************************************************************************
  *
@@ -273,31 +254,25 @@ EXPORT_SYMBOL(acpi_set_gpe_type);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_enable_gpe (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags)
+acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_gpe_event_info      *gpe_event_info;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_enable_gpe");
+       acpi_status status = AE_OK;
+       struct acpi_gpe_event_info *gpe_event_info;
 
+       ACPI_FUNCTION_TRACE("acpi_enable_gpe");
 
        /* Use semaphore lock if not executing at interrupt level */
 
        if (flags & ACPI_NOT_ISR) {
-               status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Ensure that we have a valid GPE number */
 
-       gpe_event_info = acpi_ev_get_gpe_event_info (gpe_device, gpe_number);
+       gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number);
        if (!gpe_event_info) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -305,16 +280,16 @@ acpi_enable_gpe (
 
        /* Perform the enable */
 
-       status = acpi_ev_enable_gpe (gpe_event_info, TRUE);
+       status = acpi_ev_enable_gpe(gpe_event_info, TRUE);
 
-unlock_and_exit:
+      unlock_and_exit:
        if (flags & ACPI_NOT_ISR) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
+               (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_enable_gpe);
 
+EXPORT_SYMBOL(acpi_enable_gpe);
 
 /*******************************************************************************
  *
@@ -331,46 +306,39 @@ EXPORT_SYMBOL(acpi_enable_gpe);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_disable_gpe (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags)
+acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_gpe_event_info      *gpe_event_info;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_disable_gpe");
+       acpi_status status = AE_OK;
+       struct acpi_gpe_event_info *gpe_event_info;
 
+       ACPI_FUNCTION_TRACE("acpi_disable_gpe");
 
        /* Use semaphore lock if not executing at interrupt level */
 
        if (flags & ACPI_NOT_ISR) {
-               status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Ensure that we have a valid GPE number */
 
-       gpe_event_info = acpi_ev_get_gpe_event_info (gpe_device, gpe_number);
+       gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number);
        if (!gpe_event_info) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
        }
 
-       status = acpi_ev_disable_gpe (gpe_event_info);
+       status = acpi_ev_disable_gpe(gpe_event_info);
 
-unlock_and_exit:
+      unlock_and_exit:
        if (flags & ACPI_NOT_ISR) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
+               (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_disable_event
@@ -384,50 +352,48 @@ unlock_and_exit:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_disable_event (
-       u32                             event,
-       u32                             flags)
+acpi_status acpi_disable_event(u32 event, u32 flags)
 {
-       acpi_status                     status = AE_OK;
-       u32                             value;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_disable_event");
+       acpi_status status = AE_OK;
+       u32 value;
 
+       ACPI_FUNCTION_TRACE("acpi_disable_event");
 
        /* Decode the Fixed Event */
 
        if (event > ACPI_EVENT_MAX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
         * Disable the requested fixed event (by writing a zero to the
         * enable register bit)
         */
-       status = acpi_set_register (acpi_gbl_fixed_event_info[event].enable_register_id,
-                        0, ACPI_MTX_LOCK);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_set_register(acpi_gbl_fixed_event_info[event].
+                             enable_register_id, 0, ACPI_MTX_LOCK);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_get_register (acpi_gbl_fixed_event_info[event].enable_register_id,
-                        &value, ACPI_MTX_LOCK);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_get_register(acpi_gbl_fixed_event_info[event].
+                             enable_register_id, &value, ACPI_MTX_LOCK);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        if (value != 0) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Could not disable %s events\n", acpi_ut_get_event_name (event)));
-               return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Could not disable %s events\n",
+                                 acpi_ut_get_event_name(event)));
+               return_ACPI_STATUS(AE_NO_HARDWARE_RESPONSE);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_disable_event);
 
+EXPORT_SYMBOL(acpi_disable_event);
 
 /*******************************************************************************
  *
@@ -441,33 +407,30 @@ EXPORT_SYMBOL(acpi_disable_event);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_clear_event (
-       u32                             event)
+acpi_status acpi_clear_event(u32 event)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_clear_event");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("acpi_clear_event");
 
        /* Decode the Fixed Event */
 
        if (event > ACPI_EVENT_MAX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
         * Clear the requested fixed event (By writing a one to the
         * status register bit)
         */
-       status = acpi_set_register (acpi_gbl_fixed_event_info[event].status_register_id,
-                       1, ACPI_MTX_LOCK);
+       status =
+           acpi_set_register(acpi_gbl_fixed_event_info[event].
+                             status_register_id, 1, ACPI_MTX_LOCK);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_clear_event);
 
+EXPORT_SYMBOL(acpi_clear_event);
 
 /*******************************************************************************
  *
@@ -483,46 +446,39 @@ EXPORT_SYMBOL(acpi_clear_event);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_clear_gpe (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags)
+acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_gpe_event_info      *gpe_event_info;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_clear_gpe");
+       acpi_status status = AE_OK;
+       struct acpi_gpe_event_info *gpe_event_info;
 
+       ACPI_FUNCTION_TRACE("acpi_clear_gpe");
 
        /* Use semaphore lock if not executing at interrupt level */
 
        if (flags & ACPI_NOT_ISR) {
-               status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Ensure that we have a valid GPE number */
 
-       gpe_event_info = acpi_ev_get_gpe_event_info (gpe_device, gpe_number);
+       gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number);
        if (!gpe_event_info) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
        }
 
-       status = acpi_hw_clear_gpe (gpe_event_info);
+       status = acpi_hw_clear_gpe(gpe_event_info);
 
-unlock_and_exit:
+      unlock_and_exit:
        if (flags & ACPI_NOT_ISR) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
+               (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 #ifdef ACPI_FUTURE_USAGE
 /*******************************************************************************
  *
@@ -538,36 +494,31 @@ unlock_and_exit:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_get_event_status (
-       u32                             event,
-       acpi_event_status               *event_status)
+acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_event_status");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("acpi_get_event_status");
 
        if (!event_status) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Decode the Fixed Event */
 
        if (event > ACPI_EVENT_MAX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Get the status of the requested fixed event */
 
-       status = acpi_get_register (acpi_gbl_fixed_event_info[event].status_register_id,
-                         event_status, ACPI_MTX_LOCK);
+       status =
+           acpi_get_register(acpi_gbl_fixed_event_info[event].
+                             status_register_id, event_status, ACPI_MTX_LOCK);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_gpe_status
@@ -585,31 +536,26 @@ acpi_get_event_status (
  ******************************************************************************/
 
 acpi_status
-acpi_get_gpe_status (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags,
-       acpi_event_status               *event_status)
+acpi_get_gpe_status(acpi_handle gpe_device,
+                   u32 gpe_number, u32 flags, acpi_event_status * event_status)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_gpe_event_info      *gpe_event_info;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_gpe_status");
+       acpi_status status = AE_OK;
+       struct acpi_gpe_event_info *gpe_event_info;
 
+       ACPI_FUNCTION_TRACE("acpi_get_gpe_status");
 
        /* Use semaphore lock if not executing at interrupt level */
 
        if (flags & ACPI_NOT_ISR) {
-               status = acpi_ut_acquire_mutex (ACPI_MTX_EVENTS);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Ensure that we have a valid GPE number */
 
-       gpe_event_info = acpi_ev_get_gpe_event_info (gpe_device, gpe_number);
+       gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number);
        if (!gpe_event_info) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -617,16 +563,15 @@ acpi_get_gpe_status (
 
        /* Obtain status on the requested GPE number */
 
-       status = acpi_hw_get_gpe_status (gpe_event_info, event_status);
+       status = acpi_hw_get_gpe_status(gpe_event_info, event_status);
 
-unlock_and_exit:
+      unlock_and_exit:
        if (flags & ACPI_NOT_ISR) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_EVENTS);
+               (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS);
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-#endif  /*  ACPI_FUTURE_USAGE  */
-
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*******************************************************************************
  *
@@ -635,7 +580,7 @@ unlock_and_exit:
  * PARAMETERS:  gpe_device          - Handle to the parent GPE Block Device
  *              gpe_block_address   - Address and space_iD
  *              register_count      - Number of GPE register pairs in the block
- *              interrupt_level     - H/W interrupt for the block
+ *              interrupt_number    - H/W interrupt for the block
  *
  * RETURN:      Status
  *
@@ -644,33 +589,27 @@ unlock_and_exit:
  ******************************************************************************/
 
 acpi_status
-acpi_install_gpe_block (
-       acpi_handle                     gpe_device,
-       struct acpi_generic_address     *gpe_block_address,
-       u32                             register_count,
-       u32                             interrupt_level)
+acpi_install_gpe_block(acpi_handle gpe_device,
+                      struct acpi_generic_address *gpe_block_address,
+                      u32 register_count, u32 interrupt_number)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-       struct acpi_namespace_node      *node;
-       struct acpi_gpe_block_info      *gpe_block;
-
+       acpi_status status;
+       union acpi_operand_object *obj_desc;
+       struct acpi_namespace_node *node;
+       struct acpi_gpe_block_info *gpe_block;
 
-       ACPI_FUNCTION_TRACE ("acpi_install_gpe_block");
+       ACPI_FUNCTION_TRACE("acpi_install_gpe_block");
 
-
-       if ((!gpe_device)      ||
-               (!gpe_block_address) ||
-               (!register_count)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((!gpe_device) || (!gpe_block_address) || (!register_count)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
-       node = acpi_ns_map_handle_to_node (gpe_device);
+       node = acpi_ns_map_handle_to_node(gpe_device);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -680,31 +619,33 @@ acpi_install_gpe_block (
         * For user-installed GPE Block Devices, the gpe_block_base_number
         * is always zero
         */
-       status = acpi_ev_create_gpe_block (node, gpe_block_address, register_count,
-                         0, interrupt_level, &gpe_block);
-       if (ACPI_FAILURE (status)) {
+       status =
+           acpi_ev_create_gpe_block(node, gpe_block_address, register_count, 0,
+                                    interrupt_number, &gpe_block);
+       if (ACPI_FAILURE(status)) {
                goto unlock_and_exit;
        }
 
        /* Get the device_object attached to the node */
 
-       obj_desc = acpi_ns_get_attached_object (node);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (!obj_desc) {
                /* No object, create a new one */
 
-               obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_DEVICE);
+               obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_DEVICE);
                if (!obj_desc) {
                        status = AE_NO_MEMORY;
                        goto unlock_and_exit;
                }
 
-               status = acpi_ns_attach_object (node, obj_desc, ACPI_TYPE_DEVICE);
+               status =
+                   acpi_ns_attach_object(node, obj_desc, ACPI_TYPE_DEVICE);
 
                /* Remove local reference to the object */
 
-               acpi_ut_remove_reference (obj_desc);
+               acpi_ut_remove_reference(obj_desc);
 
-               if (ACPI_FAILURE (status)) {
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
        }
@@ -713,13 +654,12 @@ acpi_install_gpe_block (
 
        obj_desc->device.gpe_block = gpe_block;
 
-
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_install_gpe_block);
 
+EXPORT_SYMBOL(acpi_install_gpe_block);
 
 /*******************************************************************************
  *
@@ -733,28 +673,24 @@ EXPORT_SYMBOL(acpi_install_gpe_block);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_remove_gpe_block (
-       acpi_handle                     gpe_device)
+acpi_status acpi_remove_gpe_block(acpi_handle gpe_device)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_remove_gpe_block");
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
+       struct acpi_namespace_node *node;
 
+       ACPI_FUNCTION_TRACE("acpi_remove_gpe_block");
 
        if (!gpe_device) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
-       node = acpi_ns_map_handle_to_node (gpe_device);
+       node = acpi_ns_map_handle_to_node(gpe_device);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -762,22 +698,21 @@ acpi_remove_gpe_block (
 
        /* Get the device_object attached to the node */
 
-       obj_desc = acpi_ns_get_attached_object (node);
-       if (!obj_desc ||
-               !obj_desc->device.gpe_block) {
-               return_ACPI_STATUS (AE_NULL_OBJECT);
+       obj_desc = acpi_ns_get_attached_object(node);
+       if (!obj_desc || !obj_desc->device.gpe_block) {
+               return_ACPI_STATUS(AE_NULL_OBJECT);
        }
 
        /* Delete the GPE block (but not the device_object) */
 
-       status = acpi_ev_delete_gpe_block (obj_desc->device.gpe_block);
-       if (ACPI_SUCCESS (status)) {
+       status = acpi_ev_delete_gpe_block(obj_desc->device.gpe_block);
+       if (ACPI_SUCCESS(status)) {
                obj_desc->device.gpe_block = NULL;
        }
 
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(status);
 }
 
 EXPORT_SYMBOL(acpi_remove_gpe_block);
index d058587b34276e91742ebd65d8d0d089eefac6f5..6f28ea2db5ba11eb4b8751127a5d1adea27c4762 100644 (file)
@@ -49,8 +49,7 @@
 #include <acpi/acevents.h>
 
 #define _COMPONENT          ACPI_EVENTS
-        ACPI_MODULE_NAME    ("evxfregn")
-
+ACPI_MODULE_NAME("evxfregn")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Install a handler for all op_regions of a given space_id.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_install_address_space_handler (
-       acpi_handle                     device,
-       acpi_adr_space_type             space_id,
-       acpi_adr_space_handler          handler,
-       acpi_adr_space_setup            setup,
-       void                            *context)
+acpi_install_address_space_handler(acpi_handle device,
+                                  acpi_adr_space_type space_id,
+                                  acpi_adr_space_handler handler,
+                                  acpi_adr_space_setup setup, void *context)
 {
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_install_address_space_handler");
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_install_address_space_handler");
 
        /* Parameter validation */
 
        if (!device) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Convert and validate the device handle */
 
-       node = acpi_ns_map_handle_to_node (device);
+       node = acpi_ns_map_handle_to_node(device);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -104,21 +98,23 @@ acpi_install_address_space_handler (
 
        /* Install the handler for all Regions for this Space ID */
 
-       status = acpi_ev_install_space_handler (node, space_id, handler, setup, context);
-       if (ACPI_FAILURE (status)) {
+       status =
+           acpi_ev_install_space_handler(node, space_id, handler, setup,
+                                         context);
+       if (ACPI_FAILURE(status)) {
                goto unlock_and_exit;
        }
 
        /* Run all _REG methods for this address space */
 
-       status = acpi_ev_execute_reg_methods (node, space_id);
+       status = acpi_ev_execute_reg_methods(node, space_id);
 
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_install_address_space_handler);
 
+EXPORT_SYMBOL(acpi_install_address_space_handler);
 
 /*******************************************************************************
  *
@@ -135,36 +131,33 @@ EXPORT_SYMBOL(acpi_install_address_space_handler);
  ******************************************************************************/
 
 acpi_status
-acpi_remove_address_space_handler (
-       acpi_handle                     device,
-       acpi_adr_space_type             space_id,
-       acpi_adr_space_handler          handler)
+acpi_remove_address_space_handler(acpi_handle device,
+                                 acpi_adr_space_type space_id,
+                                 acpi_adr_space_handler handler)
 {
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *handler_obj;
-       union acpi_operand_object       *region_obj;
-       union acpi_operand_object       **last_obj_ptr;
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_remove_address_space_handler");
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *handler_obj;
+       union acpi_operand_object *region_obj;
+       union acpi_operand_object **last_obj_ptr;
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_remove_address_space_handler");
 
        /* Parameter validation */
 
        if (!device) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Convert and validate the device handle */
 
-       node = acpi_ns_map_handle_to_node (device);
+       node = acpi_ns_map_handle_to_node(device);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -172,7 +165,7 @@ acpi_remove_address_space_handler (
 
        /* Make sure the internal object exists */
 
-       obj_desc = acpi_ns_get_attached_object (node);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (!obj_desc) {
                status = AE_NOT_EXIST;
                goto unlock_and_exit;
@@ -188,10 +181,11 @@ acpi_remove_address_space_handler (
                if (handler_obj->address_space.space_id == space_id) {
                        /* Matched space_id, first dereference this in the Regions */
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-                               "Removing address handler %p(%p) for region %s on Device %p(%p)\n",
-                               handler_obj, handler, acpi_ut_get_region_name (space_id),
-                               node, obj_desc));
+                       ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                                         "Removing address handler %p(%p) for region %s on Device %p(%p)\n",
+                                         handler_obj, handler,
+                                         acpi_ut_get_region_name(space_id),
+                                         node, obj_desc));
 
                        region_obj = handler_obj->address_space.region_list;
 
@@ -205,13 +199,14 @@ acpi_remove_address_space_handler (
                                 * The region is just inaccessible as indicated to
                                 * the _REG method
                                 */
-                               acpi_ev_detach_region (region_obj, TRUE);
+                               acpi_ev_detach_region(region_obj, TRUE);
 
                                /*
                                 * Walk the list: Just grab the head because the
                                 * detach_region removed the previous head.
                                 */
-                               region_obj = handler_obj->address_space.region_list;
+                               region_obj =
+                                   handler_obj->address_space.region_list;
 
                        }
 
@@ -221,7 +216,7 @@ acpi_remove_address_space_handler (
 
                        /* Now we can delete the handler object */
 
-                       acpi_ut_remove_reference (handler_obj);
+                       acpi_ut_remove_reference(handler_obj);
                        goto unlock_and_exit;
                }
 
@@ -233,15 +228,16 @@ acpi_remove_address_space_handler (
 
        /* The handler does not exist */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION,
-               "Unable to remove address handler %p for %s(%X), dev_node %p, obj %p\n",
-               handler, acpi_ut_get_region_name (space_id), space_id, node, obj_desc));
+       ACPI_DEBUG_PRINT((ACPI_DB_OPREGION,
+                         "Unable to remove address handler %p for %s(%X), dev_node %p, obj %p\n",
+                         handler, acpi_ut_get_region_name(space_id), space_id,
+                         node, obj_desc));
 
        status = AE_NOT_EXIST;
 
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_remove_address_space_handler);
 
+EXPORT_SYMBOL(acpi_remove_address_space_handler);
index 734b2f24af4809aac704ae293c653591b64209ba..1ce365d651d8a8bbb2ba1f47f77a6cdef1fe5a40 100644 (file)
@@ -41,7 +41,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/amlcode.h>
 #include <acpi/actables.h>
 #include <acpi/acdispat.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exconfig")
+ACPI_MODULE_NAME("exconfig")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ex_add_table (
-       struct acpi_table_header        *table,
-       struct acpi_namespace_node      *parent_node,
-       union acpi_operand_object       **ddb_handle);
-
+acpi_ex_add_table(struct acpi_table_header *table,
+                 struct acpi_namespace_node *parent_node,
+                 union acpi_operand_object **ddb_handle);
 
 /*******************************************************************************
  *
@@ -79,64 +74,67 @@ acpi_ex_add_table (
  ******************************************************************************/
 
 static acpi_status
-acpi_ex_add_table (
-       struct acpi_table_header        *table,
-       struct acpi_namespace_node      *parent_node,
-       union acpi_operand_object       **ddb_handle)
+acpi_ex_add_table(struct acpi_table_header *table,
+                 struct acpi_namespace_node *parent_node,
+                 union acpi_operand_object **ddb_handle)
 {
-       acpi_status                     status;
-       struct acpi_table_desc          table_info;
-       union acpi_operand_object       *obj_desc;
-
-
-       ACPI_FUNCTION_TRACE ("ex_add_table");
+       acpi_status status;
+       struct acpi_table_desc table_info;
+       union acpi_operand_object *obj_desc;
 
+       ACPI_FUNCTION_TRACE("ex_add_table");
 
        /* Create an object to be the table handle */
 
-       obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_LOCAL_REFERENCE);
+       obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_LOCAL_REFERENCE);
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
+       /* Init the table handle */
+
+       obj_desc->reference.opcode = AML_LOAD_OP;
+       *ddb_handle = obj_desc;
+
        /* Install the new table into the local data structures */
 
-       ACPI_MEMSET (&table_info, 0, sizeof (struct acpi_table_desc));
+       ACPI_MEMSET(&table_info, 0, sizeof(struct acpi_table_desc));
 
-       table_info.type      = ACPI_TABLE_SSDT;
-       table_info.pointer   = table;
-       table_info.length    = (acpi_size) table->length;
+       table_info.type = ACPI_TABLE_SSDT;
+       table_info.pointer = table;
+       table_info.length = (acpi_size) table->length;
        table_info.allocation = ACPI_MEM_ALLOCATED;
 
-       status = acpi_tb_install_table (&table_info);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_tb_install_table(&table_info);
+       obj_desc->reference.object = table_info.installed_desc;
+
+       if (ACPI_FAILURE(status)) {
+               if (status == AE_ALREADY_EXISTS) {
+                       /* Table already exists, just return the handle */
+
+                       return_ACPI_STATUS(AE_OK);
+               }
                goto cleanup;
        }
 
        /* Add the table to the namespace */
 
-       status = acpi_ns_load_table (table_info.installed_desc, parent_node);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ns_load_table(table_info.installed_desc, parent_node);
+       if (ACPI_FAILURE(status)) {
                /* Uninstall table on error */
 
-               (void) acpi_tb_uninstall_table (table_info.installed_desc);
+               (void)acpi_tb_uninstall_table(table_info.installed_desc);
                goto cleanup;
        }
 
-       /* Init the table handle */
+       return_ACPI_STATUS(AE_OK);
 
-       obj_desc->reference.opcode = AML_LOAD_OP;
-       obj_desc->reference.object = table_info.installed_desc;
-       *ddb_handle = obj_desc;
-       return_ACPI_STATUS (AE_OK);
-
-
-cleanup:
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+      cleanup:
+       acpi_ut_remove_reference(obj_desc);
+       *ddb_handle = NULL;
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_load_table_op
@@ -151,56 +149,53 @@ cleanup:
  ******************************************************************************/
 
 acpi_status
-acpi_ex_load_table_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       **return_desc)
+acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
+                     union acpi_operand_object **return_desc)
 {
-       acpi_status                     status;
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       struct acpi_table_header        *table;
-       struct acpi_namespace_node      *parent_node;
-       struct acpi_namespace_node      *start_node;
-       struct acpi_namespace_node      *parameter_node = NULL;
-       union acpi_operand_object       *ddb_handle;
-
-
-       ACPI_FUNCTION_TRACE ("ex_load_table_op");
+       acpi_status status;
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       struct acpi_table_header *table;
+       struct acpi_namespace_node *parent_node;
+       struct acpi_namespace_node *start_node;
+       struct acpi_namespace_node *parameter_node = NULL;
+       union acpi_operand_object *ddb_handle;
 
+       ACPI_FUNCTION_TRACE("ex_load_table_op");
 
 #if 0
        /*
         * Make sure that the signature does not match one of the tables that
         * is already loaded.
         */
-       status = acpi_tb_match_signature (operand[0]->string.pointer, NULL);
+       status = acpi_tb_match_signature(operand[0]->string.pointer, NULL);
        if (status == AE_OK) {
                /* Signature matched -- don't allow override */
 
-               return_ACPI_STATUS (AE_ALREADY_EXISTS);
+               return_ACPI_STATUS(AE_ALREADY_EXISTS);
        }
 #endif
 
        /* Find the ACPI table */
 
-       status = acpi_tb_find_table (operand[0]->string.pointer,
-                          operand[1]->string.pointer,
-                          operand[2]->string.pointer, &table);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_tb_find_table(operand[0]->string.pointer,
+                                   operand[1]->string.pointer,
+                                   operand[2]->string.pointer, &table);
+       if (ACPI_FAILURE(status)) {
                if (status != AE_NOT_FOUND) {
-                       return_ACPI_STATUS (status);
+                       return_ACPI_STATUS(status);
                }
 
                /* Table not found, return an Integer=0 and AE_OK */
 
-               ddb_handle = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               ddb_handle = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!ddb_handle) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                ddb_handle->integer.value = 0;
                *return_desc = ddb_handle;
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Default nodes */
@@ -215,10 +210,12 @@ acpi_ex_load_table_op (
                 * Find the node referenced by the root_path_string. This is the
                 * location within the namespace where the table will be loaded.
                 */
-               status = acpi_ns_get_node_by_path (operand[3]->string.pointer, start_node,
-                                  ACPI_NS_SEARCH_PARENT, &parent_node);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ns_get_node_by_path(operand[3]->string.pointer,
+                                            start_node, ACPI_NS_SEARCH_PARENT,
+                                            &parent_node);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -226,7 +223,7 @@ acpi_ex_load_table_op (
 
        if (operand[4]->string.length > 0) {
                if ((operand[4]->string.pointer[0] != '\\') &&
-                       (operand[4]->string.pointer[0] != '^')) {
+                   (operand[4]->string.pointer[0] != '^')) {
                        /*
                         * Path is not absolute, so it will be relative to the node
                         * referenced by the root_path_string (or the NS root if omitted)
@@ -236,18 +233,20 @@ acpi_ex_load_table_op (
 
                /* Find the node referenced by the parameter_path_string */
 
-               status = acpi_ns_get_node_by_path (operand[4]->string.pointer, start_node,
-                                ACPI_NS_SEARCH_PARENT, &parameter_node);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ns_get_node_by_path(operand[4]->string.pointer,
+                                            start_node, ACPI_NS_SEARCH_PARENT,
+                                            &parameter_node);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Load the table into the namespace */
 
-       status = acpi_ex_add_table (table, parent_node, &ddb_handle);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ex_add_table(table, parent_node, &ddb_handle);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Parameter Data (optional) */
@@ -255,20 +254,20 @@ acpi_ex_load_table_op (
        if (parameter_node) {
                /* Store the parameter data into the optional parameter object */
 
-               status = acpi_ex_store (operand[5],
-                                ACPI_CAST_PTR (union acpi_operand_object, parameter_node),
-                                walk_state);
-               if (ACPI_FAILURE (status)) {
-                       (void) acpi_ex_unload_table (ddb_handle);
-                       return_ACPI_STATUS (status);
+               status = acpi_ex_store(operand[5],
+                                      ACPI_CAST_PTR(union acpi_operand_object,
+                                                    parameter_node),
+                                      walk_state);
+               if (ACPI_FAILURE(status)) {
+                       (void)acpi_ex_unload_table(ddb_handle);
+                       return_ACPI_STATUS(status);
                }
        }
 
        *return_desc = ddb_handle;
-       return_ACPI_STATUS  (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_load_op
@@ -285,38 +284,37 @@ acpi_ex_load_table_op (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_load_op (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       *target,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_load_op(union acpi_operand_object *obj_desc,
+               union acpi_operand_object *target,
+               struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *ddb_handle;
-       union acpi_operand_object       *buffer_desc = NULL;
-       struct acpi_table_header        *table_ptr = NULL;
-       acpi_physical_address           address;
-       struct acpi_table_header        table_header;
-       u32                             i;
-
-       ACPI_FUNCTION_TRACE ("ex_load_op");
+       acpi_status status;
+       union acpi_operand_object *ddb_handle;
+       union acpi_operand_object *buffer_desc = NULL;
+       struct acpi_table_header *table_ptr = NULL;
+       acpi_physical_address address;
+       struct acpi_table_header table_header;
+       u32 i;
 
+       ACPI_FUNCTION_TRACE("ex_load_op");
 
        /* Object can be either an op_region or a Field */
 
-       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
        case ACPI_TYPE_REGION:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Load from Region %p %s\n",
-                       obj_desc, acpi_ut_get_object_type_name (obj_desc)));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Load from Region %p %s\n",
+                                 obj_desc,
+                                 acpi_ut_get_object_type_name(obj_desc)));
 
                /*
                 * If the Region Address and Length have not been previously evaluated,
                 * evaluate them now and save the results.
                 */
                if (!(obj_desc->common.flags & AOPOBJ_DATA_VALID)) {
-                       status = acpi_ds_get_region_arguments (obj_desc);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status = acpi_ds_get_region_arguments(obj_desc);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
                }
 
@@ -328,116 +326,127 @@ acpi_ex_load_op (
 
                table_header.length = 0;
                for (i = 0; i < 8; i++) {
-                       status = acpi_ev_address_space_dispatch (obj_desc, ACPI_READ,
-                                          (acpi_physical_address) (i + address), 8,
-                                          ((u8 *) &table_header) + i);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status =
+                           acpi_ev_address_space_dispatch(obj_desc, ACPI_READ,
+                                                          (acpi_physical_address)
+                                                          (i + address), 8,
+                                                          ((u8 *) &
+                                                           table_header) + i);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
                }
 
                /* Sanity check the table length */
 
-               if (table_header.length < sizeof (struct acpi_table_header)) {
-                       return_ACPI_STATUS (AE_BAD_HEADER);
+               if (table_header.length < sizeof(struct acpi_table_header)) {
+                       return_ACPI_STATUS(AE_BAD_HEADER);
                }
 
                /* Allocate a buffer for the entire table */
 
-               table_ptr = ACPI_MEM_ALLOCATE (table_header.length);
+               table_ptr = ACPI_MEM_ALLOCATE(table_header.length);
                if (!table_ptr) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                /* Get the entire table from the op region */
 
                for (i = 0; i < table_header.length; i++) {
-                       status = acpi_ev_address_space_dispatch (obj_desc, ACPI_READ,
-                                          (acpi_physical_address) (i + address), 8,
-                                          ((u8 *) table_ptr + i));
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_ev_address_space_dispatch(obj_desc, ACPI_READ,
+                                                          (acpi_physical_address)
+                                                          (i + address), 8,
+                                                          ((u8 *) table_ptr +
+                                                           i));
+                       if (ACPI_FAILURE(status)) {
                                goto cleanup;
                        }
                }
                break;
 
-
        case ACPI_TYPE_LOCAL_REGION_FIELD:
        case ACPI_TYPE_LOCAL_BANK_FIELD:
        case ACPI_TYPE_LOCAL_INDEX_FIELD:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Load from Field %p %s\n",
-                       obj_desc, acpi_ut_get_object_type_name (obj_desc)));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Load from Field %p %s\n",
+                                 obj_desc,
+                                 acpi_ut_get_object_type_name(obj_desc)));
 
                /*
                 * The length of the field must be at least as large as the table.
                 * Read the entire field and thus the entire table.  Buffer is
                 * allocated during the read.
                 */
-               status = acpi_ex_read_data_from_field (walk_state, obj_desc, &buffer_desc);
-               if (ACPI_FAILURE (status)) {
-                       goto cleanup;
+               status =
+                   acpi_ex_read_data_from_field(walk_state, obj_desc,
+                                                &buffer_desc);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
-               table_ptr = ACPI_CAST_PTR (struct acpi_table_header,
-                                 buffer_desc->buffer.pointer);
+               table_ptr = ACPI_CAST_PTR(struct acpi_table_header,
+                                         buffer_desc->buffer.pointer);
 
-                /* Sanity check the table length */
+               /* All done with the buffer_desc, delete it */
 
-               if (table_ptr->length < sizeof (struct acpi_table_header)) {
-                       return_ACPI_STATUS (AE_BAD_HEADER);
+               buffer_desc->buffer.pointer = NULL;
+               acpi_ut_remove_reference(buffer_desc);
+
+               /* Sanity check the table length */
+
+               if (table_ptr->length < sizeof(struct acpi_table_header)) {
+                       status = AE_BAD_HEADER;
+                       goto cleanup;
                }
                break;
 
-
        default:
-               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
        }
 
        /* The table must be either an SSDT or a PSDT */
 
-       if ((!ACPI_STRNCMP (table_ptr->signature,
-                         acpi_gbl_table_data[ACPI_TABLE_PSDT].signature,
-                         acpi_gbl_table_data[ACPI_TABLE_PSDT].sig_length)) &&
-               (!ACPI_STRNCMP (table_ptr->signature,
-                                acpi_gbl_table_data[ACPI_TABLE_SSDT].signature,
-                                acpi_gbl_table_data[ACPI_TABLE_SSDT].sig_length))) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Table has invalid signature [%4.4s], must be SSDT or PSDT\n",
-                       table_ptr->signature));
+       if ((!ACPI_STRNCMP(table_ptr->signature,
+                          acpi_gbl_table_data[ACPI_TABLE_PSDT].signature,
+                          acpi_gbl_table_data[ACPI_TABLE_PSDT].sig_length)) &&
+           (!ACPI_STRNCMP(table_ptr->signature,
+                          acpi_gbl_table_data[ACPI_TABLE_SSDT].signature,
+                          acpi_gbl_table_data[ACPI_TABLE_SSDT].sig_length))) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Table has invalid signature [%4.4s], must be SSDT or PSDT\n",
+                                 table_ptr->signature));
                status = AE_BAD_SIGNATURE;
                goto cleanup;
        }
 
        /* Install the new table into the local data structures */
 
-       status = acpi_ex_add_table (table_ptr, acpi_gbl_root_node, &ddb_handle);
-       if (ACPI_FAILURE (status)) {
-               goto cleanup;
-       }
-
-       /* Store the ddb_handle into the Target operand */
+       status = acpi_ex_add_table(table_ptr, acpi_gbl_root_node, &ddb_handle);
+       if (ACPI_FAILURE(status)) {
+               /* On error, table_ptr was deallocated above */
 
-       status = acpi_ex_store (ddb_handle, target, walk_state);
-       if (ACPI_FAILURE (status)) {
-               (void) acpi_ex_unload_table (ddb_handle);
+               return_ACPI_STATUS(status);
        }
 
-       return_ACPI_STATUS (status);
+       /* Store the ddb_handle into the Target operand */
 
+       status = acpi_ex_store(ddb_handle, target, walk_state);
+       if (ACPI_FAILURE(status)) {
+               (void)acpi_ex_unload_table(ddb_handle);
 
-cleanup:
+               /* table_ptr was deallocated above */
 
-       if (buffer_desc) {
-               acpi_ut_remove_reference (buffer_desc);
+               return_ACPI_STATUS(status);
        }
-       else {
-               ACPI_MEM_FREE (table_ptr);
+
+      cleanup:
+       if (ACPI_FAILURE(status)) {
+               ACPI_MEM_FREE(table_ptr);
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_unload_table
@@ -450,17 +459,13 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_unload_table (
-       union acpi_operand_object       *ddb_handle)
+acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *table_desc = ddb_handle;
-       struct acpi_table_desc          *table_info;
-
-
-       ACPI_FUNCTION_TRACE ("ex_unload_table");
+       acpi_status status = AE_OK;
+       union acpi_operand_object *table_desc = ddb_handle;
+       struct acpi_table_desc *table_info;
 
+       ACPI_FUNCTION_TRACE("ex_unload_table");
 
        /*
         * Validate the handle
@@ -469,28 +474,28 @@ acpi_ex_unload_table (
         * validated here.
         */
        if ((!ddb_handle) ||
-               (ACPI_GET_DESCRIPTOR_TYPE (ddb_handle) != ACPI_DESC_TYPE_OPERAND) ||
-               (ACPI_GET_OBJECT_TYPE (ddb_handle) != ACPI_TYPE_LOCAL_REFERENCE)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+           (ACPI_GET_DESCRIPTOR_TYPE(ddb_handle) != ACPI_DESC_TYPE_OPERAND) ||
+           (ACPI_GET_OBJECT_TYPE(ddb_handle) != ACPI_TYPE_LOCAL_REFERENCE)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Get the actual table descriptor from the ddb_handle */
 
-       table_info = (struct acpi_table_desc *) table_desc->reference.object;
+       table_info = (struct acpi_table_desc *)table_desc->reference.object;
 
        /*
         * Delete the entire namespace under this table Node
         * (Offset contains the table_id)
         */
-       acpi_ns_delete_namespace_by_owner (table_info->table_id);
+       acpi_ns_delete_namespace_by_owner(table_info->owner_id);
+       acpi_ut_release_owner_id(&table_info->owner_id);
 
        /* Delete the table itself */
 
-       (void) acpi_tb_uninstall_table (table_info->installed_desc);
+       (void)acpi_tb_uninstall_table(table_info->installed_desc);
 
        /* Delete the table descriptor (ddb_handle) */
 
-       acpi_ut_remove_reference (table_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(table_desc);
+       return_ACPI_STATUS(status);
 }
-
index 97856c48bd744f200e170536a7d046f1f0a3f112..04e5194989a6ffe51a718f370dedc85ba9e6aadd 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/amlcode.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exconvrt")
+ACPI_MODULE_NAME("exconvrt")
 
 /* Local prototypes */
-
 static u32
-acpi_ex_convert_to_ascii (
-       acpi_integer                    integer,
-       u16                             base,
-       u8                              *string,
-       u8                              max_length);
-
+acpi_ex_convert_to_ascii(acpi_integer integer,
+                        u16 base, u8 * string, u8 max_length);
 
 /*******************************************************************************
  *
@@ -76,29 +69,25 @@ acpi_ex_convert_to_ascii (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_convert_to_integer (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **result_desc,
-       u32                             flags)
+acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
+                          union acpi_operand_object **result_desc, u32 flags)
 {
-       union acpi_operand_object       *return_desc;
-       u8                              *pointer;
-       acpi_integer                    result;
-       u32                             i;
-       u32                             count;
-       acpi_status                     status;
-
+       union acpi_operand_object *return_desc;
+       u8 *pointer;
+       acpi_integer result;
+       u32 i;
+       u32 count;
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE_PTR ("ex_convert_to_integer", obj_desc);
+       ACPI_FUNCTION_TRACE_PTR("ex_convert_to_integer", obj_desc);
 
-
-       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
        case ACPI_TYPE_INTEGER:
 
                /* No conversion necessary */
 
                *result_desc = obj_desc;
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
 
        case ACPI_TYPE_BUFFER:
        case ACPI_TYPE_STRING:
@@ -106,11 +95,11 @@ acpi_ex_convert_to_integer (
                /* Note: Takes advantage of common buffer/string fields */
 
                pointer = obj_desc->buffer.pointer;
-               count   = obj_desc->buffer.length;
+               count = obj_desc->buffer.length;
                break;
 
        default:
-               return_ACPI_STATUS (AE_TYPE);
+               return_ACPI_STATUS(AE_TYPE);
        }
 
        /*
@@ -126,7 +115,7 @@ acpi_ex_convert_to_integer (
 
        /* String conversion is different than Buffer conversion */
 
-       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
        case ACPI_TYPE_STRING:
 
                /*
@@ -135,19 +124,18 @@ acpi_ex_convert_to_integer (
                 * of ACPI 3.0) is that the to_integer() operator allows both decimal
                 * and hexadecimal strings (hex prefixed with "0x").
                 */
-               status = acpi_ut_strtoul64 ((char *) pointer, flags, &result);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_strtoul64((char *)pointer, flags, &result);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
                break;
 
-
        case ACPI_TYPE_BUFFER:
 
                /* Check for zero-length buffer */
 
                if (!count) {
-                       return_ACPI_STATUS (AE_AML_BUFFER_LIMIT);
+                       return_ACPI_STATUS(AE_AML_BUFFER_LIMIT);
                }
 
                /* Transfer no more than an integer's worth of data */
@@ -170,7 +158,6 @@ acpi_ex_convert_to_integer (
                }
                break;
 
-
        default:
                /* No other types can get here */
                break;
@@ -178,20 +165,19 @@ acpi_ex_convert_to_integer (
 
        /* Create a new integer */
 
-       return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+       return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
        if (!return_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Save the Result */
 
        return_desc->integer.value = result;
-       acpi_ex_truncate_for32bit_table (return_desc);
+       acpi_ex_truncate_for32bit_table(return_desc);
        *result_desc = return_desc;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_convert_to_buffer
@@ -207,25 +193,21 @@ acpi_ex_convert_to_integer (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_convert_to_buffer (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **result_desc)
+acpi_ex_convert_to_buffer(union acpi_operand_object *obj_desc,
+                         union acpi_operand_object **result_desc)
 {
-       union acpi_operand_object       *return_desc;
-       u8                              *new_buf;
+       union acpi_operand_object *return_desc;
+       u8 *new_buf;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_convert_to_buffer", obj_desc);
 
-       ACPI_FUNCTION_TRACE_PTR ("ex_convert_to_buffer", obj_desc);
-
-
-       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
        case ACPI_TYPE_BUFFER:
 
                /* No conversion necessary */
 
                *result_desc = obj_desc;
-               return_ACPI_STATUS (AE_OK);
-
+               return_ACPI_STATUS(AE_OK);
 
        case ACPI_TYPE_INTEGER:
 
@@ -233,20 +215,20 @@ acpi_ex_convert_to_buffer (
                 * Create a new Buffer object.
                 * Need enough space for one integer
                 */
-               return_desc = acpi_ut_create_buffer_object (acpi_gbl_integer_byte_width);
+               return_desc =
+                   acpi_ut_create_buffer_object(acpi_gbl_integer_byte_width);
                if (!return_desc) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                /* Copy the integer to the buffer, LSB first */
 
                new_buf = return_desc->buffer.pointer;
-               ACPI_MEMCPY (new_buf,
-                                 &obj_desc->integer.value,
-                                 acpi_gbl_integer_byte_width);
+               ACPI_MEMCPY(new_buf,
+                           &obj_desc->integer.value,
+                           acpi_gbl_integer_byte_width);
                break;
 
-
        case ACPI_TYPE_STRING:
 
                /*
@@ -258,32 +240,31 @@ acpi_ex_convert_to_buffer (
                 * ASL/AML code that depends on the null being transferred to the new
                 * buffer.
                 */
-               return_desc = acpi_ut_create_buffer_object (
-                                 (acpi_size) obj_desc->string.length + 1);
+               return_desc = acpi_ut_create_buffer_object((acpi_size)
+                                                          obj_desc->string.
+                                                          length + 1);
                if (!return_desc) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                /* Copy the string to the buffer */
 
                new_buf = return_desc->buffer.pointer;
-               ACPI_STRNCPY ((char *) new_buf, (char *) obj_desc->string.pointer,
-                       obj_desc->string.length);
+               ACPI_STRNCPY((char *)new_buf, (char *)obj_desc->string.pointer,
+                            obj_desc->string.length);
                break;
 
-
        default:
-               return_ACPI_STATUS (AE_TYPE);
+               return_ACPI_STATUS(AE_TYPE);
        }
 
        /* Mark buffer initialized */
 
        return_desc->common.flags |= AOPOBJ_DATA_VALID;
        *result_desc = return_desc;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_convert_to_ascii
@@ -300,24 +281,19 @@ acpi_ex_convert_to_buffer (
  ******************************************************************************/
 
 static u32
-acpi_ex_convert_to_ascii (
-       acpi_integer                    integer,
-       u16                             base,
-       u8                              *string,
-       u8                              data_width)
+acpi_ex_convert_to_ascii(acpi_integer integer,
+                        u16 base, u8 * string, u8 data_width)
 {
-       acpi_integer                    digit;
-       acpi_native_uint                i;
-       acpi_native_uint                j;
-       acpi_native_uint                k = 0;
-       acpi_native_uint                hex_length;
-       acpi_native_uint                decimal_length;
-       u32                             remainder;
-       u8                              supress_zeros;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       acpi_integer digit;
+       acpi_native_uint i;
+       acpi_native_uint j;
+       acpi_native_uint k = 0;
+       acpi_native_uint hex_length;
+       acpi_native_uint decimal_length;
+       u32 remainder;
+       u8 supress_zeros;
 
+       ACPI_FUNCTION_ENTRY();
 
        switch (base) {
        case 10:
@@ -339,7 +315,7 @@ acpi_ex_convert_to_ascii (
                        break;
                }
 
-               supress_zeros = TRUE;    /* No leading zeros */
+               supress_zeros = TRUE;   /* No leading zeros */
                remainder = 0;
 
                for (i = decimal_length; i > 0; i--) {
@@ -347,7 +323,8 @@ acpi_ex_convert_to_ascii (
 
                        digit = integer;
                        for (j = 0; j < i; j++) {
-                               (void) acpi_ut_short_divide (digit, 10, &digit, &remainder);
+                               (void)acpi_ut_short_divide(digit, 10, &digit,
+                                                          &remainder);
                        }
 
                        /* Handle leading zeros */
@@ -367,11 +344,13 @@ acpi_ex_convert_to_ascii (
 
                /* hex_length: 2 ascii hex chars per data byte */
 
-               hex_length = ACPI_MUL_2 (data_width);
-               for (i = 0, j = (hex_length-1); i < hex_length; i++, j--) {
+               hex_length = (acpi_native_uint) ACPI_MUL_2(data_width);
+               for (i = 0, j = (hex_length - 1); i < hex_length; i++, j--) {
                        /* Get one hex digit, most significant digits first */
 
-                       string[k] = (u8) acpi_ut_hex_to_ascii_char (integer, ACPI_MUL_4 (j));
+                       string[k] =
+                           (u8) acpi_ut_hex_to_ascii_char(integer,
+                                                          ACPI_MUL_4(j));
                        k++;
                }
                break;
@@ -387,15 +366,14 @@ acpi_ex_convert_to_ascii (
         * Finally, null terminate the string and return the length
         */
        if (!k) {
-               string [0] = ACPI_ASCII_ZERO;
+               string[0] = ACPI_ASCII_ZERO;
                k = 1;
        }
 
-       string [k] = 0;
+       string[k] = 0;
        return ((u32) k);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_convert_to_string
@@ -412,30 +390,25 @@ acpi_ex_convert_to_ascii (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_convert_to_string (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **result_desc,
-       u32                             type)
+acpi_ex_convert_to_string(union acpi_operand_object * obj_desc,
+                         union acpi_operand_object ** result_desc, u32 type)
 {
-       union acpi_operand_object       *return_desc;
-       u8                              *new_buf;
-       u32                             i;
-       u32                             string_length = 0;
-       u16                             base = 16;
-       u8                              separator = ',';
+       union acpi_operand_object *return_desc;
+       u8 *new_buf;
+       u32 i;
+       u32 string_length = 0;
+       u16 base = 16;
+       u8 separator = ',';
 
+       ACPI_FUNCTION_TRACE_PTR("ex_convert_to_string", obj_desc);
 
-       ACPI_FUNCTION_TRACE_PTR ("ex_convert_to_string", obj_desc);
-
-
-       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
        case ACPI_TYPE_STRING:
 
                /* No conversion necessary */
 
                *result_desc = obj_desc;
-               return_ACPI_STATUS (AE_OK);
-
+               return_ACPI_STATUS(AE_OK);
 
        case ACPI_TYPE_INTEGER:
 
@@ -452,7 +425,7 @@ acpi_ex_convert_to_string (
 
                        /* Two hex string characters for each integer byte */
 
-                       string_length = ACPI_MUL_2 (acpi_gbl_integer_byte_width);
+                       string_length = ACPI_MUL_2(acpi_gbl_integer_byte_width);
                        break;
                }
 
@@ -460,31 +433,33 @@ acpi_ex_convert_to_string (
                 * Create a new String
                 * Need enough space for one ASCII integer (plus null terminator)
                 */
-               return_desc = acpi_ut_create_string_object ((acpi_size) string_length);
+               return_desc =
+                   acpi_ut_create_string_object((acpi_size) string_length);
                if (!return_desc) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                new_buf = return_desc->buffer.pointer;
 
                /* Convert integer to string */
 
-               string_length = acpi_ex_convert_to_ascii (obj_desc->integer.value, base,
-                                  new_buf, acpi_gbl_integer_byte_width);
+               string_length =
+                   acpi_ex_convert_to_ascii(obj_desc->integer.value, base,
+                                            new_buf,
+                                            acpi_gbl_integer_byte_width);
 
                /* Null terminate at the correct place */
 
                return_desc->string.length = string_length;
-               new_buf [string_length] = 0;
+               new_buf[string_length] = 0;
                break;
 
-
        case ACPI_TYPE_BUFFER:
 
                /* Setup string length, base, and separator */
 
                switch (type) {
-               case ACPI_EXPLICIT_CONVERT_DECIMAL: /* Used by to_decimal_string */
+               case ACPI_EXPLICIT_CONVERT_DECIMAL:     /* Used by to_decimal_string */
                        /*
                         * From ACPI: "If Data is a buffer, it is converted to a string of
                         * decimal values separated by commas."
@@ -498,11 +473,9 @@ acpi_ex_convert_to_string (
                        for (i = 0; i < obj_desc->buffer.length; i++) {
                                if (obj_desc->buffer.pointer[i] >= 100) {
                                        string_length += 4;
-                               }
-                               else if (obj_desc->buffer.pointer[i] >= 10) {
+                               } else if (obj_desc->buffer.pointer[i] >= 10) {
                                        string_length += 3;
-                               }
-                               else {
+                               } else {
                                        string_length += 2;
                                }
                        }
@@ -518,7 +491,7 @@ acpi_ex_convert_to_string (
                        string_length = (obj_desc->buffer.length * 3);
                        break;
 
-               case ACPI_EXPLICIT_CONVERT_HEX:     /* Used by to_hex_string */
+               case ACPI_EXPLICIT_CONVERT_HEX: /* Used by to_hex_string */
                        /*
                         * From ACPI: "If Data is a buffer, it is converted to a string of
                         * hexadecimal values separated by commas."
@@ -527,7 +500,7 @@ acpi_ex_convert_to_string (
                        break;
 
                default:
-                       return_ACPI_STATUS (AE_BAD_PARAMETER);
+                       return_ACPI_STATUS(AE_BAD_PARAMETER);
                }
 
                /*
@@ -535,15 +508,16 @@ acpi_ex_convert_to_string (
                 * (-1 because of extra separator included in string_length from above)
                 */
                string_length--;
-               if (string_length > ACPI_MAX_STRING_CONVERSION) /* ACPI limit */ {
-                       return_ACPI_STATUS (AE_AML_STRING_LIMIT);
+               if (string_length > ACPI_MAX_STRING_CONVERSION) {       /* ACPI limit */
+                       return_ACPI_STATUS(AE_AML_STRING_LIMIT);
                }
 
                /* Create a new string object and string buffer */
 
-               return_desc = acpi_ut_create_string_object ((acpi_size) string_length);
+               return_desc =
+                   acpi_ut_create_string_object((acpi_size) string_length);
                if (!return_desc) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                new_buf = return_desc->buffer.pointer;
@@ -553,10 +527,11 @@ acpi_ex_convert_to_string (
                 * (separated by commas or spaces)
                 */
                for (i = 0; i < obj_desc->buffer.length; i++) {
-                       new_buf += acpi_ex_convert_to_ascii (
-                                        (acpi_integer) obj_desc->buffer.pointer[i], base,
-                                        new_buf, 1);
-                       *new_buf++ = separator; /* each separated by a comma or space */
+                       new_buf += acpi_ex_convert_to_ascii((acpi_integer)
+                                                           obj_desc->buffer.
+                                                           pointer[i], base,
+                                                           new_buf, 1);
+                       *new_buf++ = separator; /* each separated by a comma or space */
                }
 
                /*
@@ -568,14 +543,13 @@ acpi_ex_convert_to_string (
                break;
 
        default:
-               return_ACPI_STATUS (AE_TYPE);
+               return_ACPI_STATUS(AE_TYPE);
        }
 
        *result_desc = return_desc;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_convert_to_target_type
@@ -592,17 +566,14 @@ acpi_ex_convert_to_string (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_convert_to_target_type (
-       acpi_object_type                destination_type,
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       **result_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_convert_to_target_type(acpi_object_type destination_type,
+                              union acpi_operand_object *source_desc,
+                              union acpi_operand_object **result_desc,
+                              struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("ex_convert_to_target_type");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("ex_convert_to_target_type");
 
        /* Default behavior */
 
@@ -612,10 +583,10 @@ acpi_ex_convert_to_target_type (
         * If required by the target,
         * perform implicit conversion on the source before we store it.
         */
-       switch (GET_CURRENT_ARG_TYPE (walk_state->op_info->runtime_args)) {
+       switch (GET_CURRENT_ARG_TYPE(walk_state->op_info->runtime_args)) {
        case ARGI_SIMPLE_TARGET:
        case ARGI_FIXED_TARGET:
-       case ARGI_INTEGER_REF:      /* Handles Increment, Decrement cases */
+       case ARGI_INTEGER_REF:  /* Handles Increment, Decrement cases */
 
                switch (destination_type) {
                case ACPI_TYPE_LOCAL_REGION_FIELD:
@@ -627,17 +598,19 @@ acpi_ex_convert_to_target_type (
                default:
                        /* No conversion allowed for these types */
 
-                       if (destination_type != ACPI_GET_OBJECT_TYPE (source_desc)) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                                       "Explicit operator, will store (%s) over existing type (%s)\n",
-                                       acpi_ut_get_object_type_name (source_desc),
-                                       acpi_ut_get_type_name (destination_type)));
+                       if (destination_type !=
+                           ACPI_GET_OBJECT_TYPE(source_desc)) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                                 "Explicit operator, will store (%s) over existing type (%s)\n",
+                                                 acpi_ut_get_object_type_name
+                                                 (source_desc),
+                                                 acpi_ut_get_type_name
+                                                 (destination_type)));
                                status = AE_TYPE;
                        }
                }
                break;
 
-
        case ARGI_TARGETREF:
 
                switch (destination_type) {
@@ -649,55 +622,55 @@ acpi_ex_convert_to_target_type (
                         * These types require an Integer operand.  We can convert
                         * a Buffer or a String to an Integer if necessary.
                         */
-                       status = acpi_ex_convert_to_integer (source_desc, result_desc,
-                                        16);
+                       status =
+                           acpi_ex_convert_to_integer(source_desc, result_desc,
+                                                      16);
                        break;
 
-
                case ACPI_TYPE_STRING:
                        /*
                         * The operand must be a String.  We can convert an
                         * Integer or Buffer if necessary
                         */
-                       status = acpi_ex_convert_to_string (source_desc, result_desc,
-                                        ACPI_IMPLICIT_CONVERT_HEX);
+                       status =
+                           acpi_ex_convert_to_string(source_desc, result_desc,
+                                                     ACPI_IMPLICIT_CONVERT_HEX);
                        break;
 
-
                case ACPI_TYPE_BUFFER:
                        /*
                         * The operand must be a Buffer.  We can convert an
                         * Integer or String if necessary
                         */
-                       status = acpi_ex_convert_to_buffer (source_desc, result_desc);
+                       status =
+                           acpi_ex_convert_to_buffer(source_desc, result_desc);
                        break;
 
-
                default:
-                       ACPI_REPORT_ERROR (("Bad destination type during conversion: %X\n",
-                               destination_type));
+                       ACPI_REPORT_ERROR(("Bad destination type during conversion: %X\n", destination_type));
                        status = AE_AML_INTERNAL;
                        break;
                }
                break;
 
-
        case ARGI_REFERENCE:
                /*
                 * create_xxxx_field cases - we are storing the field object into the name
                 */
                break;
 
-
        default:
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Unknown Target type ID 0x%X Op %s dest_type %s\n",
-                       GET_CURRENT_ARG_TYPE (walk_state->op_info->runtime_args),
-                       walk_state->op_info->name, acpi_ut_get_type_name (destination_type)));
-
-               ACPI_REPORT_ERROR (("Bad Target Type (ARGI): %X\n",
-                       GET_CURRENT_ARG_TYPE (walk_state->op_info->runtime_args)))
-               status = AE_AML_INTERNAL;
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unknown Target type ID 0x%X Op %s dest_type %s\n",
+                                 GET_CURRENT_ARG_TYPE(walk_state->op_info->
+                                                      runtime_args),
+                                 walk_state->op_info->name,
+                                 acpi_ut_get_type_name(destination_type)));
+
+               ACPI_REPORT_ERROR(("Bad Target Type (ARGI): %X\n",
+                                  GET_CURRENT_ARG_TYPE(walk_state->op_info->
+                                                       runtime_args)))
+                   status = AE_AML_INTERNAL;
        }
 
        /*
@@ -710,7 +683,5 @@ acpi_ex_convert_to_target_type (
                status = AE_OK;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 812cdcb2e3707404b8b59c2045bfb3fbf6404695..91c49188fb0794f488b64e693c499e1ae5a8328b 100644 (file)
@@ -41,7 +41,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/amlcode.h>
 #include <acpi/acevents.h>
 #include <acpi/actables.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("excreate")
-
+ACPI_MODULE_NAME("excreate")
 
 #ifndef ACPI_NO_METHOD_EXECUTION
 /*******************************************************************************
  * DESCRIPTION: Create a new named alias
  *
  ******************************************************************************/
-
-acpi_status
-acpi_ex_create_alias (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_create_alias(struct acpi_walk_state *walk_state)
 {
-       struct acpi_namespace_node      *target_node;
-       struct acpi_namespace_node      *alias_node;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("ex_create_alias");
+       struct acpi_namespace_node *target_node;
+       struct acpi_namespace_node *alias_node;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("ex_create_alias");
 
        /* Get the source/alias operands (both namespace nodes) */
 
-       alias_node = (struct acpi_namespace_node *) walk_state->operands[0];
-       target_node = (struct acpi_namespace_node *) walk_state->operands[1];
+       alias_node = (struct acpi_namespace_node *)walk_state->operands[0];
+       target_node = (struct acpi_namespace_node *)walk_state->operands[1];
 
        if ((target_node->type == ACPI_TYPE_LOCAL_ALIAS) ||
-               (target_node->type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) {
+           (target_node->type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) {
                /*
                 * Dereference an existing alias so that we don't create a chain
                 * of aliases.  With this code, we guarantee that an alias is
                 * always exactly one level of indirection away from the
                 * actual aliased name.
                 */
-               target_node = ACPI_CAST_PTR (struct acpi_namespace_node, target_node->object);
+               target_node =
+                   ACPI_CAST_PTR(struct acpi_namespace_node,
+                                 target_node->object);
        }
 
        /*
@@ -115,7 +109,8 @@ acpi_ex_create_alias (
                 * types, the object can change dynamically via a Store.
                 */
                alias_node->type = ACPI_TYPE_LOCAL_ALIAS;
-               alias_node->object = ACPI_CAST_PTR (union acpi_operand_object, target_node);
+               alias_node->object =
+                   ACPI_CAST_PTR(union acpi_operand_object, target_node);
                break;
 
        case ACPI_TYPE_METHOD:
@@ -126,7 +121,8 @@ acpi_ex_create_alias (
                 * types, the object can change dynamically via a Store.
                 */
                alias_node->type = ACPI_TYPE_LOCAL_METHOD_ALIAS;
-               alias_node->object = ACPI_CAST_PTR (union acpi_operand_object, target_node);
+               alias_node->object =
+                   ACPI_CAST_PTR(union acpi_operand_object, target_node);
                break;
 
        default:
@@ -139,17 +135,18 @@ acpi_ex_create_alias (
                 * additional reference to prevent deletion out from under either the
                 * target node or the alias Node
                 */
-               status = acpi_ns_attach_object (alias_node,
-                                acpi_ns_get_attached_object (target_node), target_node->type);
+               status = acpi_ns_attach_object(alias_node,
+                                              acpi_ns_get_attached_object
+                                              (target_node),
+                                              target_node->type);
                break;
        }
 
        /* Since both operands are Nodes, we don't need to delete them */
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_create_event
@@ -162,18 +159,14 @@ acpi_ex_create_alias (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_create_event (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_create_event(struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-
-
-       ACPI_FUNCTION_TRACE ("ex_create_event");
+       acpi_status status;
+       union acpi_operand_object *obj_desc;
 
+       ACPI_FUNCTION_TRACE("ex_create_event");
 
-       obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_EVENT);
+       obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_EVENT);
        if (!obj_desc) {
                status = AE_NO_MEMORY;
                goto cleanup;
@@ -183,27 +176,27 @@ acpi_ex_create_event (
         * Create the actual OS semaphore, with zero initial units -- meaning
         * that the event is created in an unsignalled state
         */
-       status = acpi_os_create_semaphore (ACPI_NO_UNIT_LIMIT, 0,
-                        &obj_desc->event.semaphore);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_os_create_semaphore(ACPI_NO_UNIT_LIMIT, 0,
+                                         &obj_desc->event.semaphore);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
        /* Attach object to the Node */
 
-       status = acpi_ns_attach_object ((struct acpi_namespace_node *) walk_state->operands[0],
-                        obj_desc, ACPI_TYPE_EVENT);
+       status =
+           acpi_ns_attach_object((struct acpi_namespace_node *)walk_state->
+                                 operands[0], obj_desc, ACPI_TYPE_EVENT);
 
-cleanup:
+      cleanup:
        /*
         * Remove local reference to the object (on error, will cause deletion
         * of both object and semaphore if present.)
         */
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_create_mutex
@@ -218,20 +211,16 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_create_mutex (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_create_mutex(struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *obj_desc;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_create_mutex", ACPI_WALK_OPERANDS);
+       acpi_status status = AE_OK;
+       union acpi_operand_object *obj_desc;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_create_mutex", ACPI_WALK_OPERANDS);
 
        /* Create the new mutex object */
 
-       obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_MUTEX);
+       obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_MUTEX);
        if (!obj_desc) {
                status = AE_NO_MEMORY;
                goto cleanup;
@@ -242,30 +231,30 @@ acpi_ex_create_mutex (
         * One unit max to make it a mutex, with one initial unit to allow
         * the mutex to be acquired.
         */
-       status = acpi_os_create_semaphore (1, 1, &obj_desc->mutex.semaphore);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_os_create_semaphore(1, 1, &obj_desc->mutex.semaphore);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
        /* Init object and attach to NS node */
 
-       obj_desc->mutex.sync_level = (u8) walk_state->operands[1]->integer.value;
-       obj_desc->mutex.node = (struct acpi_namespace_node *) walk_state->operands[0];
-
-       status = acpi_ns_attach_object (obj_desc->mutex.node,
-                        obj_desc, ACPI_TYPE_MUTEX);
+       obj_desc->mutex.sync_level =
+           (u8) walk_state->operands[1]->integer.value;
+       obj_desc->mutex.node =
+           (struct acpi_namespace_node *)walk_state->operands[0];
 
+       status = acpi_ns_attach_object(obj_desc->mutex.node,
+                                      obj_desc, ACPI_TYPE_MUTEX);
 
-cleanup:
+      cleanup:
        /*
         * Remove local reference to the object (on error, will cause deletion
         * of both object and semaphore if present.)
         */
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_create_region
@@ -282,20 +271,16 @@ cleanup:
  ******************************************************************************/
 
 acpi_status
-acpi_ex_create_region (
-       u8                              *aml_start,
-       u32                             aml_length,
-       u8                              region_space,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_create_region(u8 * aml_start,
+                     u32 aml_length,
+                     u8 region_space, struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-       struct acpi_namespace_node      *node;
-       union acpi_operand_object       *region_obj2;
-
-
-       ACPI_FUNCTION_TRACE ("ex_create_region");
+       acpi_status status;
+       union acpi_operand_object *obj_desc;
+       struct acpi_namespace_node *node;
+       union acpi_operand_object *region_obj2;
 
+       ACPI_FUNCTION_TRACE("ex_create_region");
 
        /* Get the Namespace Node */
 
@@ -305,8 +290,8 @@ acpi_ex_create_region (
         * If the region object is already attached to this node,
         * just return
         */
-       if (acpi_ns_get_attached_object (node)) {
-               return_ACPI_STATUS (AE_OK);
+       if (acpi_ns_get_attached_object(node)) {
+               return_ACPI_STATUS(AE_OK);
        }
 
        /*
@@ -314,17 +299,18 @@ acpi_ex_create_region (
         * range
         */
        if ((region_space >= ACPI_NUM_PREDEFINED_REGIONS) &&
-               (region_space < ACPI_USER_REGION_BEGIN)) {
-               ACPI_REPORT_ERROR (("Invalid address_space type %X\n", region_space));
-               return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
+           (region_space < ACPI_USER_REGION_BEGIN)) {
+               ACPI_REPORT_ERROR(("Invalid address_space type %X\n",
+                                  region_space));
+               return_ACPI_STATUS(AE_AML_INVALID_SPACE_ID);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Region Type - %s (%X)\n",
-               acpi_ut_get_region_name (region_space), region_space));
+       ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "Region Type - %s (%X)\n",
+                         acpi_ut_get_region_name(region_space), region_space));
 
        /* Create the region descriptor */
 
-       obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_REGION);
+       obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_REGION);
        if (!obj_desc) {
                status = AE_NO_MEMORY;
                goto cleanup;
@@ -334,7 +320,7 @@ acpi_ex_create_region (
         * Remember location in AML stream of address & length
         * operands since they need to be evaluated at run time.
         */
-       region_obj2                 = obj_desc->common.next_object;
+       region_obj2 = obj_desc->common.next_object;
        region_obj2->extra.aml_start = aml_start;
        region_obj2->extra.aml_length = aml_length;
 
@@ -343,22 +329,20 @@ acpi_ex_create_region (
        obj_desc->region.space_id = region_space;
        obj_desc->region.address = 0;
        obj_desc->region.length = 0;
-       obj_desc->region.node   = node;
+       obj_desc->region.node = node;
 
        /* Install the new region object in the parent Node */
 
-       status = acpi_ns_attach_object (node, obj_desc, ACPI_TYPE_REGION);
+       status = acpi_ns_attach_object(node, obj_desc, ACPI_TYPE_REGION);
 
-
-cleanup:
+      cleanup:
 
        /* Remove local reference to the object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_create_table_region
@@ -371,20 +355,16 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_create_table_region (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_create_table_region(struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       union acpi_operand_object       *obj_desc;
-       struct acpi_namespace_node      *node;
-       struct acpi_table_header        *table;
-       union acpi_operand_object       *region_obj2;
-
-
-       ACPI_FUNCTION_TRACE ("ex_create_table_region");
+       acpi_status status;
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       union acpi_operand_object *obj_desc;
+       struct acpi_namespace_node *node;
+       struct acpi_table_header *table;
+       union acpi_operand_object *region_obj2;
 
+       ACPI_FUNCTION_TRACE("ex_create_table_region");
 
        /* Get the Node from the object stack  */
 
@@ -394,66 +374,64 @@ acpi_ex_create_table_region (
         * If the region object is already attached to this node,
         * just return
         */
-       if (acpi_ns_get_attached_object (node)) {
-               return_ACPI_STATUS (AE_OK);
+       if (acpi_ns_get_attached_object(node)) {
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Find the ACPI table */
 
-       status = acpi_tb_find_table (operand[1]->string.pointer,
-                          operand[2]->string.pointer,
-                          operand[3]->string.pointer, &table);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_find_table(operand[1]->string.pointer,
+                                   operand[2]->string.pointer,
+                                   operand[3]->string.pointer, &table);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Create the region descriptor */
 
-       obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_REGION);
+       obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_REGION);
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
-       region_obj2                     = obj_desc->common.next_object;
+       region_obj2 = obj_desc->common.next_object;
        region_obj2->extra.region_context = NULL;
 
        /* Init the region from the operands */
 
        obj_desc->region.space_id = REGION_DATA_TABLE;
-       obj_desc->region.address = (acpi_physical_address) ACPI_TO_INTEGER (table);
+       obj_desc->region.address =
+           (acpi_physical_address) ACPI_TO_INTEGER(table);
        obj_desc->region.length = table->length;
-       obj_desc->region.node   = node;
-       obj_desc->region.flags  = AOPOBJ_DATA_VALID;
+       obj_desc->region.node = node;
+       obj_desc->region.flags = AOPOBJ_DATA_VALID;
 
        /* Install the new region object in the parent Node */
 
-       status = acpi_ns_attach_object (node, obj_desc, ACPI_TYPE_REGION);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ns_attach_object(node, obj_desc, ACPI_TYPE_REGION);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
-       status = acpi_ev_initialize_region (obj_desc, FALSE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ev_initialize_region(obj_desc, FALSE);
+       if (ACPI_FAILURE(status)) {
                if (status == AE_NOT_EXIST) {
                        status = AE_OK;
-               }
-               else {
+               } else {
                        goto cleanup;
                }
        }
 
        obj_desc->region.flags |= AOPOBJ_SETUP_COMPLETE;
 
-
-cleanup:
+      cleanup:
 
        /* Remove local reference to the object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_create_processor
@@ -468,43 +446,39 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_create_processor (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_create_processor", walk_state);
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_create_processor", walk_state);
 
        /* Create the processor object */
 
-       obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_PROCESSOR);
+       obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_PROCESSOR);
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Initialize the processor object from the operands */
 
-       obj_desc->processor.proc_id = (u8)          operand[1]->integer.value;
-       obj_desc->processor.address = (acpi_io_address) operand[2]->integer.value;
-       obj_desc->processor.length = (u8)           operand[3]->integer.value;
+       obj_desc->processor.proc_id = (u8) operand[1]->integer.value;
+       obj_desc->processor.address =
+           (acpi_io_address) operand[2]->integer.value;
+       obj_desc->processor.length = (u8) operand[3]->integer.value;
 
        /* Install the processor object in the parent Node */
 
-       status = acpi_ns_attach_object ((struct acpi_namespace_node *) operand[0],
-                         obj_desc, ACPI_TYPE_PROCESSOR);
+       status = acpi_ns_attach_object((struct acpi_namespace_node *)operand[0],
+                                      obj_desc, ACPI_TYPE_PROCESSOR);
 
        /* Remove local reference to the object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_create_power_resource
@@ -519,43 +493,39 @@ acpi_ex_create_processor (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_create_power_resource (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_create_power_resource(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_create_power_resource", walk_state);
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       acpi_status status;
+       union acpi_operand_object *obj_desc;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_create_power_resource", walk_state);
 
        /* Create the power resource object */
 
-       obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_POWER);
+       obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_POWER);
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Initialize the power object from the operands */
 
        obj_desc->power_resource.system_level = (u8) operand[1]->integer.value;
-       obj_desc->power_resource.resource_order = (u16) operand[2]->integer.value;
+       obj_desc->power_resource.resource_order =
+           (u16) operand[2]->integer.value;
 
        /* Install the  power resource object in the parent Node */
 
-       status = acpi_ns_attach_object ((struct acpi_namespace_node *) operand[0],
-                         obj_desc, ACPI_TYPE_POWER);
+       status = acpi_ns_attach_object((struct acpi_namespace_node *)operand[0],
+                                      obj_desc, ACPI_TYPE_POWER);
 
        /* Remove local reference to the object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 #endif
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_create_method
@@ -571,25 +541,21 @@ acpi_ex_create_power_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_create_method (
-       u8                              *aml_start,
-       u32                             aml_length,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_create_method(u8 * aml_start,
+                     u32 aml_length, struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-       u8                              method_flags;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_create_method", walk_state);
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
+       u8 method_flags;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_create_method", walk_state);
 
        /* Create a new method object */
 
-       obj_desc = acpi_ut_create_internal_object (ACPI_TYPE_METHOD);
+       obj_desc = acpi_ut_create_internal_object(ACPI_TYPE_METHOD);
        if (!obj_desc) {
-          return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Save the method's AML pointer and length  */
@@ -603,8 +569,10 @@ acpi_ex_create_method (
         */
        method_flags = (u8) operand[1]->integer.value;
 
-       obj_desc->method.method_flags = (u8) (method_flags & ~AML_METHOD_ARG_COUNT);
-       obj_desc->method.param_count = (u8) (method_flags & AML_METHOD_ARG_COUNT);
+       obj_desc->method.method_flags =
+           (u8) (method_flags & ~AML_METHOD_ARG_COUNT);
+       obj_desc->method.param_count =
+           (u8) (method_flags & AML_METHOD_ARG_COUNT);
 
        /*
         * Get the concurrency count.  If required, a semaphore will be
@@ -613,32 +581,28 @@ acpi_ex_create_method (
        if (acpi_gbl_all_methods_serialized) {
                obj_desc->method.concurrency = 1;
                obj_desc->method.method_flags |= AML_METHOD_SERIALIZED;
-       }
-       else if (method_flags & AML_METHOD_SERIALIZED) {
+       } else if (method_flags & AML_METHOD_SERIALIZED) {
                /*
                 * ACPI 1.0: Concurrency = 1
                 * ACPI 2.0: Concurrency = (sync_level (in method declaration) + 1)
                 */
                obj_desc->method.concurrency = (u8)
-                                 (((method_flags & AML_METHOD_SYNCH_LEVEL) >> 4) + 1);
-       }
-       else {
+                   (((method_flags & AML_METHOD_SYNCH_LEVEL) >> 4) + 1);
+       } else {
                obj_desc->method.concurrency = ACPI_INFINITE_CONCURRENCY;
        }
 
        /* Attach the new object to the method Node */
 
-       status = acpi_ns_attach_object ((struct acpi_namespace_node *) operand[0],
-                         obj_desc, ACPI_TYPE_METHOD);
+       status = acpi_ns_attach_object((struct acpi_namespace_node *)operand[0],
+                                      obj_desc, ACPI_TYPE_METHOD);
 
        /* Remove local reference to the object */
 
-       acpi_ut_remove_reference (obj_desc);
+       acpi_ut_remove_reference(obj_desc);
 
        /* Remove a reference to the operand */
 
-       acpi_ut_remove_reference (operand[1]);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(operand[1]);
+       return_ACPI_STATUS(status);
 }
-
-
index 408500648114ab639f4f05944a823c17cc56e636..bc2fa996047ef6148ce26101e77fa2ef7a8468cd 100644 (file)
@@ -41,7 +41,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/amlcode.h>
 #include <acpi/acparser.h>
 
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exdump")
+ACPI_MODULE_NAME("exdump")
 
+/*
+ * The following routines are used for debug output only
+ */
+#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 /* Local prototypes */
-
 #ifdef ACPI_FUTURE_USAGE
-static void
-acpi_ex_out_string (
-       char                            *title,
-       char                            *value);
+static void acpi_ex_out_string(char *title, char *value);
 
-static void
-acpi_ex_out_pointer (
-       char                            *title,
-       void                            *value);
+static void acpi_ex_out_pointer(char *title, void *value);
 
-static void
-acpi_ex_out_integer (
-       char                            *title,
-       u32                             value);
+static void acpi_ex_out_integer(char *title, u32 value);
 
-static void
-acpi_ex_out_address (
-       char                            *title,
-       acpi_physical_address           value);
-#endif /* ACPI_FUTURE_USAGE */
+static void acpi_ex_out_address(char *title, acpi_physical_address value);
 
+static void acpi_ex_dump_reference(union acpi_operand_object *obj_desc);
 
-/*
- * The following routines are used for debug output only
- */
-#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
+static void
+acpi_ex_dump_package(union acpi_operand_object *obj_desc, u32 level, u32 index);
+#endif                         /* ACPI_FUTURE_USAGE */
 
 /*******************************************************************************
  *
@@ -94,143 +83,140 @@ acpi_ex_out_address (
  *
  ******************************************************************************/
 
-void
-acpi_ex_dump_operand (
-       union acpi_operand_object       *obj_desc,
-       u32                             depth)
+void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)
 {
-       u32                             length;
-       u32                             index;
-
+       u32 length;
+       u32 index;
 
-       ACPI_FUNCTION_NAME ("ex_dump_operand")
+       ACPI_FUNCTION_NAME("ex_dump_operand")
 
-
-       if (!((ACPI_LV_EXEC & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer))) {
+           if (!
+               ((ACPI_LV_EXEC & acpi_dbg_level)
+                && (_COMPONENT & acpi_dbg_layer))) {
                return;
        }
 
        if (!obj_desc) {
                /* This could be a null element of a package */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Null Object Descriptor\n"));
                return;
        }
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p is a NS Node: ", obj_desc));
-               ACPI_DUMP_ENTRY (obj_desc, ACPI_LV_EXEC);
+       if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) == ACPI_DESC_TYPE_NAMED) {
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%p Namespace Node: ",
+                                 obj_desc));
+               ACPI_DUMP_ENTRY(obj_desc, ACPI_LV_EXEC);
                return;
        }
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "%p is not a node or operand object: [%s]\n",
-                       obj_desc, acpi_ut_get_descriptor_name (obj_desc)));
-               ACPI_DUMP_BUFFER (obj_desc, sizeof (union acpi_operand_object));
+       if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) != ACPI_DESC_TYPE_OPERAND) {
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "%p is not a node or operand object: [%s]\n",
+                                 obj_desc,
+                                 acpi_ut_get_descriptor_name(obj_desc)));
+               ACPI_DUMP_BUFFER(obj_desc, sizeof(union acpi_operand_object));
                return;
        }
 
        /* obj_desc is a valid object */
 
        if (depth > 0) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",
-                       depth, " ", depth, obj_desc));
-       }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", obj_desc));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%*s[%u] %p ",
+                                 depth, " ", depth, obj_desc));
+       } else {
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%p ", obj_desc));
        }
 
        /* Decode object type */
 
-       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
        case ACPI_TYPE_LOCAL_REFERENCE:
 
                switch (obj_desc->reference.opcode) {
                case AML_DEBUG_OP:
 
-                       acpi_os_printf ("Reference: Debug\n");
+                       acpi_os_printf("Reference: Debug\n");
                        break;
 
-
                case AML_NAME_OP:
 
-                       ACPI_DUMP_PATHNAME (obj_desc->reference.object,
-                               "Reference: Name: ", ACPI_LV_INFO, _COMPONENT);
-                       ACPI_DUMP_ENTRY (obj_desc->reference.object, ACPI_LV_INFO);
+                       ACPI_DUMP_PATHNAME(obj_desc->reference.object,
+                                          "Reference: Name: ", ACPI_LV_INFO,
+                                          _COMPONENT);
+                       ACPI_DUMP_ENTRY(obj_desc->reference.object,
+                                       ACPI_LV_INFO);
                        break;
 
-
                case AML_INDEX_OP:
 
-                       acpi_os_printf ("Reference: Index %p\n",
-                               obj_desc->reference.object);
+                       acpi_os_printf("Reference: Index %p\n",
+                                      obj_desc->reference.object);
                        break;
 
-
                case AML_REF_OF_OP:
 
-                       acpi_os_printf ("Reference: (ref_of) %p\n",
-                               obj_desc->reference.object);
+                       acpi_os_printf("Reference: (ref_of) %p\n",
+                                      obj_desc->reference.object);
                        break;
 
-
                case AML_ARG_OP:
 
-                       acpi_os_printf ("Reference: Arg%d",
-                               obj_desc->reference.offset);
+                       acpi_os_printf("Reference: Arg%d",
+                                      obj_desc->reference.offset);
 
-                       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {
+                       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
                                /* Value is an Integer */
 
-                               acpi_os_printf (" value is [%8.8X%8.8x]",
-                                       ACPI_FORMAT_UINT64 (obj_desc->integer.value));
+                               acpi_os_printf(" value is [%8.8X%8.8x]",
+                                              ACPI_FORMAT_UINT64(obj_desc->
+                                                                 integer.
+                                                                 value));
                        }
 
-                       acpi_os_printf ("\n");
+                       acpi_os_printf("\n");
                        break;
 
-
                case AML_LOCAL_OP:
 
-                       acpi_os_printf ("Reference: Local%d",
-                               obj_desc->reference.offset);
+                       acpi_os_printf("Reference: Local%d",
+                                      obj_desc->reference.offset);
 
-                       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {
+                       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
 
                                /* Value is an Integer */
 
-                               acpi_os_printf (" value is [%8.8X%8.8x]",
-                                       ACPI_FORMAT_UINT64 (obj_desc->integer.value));
+                               acpi_os_printf(" value is [%8.8X%8.8x]",
+                                              ACPI_FORMAT_UINT64(obj_desc->
+                                                                 integer.
+                                                                 value));
                        }
 
-                       acpi_os_printf ("\n");
+                       acpi_os_printf("\n");
                        break;
 
-
                case AML_INT_NAMEPATH_OP:
 
-                       acpi_os_printf ("Reference.Node->Name %X\n",
-                               obj_desc->reference.node->name.integer);
+                       acpi_os_printf("Reference.Node->Name %X\n",
+                                      obj_desc->reference.node->name.integer);
                        break;
 
-
                default:
 
                        /* Unknown opcode */
 
-                       acpi_os_printf ("Unknown Reference opcode=%X\n",
-                               obj_desc->reference.opcode);
+                       acpi_os_printf("Unknown Reference opcode=%X\n",
+                                      obj_desc->reference.opcode);
                        break;
 
                }
                break;
 
-
        case ACPI_TYPE_BUFFER:
 
-               acpi_os_printf ("Buffer len %X @ %p \n",
-                       obj_desc->buffer.length, obj_desc->buffer.pointer);
+               acpi_os_printf("Buffer len %X @ %p \n",
+                              obj_desc->buffer.length,
+                              obj_desc->buffer.pointer);
 
                length = obj_desc->buffer.length;
                if (length > 64) {
@@ -240,178 +226,166 @@ acpi_ex_dump_operand (
                /* Debug only -- dump the buffer contents */
 
                if (obj_desc->buffer.pointer) {
-                       acpi_os_printf ("Buffer Contents: ");
+                       acpi_os_printf("Buffer Contents: ");
 
                        for (index = 0; index < length; index++) {
-                               acpi_os_printf (" %02x", obj_desc->buffer.pointer[index]);
+                               acpi_os_printf(" %02x",
+                                              obj_desc->buffer.pointer[index]);
                        }
-                       acpi_os_printf ("\n");
+                       acpi_os_printf("\n");
                }
                break;
 
-
        case ACPI_TYPE_INTEGER:
 
-               acpi_os_printf ("Integer %8.8X%8.8X\n",
-                       ACPI_FORMAT_UINT64 (obj_desc->integer.value));
+               acpi_os_printf("Integer %8.8X%8.8X\n",
+                              ACPI_FORMAT_UINT64(obj_desc->integer.value));
                break;
 
-
        case ACPI_TYPE_PACKAGE:
 
-               acpi_os_printf ("Package [Len %X] element_array %p\n",
-                       obj_desc->package.count, obj_desc->package.elements);
+               acpi_os_printf("Package [Len %X] element_array %p\n",
+                              obj_desc->package.count,
+                              obj_desc->package.elements);
 
                /*
                 * If elements exist, package element pointer is valid,
                 * and debug_level exceeds 1, dump package's elements.
                 */
                if (obj_desc->package.count &&
-                       obj_desc->package.elements &&
-                       acpi_dbg_level > 1) {
-                       for (index = 0; index < obj_desc->package.count; index++) {
-                               acpi_ex_dump_operand (obj_desc->package.elements[index], depth+1);
+                   obj_desc->package.elements && acpi_dbg_level > 1) {
+                       for (index = 0; index < obj_desc->package.count;
+                            index++) {
+                               acpi_ex_dump_operand(obj_desc->package.
+                                                    elements[index],
+                                                    depth + 1);
                        }
                }
                break;
 
-
        case ACPI_TYPE_REGION:
 
-               acpi_os_printf ("Region %s (%X)",
-                       acpi_ut_get_region_name (obj_desc->region.space_id),
-                       obj_desc->region.space_id);
+               acpi_os_printf("Region %s (%X)",
+                              acpi_ut_get_region_name(obj_desc->region.
+                                                      space_id),
+                              obj_desc->region.space_id);
 
                /*
                 * If the address and length have not been evaluated,
                 * don't print them.
                 */
                if (!(obj_desc->region.flags & AOPOBJ_DATA_VALID)) {
-                       acpi_os_printf ("\n");
-               }
-               else {
-                       acpi_os_printf (" base %8.8X%8.8X Length %X\n",
-                               ACPI_FORMAT_UINT64 (obj_desc->region.address),
-                               obj_desc->region.length);
+                       acpi_os_printf("\n");
+               } else {
+                       acpi_os_printf(" base %8.8X%8.8X Length %X\n",
+                                      ACPI_FORMAT_UINT64(obj_desc->region.
+                                                         address),
+                                      obj_desc->region.length);
                }
                break;
 
-
        case ACPI_TYPE_STRING:
 
-               acpi_os_printf ("String length %X @ %p ",
-                       obj_desc->string.length,
-                       obj_desc->string.pointer);
+               acpi_os_printf("String length %X @ %p ",
+                              obj_desc->string.length,
+                              obj_desc->string.pointer);
 
-               acpi_ut_print_string (obj_desc->string.pointer, ACPI_UINT8_MAX);
-               acpi_os_printf ("\n");
+               acpi_ut_print_string(obj_desc->string.pointer, ACPI_UINT8_MAX);
+               acpi_os_printf("\n");
                break;
 
-
        case ACPI_TYPE_LOCAL_BANK_FIELD:
 
-               acpi_os_printf ("bank_field\n");
+               acpi_os_printf("bank_field\n");
                break;
 
-
        case ACPI_TYPE_LOCAL_REGION_FIELD:
 
-               acpi_os_printf (
-                       "region_field: Bits=%X acc_width=%X Lock=%X Update=%X at byte=%X bit=%X of below:\n",
-                       obj_desc->field.bit_length,
-                       obj_desc->field.access_byte_width,
-                       obj_desc->field.field_flags & AML_FIELD_LOCK_RULE_MASK,
-                       obj_desc->field.field_flags & AML_FIELD_UPDATE_RULE_MASK,
-                       obj_desc->field.base_byte_offset,
-                       obj_desc->field.start_field_bit_offset);
+               acpi_os_printf
+                   ("region_field: Bits=%X acc_width=%X Lock=%X Update=%X at byte=%X bit=%X of below:\n",
+                    obj_desc->field.bit_length,
+                    obj_desc->field.access_byte_width,
+                    obj_desc->field.field_flags & AML_FIELD_LOCK_RULE_MASK,
+                    obj_desc->field.field_flags & AML_FIELD_UPDATE_RULE_MASK,
+                    obj_desc->field.base_byte_offset,
+                    obj_desc->field.start_field_bit_offset);
 
-               acpi_ex_dump_operand (obj_desc->field.region_obj, depth+1);
+               acpi_ex_dump_operand(obj_desc->field.region_obj, depth + 1);
                break;
 
-
        case ACPI_TYPE_LOCAL_INDEX_FIELD:
 
-               acpi_os_printf ("index_field\n");
+               acpi_os_printf("index_field\n");
                break;
 
-
        case ACPI_TYPE_BUFFER_FIELD:
 
-               acpi_os_printf (
-                       "buffer_field: %X bits at byte %X bit %X of \n",
-                       obj_desc->buffer_field.bit_length,
-                       obj_desc->buffer_field.base_byte_offset,
-                       obj_desc->buffer_field.start_field_bit_offset);
+               acpi_os_printf("buffer_field: %X bits at byte %X bit %X of \n",
+                              obj_desc->buffer_field.bit_length,
+                              obj_desc->buffer_field.base_byte_offset,
+                              obj_desc->buffer_field.start_field_bit_offset);
 
                if (!obj_desc->buffer_field.buffer_obj) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL* \n"));
-               }
-               else if (ACPI_GET_OBJECT_TYPE (obj_desc->buffer_field.buffer_obj) !=
-                                ACPI_TYPE_BUFFER) {
-                       acpi_os_printf ("*not a Buffer* \n");
-               }
-               else {
-                       acpi_ex_dump_operand (obj_desc->buffer_field.buffer_obj, depth+1);
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "*NULL* \n"));
+               } else
+                   if (ACPI_GET_OBJECT_TYPE(obj_desc->buffer_field.buffer_obj)
+                       != ACPI_TYPE_BUFFER) {
+                       acpi_os_printf("*not a Buffer* \n");
+               } else {
+                       acpi_ex_dump_operand(obj_desc->buffer_field.buffer_obj,
+                                            depth + 1);
                }
                break;
 
-
        case ACPI_TYPE_EVENT:
 
-               acpi_os_printf ("Event\n");
+               acpi_os_printf("Event\n");
                break;
 
-
        case ACPI_TYPE_METHOD:
 
-               acpi_os_printf ("Method(%X) @ %p:%X\n",
-                       obj_desc->method.param_count,
-                       obj_desc->method.aml_start,
-                       obj_desc->method.aml_length);
+               acpi_os_printf("Method(%X) @ %p:%X\n",
+                              obj_desc->method.param_count,
+                              obj_desc->method.aml_start,
+                              obj_desc->method.aml_length);
                break;
 
-
        case ACPI_TYPE_MUTEX:
 
-               acpi_os_printf ("Mutex\n");
+               acpi_os_printf("Mutex\n");
                break;
 
-
        case ACPI_TYPE_DEVICE:
 
-               acpi_os_printf ("Device\n");
+               acpi_os_printf("Device\n");
                break;
 
-
        case ACPI_TYPE_POWER:
 
-               acpi_os_printf ("Power\n");
+               acpi_os_printf("Power\n");
                break;
 
-
        case ACPI_TYPE_PROCESSOR:
 
-               acpi_os_printf ("Processor\n");
+               acpi_os_printf("Processor\n");
                break;
 
-
        case ACPI_TYPE_THERMAL:
 
-               acpi_os_printf ("Thermal\n");
+               acpi_os_printf("Thermal\n");
                break;
 
-
        default:
                /* Unknown Type */
 
-               acpi_os_printf ("Unknown Type %X\n", ACPI_GET_OBJECT_TYPE (obj_desc));
+               acpi_os_printf("Unknown Type %X\n",
+                              ACPI_GET_OBJECT_TYPE(obj_desc));
                break;
        }
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_dump_operands
@@ -429,20 +403,15 @@ acpi_ex_dump_operand (
  ******************************************************************************/
 
 void
-acpi_ex_dump_operands (
-       union acpi_operand_object       **operands,
-       acpi_interpreter_mode           interpreter_mode,
-       char                            *ident,
-       u32                             num_levels,
-       char                            *note,
-       char                            *module_name,
-       u32                             line_number)
+acpi_ex_dump_operands(union acpi_operand_object **operands,
+                     acpi_interpreter_mode interpreter_mode,
+                     char *ident,
+                     u32 num_levels,
+                     char *note, char *module_name, u32 line_number)
 {
-       acpi_native_uint                i;
-
-
-       ACPI_FUNCTION_NAME ("ex_dump_operands");
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_NAME("ex_dump_operands");
 
        if (!ident) {
                ident = "?";
@@ -452,9 +421,9 @@ acpi_ex_dump_operands (
                note = "?";
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "************* Operand Stack Contents (Opcode [%s], %d Operands)\n",
-               ident, num_levels));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "************* Operand Stack Contents (Opcode [%s], %d Operands)\n",
+                         ident, num_levels));
 
        if (num_levels == 0) {
                num_levels = 1;
@@ -463,16 +432,15 @@ acpi_ex_dump_operands (
        /* Dump the operand stack starting at the top */
 
        for (i = 0; num_levels > 0; i--, num_levels--) {
-               acpi_ex_dump_operand (operands[i], 0);
+               acpi_ex_dump_operand(operands[i], 0);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "************* Stack dump from %s(%d), %s\n",
-               module_name, line_number, note));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "************* Operand Stack dump from %s(%d), %s\n",
+                         module_name, line_number, note));
        return;
 }
 
-
 #ifdef ACPI_FUTURE_USAGE
 /*******************************************************************************
  *
@@ -487,44 +455,31 @@ acpi_ex_dump_operands (
  *
  ******************************************************************************/
 
-static void
-acpi_ex_out_string (
-       char                            *title,
-       char                            *value)
+static void acpi_ex_out_string(char *title, char *value)
 {
-       acpi_os_printf ("%20s : %s\n", title, value);
+       acpi_os_printf("%20s : %s\n", title, value);
 }
 
-static void
-acpi_ex_out_pointer (
-       char                            *title,
-       void                            *value)
+static void acpi_ex_out_pointer(char *title, void *value)
 {
-       acpi_os_printf ("%20s : %p\n", title, value);
+       acpi_os_printf("%20s : %p\n", title, value);
 }
 
-static void
-acpi_ex_out_integer (
-       char                            *title,
-       u32                             value)
+static void acpi_ex_out_integer(char *title, u32 value)
 {
-       acpi_os_printf ("%20s : %X\n", title, value);
+       acpi_os_printf("%20s : %.2X\n", title, value);
 }
 
-static void
-acpi_ex_out_address (
-       char                            *title,
-       acpi_physical_address           value)
+static void acpi_ex_out_address(char *title, acpi_physical_address value)
 {
 
 #if ACPI_MACHINE_WIDTH == 16
-       acpi_os_printf ("%20s : %p\n", title, value);
+       acpi_os_printf("%20s : %p\n", title, value);
 #else
-       acpi_os_printf ("%20s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64 (value));
+       acpi_os_printf("%20s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value));
 #endif
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_dump_node
@@ -536,38 +491,161 @@ acpi_ex_out_address (
  *
  ******************************************************************************/
 
-void
-acpi_ex_dump_node (
-       struct acpi_namespace_node      *node,
-       u32                             flags)
+void acpi_ex_dump_node(struct acpi_namespace_node *node, u32 flags)
 {
 
-       ACPI_FUNCTION_ENTRY ();
-
+       ACPI_FUNCTION_ENTRY();
 
        if (!flags) {
-               if (!((ACPI_LV_OBJECTS & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer))) {
+               if (!
+                   ((ACPI_LV_OBJECTS & acpi_dbg_level)
+                    && (_COMPONENT & acpi_dbg_layer))) {
                        return;
                }
        }
 
-       acpi_os_printf ("%20s : %4.4s\n",     "Name", acpi_ut_get_node_name (node));
-       acpi_ex_out_string ("Type",           acpi_ut_get_type_name (node->type));
-       acpi_ex_out_integer ("Flags",         node->flags);
-       acpi_ex_out_integer ("Owner Id",      node->owner_id);
-       acpi_ex_out_integer ("Reference Count", node->reference_count);
-       acpi_ex_out_pointer ("Attached Object", acpi_ns_get_attached_object (node));
-       acpi_ex_out_pointer ("child_list",    node->child);
-       acpi_ex_out_pointer ("next_peer",     node->peer);
-       acpi_ex_out_pointer ("Parent",        acpi_ns_get_parent_node (node));
+       acpi_os_printf("%20s : %4.4s\n", "Name", acpi_ut_get_node_name(node));
+       acpi_ex_out_string("Type", acpi_ut_get_type_name(node->type));
+       acpi_ex_out_integer("Flags", node->flags);
+       acpi_ex_out_integer("Owner Id", node->owner_id);
+       acpi_ex_out_integer("Reference Count", node->reference_count);
+       acpi_ex_out_pointer("Attached Object",
+                           acpi_ns_get_attached_object(node));
+       acpi_ex_out_pointer("child_list", node->child);
+       acpi_ex_out_pointer("next_peer", node->peer);
+       acpi_ex_out_pointer("Parent", acpi_ns_get_parent_node(node));
 }
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_dump_reference
+ *
+ * PARAMETERS:  Object              - Descriptor to dump
+ *
+ * DESCRIPTION: Dumps a reference object
+ *
+ ******************************************************************************/
+
+static void acpi_ex_dump_reference(union acpi_operand_object *obj_desc)
+{
+       struct acpi_buffer ret_buf;
+       acpi_status status;
+
+       if (obj_desc->reference.opcode == AML_INT_NAMEPATH_OP) {
+               acpi_os_printf("Named Object %p ", obj_desc->reference.node);
+               ret_buf.length = ACPI_ALLOCATE_LOCAL_BUFFER;
+               status =
+                   acpi_ns_handle_to_pathname(obj_desc->reference.node,
+                                              &ret_buf);
+               if (ACPI_FAILURE(status)) {
+                       acpi_os_printf("Could not convert name to pathname\n");
+               } else {
+                       acpi_os_printf("%s\n", (char *)ret_buf.pointer);
+                       ACPI_MEM_FREE(ret_buf.pointer);
+               }
+       } else if (obj_desc->reference.object) {
+               acpi_os_printf("\nReferenced Object: %p\n",
+                              obj_desc->reference.object);
+       }
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_dump_package
+ *
+ * PARAMETERS:  Object              - Descriptor to dump
+ *              Level               - Indentation Level
+ *              Index               - Package index for this object
+ *
+ * DESCRIPTION: Dumps the elements of the package
+ *
+ ******************************************************************************/
+
+static void
+acpi_ex_dump_package(union acpi_operand_object *obj_desc, u32 level, u32 index)
+{
+       u32 i;
+
+       /* Indentation and index output */
+
+       if (level > 0) {
+               for (i = 0; i < level; i++) {
+                       acpi_os_printf(" ");
+               }
+
+               acpi_os_printf("[%.2d] ", index);
+       }
+
+       acpi_os_printf("%p ", obj_desc);
+
+       /* Null package elements are allowed */
+
+       if (!obj_desc) {
+               acpi_os_printf("[Null Object]\n");
+               return;
+       }
+
+       /* Packages may only contain a few object types */
+
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
+       case ACPI_TYPE_INTEGER:
+
+               acpi_os_printf("[Integer] = %8.8X%8.8X\n",
+                              ACPI_FORMAT_UINT64(obj_desc->integer.value));
+               break;
+
+       case ACPI_TYPE_STRING:
+
+               acpi_os_printf("[String] Value: ");
+               for (i = 0; i < obj_desc->string.length; i++) {
+                       acpi_os_printf("%c", obj_desc->string.pointer[i]);
+               }
+               acpi_os_printf("\n");
+               break;
+
+       case ACPI_TYPE_BUFFER:
+
+               acpi_os_printf("[Buffer] Length %.2X = ",
+                              obj_desc->buffer.length);
+               if (obj_desc->buffer.length) {
+                       acpi_ut_dump_buffer((u8 *) obj_desc->buffer.pointer,
+                                           obj_desc->buffer.length,
+                                           DB_DWORD_DISPLAY, _COMPONENT);
+               } else {
+                       acpi_os_printf("\n");
+               }
+               break;
+
+       case ACPI_TYPE_PACKAGE:
+
+               acpi_os_printf("[Package] Contains %d Elements: \n",
+                              obj_desc->package.count);
+
+               for (i = 0; i < obj_desc->package.count; i++) {
+                       acpi_ex_dump_package(obj_desc->package.elements[i],
+                                            level + 1, i);
+               }
+               break;
+
+       case ACPI_TYPE_LOCAL_REFERENCE:
+
+               acpi_os_printf("[Object Reference] ");
+               acpi_ex_dump_reference(obj_desc);
+               break;
+
+       default:
+
+               acpi_os_printf("[Unknown Type] %X\n",
+                              ACPI_GET_OBJECT_TYPE(obj_desc));
+               break;
+       }
+}
 
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_dump_object_descriptor
  *
- * PARAMETERS:  *Object             - Descriptor to dump
+ * PARAMETERS:  Object              - Descriptor to dump
  *              Flags               - Force display if TRUE
  *
  * DESCRIPTION: Dumps the members of the object descriptor given.
@@ -575,202 +653,213 @@ acpi_ex_dump_node (
  ******************************************************************************/
 
 void
-acpi_ex_dump_object_descriptor (
-       union acpi_operand_object       *obj_desc,
-       u32                             flags)
+acpi_ex_dump_object_descriptor(union acpi_operand_object *obj_desc, u32 flags)
 {
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("ex_dump_object_descriptor");
-
+       ACPI_FUNCTION_TRACE("ex_dump_object_descriptor");
 
        if (!obj_desc) {
                return_VOID;
        }
 
        if (!flags) {
-               if (!((ACPI_LV_OBJECTS & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer))) {
+               if (!
+                   ((ACPI_LV_OBJECTS & acpi_dbg_level)
+                    && (_COMPONENT & acpi_dbg_layer))) {
                        return_VOID;
                }
        }
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) {
-               acpi_ex_dump_node ((struct acpi_namespace_node *) obj_desc, flags);
-               acpi_os_printf ("\nAttached Object (%p):\n",
-                       ((struct acpi_namespace_node *) obj_desc)->object);
-               acpi_ex_dump_object_descriptor (
-                       ((struct acpi_namespace_node *) obj_desc)->object, flags);
+       if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) == ACPI_DESC_TYPE_NAMED) {
+               acpi_ex_dump_node((struct acpi_namespace_node *)obj_desc,
+                                 flags);
+               acpi_os_printf("\nAttached Object (%p):\n",
+                              ((struct acpi_namespace_node *)obj_desc)->
+                              object);
+               acpi_ex_dump_object_descriptor(((struct acpi_namespace_node *)
+                                               obj_desc)->object, flags);
                return_VOID;
        }
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) {
-               acpi_os_printf (
-                       "ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]\n",
-                       obj_desc, acpi_ut_get_descriptor_name (obj_desc));
+       if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) != ACPI_DESC_TYPE_OPERAND) {
+               acpi_os_printf
+                   ("ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]\n",
+                    obj_desc, acpi_ut_get_descriptor_name(obj_desc));
                return_VOID;
        }
 
        /* Common Fields */
 
-       acpi_ex_out_string ("Type",             acpi_ut_get_object_type_name (obj_desc));
-       acpi_ex_out_integer ("Reference Count", obj_desc->common.reference_count);
-       acpi_ex_out_integer ("Flags",           obj_desc->common.flags);
+       acpi_ex_out_string("Type", acpi_ut_get_object_type_name(obj_desc));
+       acpi_ex_out_integer("Reference Count",
+                           obj_desc->common.reference_count);
+       acpi_ex_out_integer("Flags", obj_desc->common.flags);
 
        /* Object-specific Fields */
 
-       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
        case ACPI_TYPE_INTEGER:
 
-               acpi_os_printf ("%20s : %8.8X%8.8X\n", "Value",
-                               ACPI_FORMAT_UINT64 (obj_desc->integer.value));
+               acpi_os_printf("%20s : %8.8X%8.8X\n", "Value",
+                              ACPI_FORMAT_UINT64(obj_desc->integer.value));
                break;
 
-
        case ACPI_TYPE_STRING:
 
-               acpi_ex_out_integer ("Length",      obj_desc->string.length);
+               acpi_ex_out_integer("Length", obj_desc->string.length);
 
-               acpi_os_printf ("%20s : %p ", "Pointer", obj_desc->string.pointer);
-               acpi_ut_print_string (obj_desc->string.pointer, ACPI_UINT8_MAX);
-               acpi_os_printf ("\n");
+               acpi_os_printf("%20s : %p ", "Pointer",
+                              obj_desc->string.pointer);
+               acpi_ut_print_string(obj_desc->string.pointer, ACPI_UINT8_MAX);
+               acpi_os_printf("\n");
                break;
 
-
        case ACPI_TYPE_BUFFER:
 
-               acpi_ex_out_integer ("Length",      obj_desc->buffer.length);
-               acpi_ex_out_pointer ("Pointer",     obj_desc->buffer.pointer);
-               ACPI_DUMP_BUFFER (obj_desc->buffer.pointer, obj_desc->buffer.length);
+               acpi_ex_out_integer("Length", obj_desc->buffer.length);
+               acpi_ex_out_pointer("Pointer", obj_desc->buffer.pointer);
+               ACPI_DUMP_BUFFER(obj_desc->buffer.pointer,
+                                obj_desc->buffer.length);
                break;
 
-
        case ACPI_TYPE_PACKAGE:
 
-               acpi_ex_out_integer ("Flags",       obj_desc->package.flags);
-               acpi_ex_out_integer ("Count",       obj_desc->package.count);
-               acpi_ex_out_pointer ("Elements",    obj_desc->package.elements);
+               acpi_ex_out_integer("Flags", obj_desc->package.flags);
+               acpi_ex_out_integer("Elements", obj_desc->package.count);
+               acpi_ex_out_pointer("Element List", obj_desc->package.elements);
 
                /* Dump the package contents */
 
-               if (obj_desc->package.count > 0) {
-                       acpi_os_printf ("\nPackage Contents:\n");
-                       for (i = 0; i < obj_desc->package.count; i++) {
-                               acpi_os_printf ("[%.3d] %p", i, obj_desc->package.elements[i]);
-                               if (obj_desc->package.elements[i]) {
-                                       acpi_os_printf (" %s",
-                                               acpi_ut_get_object_type_name (obj_desc->package.elements[i]));
-                               }
-                               acpi_os_printf ("\n");
-                       }
-               }
+               acpi_os_printf("\nPackage Contents:\n");
+               acpi_ex_dump_package(obj_desc, 0, 0);
                break;
 
-
        case ACPI_TYPE_DEVICE:
 
-               acpi_ex_out_pointer ("Handler",     obj_desc->device.handler);
-               acpi_ex_out_pointer ("system_notify", obj_desc->device.system_notify);
-               acpi_ex_out_pointer ("device_notify", obj_desc->device.device_notify);
+               acpi_ex_out_pointer("Handler", obj_desc->device.handler);
+               acpi_ex_out_pointer("system_notify",
+                                   obj_desc->device.system_notify);
+               acpi_ex_out_pointer("device_notify",
+                                   obj_desc->device.device_notify);
                break;
 
-
        case ACPI_TYPE_EVENT:
 
-               acpi_ex_out_pointer ("Semaphore",   obj_desc->event.semaphore);
+               acpi_ex_out_pointer("Semaphore", obj_desc->event.semaphore);
                break;
 
-
        case ACPI_TYPE_METHOD:
 
-               acpi_ex_out_integer ("param_count", obj_desc->method.param_count);
-               acpi_ex_out_integer ("Concurrency", obj_desc->method.concurrency);
-               acpi_ex_out_pointer ("Semaphore",   obj_desc->method.semaphore);
-               acpi_ex_out_integer ("owning_id",   obj_desc->method.owning_id);
-               acpi_ex_out_integer ("aml_length",  obj_desc->method.aml_length);
-               acpi_ex_out_pointer ("aml_start",   obj_desc->method.aml_start);
+               acpi_ex_out_integer("param_count",
+                                   obj_desc->method.param_count);
+               acpi_ex_out_integer("Concurrency",
+                                   obj_desc->method.concurrency);
+               acpi_ex_out_pointer("Semaphore", obj_desc->method.semaphore);
+               acpi_ex_out_integer("owner_id", obj_desc->method.owner_id);
+               acpi_ex_out_integer("aml_length", obj_desc->method.aml_length);
+               acpi_ex_out_pointer("aml_start", obj_desc->method.aml_start);
                break;
 
-
        case ACPI_TYPE_MUTEX:
 
-               acpi_ex_out_integer ("sync_level",  obj_desc->mutex.sync_level);
-               acpi_ex_out_pointer ("owner_thread", obj_desc->mutex.owner_thread);
-               acpi_ex_out_integer ("acquire_depth", obj_desc->mutex.acquisition_depth);
-               acpi_ex_out_pointer ("Semaphore",   obj_desc->mutex.semaphore);
+               acpi_ex_out_integer("sync_level", obj_desc->mutex.sync_level);
+               acpi_ex_out_pointer("owner_thread",
+                                   obj_desc->mutex.owner_thread);
+               acpi_ex_out_integer("acquire_depth",
+                                   obj_desc->mutex.acquisition_depth);
+               acpi_ex_out_pointer("Semaphore", obj_desc->mutex.semaphore);
                break;
 
-
        case ACPI_TYPE_REGION:
 
-               acpi_ex_out_integer ("space_id",    obj_desc->region.space_id);
-               acpi_ex_out_integer ("Flags",       obj_desc->region.flags);
-               acpi_ex_out_address ("Address",     obj_desc->region.address);
-               acpi_ex_out_integer ("Length",      obj_desc->region.length);
-               acpi_ex_out_pointer ("Handler",     obj_desc->region.handler);
-               acpi_ex_out_pointer ("Next",        obj_desc->region.next);
+               acpi_ex_out_integer("space_id", obj_desc->region.space_id);
+               acpi_ex_out_integer("Flags", obj_desc->region.flags);
+               acpi_ex_out_address("Address", obj_desc->region.address);
+               acpi_ex_out_integer("Length", obj_desc->region.length);
+               acpi_ex_out_pointer("Handler", obj_desc->region.handler);
+               acpi_ex_out_pointer("Next", obj_desc->region.next);
                break;
 
-
        case ACPI_TYPE_POWER:
 
-               acpi_ex_out_integer ("system_level", obj_desc->power_resource.system_level);
-               acpi_ex_out_integer ("resource_order", obj_desc->power_resource.resource_order);
-               acpi_ex_out_pointer ("system_notify", obj_desc->power_resource.system_notify);
-               acpi_ex_out_pointer ("device_notify", obj_desc->power_resource.device_notify);
+               acpi_ex_out_integer("system_level",
+                                   obj_desc->power_resource.system_level);
+               acpi_ex_out_integer("resource_order",
+                                   obj_desc->power_resource.resource_order);
+               acpi_ex_out_pointer("system_notify",
+                                   obj_desc->power_resource.system_notify);
+               acpi_ex_out_pointer("device_notify",
+                                   obj_desc->power_resource.device_notify);
                break;
 
-
        case ACPI_TYPE_PROCESSOR:
 
-               acpi_ex_out_integer ("Processor ID", obj_desc->processor.proc_id);
-               acpi_ex_out_integer ("Length",      obj_desc->processor.length);
-               acpi_ex_out_address ("Address",     (acpi_physical_address) obj_desc->processor.address);
-               acpi_ex_out_pointer ("system_notify", obj_desc->processor.system_notify);
-               acpi_ex_out_pointer ("device_notify", obj_desc->processor.device_notify);
-               acpi_ex_out_pointer ("Handler",     obj_desc->processor.handler);
+               acpi_ex_out_integer("Processor ID",
+                                   obj_desc->processor.proc_id);
+               acpi_ex_out_integer("Length", obj_desc->processor.length);
+               acpi_ex_out_address("Address",
+                                   (acpi_physical_address) obj_desc->processor.
+                                   address);
+               acpi_ex_out_pointer("system_notify",
+                                   obj_desc->processor.system_notify);
+               acpi_ex_out_pointer("device_notify",
+                                   obj_desc->processor.device_notify);
+               acpi_ex_out_pointer("Handler", obj_desc->processor.handler);
                break;
 
-
        case ACPI_TYPE_THERMAL:
 
-               acpi_ex_out_pointer ("system_notify", obj_desc->thermal_zone.system_notify);
-               acpi_ex_out_pointer ("device_notify", obj_desc->thermal_zone.device_notify);
-               acpi_ex_out_pointer ("Handler",     obj_desc->thermal_zone.handler);
+               acpi_ex_out_pointer("system_notify",
+                                   obj_desc->thermal_zone.system_notify);
+               acpi_ex_out_pointer("device_notify",
+                                   obj_desc->thermal_zone.device_notify);
+               acpi_ex_out_pointer("Handler", obj_desc->thermal_zone.handler);
                break;
 
-
        case ACPI_TYPE_BUFFER_FIELD:
        case ACPI_TYPE_LOCAL_REGION_FIELD:
        case ACPI_TYPE_LOCAL_BANK_FIELD:
        case ACPI_TYPE_LOCAL_INDEX_FIELD:
 
-               acpi_ex_out_integer ("field_flags", obj_desc->common_field.field_flags);
-               acpi_ex_out_integer ("access_byte_width",obj_desc->common_field.access_byte_width);
-               acpi_ex_out_integer ("bit_length",  obj_desc->common_field.bit_length);
-               acpi_ex_out_integer ("fld_bit_offset", obj_desc->common_field.start_field_bit_offset);
-               acpi_ex_out_integer ("base_byte_offset", obj_desc->common_field.base_byte_offset);
-               acpi_ex_out_pointer ("parent_node", obj_desc->common_field.node);
-
-               switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+               acpi_ex_out_integer("field_flags",
+                                   obj_desc->common_field.field_flags);
+               acpi_ex_out_integer("access_byte_width",
+                                   obj_desc->common_field.access_byte_width);
+               acpi_ex_out_integer("bit_length",
+                                   obj_desc->common_field.bit_length);
+               acpi_ex_out_integer("fld_bit_offset",
+                                   obj_desc->common_field.
+                                   start_field_bit_offset);
+               acpi_ex_out_integer("base_byte_offset",
+                                   obj_desc->common_field.base_byte_offset);
+               acpi_ex_out_pointer("parent_node", obj_desc->common_field.node);
+
+               switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
                case ACPI_TYPE_BUFFER_FIELD:
-                       acpi_ex_out_pointer ("buffer_obj", obj_desc->buffer_field.buffer_obj);
+                       acpi_ex_out_pointer("buffer_obj",
+                                           obj_desc->buffer_field.buffer_obj);
                        break;
 
                case ACPI_TYPE_LOCAL_REGION_FIELD:
-                       acpi_ex_out_pointer ("region_obj", obj_desc->field.region_obj);
+                       acpi_ex_out_pointer("region_obj",
+                                           obj_desc->field.region_obj);
                        break;
 
                case ACPI_TYPE_LOCAL_BANK_FIELD:
-                       acpi_ex_out_integer ("Value",   obj_desc->bank_field.value);
-                       acpi_ex_out_pointer ("region_obj", obj_desc->bank_field.region_obj);
-                       acpi_ex_out_pointer ("bank_obj", obj_desc->bank_field.bank_obj);
+                       acpi_ex_out_integer("Value",
+                                           obj_desc->bank_field.value);
+                       acpi_ex_out_pointer("region_obj",
+                                           obj_desc->bank_field.region_obj);
+                       acpi_ex_out_pointer("bank_obj",
+                                           obj_desc->bank_field.bank_obj);
                        break;
 
                case ACPI_TYPE_LOCAL_INDEX_FIELD:
-                       acpi_ex_out_integer ("Value",   obj_desc->index_field.value);
-                       acpi_ex_out_pointer ("Index",   obj_desc->index_field.index_obj);
-                       acpi_ex_out_pointer ("Data",    obj_desc->index_field.data_obj);
+                       acpi_ex_out_integer("Value",
+                                           obj_desc->index_field.value);
+                       acpi_ex_out_pointer("Index",
+                                           obj_desc->index_field.index_obj);
+                       acpi_ex_out_pointer("Data",
+                                           obj_desc->index_field.data_obj);
                        break;
 
                default:
@@ -779,56 +868,52 @@ acpi_ex_dump_object_descriptor (
                }
                break;
 
-
        case ACPI_TYPE_LOCAL_REFERENCE:
 
-               acpi_ex_out_integer ("target_type", obj_desc->reference.target_type);
-               acpi_ex_out_string ("Opcode",       (acpi_ps_get_opcode_info (
-                                 obj_desc->reference.opcode))->name);
-               acpi_ex_out_integer ("Offset",      obj_desc->reference.offset);
-               acpi_ex_out_pointer ("obj_desc",    obj_desc->reference.object);
-               acpi_ex_out_pointer ("Node",        obj_desc->reference.node);
-               acpi_ex_out_pointer ("Where",       obj_desc->reference.where);
-
-               if (obj_desc->reference.object) {
-                       acpi_os_printf ("\nReferenced Object:\n");
-                       acpi_ex_dump_object_descriptor (obj_desc->reference.object, flags);
-               }
-               break;
+               acpi_ex_out_integer("target_type",
+                                   obj_desc->reference.target_type);
+               acpi_ex_out_string("Opcode",
+                                  (acpi_ps_get_opcode_info
+                                   (obj_desc->reference.opcode))->name);
+               acpi_ex_out_integer("Offset", obj_desc->reference.offset);
+               acpi_ex_out_pointer("obj_desc", obj_desc->reference.object);
+               acpi_ex_out_pointer("Node", obj_desc->reference.node);
+               acpi_ex_out_pointer("Where", obj_desc->reference.where);
 
+               acpi_ex_dump_reference(obj_desc);
+               break;
 
        case ACPI_TYPE_LOCAL_ADDRESS_HANDLER:
 
-               acpi_ex_out_integer ("space_id",    obj_desc->address_space.space_id);
-               acpi_ex_out_pointer ("Next",        obj_desc->address_space.next);
-               acpi_ex_out_pointer ("region_list", obj_desc->address_space.region_list);
-               acpi_ex_out_pointer ("Node",        obj_desc->address_space.node);
-               acpi_ex_out_pointer ("Context",     obj_desc->address_space.context);
+               acpi_ex_out_integer("space_id",
+                                   obj_desc->address_space.space_id);
+               acpi_ex_out_pointer("Next", obj_desc->address_space.next);
+               acpi_ex_out_pointer("region_list",
+                                   obj_desc->address_space.region_list);
+               acpi_ex_out_pointer("Node", obj_desc->address_space.node);
+               acpi_ex_out_pointer("Context", obj_desc->address_space.context);
                break;
 
-
        case ACPI_TYPE_LOCAL_NOTIFY:
 
-               acpi_ex_out_pointer ("Node",        obj_desc->notify.node);
-               acpi_ex_out_pointer ("Context",     obj_desc->notify.context);
+               acpi_ex_out_pointer("Node", obj_desc->notify.node);
+               acpi_ex_out_pointer("Context", obj_desc->notify.context);
                break;
 
-
        case ACPI_TYPE_LOCAL_ALIAS:
        case ACPI_TYPE_LOCAL_METHOD_ALIAS:
        case ACPI_TYPE_LOCAL_EXTRA:
        case ACPI_TYPE_LOCAL_DATA:
        default:
 
-               acpi_os_printf (
-                       "ex_dump_object_descriptor: Display not implemented for object type %s\n",
-                       acpi_ut_get_object_type_name (obj_desc));
+               acpi_os_printf
+                   ("ex_dump_object_descriptor: Display not implemented for object type %s\n",
+                    acpi_ut_get_object_type_name(obj_desc));
                break;
        }
 
        return_VOID;
 }
 
-#endif  /*  ACPI_FUTURE_USAGE  */
+#endif                         /*  ACPI_FUTURE_USAGE  */
 #endif
-
index 22c8fa480f60f6669a48bebbeb1b2765f32034ee..ab1ba399aa283bfbe18070cdfd61fc98474f2583 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acdispat.h>
 #include <acpi/acinterp.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exfield")
-
+ACPI_MODULE_NAME("exfield")
 
 /*******************************************************************************
  *
  *              Buffer, depending on the size of the field.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ex_read_data_from_field (
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **ret_buffer_desc)
+acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
+                            union acpi_operand_object *obj_desc,
+                            union acpi_operand_object **ret_buffer_desc)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *buffer_desc;
-       acpi_size                       length;
-       void                            *buffer;
-       u8                              locked;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_read_data_from_field", obj_desc);
+       acpi_status status;
+       union acpi_operand_object *buffer_desc;
+       acpi_size length;
+       void *buffer;
+       u8 locked;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_read_data_from_field", obj_desc);
 
        /* Parameter validation */
 
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_AML_NO_OPERAND);
+               return_ACPI_STATUS(AE_AML_NO_OPERAND);
+       }
+       if (!ret_buffer_desc) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_BUFFER_FIELD) {
+       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_BUFFER_FIELD) {
                /*
                 * If the buffer_field arguments have not been previously evaluated,
                 * evaluate them now and save the results.
                 */
                if (!(obj_desc->common.flags & AOPOBJ_DATA_VALID)) {
-                       status = acpi_ds_get_buffer_field_arguments (obj_desc);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status = acpi_ds_get_buffer_field_arguments(obj_desc);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
                }
-       }
-       else if ((ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_LOCAL_REGION_FIELD) &&
-                        (obj_desc->field.region_obj->region.space_id == ACPI_ADR_SPACE_SMBUS)) {
+       } else
+           if ((ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_REGION_FIELD)
+               && (obj_desc->field.region_obj->region.space_id ==
+                   ACPI_ADR_SPACE_SMBUS)) {
                /*
                 * This is an SMBus read.  We must create a buffer to hold the data
                 * and directly access the region handler.
                 */
-               buffer_desc = acpi_ut_create_buffer_object (ACPI_SMBUS_BUFFER_SIZE);
+               buffer_desc =
+                   acpi_ut_create_buffer_object(ACPI_SMBUS_BUFFER_SIZE);
                if (!buffer_desc) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                /* Lock entire transaction if requested */
 
-               locked = acpi_ex_acquire_global_lock (obj_desc->common_field.field_flags);
+               locked =
+                   acpi_ex_acquire_global_lock(obj_desc->common_field.
+                                               field_flags);
 
                /*
                 * Perform the read.
                 * Note: Smbus protocol value is passed in upper 16-bits of Function
                 */
-               status = acpi_ex_access_region (obj_desc, 0,
-                                ACPI_CAST_PTR (acpi_integer, buffer_desc->buffer.pointer),
-                                ACPI_READ | (obj_desc->field.attribute << 16));
-               acpi_ex_release_global_lock (locked);
+               status = acpi_ex_access_region(obj_desc, 0,
+                                              ACPI_CAST_PTR(acpi_integer,
+                                                            buffer_desc->
+                                                            buffer.pointer),
+                                              ACPI_READ | (obj_desc->field.
+                                                           attribute << 16));
+               acpi_ex_release_global_lock(locked);
                goto exit;
        }
 
@@ -136,22 +139,22 @@ acpi_ex_read_data_from_field (
         *
         * Note: Field.length is in bits.
         */
-       length = (acpi_size) ACPI_ROUND_BITS_UP_TO_BYTES (obj_desc->field.bit_length);
+       length =
+           (acpi_size) ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->field.bit_length);
        if (length > acpi_gbl_integer_byte_width) {
                /* Field is too large for an Integer, create a Buffer instead */
 
-               buffer_desc = acpi_ut_create_buffer_object (length);
+               buffer_desc = acpi_ut_create_buffer_object(length);
                if (!buffer_desc) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
                buffer = buffer_desc->buffer.pointer;
-       }
-       else {
+       } else {
                /* Field will fit within an Integer (normal case) */
 
-               buffer_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               buffer_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!buffer_desc) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                length = acpi_gbl_integer_byte_width;
@@ -159,37 +162,36 @@ acpi_ex_read_data_from_field (
                buffer = &buffer_desc->integer.value;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-               "field_read [TO]:  Obj %p, Type %X, Buf %p, byte_len %X\n",
-               obj_desc, ACPI_GET_OBJECT_TYPE (obj_desc), buffer, (u32) length));
-       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-               "field_read [FROM]: bit_len %X, bit_off %X, byte_off %X\n",
-               obj_desc->common_field.bit_length,
-               obj_desc->common_field.start_field_bit_offset,
-               obj_desc->common_field.base_byte_offset));
+       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                         "field_read [TO]:  Obj %p, Type %X, Buf %p, byte_len %X\n",
+                         obj_desc, ACPI_GET_OBJECT_TYPE(obj_desc), buffer,
+                         (u32) length));
+       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                         "field_read [FROM]: bit_len %X, bit_off %X, byte_off %X\n",
+                         obj_desc->common_field.bit_length,
+                         obj_desc->common_field.start_field_bit_offset,
+                         obj_desc->common_field.base_byte_offset));
 
        /* Lock entire transaction if requested */
 
-       locked = acpi_ex_acquire_global_lock (obj_desc->common_field.field_flags);
+       locked =
+           acpi_ex_acquire_global_lock(obj_desc->common_field.field_flags);
 
        /* Read from the field */
 
-       status = acpi_ex_extract_from_field (obj_desc, buffer, (u32) length);
-       acpi_ex_release_global_lock (locked);
+       status = acpi_ex_extract_from_field(obj_desc, buffer, (u32) length);
+       acpi_ex_release_global_lock(locked);
 
-
-exit:
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_remove_reference (buffer_desc);
-       }
-       else if (ret_buffer_desc) {
+      exit:
+       if (ACPI_FAILURE(status)) {
+               acpi_ut_remove_reference(buffer_desc);
+       } else {
                *ret_buffer_desc = buffer_desc;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_write_data_to_field
@@ -205,97 +207,96 @@ exit:
  ******************************************************************************/
 
 acpi_status
-acpi_ex_write_data_to_field (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **result_desc)
+acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
+                           union acpi_operand_object *obj_desc,
+                           union acpi_operand_object **result_desc)
 {
-       acpi_status                     status;
-       u32                             length;
-       u32                             required_length;
-       void                            *buffer;
-       void                            *new_buffer;
-       u8                              locked;
-       union acpi_operand_object       *buffer_desc;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_write_data_to_field", obj_desc);
+       acpi_status status;
+       u32 length;
+       u32 required_length;
+       void *buffer;
+       void *new_buffer;
+       u8 locked;
+       union acpi_operand_object *buffer_desc;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_write_data_to_field", obj_desc);
 
        /* Parameter validation */
 
        if (!source_desc || !obj_desc) {
-               return_ACPI_STATUS (AE_AML_NO_OPERAND);
+               return_ACPI_STATUS(AE_AML_NO_OPERAND);
        }
 
-       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_BUFFER_FIELD) {
+       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_BUFFER_FIELD) {
                /*
                 * If the buffer_field arguments have not been previously evaluated,
                 * evaluate them now and save the results.
                 */
                if (!(obj_desc->common.flags & AOPOBJ_DATA_VALID)) {
-                       status = acpi_ds_get_buffer_field_arguments (obj_desc);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status = acpi_ds_get_buffer_field_arguments(obj_desc);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
                }
-       }
-       else if ((ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_LOCAL_REGION_FIELD) &&
-                        (obj_desc->field.region_obj->region.space_id == ACPI_ADR_SPACE_SMBUS)) {
+       } else
+           if ((ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_REGION_FIELD)
+               && (obj_desc->field.region_obj->region.space_id ==
+                   ACPI_ADR_SPACE_SMBUS)) {
                /*
                 * This is an SMBus write.  We will bypass the entire field mechanism
                 * and handoff the buffer directly to the handler.
                 *
                 * Source must be a buffer of sufficient size (ACPI_SMBUS_BUFFER_SIZE).
                 */
-               if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_BUFFER) {
-                       ACPI_REPORT_ERROR (("SMBus write requires Buffer, found type %s\n",
-                               acpi_ut_get_object_type_name (source_desc)));
+               if (ACPI_GET_OBJECT_TYPE(source_desc) != ACPI_TYPE_BUFFER) {
+                       ACPI_REPORT_ERROR(("SMBus write requires Buffer, found type %s\n", acpi_ut_get_object_type_name(source_desc)));
 
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
 
                if (source_desc->buffer.length < ACPI_SMBUS_BUFFER_SIZE) {
-                       ACPI_REPORT_ERROR ((
-                               "SMBus write requires Buffer of length %X, found length %X\n",
-                               ACPI_SMBUS_BUFFER_SIZE, source_desc->buffer.length));
+                       ACPI_REPORT_ERROR(("SMBus write requires Buffer of length %X, found length %X\n", ACPI_SMBUS_BUFFER_SIZE, source_desc->buffer.length));
 
-                       return_ACPI_STATUS (AE_AML_BUFFER_LIMIT);
+                       return_ACPI_STATUS(AE_AML_BUFFER_LIMIT);
                }
 
-               buffer_desc = acpi_ut_create_buffer_object (ACPI_SMBUS_BUFFER_SIZE);
+               buffer_desc =
+                   acpi_ut_create_buffer_object(ACPI_SMBUS_BUFFER_SIZE);
                if (!buffer_desc) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                buffer = buffer_desc->buffer.pointer;
-               ACPI_MEMCPY (buffer, source_desc->buffer.pointer,
-                       ACPI_SMBUS_BUFFER_SIZE);
+               ACPI_MEMCPY(buffer, source_desc->buffer.pointer,
+                           ACPI_SMBUS_BUFFER_SIZE);
 
                /* Lock entire transaction if requested */
 
-               locked = acpi_ex_acquire_global_lock (obj_desc->common_field.field_flags);
+               locked =
+                   acpi_ex_acquire_global_lock(obj_desc->common_field.
+                                               field_flags);
 
                /*
                 * Perform the write (returns status and perhaps data in the
                 * same buffer)
                 * Note: SMBus protocol type is passed in upper 16-bits of Function.
                 */
-               status = acpi_ex_access_region (obj_desc, 0,
-                                 (acpi_integer *) buffer,
-                                 ACPI_WRITE | (obj_desc->field.attribute << 16));
-               acpi_ex_release_global_lock (locked);
+               status = acpi_ex_access_region(obj_desc, 0,
+                                              (acpi_integer *) buffer,
+                                              ACPI_WRITE | (obj_desc->field.
+                                                            attribute << 16));
+               acpi_ex_release_global_lock(locked);
 
                *result_desc = buffer_desc;
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
        /* Get a pointer to the data to be written */
 
-       switch (ACPI_GET_OBJECT_TYPE (source_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(source_desc)) {
        case ACPI_TYPE_INTEGER:
                buffer = &source_desc->integer.value;
-               length = sizeof (source_desc->integer.value);
+               length = sizeof(source_desc->integer.value);
                break;
 
        case ACPI_TYPE_BUFFER:
@@ -309,7 +310,7 @@ acpi_ex_write_data_to_field (
                break;
 
        default:
-               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
        }
 
        /*
@@ -319,15 +320,15 @@ acpi_ex_write_data_to_field (
         * the ACPI specification.
         */
        new_buffer = NULL;
-       required_length = ACPI_ROUND_BITS_UP_TO_BYTES (
-                          obj_desc->common_field.bit_length);
+       required_length =
+           ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->common_field.bit_length);
 
        if (length < required_length) {
                /* We need to create a new buffer */
 
-               new_buffer = ACPI_MEM_CALLOCATE (required_length);
+               new_buffer = ACPI_MEM_CALLOCATE(required_length);
                if (!new_buffer) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                /*
@@ -335,40 +336,42 @@ acpi_ex_write_data_to_field (
                 * at Byte zero.  All unused (upper) bytes of the
                 * buffer will be 0.
                 */
-               ACPI_MEMCPY ((char *) new_buffer, (char *) buffer, length);
+               ACPI_MEMCPY((char *)new_buffer, (char *)buffer, length);
                buffer = new_buffer;
                length = required_length;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-               "field_write [FROM]: Obj %p (%s:%X), Buf %p, byte_len %X\n",
-               source_desc, acpi_ut_get_type_name (ACPI_GET_OBJECT_TYPE (source_desc)),
-               ACPI_GET_OBJECT_TYPE (source_desc), buffer, length));
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-               "field_write [TO]:  Obj %p (%s:%X), bit_len %X, bit_off %X, byte_off %X\n",
-               obj_desc, acpi_ut_get_type_name (ACPI_GET_OBJECT_TYPE (obj_desc)),
-               ACPI_GET_OBJECT_TYPE (obj_desc),
-               obj_desc->common_field.bit_length,
-               obj_desc->common_field.start_field_bit_offset,
-               obj_desc->common_field.base_byte_offset));
+       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                         "field_write [FROM]: Obj %p (%s:%X), Buf %p, byte_len %X\n",
+                         source_desc,
+                         acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE
+                                               (source_desc)),
+                         ACPI_GET_OBJECT_TYPE(source_desc), buffer, length));
+
+       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                         "field_write [TO]:  Obj %p (%s:%X), bit_len %X, bit_off %X, byte_off %X\n",
+                         obj_desc,
+                         acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE(obj_desc)),
+                         ACPI_GET_OBJECT_TYPE(obj_desc),
+                         obj_desc->common_field.bit_length,
+                         obj_desc->common_field.start_field_bit_offset,
+                         obj_desc->common_field.base_byte_offset));
 
        /* Lock entire transaction if requested */
 
-       locked = acpi_ex_acquire_global_lock (obj_desc->common_field.field_flags);
+       locked =
+           acpi_ex_acquire_global_lock(obj_desc->common_field.field_flags);
 
        /* Write to the field */
 
-       status = acpi_ex_insert_into_field (obj_desc, buffer, length);
-       acpi_ex_release_global_lock (locked);
+       status = acpi_ex_insert_into_field(obj_desc, buffer, length);
+       acpi_ex_release_global_lock(locked);
 
        /* Free temporary buffer if we used one */
 
        if (new_buffer) {
-               ACPI_MEM_FREE (new_buffer);
+               ACPI_MEM_FREE(new_buffer);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 3c2f89e00f786a303c130bf9b19f33376499cd7a..ba6e08843c29894ee749c3f88ee6be3217ee2eab 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/amlcode.h>
 #include <acpi/acevents.h>
 #include <acpi/acdispat.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exfldio")
+ACPI_MODULE_NAME("exfldio")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ex_field_datum_io (
-       union acpi_operand_object       *obj_desc,
-       u32                             field_datum_byte_offset,
-       acpi_integer                    *value,
-       u32                             read_write);
+acpi_ex_field_datum_io(union acpi_operand_object *obj_desc,
+                      u32 field_datum_byte_offset,
+                      acpi_integer * value, u32 read_write);
 
 static u8
-acpi_ex_register_overflow (
-       union acpi_operand_object       *obj_desc,
-       acpi_integer                    value);
+acpi_ex_register_overflow(union acpi_operand_object *obj_desc,
+                         acpi_integer value);
 
 static acpi_status
-acpi_ex_setup_region (
-       union acpi_operand_object       *obj_desc,
-       u32                             field_datum_byte_offset);
-
+acpi_ex_setup_region(union acpi_operand_object *obj_desc,
+                    u32 field_datum_byte_offset);
 
 /*******************************************************************************
  *
@@ -89,27 +81,25 @@ acpi_ex_setup_region (
  ******************************************************************************/
 
 static acpi_status
-acpi_ex_setup_region (
-       union acpi_operand_object       *obj_desc,
-       u32                             field_datum_byte_offset)
+acpi_ex_setup_region(union acpi_operand_object *obj_desc,
+                    u32 field_datum_byte_offset)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *rgn_desc;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ex_setup_region", field_datum_byte_offset);
+       acpi_status status = AE_OK;
+       union acpi_operand_object *rgn_desc;
 
+       ACPI_FUNCTION_TRACE_U32("ex_setup_region", field_datum_byte_offset);
 
        rgn_desc = obj_desc->common_field.region_obj;
 
        /* We must have a valid region */
 
-       if (ACPI_GET_OBJECT_TYPE (rgn_desc) != ACPI_TYPE_REGION) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Needed Region, found type %X (%s)\n",
-                       ACPI_GET_OBJECT_TYPE (rgn_desc),
-                       acpi_ut_get_object_type_name (rgn_desc)));
+       if (ACPI_GET_OBJECT_TYPE(rgn_desc) != ACPI_TYPE_REGION) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Needed Region, found type %X (%s)\n",
+                                 ACPI_GET_OBJECT_TYPE(rgn_desc),
+                                 acpi_ut_get_object_type_name(rgn_desc)));
 
-               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
        }
 
        /*
@@ -117,26 +107,25 @@ acpi_ex_setup_region (
         * evaluate them now and save the results.
         */
        if (!(rgn_desc->common.flags & AOPOBJ_DATA_VALID)) {
-               status = acpi_ds_get_region_arguments (rgn_desc);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ds_get_region_arguments(rgn_desc);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        if (rgn_desc->region.space_id == ACPI_ADR_SPACE_SMBUS) {
                /* SMBus has a non-linear address space */
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
-
 #ifdef ACPI_UNDER_DEVELOPMENT
        /*
         * If the Field access is any_acc, we can now compute the optimal
         * access (because we know know the length of the parent region)
         */
        if (!(obj_desc->common.flags & AOPOBJ_DATA_VALID)) {
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 #endif
@@ -147,56 +136,64 @@ acpi_ex_setup_region (
         * (Region length is specified in bytes)
         */
        if (rgn_desc->region.length < (obj_desc->common_field.base_byte_offset +
-                          field_datum_byte_offset +
-                          obj_desc->common_field.access_byte_width)) {
+                                      field_datum_byte_offset +
+                                      obj_desc->common_field.
+                                      access_byte_width)) {
                if (acpi_gbl_enable_interpreter_slack) {
                        /*
                         * Slack mode only:  We will go ahead and allow access to this
                         * field if it is within the region length rounded up to the next
                         * access width boundary.
                         */
-                       if (ACPI_ROUND_UP (rgn_desc->region.length,
-                                          obj_desc->common_field.access_byte_width) >=
-                               (obj_desc->common_field.base_byte_offset +
-                                (acpi_native_uint) obj_desc->common_field.access_byte_width +
-                                field_datum_byte_offset)) {
-                               return_ACPI_STATUS (AE_OK);
+                       if (ACPI_ROUND_UP(rgn_desc->region.length,
+                                         obj_desc->common_field.
+                                         access_byte_width) >=
+                           (obj_desc->common_field.base_byte_offset +
+                            (acpi_native_uint) obj_desc->common_field.
+                            access_byte_width + field_datum_byte_offset)) {
+                               return_ACPI_STATUS(AE_OK);
                        }
                }
 
-               if (rgn_desc->region.length < obj_desc->common_field.access_byte_width) {
+               if (rgn_desc->region.length <
+                   obj_desc->common_field.access_byte_width) {
                        /*
                         * This is the case where the access_type (acc_word, etc.) is wider
                         * than the region itself.  For example, a region of length one
                         * byte, and a field with Dword access specified.
                         */
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Field [%4.4s] access width (%d bytes) too large for region [%4.4s] (length %X)\n",
-                               acpi_ut_get_node_name (obj_desc->common_field.node),
-                               obj_desc->common_field.access_byte_width,
-                               acpi_ut_get_node_name (rgn_desc->region.node),
-                               rgn_desc->region.length));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Field [%4.4s] access width (%d bytes) too large for region [%4.4s] (length %X)\n",
+                                         acpi_ut_get_node_name(obj_desc->
+                                                               common_field.
+                                                               node),
+                                         obj_desc->common_field.
+                                         access_byte_width,
+                                         acpi_ut_get_node_name(rgn_desc->
+                                                               region.node),
+                                         rgn_desc->region.length));
                }
 
                /*
                 * Offset rounded up to next multiple of field width
                 * exceeds region length, indicate an error
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Field [%4.4s] Base+Offset+Width %X+%X+%X is beyond end of region [%4.4s] (length %X)\n",
-                       acpi_ut_get_node_name (obj_desc->common_field.node),
-                       obj_desc->common_field.base_byte_offset,
-                       field_datum_byte_offset, obj_desc->common_field.access_byte_width,
-                       acpi_ut_get_node_name (rgn_desc->region.node),
-                       rgn_desc->region.length));
-
-               return_ACPI_STATUS (AE_AML_REGION_LIMIT);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Field [%4.4s] Base+Offset+Width %X+%X+%X is beyond end of region [%4.4s] (length %X)\n",
+                                 acpi_ut_get_node_name(obj_desc->common_field.
+                                                       node),
+                                 obj_desc->common_field.base_byte_offset,
+                                 field_datum_byte_offset,
+                                 obj_desc->common_field.access_byte_width,
+                                 acpi_ut_get_node_name(rgn_desc->region.node),
+                                 rgn_desc->region.length));
+
+               return_ACPI_STATUS(AE_AML_REGION_LIMIT);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_access_region
@@ -216,27 +213,23 @@ acpi_ex_setup_region (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_access_region (
-       union acpi_operand_object       *obj_desc,
-       u32                             field_datum_byte_offset,
-       acpi_integer                    *value,
-       u32                             function)
+acpi_ex_access_region(union acpi_operand_object *obj_desc,
+                     u32 field_datum_byte_offset,
+                     acpi_integer * value, u32 function)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *rgn_desc;
-       acpi_physical_address           address;
-
-
-       ACPI_FUNCTION_TRACE ("ex_access_region");
+       acpi_status status;
+       union acpi_operand_object *rgn_desc;
+       acpi_physical_address address;
 
+       ACPI_FUNCTION_TRACE("ex_access_region");
 
        /*
         * Ensure that the region operands are fully evaluated and verify
         * the validity of the request
         */
-       status = acpi_ex_setup_region (obj_desc, field_datum_byte_offset);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ex_setup_region(obj_desc, field_datum_byte_offset);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -248,50 +241,53 @@ acpi_ex_access_region (
         */
        rgn_desc = obj_desc->common_field.region_obj;
        address = rgn_desc->region.address +
-                        obj_desc->common_field.base_byte_offset +
-                        field_datum_byte_offset;
+           obj_desc->common_field.base_byte_offset + field_datum_byte_offset;
 
        if ((function & ACPI_IO_MASK) == ACPI_READ) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "[READ]"));
-       }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "[WRITE]"));
+               ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, "[READ]"));
+       } else {
+               ACPI_DEBUG_PRINT((ACPI_DB_BFIELD, "[WRITE]"));
        }
 
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_BFIELD,
-               " Region [%s:%X], Width %X, byte_base %X, Offset %X at %8.8X%8.8X\n",
-               acpi_ut_get_region_name (rgn_desc->region.space_id),
-               rgn_desc->region.space_id,
-               obj_desc->common_field.access_byte_width,
-               obj_desc->common_field.base_byte_offset,
-               field_datum_byte_offset,
-               ACPI_FORMAT_UINT64 (address)));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_BFIELD,
+                             " Region [%s:%X], Width %X, byte_base %X, Offset %X at %8.8X%8.8X\n",
+                             acpi_ut_get_region_name(rgn_desc->region.
+                                                     space_id),
+                             rgn_desc->region.space_id,
+                             obj_desc->common_field.access_byte_width,
+                             obj_desc->common_field.base_byte_offset,
+                             field_datum_byte_offset,
+                             ACPI_FORMAT_UINT64(address)));
 
        /* Invoke the appropriate address_space/op_region handler */
 
-       status = acpi_ev_address_space_dispatch (rgn_desc, function,
-                        address,
-                        ACPI_MUL_8 (obj_desc->common_field.access_byte_width), value);
+       status = acpi_ev_address_space_dispatch(rgn_desc, function,
+                                               address,
+                                               ACPI_MUL_8(obj_desc->
+                                                          common_field.
+                                                          access_byte_width),
+                                               value);
 
-       if (ACPI_FAILURE (status)) {
+       if (ACPI_FAILURE(status)) {
                if (status == AE_NOT_IMPLEMENTED) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Region %s(%X) not implemented\n",
-                               acpi_ut_get_region_name (rgn_desc->region.space_id),
-                               rgn_desc->region.space_id));
-               }
-               else if (status == AE_NOT_EXIST) {
-                       ACPI_REPORT_ERROR ((
-                               "Region %s(%X) has no handler\n",
-                               acpi_ut_get_region_name (rgn_desc->region.space_id),
-                               rgn_desc->region.space_id));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Region %s(%X) not implemented\n",
+                                         acpi_ut_get_region_name(rgn_desc->
+                                                                 region.
+                                                                 space_id),
+                                         rgn_desc->region.space_id));
+               } else if (status == AE_NOT_EXIST) {
+                       ACPI_REPORT_ERROR(("Region %s(%X) has no handler\n",
+                                          acpi_ut_get_region_name(rgn_desc->
+                                                                  region.
+                                                                  space_id),
+                                          rgn_desc->region.space_id));
                }
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_register_overflow
@@ -310,9 +306,8 @@ acpi_ex_access_region (
  ******************************************************************************/
 
 static u8
-acpi_ex_register_overflow (
-       union acpi_operand_object       *obj_desc,
-       acpi_integer                    value)
+acpi_ex_register_overflow(union acpi_operand_object *obj_desc,
+                         acpi_integer value)
 {
 
        if (obj_desc->common_field.bit_length >= ACPI_INTEGER_BIT_SIZE) {
@@ -336,7 +331,6 @@ acpi_ex_register_overflow (
        return (FALSE);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_field_datum_io
@@ -356,18 +350,14 @@ acpi_ex_register_overflow (
  ******************************************************************************/
 
 static acpi_status
-acpi_ex_field_datum_io (
-       union acpi_operand_object       *obj_desc,
-       u32                             field_datum_byte_offset,
-       acpi_integer                    *value,
-       u32                             read_write)
+acpi_ex_field_datum_io(union acpi_operand_object *obj_desc,
+                      u32 field_datum_byte_offset,
+                      acpi_integer * value, u32 read_write)
 {
-       acpi_status                     status;
-       acpi_integer                    local_value;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ex_field_datum_io", field_datum_byte_offset);
+       acpi_status status;
+       acpi_integer local_value;
 
+       ACPI_FUNCTION_TRACE_U32("ex_field_datum_io", field_datum_byte_offset);
 
        if (read_write == ACPI_READ) {
                if (!value) {
@@ -392,16 +382,16 @@ acpi_ex_field_datum_io (
         * index_field - Write to an Index Register, then read/write from/to a
         *               Data Register
         */
-       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
        case ACPI_TYPE_BUFFER_FIELD:
                /*
                 * If the buffer_field arguments have not been previously evaluated,
                 * evaluate them now and save the results.
                 */
                if (!(obj_desc->common.flags & AOPOBJ_DATA_VALID)) {
-                       status = acpi_ds_get_buffer_field_arguments (obj_desc);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status = acpi_ds_get_buffer_field_arguments(obj_desc);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
                }
 
@@ -410,47 +400,50 @@ acpi_ex_field_datum_io (
                         * Copy the data from the source buffer.
                         * Length is the field width in bytes.
                         */
-                       ACPI_MEMCPY (value,
-                               (obj_desc->buffer_field.buffer_obj)->buffer.pointer +
-                                       obj_desc->buffer_field.base_byte_offset +
-                                       field_datum_byte_offset,
-                               obj_desc->common_field.access_byte_width);
-               }
-               else {
+                       ACPI_MEMCPY(value,
+                                   (obj_desc->buffer_field.buffer_obj)->buffer.
+                                   pointer +
+                                   obj_desc->buffer_field.base_byte_offset +
+                                   field_datum_byte_offset,
+                                   obj_desc->common_field.access_byte_width);
+               else {
                        /*
                         * Copy the data to the target buffer.
                         * Length is the field width in bytes.
                         */
-                       ACPI_MEMCPY ((obj_desc->buffer_field.buffer_obj)->buffer.pointer +
-                                       obj_desc->buffer_field.base_byte_offset +
-                                       field_datum_byte_offset,
-                                       value, obj_desc->common_field.access_byte_width);
+                       ACPI_MEMCPY((obj_desc->buffer_field.buffer_obj)->buffer.
+                                   pointer +
+                                   obj_desc->buffer_field.base_byte_offset +
+                                   field_datum_byte_offset, value,
+                                   obj_desc->common_field.access_byte_width);
                }
 
                status = AE_OK;
                break;
 
-
        case ACPI_TYPE_LOCAL_BANK_FIELD:
 
                /*
                 * Ensure that the bank_value is not beyond the capacity of
                 * the register
                 */
-               if (acpi_ex_register_overflow (obj_desc->bank_field.bank_obj,
-                                 (acpi_integer) obj_desc->bank_field.value)) {
-                       return_ACPI_STATUS (AE_AML_REGISTER_LIMIT);
+               if (acpi_ex_register_overflow(obj_desc->bank_field.bank_obj,
+                                             (acpi_integer) obj_desc->
+                                             bank_field.value)) {
+                       return_ACPI_STATUS(AE_AML_REGISTER_LIMIT);
                }
 
                /*
                 * For bank_fields, we must write the bank_value to the bank_register
                 * (itself a region_field) before we can access the data.
                 */
-               status = acpi_ex_insert_into_field (obj_desc->bank_field.bank_obj,
-                                &obj_desc->bank_field.value,
-                                sizeof (obj_desc->bank_field.value));
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ex_insert_into_field(obj_desc->bank_field.bank_obj,
+                                             &obj_desc->bank_field.value,
+                                             sizeof(obj_desc->bank_field.
+                                                    value));
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /*
@@ -460,90 +453,92 @@ acpi_ex_field_datum_io (
 
                /*lint -fallthrough */
 
-
        case ACPI_TYPE_LOCAL_REGION_FIELD:
                /*
                 * For simple region_fields, we just directly access the owning
                 * Operation Region.
                 */
-               status = acpi_ex_access_region (obj_desc, field_datum_byte_offset, value,
-                                 read_write);
+               status =
+                   acpi_ex_access_region(obj_desc, field_datum_byte_offset,
+                                         value, read_write);
                break;
 
-
        case ACPI_TYPE_LOCAL_INDEX_FIELD:
 
-
                /*
                 * Ensure that the index_value is not beyond the capacity of
                 * the register
                 */
-               if (acpi_ex_register_overflow (obj_desc->index_field.index_obj,
-                                 (acpi_integer) obj_desc->index_field.value)) {
-                       return_ACPI_STATUS (AE_AML_REGISTER_LIMIT);
+               if (acpi_ex_register_overflow(obj_desc->index_field.index_obj,
+                                             (acpi_integer) obj_desc->
+                                             index_field.value)) {
+                       return_ACPI_STATUS(AE_AML_REGISTER_LIMIT);
                }
 
                /* Write the index value to the index_register (itself a region_field) */
 
                field_datum_byte_offset += obj_desc->index_field.value;
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                               "Write to Index Register: Value %8.8X\n",
-                               field_datum_byte_offset));
+               ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                 "Write to Index Register: Value %8.8X\n",
+                                 field_datum_byte_offset));
 
-               status = acpi_ex_insert_into_field (obj_desc->index_field.index_obj,
-                                &field_datum_byte_offset,
-                                sizeof (field_datum_byte_offset));
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ex_insert_into_field(obj_desc->index_field.index_obj,
+                                             &field_datum_byte_offset,
+                                             sizeof(field_datum_byte_offset));
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                               "I/O to Data Register: value_ptr %p\n",
-                               value));
+               ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                 "I/O to Data Register: value_ptr %p\n",
+                                 value));
 
                if (read_write == ACPI_READ) {
                        /* Read the datum from the data_register */
 
-                       status = acpi_ex_extract_from_field (obj_desc->index_field.data_obj,
-                                         value, sizeof (acpi_integer));
-               }
-               else {
+                       status =
+                           acpi_ex_extract_from_field(obj_desc->index_field.
+                                                      data_obj, value,
+                                                      sizeof(acpi_integer));
+               } else {
                        /* Write the datum to the data_register */
 
-                       status = acpi_ex_insert_into_field (obj_desc->index_field.data_obj,
-                                         value, sizeof (acpi_integer));
+                       status =
+                           acpi_ex_insert_into_field(obj_desc->index_field.
+                                                     data_obj, value,
+                                                     sizeof(acpi_integer));
                }
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("Wrong object type in field I/O %X\n",
-                       ACPI_GET_OBJECT_TYPE (obj_desc)));
+               ACPI_REPORT_ERROR(("Wrong object type in field I/O %X\n",
+                                  ACPI_GET_OBJECT_TYPE(obj_desc)));
                status = AE_AML_INTERNAL;
                break;
        }
 
-       if (ACPI_SUCCESS (status)) {
+       if (ACPI_SUCCESS(status)) {
                if (read_write == ACPI_READ) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                               "Value Read %8.8X%8.8X, Width %d\n",
-                               ACPI_FORMAT_UINT64 (*value),
-                               obj_desc->common_field.access_byte_width));
-               }
-               else {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                               "Value Written %8.8X%8.8X, Width %d\n",
-                               ACPI_FORMAT_UINT64 (*value),
-                               obj_desc->common_field.access_byte_width));
+                       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                         "Value Read %8.8X%8.8X, Width %d\n",
+                                         ACPI_FORMAT_UINT64(*value),
+                                         obj_desc->common_field.
+                                         access_byte_width));
+               } else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                         "Value Written %8.8X%8.8X, Width %d\n",
+                                         ACPI_FORMAT_UINT64(*value),
+                                         obj_desc->common_field.
+                                         access_byte_width));
                }
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_write_with_update_rule
@@ -560,19 +555,16 @@ acpi_ex_field_datum_io (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_write_with_update_rule (
-       union acpi_operand_object       *obj_desc,
-       acpi_integer                    mask,
-       acpi_integer                    field_value,
-       u32                             field_datum_byte_offset)
+acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
+                              acpi_integer mask,
+                              acpi_integer field_value,
+                              u32 field_datum_byte_offset)
 {
-       acpi_status                     status = AE_OK;
-       acpi_integer                    merged_value;
-       acpi_integer                    current_value;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ex_write_with_update_rule", mask);
+       acpi_status status = AE_OK;
+       acpi_integer merged_value;
+       acpi_integer current_value;
 
+       ACPI_FUNCTION_TRACE_U32("ex_write_with_update_rule", mask);
 
        /* Start with the new bits  */
 
@@ -583,22 +575,27 @@ acpi_ex_write_with_update_rule (
        if (mask != ACPI_INTEGER_MAX) {
                /* Decode the update rule */
 
-               switch (obj_desc->common_field.field_flags & AML_FIELD_UPDATE_RULE_MASK) {
+               switch (obj_desc->common_field.
+                       field_flags & AML_FIELD_UPDATE_RULE_MASK) {
                case AML_FIELD_UPDATE_PRESERVE:
                        /*
                         * Check if update rule needs to be applied (not if mask is all
                         * ones)  The left shift drops the bits we want to ignore.
                         */
-                       if ((~mask << (ACPI_MUL_8 (sizeof (mask)) -
-                                        ACPI_MUL_8 (obj_desc->common_field.access_byte_width))) != 0) {
+                       if ((~mask << (ACPI_MUL_8(sizeof(mask)) -
+                                      ACPI_MUL_8(obj_desc->common_field.
+                                                 access_byte_width))) != 0) {
                                /*
                                 * Read the current contents of the byte/word/dword containing
                                 * the field, and merge with the new field value.
                                 */
-                               status = acpi_ex_field_datum_io (obj_desc, field_datum_byte_offset,
-                                                 &current_value, ACPI_READ);
-                               if (ACPI_FAILURE (status)) {
-                                       return_ACPI_STATUS (status);
+                               status =
+                                   acpi_ex_field_datum_io(obj_desc,
+                                                          field_datum_byte_offset,
+                                                          &current_value,
+                                                          ACPI_READ);
+                               if (ACPI_FAILURE(status)) {
+                                       return_ACPI_STATUS(status);
                                }
 
                                merged_value |= (current_value & ~mask);
@@ -621,30 +618,31 @@ acpi_ex_write_with_update_rule (
 
                default:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "write_with_update_rule: Unknown update_rule setting: %X\n",
-                               (obj_desc->common_field.field_flags & AML_FIELD_UPDATE_RULE_MASK)));
-                       return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "write_with_update_rule: Unknown update_rule setting: %X\n",
+                                         (obj_desc->common_field.
+                                          field_flags &
+                                          AML_FIELD_UPDATE_RULE_MASK)));
+                       return_ACPI_STATUS(AE_AML_OPERAND_VALUE);
                }
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-               "Mask %8.8X%8.8X, datum_offset %X, Width %X, Value %8.8X%8.8X, merged_value %8.8X%8.8X\n",
-               ACPI_FORMAT_UINT64 (mask),
-               field_datum_byte_offset,
-               obj_desc->common_field.access_byte_width,
-               ACPI_FORMAT_UINT64 (field_value),
-               ACPI_FORMAT_UINT64 (merged_value)));
+       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                         "Mask %8.8X%8.8X, datum_offset %X, Width %X, Value %8.8X%8.8X, merged_value %8.8X%8.8X\n",
+                         ACPI_FORMAT_UINT64(mask),
+                         field_datum_byte_offset,
+                         obj_desc->common_field.access_byte_width,
+                         ACPI_FORMAT_UINT64(field_value),
+                         ACPI_FORMAT_UINT64(merged_value)));
 
        /* Write the merged value */
 
-       status = acpi_ex_field_datum_io (obj_desc, field_datum_byte_offset,
-                         &merged_value, ACPI_WRITE);
+       status = acpi_ex_field_datum_io(obj_desc, field_datum_byte_offset,
+                                       &merged_value, ACPI_WRITE);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_extract_from_field
@@ -660,54 +658,54 @@ acpi_ex_write_with_update_rule (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_extract_from_field (
-       union acpi_operand_object       *obj_desc,
-       void                            *buffer,
-       u32                             buffer_length)
+acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
+                          void *buffer, u32 buffer_length)
 {
-       acpi_status                     status;
-       acpi_integer                    raw_datum;
-       acpi_integer                    merged_datum;
-       u32                             field_offset = 0;
-       u32                             buffer_offset = 0;
-       u32                             buffer_tail_bits;
-       u32                             datum_count;
-       u32                             field_datum_count;
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("ex_extract_from_field");
-
+       acpi_status status;
+       acpi_integer raw_datum;
+       acpi_integer merged_datum;
+       u32 field_offset = 0;
+       u32 buffer_offset = 0;
+       u32 buffer_tail_bits;
+       u32 datum_count;
+       u32 field_datum_count;
+       u32 i;
+
+       ACPI_FUNCTION_TRACE("ex_extract_from_field");
 
        /* Validate target buffer and clear it */
 
-       if (buffer_length < ACPI_ROUND_BITS_UP_TO_BYTES (
-                        obj_desc->common_field.bit_length)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Field size %X (bits) is too large for buffer (%X)\n",
-                       obj_desc->common_field.bit_length, buffer_length));
+       if (buffer_length <
+           ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->common_field.bit_length)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Field size %X (bits) is too large for buffer (%X)\n",
+                                 obj_desc->common_field.bit_length,
+                                 buffer_length));
 
-               return_ACPI_STATUS (AE_BUFFER_OVERFLOW);
+               return_ACPI_STATUS(AE_BUFFER_OVERFLOW);
        }
-       ACPI_MEMSET (buffer, 0, buffer_length);
+       ACPI_MEMSET(buffer, 0, buffer_length);
 
        /* Compute the number of datums (access width data items) */
 
-       datum_count = ACPI_ROUND_UP_TO (
-                          obj_desc->common_field.bit_length,
-                          obj_desc->common_field.access_bit_width);
-       field_datum_count = ACPI_ROUND_UP_TO (
-                          obj_desc->common_field.bit_length +
-                          obj_desc->common_field.start_field_bit_offset,
-                          obj_desc->common_field.access_bit_width);
+       datum_count = ACPI_ROUND_UP_TO(obj_desc->common_field.bit_length,
+                                      obj_desc->common_field.access_bit_width);
+       field_datum_count = ACPI_ROUND_UP_TO(obj_desc->common_field.bit_length +
+                                            obj_desc->common_field.
+                                            start_field_bit_offset,
+                                            obj_desc->common_field.
+                                            access_bit_width);
 
        /* Priming read from the field */
 
-       status = acpi_ex_field_datum_io (obj_desc, field_offset, &raw_datum, ACPI_READ);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ex_field_datum_io(obj_desc, field_offset, &raw_datum,
+                                  ACPI_READ);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
-       merged_datum = raw_datum >> obj_desc->common_field.start_field_bit_offset;
+       merged_datum =
+           raw_datum >> obj_desc->common_field.start_field_bit_offset;
 
        /* Read the rest of the field */
 
@@ -715,17 +713,17 @@ acpi_ex_extract_from_field (
                /* Get next input datum from the field */
 
                field_offset += obj_desc->common_field.access_byte_width;
-               status = acpi_ex_field_datum_io (obj_desc, field_offset,
-                                 &raw_datum, ACPI_READ);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ex_field_datum_io(obj_desc, field_offset,
+                                               &raw_datum, ACPI_READ);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /* Merge with previous datum if necessary */
 
                merged_datum |= raw_datum <<
-                       (obj_desc->common_field.access_bit_width -
-                               obj_desc->common_field.start_field_bit_offset);
+                   (obj_desc->common_field.access_bit_width -
+                    obj_desc->common_field.start_field_bit_offset);
 
                if (i == datum_count) {
                        break;
@@ -733,32 +731,32 @@ acpi_ex_extract_from_field (
 
                /* Write merged datum to target buffer */
 
-               ACPI_MEMCPY (((char *) buffer) + buffer_offset, &merged_datum,
-                       ACPI_MIN(obj_desc->common_field.access_byte_width,
-                                        buffer_length - buffer_offset));
+               ACPI_MEMCPY(((char *)buffer) + buffer_offset, &merged_datum,
+                           ACPI_MIN(obj_desc->common_field.access_byte_width,
+                                    buffer_length - buffer_offset));
 
                buffer_offset += obj_desc->common_field.access_byte_width;
-               merged_datum = raw_datum >> obj_desc->common_field.start_field_bit_offset;
+               merged_datum =
+                   raw_datum >> obj_desc->common_field.start_field_bit_offset;
        }
 
        /* Mask off any extra bits in the last datum */
 
        buffer_tail_bits = obj_desc->common_field.bit_length %
-                          obj_desc->common_field.access_bit_width;
+           obj_desc->common_field.access_bit_width;
        if (buffer_tail_bits) {
-               merged_datum &= ACPI_MASK_BITS_ABOVE (buffer_tail_bits);
+               merged_datum &= ACPI_MASK_BITS_ABOVE(buffer_tail_bits);
        }
 
        /* Write the last datum to the buffer */
 
-       ACPI_MEMCPY (((char *) buffer) + buffer_offset, &merged_datum,
-               ACPI_MIN(obj_desc->common_field.access_byte_width,
-                                buffer_length - buffer_offset));
+       ACPI_MEMCPY(((char *)buffer) + buffer_offset, &merged_datum,
+                   ACPI_MIN(obj_desc->common_field.access_byte_width,
+                            buffer_length - buffer_offset));
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_insert_into_field
@@ -774,53 +772,54 @@ acpi_ex_extract_from_field (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_insert_into_field (
-       union acpi_operand_object       *obj_desc,
-       void                            *buffer,
-       u32                             buffer_length)
+acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
+                         void *buffer, u32 buffer_length)
 {
-       acpi_status                     status;
-       acpi_integer                    mask;
-       acpi_integer                    merged_datum;
-       acpi_integer                    raw_datum = 0;
-       u32                             field_offset = 0;
-       u32                             buffer_offset = 0;
-       u32                             buffer_tail_bits;
-       u32                             datum_count;
-       u32                             field_datum_count;
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("ex_insert_into_field");
-
+       acpi_status status;
+       acpi_integer mask;
+       acpi_integer merged_datum;
+       acpi_integer raw_datum = 0;
+       u32 field_offset = 0;
+       u32 buffer_offset = 0;
+       u32 buffer_tail_bits;
+       u32 datum_count;
+       u32 field_datum_count;
+       u32 i;
+
+       ACPI_FUNCTION_TRACE("ex_insert_into_field");
 
        /* Validate input buffer */
 
-       if (buffer_length < ACPI_ROUND_BITS_UP_TO_BYTES (
-                        obj_desc->common_field.bit_length)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Field size %X (bits) is too large for buffer (%X)\n",
-                       obj_desc->common_field.bit_length, buffer_length));
+       if (buffer_length <
+           ACPI_ROUND_BITS_UP_TO_BYTES(obj_desc->common_field.bit_length)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Field size %X (bits) is too large for buffer (%X)\n",
+                                 obj_desc->common_field.bit_length,
+                                 buffer_length));
 
-               return_ACPI_STATUS (AE_BUFFER_OVERFLOW);
+               return_ACPI_STATUS(AE_BUFFER_OVERFLOW);
        }
 
        /* Compute the number of datums (access width data items) */
 
-       mask = ACPI_MASK_BITS_BELOW (obj_desc->common_field.start_field_bit_offset);
-       datum_count = ACPI_ROUND_UP_TO (obj_desc->common_field.bit_length,
-                         obj_desc->common_field.access_bit_width);
-       field_datum_count = ACPI_ROUND_UP_TO (obj_desc->common_field.bit_length +
-                          obj_desc->common_field.start_field_bit_offset,
-                          obj_desc->common_field.access_bit_width);
+       mask =
+           ACPI_MASK_BITS_BELOW(obj_desc->common_field.start_field_bit_offset);
+       datum_count =
+           ACPI_ROUND_UP_TO(obj_desc->common_field.bit_length,
+                            obj_desc->common_field.access_bit_width);
+       field_datum_count =
+           ACPI_ROUND_UP_TO(obj_desc->common_field.bit_length +
+                            obj_desc->common_field.start_field_bit_offset,
+                            obj_desc->common_field.access_bit_width);
 
        /* Get initial Datum from the input buffer */
 
-       ACPI_MEMCPY (&raw_datum, buffer,
-               ACPI_MIN(obj_desc->common_field.access_byte_width,
-                                buffer_length - buffer_offset));
+       ACPI_MEMCPY(&raw_datum, buffer,
+                   ACPI_MIN(obj_desc->common_field.access_byte_width,
+                            buffer_length - buffer_offset));
 
-       merged_datum = raw_datum << obj_desc->common_field.start_field_bit_offset;
+       merged_datum =
+           raw_datum << obj_desc->common_field.start_field_bit_offset;
 
        /* Write the entire field */
 
@@ -828,18 +827,19 @@ acpi_ex_insert_into_field (
                /* Write merged datum to the target field */
 
                merged_datum &= mask;
-               status = acpi_ex_write_with_update_rule (obj_desc, mask,
-                                merged_datum, field_offset);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ex_write_with_update_rule(obj_desc, mask,
+                                                       merged_datum,
+                                                       field_offset);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /* Start new output datum by merging with previous input datum */
 
                field_offset += obj_desc->common_field.access_byte_width;
                merged_datum = raw_datum >>
-                       (obj_desc->common_field.access_bit_width -
-                               obj_desc->common_field.start_field_bit_offset);
+                   (obj_desc->common_field.access_bit_width -
+                    obj_desc->common_field.start_field_bit_offset);
                mask = ACPI_INTEGER_MAX;
 
                if (i == datum_count) {
@@ -849,28 +849,28 @@ acpi_ex_insert_into_field (
                /* Get the next input datum from the buffer */
 
                buffer_offset += obj_desc->common_field.access_byte_width;
-               ACPI_MEMCPY (&raw_datum, ((char *) buffer) + buffer_offset,
-                       ACPI_MIN(obj_desc->common_field.access_byte_width,
-                                        buffer_length - buffer_offset));
-               merged_datum |= raw_datum << obj_desc->common_field.start_field_bit_offset;
+               ACPI_MEMCPY(&raw_datum, ((char *)buffer) + buffer_offset,
+                           ACPI_MIN(obj_desc->common_field.access_byte_width,
+                                    buffer_length - buffer_offset));
+               merged_datum |=
+                   raw_datum << obj_desc->common_field.start_field_bit_offset;
        }
 
        /* Mask off any extra bits in the last datum */
 
        buffer_tail_bits = (obj_desc->common_field.bit_length +
-                       obj_desc->common_field.start_field_bit_offset) %
-                               obj_desc->common_field.access_bit_width;
+                           obj_desc->common_field.start_field_bit_offset) %
+           obj_desc->common_field.access_bit_width;
        if (buffer_tail_bits) {
-               mask &= ACPI_MASK_BITS_ABOVE (buffer_tail_bits);
+               mask &= ACPI_MASK_BITS_ABOVE(buffer_tail_bits);
        }
 
        /* Write the last datum to the field */
 
        merged_datum &= mask;
-       status = acpi_ex_write_with_update_rule (obj_desc,
-                        mask, merged_datum, field_offset);
+       status = acpi_ex_write_with_update_rule(obj_desc,
+                                               mask, merged_datum,
+                                               field_offset);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 022f281345b856fbfd8dd4ffb346aca6e8094ba4..a3f4d72bedc979b45c77e3b86516b08d763bc7e2 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/amlcode.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exmisc")
-
+ACPI_MODULE_NAME("exmisc")
 
 /*******************************************************************************
  *
  *              Common code for the ref_of_op and the cond_ref_of_op.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ex_get_object_reference (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **return_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_get_object_reference(union acpi_operand_object *obj_desc,
+                            union acpi_operand_object **return_desc,
+                            struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       *reference_obj;
-       union acpi_operand_object       *referenced_obj;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_get_object_reference", obj_desc);
+       union acpi_operand_object *reference_obj;
+       union acpi_operand_object *referenced_obj;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_get_object_reference", obj_desc);
 
        *return_desc = NULL;
 
-       switch (ACPI_GET_DESCRIPTOR_TYPE (obj_desc)) {
+       switch (ACPI_GET_DESCRIPTOR_TYPE(obj_desc)) {
        case ACPI_DESC_TYPE_OPERAND:
 
-               if (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_LOCAL_REFERENCE) {
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               if (ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_LOCAL_REFERENCE) {
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
 
                /*
@@ -104,13 +97,11 @@ acpi_ex_get_object_reference (
 
                default:
 
-                       ACPI_REPORT_ERROR (("Unknown Reference opcode in get_reference %X\n",
-                               obj_desc->reference.opcode));
-                       return_ACPI_STATUS (AE_AML_INTERNAL);
+                       ACPI_REPORT_ERROR(("Unknown Reference opcode in get_reference %X\n", obj_desc->reference.opcode));
+                       return_ACPI_STATUS(AE_AML_INTERNAL);
                }
                break;
 
-
        case ACPI_DESC_TYPE_NAMED:
 
                /*
@@ -119,34 +110,32 @@ acpi_ex_get_object_reference (
                referenced_obj = obj_desc;
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("Invalid descriptor type in get_reference: %X\n",
-                               ACPI_GET_DESCRIPTOR_TYPE (obj_desc)));
-               return_ACPI_STATUS (AE_TYPE);
+               ACPI_REPORT_ERROR(("Invalid descriptor type in get_reference: %X\n", ACPI_GET_DESCRIPTOR_TYPE(obj_desc)));
+               return_ACPI_STATUS(AE_TYPE);
        }
 
-
        /* Create a new reference object */
 
-       reference_obj = acpi_ut_create_internal_object (ACPI_TYPE_LOCAL_REFERENCE);
+       reference_obj =
+           acpi_ut_create_internal_object(ACPI_TYPE_LOCAL_REFERENCE);
        if (!reference_obj) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        reference_obj->reference.opcode = AML_REF_OF_OP;
        reference_obj->reference.object = referenced_obj;
        *return_desc = reference_obj;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "Object %p Type [%s], returning Reference %p\n",
-               obj_desc, acpi_ut_get_object_type_name (obj_desc), *return_desc));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "Object %p Type [%s], returning Reference %p\n",
+                         obj_desc, acpi_ut_get_object_type_name(obj_desc),
+                         *return_desc));
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_concat_template
@@ -163,63 +152,58 @@ acpi_ex_get_object_reference (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_concat_template (
-       union acpi_operand_object       *operand0,
-       union acpi_operand_object       *operand1,
-       union acpi_operand_object       **actual_return_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_concat_template(union acpi_operand_object *operand0,
+                       union acpi_operand_object *operand1,
+                       union acpi_operand_object **actual_return_desc,
+                       struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       *return_desc;
-       u8                              *new_buf;
-       u8                              *end_tag1;
-       u8                              *end_tag2;
-       acpi_size                       length1;
-       acpi_size                       length2;
-
-
-       ACPI_FUNCTION_TRACE ("ex_concat_template");
+       union acpi_operand_object *return_desc;
+       u8 *new_buf;
+       u8 *end_tag1;
+       u8 *end_tag2;
+       acpi_size length1;
+       acpi_size length2;
 
+       ACPI_FUNCTION_TRACE("ex_concat_template");
 
        /* Find the end_tags in each resource template */
 
-       end_tag1 = acpi_ut_get_resource_end_tag (operand0);
-       end_tag2 = acpi_ut_get_resource_end_tag (operand1);
+       end_tag1 = acpi_ut_get_resource_end_tag(operand0);
+       end_tag2 = acpi_ut_get_resource_end_tag(operand1);
        if (!end_tag1 || !end_tag2) {
-               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
        }
 
        /* Compute the length of each part */
 
-       length1 = ACPI_PTR_DIFF (end_tag1, operand0->buffer.pointer);
-       length2 = ACPI_PTR_DIFF (end_tag2, operand1->buffer.pointer) +
-                         2; /* Size of END_TAG */
+       length1 = ACPI_PTR_DIFF(end_tag1, operand0->buffer.pointer);
+       length2 = ACPI_PTR_DIFF(end_tag2, operand1->buffer.pointer) + 2;        /* Size of END_TAG */
 
        /* Create a new buffer object for the result */
 
-       return_desc = acpi_ut_create_buffer_object (length1 + length2);
+       return_desc = acpi_ut_create_buffer_object(length1 + length2);
        if (!return_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Copy the templates to the new descriptor */
 
        new_buf = return_desc->buffer.pointer;
-       ACPI_MEMCPY (new_buf, operand0->buffer.pointer, length1);
-       ACPI_MEMCPY (new_buf + length1, operand1->buffer.pointer, length2);
+       ACPI_MEMCPY(new_buf, operand0->buffer.pointer, length1);
+       ACPI_MEMCPY(new_buf + length1, operand1->buffer.pointer, length2);
 
        /* Compute the new checksum */
 
        new_buf[return_desc->buffer.length - 1] =
-                       acpi_ut_generate_checksum (return_desc->buffer.pointer,
-                                          (return_desc->buffer.length - 1));
+           acpi_ut_generate_checksum(return_desc->buffer.pointer,
+                                     (return_desc->buffer.length - 1));
 
        /* Return the completed template descriptor */
 
        *actual_return_desc = return_desc;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_do_concatenate
@@ -236,21 +220,18 @@ acpi_ex_concat_template (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_do_concatenate (
-       union acpi_operand_object       *operand0,
-       union acpi_operand_object       *operand1,
-       union acpi_operand_object       **actual_return_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_do_concatenate(union acpi_operand_object *operand0,
+                      union acpi_operand_object *operand1,
+                      union acpi_operand_object **actual_return_desc,
+                      struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       *local_operand1 = operand1;
-       union acpi_operand_object       *return_desc;
-       char                            *new_buf;
-       acpi_status                     status;
-       acpi_size                       new_length;
-
-
-       ACPI_FUNCTION_TRACE ("ex_do_concatenate");
+       union acpi_operand_object *local_operand1 = operand1;
+       union acpi_operand_object *return_desc;
+       char *new_buf;
+       acpi_status status;
+       acpi_size new_length;
 
+       ACPI_FUNCTION_TRACE("ex_do_concatenate");
 
        /*
         * Convert the second operand if necessary.  The first operand
@@ -259,27 +240,28 @@ acpi_ex_do_concatenate (
         * guaranteed to be either Integer/String/Buffer by the operand
         * resolution mechanism.
         */
-       switch (ACPI_GET_OBJECT_TYPE (operand0)) {
+       switch (ACPI_GET_OBJECT_TYPE(operand0)) {
        case ACPI_TYPE_INTEGER:
-               status = acpi_ex_convert_to_integer (operand1, &local_operand1, 16);
+               status =
+                   acpi_ex_convert_to_integer(operand1, &local_operand1, 16);
                break;
 
        case ACPI_TYPE_STRING:
-               status = acpi_ex_convert_to_string (operand1, &local_operand1,
-                                ACPI_IMPLICIT_CONVERT_HEX);
+               status = acpi_ex_convert_to_string(operand1, &local_operand1,
+                                                  ACPI_IMPLICIT_CONVERT_HEX);
                break;
 
        case ACPI_TYPE_BUFFER:
-               status = acpi_ex_convert_to_buffer (operand1, &local_operand1);
+               status = acpi_ex_convert_to_buffer(operand1, &local_operand1);
                break;
 
        default:
-               ACPI_REPORT_ERROR (("Concat - invalid obj type: %X\n",
-                               ACPI_GET_OBJECT_TYPE (operand0)));
+               ACPI_REPORT_ERROR(("Concat - invalid obj type: %X\n",
+                                  ACPI_GET_OBJECT_TYPE(operand0)));
                status = AE_AML_INTERNAL;
        }
 
-       if (ACPI_FAILURE (status)) {
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
@@ -296,32 +278,33 @@ acpi_ex_do_concatenate (
         * 2) Two Strings concatenated to produce a new String
         * 3) Two Buffers concatenated to produce a new Buffer
         */
-       switch (ACPI_GET_OBJECT_TYPE (operand0)) {
+       switch (ACPI_GET_OBJECT_TYPE(operand0)) {
        case ACPI_TYPE_INTEGER:
 
                /* Result of two Integers is a Buffer */
                /* Need enough buffer space for two integers */
 
-               return_desc = acpi_ut_create_buffer_object (
-                                  ACPI_MUL_2 (acpi_gbl_integer_byte_width));
+               return_desc = acpi_ut_create_buffer_object((acpi_size)
+                                                          ACPI_MUL_2
+                                                          (acpi_gbl_integer_byte_width));
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
                }
 
-               new_buf = (char *) return_desc->buffer.pointer;
+               new_buf = (char *)return_desc->buffer.pointer;
 
                /* Copy the first integer, LSB first */
 
-               ACPI_MEMCPY (new_buf,
-                                 &operand0->integer.value,
-                                 acpi_gbl_integer_byte_width);
+               ACPI_MEMCPY(new_buf,
+                           &operand0->integer.value,
+                           acpi_gbl_integer_byte_width);
 
                /* Copy the second integer (LSB first) after the first */
 
-               ACPI_MEMCPY (new_buf + acpi_gbl_integer_byte_width,
-                                 &local_operand1->integer.value,
-                                 acpi_gbl_integer_byte_width);
+               ACPI_MEMCPY(new_buf + acpi_gbl_integer_byte_width,
+                           &local_operand1->integer.value,
+                           acpi_gbl_integer_byte_width);
                break;
 
        case ACPI_TYPE_STRING:
@@ -329,13 +312,13 @@ acpi_ex_do_concatenate (
                /* Result of two Strings is a String */
 
                new_length = (acpi_size) operand0->string.length +
-                                (acpi_size) local_operand1->string.length;
+                   (acpi_size) local_operand1->string.length;
                if (new_length > ACPI_MAX_STRING_CONVERSION) {
                        status = AE_AML_STRING_LIMIT;
                        goto cleanup;
                }
 
-               return_desc = acpi_ut_create_string_object (new_length);
+               return_desc = acpi_ut_create_string_object(new_length);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
@@ -345,56 +328,56 @@ acpi_ex_do_concatenate (
 
                /* Concatenate the strings */
 
-               ACPI_STRCPY (new_buf,
-                                 operand0->string.pointer);
-               ACPI_STRCPY (new_buf + operand0->string.length,
-                                 local_operand1->string.pointer);
+               ACPI_STRCPY(new_buf, operand0->string.pointer);
+               ACPI_STRCPY(new_buf + operand0->string.length,
+                           local_operand1->string.pointer);
                break;
 
        case ACPI_TYPE_BUFFER:
 
                /* Result of two Buffers is a Buffer */
 
-               return_desc = acpi_ut_create_buffer_object (
-                                  (acpi_size) operand0->buffer.length +
-                                  (acpi_size) local_operand1->buffer.length);
+               return_desc = acpi_ut_create_buffer_object((acpi_size)
+                                                          operand0->buffer.
+                                                          length +
+                                                          (acpi_size)
+                                                          local_operand1->
+                                                          buffer.length);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
                }
 
-               new_buf = (char *) return_desc->buffer.pointer;
+               new_buf = (char *)return_desc->buffer.pointer;
 
                /* Concatenate the buffers */
 
-               ACPI_MEMCPY (new_buf,
-                                 operand0->buffer.pointer,
-                                 operand0->buffer.length);
-               ACPI_MEMCPY (new_buf + operand0->buffer.length,
-                                 local_operand1->buffer.pointer,
-                                 local_operand1->buffer.length);
+               ACPI_MEMCPY(new_buf,
+                           operand0->buffer.pointer, operand0->buffer.length);
+               ACPI_MEMCPY(new_buf + operand0->buffer.length,
+                           local_operand1->buffer.pointer,
+                           local_operand1->buffer.length);
                break;
 
        default:
 
                /* Invalid object type, should not happen here */
 
-               ACPI_REPORT_ERROR (("Concatenate - Invalid object type: %X\n",
-                               ACPI_GET_OBJECT_TYPE (operand0)));
-               status =AE_AML_INTERNAL;
+               ACPI_REPORT_ERROR(("Concatenate - Invalid object type: %X\n",
+                                  ACPI_GET_OBJECT_TYPE(operand0)));
+               status = AE_AML_INTERNAL;
                goto cleanup;
        }
 
        *actual_return_desc = return_desc;
 
-cleanup:
+      cleanup:
        if (local_operand1 != operand1) {
-               acpi_ut_remove_reference (local_operand1);
+               acpi_ut_remove_reference(local_operand1);
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_do_math_op
@@ -412,62 +395,49 @@ cleanup:
  ******************************************************************************/
 
 acpi_integer
-acpi_ex_do_math_op (
-       u16                             opcode,
-       acpi_integer                    integer0,
-       acpi_integer                    integer1)
+acpi_ex_do_math_op(u16 opcode, acpi_integer integer0, acpi_integer integer1)
 {
 
-       ACPI_FUNCTION_ENTRY ();
-
+       ACPI_FUNCTION_ENTRY();
 
        switch (opcode) {
-       case AML_ADD_OP:                /* Add (Integer0, Integer1, Result) */
+       case AML_ADD_OP:        /* Add (Integer0, Integer1, Result) */
 
                return (integer0 + integer1);
 
-
-       case AML_BIT_AND_OP:            /* And (Integer0, Integer1, Result) */
+       case AML_BIT_AND_OP:    /* And (Integer0, Integer1, Result) */
 
                return (integer0 & integer1);
 
-
-       case AML_BIT_NAND_OP:           /* NAnd (Integer0, Integer1, Result) */
+       case AML_BIT_NAND_OP:   /* NAnd (Integer0, Integer1, Result) */
 
                return (~(integer0 & integer1));
 
-
-       case AML_BIT_OR_OP:             /* Or (Integer0, Integer1, Result) */
+       case AML_BIT_OR_OP:     /* Or (Integer0, Integer1, Result) */
 
                return (integer0 | integer1);
 
-
-       case AML_BIT_NOR_OP:            /* NOr (Integer0, Integer1, Result) */
+       case AML_BIT_NOR_OP:    /* NOr (Integer0, Integer1, Result) */
 
                return (~(integer0 | integer1));
 
-
-       case AML_BIT_XOR_OP:            /* XOr (Integer0, Integer1, Result) */
+       case AML_BIT_XOR_OP:    /* XOr (Integer0, Integer1, Result) */
 
                return (integer0 ^ integer1);
 
-
-       case AML_MULTIPLY_OP:           /* Multiply (Integer0, Integer1, Result) */
+       case AML_MULTIPLY_OP:   /* Multiply (Integer0, Integer1, Result) */
 
                return (integer0 * integer1);
 
-
-       case AML_SHIFT_LEFT_OP:         /* shift_left (Operand, shift_count, Result)*/
+       case AML_SHIFT_LEFT_OP: /* shift_left (Operand, shift_count, Result) */
 
                return (integer0 << integer1);
 
-
-       case AML_SHIFT_RIGHT_OP:        /* shift_right (Operand, shift_count, Result) */
+       case AML_SHIFT_RIGHT_OP:        /* shift_right (Operand, shift_count, Result) */
 
                return (integer0 >> integer1);
 
-
-       case AML_SUBTRACT_OP:           /* Subtract (Integer0, Integer1, Result) */
+       case AML_SUBTRACT_OP:   /* Subtract (Integer0, Integer1, Result) */
 
                return (integer0 - integer1);
 
@@ -477,7 +447,6 @@ acpi_ex_do_math_op (
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_do_logical_numeric_op
@@ -499,28 +468,24 @@ acpi_ex_do_math_op (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_do_logical_numeric_op (
-       u16                             opcode,
-       acpi_integer                    integer0,
-       acpi_integer                    integer1,
-       u8                              *logical_result)
+acpi_ex_do_logical_numeric_op(u16 opcode,
+                             acpi_integer integer0,
+                             acpi_integer integer1, u8 * logical_result)
 {
-       acpi_status                     status = AE_OK;
-       u8                              local_result = FALSE;
-
-
-       ACPI_FUNCTION_TRACE ("ex_do_logical_numeric_op");
+       acpi_status status = AE_OK;
+       u8 local_result = FALSE;
 
+       ACPI_FUNCTION_TRACE("ex_do_logical_numeric_op");
 
        switch (opcode) {
-       case AML_LAND_OP:               /* LAnd (Integer0, Integer1) */
+       case AML_LAND_OP:       /* LAnd (Integer0, Integer1) */
 
                if (integer0 && integer1) {
                        local_result = TRUE;
                }
                break;
 
-       case AML_LOR_OP:                /* LOr (Integer0, Integer1) */
+       case AML_LOR_OP:        /* LOr (Integer0, Integer1) */
 
                if (integer0 || integer1) {
                        local_result = TRUE;
@@ -535,10 +500,9 @@ acpi_ex_do_logical_numeric_op (
        /* Return the logical result and status */
 
        *logical_result = local_result;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_do_logical_op
@@ -566,24 +530,20 @@ acpi_ex_do_logical_numeric_op (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_do_logical_op (
-       u16                             opcode,
-       union acpi_operand_object       *operand0,
-       union acpi_operand_object       *operand1,
-       u8                              *logical_result)
+acpi_ex_do_logical_op(u16 opcode,
+                     union acpi_operand_object *operand0,
+                     union acpi_operand_object *operand1, u8 * logical_result)
 {
-       union acpi_operand_object       *local_operand1 = operand1;
-       acpi_integer                    integer0;
-       acpi_integer                    integer1;
-       u32                             length0;
-       u32                             length1;
-       acpi_status                     status = AE_OK;
-       u8                              local_result = FALSE;
-       int                             compare;
-
-
-       ACPI_FUNCTION_TRACE ("ex_do_logical_op");
+       union acpi_operand_object *local_operand1 = operand1;
+       acpi_integer integer0;
+       acpi_integer integer1;
+       u32 length0;
+       u32 length1;
+       acpi_status status = AE_OK;
+       u8 local_result = FALSE;
+       int compare;
 
+       ACPI_FUNCTION_TRACE("ex_do_logical_op");
 
        /*
         * Convert the second operand if necessary.  The first operand
@@ -592,18 +552,19 @@ acpi_ex_do_logical_op (
         * guaranteed to be either Integer/String/Buffer by the operand
         * resolution mechanism.
         */
-       switch (ACPI_GET_OBJECT_TYPE (operand0)) {
+       switch (ACPI_GET_OBJECT_TYPE(operand0)) {
        case ACPI_TYPE_INTEGER:
-               status = acpi_ex_convert_to_integer (operand1, &local_operand1, 16);
+               status =
+                   acpi_ex_convert_to_integer(operand1, &local_operand1, 16);
                break;
 
        case ACPI_TYPE_STRING:
-               status = acpi_ex_convert_to_string (operand1, &local_operand1,
-                                ACPI_IMPLICIT_CONVERT_HEX);
+               status = acpi_ex_convert_to_string(operand1, &local_operand1,
+                                                  ACPI_IMPLICIT_CONVERT_HEX);
                break;
 
        case ACPI_TYPE_BUFFER:
-               status = acpi_ex_convert_to_buffer (operand1, &local_operand1);
+               status = acpi_ex_convert_to_buffer(operand1, &local_operand1);
                break;
 
        default:
@@ -611,14 +572,14 @@ acpi_ex_do_logical_op (
                break;
        }
 
-       if (ACPI_FAILURE (status)) {
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
        /*
         * Two cases: 1) Both Integers, 2) Both Strings or Buffers
         */
-       if (ACPI_GET_OBJECT_TYPE (operand0) == ACPI_TYPE_INTEGER) {
+       if (ACPI_GET_OBJECT_TYPE(operand0) == ACPI_TYPE_INTEGER) {
                /*
                 * 1) Both operands are of type integer
                 *    Note: local_operand1 may have changed above
@@ -627,21 +588,21 @@ acpi_ex_do_logical_op (
                integer1 = local_operand1->integer.value;
 
                switch (opcode) {
-               case AML_LEQUAL_OP:             /* LEqual (Operand0, Operand1) */
+               case AML_LEQUAL_OP:     /* LEqual (Operand0, Operand1) */
 
                        if (integer0 == integer1) {
                                local_result = TRUE;
                        }
                        break;
 
-               case AML_LGREATER_OP:           /* LGreater (Operand0, Operand1) */
+               case AML_LGREATER_OP:   /* LGreater (Operand0, Operand1) */
 
                        if (integer0 > integer1) {
                                local_result = TRUE;
                        }
                        break;
 
-               case AML_LLESS_OP:              /* LLess (Operand0, Operand1) */
+               case AML_LLESS_OP:      /* LLess (Operand0, Operand1) */
 
                        if (integer0 < integer1) {
                                local_result = TRUE;
@@ -652,8 +613,7 @@ acpi_ex_do_logical_op (
                        status = AE_AML_INTERNAL;
                        break;
                }
-       }
-       else {
+       } else {
                /*
                 * 2) Both operands are Strings or both are Buffers
                 *    Note: Code below takes advantage of common Buffer/String
@@ -665,31 +625,31 @@ acpi_ex_do_logical_op (
 
                /* Lexicographic compare: compare the data bytes */
 
-               compare = ACPI_MEMCMP ((const char * ) operand0->buffer.pointer,
-                                (const char * ) local_operand1->buffer.pointer,
-                                (length0 > length1) ? length1 : length0);
+               compare = ACPI_MEMCMP((const char *)operand0->buffer.pointer,
+                                     (const char *)local_operand1->buffer.
+                                     pointer,
+                                     (length0 > length1) ? length1 : length0);
 
                switch (opcode) {
-               case AML_LEQUAL_OP:             /* LEqual (Operand0, Operand1) */
+               case AML_LEQUAL_OP:     /* LEqual (Operand0, Operand1) */
 
                        /* Length and all bytes must be equal */
 
-                       if ((length0 == length1) &&
-                               (compare == 0)) {
+                       if ((length0 == length1) && (compare == 0)) {
                                /* Length and all bytes match ==> TRUE */
 
                                local_result = TRUE;
                        }
                        break;
 
-               case AML_LGREATER_OP:           /* LGreater (Operand0, Operand1) */
+               case AML_LGREATER_OP:   /* LGreater (Operand0, Operand1) */
 
                        if (compare > 0) {
                                local_result = TRUE;
-                               goto cleanup;   /* TRUE */
+                               goto cleanup;   /* TRUE */
                        }
                        if (compare < 0) {
-                               goto cleanup;   /* FALSE */
+                               goto cleanup;   /* FALSE */
                        }
 
                        /* Bytes match (to shortest length), compare lengths */
@@ -699,14 +659,14 @@ acpi_ex_do_logical_op (
                        }
                        break;
 
-               case AML_LLESS_OP:              /* LLess (Operand0, Operand1) */
+               case AML_LLESS_OP:      /* LLess (Operand0, Operand1) */
 
                        if (compare > 0) {
-                               goto cleanup;   /* FALSE */
+                               goto cleanup;   /* FALSE */
                        }
                        if (compare < 0) {
                                local_result = TRUE;
-                               goto cleanup;   /* TRUE */
+                               goto cleanup;   /* TRUE */
                        }
 
                        /* Bytes match (to shortest length), compare lengths */
@@ -722,18 +682,16 @@ acpi_ex_do_logical_op (
                }
        }
 
-cleanup:
+      cleanup:
 
        /* New object was created if implicit conversion performed - delete */
 
        if (local_operand1 != operand1) {
-               acpi_ut_remove_reference (local_operand1);
+               acpi_ut_remove_reference(local_operand1);
        }
 
        /* Return the logical result and status */
 
        *logical_result = local_result;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index c3cb714d2cbaaa81e239b5b2f0c76e59af96cec0..ab47f6d8b5c0bd664c471788b11f70823a9f479f 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exmutex")
+ACPI_MODULE_NAME("exmutex")
 
 /* Local prototypes */
-
 static void
-acpi_ex_link_mutex (
-       union acpi_operand_object       *obj_desc,
-       struct acpi_thread_state        *thread);
-
+acpi_ex_link_mutex(union acpi_operand_object *obj_desc,
+                  struct acpi_thread_state *thread);
 
 /*******************************************************************************
  *
@@ -69,12 +65,9 @@ acpi_ex_link_mutex (
  *
  ******************************************************************************/
 
-void
-acpi_ex_unlink_mutex (
-       union acpi_operand_object       *obj_desc)
+void acpi_ex_unlink_mutex(union acpi_operand_object *obj_desc)
 {
-       struct acpi_thread_state        *thread = obj_desc->mutex.owner_thread;
-
+       struct acpi_thread_state *thread = obj_desc->mutex.owner_thread;
 
        if (!thread) {
                return;
@@ -88,13 +81,11 @@ acpi_ex_unlink_mutex (
 
        if (obj_desc->mutex.prev) {
                (obj_desc->mutex.prev)->mutex.next = obj_desc->mutex.next;
-       }
-       else {
+       } else {
                thread->acquired_mutex_list = obj_desc->mutex.next;
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_link_mutex
@@ -109,12 +100,10 @@ acpi_ex_unlink_mutex (
  ******************************************************************************/
 
 static void
-acpi_ex_link_mutex (
-       union acpi_operand_object       *obj_desc,
-       struct acpi_thread_state        *thread)
+acpi_ex_link_mutex(union acpi_operand_object *obj_desc,
+                  struct acpi_thread_state *thread)
 {
-       union acpi_operand_object       *list_head;
-
+       union acpi_operand_object *list_head;
 
        list_head = thread->acquired_mutex_list;
 
@@ -134,7 +123,6 @@ acpi_ex_link_mutex (
        thread->acquired_mutex_list = obj_desc;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_acquire_mutex
@@ -150,27 +138,23 @@ acpi_ex_link_mutex (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_acquire_mutex (
-       union acpi_operand_object       *time_desc,
-       union acpi_operand_object       *obj_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
+                     union acpi_operand_object *obj_desc,
+                     struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_acquire_mutex", obj_desc);
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_acquire_mutex", obj_desc);
 
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Sanity check -- we must have a valid thread ID */
 
        if (!walk_state->thread) {
-               ACPI_REPORT_ERROR (("Cannot acquire Mutex [%4.4s], null thread info\n",
-                       acpi_ut_get_node_name (obj_desc->mutex.node)));
-               return_ACPI_STATUS (AE_AML_INTERNAL);
+               ACPI_REPORT_ERROR(("Cannot acquire Mutex [%4.4s], null thread info\n", acpi_ut_get_node_name(obj_desc->mutex.node)));
+               return_ACPI_STATUS(AE_AML_INTERNAL);
        }
 
        /*
@@ -178,10 +162,8 @@ acpi_ex_acquire_mutex (
         * mutex.  This mechanism provides some deadlock prevention
         */
        if (walk_state->thread->current_sync_level > obj_desc->mutex.sync_level) {
-               ACPI_REPORT_ERROR ((
-                       "Cannot acquire Mutex [%4.4s], incorrect sync_level\n",
-                       acpi_ut_get_node_name (obj_desc->mutex.node)));
-               return_ACPI_STATUS (AE_AML_MUTEX_ORDER);
+               ACPI_REPORT_ERROR(("Cannot acquire Mutex [%4.4s], incorrect sync_level\n", acpi_ut_get_node_name(obj_desc->mutex.node)));
+               return_ACPI_STATUS(AE_AML_MUTEX_ORDER);
        }
 
        /* Support for multiple acquires by the owning thread */
@@ -190,43 +172,43 @@ acpi_ex_acquire_mutex (
                /* Special case for Global Lock, allow all threads */
 
                if ((obj_desc->mutex.owner_thread->thread_id ==
-                               walk_state->thread->thread_id)      ||
-                       (obj_desc->mutex.semaphore ==
-                               acpi_gbl_global_lock_semaphore)) {
+                    walk_state->thread->thread_id) ||
+                   (obj_desc->mutex.semaphore ==
+                    acpi_gbl_global_lock_semaphore)) {
                        /*
                         * The mutex is already owned by this thread,
                         * just increment the acquisition depth
                         */
                        obj_desc->mutex.acquisition_depth++;
-                       return_ACPI_STATUS (AE_OK);
+                       return_ACPI_STATUS(AE_OK);
                }
        }
 
        /* Acquire the mutex, wait if necessary */
 
-       status = acpi_ex_system_acquire_mutex (time_desc, obj_desc);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ex_system_acquire_mutex(time_desc, obj_desc);
+       if (ACPI_FAILURE(status)) {
                /* Includes failure from a timeout on time_desc */
 
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
        /* Have the mutex: update mutex and walk info and save the sync_level */
 
-       obj_desc->mutex.owner_thread     = walk_state->thread;
+       obj_desc->mutex.owner_thread = walk_state->thread;
        obj_desc->mutex.acquisition_depth = 1;
-       obj_desc->mutex.original_sync_level = walk_state->thread->current_sync_level;
+       obj_desc->mutex.original_sync_level =
+           walk_state->thread->current_sync_level;
 
        walk_state->thread->current_sync_level = obj_desc->mutex.sync_level;
 
        /* Link the mutex to the current thread for force-unlock at method exit */
 
-       acpi_ex_link_mutex (obj_desc, walk_state->thread);
+       acpi_ex_link_mutex(obj_desc, walk_state->thread);
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_release_mutex
@@ -241,48 +223,40 @@ acpi_ex_acquire_mutex (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_release_mutex (
-       union acpi_operand_object       *obj_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
+                     struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ex_release_mutex");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ex_release_mutex");
 
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* The mutex must have been previously acquired in order to release it */
 
        if (!obj_desc->mutex.owner_thread) {
-               ACPI_REPORT_ERROR (("Cannot release Mutex [%4.4s], not acquired\n",
-                               acpi_ut_get_node_name (obj_desc->mutex.node)));
-               return_ACPI_STATUS (AE_AML_MUTEX_NOT_ACQUIRED);
+               ACPI_REPORT_ERROR(("Cannot release Mutex [%4.4s], not acquired\n", acpi_ut_get_node_name(obj_desc->mutex.node)));
+               return_ACPI_STATUS(AE_AML_MUTEX_NOT_ACQUIRED);
        }
 
        /* Sanity check -- we must have a valid thread ID */
 
        if (!walk_state->thread) {
-               ACPI_REPORT_ERROR (("Cannot release Mutex [%4.4s], null thread info\n",
-                               acpi_ut_get_node_name (obj_desc->mutex.node)));
-               return_ACPI_STATUS (AE_AML_INTERNAL);
+               ACPI_REPORT_ERROR(("Cannot release Mutex [%4.4s], null thread info\n", acpi_ut_get_node_name(obj_desc->mutex.node)));
+               return_ACPI_STATUS(AE_AML_INTERNAL);
        }
 
        /*
         * The Mutex is owned, but this thread must be the owner.
         * Special case for Global Lock, any thread can release
         */
-       if ((obj_desc->mutex.owner_thread->thread_id != walk_state->thread->thread_id) &&
-               (obj_desc->mutex.semaphore != acpi_gbl_global_lock_semaphore)) {
-               ACPI_REPORT_ERROR ((
-                       "Thread %X cannot release Mutex [%4.4s] acquired by thread %X\n",
-                       walk_state->thread->thread_id,
-                       acpi_ut_get_node_name (obj_desc->mutex.node),
-                       obj_desc->mutex.owner_thread->thread_id));
-               return_ACPI_STATUS (AE_AML_NOT_OWNER);
+       if ((obj_desc->mutex.owner_thread->thread_id !=
+            walk_state->thread->thread_id)
+           && (obj_desc->mutex.semaphore != acpi_gbl_global_lock_semaphore)) {
+               ACPI_REPORT_ERROR(("Thread %X cannot release Mutex [%4.4s] acquired by thread %X\n", walk_state->thread->thread_id, acpi_ut_get_node_name(obj_desc->mutex.node), obj_desc->mutex.owner_thread->thread_id));
+               return_ACPI_STATUS(AE_AML_NOT_OWNER);
        }
 
        /*
@@ -290,10 +264,8 @@ acpi_ex_release_mutex (
         * equal to the current sync level
         */
        if (obj_desc->mutex.sync_level > walk_state->thread->current_sync_level) {
-               ACPI_REPORT_ERROR ((
-                       "Cannot release Mutex [%4.4s], incorrect sync_level\n",
-                       acpi_ut_get_node_name (obj_desc->mutex.node)));
-               return_ACPI_STATUS (AE_AML_MUTEX_ORDER);
+               ACPI_REPORT_ERROR(("Cannot release Mutex [%4.4s], incorrect sync_level\n", acpi_ut_get_node_name(obj_desc->mutex.node)));
+               return_ACPI_STATUS(AE_AML_MUTEX_ORDER);
        }
 
        /* Match multiple Acquires with multiple Releases */
@@ -302,26 +274,26 @@ acpi_ex_release_mutex (
        if (obj_desc->mutex.acquisition_depth != 0) {
                /* Just decrement the depth and return */
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Unlink the mutex from the owner's list */
 
-       acpi_ex_unlink_mutex (obj_desc);
+       acpi_ex_unlink_mutex(obj_desc);
 
        /* Release the mutex */
 
-       status = acpi_ex_system_release_mutex (obj_desc);
+       status = acpi_ex_system_release_mutex(obj_desc);
 
        /* Update the mutex and walk state, restore sync_level before acquire */
 
        obj_desc->mutex.owner_thread = NULL;
-       walk_state->thread->current_sync_level = obj_desc->mutex.original_sync_level;
+       walk_state->thread->current_sync_level =
+           obj_desc->mutex.original_sync_level;
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_release_all_mutexes
@@ -334,17 +306,13 @@ acpi_ex_release_mutex (
  *
  ******************************************************************************/
 
-void
-acpi_ex_release_all_mutexes (
-       struct acpi_thread_state        *thread)
+void acpi_ex_release_all_mutexes(struct acpi_thread_state *thread)
 {
-       union acpi_operand_object       *next = thread->acquired_mutex_list;
-       union acpi_operand_object       *this;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       union acpi_operand_object *next = thread->acquired_mutex_list;
+       union acpi_operand_object *this;
+       acpi_status status;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* Traverse the list of owned mutexes, releasing each one */
 
@@ -353,13 +321,13 @@ acpi_ex_release_all_mutexes (
                next = this->mutex.next;
 
                this->mutex.acquisition_depth = 1;
-               this->mutex.prev             = NULL;
-               this->mutex.next             = NULL;
+               this->mutex.prev = NULL;
+               this->mutex.next = NULL;
 
-                /* Release the mutex */
+               /* Release the mutex */
 
-               status = acpi_ex_system_release_mutex (this);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ex_system_release_mutex(this);
+               if (ACPI_FAILURE(status)) {
                        continue;
                }
 
@@ -372,5 +340,3 @@ acpi_ex_release_all_mutexes (
                thread->current_sync_level = this->mutex.original_sync_level;
        }
 }
-
-
index 639f0bd3f6d86dd25c77c9df9b626be8edbef058..239d8473e9a5c8d7195861d03ccb02d89688ef9f 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/amlcode.h>
 
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exnames")
+ACPI_MODULE_NAME("exnames")
 
 /* Local prototypes */
-
-static char *
-acpi_ex_allocate_name_string (
-       u32                             prefix_count,
-       u32                             num_name_segs);
+static char *acpi_ex_allocate_name_string(u32 prefix_count, u32 num_name_segs);
 
 static acpi_status
-acpi_ex_name_segment (
-       u8                              **in_aml_address,
-       char                            *name_string);
-
+acpi_ex_name_segment(u8 ** in_aml_address, char *name_string);
 
 /*******************************************************************************
  *
@@ -79,17 +71,13 @@ acpi_ex_name_segment (
  *
  ******************************************************************************/
 
-static char *
-acpi_ex_allocate_name_string (
-       u32                             prefix_count,
-       u32                             num_name_segs)
+static char *acpi_ex_allocate_name_string(u32 prefix_count, u32 num_name_segs)
 {
-       char                            *temp_ptr;
-       char                            *name_string;
-       u32                              size_needed;
-
-       ACPI_FUNCTION_TRACE ("ex_allocate_name_string");
+       char *temp_ptr;
+       char *name_string;
+       u32 size_needed;
 
+       ACPI_FUNCTION_TRACE("ex_allocate_name_string");
 
        /*
         * Allow room for all \ and ^ prefixes, all segments and a multi_name_prefix.
@@ -100,20 +88,19 @@ acpi_ex_allocate_name_string (
                /* Special case for root */
 
                size_needed = 1 + (ACPI_NAME_SIZE * num_name_segs) + 2 + 1;
-       }
-       else {
-               size_needed = prefix_count + (ACPI_NAME_SIZE * num_name_segs) + 2 + 1;
+       } else {
+               size_needed =
+                   prefix_count + (ACPI_NAME_SIZE * num_name_segs) + 2 + 1;
        }
 
        /*
         * Allocate a buffer for the name.
         * This buffer must be deleted by the caller!
         */
-       name_string = ACPI_MEM_ALLOCATE (size_needed);
+       name_string = ACPI_MEM_ALLOCATE(size_needed);
        if (!name_string) {
-               ACPI_REPORT_ERROR ((
-                       "ex_allocate_name_string: Could not allocate size %d\n", size_needed));
-               return_PTR (NULL);
+               ACPI_REPORT_ERROR(("ex_allocate_name_string: Could not allocate size %d\n", size_needed));
+               return_PTR(NULL);
        }
 
        temp_ptr = name_string;
@@ -122,23 +109,20 @@ acpi_ex_allocate_name_string (
 
        if (prefix_count == ACPI_UINT32_MAX) {
                *temp_ptr++ = AML_ROOT_PREFIX;
-       }
-       else {
+       } else {
                while (prefix_count--) {
                        *temp_ptr++ = AML_PARENT_PREFIX;
                }
        }
 
-
        /* Set up Dual or Multi prefixes if needed */
 
        if (num_name_segs > 2) {
                /* Set up multi prefixes   */
 
                *temp_ptr++ = AML_MULTI_NAME_PREFIX_OP;
-               *temp_ptr++ = (char) num_name_segs;
-       }
-       else if (2 == num_name_segs) {
+               *temp_ptr++ = (char)num_name_segs;
+       } else if (2 == num_name_segs) {
                /* Set up dual prefixes */
 
                *temp_ptr++ = AML_DUAL_NAME_PREFIX;
@@ -150,7 +134,7 @@ acpi_ex_allocate_name_string (
         */
        *temp_ptr = 0;
 
-       return_PTR (name_string);
+       return_PTR(name_string);
 }
 
 /*******************************************************************************
@@ -167,19 +151,14 @@ acpi_ex_allocate_name_string (
  *
  ******************************************************************************/
 
-static acpi_status
-acpi_ex_name_segment (
-       u8                              **in_aml_address,
-       char                            *name_string)
+static acpi_status acpi_ex_name_segment(u8 ** in_aml_address, char *name_string)
 {
-       char                            *aml_address = (void *) *in_aml_address;
-       acpi_status                     status = AE_OK;
-       u32                             index;
-       char                            char_buf[5];
-
-
-       ACPI_FUNCTION_TRACE ("ex_name_segment");
+       char *aml_address = (void *)*in_aml_address;
+       acpi_status status = AE_OK;
+       u32 index;
+       char char_buf[5];
 
+       ACPI_FUNCTION_TRACE("ex_name_segment");
 
        /*
         * If first character is a digit, then we know that we aren't looking at a
@@ -188,20 +167,20 @@ acpi_ex_name_segment (
        char_buf[0] = *aml_address;
 
        if ('0' <= char_buf[0] && char_buf[0] <= '9') {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "leading digit: %c\n", char_buf[0]));
-               return_ACPI_STATUS (AE_CTRL_PENDING);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "leading digit: %c\n",
+                                 char_buf[0]));
+               return_ACPI_STATUS(AE_CTRL_PENDING);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "Bytes from stream:\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "Bytes from stream:\n"));
 
        for (index = 0;
-               (index < ACPI_NAME_SIZE) && (acpi_ut_valid_acpi_character (*aml_address));
-               index++) {
+            (index < ACPI_NAME_SIZE)
+            && (acpi_ut_valid_acpi_character(*aml_address)); index++) {
                char_buf[index] = *aml_address++;
-               ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "%c\n", char_buf[index]));
+               ACPI_DEBUG_PRINT((ACPI_DB_LOAD, "%c\n", char_buf[index]));
        }
 
-
        /* Valid name segment  */
 
        if (index == 4) {
@@ -210,41 +189,37 @@ acpi_ex_name_segment (
                char_buf[4] = '\0';
 
                if (name_string) {
-                       ACPI_STRCAT (name_string, char_buf);
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                               "Appended to - %s \n", name_string));
-               }
-               else {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                               "No Name string - %s \n", char_buf));
+                       ACPI_STRCAT(name_string, char_buf);
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "Appended to - %s \n", name_string));
+               } else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "No Name string - %s \n", char_buf));
                }
-       }
-       else if (index == 0) {
+       } else if (index == 0) {
                /*
                 * First character was not a valid name character,
                 * so we are looking at something other than a name.
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                       "Leading character is not alpha: %02Xh (not a name)\n",
-                       char_buf[0]));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Leading character is not alpha: %02Xh (not a name)\n",
+                                 char_buf[0]));
                status = AE_CTRL_PENDING;
-       }
-       else {
+       } else {
                /*
                 * Segment started with one or more valid characters, but fewer than
                 * the required 4
                 */
                status = AE_AML_BAD_NAME;
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Bad character %02x in name, at %p\n",
-                       *aml_address, aml_address));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Bad character %02x in name, at %p\n",
+                                 *aml_address, aml_address));
        }
 
        *in_aml_address = (u8 *) aml_address;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_get_name_string
@@ -263,37 +238,32 @@ acpi_ex_name_segment (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_get_name_string (
-       acpi_object_type                data_type,
-       u8                              *in_aml_address,
-       char                            **out_name_string,
-       u32                             *out_name_length)
+acpi_ex_get_name_string(acpi_object_type data_type,
+                       u8 * in_aml_address,
+                       char **out_name_string, u32 * out_name_length)
 {
-       acpi_status                     status = AE_OK;
-       u8                              *aml_address = in_aml_address;
-       char                            *name_string = NULL;
-       u32                             num_segments;
-       u32                             prefix_count = 0;
-       u8                              has_prefix = FALSE;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_get_name_string", aml_address);
-
-
-       if (ACPI_TYPE_LOCAL_REGION_FIELD == data_type  ||
-               ACPI_TYPE_LOCAL_BANK_FIELD == data_type    ||
-               ACPI_TYPE_LOCAL_INDEX_FIELD == data_type) {
+       acpi_status status = AE_OK;
+       u8 *aml_address = in_aml_address;
+       char *name_string = NULL;
+       u32 num_segments;
+       u32 prefix_count = 0;
+       u8 has_prefix = FALSE;
+
+       ACPI_FUNCTION_TRACE_PTR("ex_get_name_string", aml_address);
+
+       if (ACPI_TYPE_LOCAL_REGION_FIELD == data_type ||
+           ACPI_TYPE_LOCAL_BANK_FIELD == data_type ||
+           ACPI_TYPE_LOCAL_INDEX_FIELD == data_type) {
                /* Disallow prefixes for types associated with field_unit names */
 
-               name_string = acpi_ex_allocate_name_string (0, 1);
+               name_string = acpi_ex_allocate_name_string(0, 1);
                if (!name_string) {
                        status = AE_NO_MEMORY;
+               } else {
+                       status =
+                           acpi_ex_name_segment(&aml_address, name_string);
                }
-               else {
-                       status = acpi_ex_name_segment (&aml_address, name_string);
-               }
-       }
-       else {
+       } else {
                /*
                 * data_type is not a field name.
                 * Examine first character of name for root or parent prefix operators
@@ -301,8 +271,9 @@ acpi_ex_get_name_string (
                switch (*aml_address) {
                case AML_ROOT_PREFIX:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "root_prefix(\\) at %p\n",
-                               aml_address));
+                       ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
+                                         "root_prefix(\\) at %p\n",
+                                         aml_address));
 
                        /*
                         * Remember that we have a root_prefix --
@@ -313,14 +284,14 @@ acpi_ex_get_name_string (
                        has_prefix = TRUE;
                        break;
 
-
                case AML_PARENT_PREFIX:
 
                        /* Increment past possibly multiple parent prefixes */
 
                        do {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "parent_prefix (^) at %p\n",
-                                       aml_address));
+                               ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
+                                                 "parent_prefix (^) at %p\n",
+                                                 aml_address));
 
                                aml_address++;
                                prefix_count++;
@@ -330,7 +301,6 @@ acpi_ex_get_name_string (
                        has_prefix = TRUE;
                        break;
 
-
                default:
 
                        /* Not a prefix character */
@@ -343,11 +313,13 @@ acpi_ex_get_name_string (
                switch (*aml_address) {
                case AML_DUAL_NAME_PREFIX:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "dual_name_prefix at %p\n",
-                               aml_address));
+                       ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
+                                         "dual_name_prefix at %p\n",
+                                         aml_address));
 
                        aml_address++;
-                       name_string = acpi_ex_allocate_name_string (prefix_count, 2);
+                       name_string =
+                           acpi_ex_allocate_name_string(prefix_count, 2);
                        if (!name_string) {
                                status = AE_NO_MEMORY;
                                break;
@@ -357,24 +329,29 @@ acpi_ex_get_name_string (
 
                        has_prefix = TRUE;
 
-                       status = acpi_ex_name_segment (&aml_address, name_string);
-                       if (ACPI_SUCCESS (status)) {
-                               status = acpi_ex_name_segment (&aml_address, name_string);
+                       status =
+                           acpi_ex_name_segment(&aml_address, name_string);
+                       if (ACPI_SUCCESS(status)) {
+                               status =
+                                   acpi_ex_name_segment(&aml_address,
+                                                        name_string);
                        }
                        break;
 
-
                case AML_MULTI_NAME_PREFIX_OP:
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "multi_name_prefix at %p\n",
-                               aml_address));
+                       ACPI_DEBUG_PRINT((ACPI_DB_LOAD,
+                                         "multi_name_prefix at %p\n",
+                                         aml_address));
 
                        /* Fetch count of segments remaining in name path */
 
                        aml_address++;
                        num_segments = *aml_address;
 
-                       name_string = acpi_ex_allocate_name_string (prefix_count, num_segments);
+                       name_string =
+                           acpi_ex_allocate_name_string(prefix_count,
+                                                        num_segments);
                        if (!name_string) {
                                status = AE_NO_MEMORY;
                                break;
@@ -386,27 +363,28 @@ acpi_ex_get_name_string (
                        has_prefix = TRUE;
 
                        while (num_segments &&
-                                       (status = acpi_ex_name_segment (&aml_address, name_string)) ==
-                                               AE_OK) {
+                              (status =
+                               acpi_ex_name_segment(&aml_address,
+                                                    name_string)) == AE_OK) {
                                num_segments--;
                        }
 
                        break;
 
-
                case 0:
 
                        /* null_name valid as of 8-12-98 ASL/AML Grammar Update */
 
                        if (prefix_count == ACPI_UINT32_MAX) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                                       "name_seg is \"\\\" followed by NULL\n"));
+                               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                                 "name_seg is \"\\\" followed by NULL\n"));
                        }
 
                        /* Consume the NULL byte */
 
                        aml_address++;
-                       name_string = acpi_ex_allocate_name_string (prefix_count, 0);
+                       name_string =
+                           acpi_ex_allocate_name_string(prefix_count, 0);
                        if (!name_string) {
                                status = AE_NO_MEMORY;
                                break;
@@ -414,18 +392,19 @@ acpi_ex_get_name_string (
 
                        break;
 
-
                default:
 
                        /* Name segment string */
 
-                       name_string = acpi_ex_allocate_name_string (prefix_count, 1);
+                       name_string =
+                           acpi_ex_allocate_name_string(prefix_count, 1);
                        if (!name_string) {
                                status = AE_NO_MEMORY;
                                break;
                        }
 
-                       status = acpi_ex_name_segment (&aml_address, name_string);
+                       status =
+                           acpi_ex_name_segment(&aml_address, name_string);
                        break;
                }
        }
@@ -433,15 +412,20 @@ acpi_ex_get_name_string (
        if (AE_CTRL_PENDING == status && has_prefix) {
                /* Ran out of segments after processing a prefix */
 
-               ACPI_REPORT_ERROR (
-                       ("ex_do_name: Malformed Name at %p\n", name_string));
+               ACPI_REPORT_ERROR(("ex_do_name: Malformed Name at %p\n",
+                                  name_string));
                status = AE_AML_BAD_NAME;
        }
 
+       if (ACPI_FAILURE(status)) {
+               if (name_string) {
+                       ACPI_MEM_FREE(name_string);
+               }
+               return_ACPI_STATUS(status);
+       }
+
        *out_name_string = name_string;
        *out_name_length = (u32) (aml_address - in_aml_address);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index dbdf8262ba00d88e6cc51bb6817143778434997c..97e34542f5e44746bea68b73f9f01e2e353f9841 100644 (file)
@@ -42,7 +42,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/acdispat.h>
 #include <acpi/amlcode.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exoparg1")
-
+ACPI_MODULE_NAME("exoparg1")
 
 /*!
  * Naming convention for AML interpreter execution routines.
@@ -76,7 +73,6 @@
  * The AcpiExOpcode* functions are called via the Dispatcher component with
  * fully resolved operands.
 !*/
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_0A_0T_1R
  * DESCRIPTION: Execute operator with no operands, one return value
  *
  ******************************************************************************/
-
-acpi_status
-acpi_ex_opcode_0A_0T_1R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_0A_0T_1R(struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *return_desc = NULL;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_0A_0T_1R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
+       acpi_status status = AE_OK;
+       union acpi_operand_object *return_desc = NULL;
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_0A_0T_1R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        /* Examine the AML opcode */
 
        switch (walk_state->opcode) {
-       case AML_TIMER_OP:      /*  Timer () */
+       case AML_TIMER_OP:      /*  Timer () */
 
                /* Create a return object of type Integer */
 
-               return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
                }
-
-               return_desc->integer.value = acpi_os_get_timer ();
+#if ACPI_MACHINE_WIDTH != 16
+               return_desc->integer.value = acpi_os_get_timer();
+#endif
                break;
 
-       default:                /*  Unknown opcode  */
+       default:                /*  Unknown opcode  */
 
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_0A_0T_1R: Unknown opcode %X\n",
-                       walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_0A_0T_1R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                break;
        }
 
-cleanup:
-
-       if (!walk_state->result_obj) {
-               walk_state->result_obj = return_desc;
-       }
+      cleanup:
 
        /* Delete return object on error */
 
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_remove_reference (return_desc);
+       if ((ACPI_FAILURE(status)) || walk_state->result_obj) {
+               acpi_ut_remove_reference(return_desc);
+       } else {
+               /* Save the return value */
+
+               walk_state->result_obj = return_desc;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_1A_0T_0R
@@ -154,69 +144,58 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_opcode_1A_0T_0R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_1A_0T_0R(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_1A_0T_0R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_1A_0T_0R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        /* Examine the AML opcode */
 
        switch (walk_state->opcode) {
-       case AML_RELEASE_OP:    /*  Release (mutex_object) */
+       case AML_RELEASE_OP:    /*  Release (mutex_object) */
 
-               status = acpi_ex_release_mutex (operand[0], walk_state);
+               status = acpi_ex_release_mutex(operand[0], walk_state);
                break;
 
+       case AML_RESET_OP:      /*  Reset (event_object) */
 
-       case AML_RESET_OP:      /*  Reset (event_object) */
-
-               status = acpi_ex_system_reset_event (operand[0]);
+               status = acpi_ex_system_reset_event(operand[0]);
                break;
 
+       case AML_SIGNAL_OP:     /*  Signal (event_object) */
 
-       case AML_SIGNAL_OP:     /*  Signal (event_object) */
-
-               status = acpi_ex_system_signal_event (operand[0]);
+               status = acpi_ex_system_signal_event(operand[0]);
                break;
 
+       case AML_SLEEP_OP:      /*  Sleep (msec_time) */
 
-       case AML_SLEEP_OP:      /*  Sleep (msec_time) */
-
-               status = acpi_ex_system_do_suspend (operand[0]->integer.value);
+               status = acpi_ex_system_do_suspend(operand[0]->integer.value);
                break;
 
+       case AML_STALL_OP:      /*  Stall (usec_time) */
 
-       case AML_STALL_OP:      /*  Stall (usec_time) */
-
-               status = acpi_ex_system_do_stall ((u32) operand[0]->integer.value);
+               status =
+                   acpi_ex_system_do_stall((u32) operand[0]->integer.value);
                break;
 
+       case AML_UNLOAD_OP:     /*  Unload (Handle) */
 
-       case AML_UNLOAD_OP:     /*  Unload (Handle) */
-
-               status = acpi_ex_unload_table (operand[0]);
+               status = acpi_ex_unload_table(operand[0]);
                break;
 
+       default:                /*  Unknown opcode  */
 
-       default:                /*  Unknown opcode  */
-
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_1A_0T_0R: Unknown opcode %X\n",
-                       walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_1A_0T_0R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_1A_1T_0R
@@ -230,41 +209,34 @@ acpi_ex_opcode_1A_0T_0R (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_opcode_1A_1T_0R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_1A_1T_0R(struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_1A_1T_0R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
+       acpi_status status = AE_OK;
+       union acpi_operand_object **operand = &walk_state->operands[0];
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_1A_1T_0R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        /* Examine the AML opcode */
 
        switch (walk_state->opcode) {
        case AML_LOAD_OP:
 
-               status = acpi_ex_load_op (operand[0], operand[1], walk_state);
+               status = acpi_ex_load_op(operand[0], operand[1], walk_state);
                break;
 
-       default:                        /* Unknown opcode */
+       default:                /* Unknown opcode */
 
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_1A_1T_0R: Unknown opcode %X\n",
-                       walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_1A_1T_0R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                goto cleanup;
        }
 
+      cleanup:
 
-cleanup:
-
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_1A_1T_1R
@@ -278,23 +250,19 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_opcode_1A_1T_1R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       union acpi_operand_object       *return_desc = NULL;
-       union acpi_operand_object       *return_desc2 = NULL;
-       u32                             temp32;
-       u32                             i;
-       acpi_integer                    power_of_ten;
-       acpi_integer                    digit;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_1A_1T_1R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
-
+       acpi_status status = AE_OK;
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       union acpi_operand_object *return_desc = NULL;
+       union acpi_operand_object *return_desc2 = NULL;
+       u32 temp32;
+       u32 i;
+       acpi_integer power_of_ten;
+       acpi_integer digit;
+
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_1A_1T_1R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        /* Examine the AML opcode */
 
@@ -308,20 +276,19 @@ acpi_ex_opcode_1A_1T_1R (
 
                /* Create a return object of type Integer for these opcodes */
 
-               return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
                }
 
                switch (walk_state->opcode) {
-               case AML_BIT_NOT_OP:            /* Not (Operand, Result)  */
+               case AML_BIT_NOT_OP:    /* Not (Operand, Result)  */
 
                        return_desc->integer.value = ~operand[0]->integer.value;
                        break;
 
-
-               case AML_FIND_SET_LEFT_BIT_OP:  /* find_set_left_bit (Operand, Result) */
+               case AML_FIND_SET_LEFT_BIT_OP:  /* find_set_left_bit (Operand, Result) */
 
                        return_desc->integer.value = operand[0]->integer.value;
 
@@ -330,15 +297,14 @@ acpi_ex_opcode_1A_1T_1R (
                         * endian unsigned value, so this boundary condition is valid.
                         */
                        for (temp32 = 0; return_desc->integer.value &&
-                                          temp32 < ACPI_INTEGER_BIT_SIZE; ++temp32) {
+                            temp32 < ACPI_INTEGER_BIT_SIZE; ++temp32) {
                                return_desc->integer.value >>= 1;
                        }
 
                        return_desc->integer.value = temp32;
                        break;
 
-
-               case AML_FIND_SET_RIGHT_BIT_OP: /* find_set_right_bit (Operand, Result) */
+               case AML_FIND_SET_RIGHT_BIT_OP: /* find_set_right_bit (Operand, Result) */
 
                        return_desc->integer.value = operand[0]->integer.value;
 
@@ -347,18 +313,17 @@ acpi_ex_opcode_1A_1T_1R (
                         * endian unsigned value, so this boundary condition is valid.
                         */
                        for (temp32 = 0; return_desc->integer.value &&
-                                          temp32 < ACPI_INTEGER_BIT_SIZE; ++temp32) {
+                            temp32 < ACPI_INTEGER_BIT_SIZE; ++temp32) {
                                return_desc->integer.value <<= 1;
                        }
 
                        /* Since the bit position is one-based, subtract from 33 (65) */
 
                        return_desc->integer.value = temp32 == 0 ? 0 :
-                                         (ACPI_INTEGER_BIT_SIZE + 1) - temp32;
+                           (ACPI_INTEGER_BIT_SIZE + 1) - temp32;
                        break;
 
-
-               case AML_FROM_BCD_OP:           /* from_bcd (BCDValue, Result) */
+               case AML_FROM_BCD_OP:   /* from_bcd (BCDValue, Result) */
 
                        /*
                         * The 64-bit ACPI integer can hold 16 4-bit BCD characters
@@ -371,7 +336,9 @@ acpi_ex_opcode_1A_1T_1R (
 
                        /* Convert each BCD digit (each is one nybble wide) */
 
-                       for (i = 0; (i < acpi_gbl_integer_nybble_width) && (digit > 0); i++) {
+                       for (i = 0;
+                            (i < acpi_gbl_integer_nybble_width) && (digit > 0);
+                            i++) {
                                /* Get the least significant 4-bit BCD digit */
 
                                temp32 = ((u32) digit) & 0xF;
@@ -379,9 +346,9 @@ acpi_ex_opcode_1A_1T_1R (
                                /* Check the range of the digit */
 
                                if (temp32 > 9) {
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                               "BCD digit too large (not decimal): 0x%X\n",
-                                               temp32));
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "BCD digit too large (not decimal): 0x%X\n",
+                                                         temp32));
 
                                        status = AE_AML_NUMERIC_OVERFLOW;
                                        goto cleanup;
@@ -389,8 +356,8 @@ acpi_ex_opcode_1A_1T_1R (
 
                                /* Sum the digit into the result with the current power of 10 */
 
-                               return_desc->integer.value += (((acpi_integer) temp32) *
-                                                power_of_ten);
+                               return_desc->integer.value +=
+                                   (((acpi_integer) temp32) * power_of_ten);
 
                                /* Shift to next BCD digit */
 
@@ -402,45 +369,50 @@ acpi_ex_opcode_1A_1T_1R (
                        }
                        break;
 
-
-               case AML_TO_BCD_OP:             /* to_bcd (Operand, Result) */
+               case AML_TO_BCD_OP:     /* to_bcd (Operand, Result) */
 
                        return_desc->integer.value = 0;
                        digit = operand[0]->integer.value;
 
                        /* Each BCD digit is one nybble wide */
 
-                       for (i = 0; (i < acpi_gbl_integer_nybble_width) && (digit > 0); i++) {
-                               (void) acpi_ut_short_divide (digit, 10, &digit, &temp32);
+                       for (i = 0;
+                            (i < acpi_gbl_integer_nybble_width) && (digit > 0);
+                            i++) {
+                               (void)acpi_ut_short_divide(digit, 10, &digit,
+                                                          &temp32);
 
                                /*
                                 * Insert the BCD digit that resides in the
                                 * remainder from above
                                 */
-                               return_desc->integer.value |= (((acpi_integer) temp32) <<
-                                                  ACPI_MUL_4 (i));
+                               return_desc->integer.value |=
+                                   (((acpi_integer) temp32) << ACPI_MUL_4(i));
                        }
 
                        /* Overflow if there is any data left in Digit */
 
                        if (digit > 0) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Integer too large to convert to BCD: %8.8X%8.8X\n",
-                                       ACPI_FORMAT_UINT64 (operand[0]->integer.value)));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Integer too large to convert to BCD: %8.8X%8.8X\n",
+                                                 ACPI_FORMAT_UINT64(operand
+                                                                    [0]->
+                                                                    integer.
+                                                                    value)));
                                status = AE_AML_NUMERIC_OVERFLOW;
                                goto cleanup;
                        }
                        break;
 
-
-               case AML_COND_REF_OF_OP:        /* cond_ref_of (source_object, Result) */
+               case AML_COND_REF_OF_OP:        /* cond_ref_of (source_object, Result) */
 
                        /*
                         * This op is a little strange because the internal return value is
                         * different than the return value stored in the result descriptor
                         * (There are really two return values)
                         */
-                       if ((struct acpi_namespace_node *) operand[0] == acpi_gbl_root_node) {
+                       if ((struct acpi_namespace_node *)operand[0] ==
+                           acpi_gbl_root_node) {
                                /*
                                 * This means that the object does not exist in the namespace,
                                 * return FALSE
@@ -451,38 +423,38 @@ acpi_ex_opcode_1A_1T_1R (
 
                        /* Get the object reference, store it, and remove our reference */
 
-                       status = acpi_ex_get_object_reference (operand[0],
-                                        &return_desc2, walk_state);
-                       if (ACPI_FAILURE (status)) {
+                       status = acpi_ex_get_object_reference(operand[0],
+                                                             &return_desc2,
+                                                             walk_state);
+                       if (ACPI_FAILURE(status)) {
                                goto cleanup;
                        }
 
-                       status = acpi_ex_store (return_desc2, operand[1], walk_state);
-                       acpi_ut_remove_reference (return_desc2);
+                       status =
+                           acpi_ex_store(return_desc2, operand[1], walk_state);
+                       acpi_ut_remove_reference(return_desc2);
 
                        /* The object exists in the namespace, return TRUE */
 
                        return_desc->integer.value = ACPI_INTEGER_MAX;
                        goto cleanup;
 
-
                default:
                        /* No other opcodes get here */
                        break;
                }
                break;
 
-
-       case AML_STORE_OP:              /* Store (Source, Target) */
+       case AML_STORE_OP:      /* Store (Source, Target) */
 
                /*
                 * A store operand is typically a number, string, buffer or lvalue
                 * Be careful about deleting the source object,
                 * since the object itself may have been stored.
                 */
-               status = acpi_ex_store (operand[0], operand[1], walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ex_store(operand[0], operand[1], walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /* It is possible that the Store already produced a return object */
@@ -495,92 +467,84 @@ acpi_ex_opcode_1A_1T_1R (
                         * cancel out, and we simply don't do anything.
                         */
                        walk_state->result_obj = operand[0];
-                       walk_state->operands[0] = NULL; /* Prevent deletion */
+                       walk_state->operands[0] = NULL; /* Prevent deletion */
                }
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
 
+               /*
+                * ACPI 2.0 Opcodes
+                */
+       case AML_COPY_OP:       /* Copy (Source, Target) */
 
-       /*
-        * ACPI 2.0 Opcodes
-        */
-       case AML_COPY_OP:               /* Copy (Source, Target) */
-
-               status = acpi_ut_copy_iobject_to_iobject (operand[0], &return_desc,
-                                walk_state);
+               status =
+                   acpi_ut_copy_iobject_to_iobject(operand[0], &return_desc,
+                                                   walk_state);
                break;
 
+       case AML_TO_DECSTRING_OP:       /* to_decimal_string (Data, Result) */
 
-       case AML_TO_DECSTRING_OP:       /* to_decimal_string (Data, Result) */
-
-               status = acpi_ex_convert_to_string (operand[0], &return_desc,
-                                ACPI_EXPLICIT_CONVERT_DECIMAL);
+               status = acpi_ex_convert_to_string(operand[0], &return_desc,
+                                                  ACPI_EXPLICIT_CONVERT_DECIMAL);
                if (return_desc == operand[0]) {
                        /* No conversion performed, add ref to handle return value */
-                       acpi_ut_add_reference (return_desc);
+                       acpi_ut_add_reference(return_desc);
                }
                break;
 
+       case AML_TO_HEXSTRING_OP:       /* to_hex_string (Data, Result) */
 
-       case AML_TO_HEXSTRING_OP:       /* to_hex_string (Data, Result) */
-
-               status = acpi_ex_convert_to_string (operand[0], &return_desc,
-                                ACPI_EXPLICIT_CONVERT_HEX);
+               status = acpi_ex_convert_to_string(operand[0], &return_desc,
+                                                  ACPI_EXPLICIT_CONVERT_HEX);
                if (return_desc == operand[0]) {
                        /* No conversion performed, add ref to handle return value */
-                       acpi_ut_add_reference (return_desc);
+                       acpi_ut_add_reference(return_desc);
                }
                break;
 
+       case AML_TO_BUFFER_OP:  /* to_buffer (Data, Result) */
 
-       case AML_TO_BUFFER_OP:          /* to_buffer (Data, Result) */
-
-               status = acpi_ex_convert_to_buffer (operand[0], &return_desc);
+               status = acpi_ex_convert_to_buffer(operand[0], &return_desc);
                if (return_desc == operand[0]) {
                        /* No conversion performed, add ref to handle return value */
-                       acpi_ut_add_reference (return_desc);
+                       acpi_ut_add_reference(return_desc);
                }
                break;
 
+       case AML_TO_INTEGER_OP: /* to_integer (Data, Result) */
 
-       case AML_TO_INTEGER_OP:         /* to_integer (Data, Result) */
-
-               status = acpi_ex_convert_to_integer (operand[0], &return_desc,
-                                ACPI_ANY_BASE);
+               status = acpi_ex_convert_to_integer(operand[0], &return_desc,
+                                                   ACPI_ANY_BASE);
                if (return_desc == operand[0]) {
                        /* No conversion performed, add ref to handle return value */
-                       acpi_ut_add_reference (return_desc);
+                       acpi_ut_add_reference(return_desc);
                }
                break;
 
-
-       case AML_SHIFT_LEFT_BIT_OP:     /* shift_left_bit (Source, bit_num) */
-       case AML_SHIFT_RIGHT_BIT_OP:    /* shift_right_bit (Source, bit_num) */
+       case AML_SHIFT_LEFT_BIT_OP:     /* shift_left_bit (Source, bit_num) */
+       case AML_SHIFT_RIGHT_BIT_OP:    /* shift_right_bit (Source, bit_num) */
 
                /* These are two obsolete opcodes */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "%s is obsolete and not implemented\n",
-                       acpi_ps_get_opcode_name (walk_state->opcode)));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "%s is obsolete and not implemented\n",
+                                 acpi_ps_get_opcode_name(walk_state->opcode)));
                status = AE_SUPPORT;
                goto cleanup;
 
+       default:                /* Unknown opcode */
 
-       default:                        /* Unknown opcode */
-
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_1A_1T_1R: Unknown opcode %X\n",
-                       walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_1A_1T_1R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                goto cleanup;
        }
 
-       if (ACPI_SUCCESS (status)) {
+       if (ACPI_SUCCESS(status)) {
                /* Store the return value computed above into the target object */
 
-               status = acpi_ex_store (return_desc, operand[1], walk_state);
+               status = acpi_ex_store(return_desc, operand[1], walk_state);
        }
 
-
-cleanup:
+      cleanup:
 
        if (!walk_state->result_obj) {
                walk_state->result_obj = return_desc;
@@ -588,14 +552,13 @@ cleanup:
 
        /* Delete return object on error */
 
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_remove_reference (return_desc);
+       if (ACPI_FAILURE(status)) {
+               acpi_ut_remove_reference(return_desc);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_1A_0T_1R
@@ -608,28 +571,24 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_opcode_1A_0T_1R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       union acpi_operand_object       *temp_desc;
-       union acpi_operand_object       *return_desc = NULL;
-       acpi_status                     status = AE_OK;
-       u32                             type;
-       acpi_integer                    value;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_1A_0T_1R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       union acpi_operand_object *temp_desc;
+       union acpi_operand_object *return_desc = NULL;
+       acpi_status status = AE_OK;
+       u32 type;
+       acpi_integer value;
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_1A_0T_1R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        /* Examine the AML opcode */
 
        switch (walk_state->opcode) {
-       case AML_LNOT_OP:               /* LNot (Operand) */
+       case AML_LNOT_OP:       /* LNot (Operand) */
 
-               return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
@@ -644,15 +603,14 @@ acpi_ex_opcode_1A_0T_1R (
                }
                break;
 
-
-       case AML_DECREMENT_OP:          /* Decrement (Operand)  */
-       case AML_INCREMENT_OP:          /* Increment (Operand)  */
+       case AML_DECREMENT_OP:  /* Decrement (Operand)  */
+       case AML_INCREMENT_OP:  /* Increment (Operand)  */
 
                /*
                 * Create a new integer.  Can't just get the base integer and
                 * increment it because it may be an Arg or Field.
                 */
-               return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
@@ -663,10 +621,11 @@ acpi_ex_opcode_1A_0T_1R (
                 * NS Node or an internal object.
                 */
                temp_desc = operand[0];
-               if (ACPI_GET_DESCRIPTOR_TYPE (temp_desc) == ACPI_DESC_TYPE_OPERAND) {
+               if (ACPI_GET_DESCRIPTOR_TYPE(temp_desc) ==
+                   ACPI_DESC_TYPE_OPERAND) {
                        /* Internal reference object - prevent deletion */
 
-                       acpi_ut_add_reference (temp_desc);
+                       acpi_ut_add_reference(temp_desc);
                }
 
                /*
@@ -676,11 +635,15 @@ acpi_ex_opcode_1A_0T_1R (
                 * NOTE:  We use LNOT_OP here in order to force resolution of the
                 * reference operand to an actual integer.
                 */
-               status = acpi_ex_resolve_operands (AML_LNOT_OP, &temp_desc, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "%s: bad operand(s) %s\n",
-                               acpi_ps_get_opcode_name (walk_state->opcode),
-                               acpi_format_exception(status)));
+               status =
+                   acpi_ex_resolve_operands(AML_LNOT_OP, &temp_desc,
+                                            walk_state);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "%s: bad operand(s) %s\n",
+                                         acpi_ps_get_opcode_name(walk_state->
+                                                                 opcode),
+                                         acpi_format_exception(status)));
 
                        goto cleanup;
                }
@@ -690,25 +653,25 @@ acpi_ex_opcode_1A_0T_1R (
                 * Perform the actual increment or decrement
                 */
                if (walk_state->opcode == AML_INCREMENT_OP) {
-                       return_desc->integer.value = temp_desc->integer.value +1;
-               }
-               else {
-                       return_desc->integer.value = temp_desc->integer.value -1;
+                       return_desc->integer.value =
+                           temp_desc->integer.value + 1;
+               } else {
+                       return_desc->integer.value =
+                           temp_desc->integer.value - 1;
                }
 
                /* Finished with this Integer object */
 
-               acpi_ut_remove_reference (temp_desc);
+               acpi_ut_remove_reference(temp_desc);
 
                /*
                 * Store the result back (indirectly) through the original
                 * Reference object
                 */
-               status = acpi_ex_store (return_desc, operand[0], walk_state);
+               status = acpi_ex_store(return_desc, operand[0], walk_state);
                break;
 
-
-       case AML_TYPE_OP:               /* object_type (source_object) */
+       case AML_TYPE_OP:       /* object_type (source_object) */
 
                /*
                 * Note: The operand is not resolved at this point because we want to
@@ -719,13 +682,15 @@ acpi_ex_opcode_1A_0T_1R (
 
                /* Get the type of the base object */
 
-               status = acpi_ex_resolve_multiple (walk_state, operand[0], &type, NULL);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_ex_resolve_multiple(walk_state, operand[0], &type,
+                                            NULL);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
                /* Allocate a descriptor to hold the type. */
 
-               return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
@@ -734,8 +699,7 @@ acpi_ex_opcode_1A_0T_1R (
                return_desc->integer.value = type;
                break;
 
-
-       case AML_SIZE_OF_OP:            /* size_of (source_object) */
+       case AML_SIZE_OF_OP:    /* size_of (source_object) */
 
                /*
                 * Note: The operand is not resolved at this point because we want to
@@ -744,9 +708,10 @@ acpi_ex_opcode_1A_0T_1R (
 
                /* Get the base object */
 
-               status = acpi_ex_resolve_multiple (walk_state,
-                                operand[0], &type, &temp_desc);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ex_resolve_multiple(walk_state,
+                                                 operand[0], &type,
+                                                 &temp_desc);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
 
@@ -777,9 +742,9 @@ acpi_ex_opcode_1A_0T_1R (
                        break;
 
                default:
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "size_of - Operand is not Buf/Int/Str/Pkg - found type %s\n",
-                               acpi_ut_get_type_name (type)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "size_of - Operand is not Buf/Int/Str/Pkg - found type %s\n",
+                                         acpi_ut_get_type_name(type)));
                        status = AE_AML_OPERAND_TYPE;
                        goto cleanup;
                }
@@ -788,7 +753,7 @@ acpi_ex_opcode_1A_0T_1R (
                 * Now that we have the size of the object, create a result
                 * object to hold the value
                 */
-               return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
@@ -797,22 +762,23 @@ acpi_ex_opcode_1A_0T_1R (
                return_desc->integer.value = value;
                break;
 
+       case AML_REF_OF_OP:     /* ref_of (source_object) */
 
-       case AML_REF_OF_OP:             /* ref_of (source_object) */
-
-               status = acpi_ex_get_object_reference (operand[0], &return_desc, walk_state);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_ex_get_object_reference(operand[0], &return_desc,
+                                                walk_state);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
                break;
 
-
-       case AML_DEREF_OF_OP:           /* deref_of (obj_reference | String) */
+       case AML_DEREF_OF_OP:   /* deref_of (obj_reference | String) */
 
                /* Check for a method local or argument, or standalone String */
 
-               if (ACPI_GET_DESCRIPTOR_TYPE (operand[0]) != ACPI_DESC_TYPE_NAMED) {
-                       switch (ACPI_GET_OBJECT_TYPE (operand[0])) {
+               if (ACPI_GET_DESCRIPTOR_TYPE(operand[0]) !=
+                   ACPI_DESC_TYPE_NAMED) {
+                       switch (ACPI_GET_OBJECT_TYPE(operand[0])) {
                        case ACPI_TYPE_LOCAL_REFERENCE:
                                /*
                                 * This is a deref_of (local_x | arg_x)
@@ -825,11 +791,12 @@ acpi_ex_opcode_1A_0T_1R (
 
                                        /* Set Operand[0] to the value of the local/arg */
 
-                                       status = acpi_ds_method_data_get_value (
-                                                        operand[0]->reference.opcode,
-                                                        operand[0]->reference.offset,
-                                                        walk_state, &temp_desc);
-                                       if (ACPI_FAILURE (status)) {
+                                       status =
+                                           acpi_ds_method_data_get_value
+                                           (operand[0]->reference.opcode,
+                                            operand[0]->reference.offset,
+                                            walk_state, &temp_desc);
+                                       if (ACPI_FAILURE(status)) {
                                                goto cleanup;
                                        }
 
@@ -837,7 +804,7 @@ acpi_ex_opcode_1A_0T_1R (
                                         * Delete our reference to the input object and
                                         * point to the object just retrieved
                                         */
-                                       acpi_ut_remove_reference (operand[0]);
+                                       acpi_ut_remove_reference(operand[0]);
                                        operand[0] = temp_desc;
                                        break;
 
@@ -845,8 +812,9 @@ acpi_ex_opcode_1A_0T_1R (
 
                                        /* Get the object to which the reference refers */
 
-                                       temp_desc = operand[0]->reference.object;
-                                       acpi_ut_remove_reference (operand[0]);
+                                       temp_desc =
+                                           operand[0]->reference.object;
+                                       acpi_ut_remove_reference(operand[0]);
                                        operand[0] = temp_desc;
                                        break;
 
@@ -857,7 +825,6 @@ acpi_ex_opcode_1A_0T_1R (
                                }
                                break;
 
-
                        case ACPI_TYPE_STRING:
 
                                /*
@@ -868,22 +835,28 @@ acpi_ex_opcode_1A_0T_1R (
                                 * 2) Dereference the node to an actual object.  Could be a
                                 *    Field, so we need to resolve the node to a value.
                                 */
-                               status = acpi_ns_get_node_by_path (operand[0]->string.pointer,
-                                                walk_state->scope_info->scope.node,
-                                                ACPI_NS_SEARCH_PARENT,
-                                                ACPI_CAST_INDIRECT_PTR (
-                                                               struct acpi_namespace_node, &return_desc));
-                               if (ACPI_FAILURE (status)) {
+                               status =
+                                   acpi_ns_get_node_by_path(operand[0]->string.
+                                                            pointer,
+                                                            walk_state->
+                                                            scope_info->scope.
+                                                            node,
+                                                            ACPI_NS_SEARCH_PARENT,
+                                                            ACPI_CAST_INDIRECT_PTR
+                                                            (struct
+                                                             acpi_namespace_node,
+                                                             &return_desc));
+                               if (ACPI_FAILURE(status)) {
                                        goto cleanup;
                                }
 
-                               status = acpi_ex_resolve_node_to_value (
-                                                 ACPI_CAST_INDIRECT_PTR (
-                                                                struct acpi_namespace_node, &return_desc),
-                                                               walk_state);
+                               status =
+                                   acpi_ex_resolve_node_to_value
+                                   (ACPI_CAST_INDIRECT_PTR
+                                    (struct acpi_namespace_node, &return_desc),
+                                    walk_state);
                                goto cleanup;
 
-
                        default:
 
                                status = AE_AML_OPERAND_TYPE;
@@ -893,17 +866,20 @@ acpi_ex_opcode_1A_0T_1R (
 
                /* Operand[0] may have changed from the code above */
 
-               if (ACPI_GET_DESCRIPTOR_TYPE (operand[0]) == ACPI_DESC_TYPE_NAMED) {
+               if (ACPI_GET_DESCRIPTOR_TYPE(operand[0]) ==
+                   ACPI_DESC_TYPE_NAMED) {
                        /*
                         * This is a deref_of (object_reference)
                         * Get the actual object from the Node (This is the dereference).
                         * This case may only happen when a local_x or arg_x is
                         * dereferenced above.
                         */
-                       return_desc = acpi_ns_get_attached_object (
-                                         (struct acpi_namespace_node *) operand[0]);
-               }
-               else {
+                       return_desc = acpi_ns_get_attached_object((struct
+                                                                  acpi_namespace_node
+                                                                  *)
+                                                                 operand[0]);
+                       acpi_ut_add_reference(return_desc);
+               } else {
                        /*
                         * This must be a reference object produced by either the
                         * Index() or ref_of() operator
@@ -918,7 +894,8 @@ acpi_ex_opcode_1A_0T_1R (
                                switch (operand[0]->reference.target_type) {
                                case ACPI_TYPE_BUFFER_FIELD:
 
-                                       temp_desc = operand[0]->reference.object;
+                                       temp_desc =
+                                           operand[0]->reference.object;
 
                                        /*
                                         * Create a new object that contains one element of the
@@ -928,7 +905,9 @@ acpi_ex_opcode_1A_0T_1R (
                                         * sub-buffer of the main buffer, it is only a pointer to a
                                         * single element (byte) of the buffer!
                                         */
-                                       return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+                                       return_desc =
+                                           acpi_ut_create_internal_object
+                                           (ACPI_TYPE_INTEGER);
                                        if (!return_desc) {
                                                status = AE_NO_MEMORY;
                                                goto cleanup;
@@ -940,66 +919,63 @@ acpi_ex_opcode_1A_0T_1R (
                                         * reference to the buffer itself.
                                         */
                                        return_desc->integer.value =
-                                               temp_desc->buffer.pointer[operand[0]->reference.offset];
+                                           temp_desc->buffer.
+                                           pointer[operand[0]->reference.
+                                                   offset];
                                        break;
 
-
                                case ACPI_TYPE_PACKAGE:
 
                                        /*
                                         * Return the referenced element of the package.  We must
                                         * add another reference to the referenced object, however.
                                         */
-                                       return_desc = *(operand[0]->reference.where);
-                                       if (!return_desc) {
-                                               /*
-                                                * We can't return a NULL dereferenced value.  This is
-                                                * an uninitialized package element and is thus a
-                                                * severe error.
-                                                */
-                                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                                       "NULL package element obj %p\n",
-                                                       operand[0]));
-                                               status = AE_AML_UNINITIALIZED_ELEMENT;
-                                               goto cleanup;
+                                       return_desc =
+                                           *(operand[0]->reference.where);
+                                       if (return_desc) {
+                                               acpi_ut_add_reference
+                                                   (return_desc);
                                        }
 
-                                       acpi_ut_add_reference (return_desc);
                                        break;
 
-
                                default:
 
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                               "Unknown Index target_type %X in obj %p\n",
-                                               operand[0]->reference.target_type, operand[0]));
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "Unknown Index target_type %X in obj %p\n",
+                                                         operand[0]->reference.
+                                                         target_type,
+                                                         operand[0]));
                                        status = AE_AML_OPERAND_TYPE;
                                        goto cleanup;
                                }
                                break;
 
-
                        case AML_REF_OF_OP:
 
                                return_desc = operand[0]->reference.object;
 
-                               if (ACPI_GET_DESCRIPTOR_TYPE (return_desc) ==
-                                               ACPI_DESC_TYPE_NAMED) {
+                               if (ACPI_GET_DESCRIPTOR_TYPE(return_desc) ==
+                                   ACPI_DESC_TYPE_NAMED) {
 
-                                       return_desc = acpi_ns_get_attached_object (
-                                                         (struct acpi_namespace_node *) return_desc);
+                                       return_desc =
+                                           acpi_ns_get_attached_object((struct
+                                                                        acpi_namespace_node
+                                                                        *)
+                                                                       return_desc);
                                }
 
                                /* Add another reference to the object! */
 
-                               acpi_ut_add_reference (return_desc);
+                               acpi_ut_add_reference(return_desc);
                                break;
 
-
                        default:
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Unknown opcode in ref(%p) - %X\n",
-                                       operand[0], operand[0]->reference.opcode));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Unknown opcode in ref(%p) - %X\n",
+                                                 operand[0],
+                                                 operand[0]->reference.
+                                                 opcode));
 
                                status = AE_TYPE;
                                goto cleanup;
@@ -1007,25 +983,21 @@ acpi_ex_opcode_1A_0T_1R (
                }
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_1A_0T_1R: Unknown opcode %X\n",
-                       walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_1A_0T_1R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                goto cleanup;
        }
 
-
-cleanup:
+      cleanup:
 
        /* Delete return object on error */
 
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_remove_reference (return_desc);
+       if (ACPI_FAILURE(status)) {
+               acpi_ut_remove_reference(return_desc);
        }
 
        walk_state->result_obj = return_desc;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
index 7429032c2b6c4e7db34f4ad64e750dd10616c720..8d70c6beef00c9f6d875320c0ea3c7e6d3b352b7 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/acinterp.h>
 #include <acpi/acevents.h>
 #include <acpi/amlcode.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exoparg2")
-
+ACPI_MODULE_NAME("exoparg2")
 
 /*!
  * Naming convention for AML interpreter execution routines.
@@ -74,8 +71,6 @@
  * The AcpiExOpcode* functions are called via the Dispatcher component with
  * fully resolved operands.
 !*/
-
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_2A_0T_0R
  * ALLOCATION:  Deletes both operands
  *
  ******************************************************************************/
-
-acpi_status
-acpi_ex_opcode_2A_0T_0R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_2A_0T_0R(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       struct acpi_namespace_node      *node;
-       u32                             value;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_2A_0T_0R",
-                       acpi_ps_get_opcode_name (walk_state->opcode));
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       struct acpi_namespace_node *node;
+       u32 value;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_0T_0R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        /* Examine the opcode */
 
        switch (walk_state->opcode) {
-       case AML_NOTIFY_OP:         /* Notify (notify_object, notify_value) */
+       case AML_NOTIFY_OP:     /* Notify (notify_object, notify_value) */
 
                /* The first operand is a namespace node */
 
-               node = (struct acpi_namespace_node *) operand[0];
+               node = (struct acpi_namespace_node *)operand[0];
 
                /* Second value is the notify value */
 
@@ -120,15 +110,14 @@ acpi_ex_opcode_2A_0T_0R (
 
                /* Are notifies allowed on this object? */
 
-               if (!acpi_ev_is_notify_object (node)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Unexpected notify object type [%s]\n",
-                                       acpi_ut_get_type_name (node->type)));
+               if (!acpi_ev_is_notify_object(node)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Unexpected notify object type [%s]\n",
+                                         acpi_ut_get_type_name(node->type)));
 
                        status = AE_AML_OPERAND_TYPE;
                        break;
                }
-
 #ifdef ACPI_GPE_NOTIFY_CHECK
                /*
                 * GPE method wake/notify check.  Here, we want to ensure that we
@@ -144,12 +133,14 @@ acpi_ex_opcode_2A_0T_0R (
                 * If all three cases are true, this is a wake-only GPE that should
                 * be disabled at runtime.
                 */
-               if (value == 2)     /* device_wake */ {
-                       status = acpi_ev_check_for_wake_only_gpe (walk_state->gpe_event_info);
-                       if (ACPI_FAILURE (status)) {
+               if (value == 2) {       /* device_wake */
+                       status =
+                           acpi_ev_check_for_wake_only_gpe(walk_state->
+                                                           gpe_event_info);
+                       if (ACPI_FAILURE(status)) {
                                /* AE_WAKE_ONLY_GPE only error, means ignore this notify */
 
-                               return_ACPI_STATUS (AE_OK)
+                               return_ACPI_STATUS(AE_OK)
                        }
                }
 #endif
@@ -161,21 +152,18 @@ acpi_ex_opcode_2A_0T_0R (
                 * from this thread -- because handlers may in turn run other
                 * control methods.
                 */
-               status = acpi_ev_queue_notify_request (node, value);
+               status = acpi_ev_queue_notify_request(node, value);
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_2A_0T_0R: Unknown opcode %X\n",
-                               walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_2A_0T_0R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_2A_2T_1R
@@ -189,19 +177,15 @@ acpi_ex_opcode_2A_0T_0R (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_opcode_2A_2T_1R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_2A_2T_1R(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       union acpi_operand_object       *return_desc1 = NULL;
-       union acpi_operand_object       *return_desc2 = NULL;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_2A_2T_1R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       union acpi_operand_object *return_desc1 = NULL;
+       union acpi_operand_object *return_desc2 = NULL;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_2T_1R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        /* Execute the opcode */
 
@@ -210,13 +194,15 @@ acpi_ex_opcode_2A_2T_1R (
 
                /* Divide (Dividend, Divisor, remainder_result quotient_result) */
 
-               return_desc1 = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc1 =
+                   acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc1) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
                }
 
-               return_desc2 = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc2 =
+                   acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc2) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
@@ -224,33 +210,31 @@ acpi_ex_opcode_2A_2T_1R (
 
                /* Quotient to return_desc1, remainder to return_desc2 */
 
-               status = acpi_ut_divide (operand[0]->integer.value,
-                                  operand[1]->integer.value,
-                                  &return_desc1->integer.value,
-                                  &return_desc2->integer.value);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ut_divide(operand[0]->integer.value,
+                                       operand[1]->integer.value,
+                                       &return_desc1->integer.value,
+                                       &return_desc2->integer.value);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_2A_2T_1R: Unknown opcode %X\n",
-                               walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_2A_2T_1R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                goto cleanup;
        }
 
        /* Store the results to the target reference operands */
 
-       status = acpi_ex_store (return_desc2, operand[2], walk_state);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ex_store(return_desc2, operand[2], walk_state);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
-       status = acpi_ex_store (return_desc1, operand[3], walk_state);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ex_store(return_desc1, operand[3], walk_state);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
@@ -258,24 +242,22 @@ acpi_ex_opcode_2A_2T_1R (
 
        walk_state->result_obj = return_desc1;
 
-
-cleanup:
+      cleanup:
        /*
         * Since the remainder is not returned indirectly, remove a reference to
         * it. Only the quotient is returned indirectly.
         */
-       acpi_ut_remove_reference (return_desc2);
+       acpi_ut_remove_reference(return_desc2);
 
-       if (ACPI_FAILURE (status)) {
+       if (ACPI_FAILURE(status)) {
                /* Delete the return object */
 
-               acpi_ut_remove_reference (return_desc1);
+               acpi_ut_remove_reference(return_desc1);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_2A_1T_1R
@@ -289,42 +271,39 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_opcode_2A_1T_1R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       union acpi_operand_object       *return_desc = NULL;
-       acpi_integer                    index;
-       acpi_status                     status = AE_OK;
-       acpi_size                       length;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_2A_1T_1R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       union acpi_operand_object *return_desc = NULL;
+       acpi_integer index;
+       acpi_status status = AE_OK;
+       acpi_size length;
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_1T_1R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        /* Execute the opcode */
 
        if (walk_state->op_info->flags & AML_MATH) {
                /* All simple math opcodes (add, etc.) */
 
-               return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
                }
 
-               return_desc->integer.value = acpi_ex_do_math_op (walk_state->opcode,
-                                 operand[0]->integer.value,
-                                 operand[1]->integer.value);
+               return_desc->integer.value =
+                   acpi_ex_do_math_op(walk_state->opcode,
+                                      operand[0]->integer.value,
+                                      operand[1]->integer.value);
                goto store_result_to_target;
        }
 
        switch (walk_state->opcode) {
-       case AML_MOD_OP: /* Mod (Dividend, Divisor, remainder_result (ACPI 2.0) */
+       case AML_MOD_OP:        /* Mod (Dividend, Divisor, remainder_result (ACPI 2.0) */
 
-               return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
@@ -332,21 +311,18 @@ acpi_ex_opcode_2A_1T_1R (
 
                /* return_desc will contain the remainder */
 
-               status = acpi_ut_divide (operand[0]->integer.value,
-                                  operand[1]->integer.value,
-                                  NULL,
-                                  &return_desc->integer.value);
+               status = acpi_ut_divide(operand[0]->integer.value,
+                                       operand[1]->integer.value,
+                                       NULL, &return_desc->integer.value);
                break;
 
+       case AML_CONCAT_OP:     /* Concatenate (Data1, Data2, Result) */
 
-       case AML_CONCAT_OP: /* Concatenate (Data1, Data2, Result) */
-
-               status = acpi_ex_do_concatenate (operand[0], operand[1],
-                                &return_desc, walk_state);
+               status = acpi_ex_do_concatenate(operand[0], operand[1],
+                                               &return_desc, walk_state);
                break;
 
-
-       case AML_TO_STRING_OP: /* to_string (Buffer, Length, Result) (ACPI 2.0) */
+       case AML_TO_STRING_OP:  /* to_string (Buffer, Length, Result) (ACPI 2.0) */
 
                /*
                 * Input object is guaranteed to be a buffer at this point (it may have
@@ -365,8 +341,8 @@ acpi_ex_opcode_2A_1T_1R (
                 */
                length = 0;
                while ((length < operand[0]->buffer.length) &&
-                          (length < operand[1]->integer.value) &&
-                          (operand[0]->buffer.pointer[length])) {
+                      (length < operand[1]->integer.value) &&
+                      (operand[0]->buffer.pointer[length])) {
                        length++;
                        if (length > ACPI_MAX_STRING_CONVERSION) {
                                status = AE_AML_STRING_LIMIT;
@@ -376,33 +352,32 @@ acpi_ex_opcode_2A_1T_1R (
 
                /* Allocate a new string object */
 
-               return_desc = acpi_ut_create_string_object (length);
+               return_desc = acpi_ut_create_string_object(length);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
                }
 
-               /* Copy the raw buffer data with no transform. NULL terminated already*/
+               /* Copy the raw buffer data with no transform. NULL terminated already */
 
-               ACPI_MEMCPY (return_desc->string.pointer,
-                       operand[0]->buffer.pointer, length);
+               ACPI_MEMCPY(return_desc->string.pointer,
+                           operand[0]->buffer.pointer, length);
                break;
 
-
        case AML_CONCAT_RES_OP:
 
                /* concatenate_res_template (Buffer, Buffer, Result) (ACPI 2.0) */
 
-               status = acpi_ex_concat_template (operand[0], operand[1],
-                                &return_desc, walk_state);
+               status = acpi_ex_concat_template(operand[0], operand[1],
+                                                &return_desc, walk_state);
                break;
 
-
-       case AML_INDEX_OP:              /* Index (Source Index Result) */
+       case AML_INDEX_OP:      /* Index (Source Index Result) */
 
                /* Create the internal return object */
 
-               return_desc = acpi_ut_create_internal_object (ACPI_TYPE_LOCAL_REFERENCE);
+               return_desc =
+                   acpi_ut_create_internal_object(ACPI_TYPE_LOCAL_REFERENCE);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
@@ -412,76 +387,75 @@ acpi_ex_opcode_2A_1T_1R (
 
                /* At this point, the Source operand is a Package, Buffer, or String */
 
-               if (ACPI_GET_OBJECT_TYPE (operand[0]) == ACPI_TYPE_PACKAGE) {
+               if (ACPI_GET_OBJECT_TYPE(operand[0]) == ACPI_TYPE_PACKAGE) {
                        /* Object to be indexed is a Package */
 
                        if (index >= operand[0]->package.count) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Index value (%X%8.8X) beyond package end (%X)\n",
-                                       ACPI_FORMAT_UINT64 (index), operand[0]->package.count));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Index value (%X%8.8X) beyond package end (%X)\n",
+                                                 ACPI_FORMAT_UINT64(index),
+                                                 operand[0]->package.count));
                                status = AE_AML_PACKAGE_LIMIT;
                                goto cleanup;
                        }
 
                        return_desc->reference.target_type = ACPI_TYPE_PACKAGE;
-                       return_desc->reference.object    = operand[0];
-                       return_desc->reference.where     = &operand[0]->package.elements [
-                                         index];
-               }
-               else {
+                       return_desc->reference.object = operand[0];
+                       return_desc->reference.where =
+                           &operand[0]->package.elements[index];
+               } else {
                        /* Object to be indexed is a Buffer/String */
 
                        if (index >= operand[0]->buffer.length) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Index value (%X%8.8X) beyond end of buffer (%X)\n",
-                                       ACPI_FORMAT_UINT64 (index), operand[0]->buffer.length));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Index value (%X%8.8X) beyond end of buffer (%X)\n",
+                                                 ACPI_FORMAT_UINT64(index),
+                                                 operand[0]->buffer.length));
                                status = AE_AML_BUFFER_LIMIT;
                                goto cleanup;
                        }
 
-                       return_desc->reference.target_type = ACPI_TYPE_BUFFER_FIELD;
-                       return_desc->reference.object    = operand[0];
+                       return_desc->reference.target_type =
+                           ACPI_TYPE_BUFFER_FIELD;
+                       return_desc->reference.object = operand[0];
                }
 
                /*
                 * Add a reference to the target package/buffer/string for the life
                 * of the index.
                 */
-               acpi_ut_add_reference (operand[0]);
+               acpi_ut_add_reference(operand[0]);
 
                /* Complete the Index reference object */
 
-               return_desc->reference.opcode    = AML_INDEX_OP;
-               return_desc->reference.offset    = (u32) index;
+               return_desc->reference.opcode = AML_INDEX_OP;
+               return_desc->reference.offset = (u32) index;
 
                /* Store the reference to the Target */
 
-               status = acpi_ex_store (return_desc, operand[2], walk_state);
+               status = acpi_ex_store(return_desc, operand[2], walk_state);
 
                /* Return the reference */
 
                walk_state->result_obj = return_desc;
                goto cleanup;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_2A_1T_1R: Unknown opcode %X\n",
-                               walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_2A_1T_1R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                break;
        }
 
+      store_result_to_target:
 
-store_result_to_target:
-
-       if (ACPI_SUCCESS (status)) {
+       if (ACPI_SUCCESS(status)) {
                /*
                 * Store the result of the operation (which is now in return_desc) into
                 * the Target descriptor.
                 */
-               status = acpi_ex_store (return_desc, operand[2], walk_state);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ex_store(return_desc, operand[2], walk_state);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
 
@@ -490,19 +464,17 @@ store_result_to_target:
                }
        }
 
-
-cleanup:
+      cleanup:
 
        /* Delete return object on error */
 
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_remove_reference (return_desc);
+       if (ACPI_FAILURE(status)) {
+               acpi_ut_remove_reference(return_desc);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_2A_0T_1R
@@ -515,23 +487,19 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_opcode_2A_0T_1R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_2A_0T_1R(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       union acpi_operand_object       *return_desc = NULL;
-       acpi_status                     status = AE_OK;
-       u8                              logical_result = FALSE;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_2A_0T_1R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       union acpi_operand_object *return_desc = NULL;
+       acpi_status status = AE_OK;
+       u8 logical_result = FALSE;
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_2A_0T_1R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        /* Create the internal return object */
 
-       return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+       return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
        if (!return_desc) {
                status = AE_NO_MEMORY;
                goto cleanup;
@@ -542,50 +510,48 @@ acpi_ex_opcode_2A_0T_1R (
        if (walk_state->op_info->flags & AML_LOGICAL_NUMERIC) {
                /* logical_op (Operand0, Operand1) */
 
-               status = acpi_ex_do_logical_numeric_op (walk_state->opcode,
-                                 operand[0]->integer.value, operand[1]->integer.value,
-                                 &logical_result);
+               status = acpi_ex_do_logical_numeric_op(walk_state->opcode,
+                                                      operand[0]->integer.
+                                                      value,
+                                                      operand[1]->integer.
+                                                      value, &logical_result);
                goto store_logical_result;
-       }
-       else if (walk_state->op_info->flags & AML_LOGICAL) {
+       } else if (walk_state->op_info->flags & AML_LOGICAL) {
                /* logical_op (Operand0, Operand1) */
 
-               status = acpi_ex_do_logical_op (walk_state->opcode, operand[0],
-                                operand[1], &logical_result);
+               status = acpi_ex_do_logical_op(walk_state->opcode, operand[0],
+                                              operand[1], &logical_result);
                goto store_logical_result;
        }
 
        switch (walk_state->opcode) {
-       case AML_ACQUIRE_OP:            /* Acquire (mutex_object, Timeout) */
+       case AML_ACQUIRE_OP:    /* Acquire (mutex_object, Timeout) */
 
-               status = acpi_ex_acquire_mutex (operand[1], operand[0], walk_state);
+               status =
+                   acpi_ex_acquire_mutex(operand[1], operand[0], walk_state);
                if (status == AE_TIME) {
-                       logical_result = TRUE;      /* TRUE = Acquire timed out */
+                       logical_result = TRUE;  /* TRUE = Acquire timed out */
                        status = AE_OK;
                }
                break;
 
+       case AML_WAIT_OP:       /* Wait (event_object, Timeout) */
 
-       case AML_WAIT_OP:               /* Wait (event_object, Timeout) */
-
-               status = acpi_ex_system_wait_event (operand[1], operand[0]);
+               status = acpi_ex_system_wait_event(operand[1], operand[0]);
                if (status == AE_TIME) {
-                       logical_result = TRUE;      /* TRUE, Wait timed out */
+                       logical_result = TRUE;  /* TRUE, Wait timed out */
                        status = AE_OK;
                }
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_2A_0T_1R: Unknown opcode %X\n",
-                       walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_2A_0T_1R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                goto cleanup;
        }
 
-
-store_logical_result:
+      store_logical_result:
        /*
         * Set return value to according to logical_result. logical TRUE (all ones)
         * Default is FALSE (zero)
@@ -596,16 +562,13 @@ store_logical_result:
 
        walk_state->result_obj = return_desc;
 
-
-cleanup:
+      cleanup:
 
        /* Delete return object on error */
 
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_remove_reference (return_desc);
+       if (ACPI_FAILURE(status)) {
+               acpi_ut_remove_reference(return_desc);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 23b068adbf5806217011de9ada3aa04d77f745f8..483365777670d00a2100ac81de158167e7fe13b4 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exoparg3")
-
+ACPI_MODULE_NAME("exoparg3")
 
 /*!
  * Naming convention for AML interpreter execution routines.
@@ -74,8 +71,6 @@
  * The AcpiExOpcode* functions are called via the Dispatcher component with
  * fully resolved operands.
 !*/
-
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_3A_0T_0R
  * DESCRIPTION: Execute Triadic operator (3 operands)
  *
  ******************************************************************************/
-
-acpi_status
-acpi_ex_opcode_3A_0T_0R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_3A_0T_0R(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       struct acpi_signal_fatal_info   *fatal;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_3A_0T_0R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       struct acpi_signal_fatal_info *fatal;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_3A_0T_0R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        switch (walk_state->opcode) {
-       case AML_FATAL_OP:          /* Fatal (fatal_type fatal_code fatal_arg) */
+       case AML_FATAL_OP:      /* Fatal (fatal_type fatal_code fatal_arg) */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                       "fatal_op: Type %X Code %X Arg %X <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
-                       (u32) operand[0]->integer.value,
-                       (u32) operand[1]->integer.value,
-                       (u32) operand[2]->integer.value));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "fatal_op: Type %X Code %X Arg %X <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
+                                 (u32) operand[0]->integer.value,
+                                 (u32) operand[1]->integer.value,
+                                 (u32) operand[2]->integer.value));
 
-               fatal = ACPI_MEM_ALLOCATE (sizeof (struct acpi_signal_fatal_info));
+               fatal =
+                   ACPI_MEM_ALLOCATE(sizeof(struct acpi_signal_fatal_info));
                if (fatal) {
-                       fatal->type     = (u32) operand[0]->integer.value;
-                       fatal->code     = (u32) operand[1]->integer.value;
+                       fatal->type = (u32) operand[0]->integer.value;
+                       fatal->code = (u32) operand[1]->integer.value;
                        fatal->argument = (u32) operand[2]->integer.value;
                }
 
                /* Always signal the OS! */
 
-               status = acpi_os_signal (ACPI_SIGNAL_FATAL, fatal);
+               status = acpi_os_signal(ACPI_SIGNAL_FATAL, fatal);
 
                /* Might return while OS is shutting down, just continue */
 
-               ACPI_MEM_FREE (fatal);
+               ACPI_MEM_FREE(fatal);
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_3A_0T_0R: Unknown opcode %X\n",
-                               walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_3A_0T_0R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                goto cleanup;
        }
 
+      cleanup:
 
-cleanup:
-
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_3A_1T_1R
@@ -154,31 +141,28 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_opcode_3A_1T_1R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       union acpi_operand_object       *return_desc = NULL;
-       char                            *buffer;
-       acpi_status                     status = AE_OK;
-       acpi_integer                    index;
-       acpi_size                       length;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_3A_1T_1R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       union acpi_operand_object *return_desc = NULL;
+       char *buffer = NULL;
+       acpi_status status = AE_OK;
+       acpi_integer index;
+       acpi_size length;
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_3A_1T_1R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        switch (walk_state->opcode) {
-       case AML_MID_OP:    /* Mid (Source[0], Index[1], Length[2], Result[3]) */
+       case AML_MID_OP:        /* Mid (Source[0], Index[1], Length[2], Result[3]) */
 
                /*
                 * Create the return object.  The Source operand is guaranteed to be
                 * either a String or a Buffer, so just use its type.
                 */
-               return_desc = acpi_ut_create_internal_object (
-                                 ACPI_GET_OBJECT_TYPE (operand[0]));
+               return_desc =
+                   acpi_ut_create_internal_object(ACPI_GET_OBJECT_TYPE
+                                                  (operand[0]));
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
@@ -193,67 +177,92 @@ acpi_ex_opcode_3A_1T_1R (
                 * If the index is beyond the length of the String/Buffer, or if the
                 * requested length is zero, return a zero-length String/Buffer
                 */
-               if ((index < operand[0]->string.length) &&
-                       (length > 0)) {
-                       /* Truncate request if larger than the actual String/Buffer */
-
-                       if ((index + length) >
-                               operand[0]->string.length) {
-                               length = (acpi_size) operand[0]->string.length -
-                                                (acpi_size) index;
-                       }
+               if (index >= operand[0]->string.length) {
+                       length = 0;
+               }
+
+               /* Truncate request if larger than the actual String/Buffer */
+
+               else if ((index + length) > operand[0]->string.length) {
+                       length = (acpi_size) operand[0]->string.length -
+                           (acpi_size) index;
+               }
+
+               /* Strings always have a sub-pointer, not so for buffers */
+
+               switch (ACPI_GET_OBJECT_TYPE(operand[0])) {
+               case ACPI_TYPE_STRING:
 
-                       /* Allocate a new buffer for the String/Buffer */
+                       /* Always allocate a new buffer for the String */
 
-                       buffer = ACPI_MEM_CALLOCATE ((acpi_size) length + 1);
+                       buffer = ACPI_MEM_CALLOCATE((acpi_size) length + 1);
                        if (!buffer) {
                                status = AE_NO_MEMORY;
                                goto cleanup;
                        }
+                       break;
 
-                       /* Copy the portion requested */
+               case ACPI_TYPE_BUFFER:
 
-                       ACPI_MEMCPY (buffer, operand[0]->string.pointer + index,
-                                         length);
+                       /* If the requested length is zero, don't allocate a buffer */
 
-                       /* Set the length of the new String/Buffer */
+                       if (length > 0) {
+                               /* Allocate a new buffer for the Buffer */
 
-                       return_desc->string.pointer = buffer;
-                       return_desc->string.length = (u32) length;
+                               buffer = ACPI_MEM_CALLOCATE(length);
+                               if (!buffer) {
+                                       status = AE_NO_MEMORY;
+                                       goto cleanup;
+                               }
+                       }
+                       break;
+
+               default:        /* Should not happen */
+
+                       status = AE_AML_OPERAND_TYPE;
+                       goto cleanup;
                }
 
+               if (length > 0) {
+                       /* Copy the portion requested */
+
+                       ACPI_MEMCPY(buffer, operand[0]->string.pointer + index,
+                                   length);
+               }
+
+               /* Set the length of the new String/Buffer */
+
+               return_desc->string.pointer = buffer;
+               return_desc->string.length = (u32) length;
+
                /* Mark buffer initialized */
 
                return_desc->buffer.flags |= AOPOBJ_DATA_VALID;
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_3A_0T_0R: Unknown opcode %X\n",
-                               walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_3A_0T_0R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                goto cleanup;
        }
 
        /* Store the result in the target */
 
-       status = acpi_ex_store (return_desc, operand[3], walk_state);
+       status = acpi_ex_store(return_desc, operand[3], walk_state);
 
-cleanup:
+      cleanup:
 
        /* Delete return object on error */
 
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_remove_reference (return_desc);
+       if (ACPI_FAILURE(status) || walk_state->result_obj) {
+               acpi_ut_remove_reference(return_desc);
        }
 
        /* Set the return object and exit */
 
-       if (!walk_state->result_obj) {
+       else {
                walk_state->result_obj = return_desc;
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 17f81d42ee414cff65da0dd8dcbd8347464f5278..5dee771395769a54349ac3ce1cf34431d15c3a3a 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exoparg6")
-
+ACPI_MODULE_NAME("exoparg6")
 
 /*!
  * Naming convention for AML interpreter execution routines.
  * The AcpiExOpcode* functions are called via the Dispatcher component with
  * fully resolved operands.
 !*/
-
 /* Local prototypes */
-
 static u8
-acpi_ex_do_match (
-       u32                             match_op,
-       union acpi_operand_object       *package_obj,
-       union acpi_operand_object       *match_obj);
-
+acpi_ex_do_match(u32 match_op,
+                union acpi_operand_object *package_obj,
+                union acpi_operand_object *match_obj);
 
 /*******************************************************************************
  *
@@ -101,14 +94,12 @@ acpi_ex_do_match (
  ******************************************************************************/
 
 static u8
-acpi_ex_do_match (
-       u32                             match_op,
-       union acpi_operand_object       *package_obj,
-       union acpi_operand_object       *match_obj)
+acpi_ex_do_match(u32 match_op,
+                union acpi_operand_object *package_obj,
+                union acpi_operand_object *match_obj)
 {
-       u8                              logical_result = TRUE;
-       acpi_status                     status;
-
+       u8 logical_result = TRUE;
+       acpi_status status;
 
        /*
         * Note: Since the package_obj/match_obj ordering is opposite to that of
@@ -133,9 +124,10 @@ acpi_ex_do_match (
                 * True if equal: (P[i] == M)
                 * Change to:     (M == P[i])
                 */
-               status = acpi_ex_do_logical_op (AML_LEQUAL_OP, match_obj, package_obj,
-                                &logical_result);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_ex_do_logical_op(AML_LEQUAL_OP, match_obj, package_obj,
+                                         &logical_result);
+               if (ACPI_FAILURE(status)) {
                        return (FALSE);
                }
                break;
@@ -146,12 +138,13 @@ acpi_ex_do_match (
                 * True if less than or equal: (P[i] <= M) (P[i] not_greater than M)
                 * Change to:                  (M >= P[i]) (M not_less than P[i])
                 */
-               status = acpi_ex_do_logical_op (AML_LLESS_OP, match_obj, package_obj,
-                                &logical_result);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_ex_do_logical_op(AML_LLESS_OP, match_obj, package_obj,
+                                         &logical_result);
+               if (ACPI_FAILURE(status)) {
                        return (FALSE);
                }
-               logical_result = (u8) !logical_result;
+               logical_result = (u8) ! logical_result;
                break;
 
        case MATCH_MLT:
@@ -160,9 +153,10 @@ acpi_ex_do_match (
                 * True if less than: (P[i] < M)
                 * Change to:         (M > P[i])
                 */
-               status = acpi_ex_do_logical_op (AML_LGREATER_OP, match_obj, package_obj,
-                                &logical_result);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_ex_do_logical_op(AML_LGREATER_OP, match_obj,
+                                         package_obj, &logical_result);
+               if (ACPI_FAILURE(status)) {
                        return (FALSE);
                }
                break;
@@ -173,12 +167,13 @@ acpi_ex_do_match (
                 * True if greater than or equal: (P[i] >= M) (P[i] not_less than M)
                 * Change to:                     (M <= P[i]) (M not_greater than P[i])
                 */
-               status = acpi_ex_do_logical_op (AML_LGREATER_OP, match_obj, package_obj,
-                                &logical_result);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_ex_do_logical_op(AML_LGREATER_OP, match_obj,
+                                         package_obj, &logical_result);
+               if (ACPI_FAILURE(status)) {
                        return (FALSE);
                }
-               logical_result = (u8)!logical_result;
+               logical_result = (u8) ! logical_result;
                break;
 
        case MATCH_MGT:
@@ -187,9 +182,10 @@ acpi_ex_do_match (
                 * True if greater than: (P[i] > M)
                 * Change to:            (M < P[i])
                 */
-               status = acpi_ex_do_logical_op (AML_LLESS_OP, match_obj, package_obj,
-                                &logical_result);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_ex_do_logical_op(AML_LLESS_OP, match_obj, package_obj,
+                                         &logical_result);
+               if (ACPI_FAILURE(status)) {
                        return (FALSE);
                }
                break;
@@ -204,7 +200,6 @@ acpi_ex_do_match (
        return logical_result;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_opcode_6A_0T_1R
@@ -217,20 +212,16 @@ acpi_ex_do_match (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_opcode_6A_0T_1R (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state * walk_state)
 {
-       union acpi_operand_object       **operand = &walk_state->operands[0];
-       union acpi_operand_object       *return_desc = NULL;
-       acpi_status                     status = AE_OK;
-       acpi_integer                    index;
-       union acpi_operand_object       *this_element;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ex_opcode_6A_0T_1R",
-               acpi_ps_get_opcode_name (walk_state->opcode));
+       union acpi_operand_object **operand = &walk_state->operands[0];
+       union acpi_operand_object *return_desc = NULL;
+       acpi_status status = AE_OK;
+       acpi_integer index;
+       union acpi_operand_object *this_element;
 
+       ACPI_FUNCTION_TRACE_STR("ex_opcode_6A_0T_1R",
+                               acpi_ps_get_opcode_name(walk_state->opcode));
 
        switch (walk_state->opcode) {
        case AML_MATCH_OP:
@@ -242,8 +233,9 @@ acpi_ex_opcode_6A_0T_1R (
                /* Validate both Match Term Operators (MTR, MEQ, etc.) */
 
                if ((operand[1]->integer.value > MAX_MATCH_OPERATOR) ||
-                       (operand[3]->integer.value > MAX_MATCH_OPERATOR)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Match operator out of range\n"));
+                   (operand[3]->integer.value > MAX_MATCH_OPERATOR)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Match operator out of range\n"));
                        status = AE_AML_OPERAND_VALUE;
                        goto cleanup;
                }
@@ -252,16 +244,17 @@ acpi_ex_opcode_6A_0T_1R (
 
                index = operand[5]->integer.value;
                if (index >= operand[0]->package.count) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Index (%X%8.8X) beyond package end (%X)\n",
-                               ACPI_FORMAT_UINT64 (index), operand[0]->package.count));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Index (%X%8.8X) beyond package end (%X)\n",
+                                         ACPI_FORMAT_UINT64(index),
+                                         operand[0]->package.count));
                        status = AE_AML_PACKAGE_LIMIT;
                        goto cleanup;
                }
 
                /* Create an integer for the return value */
 
-               return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+               return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
                if (!return_desc) {
                        status = AE_NO_MEMORY;
                        goto cleanup;
@@ -283,7 +276,7 @@ acpi_ex_opcode_6A_0T_1R (
                 * ACPI_INTEGER_MAX (Ones) (its initial value) indicating that no
                 * match was found.
                 */
-               for ( ; index < operand[0]->package.count; index++) {
+               for (; index < operand[0]->package.count; index++) {
                        /* Get the current package element */
 
                        this_element = operand[0]->package.elements[index];
@@ -299,13 +292,13 @@ acpi_ex_opcode_6A_0T_1R (
                         * (proceed to next iteration of enclosing for loop) signifies a
                         * non-match.
                         */
-                       if (!acpi_ex_do_match ((u32) operand[1]->integer.value,
-                                          this_element, operand[2])) {
+                       if (!acpi_ex_do_match((u32) operand[1]->integer.value,
+                                             this_element, operand[2])) {
                                continue;
                        }
 
-                       if (!acpi_ex_do_match ((u32) operand[3]->integer.value,
-                                          this_element, operand[4])) {
+                       if (!acpi_ex_do_match((u32) operand[3]->integer.value,
+                                             this_element, operand[4])) {
                                continue;
                        }
 
@@ -316,31 +309,27 @@ acpi_ex_opcode_6A_0T_1R (
                }
                break;
 
-
        case AML_LOAD_TABLE_OP:
 
-               status = acpi_ex_load_table_op (walk_state, &return_desc);
+               status = acpi_ex_load_table_op(walk_state, &return_desc);
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("acpi_ex_opcode_6A_0T_1R: Unknown opcode %X\n",
-                               walk_state->opcode));
+               ACPI_REPORT_ERROR(("acpi_ex_opcode_6A_0T_1R: Unknown opcode %X\n", walk_state->opcode));
                status = AE_AML_BAD_OPCODE;
                goto cleanup;
        }
 
        walk_state->result_obj = return_desc;
 
-
-cleanup:
+      cleanup:
 
        /* Delete return object on error */
 
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_remove_reference (return_desc);
+       if (ACPI_FAILURE(status)) {
+               acpi_ut_remove_reference(return_desc);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
index c9e3c68b554996c7c51b1f9b928ee75f239fa7d0..7476c363e407e30b9f67c899bcfdeaa068ee8aed 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/amlcode.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exprep")
+ACPI_MODULE_NAME("exprep")
 
 /* Local prototypes */
-
 static u32
-acpi_ex_decode_field_access (
-       union acpi_operand_object       *obj_desc,
-       u8                              field_flags,
-       u32                             *return_byte_alignment);
-
+acpi_ex_decode_field_access(union acpi_operand_object *obj_desc,
+                           u8 field_flags, u32 * return_byte_alignment);
 
 #ifdef ACPI_UNDER_DEVELOPMENT
 
 static u32
-acpi_ex_generate_access (
-       u32                             field_bit_offset,
-       u32                             field_bit_length,
-       u32                             region_length);
+acpi_ex_generate_access(u32 field_bit_offset,
+                       u32 field_bit_length, u32 region_length);
 
 /*******************************************************************************
  *
@@ -92,39 +84,36 @@ acpi_ex_generate_access (
  ******************************************************************************/
 
 static u32
-acpi_ex_generate_access (
-       u32                             field_bit_offset,
-       u32                             field_bit_length,
-       u32                             region_length)
+acpi_ex_generate_access(u32 field_bit_offset,
+                       u32 field_bit_length, u32 region_length)
 {
-       u32                             field_byte_length;
-       u32                             field_byte_offset;
-       u32                             field_byte_end_offset;
-       u32                             access_byte_width;
-       u32                             field_start_offset;
-       u32                             field_end_offset;
-       u32                             minimum_access_width = 0xFFFFFFFF;
-       u32                             minimum_accesses = 0xFFFFFFFF;
-       u32                             accesses;
-
-
-       ACPI_FUNCTION_TRACE ("ex_generate_access");
-
+       u32 field_byte_length;
+       u32 field_byte_offset;
+       u32 field_byte_end_offset;
+       u32 access_byte_width;
+       u32 field_start_offset;
+       u32 field_end_offset;
+       u32 minimum_access_width = 0xFFFFFFFF;
+       u32 minimum_accesses = 0xFFFFFFFF;
+       u32 accesses;
+
+       ACPI_FUNCTION_TRACE("ex_generate_access");
 
        /* Round Field start offset and length to "minimal" byte boundaries */
 
-       field_byte_offset  = ACPI_DIV_8 (ACPI_ROUND_DOWN (field_bit_offset, 8));
-       field_byte_end_offset = ACPI_DIV_8 (ACPI_ROUND_UP (field_bit_length +
-                          field_bit_offset, 8));
-       field_byte_length  = field_byte_end_offset - field_byte_offset;
+       field_byte_offset = ACPI_DIV_8(ACPI_ROUND_DOWN(field_bit_offset, 8));
+       field_byte_end_offset = ACPI_DIV_8(ACPI_ROUND_UP(field_bit_length +
+                                                        field_bit_offset, 8));
+       field_byte_length = field_byte_end_offset - field_byte_offset;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                       "Bit length %d, Bit offset %d\n",
-                       field_bit_length, field_bit_offset));
+       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                         "Bit length %d, Bit offset %d\n",
+                         field_bit_length, field_bit_offset));
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                       "Byte Length %d, Byte Offset %d, End Offset %d\n",
-                       field_byte_length, field_byte_offset, field_byte_end_offset));
+       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                         "Byte Length %d, Byte Offset %d, End Offset %d\n",
+                         field_byte_length, field_byte_offset,
+                         field_byte_end_offset));
 
        /*
         * Iterative search for the maximum access width that is both aligned
@@ -132,7 +121,8 @@ acpi_ex_generate_access (
         *
         * Start at byte_acc and work upwards to qword_acc max. (1,2,4,8 bytes)
         */
-       for (access_byte_width = 1; access_byte_width <= 8; access_byte_width <<= 1) {
+       for (access_byte_width = 1; access_byte_width <= 8;
+            access_byte_width <<= 1) {
                /*
                 * 1) Round end offset up to next access boundary and make sure that
                 *    this does not go beyond the end of the parent region.
@@ -140,31 +130,37 @@ acpi_ex_generate_access (
                 *    are done. (This does not optimize for the perfectly aligned
                 *    case yet).
                 */
-               if (ACPI_ROUND_UP (field_byte_end_offset, access_byte_width) <= region_length) {
+               if (ACPI_ROUND_UP(field_byte_end_offset, access_byte_width) <=
+                   region_length) {
                        field_start_offset =
-                               ACPI_ROUND_DOWN (field_byte_offset, access_byte_width) /
-                               access_byte_width;
+                           ACPI_ROUND_DOWN(field_byte_offset,
+                                           access_byte_width) /
+                           access_byte_width;
 
                        field_end_offset =
-                               ACPI_ROUND_UP ((field_byte_length + field_byte_offset),
-                                       access_byte_width) / access_byte_width;
+                           ACPI_ROUND_UP((field_byte_length +
+                                          field_byte_offset),
+                                         access_byte_width) /
+                           access_byte_width;
 
                        accesses = field_end_offset - field_start_offset;
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                                       "access_width %d end is within region\n", access_byte_width));
+                       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                         "access_width %d end is within region\n",
+                                         access_byte_width));
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                                       "Field Start %d, Field End %d -- requires %d accesses\n",
-                                       field_start_offset, field_end_offset, accesses));
+                       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                         "Field Start %d, Field End %d -- requires %d accesses\n",
+                                         field_start_offset, field_end_offset,
+                                         accesses));
 
                        /* Single access is optimal */
 
                        if (accesses <= 1) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                                       "Entire field can be accessed with one operation of size %d\n",
-                                       access_byte_width));
-                               return_VALUE (access_byte_width);
+                               ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                                 "Entire field can be accessed with one operation of size %d\n",
+                                                 access_byte_width));
+                               return_VALUE(access_byte_width);
                        }
 
                        /*
@@ -172,30 +168,30 @@ acpi_ex_generate_access (
                         * try the next wider access on next iteration
                         */
                        if (accesses < minimum_accesses) {
-                               minimum_accesses   = accesses;
+                               minimum_accesses = accesses;
                                minimum_access_width = access_byte_width;
                        }
-               }
-               else {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                               "access_width %d end is NOT within region\n", access_byte_width));
+               } else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                         "access_width %d end is NOT within region\n",
+                                         access_byte_width));
                        if (access_byte_width == 1) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                                               "Field goes beyond end-of-region!\n"));
+                               ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                                 "Field goes beyond end-of-region!\n"));
 
                                /* Field does not fit in the region at all */
 
-                               return_VALUE (0);
+                               return_VALUE(0);
                        }
 
                        /*
                         * This width goes beyond the end-of-region, back off to
                         * previous access
                         */
-                       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                                       "Backing off to previous optimal access width of %d\n",
-                                       minimum_access_width));
-                       return_VALUE (minimum_access_width);
+                       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                         "Backing off to previous optimal access width of %d\n",
+                                         minimum_access_width));
+                       return_VALUE(minimum_access_width);
                }
        }
 
@@ -203,12 +199,11 @@ acpi_ex_generate_access (
         * Could not read/write field with one operation,
         * just use max access width
         */
-       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                       "Cannot access field in one operation, using width 8\n"));
-       return_VALUE (8);
+       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                         "Cannot access field in one operation, using width 8\n"));
+       return_VALUE(8);
 }
-#endif /* ACPI_UNDER_DEVELOPMENT */
-
+#endif                         /* ACPI_UNDER_DEVELOPMENT */
 
 /*******************************************************************************
  *
@@ -226,18 +221,14 @@ acpi_ex_generate_access (
  ******************************************************************************/
 
 static u32
-acpi_ex_decode_field_access (
-       union acpi_operand_object       *obj_desc,
-       u8                              field_flags,
-       u32                             *return_byte_alignment)
+acpi_ex_decode_field_access(union acpi_operand_object *obj_desc,
+                           u8 field_flags, u32 * return_byte_alignment)
 {
-       u32                             access;
-       u32                             byte_alignment;
-       u32                             bit_length;
-
-
-       ACPI_FUNCTION_TRACE ("ex_decode_field_access");
+       u32 access;
+       u32 byte_alignment;
+       u32 bit_length;
 
+       ACPI_FUNCTION_TRACE("ex_decode_field_access");
 
        access = (field_flags & AML_FIELD_ACCESS_TYPE_MASK);
 
@@ -246,9 +237,12 @@ acpi_ex_decode_field_access (
 
 #ifdef ACPI_UNDER_DEVELOPMENT
                byte_alignment =
-                       acpi_ex_generate_access (obj_desc->common_field.start_field_bit_offset,
-                               obj_desc->common_field.bit_length,
-                               0xFFFFFFFF /* Temp until we pass region_length as parameter */);
+                   acpi_ex_generate_access(obj_desc->common_field.
+                                           start_field_bit_offset,
+                                           obj_desc->common_field.bit_length,
+                                           0xFFFFFFFF
+                                           /* Temp until we pass region_length as parameter */
+                                           );
                bit_length = byte_alignment * 8;
 #endif
 
@@ -257,36 +251,35 @@ acpi_ex_decode_field_access (
                break;
 
        case AML_FIELD_ACCESS_BYTE:
-       case AML_FIELD_ACCESS_BUFFER:   /* ACPI 2.0 (SMBus Buffer) */
+       case AML_FIELD_ACCESS_BUFFER:   /* ACPI 2.0 (SMBus Buffer) */
                byte_alignment = 1;
-               bit_length    = 8;
+               bit_length = 8;
                break;
 
        case AML_FIELD_ACCESS_WORD:
                byte_alignment = 2;
-               bit_length    = 16;
+               bit_length = 16;
                break;
 
        case AML_FIELD_ACCESS_DWORD:
                byte_alignment = 4;
-               bit_length    = 32;
+               bit_length = 32;
                break;
 
-       case AML_FIELD_ACCESS_QWORD:    /* ACPI 2.0 */
+       case AML_FIELD_ACCESS_QWORD:    /* ACPI 2.0 */
                byte_alignment = 8;
-               bit_length    = 64;
+               bit_length = 64;
                break;
 
        default:
                /* Invalid field access type */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Unknown field access type %X\n",
-                       access));
-               return_VALUE (0);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unknown field access type %X\n", access));
+               return_VALUE(0);
        }
 
-       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_BUFFER_FIELD) {
+       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_BUFFER_FIELD) {
                /*
                 * buffer_field access can be on any byte boundary, so the
                 * byte_alignment is always 1 byte -- regardless of any byte_alignment
@@ -296,10 +289,9 @@ acpi_ex_decode_field_access (
        }
 
        *return_byte_alignment = byte_alignment;
-       return_VALUE (bit_length);
+       return_VALUE(bit_length);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_prep_common_field_object
@@ -322,20 +314,16 @@ acpi_ex_decode_field_access (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_prep_common_field_object (
-       union acpi_operand_object       *obj_desc,
-       u8                              field_flags,
-       u8                              field_attribute,
-       u32                             field_bit_position,
-       u32                             field_bit_length)
+acpi_ex_prep_common_field_object(union acpi_operand_object *obj_desc,
+                                u8 field_flags,
+                                u8 field_attribute,
+                                u32 field_bit_position, u32 field_bit_length)
 {
-       u32                             access_bit_width;
-       u32                             byte_alignment;
-       u32                             nearest_byte_address;
-
-
-       ACPI_FUNCTION_TRACE ("ex_prep_common_field_object");
+       u32 access_bit_width;
+       u32 byte_alignment;
+       u32 nearest_byte_address;
 
+       ACPI_FUNCTION_TRACE("ex_prep_common_field_object");
 
        /*
         * Note: the structure being initialized is the
@@ -361,16 +349,16 @@ acpi_ex_prep_common_field_object (
         * For all other access types (Byte, Word, Dword, Qword), the Bitwidth is
         * the same (equivalent) as the byte_alignment.
         */
-       access_bit_width = acpi_ex_decode_field_access (obj_desc, field_flags,
-                         &byte_alignment);
+       access_bit_width = acpi_ex_decode_field_access(obj_desc, field_flags,
+                                                      &byte_alignment);
        if (!access_bit_width) {
-               return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
+               return_ACPI_STATUS(AE_AML_OPERAND_VALUE);
        }
 
        /* Setup width (access granularity) fields */
 
        obj_desc->common_field.access_byte_width = (u8)
-                       ACPI_DIV_8 (access_bit_width);          /* 1,  2,  4,  8 */
+           ACPI_DIV_8(access_bit_width);       /* 1,  2,  4,  8 */
 
        obj_desc->common_field.access_bit_width = (u8) access_bit_width;
 
@@ -385,30 +373,30 @@ acpi_ex_prep_common_field_object (
         * region or buffer.
         */
        nearest_byte_address =
-                       ACPI_ROUND_BITS_DOWN_TO_BYTES (field_bit_position);
+           ACPI_ROUND_BITS_DOWN_TO_BYTES(field_bit_position);
        obj_desc->common_field.base_byte_offset = (u32)
-                       ACPI_ROUND_DOWN (nearest_byte_address, byte_alignment);
+           ACPI_ROUND_DOWN(nearest_byte_address, byte_alignment);
 
        /*
         * start_field_bit_offset is the offset of the first bit of the field within
         * a field datum.
         */
        obj_desc->common_field.start_field_bit_offset = (u8)
-               (field_bit_position - ACPI_MUL_8 (obj_desc->common_field.base_byte_offset));
+           (field_bit_position -
+            ACPI_MUL_8(obj_desc->common_field.base_byte_offset));
 
        /*
         * Does the entire field fit within a single field access element? (datum)
         * (i.e., without crossing a datum boundary)
         */
-       if ((obj_desc->common_field.start_field_bit_offset + field_bit_length) <=
-                       (u16) access_bit_width) {
+       if ((obj_desc->common_field.start_field_bit_offset +
+            field_bit_length) <= (u16) access_bit_width) {
                obj_desc->common.flags |= AOPOBJ_SINGLE_DATUM;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_prep_field_value
@@ -422,51 +410,49 @@ acpi_ex_prep_common_field_object (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_prep_field_value (
-       struct acpi_create_field_info   *info)
+acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
 {
-       union acpi_operand_object       *obj_desc;
-       u32                             type;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ex_prep_field_value");
+       union acpi_operand_object *obj_desc;
+       u32 type;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ex_prep_field_value");
 
        /* Parameter validation */
 
        if (info->field_type != ACPI_TYPE_LOCAL_INDEX_FIELD) {
                if (!info->region_node) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null region_node\n"));
-                       return_ACPI_STATUS (AE_AML_NO_OPERAND);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Null region_node\n"));
+                       return_ACPI_STATUS(AE_AML_NO_OPERAND);
                }
 
-               type = acpi_ns_get_type (info->region_node);
+               type = acpi_ns_get_type(info->region_node);
                if (type != ACPI_TYPE_REGION) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Needed Region, found type %X (%s)\n",
-                               type, acpi_ut_get_type_name (type)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Needed Region, found type %X (%s)\n",
+                                         type, acpi_ut_get_type_name(type)));
 
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
        }
 
        /* Allocate a new field object */
 
-       obj_desc = acpi_ut_create_internal_object (info->field_type);
+       obj_desc = acpi_ut_create_internal_object(info->field_type);
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Initialize areas of the object that are common to all fields */
 
        obj_desc->common_field.node = info->field_node;
-       status = acpi_ex_prep_common_field_object (obj_desc, info->field_flags,
-                        info->attribute, info->field_bit_position, info->field_bit_length);
-       if (ACPI_FAILURE (status)) {
-               acpi_ut_delete_object_desc (obj_desc);
-               return_ACPI_STATUS (status);
+       status = acpi_ex_prep_common_field_object(obj_desc, info->field_flags,
+                                                 info->attribute,
+                                                 info->field_bit_position,
+                                                 info->field_bit_length);
+       if (ACPI_FAILURE(status)) {
+               acpi_ut_delete_object_desc(obj_desc);
+               return_ACPI_STATUS(status);
        }
 
        /* Initialize areas of the object that are specific to the field type */
@@ -474,71 +460,73 @@ acpi_ex_prep_field_value (
        switch (info->field_type) {
        case ACPI_TYPE_LOCAL_REGION_FIELD:
 
-               obj_desc->field.region_obj = acpi_ns_get_attached_object (info->region_node);
+               obj_desc->field.region_obj =
+                   acpi_ns_get_attached_object(info->region_node);
 
                /* An additional reference for the container */
 
-               acpi_ut_add_reference (obj_desc->field.region_obj);
+               acpi_ut_add_reference(obj_desc->field.region_obj);
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                       "region_field: bit_off %X, Off %X, Gran %X, Region %p\n",
-                       obj_desc->field.start_field_bit_offset, obj_desc->field.base_byte_offset,
-                       obj_desc->field.access_byte_width, obj_desc->field.region_obj));
+               ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                 "region_field: bit_off %X, Off %X, Gran %X, Region %p\n",
+                                 obj_desc->field.start_field_bit_offset,
+                                 obj_desc->field.base_byte_offset,
+                                 obj_desc->field.access_byte_width,
+                                 obj_desc->field.region_obj));
                break;
 
-
        case ACPI_TYPE_LOCAL_BANK_FIELD:
 
-               obj_desc->bank_field.value   = info->bank_value;
-               obj_desc->bank_field.region_obj = acpi_ns_get_attached_object (
-                                info->region_node);
-               obj_desc->bank_field.bank_obj = acpi_ns_get_attached_object (
-                                info->register_node);
+               obj_desc->bank_field.value = info->bank_value;
+               obj_desc->bank_field.region_obj =
+                   acpi_ns_get_attached_object(info->region_node);
+               obj_desc->bank_field.bank_obj =
+                   acpi_ns_get_attached_object(info->register_node);
 
                /* An additional reference for the attached objects */
 
-               acpi_ut_add_reference (obj_desc->bank_field.region_obj);
-               acpi_ut_add_reference (obj_desc->bank_field.bank_obj);
+               acpi_ut_add_reference(obj_desc->bank_field.region_obj);
+               acpi_ut_add_reference(obj_desc->bank_field.bank_obj);
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                       "Bank Field: bit_off %X, Off %X, Gran %X, Region %p, bank_reg %p\n",
-                       obj_desc->bank_field.start_field_bit_offset,
-                       obj_desc->bank_field.base_byte_offset,
-                       obj_desc->field.access_byte_width,
-                       obj_desc->bank_field.region_obj,
-                       obj_desc->bank_field.bank_obj));
+               ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                 "Bank Field: bit_off %X, Off %X, Gran %X, Region %p, bank_reg %p\n",
+                                 obj_desc->bank_field.start_field_bit_offset,
+                                 obj_desc->bank_field.base_byte_offset,
+                                 obj_desc->field.access_byte_width,
+                                 obj_desc->bank_field.region_obj,
+                                 obj_desc->bank_field.bank_obj));
                break;
 
-
        case ACPI_TYPE_LOCAL_INDEX_FIELD:
 
-               obj_desc->index_field.index_obj = acpi_ns_get_attached_object (
-                                info->register_node);
-               obj_desc->index_field.data_obj = acpi_ns_get_attached_object (
-                                info->data_register_node);
-               obj_desc->index_field.value  = (u32)
-                       (info->field_bit_position / ACPI_MUL_8 (
-                                         obj_desc->field.access_byte_width));
-
-               if (!obj_desc->index_field.data_obj || !obj_desc->index_field.index_obj) {
-                       ACPI_REPORT_ERROR (("Null Index Object during field prep\n"));
-                       acpi_ut_delete_object_desc (obj_desc);
-                       return_ACPI_STATUS (AE_AML_INTERNAL);
+               obj_desc->index_field.index_obj =
+                   acpi_ns_get_attached_object(info->register_node);
+               obj_desc->index_field.data_obj =
+                   acpi_ns_get_attached_object(info->data_register_node);
+               obj_desc->index_field.value = (u32)
+                   (info->field_bit_position /
+                    ACPI_MUL_8(obj_desc->field.access_byte_width));
+
+               if (!obj_desc->index_field.data_obj
+                   || !obj_desc->index_field.index_obj) {
+                       ACPI_REPORT_ERROR(("Null Index Object during field prep\n"));
+                       acpi_ut_delete_object_desc(obj_desc);
+                       return_ACPI_STATUS(AE_AML_INTERNAL);
                }
 
                /* An additional reference for the attached objects */
 
-               acpi_ut_add_reference (obj_desc->index_field.data_obj);
-               acpi_ut_add_reference (obj_desc->index_field.index_obj);
-
-               ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
-                       "index_field: bit_off %X, Off %X, Value %X, Gran %X, Index %p, Data %p\n",
-                       obj_desc->index_field.start_field_bit_offset,
-                       obj_desc->index_field.base_byte_offset,
-                       obj_desc->index_field.value,
-                       obj_desc->field.access_byte_width,
-                       obj_desc->index_field.index_obj,
-                       obj_desc->index_field.data_obj));
+               acpi_ut_add_reference(obj_desc->index_field.data_obj);
+               acpi_ut_add_reference(obj_desc->index_field.index_obj);
+
+               ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                                 "index_field: bit_off %X, Off %X, Value %X, Gran %X, Index %p, Data %p\n",
+                                 obj_desc->index_field.start_field_bit_offset,
+                                 obj_desc->index_field.base_byte_offset,
+                                 obj_desc->index_field.value,
+                                 obj_desc->field.access_byte_width,
+                                 obj_desc->index_field.index_obj,
+                                 obj_desc->index_field.data_obj));
                break;
 
        default:
@@ -550,15 +538,16 @@ acpi_ex_prep_field_value (
         * Store the constructed descriptor (obj_desc) into the parent Node,
         * preserving the current type of that named_obj.
         */
-       status = acpi_ns_attach_object (info->field_node, obj_desc,
-                         acpi_ns_get_type (info->field_node));
+       status = acpi_ns_attach_object(info->field_node, obj_desc,
+                                      acpi_ns_get_type(info->field_node));
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD, "Set named_obj %p [%4.4s], obj_desc %p\n",
-                       info->field_node, acpi_ut_get_node_name (info->field_node), obj_desc));
+       ACPI_DEBUG_PRINT((ACPI_DB_BFIELD,
+                         "Set named_obj %p [%4.4s], obj_desc %p\n",
+                         info->field_node,
+                         acpi_ut_get_node_name(info->field_node), obj_desc));
 
        /* Remove local reference to the object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
-
index 723aaef4bb4a53855e0ba68595462c5558ba1e9e..9a2f5bea3afe9618bbb5de54614683672d28629b 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exregion")
-
+ACPI_MODULE_NAME("exregion")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Handler for the System Memory address space (Op Region)
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ex_system_memory_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context)
+acpi_ex_system_memory_space_handler(u32 function,
+                                   acpi_physical_address address,
+                                   u32 bit_width,
+                                   acpi_integer * value,
+                                   void *handler_context, void *region_context)
 {
-       acpi_status                     status = AE_OK;
-       void                            *logical_addr_ptr = NULL;
-       struct acpi_mem_space_context   *mem_info = region_context;
-       u32                             length;
-       acpi_size                       window_size;
+       acpi_status status = AE_OK;
+       void *logical_addr_ptr = NULL;
+       struct acpi_mem_space_context *mem_info = region_context;
+       u32 length;
+       acpi_size window_size;
 #ifndef ACPI_MISALIGNED_TRANSFERS
-       u32                             remainder;
+       u32 remainder;
 #endif
 
-       ACPI_FUNCTION_TRACE ("ex_system_memory_space_handler");
-
+       ACPI_FUNCTION_TRACE("ex_system_memory_space_handler");
 
        /* Validate and translate the bit width */
 
@@ -110,9 +103,10 @@ acpi_ex_system_memory_space_handler (
                break;
 
        default:
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid system_memory width %d\n",
-                       bit_width));
-               return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Invalid system_memory width %d\n",
+                                 bit_width));
+               return_ACPI_STATUS(AE_AML_OPERAND_VALUE);
        }
 
 #ifndef ACPI_MISALIGNED_TRANSFERS
@@ -120,9 +114,10 @@ acpi_ex_system_memory_space_handler (
         * Hardware does not support non-aligned data transfers, we must verify
         * the request.
         */
-       (void) acpi_ut_short_divide ((acpi_integer) address, length, NULL, &remainder);
+       (void)acpi_ut_short_divide((acpi_integer) address, length, NULL,
+                                  &remainder);
        if (remainder != 0) {
-               return_ACPI_STATUS (AE_AML_ALIGNMENT);
+               return_ACPI_STATUS(AE_AML_ALIGNMENT);
        }
 #endif
 
@@ -132,9 +127,10 @@ acpi_ex_system_memory_space_handler (
         *    2) Address beyond the current mapping?
         */
        if ((address < mem_info->mapped_physical_address) ||
-               (((acpi_integer) address + length) >
-                       ((acpi_integer)
-                       mem_info->mapped_physical_address + mem_info->mapped_length))) {
+           (((acpi_integer) address + length) > ((acpi_integer)
+                                                 mem_info->
+                                                 mapped_physical_address +
+                                                 mem_info->mapped_length))) {
                /*
                 * The request cannot be resolved by the current memory mapping;
                 * Delete the existing mapping and create a new one.
@@ -142,8 +138,8 @@ acpi_ex_system_memory_space_handler (
                if (mem_info->mapped_length) {
                        /* Valid mapping, delete it */
 
-                       acpi_os_unmap_memory (mem_info->mapped_logical_address,
-                                          mem_info->mapped_length);
+                       acpi_os_unmap_memory(mem_info->mapped_logical_address,
+                                            mem_info->mapped_length);
                }
 
                /*
@@ -151,7 +147,7 @@ acpi_ex_system_memory_space_handler (
                 * constrain the maximum mapping size to something reasonable.
                 */
                window_size = (acpi_size)
-                       ((mem_info->address + mem_info->length) - address);
+                   ((mem_info->address + mem_info->length) - address);
 
                if (window_size > ACPI_SYSMEM_REGION_WINDOW_SIZE) {
                        window_size = ACPI_SYSMEM_REGION_WINDOW_SIZE;
@@ -159,14 +155,16 @@ acpi_ex_system_memory_space_handler (
 
                /* Create a new mapping starting at the address given */
 
-               status = acpi_os_map_memory (address, window_size,
-                                 (void **) &mem_info->mapped_logical_address);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Could not map memory at %8.8X%8.8X, size %X\n",
-                               ACPI_FORMAT_UINT64 (address), (u32) window_size));
+               status = acpi_os_map_memory(address, window_size,
+                                           (void **)&mem_info->
+                                           mapped_logical_address);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Could not map memory at %8.8X%8.8X, size %X\n",
+                                         ACPI_FORMAT_UINT64(address),
+                                         (u32) window_size));
                        mem_info->mapped_length = 0;
-                       return_ACPI_STATUS (status);
+                       return_ACPI_STATUS(status);
                }
 
                /* Save the physical address and mapping size */
@@ -180,42 +178,41 @@ acpi_ex_system_memory_space_handler (
         * access
         */
        logical_addr_ptr = mem_info->mapped_logical_address +
-                          ((acpi_integer) address -
-                                         (acpi_integer) mem_info->mapped_physical_address);
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                       "system_memory %d (%d width) Address=%8.8X%8.8X\n",
-                       function, bit_width,
-                       ACPI_FORMAT_UINT64 (address)));
-
-   /*
-       * Perform the memory read or write
-       *
-       * Note: For machines that do not support non-aligned transfers, the target
-       * address was checked for alignment above.  We do not attempt to break the
-       * transfer up into smaller (byte-size) chunks because the AML specifically
-       * asked for a transfer width that the hardware may require.
-       */
+           ((acpi_integer) address -
+            (acpi_integer) mem_info->mapped_physical_address);
+
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "system_memory %d (%d width) Address=%8.8X%8.8X\n",
+                         function, bit_width, ACPI_FORMAT_UINT64(address)));
+
+       /*
+        * Perform the memory read or write
+        *
+        * Note: For machines that do not support non-aligned transfers, the target
+        * address was checked for alignment above.  We do not attempt to break the
+        * transfer up into smaller (byte-size) chunks because the AML specifically
+        * asked for a transfer width that the hardware may require.
+        */
        switch (function) {
        case ACPI_READ:
 
                *value = 0;
                switch (bit_width) {
                case 8:
-                       *value = (acpi_integer) *((u8 *) logical_addr_ptr);
+                       *value = (acpi_integer) * ((u8 *) logical_addr_ptr);
                        break;
 
                case 16:
-                       *value = (acpi_integer) *((u16 *) logical_addr_ptr);
+                       *value = (acpi_integer) * ((u16 *) logical_addr_ptr);
                        break;
 
                case 32:
-                       *value = (acpi_integer) *((u32 *) logical_addr_ptr);
+                       *value = (acpi_integer) * ((u32 *) logical_addr_ptr);
                        break;
 
 #if ACPI_MACHINE_WIDTH != 16
                case 64:
-                       *value = (acpi_integer) *((u64 *) logical_addr_ptr);
+                       *value = (acpi_integer) * ((u64 *) logical_addr_ptr);
                        break;
 #endif
                default:
@@ -228,20 +225,20 @@ acpi_ex_system_memory_space_handler (
 
                switch (bit_width) {
                case 8:
-                       *(u8 *) logical_addr_ptr = (u8) *value;
+                       *(u8 *) logical_addr_ptr = (u8) * value;
                        break;
 
                case 16:
-                       *(u16 *) logical_addr_ptr = (u16) *value;
+                       *(u16 *) logical_addr_ptr = (u16) * value;
                        break;
 
                case 32:
-                       *(u32 *) logical_addr_ptr = (u32) *value;
+                       *(u32 *) logical_addr_ptr = (u32) * value;
                        break;
 
 #if ACPI_MACHINE_WIDTH != 16
                case 64:
-                       *(u64 *) logical_addr_ptr = (u64) *value;
+                       *(u64 *) logical_addr_ptr = (u64) * value;
                        break;
 #endif
 
@@ -256,10 +253,9 @@ acpi_ex_system_memory_space_handler (
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_system_io_space_handler
@@ -279,39 +275,35 @@ acpi_ex_system_memory_space_handler (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_system_io_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context)
+acpi_ex_system_io_space_handler(u32 function,
+                               acpi_physical_address address,
+                               u32 bit_width,
+                               acpi_integer * value,
+                               void *handler_context, void *region_context)
 {
-       acpi_status                     status = AE_OK;
-       u32                             value32;
+       acpi_status status = AE_OK;
+       u32 value32;
 
+       ACPI_FUNCTION_TRACE("ex_system_io_space_handler");
 
-       ACPI_FUNCTION_TRACE ("ex_system_io_space_handler");
-
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                       "system_iO %d (%d width) Address=%8.8X%8.8X\n", function, bit_width,
-                       ACPI_FORMAT_UINT64 (address)));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "system_iO %d (%d width) Address=%8.8X%8.8X\n",
+                         function, bit_width, ACPI_FORMAT_UINT64(address)));
 
        /* Decode the function parameter */
 
        switch (function) {
        case ACPI_READ:
 
-               status = acpi_os_read_port ((acpi_io_address) address,
-                                &value32, bit_width);
+               status = acpi_os_read_port((acpi_io_address) address,
+                                          &value32, bit_width);
                *value = value32;
                break;
 
        case ACPI_WRITE:
 
-               status = acpi_os_write_port ((acpi_io_address) address,
-                                (u32) *value, bit_width);
+               status = acpi_os_write_port((acpi_io_address) address,
+                                           (u32) * value, bit_width);
                break;
 
        default:
@@ -319,10 +311,9 @@ acpi_ex_system_io_space_handler (
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_pci_config_space_handler
@@ -342,21 +333,17 @@ acpi_ex_system_io_space_handler (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_pci_config_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context)
+acpi_ex_pci_config_space_handler(u32 function,
+                                acpi_physical_address address,
+                                u32 bit_width,
+                                acpi_integer * value,
+                                void *handler_context, void *region_context)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_pci_id              *pci_id;
-       u16                             pci_register;
-
-
-       ACPI_FUNCTION_TRACE ("ex_pci_config_space_handler");
+       acpi_status status = AE_OK;
+       struct acpi_pci_id *pci_id;
+       u16 pci_register;
 
+       ACPI_FUNCTION_TRACE("ex_pci_config_space_handler");
 
        /*
         *  The arguments to acpi_os(Read|Write)pci_configuration are:
@@ -370,26 +357,26 @@ acpi_ex_pci_config_space_handler (
         *  Value - input value for write, output address for read
         *
         */
-       pci_id      = (struct acpi_pci_id *) region_context;
+       pci_id = (struct acpi_pci_id *)region_context;
        pci_register = (u16) (u32) address;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "pci_config %d (%d) Seg(%04x) Bus(%04x) Dev(%04x) Func(%04x) Reg(%04x)\n",
-               function, bit_width, pci_id->segment, pci_id->bus, pci_id->device,
-               pci_id->function, pci_register));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "pci_config %d (%d) Seg(%04x) Bus(%04x) Dev(%04x) Func(%04x) Reg(%04x)\n",
+                         function, bit_width, pci_id->segment, pci_id->bus,
+                         pci_id->device, pci_id->function, pci_register));
 
        switch (function) {
        case ACPI_READ:
 
                *value = 0;
-               status = acpi_os_read_pci_configuration (pci_id, pci_register,
-                                value, bit_width);
+               status = acpi_os_read_pci_configuration(pci_id, pci_register,
+                                                       value, bit_width);
                break;
 
        case ACPI_WRITE:
 
-               status = acpi_os_write_pci_configuration (pci_id, pci_register,
-                                *value, bit_width);
+               status = acpi_os_write_pci_configuration(pci_id, pci_register,
+                                                        *value, bit_width);
                break;
 
        default:
@@ -398,10 +385,9 @@ acpi_ex_pci_config_space_handler (
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_cmos_space_handler
@@ -421,24 +407,19 @@ acpi_ex_pci_config_space_handler (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_cmos_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context)
+acpi_ex_cmos_space_handler(u32 function,
+                          acpi_physical_address address,
+                          u32 bit_width,
+                          acpi_integer * value,
+                          void *handler_context, void *region_context)
 {
-       acpi_status                     status = AE_OK;
-
+       acpi_status status = AE_OK;
 
-       ACPI_FUNCTION_TRACE ("ex_cmos_space_handler");
+       ACPI_FUNCTION_TRACE("ex_cmos_space_handler");
 
-
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_pci_bar_space_handler
@@ -458,24 +439,19 @@ acpi_ex_cmos_space_handler (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_pci_bar_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context)
+acpi_ex_pci_bar_space_handler(u32 function,
+                             acpi_physical_address address,
+                             u32 bit_width,
+                             acpi_integer * value,
+                             void *handler_context, void *region_context)
 {
-       acpi_status                     status = AE_OK;
-
+       acpi_status status = AE_OK;
 
-       ACPI_FUNCTION_TRACE ("ex_pci_bar_space_handler");
+       ACPI_FUNCTION_TRACE("ex_pci_bar_space_handler");
 
-
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_data_table_space_handler
@@ -495,24 +471,20 @@ acpi_ex_pci_bar_space_handler (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_data_table_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context)
+acpi_ex_data_table_space_handler(u32 function,
+                                acpi_physical_address address,
+                                u32 bit_width,
+                                acpi_integer * value,
+                                void *handler_context, void *region_context)
 {
-       acpi_status                     status = AE_OK;
-       u32                             byte_width = ACPI_DIV_8 (bit_width);
-       u32                             i;
-       char                            *logical_addr_ptr;
-
+       acpi_status status = AE_OK;
+       u32 byte_width = ACPI_DIV_8(bit_width);
+       u32 i;
+       char *logical_addr_ptr;
 
-       ACPI_FUNCTION_TRACE ("ex_data_table_space_handler");
+       ACPI_FUNCTION_TRACE("ex_data_table_space_handler");
 
-
-       logical_addr_ptr = ACPI_PHYSADDR_TO_PTR (address);
+       logical_addr_ptr = ACPI_PHYSADDR_TO_PTR(address);
 
        /* Perform the memory read or write */
 
@@ -520,17 +492,15 @@ acpi_ex_data_table_space_handler (
        case ACPI_READ:
 
                for (i = 0; i < byte_width; i++) {
-                       ((char *) value) [i] = logical_addr_ptr[i];
+                       ((char *)value)[i] = logical_addr_ptr[i];
                }
                break;
 
        case ACPI_WRITE:
        default:
 
-               return_ACPI_STATUS (AE_SUPPORT);
+               return_ACPI_STATUS(AE_SUPPORT);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 21d5c74fa30901f01ac9aa9eedaec706a80345b0..ff5d8f97e8eb6dfe9024b5d61ab885ba56bfa59c 100644 (file)
@@ -42,7 +42,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acdispat.h>
 #include <acpi/acinterp.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exresnte")
-
+ACPI_MODULE_NAME("exresnte")
 
 /*******************************************************************************
  *
  *      ACPI_TYPE_PACKAGE
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ex_resolve_node_to_value (
-       struct acpi_namespace_node      **object_ptr,
-       struct acpi_walk_state          *walk_state)
-
+acpi_ex_resolve_node_to_value(struct acpi_namespace_node **object_ptr,
+                             struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *source_desc;
-       union acpi_operand_object       *obj_desc = NULL;
-       struct acpi_namespace_node      *node;
-       acpi_object_type                entry_type;
-
-
-       ACPI_FUNCTION_TRACE ("ex_resolve_node_to_value");
+       acpi_status status = AE_OK;
+       union acpi_operand_object *source_desc;
+       union acpi_operand_object *obj_desc = NULL;
+       struct acpi_namespace_node *node;
+       acpi_object_type entry_type;
 
+       ACPI_FUNCTION_TRACE("ex_resolve_node_to_value");
 
        /*
         * The stack pointer points to a struct acpi_namespace_node (Node).  Get the
         * object that is attached to the Node.
         */
-       node       = *object_ptr;
-       source_desc = acpi_ns_get_attached_object (node);
-       entry_type = acpi_ns_get_type ((acpi_handle) node);
+       node = *object_ptr;
+       source_desc = acpi_ns_get_attached_object(node);
+       entry_type = acpi_ns_get_type((acpi_handle) node);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Entry=%p source_desc=%p [%s]\n",
-                node, source_desc, acpi_ut_get_type_name (entry_type)));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Entry=%p source_desc=%p [%s]\n",
+                         node, source_desc,
+                         acpi_ut_get_type_name(entry_type)));
 
        if ((entry_type == ACPI_TYPE_LOCAL_ALIAS) ||
-               (entry_type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) {
+           (entry_type == ACPI_TYPE_LOCAL_METHOD_ALIAS)) {
                /* There is always exactly one level of indirection */
 
-               node       = ACPI_CAST_PTR (struct acpi_namespace_node, node->object);
-               source_desc = acpi_ns_get_attached_object (node);
-               entry_type = acpi_ns_get_type ((acpi_handle) node);
+               node = ACPI_CAST_PTR(struct acpi_namespace_node, node->object);
+               source_desc = acpi_ns_get_attached_object(node);
+               entry_type = acpi_ns_get_type((acpi_handle) node);
                *object_ptr = node;
        }
 
@@ -124,14 +117,14 @@ acpi_ex_resolve_node_to_value (
         * 2) Method locals and arguments have a pseudo-Node
         */
        if (entry_type == ACPI_TYPE_DEVICE ||
-               (node->flags & (ANOBJ_METHOD_ARG | ANOBJ_METHOD_LOCAL))) {
-               return_ACPI_STATUS (AE_OK);
+           (node->flags & (ANOBJ_METHOD_ARG | ANOBJ_METHOD_LOCAL))) {
+               return_ACPI_STATUS(AE_OK);
        }
 
        if (!source_desc) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No object attached to node %p\n",
-                       node));
-               return_ACPI_STATUS (AE_AML_NO_OPERAND);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "No object attached to node %p\n", node));
+               return_ACPI_STATUS(AE_AML_NO_OPERAND);
        }
 
        /*
@@ -141,83 +134,89 @@ acpi_ex_resolve_node_to_value (
        switch (entry_type) {
        case ACPI_TYPE_PACKAGE:
 
-               if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_PACKAGE) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a Package, type %s\n",
-                               acpi_ut_get_object_type_name (source_desc)));
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               if (ACPI_GET_OBJECT_TYPE(source_desc) != ACPI_TYPE_PACKAGE) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Object not a Package, type %s\n",
+                                         acpi_ut_get_object_type_name
+                                         (source_desc)));
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
 
-               status = acpi_ds_get_package_arguments (source_desc);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_ds_get_package_arguments(source_desc);
+               if (ACPI_SUCCESS(status)) {
                        /* Return an additional reference to the object */
 
                        obj_desc = source_desc;
-                       acpi_ut_add_reference (obj_desc);
+                       acpi_ut_add_reference(obj_desc);
                }
                break;
 
-
        case ACPI_TYPE_BUFFER:
 
-               if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_BUFFER) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a Buffer, type %s\n",
-                               acpi_ut_get_object_type_name (source_desc)));
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               if (ACPI_GET_OBJECT_TYPE(source_desc) != ACPI_TYPE_BUFFER) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Object not a Buffer, type %s\n",
+                                         acpi_ut_get_object_type_name
+                                         (source_desc)));
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
 
-               status = acpi_ds_get_buffer_arguments (source_desc);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_ds_get_buffer_arguments(source_desc);
+               if (ACPI_SUCCESS(status)) {
                        /* Return an additional reference to the object */
 
                        obj_desc = source_desc;
-                       acpi_ut_add_reference (obj_desc);
+                       acpi_ut_add_reference(obj_desc);
                }
                break;
 
-
        case ACPI_TYPE_STRING:
 
-               if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_STRING) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a String, type %s\n",
-                               acpi_ut_get_object_type_name (source_desc)));
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               if (ACPI_GET_OBJECT_TYPE(source_desc) != ACPI_TYPE_STRING) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Object not a String, type %s\n",
+                                         acpi_ut_get_object_type_name
+                                         (source_desc)));
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
 
                /* Return an additional reference to the object */
 
                obj_desc = source_desc;
-               acpi_ut_add_reference (obj_desc);
+               acpi_ut_add_reference(obj_desc);
                break;
 
-
        case ACPI_TYPE_INTEGER:
 
-               if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_INTEGER) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Object not a Integer, type %s\n",
-                               acpi_ut_get_object_type_name (source_desc)));
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               if (ACPI_GET_OBJECT_TYPE(source_desc) != ACPI_TYPE_INTEGER) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Object not a Integer, type %s\n",
+                                         acpi_ut_get_object_type_name
+                                         (source_desc)));
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
 
                /* Return an additional reference to the object */
 
                obj_desc = source_desc;
-               acpi_ut_add_reference (obj_desc);
+               acpi_ut_add_reference(obj_desc);
                break;
 
-
        case ACPI_TYPE_BUFFER_FIELD:
        case ACPI_TYPE_LOCAL_REGION_FIELD:
        case ACPI_TYPE_LOCAL_BANK_FIELD:
        case ACPI_TYPE_LOCAL_INDEX_FIELD:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "field_read Node=%p source_desc=%p Type=%X\n",
-                       node, source_desc, entry_type));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "field_read Node=%p source_desc=%p Type=%X\n",
+                                 node, source_desc, entry_type));
 
-               status = acpi_ex_read_data_from_field (walk_state, source_desc, &obj_desc);
+               status =
+                   acpi_ex_read_data_from_field(walk_state, source_desc,
+                                                &obj_desc);
                break;
 
-       /* For these objects, just return the object attached to the Node */
+               /* For these objects, just return the object attached to the Node */
 
        case ACPI_TYPE_MUTEX:
        case ACPI_TYPE_METHOD:
@@ -230,19 +229,18 @@ acpi_ex_resolve_node_to_value (
                /* Return an additional reference to the object */
 
                obj_desc = source_desc;
-               acpi_ut_add_reference (obj_desc);
+               acpi_ut_add_reference(obj_desc);
                break;
 
-       /* TYPE_ANY is untyped, and thus there is no object associated with it */
+               /* TYPE_ANY is untyped, and thus there is no object associated with it */
 
        case ACPI_TYPE_ANY:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Untyped entry %p, no attached object!\n",
-                       node));
-
-               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);  /* Cannot be AE_TYPE */
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Untyped entry %p, no attached object!\n",
+                                 node));
 
+               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);        /* Cannot be AE_TYPE */
 
        case ACPI_TYPE_LOCAL_REFERENCE:
 
@@ -253,39 +251,37 @@ acpi_ex_resolve_node_to_value (
                        /* Return an additional reference to the object */
 
                        obj_desc = source_desc;
-                       acpi_ut_add_reference (obj_desc);
+                       acpi_ut_add_reference(obj_desc);
                        break;
 
                default:
                        /* No named references are allowed here */
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Unsupported Reference opcode %X (%s)\n",
-                               source_desc->reference.opcode,
-                               acpi_ps_get_opcode_name (source_desc->reference.opcode)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Unsupported Reference opcode %X (%s)\n",
+                                         source_desc->reference.opcode,
+                                         acpi_ps_get_opcode_name(source_desc->
+                                                                 reference.
+                                                                 opcode)));
 
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
                break;
 
-
        default:
 
                /* Default case is for unknown types */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Node %p - Unknown object type %X\n",
-                       node, entry_type));
-
-               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Node %p - Unknown object type %X\n",
+                                 node, entry_type));
 
-       } /* switch (entry_type) */
+               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
 
+       }                       /* switch (entry_type) */
 
        /* Return the object descriptor */
 
-       *object_ptr = (void *) obj_desc;
-       return_ACPI_STATUS (status);
+       *object_ptr = (void *)obj_desc;
+       return_ACPI_STATUS(status);
 }
-
-
index 3de45672379a301cfab377b35cd46cf928187058..97eecbd3242dc9e067b5aa3ac89191ea9e35fbc1 100644 (file)
@@ -42,7 +42,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/amlcode.h>
 #include <acpi/acdispat.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acparser.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exresolv")
+ACPI_MODULE_NAME("exresolv")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ex_resolve_object_to_value (
-       union acpi_operand_object       **stack_ptr,
-       struct acpi_walk_state          *walk_state);
-
+acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
+                               struct acpi_walk_state *walk_state);
 
 /*******************************************************************************
  *
@@ -78,19 +73,16 @@ acpi_ex_resolve_object_to_value (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_resolve_to_value (
-       union acpi_operand_object       **stack_ptr,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_resolve_to_value(union acpi_operand_object **stack_ptr,
+                        struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_resolve_to_value", stack_ptr);
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_resolve_to_value", stack_ptr);
 
        if (!stack_ptr || !*stack_ptr) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null pointer\n"));
-               return_ACPI_STATUS (AE_AML_NO_OPERAND);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Internal - null pointer\n"));
+               return_ACPI_STATUS(AE_AML_NO_OPERAND);
        }
 
        /*
@@ -98,15 +90,16 @@ acpi_ex_resolve_to_value (
         * 1) A valid union acpi_operand_object, or
         * 2) A struct acpi_namespace_node (named_obj)
         */
-       if (ACPI_GET_DESCRIPTOR_TYPE (*stack_ptr) == ACPI_DESC_TYPE_OPERAND) {
-               status = acpi_ex_resolve_object_to_value (stack_ptr, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+       if (ACPI_GET_DESCRIPTOR_TYPE(*stack_ptr) == ACPI_DESC_TYPE_OPERAND) {
+               status = acpi_ex_resolve_object_to_value(stack_ptr, walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                if (!*stack_ptr) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Internal - null pointer\n"));
-                       return_ACPI_STATUS (AE_AML_NO_OPERAND);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Internal - null pointer\n"));
+                       return_ACPI_STATUS(AE_AML_NO_OPERAND);
                }
        }
 
@@ -114,20 +107,20 @@ acpi_ex_resolve_to_value (
         * Object on the stack may have changed if acpi_ex_resolve_object_to_value()
         * was called (i.e., we can't use an _else_ here.)
         */
-       if (ACPI_GET_DESCRIPTOR_TYPE (*stack_ptr) == ACPI_DESC_TYPE_NAMED) {
-               status = acpi_ex_resolve_node_to_value (
-                                 ACPI_CAST_INDIRECT_PTR (struct acpi_namespace_node, stack_ptr),
-                                 walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+       if (ACPI_GET_DESCRIPTOR_TYPE(*stack_ptr) == ACPI_DESC_TYPE_NAMED) {
+               status =
+                   acpi_ex_resolve_node_to_value(ACPI_CAST_INDIRECT_PTR
+                                                 (struct acpi_namespace_node,
+                                                  stack_ptr), walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Resolved object %p\n", *stack_ptr));
-       return_ACPI_STATUS (AE_OK);
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Resolved object %p\n", *stack_ptr));
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_resolve_object_to_value
@@ -143,25 +136,22 @@ acpi_ex_resolve_to_value (
  ******************************************************************************/
 
 static acpi_status
-acpi_ex_resolve_object_to_value (
-       union acpi_operand_object       **stack_ptr,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_resolve_object_to_value(union acpi_operand_object **stack_ptr,
+                               struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *stack_desc;
-       void                            *temp_node;
-       union acpi_operand_object       *obj_desc;
-       u16                             opcode;
-
-
-       ACPI_FUNCTION_TRACE ("ex_resolve_object_to_value");
+       acpi_status status = AE_OK;
+       union acpi_operand_object *stack_desc;
+       void *temp_node;
+       union acpi_operand_object *obj_desc;
+       u16 opcode;
 
+       ACPI_FUNCTION_TRACE("ex_resolve_object_to_value");
 
        stack_desc = *stack_ptr;
 
        /* This is an union acpi_operand_object    */
 
-       switch (ACPI_GET_OBJECT_TYPE (stack_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(stack_desc)) {
        case ACPI_TYPE_LOCAL_REFERENCE:
 
                opcode = stack_desc->reference.opcode;
@@ -177,14 +167,13 @@ acpi_ex_resolve_object_to_value (
 
                        /* Delete the Reference Object */
 
-                       acpi_ut_remove_reference (stack_desc);
+                       acpi_ut_remove_reference(stack_desc);
 
                        /* Return the namespace node */
 
                        (*stack_ptr) = temp_node;
                        break;
 
-
                case AML_LOCAL_OP:
                case AML_ARG_OP:
 
@@ -192,24 +181,28 @@ acpi_ex_resolve_object_to_value (
                         * Get the local from the method's state info
                         * Note: this increments the local's object reference count
                         */
-                       status = acpi_ds_method_data_get_value (opcode,
-                                         stack_desc->reference.offset, walk_state, &obj_desc);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status = acpi_ds_method_data_get_value(opcode,
+                                                              stack_desc->
+                                                              reference.offset,
+                                                              walk_state,
+                                                              &obj_desc);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Arg/Local %X] value_obj is %p\n",
-                               stack_desc->reference.offset, obj_desc));
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                         "[Arg/Local %X] value_obj is %p\n",
+                                         stack_desc->reference.offset,
+                                         obj_desc));
 
                        /*
                         * Now we can delete the original Reference Object and
                         * replace it with the resolved value
                         */
-                       acpi_ut_remove_reference (stack_desc);
+                       acpi_ut_remove_reference(stack_desc);
                        *stack_ptr = obj_desc;
                        break;
 
-
                case AML_INDEX_OP:
 
                        switch (stack_desc->reference.target_type) {
@@ -218,7 +211,6 @@ acpi_ex_resolve_object_to_value (
                                /* Just return - leave the Reference on the stack */
                                break;
 
-
                        case ACPI_TYPE_PACKAGE:
 
                                obj_desc = *stack_desc->reference.where;
@@ -228,36 +220,31 @@ acpi_ex_resolve_object_to_value (
                                         * (i.e., dereference the package index)
                                         * Delete the ref object, increment the returned object
                                         */
-                                       acpi_ut_remove_reference (stack_desc);
-                                       acpi_ut_add_reference (obj_desc);
+                                       acpi_ut_remove_reference(stack_desc);
+                                       acpi_ut_add_reference(obj_desc);
                                        *stack_ptr = obj_desc;
-                               }
-                               else {
+                               } else {
                                        /*
                                         * A NULL object descriptor means an unitialized element of
                                         * the package, can't dereference it
                                         */
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                               "Attempt to deref an Index to NULL pkg element Idx=%p\n",
-                                               stack_desc));
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "Attempt to deref an Index to NULL pkg element Idx=%p\n",
+                                                         stack_desc));
                                        status = AE_AML_UNINITIALIZED_ELEMENT;
                                }
                                break;
 
-
                        default:
 
                                /* Invalid reference object */
 
-                               ACPI_REPORT_ERROR ((
-                                       "During resolve, Unknown target_type %X in Index/Reference obj %p\n",
-                                       stack_desc->reference.target_type, stack_desc));
+                               ACPI_REPORT_ERROR(("During resolve, Unknown target_type %X in Index/Reference obj %p\n", stack_desc->reference.target_type, stack_desc));
                                status = AE_AML_INTERNAL;
                                break;
                        }
                        break;
 
-
                case AML_REF_OF_OP:
                case AML_DEBUG_OP:
                case AML_LOAD_OP:
@@ -266,60 +253,58 @@ acpi_ex_resolve_object_to_value (
 
                        break;
 
-               case AML_INT_NAMEPATH_OP:   /* Reference to a named object */
+               case AML_INT_NAMEPATH_OP:       /* Reference to a named object */
 
                        /* Get the object pointed to by the namespace node */
 
                        *stack_ptr = (stack_desc->reference.node)->object;
-                       acpi_ut_add_reference (*stack_ptr);
-                       acpi_ut_remove_reference (stack_desc);
+                       acpi_ut_add_reference(*stack_ptr);
+                       acpi_ut_remove_reference(stack_desc);
                        break;
 
                default:
 
-                       ACPI_REPORT_ERROR ((
-                               "During resolve, Unknown Reference opcode %X (%s) in %p\n",
-                               opcode, acpi_ps_get_opcode_name (opcode), stack_desc));
+                       ACPI_REPORT_ERROR(("During resolve, Unknown Reference opcode %X (%s) in %p\n", opcode, acpi_ps_get_opcode_name(opcode), stack_desc));
                        status = AE_AML_INTERNAL;
                        break;
                }
                break;
 
-
        case ACPI_TYPE_BUFFER:
 
-               status = acpi_ds_get_buffer_arguments (stack_desc);
+               status = acpi_ds_get_buffer_arguments(stack_desc);
                break;
 
-
        case ACPI_TYPE_PACKAGE:
 
-               status = acpi_ds_get_package_arguments (stack_desc);
+               status = acpi_ds_get_package_arguments(stack_desc);
                break;
 
-
-       /* These cases may never happen here, but just in case.. */
+               /* These cases may never happen here, but just in case.. */
 
        case ACPI_TYPE_BUFFER_FIELD:
        case ACPI_TYPE_LOCAL_REGION_FIELD:
        case ACPI_TYPE_LOCAL_BANK_FIELD:
        case ACPI_TYPE_LOCAL_INDEX_FIELD:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "field_read source_desc=%p Type=%X\n",
-                       stack_desc, ACPI_GET_OBJECT_TYPE (stack_desc)));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "field_read source_desc=%p Type=%X\n",
+                                 stack_desc,
+                                 ACPI_GET_OBJECT_TYPE(stack_desc)));
 
-               status = acpi_ex_read_data_from_field (walk_state, stack_desc, &obj_desc);
-               *stack_ptr = (void *) obj_desc;
+               status =
+                   acpi_ex_read_data_from_field(walk_state, stack_desc,
+                                                &obj_desc);
+               *stack_ptr = (void *)obj_desc;
                break;
 
        default:
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_resolve_multiple
@@ -337,42 +322,44 @@ acpi_ex_resolve_object_to_value (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_resolve_multiple (
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       *operand,
-       acpi_object_type                *return_type,
-       union acpi_operand_object       **return_desc)
+acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
+                        union acpi_operand_object *operand,
+                        acpi_object_type * return_type,
+                        union acpi_operand_object **return_desc)
 {
-       union acpi_operand_object       *obj_desc = (void *) operand;
-       struct acpi_namespace_node      *node;
-       acpi_object_type                type;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_ex_resolve_multiple");
+       union acpi_operand_object *obj_desc = (void *)operand;
+       struct acpi_namespace_node *node;
+       acpi_object_type type;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_ex_resolve_multiple");
 
        /* Operand can be either a namespace node or an operand descriptor */
 
-       switch (ACPI_GET_DESCRIPTOR_TYPE (obj_desc)) {
+       switch (ACPI_GET_DESCRIPTOR_TYPE(obj_desc)) {
        case ACPI_DESC_TYPE_OPERAND:
                type = obj_desc->common.type;
                break;
 
        case ACPI_DESC_TYPE_NAMED:
-               type = ((struct acpi_namespace_node *) obj_desc)->type;
-               obj_desc = acpi_ns_get_attached_object ((struct acpi_namespace_node *) obj_desc);
+               type = ((struct acpi_namespace_node *)obj_desc)->type;
+               obj_desc =
+                   acpi_ns_get_attached_object((struct acpi_namespace_node *)
+                                               obj_desc);
 
                /* If we had an Alias node, use the attached object for type info */
 
                if (type == ACPI_TYPE_LOCAL_ALIAS) {
-                       type = ((struct acpi_namespace_node *) obj_desc)->type;
-                       obj_desc = acpi_ns_get_attached_object ((struct acpi_namespace_node *) obj_desc);
+                       type = ((struct acpi_namespace_node *)obj_desc)->type;
+                       obj_desc =
+                           acpi_ns_get_attached_object((struct
+                                                        acpi_namespace_node *)
+                                                       obj_desc);
                }
                break;
 
        default:
-               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
        }
 
        /* If type is anything other than a reference, we are done */
@@ -387,7 +374,7 @@ acpi_ex_resolve_multiple (
         * of the object_type and size_of operators). This means traversing
         * the list of possibly many nested references.
         */
-       while (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_LOCAL_REFERENCE) {
+       while (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_REFERENCE) {
                switch (obj_desc->reference.opcode) {
                case AML_REF_OF_OP:
 
@@ -397,31 +384,29 @@ acpi_ex_resolve_multiple (
 
                        /* All "References" point to a NS node */
 
-                       if (ACPI_GET_DESCRIPTOR_TYPE (node) != ACPI_DESC_TYPE_NAMED) {
-                               ACPI_REPORT_ERROR ((
-                                       "acpi_ex_resolve_multiple: Not a NS node %p [%s]\n",
-                                       node, acpi_ut_get_descriptor_name (node)));
-                               return_ACPI_STATUS (AE_AML_INTERNAL);
+                       if (ACPI_GET_DESCRIPTOR_TYPE(node) !=
+                           ACPI_DESC_TYPE_NAMED) {
+                               ACPI_REPORT_ERROR(("acpi_ex_resolve_multiple: Not a NS node %p [%s]\n", node, acpi_ut_get_descriptor_name(node)));
+                               return_ACPI_STATUS(AE_AML_INTERNAL);
                        }
 
                        /* Get the attached object */
 
-                       obj_desc = acpi_ns_get_attached_object (node);
+                       obj_desc = acpi_ns_get_attached_object(node);
                        if (!obj_desc) {
                                /* No object, use the NS node type */
 
-                               type = acpi_ns_get_type (node);
+                               type = acpi_ns_get_type(node);
                                goto exit;
                        }
 
                        /* Check for circular references */
 
                        if (obj_desc == operand) {
-                               return_ACPI_STATUS (AE_AML_CIRCULAR_REFERENCE);
+                               return_ACPI_STATUS(AE_AML_CIRCULAR_REFERENCE);
                        }
                        break;
 
-
                case AML_INDEX_OP:
 
                        /* Get the type of this reference (index into another object) */
@@ -442,12 +427,11 @@ acpi_ex_resolve_multiple (
                        if (!obj_desc) {
                                /* NULL package elements are allowed */
 
-                               type = 0; /* Uninitialized */
+                               type = 0;       /* Uninitialized */
                                goto exit;
                        }
                        break;
 
-
                case AML_INT_NAMEPATH_OP:
 
                        /* Dereference the reference pointer */
@@ -456,50 +440,61 @@ acpi_ex_resolve_multiple (
 
                        /* All "References" point to a NS node */
 
-                       if (ACPI_GET_DESCRIPTOR_TYPE (node) != ACPI_DESC_TYPE_NAMED) {
-                               ACPI_REPORT_ERROR ((
-                                       "acpi_ex_resolve_multiple: Not a NS node %p [%s]\n",
-                                       node, acpi_ut_get_descriptor_name (node)));
-                          return_ACPI_STATUS (AE_AML_INTERNAL);
+                       if (ACPI_GET_DESCRIPTOR_TYPE(node) !=
+                           ACPI_DESC_TYPE_NAMED) {
+                               ACPI_REPORT_ERROR(("acpi_ex_resolve_multiple: Not a NS node %p [%s]\n", node, acpi_ut_get_descriptor_name(node)));
+                               return_ACPI_STATUS(AE_AML_INTERNAL);
                        }
 
                        /* Get the attached object */
 
-                       obj_desc = acpi_ns_get_attached_object (node);
+                       obj_desc = acpi_ns_get_attached_object(node);
                        if (!obj_desc) {
                                /* No object, use the NS node type */
 
-                               type = acpi_ns_get_type (node);
+                               type = acpi_ns_get_type(node);
                                goto exit;
                        }
 
                        /* Check for circular references */
 
                        if (obj_desc == operand) {
-                               return_ACPI_STATUS (AE_AML_CIRCULAR_REFERENCE);
+                               return_ACPI_STATUS(AE_AML_CIRCULAR_REFERENCE);
                        }
                        break;
 
-
                case AML_LOCAL_OP:
                case AML_ARG_OP:
 
                        if (return_desc) {
-                               status = acpi_ds_method_data_get_value (obj_desc->reference.opcode,
-                                                obj_desc->reference.offset, walk_state, &obj_desc);
-                               if (ACPI_FAILURE (status)) {
-                                       return_ACPI_STATUS (status);
+                               status =
+                                   acpi_ds_method_data_get_value(obj_desc->
+                                                                 reference.
+                                                                 opcode,
+                                                                 obj_desc->
+                                                                 reference.
+                                                                 offset,
+                                                                 walk_state,
+                                                                 &obj_desc);
+                               if (ACPI_FAILURE(status)) {
+                                       return_ACPI_STATUS(status);
                                }
-                               acpi_ut_remove_reference (obj_desc);
-                       }
-                       else {
-                               status = acpi_ds_method_data_get_node (obj_desc->reference.opcode,
-                                                obj_desc->reference.offset, walk_state, &node);
-                               if (ACPI_FAILURE (status)) {
-                                       return_ACPI_STATUS (status);
+                               acpi_ut_remove_reference(obj_desc);
+                       } else {
+                               status =
+                                   acpi_ds_method_data_get_node(obj_desc->
+                                                                reference.
+                                                                opcode,
+                                                                obj_desc->
+                                                                reference.
+                                                                offset,
+                                                                walk_state,
+                                                                &node);
+                               if (ACPI_FAILURE(status)) {
+                                       return_ACPI_STATUS(status);
                                }
 
-                               obj_desc = acpi_ns_get_attached_object (node);
+                               obj_desc = acpi_ns_get_attached_object(node);
                                if (!obj_desc) {
                                        type = ACPI_TYPE_ANY;
                                        goto exit;
@@ -507,7 +502,6 @@ acpi_ex_resolve_multiple (
                        }
                        break;
 
-
                case AML_DEBUG_OP:
 
                        /* The Debug Object is of type "debug_object" */
@@ -515,13 +509,10 @@ acpi_ex_resolve_multiple (
                        type = ACPI_TYPE_DEBUG_OBJECT;
                        goto exit;
 
-
                default:
 
-                       ACPI_REPORT_ERROR ((
-                               "acpi_ex_resolve_multiple: Unknown Reference subtype %X\n",
-                               obj_desc->reference.opcode));
-                       return_ACPI_STATUS (AE_AML_INTERNAL);
+                       ACPI_REPORT_ERROR(("acpi_ex_resolve_multiple: Unknown Reference subtype %X\n", obj_desc->reference.opcode));
+                       return_ACPI_STATUS(AE_AML_INTERNAL);
                }
        }
 
@@ -529,10 +520,9 @@ acpi_ex_resolve_multiple (
         * Now we are guaranteed to have an object that has not been created
         * via the ref_of or Index operators.
         */
-       type = ACPI_GET_OBJECT_TYPE (obj_desc);
+       type = ACPI_GET_OBJECT_TYPE(obj_desc);
 
-
-exit:
+      exit:
        /* Convert internal types to external types */
 
        switch (type) {
@@ -559,7 +549,5 @@ exit:
        if (return_desc) {
                *return_desc = obj_desc;
        }
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
-
index d8b470eefe7a5832cd0eec7d66bab5794338d892..ff064e79ab90d66995213dc498e473731bb58af9 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/amlcode.h>
 #include <acpi/acparser.h>
 #include <acpi/acinterp.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exresop")
+ACPI_MODULE_NAME("exresop")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ex_check_object_type (
-       acpi_object_type                type_needed,
-       acpi_object_type                this_type,
-       void                            *object);
-
+acpi_ex_check_object_type(acpi_object_type type_needed,
+                         acpi_object_type this_type, void *object);
 
 /*******************************************************************************
  *
@@ -76,13 +70,10 @@ acpi_ex_check_object_type (
  ******************************************************************************/
 
 static acpi_status
-acpi_ex_check_object_type (
-       acpi_object_type                type_needed,
-       acpi_object_type                this_type,
-       void                            *object)
+acpi_ex_check_object_type(acpi_object_type type_needed,
+                         acpi_object_type this_type, void *object)
 {
-       ACPI_FUNCTION_NAME ("ex_check_object_type");
-
+       ACPI_FUNCTION_NAME("ex_check_object_type");
 
        if (type_needed == ACPI_TYPE_ANY) {
                /* All types OK, so we don't perform any typechecks */
@@ -97,16 +88,17 @@ acpi_ex_check_object_type (
                 * specification, a store to a constant is a noop.)
                 */
                if ((this_type == ACPI_TYPE_INTEGER) &&
-                       (((union acpi_operand_object *) object)->common.flags & AOPOBJ_AML_CONSTANT)) {
+                   (((union acpi_operand_object *)object)->common.
+                    flags & AOPOBJ_AML_CONSTANT)) {
                        return (AE_OK);
                }
        }
 
        if (type_needed != this_type) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Needed [%s], found [%s] %p\n",
-                       acpi_ut_get_type_name (type_needed),
-                       acpi_ut_get_type_name (this_type), object));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Needed [%s], found [%s] %p\n",
+                                 acpi_ut_get_type_name(type_needed),
+                                 acpi_ut_get_type_name(this_type), object));
 
                return (AE_AML_OPERAND_TYPE);
        }
@@ -114,7 +106,6 @@ acpi_ex_check_object_type (
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_resolve_operands
@@ -137,41 +128,37 @@ acpi_ex_check_object_type (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_resolve_operands (
-       u16                             opcode,
-       union acpi_operand_object       **stack_ptr,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_resolve_operands(u16 opcode,
+                        union acpi_operand_object ** stack_ptr,
+                        struct acpi_walk_state * walk_state)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status = AE_OK;
-       u8                              object_type;
-       void                            *temp_node;
-       u32                             arg_types;
-       const struct acpi_opcode_info   *op_info;
-       u32                             this_arg_type;
-       acpi_object_type                type_needed;
-       u16                             target_op = 0;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ex_resolve_operands", opcode);
-
-
-       op_info = acpi_ps_get_opcode_info (opcode);
+       union acpi_operand_object *obj_desc;
+       acpi_status status = AE_OK;
+       u8 object_type;
+       void *temp_node;
+       u32 arg_types;
+       const struct acpi_opcode_info *op_info;
+       u32 this_arg_type;
+       acpi_object_type type_needed;
+       u16 target_op = 0;
+
+       ACPI_FUNCTION_TRACE_U32("ex_resolve_operands", opcode);
+
+       op_info = acpi_ps_get_opcode_info(opcode);
        if (op_info->class == AML_CLASS_UNKNOWN) {
-               return_ACPI_STATUS (AE_AML_BAD_OPCODE);
+               return_ACPI_STATUS(AE_AML_BAD_OPCODE);
        }
 
        arg_types = op_info->runtime_args;
        if (arg_types == ARGI_INVALID_OPCODE) {
-               ACPI_REPORT_ERROR (("resolve_operands: %X is not a valid AML opcode\n",
-                       opcode));
+               ACPI_REPORT_ERROR(("resolve_operands: %X is not a valid AML opcode\n", opcode));
 
-               return_ACPI_STATUS (AE_AML_INTERNAL);
+               return_ACPI_STATUS(AE_AML_INTERNAL);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-               "Opcode %X [%s] required_operand_types=%8.8X \n",
-               opcode, op_info->name, arg_types));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "Opcode %X [%s] required_operand_types=%8.8X \n",
+                         opcode, op_info->name, arg_types));
 
        /*
         * Normal exit is with (arg_types == 0) at end of argument list.
@@ -180,12 +167,11 @@ acpi_ex_resolve_operands (
         * to) the required type; if stack underflows; or upon
         * finding a NULL stack entry (which should not happen).
         */
-       while (GET_CURRENT_ARG_TYPE (arg_types)) {
+       while (GET_CURRENT_ARG_TYPE(arg_types)) {
                if (!stack_ptr || !*stack_ptr) {
-                       ACPI_REPORT_ERROR (("resolve_operands: Null stack entry at %p\n",
-                               stack_ptr));
+                       ACPI_REPORT_ERROR(("resolve_operands: Null stack entry at %p\n", stack_ptr));
 
-                       return_ACPI_STATUS (AE_AML_INTERNAL);
+                       return_ACPI_STATUS(AE_AML_INTERNAL);
                }
 
                /* Extract useful items */
@@ -194,37 +180,37 @@ acpi_ex_resolve_operands (
 
                /* Decode the descriptor type */
 
-               switch (ACPI_GET_DESCRIPTOR_TYPE (obj_desc)) {
+               switch (ACPI_GET_DESCRIPTOR_TYPE(obj_desc)) {
                case ACPI_DESC_TYPE_NAMED:
 
                        /* Namespace Node */
 
-                       object_type = ((struct acpi_namespace_node *) obj_desc)->type;
+                       object_type =
+                           ((struct acpi_namespace_node *)obj_desc)->type;
                        break;
 
-
                case ACPI_DESC_TYPE_OPERAND:
 
                        /* ACPI internal object */
 
-                       object_type = ACPI_GET_OBJECT_TYPE (obj_desc);
+                       object_type = ACPI_GET_OBJECT_TYPE(obj_desc);
 
                        /* Check for bad acpi_object_type */
 
-                       if (!acpi_ut_valid_object_type (object_type)) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Bad operand object type [%X]\n",
-                                       object_type));
+                       if (!acpi_ut_valid_object_type(object_type)) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Bad operand object type [%X]\n",
+                                                 object_type));
 
-                               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                        }
 
                        if (object_type == (u8) ACPI_TYPE_LOCAL_REFERENCE) {
                                /* Decode the Reference */
 
-                               op_info = acpi_ps_get_opcode_info (opcode);
+                               op_info = acpi_ps_get_opcode_info(opcode);
                                if (op_info->class == AML_CLASS_UNKNOWN) {
-                                       return_ACPI_STATUS (AE_AML_BAD_OPCODE);
+                                       return_ACPI_STATUS(AE_AML_BAD_OPCODE);
                                }
 
                                switch (obj_desc->reference.opcode) {
@@ -238,51 +224,62 @@ acpi_ex_resolve_operands (
                                case AML_REF_OF_OP:
                                case AML_ARG_OP:
                                case AML_LOCAL_OP:
-                               case AML_LOAD_OP: /* ddb_handle from LOAD_OP or LOAD_TABLE_OP */
-                               case AML_INT_NAMEPATH_OP: /* Reference to a named object */
-
-                                       ACPI_DEBUG_ONLY_MEMBERS (ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                                               "Operand is a Reference, ref_opcode [%s]\n",
-                                               (acpi_ps_get_opcode_info (obj_desc->reference.opcode))->name)));
+                               case AML_LOAD_OP:       /* ddb_handle from LOAD_OP or LOAD_TABLE_OP */
+                               case AML_INT_NAMEPATH_OP:       /* Reference to a named object */
+
+                                       ACPI_DEBUG_ONLY_MEMBERS(ACPI_DEBUG_PRINT
+                                                               ((ACPI_DB_EXEC,
+                                                                 "Operand is a Reference, ref_opcode [%s]\n",
+                                                                 (acpi_ps_get_opcode_info
+                                                                  (obj_desc->
+                                                                   reference.
+                                                                   opcode))->
+                                                                 name)));
                                        break;
 
                                default:
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                               "Operand is a Reference, Unknown Reference Opcode %X [%s]\n",
-                                               obj_desc->reference.opcode,
-                                               (acpi_ps_get_opcode_info (obj_desc->reference.opcode))->name));
-
-                                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "Operand is a Reference, Unknown Reference Opcode %X [%s]\n",
+                                                         obj_desc->reference.
+                                                         opcode,
+                                                         (acpi_ps_get_opcode_info
+                                                          (obj_desc->reference.
+                                                           opcode))->name));
+
+                                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                                }
                        }
                        break;
 
-
                default:
 
                        /* Invalid descriptor */
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Invalid descriptor %p [%s]\n",
-                                       obj_desc, acpi_ut_get_descriptor_name (obj_desc)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid descriptor %p [%s]\n",
+                                         obj_desc,
+                                         acpi_ut_get_descriptor_name
+                                         (obj_desc)));
 
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
 
                /* Get one argument type, point to the next */
 
-               this_arg_type = GET_CURRENT_ARG_TYPE (arg_types);
-               INCREMENT_ARG_LIST (arg_types);
+               this_arg_type = GET_CURRENT_ARG_TYPE(arg_types);
+               INCREMENT_ARG_LIST(arg_types);
 
                /*
                 * Handle cases where the object does not need to be
                 * resolved to a value
                 */
                switch (this_arg_type) {
-               case ARGI_REF_OR_STRING:        /* Can be a String or Reference */
+               case ARGI_REF_OR_STRING:        /* Can be a String or Reference */
 
-                       if ((ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_OPERAND) &&
-                               (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_STRING)) {
+                       if ((ACPI_GET_DESCRIPTOR_TYPE(obj_desc) ==
+                            ACPI_DESC_TYPE_OPERAND)
+                           && (ACPI_GET_OBJECT_TYPE(obj_desc) ==
+                               ACPI_TYPE_STRING)) {
                                /*
                                 * String found - the string references a named object and
                                 * must be resolved to a node
@@ -296,39 +293,40 @@ acpi_ex_resolve_operands (
                         */
                        /*lint -fallthrough */
 
-               case ARGI_REFERENCE:            /* References: */
+               case ARGI_REFERENCE:    /* References: */
                case ARGI_INTEGER_REF:
                case ARGI_OBJECT_REF:
                case ARGI_DEVICE_REF:
-               case ARGI_TARGETREF:     /* Allows implicit conversion rules before store */
-               case ARGI_FIXED_TARGET:  /* No implicit conversion before store to target */
-               case ARGI_SIMPLE_TARGET: /* Name, Local, or Arg - no implicit conversion  */
+               case ARGI_TARGETREF:    /* Allows implicit conversion rules before store */
+               case ARGI_FIXED_TARGET: /* No implicit conversion before store to target */
+               case ARGI_SIMPLE_TARGET:        /* Name, Local, or Arg - no implicit conversion  */
 
                        /*
                         * Need an operand of type ACPI_TYPE_LOCAL_REFERENCE
                         * A Namespace Node is OK as-is
                         */
-                       if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) {
+                       if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) ==
+                           ACPI_DESC_TYPE_NAMED) {
                                goto next_operand;
                        }
 
-                       status = acpi_ex_check_object_type (ACPI_TYPE_LOCAL_REFERENCE,
-                                         object_type, obj_desc);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status =
+                           acpi_ex_check_object_type(ACPI_TYPE_LOCAL_REFERENCE,
+                                                     object_type, obj_desc);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
 
                        if (obj_desc->reference.opcode == AML_NAME_OP) {
                                /* Convert a named reference to the actual named object */
 
                                temp_node = obj_desc->reference.object;
-                               acpi_ut_remove_reference (obj_desc);
+                               acpi_ut_remove_reference(obj_desc);
                                (*stack_ptr) = temp_node;
                        }
                        goto next_operand;
 
-
-               case ARGI_DATAREFOBJ:  /* Store operator only */
+               case ARGI_DATAREFOBJ:   /* Store operator only */
 
                        /*
                         * We don't want to resolve index_op reference objects during
@@ -337,8 +335,10 @@ acpi_ex_resolve_operands (
                         * -- All others must be resolved below.
                         */
                        if ((opcode == AML_STORE_OP) &&
-                               (ACPI_GET_OBJECT_TYPE (*stack_ptr) == ACPI_TYPE_LOCAL_REFERENCE) &&
-                               ((*stack_ptr)->reference.opcode == AML_INDEX_OP)) {
+                           (ACPI_GET_OBJECT_TYPE(*stack_ptr) ==
+                            ACPI_TYPE_LOCAL_REFERENCE)
+                           && ((*stack_ptr)->reference.opcode ==
+                               AML_INDEX_OP)) {
                                goto next_operand;
                        }
                        break;
@@ -351,9 +351,9 @@ acpi_ex_resolve_operands (
                /*
                 * Resolve this object to a value
                 */
-               status = acpi_ex_resolve_to_value (stack_ptr, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ex_resolve_to_value(stack_ptr, walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /* Get the resolved object */
@@ -364,10 +364,10 @@ acpi_ex_resolve_operands (
                 * Check the resulting object (value) type
                 */
                switch (this_arg_type) {
-               /*
-                * For the simple cases, only one type of resolved object
-                * is allowed
-                */
+                       /*
+                        * For the simple cases, only one type of resolved object
+                        * is allowed
+                        */
                case ARGI_MUTEX:
 
                        /* Need an operand of type ACPI_TYPE_MUTEX */
@@ -382,7 +382,7 @@ acpi_ex_resolve_operands (
                        type_needed = ACPI_TYPE_EVENT;
                        break;
 
-               case ARGI_PACKAGE:   /* Package */
+               case ARGI_PACKAGE:      /* Package */
 
                        /* Need an operand of type ACPI_TYPE_PACKAGE */
 
@@ -403,10 +403,9 @@ acpi_ex_resolve_operands (
                        type_needed = ACPI_TYPE_LOCAL_REFERENCE;
                        break;
 
-
-               /*
-                * The more complex cases allow multiple resolved object types
-                */
+                       /*
+                        * The more complex cases allow multiple resolved object types
+                        */
                case ARGI_INTEGER:
 
                        /*
@@ -414,20 +413,26 @@ acpi_ex_resolve_operands (
                         * But we can implicitly convert from a STRING or BUFFER
                         * Aka - "Implicit Source Operand Conversion"
                         */
-                       status = acpi_ex_convert_to_integer (obj_desc, stack_ptr, 16);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_ex_convert_to_integer(obj_desc, stack_ptr, 16);
+                       if (ACPI_FAILURE(status)) {
                                if (status == AE_TYPE) {
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                               "Needed [Integer/String/Buffer], found [%s] %p\n",
-                                               acpi_ut_get_object_type_name (obj_desc), obj_desc));
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "Needed [Integer/String/Buffer], found [%s] %p\n",
+                                                         acpi_ut_get_object_type_name
+                                                         (obj_desc),
+                                                         obj_desc));
 
-                                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                                }
 
-                               return_ACPI_STATUS (status);
+                               return_ACPI_STATUS(status);
                        }
-                       goto next_operand;
 
+                       if (obj_desc != *stack_ptr) {
+                               acpi_ut_remove_reference(obj_desc);
+                       }
+                       goto next_operand;
 
                case ARGI_BUFFER:
 
@@ -436,20 +441,25 @@ acpi_ex_resolve_operands (
                         * But we can implicitly convert from a STRING or INTEGER
                         * Aka - "Implicit Source Operand Conversion"
                         */
-                       status = acpi_ex_convert_to_buffer (obj_desc, stack_ptr);
-                       if (ACPI_FAILURE (status)) {
+                       status = acpi_ex_convert_to_buffer(obj_desc, stack_ptr);
+                       if (ACPI_FAILURE(status)) {
                                if (status == AE_TYPE) {
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                               "Needed [Integer/String/Buffer], found [%s] %p\n",
-                                               acpi_ut_get_object_type_name (obj_desc), obj_desc));
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "Needed [Integer/String/Buffer], found [%s] %p\n",
+                                                         acpi_ut_get_object_type_name
+                                                         (obj_desc),
+                                                         obj_desc));
 
-                                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                                }
 
-                               return_ACPI_STATUS (status);
+                               return_ACPI_STATUS(status);
                        }
-                       goto next_operand;
 
+                       if (obj_desc != *stack_ptr) {
+                               acpi_ut_remove_reference(obj_desc);
+                       }
+                       goto next_operand;
 
                case ARGI_STRING:
 
@@ -458,75 +468,86 @@ acpi_ex_resolve_operands (
                         * But we can implicitly convert from a BUFFER or INTEGER
                         * Aka - "Implicit Source Operand Conversion"
                         */
-                       status = acpi_ex_convert_to_string (obj_desc, stack_ptr,
-                                        ACPI_IMPLICIT_CONVERT_HEX);
-                       if (ACPI_FAILURE (status)) {
+                       status = acpi_ex_convert_to_string(obj_desc, stack_ptr,
+                                                          ACPI_IMPLICIT_CONVERT_HEX);
+                       if (ACPI_FAILURE(status)) {
                                if (status == AE_TYPE) {
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                               "Needed [Integer/String/Buffer], found [%s] %p\n",
-                                               acpi_ut_get_object_type_name (obj_desc), obj_desc));
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "Needed [Integer/String/Buffer], found [%s] %p\n",
+                                                         acpi_ut_get_object_type_name
+                                                         (obj_desc),
+                                                         obj_desc));
 
-                                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                                }
 
-                               return_ACPI_STATUS (status);
+                               return_ACPI_STATUS(status);
                        }
-                       goto next_operand;
 
+                       if (obj_desc != *stack_ptr) {
+                               acpi_ut_remove_reference(obj_desc);
+                       }
+                       goto next_operand;
 
                case ARGI_COMPUTEDATA:
 
                        /* Need an operand of type INTEGER, STRING or BUFFER */
 
-                       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+                       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
                        case ACPI_TYPE_INTEGER:
                        case ACPI_TYPE_STRING:
                        case ACPI_TYPE_BUFFER:
 
                                /* Valid operand */
-                          break;
+                               break;
 
                        default:
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Needed [Integer/String/Buffer], found [%s] %p\n",
-                                       acpi_ut_get_object_type_name (obj_desc), obj_desc));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Needed [Integer/String/Buffer], found [%s] %p\n",
+                                                 acpi_ut_get_object_type_name
+                                                 (obj_desc), obj_desc));
 
-                               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                        }
                        goto next_operand;
 
-
                case ARGI_BUFFER_OR_STRING:
 
                        /* Need an operand of type STRING or BUFFER */
 
-                       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+                       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
                        case ACPI_TYPE_STRING:
                        case ACPI_TYPE_BUFFER:
 
                                /* Valid operand */
-                          break;
+                               break;
 
                        case ACPI_TYPE_INTEGER:
 
                                /* Highest priority conversion is to type Buffer */
 
-                               status = acpi_ex_convert_to_buffer (obj_desc, stack_ptr);
-                               if (ACPI_FAILURE (status)) {
-                                       return_ACPI_STATUS (status);
+                               status =
+                                   acpi_ex_convert_to_buffer(obj_desc,
+                                                             stack_ptr);
+                               if (ACPI_FAILURE(status)) {
+                                       return_ACPI_STATUS(status);
+                               }
+
+                               if (obj_desc != *stack_ptr) {
+                                       acpi_ut_remove_reference(obj_desc);
                                }
                                break;
 
                        default:
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Needed [Integer/String/Buffer], found [%s] %p\n",
-                                       acpi_ut_get_object_type_name (obj_desc), obj_desc));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Needed [Integer/String/Buffer], found [%s] %p\n",
+                                                 acpi_ut_get_object_type_name
+                                                 (obj_desc), obj_desc));
 
-                               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                        }
                        goto next_operand;
 
-
                case ARGI_DATAOBJECT:
                        /*
                         * ARGI_DATAOBJECT is only used by the size_of operator.
@@ -535,7 +556,7 @@ acpi_ex_resolve_operands (
                         * The only reference allowed here is a direct reference to
                         * a namespace node.
                         */
-                       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+                       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
                        case ACPI_TYPE_PACKAGE:
                        case ACPI_TYPE_STRING:
                        case ACPI_TYPE_BUFFER:
@@ -545,20 +566,20 @@ acpi_ex_resolve_operands (
                                break;
 
                        default:
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Needed [Buffer/String/Package/Reference], found [%s] %p\n",
-                                       acpi_ut_get_object_type_name (obj_desc), obj_desc));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Needed [Buffer/String/Package/Reference], found [%s] %p\n",
+                                                 acpi_ut_get_object_type_name
+                                                 (obj_desc), obj_desc));
 
-                               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                        }
                        goto next_operand;
 
-
                case ARGI_COMPLEXOBJ:
 
                        /* Need a buffer or package or (ACPI 2.0) String */
 
-                       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+                       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
                        case ACPI_TYPE_PACKAGE:
                        case ACPI_TYPE_STRING:
                        case ACPI_TYPE_BUFFER:
@@ -567,20 +588,20 @@ acpi_ex_resolve_operands (
                                break;
 
                        default:
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Needed [Buffer/String/Package], found [%s] %p\n",
-                                       acpi_ut_get_object_type_name (obj_desc), obj_desc));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Needed [Buffer/String/Package], found [%s] %p\n",
+                                                 acpi_ut_get_object_type_name
+                                                 (obj_desc), obj_desc));
 
-                               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                        }
                        goto next_operand;
 
-
                case ARGI_REGION_OR_FIELD:
 
                        /* Need an operand of type REGION or a FIELD in a region */
 
-                       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+                       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
                        case ACPI_TYPE_REGION:
                        case ACPI_TYPE_LOCAL_REGION_FIELD:
                        case ACPI_TYPE_LOCAL_BANK_FIELD:
@@ -590,20 +611,20 @@ acpi_ex_resolve_operands (
                                break;
 
                        default:
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Needed [Region/region_field], found [%s] %p\n",
-                                       acpi_ut_get_object_type_name (obj_desc), obj_desc));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Needed [Region/region_field], found [%s] %p\n",
+                                                 acpi_ut_get_object_type_name
+                                                 (obj_desc), obj_desc));
 
-                               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                        }
                        goto next_operand;
 
-
                case ARGI_DATAREFOBJ:
 
                        /* Used by the Store() operator only */
 
-                       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+                       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
                        case ACPI_TYPE_INTEGER:
                        case ACPI_TYPE_PACKAGE:
                        case ACPI_TYPE_STRING:
@@ -635,47 +656,46 @@ acpi_ex_resolve_operands (
                                        break;
                                }
 
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Needed Integer/Buffer/String/Package/Ref/Ddb], found [%s] %p\n",
-                                       acpi_ut_get_object_type_name (obj_desc), obj_desc));
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Needed Integer/Buffer/String/Package/Ref/Ddb], found [%s] %p\n",
+                                                 acpi_ut_get_object_type_name
+                                                 (obj_desc), obj_desc));
 
-                               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                        }
                        goto next_operand;
 
-
                default:
 
                        /* Unknown type */
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Internal - Unknown ARGI (required operand) type %X\n",
-                               this_arg_type));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Internal - Unknown ARGI (required operand) type %X\n",
+                                         this_arg_type));
 
-                       return_ACPI_STATUS (AE_BAD_PARAMETER);
+                       return_ACPI_STATUS(AE_BAD_PARAMETER);
                }
 
                /*
                 * Make sure that the original object was resolved to the
                 * required object type (Simple cases only).
                 */
-               status = acpi_ex_check_object_type (type_needed,
-                                 ACPI_GET_OBJECT_TYPE (*stack_ptr), *stack_ptr);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ex_check_object_type(type_needed,
+                                                  ACPI_GET_OBJECT_TYPE
+                                                  (*stack_ptr), *stack_ptr);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
-next_operand:
+             next_operand:
                /*
                 * If more operands needed, decrement stack_ptr to point
                 * to next operand on stack
                 */
-               if (GET_CURRENT_ARG_TYPE (arg_types)) {
+               if (GET_CURRENT_ARG_TYPE(arg_types)) {
                        stack_ptr--;
                }
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 2725db0901b827133003aa9d21400cd5dcec1384..a7d8eea305c2a80f305055a6851bffcb6d8709ab 100644 (file)
@@ -42,7 +42,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acdispat.h>
 #include <acpi/acinterp.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acparser.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exstore")
+ACPI_MODULE_NAME("exstore")
 
 /* Local prototypes */
-
 static void
-acpi_ex_do_debug_object (
-       union acpi_operand_object       *source_desc,
-       u32                             level,
-       u32                             index);
+acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
+                       u32 level, u32 index);
 
 static acpi_status
-acpi_ex_store_object_to_index (
-       union acpi_operand_object       *val_desc,
-       union acpi_operand_object       *dest_desc,
-       struct acpi_walk_state          *walk_state);
-
+acpi_ex_store_object_to_index(union acpi_operand_object *val_desc,
+                             union acpi_operand_object *dest_desc,
+                             struct acpi_walk_state *walk_state);
 
 /*******************************************************************************
  *
@@ -84,136 +77,146 @@ acpi_ex_store_object_to_index (
  ******************************************************************************/
 
 static void
-acpi_ex_do_debug_object (
-       union acpi_operand_object       *source_desc,
-       u32                             level,
-       u32                             index)
+acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
+                       u32 level, u32 index)
 {
-       u32                             i;
-
+       u32 i;
 
-       ACPI_FUNCTION_TRACE_PTR ("ex_do_debug_object", source_desc);
+       ACPI_FUNCTION_TRACE_PTR("ex_do_debug_object", source_desc);
 
-
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[ACPI Debug] %*s",
-               level, " "));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[ACPI Debug] %*s",
+                             level, " "));
 
        /* Display index for package output only */
 
        if (index > 0) {
-          ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT,
-                  "(%.2u) ", index -1));
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT,
+                                     "(%.2u) ", index - 1));
        }
 
        if (!source_desc) {
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "<Null Object>\n"));
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "<Null Object>\n"));
                return_VOID;
        }
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (source_desc) == ACPI_DESC_TYPE_OPERAND) {
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "%s: ",
-                       acpi_ut_get_object_type_name (source_desc)));
+       if (ACPI_GET_DESCRIPTOR_TYPE(source_desc) == ACPI_DESC_TYPE_OPERAND) {
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "%s: ",
+                                     acpi_ut_get_object_type_name
+                                     (source_desc)));
 
-               if (!acpi_ut_valid_internal_object (source_desc)) {
-                  ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT,
-                          "%p, Invalid Internal Object!\n", source_desc));
-                  return_VOID;
+               if (!acpi_ut_valid_internal_object(source_desc)) {
+                       ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT,
+                                             "%p, Invalid Internal Object!\n",
+                                             source_desc));
+                       return_VOID;
                }
-       }
-       else if (ACPI_GET_DESCRIPTOR_TYPE (source_desc) == ACPI_DESC_TYPE_NAMED) {
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "%s: %p\n",
-                       acpi_ut_get_type_name (((struct acpi_namespace_node *) source_desc)->type),
-                       source_desc));
+       } else if (ACPI_GET_DESCRIPTOR_TYPE(source_desc) ==
+                  ACPI_DESC_TYPE_NAMED) {
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "%s: %p\n",
+                                     acpi_ut_get_type_name(((struct
+                                                             acpi_namespace_node
+                                                             *)source_desc)->
+                                                           type),
+                                     source_desc));
                return_VOID;
-       }
-       else {
+       } else {
                return_VOID;
        }
 
-       switch (ACPI_GET_OBJECT_TYPE (source_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(source_desc)) {
        case ACPI_TYPE_INTEGER:
 
                /* Output correct integer width */
 
                if (acpi_gbl_integer_byte_width == 4) {
-                       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "0x%8.8X\n",
-                               (u32) source_desc->integer.value));
-               }
-               else {
-                       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "0x%8.8X%8.8X\n",
-                               ACPI_FORMAT_UINT64 (source_desc->integer.value)));
+                       ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "0x%8.8X\n",
+                                             (u32) source_desc->integer.
+                                             value));
+               } else {
+                       ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT,
+                                             "0x%8.8X%8.8X\n",
+                                             ACPI_FORMAT_UINT64(source_desc->
+                                                                integer.
+                                                                value)));
                }
                break;
 
        case ACPI_TYPE_BUFFER:
 
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[0x%.2X]",
-                       (u32) source_desc->buffer.length));
-               ACPI_DUMP_BUFFER (source_desc->buffer.pointer,
-                       (source_desc->buffer.length < 32) ? source_desc->buffer.length : 32);
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[0x%.2X]\n",
+                                     (u32) source_desc->buffer.length));
+               ACPI_DUMP_BUFFER(source_desc->buffer.pointer,
+                                (source_desc->buffer.length <
+                                 32) ? source_desc->buffer.length : 32);
                break;
 
        case ACPI_TYPE_STRING:
 
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[0x%.2X] \"%s\"\n",
-                       source_desc->string.length, source_desc->string.pointer));
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[0x%.2X] \"%s\"\n",
+                                     source_desc->string.length,
+                                     source_desc->string.pointer));
                break;
 
        case ACPI_TYPE_PACKAGE:
 
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[0x%.2X Elements]\n",
-                       source_desc->package.count));
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT,
+                                     "[0x%.2X Elements]\n",
+                                     source_desc->package.count));
 
                /* Output the entire contents of the package */
 
                for (i = 0; i < source_desc->package.count; i++) {
-                       acpi_ex_do_debug_object (source_desc->package.elements[i],
-                               level+4, i+1);
+                       acpi_ex_do_debug_object(source_desc->package.
+                                               elements[i], level + 4, i + 1);
                }
                break;
 
        case ACPI_TYPE_LOCAL_REFERENCE:
 
                if (source_desc->reference.opcode == AML_INDEX_OP) {
-                       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[%s, 0x%X]\n",
-                               acpi_ps_get_opcode_name (source_desc->reference.opcode),
-                               source_desc->reference.offset));
+                       ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT,
+                                             "[%s, 0x%X]\n",
+                                             acpi_ps_get_opcode_name
+                                             (source_desc->reference.opcode),
+                                             source_desc->reference.offset));
+               } else {
+                       ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "[%s]\n",
+                                             acpi_ps_get_opcode_name
+                                             (source_desc->reference.opcode)));
                }
-               else {
-                       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "[%s]\n",
-                               acpi_ps_get_opcode_name (source_desc->reference.opcode)));
-               }
-
 
                if (source_desc->reference.object) {
-                       if (ACPI_GET_DESCRIPTOR_TYPE (source_desc->reference.object) ==
-                                       ACPI_DESC_TYPE_NAMED) {
-                               acpi_ex_do_debug_object (((struct acpi_namespace_node *)
-                                       source_desc->reference.object)->object,
-                                       level+4, 0);
+                       if (ACPI_GET_DESCRIPTOR_TYPE
+                           (source_desc->reference.object) ==
+                           ACPI_DESC_TYPE_NAMED) {
+                               acpi_ex_do_debug_object(((struct
+                                                         acpi_namespace_node *)
+                                                        source_desc->reference.
+                                                        object)->object,
+                                                       level + 4, 0);
+                       } else {
+                               acpi_ex_do_debug_object(source_desc->reference.
+                                                       object, level + 4, 0);
                        }
-                       else {
-                               acpi_ex_do_debug_object (source_desc->reference.object, level+4, 0);
-                       }
-               }
-               else if (source_desc->reference.node) {
-                       acpi_ex_do_debug_object ((source_desc->reference.node)->object,
-                               level+4, 0);
+               } else if (source_desc->reference.node) {
+                       acpi_ex_do_debug_object((source_desc->reference.node)->
+                                               object, level + 4, 0);
                }
                break;
 
        default:
 
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DEBUG_OBJECT, "%p %s\n",
-                       source_desc, acpi_ut_get_object_type_name (source_desc)));
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_DEBUG_OBJECT, "%p %s\n",
+                                     source_desc,
+                                     acpi_ut_get_object_type_name
+                                     (source_desc)));
                break;
        }
 
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "\n"));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "\n"));
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_store
@@ -235,42 +238,41 @@ acpi_ex_do_debug_object (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_store (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *dest_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_store(union acpi_operand_object *source_desc,
+             union acpi_operand_object *dest_desc,
+             struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *ref_desc = dest_desc;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_store", dest_desc);
+       acpi_status status = AE_OK;
+       union acpi_operand_object *ref_desc = dest_desc;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_store", dest_desc);
 
        /* Validate parameters */
 
        if (!source_desc || !dest_desc) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null parameter\n"));
-               return_ACPI_STATUS (AE_AML_NO_OPERAND);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Null parameter\n"));
+               return_ACPI_STATUS(AE_AML_NO_OPERAND);
        }
 
        /* dest_desc can be either a namespace node or an ACPI object */
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (dest_desc) == ACPI_DESC_TYPE_NAMED) {
+       if (ACPI_GET_DESCRIPTOR_TYPE(dest_desc) == ACPI_DESC_TYPE_NAMED) {
                /*
                 * Dest is a namespace node,
                 * Storing an object into a Named node.
                 */
-               status = acpi_ex_store_object_to_node (source_desc,
-                                (struct acpi_namespace_node *) dest_desc, walk_state,
-                                ACPI_IMPLICIT_CONVERSION);
+               status = acpi_ex_store_object_to_node(source_desc,
+                                                     (struct
+                                                      acpi_namespace_node *)
+                                                     dest_desc, walk_state,
+                                                     ACPI_IMPLICIT_CONVERSION);
 
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
        /* Destination object must be a Reference or a Constant object */
 
-       switch (ACPI_GET_OBJECT_TYPE (dest_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(dest_desc)) {
        case ACPI_TYPE_LOCAL_REFERENCE:
                break;
 
@@ -279,7 +281,7 @@ acpi_ex_store (
                /* Allow stores to Constants -- a Noop as per ACPI spec */
 
                if (dest_desc->common.flags & AOPOBJ_AML_CONSTANT) {
-                       return_ACPI_STATUS (AE_OK);
+                       return_ACPI_STATUS(AE_OK);
                }
 
                /*lint -fallthrough */
@@ -288,16 +290,18 @@ acpi_ex_store (
 
                /* Destination is not a Reference object */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Target is not a Reference or Constant object - %s [%p]\n",
-                       acpi_ut_get_object_type_name (dest_desc), dest_desc));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Target is not a Reference or Constant object - %s [%p]\n",
+                                 acpi_ut_get_object_type_name(dest_desc),
+                                 dest_desc));
 
-               ACPI_DUMP_STACK_ENTRY (source_desc);
-               ACPI_DUMP_STACK_ENTRY (dest_desc);
-               ACPI_DUMP_OPERANDS (&dest_desc, ACPI_IMODE_EXECUTE, "ex_store",
-                                 2, "Target is not a Reference or Constant object");
+               ACPI_DUMP_STACK_ENTRY(source_desc);
+               ACPI_DUMP_STACK_ENTRY(dest_desc);
+               ACPI_DUMP_OPERANDS(&dest_desc, ACPI_IMODE_EXECUTE, "ex_store",
+                                  2,
+                                  "Target is not a Reference or Constant object");
 
-               return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
        }
 
        /*
@@ -314,58 +318,59 @@ acpi_ex_store (
 
                /* Storing an object into a Name "container" */
 
-               status = acpi_ex_store_object_to_node (source_desc,
-                                ref_desc->reference.object,
-                                walk_state, ACPI_IMPLICIT_CONVERSION);
+               status = acpi_ex_store_object_to_node(source_desc,
+                                                     ref_desc->reference.
+                                                     object, walk_state,
+                                                     ACPI_IMPLICIT_CONVERSION);
                break;
 
-
        case AML_INDEX_OP:
 
                /* Storing to an Index (pointer into a packager or buffer) */
 
-               status = acpi_ex_store_object_to_index (source_desc, ref_desc, walk_state);
+               status =
+                   acpi_ex_store_object_to_index(source_desc, ref_desc,
+                                                 walk_state);
                break;
 
-
        case AML_LOCAL_OP:
        case AML_ARG_OP:
 
                /* Store to a method local/arg  */
 
-               status = acpi_ds_store_object_to_local (ref_desc->reference.opcode,
-                                ref_desc->reference.offset, source_desc, walk_state);
+               status =
+                   acpi_ds_store_object_to_local(ref_desc->reference.opcode,
+                                                 ref_desc->reference.offset,
+                                                 source_desc, walk_state);
                break;
 
-
        case AML_DEBUG_OP:
 
                /*
                 * Storing to the Debug object causes the value stored to be
                 * displayed and otherwise has no effect -- see ACPI Specification
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "**** Write to Debug Object: Object %p %s ****:\n\n",
-                       source_desc, acpi_ut_get_object_type_name (source_desc)));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "**** Write to Debug Object: Object %p %s ****:\n\n",
+                                 source_desc,
+                                 acpi_ut_get_object_type_name(source_desc)));
 
-               acpi_ex_do_debug_object (source_desc, 0, 0);
+               acpi_ex_do_debug_object(source_desc, 0, 0);
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("ex_store: Unknown Reference opcode %X\n",
-                       ref_desc->reference.opcode));
-               ACPI_DUMP_ENTRY (ref_desc, ACPI_LV_ERROR);
+               ACPI_REPORT_ERROR(("ex_store: Unknown Reference opcode %X\n",
+                                  ref_desc->reference.opcode));
+               ACPI_DUMP_ENTRY(ref_desc, ACPI_LV_ERROR);
 
                status = AE_AML_INTERNAL;
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_store_object_to_index
@@ -381,20 +386,17 @@ acpi_ex_store (
  ******************************************************************************/
 
 static acpi_status
-acpi_ex_store_object_to_index (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *index_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_store_object_to_index(union acpi_operand_object *source_desc,
+                             union acpi_operand_object *index_desc,
+                             struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *new_desc;
-       u8                              value = 0;
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("ex_store_object_to_index");
+       acpi_status status = AE_OK;
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *new_desc;
+       u8 value = 0;
+       u32 i;
 
+       ACPI_FUNCTION_TRACE("ex_store_object_to_index");
 
        /*
         * Destination must be a reference pointer, and
@@ -413,19 +415,20 @@ acpi_ex_store_object_to_index (
                 */
                obj_desc = *(index_desc->reference.where);
 
-               status = acpi_ut_copy_iobject_to_iobject (source_desc, &new_desc, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ut_copy_iobject_to_iobject(source_desc, &new_desc,
+                                                   walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                if (obj_desc) {
                        /* Decrement reference count by the ref count of the parent package */
 
-                       for (i = 0;
-                                i < ((union acpi_operand_object *)
-                                               index_desc->reference.object)->common.reference_count;
-                                i++) {
-                               acpi_ut_remove_reference (obj_desc);
+                       for (i = 0; i < ((union acpi_operand_object *)
+                                        index_desc->reference.object)->common.
+                            reference_count; i++) {
+                               acpi_ut_remove_reference(obj_desc);
                        }
                }
 
@@ -433,16 +436,14 @@ acpi_ex_store_object_to_index (
 
                /* Increment ref count by the ref count of the parent package-1 */
 
-               for (i = 1;
-                        i < ((union acpi_operand_object *)
-                                       index_desc->reference.object)->common.reference_count;
-                        i++) {
-                       acpi_ut_add_reference (new_desc);
+               for (i = 1; i < ((union acpi_operand_object *)
+                                index_desc->reference.object)->common.
+                    reference_count; i++) {
+                       acpi_ut_add_reference(new_desc);
                }
 
                break;
 
-
        case ACPI_TYPE_BUFFER_FIELD:
 
                /*
@@ -460,16 +461,16 @@ acpi_ex_store_object_to_index (
                 * by the INDEX_OP code.
                 */
                obj_desc = index_desc->reference.object;
-               if ((ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_BUFFER) &&
-                       (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_STRING)) {
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               if ((ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_BUFFER) &&
+                   (ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_STRING)) {
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
 
                /*
                 * The assignment of the individual elements will be slightly
                 * different for each source type.
                 */
-               switch (ACPI_GET_OBJECT_TYPE (source_desc)) {
+               switch (ACPI_GET_OBJECT_TYPE(source_desc)) {
                case ACPI_TYPE_INTEGER:
 
                        /* Use the least-significant byte of the integer */
@@ -489,10 +490,11 @@ acpi_ex_store_object_to_index (
 
                        /* All other types are invalid */
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Source must be Integer/Buffer/String type, not %s\n",
-                               acpi_ut_get_object_type_name (source_desc)));
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Source must be Integer/Buffer/String type, not %s\n",
+                                         acpi_ut_get_object_type_name
+                                         (source_desc)));
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
 
                /* Store the source value into the target buffer byte */
@@ -500,18 +502,16 @@ acpi_ex_store_object_to_index (
                obj_desc->buffer.pointer[index_desc->reference.offset] = value;
                break;
 
-
        default:
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Target is not a Package or buffer_field\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Target is not a Package or buffer_field\n"));
                status = AE_AML_OPERAND_TYPE;
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_store_object_to_node
@@ -539,42 +539,40 @@ acpi_ex_store_object_to_index (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_store_object_to_node (
-       union acpi_operand_object       *source_desc,
-       struct acpi_namespace_node      *node,
-       struct acpi_walk_state          *walk_state,
-       u8                              implicit_conversion)
+acpi_ex_store_object_to_node(union acpi_operand_object *source_desc,
+                            struct acpi_namespace_node *node,
+                            struct acpi_walk_state *walk_state,
+                            u8 implicit_conversion)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *target_desc;
-       union acpi_operand_object       *new_desc;
-       acpi_object_type                target_type;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_store_object_to_node", source_desc);
+       acpi_status status = AE_OK;
+       union acpi_operand_object *target_desc;
+       union acpi_operand_object *new_desc;
+       acpi_object_type target_type;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_store_object_to_node", source_desc);
 
        /* Get current type of the node, and object attached to Node */
 
-       target_type = acpi_ns_get_type (node);
-       target_desc = acpi_ns_get_attached_object (node);
+       target_type = acpi_ns_get_type(node);
+       target_desc = acpi_ns_get_attached_object(node);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Storing %p(%s) into node %p(%s)\n",
-               source_desc, acpi_ut_get_object_type_name (source_desc),
-                         node, acpi_ut_get_type_name (target_type)));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Storing %p(%s) into node %p(%s)\n",
+                         source_desc,
+                         acpi_ut_get_object_type_name(source_desc), node,
+                         acpi_ut_get_type_name(target_type)));
 
        /*
         * Resolve the source object to an actual value
         * (If it is a reference object)
         */
-       status = acpi_ex_resolve_object (&source_desc, target_type, walk_state);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ex_resolve_object(&source_desc, target_type, walk_state);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* If no implicit conversion, drop into the default case below */
 
-       if (!implicit_conversion) {
+       if ((!implicit_conversion) || (walk_state->opcode == AML_COPY_OP)) {
                /* Force execution of default (no implicit conversion) */
 
                target_type = ACPI_TYPE_ANY;
@@ -590,11 +588,10 @@ acpi_ex_store_object_to_node (
 
                /* For fields, copy the source data to the target field. */
 
-               status = acpi_ex_write_data_to_field (source_desc, target_desc,
-                                &walk_state->result_obj);
+               status = acpi_ex_write_data_to_field(source_desc, target_desc,
+                                                    &walk_state->result_obj);
                break;
 
-
        case ACPI_TYPE_INTEGER:
        case ACPI_TYPE_STRING:
        case ACPI_TYPE_BUFFER:
@@ -605,10 +602,11 @@ acpi_ex_store_object_to_node (
                 *
                 * Copy and/or convert the source object to a new target object
                 */
-               status = acpi_ex_store_object_to_object (source_desc, target_desc,
-                                &new_desc, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ex_store_object_to_object(source_desc, target_desc,
+                                                  &new_desc, walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                if (new_desc != target_desc) {
@@ -621,30 +619,33 @@ acpi_ex_store_object_to_node (
                         * has been performed such that the node/object type has been
                         * changed.
                         */
-                       status = acpi_ns_attach_object (node, new_desc, new_desc->common.type);
-
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                               "Store %s into %s via Convert/Attach\n",
-                               acpi_ut_get_object_type_name (source_desc),
-                               acpi_ut_get_object_type_name (new_desc)));
+                       status =
+                           acpi_ns_attach_object(node, new_desc,
+                                                 new_desc->common.type);
+
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                         "Store %s into %s via Convert/Attach\n",
+                                         acpi_ut_get_object_type_name
+                                         (source_desc),
+                                         acpi_ut_get_object_type_name
+                                         (new_desc)));
                }
                break;
 
-
        default:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "Storing %s (%p) directly into node (%p), no implicit conversion\n",
-                       acpi_ut_get_object_type_name (source_desc), source_desc, node));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "Storing %s (%p) directly into node (%p) with no implicit conversion\n",
+                                 acpi_ut_get_object_type_name(source_desc),
+                                 source_desc, node));
 
                /* No conversions for all other types.  Just attach the source object */
 
-               status = acpi_ns_attach_object (node, source_desc,
-                                ACPI_GET_OBJECT_TYPE (source_desc));
+               status = acpi_ns_attach_object(node, source_desc,
+                                              ACPI_GET_OBJECT_TYPE
+                                              (source_desc));
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 120f30ed0bd4a017c7a7363783329f13828fbb99..382f63c14ea1cd10954c0e76d26b795b6a82aa50 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/amlcode.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exstoren")
-
+ACPI_MODULE_NAME("exstoren")
 
 /*******************************************************************************
  *
  *              it and return the actual object in the source_desc_ptr.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ex_resolve_object (
-       union acpi_operand_object       **source_desc_ptr,
-       acpi_object_type                target_type,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_resolve_object(union acpi_operand_object **source_desc_ptr,
+                      acpi_object_type target_type,
+                      struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       *source_desc = *source_desc_ptr;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("ex_resolve_object");
+       union acpi_operand_object *source_desc = *source_desc_ptr;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("ex_resolve_object");
 
        /* Ensure we have a Target that can be stored to */
 
@@ -102,11 +95,14 @@ acpi_ex_resolve_object (
                 * are all essentially the same.  This case handles the
                 * "interchangeable" types Integer, String, and Buffer.
                 */
-               if (ACPI_GET_OBJECT_TYPE (source_desc) == ACPI_TYPE_LOCAL_REFERENCE) {
+               if (ACPI_GET_OBJECT_TYPE(source_desc) ==
+                   ACPI_TYPE_LOCAL_REFERENCE) {
                        /* Resolve a reference object first */
 
-                       status = acpi_ex_resolve_to_value (source_desc_ptr, walk_state);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_ex_resolve_to_value(source_desc_ptr,
+                                                    walk_state);
+                       if (ACPI_FAILURE(status)) {
                                break;
                        }
                }
@@ -119,31 +115,32 @@ acpi_ex_resolve_object (
 
                /* Must have a Integer, Buffer, or String */
 
-               if ((ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_INTEGER)   &&
-                       (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_BUFFER)    &&
-                       (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_TYPE_STRING)    &&
-                       !((ACPI_GET_OBJECT_TYPE (source_desc) == ACPI_TYPE_LOCAL_REFERENCE) && (source_desc->reference.opcode == AML_LOAD_OP))) {
+               if ((ACPI_GET_OBJECT_TYPE(source_desc) != ACPI_TYPE_INTEGER) &&
+                   (ACPI_GET_OBJECT_TYPE(source_desc) != ACPI_TYPE_BUFFER) &&
+                   (ACPI_GET_OBJECT_TYPE(source_desc) != ACPI_TYPE_STRING) &&
+                   !((ACPI_GET_OBJECT_TYPE(source_desc) ==
+                      ACPI_TYPE_LOCAL_REFERENCE)
+                     && (source_desc->reference.opcode == AML_LOAD_OP))) {
                        /* Conversion successful but still not a valid type */
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Cannot assign type %s to %s (must be type Int/Str/Buf)\n",
-                               acpi_ut_get_object_type_name (source_desc),
-                               acpi_ut_get_type_name (target_type)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Cannot assign type %s to %s (must be type Int/Str/Buf)\n",
+                                         acpi_ut_get_object_type_name
+                                         (source_desc),
+                                         acpi_ut_get_type_name(target_type)));
                        status = AE_AML_OPERAND_TYPE;
                }
                break;
 
-
        case ACPI_TYPE_LOCAL_ALIAS:
        case ACPI_TYPE_LOCAL_METHOD_ALIAS:
 
                /* Aliases are resolved by acpi_ex_prep_operands */
 
-               ACPI_REPORT_ERROR (("Store into Alias - should never happen\n"));
+               ACPI_REPORT_ERROR(("Store into Alias - should never happen\n"));
                status = AE_AML_INTERNAL;
                break;
 
-
        case ACPI_TYPE_PACKAGE:
        default:
 
@@ -154,10 +151,9 @@ acpi_ex_resolve_object (
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_store_object_to_object
@@ -194,18 +190,15 @@ acpi_ex_resolve_object (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_store_object_to_object (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *dest_desc,
-       union acpi_operand_object       **new_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ex_store_object_to_object(union acpi_operand_object *source_desc,
+                              union acpi_operand_object *dest_desc,
+                              union acpi_operand_object **new_desc,
+                              struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       *actual_src_desc;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_store_object_to_object", source_desc);
+       union acpi_operand_object *actual_src_desc;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_store_object_to_object", source_desc);
 
        actual_src_desc = source_desc;
        if (!dest_desc) {
@@ -214,11 +207,14 @@ acpi_ex_store_object_to_object (
                 * package element), so we can simply copy the source object
                 * creating a new destination object
                 */
-               status = acpi_ut_copy_iobject_to_iobject (actual_src_desc, new_desc, walk_state);
-               return_ACPI_STATUS (status);
+               status =
+                   acpi_ut_copy_iobject_to_iobject(actual_src_desc, new_desc,
+                                                   walk_state);
+               return_ACPI_STATUS(status);
        }
 
-       if (ACPI_GET_OBJECT_TYPE (source_desc) != ACPI_GET_OBJECT_TYPE (dest_desc)) {
+       if (ACPI_GET_OBJECT_TYPE(source_desc) !=
+           ACPI_GET_OBJECT_TYPE(dest_desc)) {
                /*
                 * The source type does not match the type of the destination.
                 * Perform the "implicit conversion" of the source to the current type
@@ -228,10 +224,13 @@ acpi_ex_store_object_to_object (
                 * Otherwise, actual_src_desc is a temporary object to hold the
                 * converted object.
                 */
-               status = acpi_ex_convert_to_target_type (ACPI_GET_OBJECT_TYPE (dest_desc),
-                                 source_desc, &actual_src_desc, walk_state);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ex_convert_to_target_type(ACPI_GET_OBJECT_TYPE
+                                                  (dest_desc), source_desc,
+                                                  &actual_src_desc,
+                                                  walk_state);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                if (source_desc == actual_src_desc) {
@@ -240,7 +239,7 @@ acpi_ex_store_object_to_object (
                         * new object.
                         */
                        *new_desc = source_desc;
-                       return_ACPI_STATUS (AE_OK);
+                       return_ACPI_STATUS(AE_OK);
                }
        }
 
@@ -248,42 +247,42 @@ acpi_ex_store_object_to_object (
         * We now have two objects of identical types, and we can perform a
         * copy of the *value* of the source object.
         */
-       switch (ACPI_GET_OBJECT_TYPE (dest_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(dest_desc)) {
        case ACPI_TYPE_INTEGER:
 
                dest_desc->integer.value = actual_src_desc->integer.value;
 
                /* Truncate value if we are executing from a 32-bit ACPI table */
 
-               acpi_ex_truncate_for32bit_table (dest_desc);
+               acpi_ex_truncate_for32bit_table(dest_desc);
                break;
 
        case ACPI_TYPE_STRING:
 
-               status = acpi_ex_store_string_to_string (actual_src_desc, dest_desc);
+               status =
+                   acpi_ex_store_string_to_string(actual_src_desc, dest_desc);
                break;
 
        case ACPI_TYPE_BUFFER:
 
-               /*
-                * Note: There is different store behavior depending on the original
-                * source type
-                */
-               status = acpi_ex_store_buffer_to_buffer (actual_src_desc, dest_desc);
+               status =
+                   acpi_ex_store_buffer_to_buffer(actual_src_desc, dest_desc);
                break;
 
        case ACPI_TYPE_PACKAGE:
 
-               status = acpi_ut_copy_iobject_to_iobject (actual_src_desc, &dest_desc,
-                                walk_state);
+               status =
+                   acpi_ut_copy_iobject_to_iobject(actual_src_desc, &dest_desc,
+                                                   walk_state);
                break;
 
        default:
                /*
                 * All other types come here.
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Store into type %s not implemented\n",
-                       acpi_ut_get_object_type_name (dest_desc)));
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Store into type %s not implemented\n",
+                                 acpi_ut_get_object_type_name(dest_desc)));
 
                status = AE_NOT_IMPLEMENTED;
                break;
@@ -292,11 +291,9 @@ acpi_ex_store_object_to_object (
        if (actual_src_desc != source_desc) {
                /* Delete the intermediate (temporary) source object */
 
-               acpi_ut_remove_reference (actual_src_desc);
+               acpi_ut_remove_reference(actual_src_desc);
        }
 
        *new_desc = dest_desc;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 12d1527669c834d8a3240b54fbb01c89b6399062..c4ff654a669717637baf578766d9524fd062fb40 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 
-
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exstorob")
-
+ACPI_MODULE_NAME("exstorob")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Copy a buffer object to another buffer object.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ex_store_buffer_to_buffer (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *target_desc)
+acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
+                              union acpi_operand_object *target_desc)
 {
-       u32                             length;
-       u8                              *buffer;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_store_buffer_to_buffer", source_desc);
+       u32 length;
+       u8 *buffer;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_store_buffer_to_buffer", source_desc);
 
        /* We know that source_desc is a buffer by now */
 
@@ -86,10 +79,10 @@ acpi_ex_store_buffer_to_buffer (
         * allocate a new buffer of the proper length
         */
        if ((target_desc->buffer.length == 0) ||
-               (target_desc->common.flags & AOPOBJ_STATIC_POINTER)) {
-               target_desc->buffer.pointer = ACPI_MEM_ALLOCATE (length);
+           (target_desc->common.flags & AOPOBJ_STATIC_POINTER)) {
+               target_desc->buffer.pointer = ACPI_MEM_ALLOCATE(length);
                if (!target_desc->buffer.pointer) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                target_desc->buffer.length = length;
@@ -100,8 +93,9 @@ acpi_ex_store_buffer_to_buffer (
        if (length <= target_desc->buffer.length) {
                /* Clear existing buffer and copy in the new one */
 
-               ACPI_MEMSET (target_desc->buffer.pointer, 0, target_desc->buffer.length);
-               ACPI_MEMCPY (target_desc->buffer.pointer, buffer, length);
+               ACPI_MEMSET(target_desc->buffer.pointer, 0,
+                           target_desc->buffer.length);
+               ACPI_MEMCPY(target_desc->buffer.pointer, buffer, length);
 
 #ifdef ACPI_OBSOLETE_BEHAVIOR
                /*
@@ -124,26 +118,24 @@ acpi_ex_store_buffer_to_buffer (
                        target_desc->buffer.length = length;
                }
 #endif
-       }
-       else {
+       } else {
                /* Truncate the source, copy only what will fit */
 
-               ACPI_MEMCPY (target_desc->buffer.pointer, buffer,
-                       target_desc->buffer.length);
+               ACPI_MEMCPY(target_desc->buffer.pointer, buffer,
+                           target_desc->buffer.length);
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                       "Truncating source buffer from %X to %X\n",
-                       length, target_desc->buffer.length));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Truncating source buffer from %X to %X\n",
+                                 length, target_desc->buffer.length));
        }
 
        /* Copy flags */
 
        target_desc->buffer.flags = source_desc->buffer.flags;
        target_desc->common.flags &= ~AOPOBJ_STATIC_POINTER;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_store_string_to_string
@@ -158,16 +150,13 @@ acpi_ex_store_buffer_to_buffer (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_store_string_to_string (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *target_desc)
+acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
+                              union acpi_operand_object *target_desc)
 {
-       u32                             length;
-       u8                              *buffer;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_store_string_to_string", source_desc);
+       u32 length;
+       u8 *buffer;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_store_string_to_string", source_desc);
 
        /* We know that source_desc is a string by now */
 
@@ -179,41 +168,38 @@ acpi_ex_store_string_to_string (
         * pointer is not a static pointer (part of an ACPI table)
         */
        if ((length < target_desc->string.length) &&
-          (!(target_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
+           (!(target_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
                /*
                 * String will fit in existing non-static buffer.
                 * Clear old string and copy in the new one
                 */
-               ACPI_MEMSET (target_desc->string.pointer, 0,
-                       (acpi_size) target_desc->string.length + 1);
-               ACPI_MEMCPY (target_desc->string.pointer, buffer, length);
-       }
-       else {
+               ACPI_MEMSET(target_desc->string.pointer, 0,
+                           (acpi_size) target_desc->string.length + 1);
+               ACPI_MEMCPY(target_desc->string.pointer, buffer, length);
+       } else {
                /*
                 * Free the current buffer, then allocate a new buffer
                 * large enough to hold the value
                 */
                if (target_desc->string.pointer &&
-                  (!(target_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
+                   (!(target_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
                        /* Only free if not a pointer into the DSDT */
 
-                       ACPI_MEM_FREE (target_desc->string.pointer);
+                       ACPI_MEM_FREE(target_desc->string.pointer);
                }
 
-               target_desc->string.pointer = ACPI_MEM_CALLOCATE (
-                                  (acpi_size) length + 1);
+               target_desc->string.pointer = ACPI_MEM_CALLOCATE((acpi_size)
+                                                                length + 1);
                if (!target_desc->string.pointer) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                target_desc->common.flags &= ~AOPOBJ_STATIC_POINTER;
-               ACPI_MEMCPY (target_desc->string.pointer, buffer, length);
+               ACPI_MEMCPY(target_desc->string.pointer, buffer, length);
        }
 
        /* Set the new target length */
 
        target_desc->string.length = length;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
-
index cafa702108dc834c8c9ee7d04da8b8048427c686..8a88b841237d551ec0a440b537a9b2eeac192326 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/acevents.h>
 
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exsystem")
-
+ACPI_MODULE_NAME("exsystem")
 
 /*******************************************************************************
  *
  *              interpreter is released.
  *
  ******************************************************************************/
-
-acpi_status
-acpi_ex_system_wait_semaphore (
-       acpi_handle                     semaphore,
-       u16                             timeout)
+acpi_status acpi_ex_system_wait_semaphore(acpi_handle semaphore, u16 timeout)
 {
-       acpi_status                     status;
-       acpi_status                     status2;
-
+       acpi_status status;
+       acpi_status status2;
 
-       ACPI_FUNCTION_TRACE ("ex_system_wait_semaphore");
+       ACPI_FUNCTION_TRACE("ex_system_wait_semaphore");
 
-
-       status = acpi_os_wait_semaphore (semaphore, 1, 0);
-       if (ACPI_SUCCESS (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_os_wait_semaphore(semaphore, 1, 0);
+       if (ACPI_SUCCESS(status)) {
+               return_ACPI_STATUS(status);
        }
 
        if (status == AE_TIME) {
                /* We must wait, so unlock the interpreter */
 
-               acpi_ex_exit_interpreter ();
+               acpi_ex_exit_interpreter();
 
-               status = acpi_os_wait_semaphore (semaphore, 1, timeout);
+               status = acpi_os_wait_semaphore(semaphore, 1, timeout);
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "*** Thread awake after blocking, %s\n",
-                       acpi_format_exception (status)));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "*** Thread awake after blocking, %s\n",
+                                 acpi_format_exception(status)));
 
                /* Reacquire the interpreter */
 
-               status2 = acpi_ex_enter_interpreter ();
-               if (ACPI_FAILURE (status2)) {
+               status2 = acpi_ex_enter_interpreter();
+               if (ACPI_FAILURE(status2)) {
                        /* Report fatal error, could not acquire interpreter */
 
-                       return_ACPI_STATUS (status2);
+                       return_ACPI_STATUS(status2);
                }
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_system_do_stall
@@ -125,35 +116,29 @@ acpi_ex_system_wait_semaphore (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_system_do_stall (
-       u32                             how_long)
+acpi_status acpi_ex_system_do_stall(u32 how_long)
 {
-       acpi_status                     status = AE_OK;
-
+       acpi_status status = AE_OK;
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
-
-       if (how_long > 255) /* 255 microseconds */ {
+       if (how_long > 255) {   /* 255 microseconds */
                /*
                 * Longer than 255 usec, this is an error
                 *
                 * (ACPI specifies 100 usec as max, but this gives some slack in
                 * order to support existing BIOSs)
                 */
-               ACPI_REPORT_ERROR (("Stall: Time parameter is too large (%d)\n",
-                       how_long));
+               ACPI_REPORT_ERROR(("Stall: Time parameter is too large (%d)\n",
+                                  how_long));
                status = AE_AML_OPERAND_VALUE;
-       }
-       else {
-               acpi_os_stall (how_long);
+       } else {
+               acpi_os_stall(how_long);
        }
 
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_system_do_suspend
@@ -167,29 +152,24 @@ acpi_ex_system_do_stall (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_system_do_suspend (
-       acpi_integer                    how_long)
+acpi_status acpi_ex_system_do_suspend(acpi_integer how_long)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       acpi_status status;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* Since this thread will sleep, we must release the interpreter */
 
-       acpi_ex_exit_interpreter ();
+       acpi_ex_exit_interpreter();
 
-       acpi_os_sleep (how_long);
+       acpi_os_sleep(how_long);
 
        /* And now we must get the interpreter again */
 
-       status = acpi_ex_enter_interpreter ();
+       status = acpi_ex_enter_interpreter();
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_system_acquire_mutex
@@ -206,33 +186,30 @@ acpi_ex_system_do_suspend (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_system_acquire_mutex (
-       union acpi_operand_object       *time_desc,
-       union acpi_operand_object       *obj_desc)
+acpi_ex_system_acquire_mutex(union acpi_operand_object * time_desc,
+                            union acpi_operand_object * obj_desc)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ex_system_acquire_mutex", obj_desc);
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE_PTR("ex_system_acquire_mutex", obj_desc);
 
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Support for the _GL_ Mutex object -- go get the global lock */
 
        if (obj_desc->mutex.semaphore == acpi_gbl_global_lock_semaphore) {
-               status = acpi_ev_acquire_global_lock ((u16) time_desc->integer.value);
-               return_ACPI_STATUS (status);
+               status =
+                   acpi_ev_acquire_global_lock((u16) time_desc->integer.value);
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_ex_system_wait_semaphore (obj_desc->mutex.semaphore,
-                        (u16) time_desc->integer.value);
-       return_ACPI_STATUS (status);
+       status = acpi_ex_system_wait_semaphore(obj_desc->mutex.semaphore,
+                                              (u16) time_desc->integer.value);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_system_release_mutex
@@ -248,32 +225,27 @@ acpi_ex_system_acquire_mutex (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_system_release_mutex (
-       union acpi_operand_object       *obj_desc)
+acpi_status acpi_ex_system_release_mutex(union acpi_operand_object *obj_desc)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("ex_system_release_mutex");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("ex_system_release_mutex");
 
        if (!obj_desc) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Support for the _GL_ Mutex object -- release the global lock */
 
        if (obj_desc->mutex.semaphore == acpi_gbl_global_lock_semaphore) {
-               status = acpi_ev_release_global_lock ();
-               return_ACPI_STATUS (status);
+               status = acpi_ev_release_global_lock();
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_os_signal_semaphore (obj_desc->mutex.semaphore, 1);
-       return_ACPI_STATUS (status);
+       status = acpi_os_signal_semaphore(obj_desc->mutex.semaphore, 1);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_system_signal_event
@@ -287,24 +259,19 @@ acpi_ex_system_release_mutex (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_system_signal_event (
-       union acpi_operand_object       *obj_desc)
+acpi_status acpi_ex_system_signal_event(union acpi_operand_object *obj_desc)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("ex_system_signal_event");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("ex_system_signal_event");
 
        if (obj_desc) {
-               status = acpi_os_signal_semaphore (obj_desc->event.semaphore, 1);
+               status = acpi_os_signal_semaphore(obj_desc->event.semaphore, 1);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_system_wait_event
@@ -321,25 +288,23 @@ acpi_ex_system_signal_event (
  ******************************************************************************/
 
 acpi_status
-acpi_ex_system_wait_event (
-       union acpi_operand_object       *time_desc,
-       union acpi_operand_object       *obj_desc)
+acpi_ex_system_wait_event(union acpi_operand_object *time_desc,
+                         union acpi_operand_object *obj_desc)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("ex_system_wait_event");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("ex_system_wait_event");
 
        if (obj_desc) {
-               status = acpi_ex_system_wait_semaphore (obj_desc->event.semaphore,
-                                (u16) time_desc->integer.value);
+               status =
+                   acpi_ex_system_wait_semaphore(obj_desc->event.semaphore,
+                                                 (u16) time_desc->integer.
+                                                 value);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_system_reset_event
@@ -352,27 +317,23 @@ acpi_ex_system_wait_event (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_system_reset_event (
-       union acpi_operand_object       *obj_desc)
+acpi_status acpi_ex_system_reset_event(union acpi_operand_object *obj_desc)
 {
-       acpi_status                     status = AE_OK;
-       void                            *temp_semaphore;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       acpi_status status = AE_OK;
+       void *temp_semaphore;
 
+       ACPI_FUNCTION_ENTRY();
 
        /*
         * We are going to simply delete the existing semaphore and
         * create a new one!
         */
-       status = acpi_os_create_semaphore (ACPI_NO_UNIT_LIMIT, 0, &temp_semaphore);
-       if (ACPI_SUCCESS (status)) {
-               (void) acpi_os_delete_semaphore (obj_desc->event.semaphore);
+       status =
+           acpi_os_create_semaphore(ACPI_NO_UNIT_LIMIT, 0, &temp_semaphore);
+       if (ACPI_SUCCESS(status)) {
+               (void)acpi_os_delete_semaphore(obj_desc->event.semaphore);
                obj_desc->event.semaphore = temp_semaphore;
        }
 
        return (status);
 }
-
index 5c7ec0c0417767243df04097713a95f441dc9834..1ee79d8c8f8827d2895ac6a221b592eea6c78cd0 100644 (file)
@@ -42,7 +42,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 /*
  * DEFINE_AML_GLOBALS is tested in amlcode.h
  * to determine whether certain global names should be "defined" or only
 #include <acpi/acevents.h>
 
 #define _COMPONENT          ACPI_EXECUTER
-        ACPI_MODULE_NAME    ("exutils")
+ACPI_MODULE_NAME("exutils")
 
 /* Local prototypes */
-
-static u32
-acpi_ex_digits_needed (
-       acpi_integer                    value,
-       u32                             base);
-
+static u32 acpi_ex_digits_needed(acpi_integer value, u32 base);
 
 #ifndef ACPI_NO_METHOD_EXECUTION
 /*******************************************************************************
@@ -89,24 +83,20 @@ acpi_ex_digits_needed (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ex_enter_interpreter (
-       void)
+acpi_status acpi_ex_enter_interpreter(void)
 {
-       acpi_status                     status;
-
-       ACPI_FUNCTION_TRACE ("ex_enter_interpreter");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ex_enter_interpreter");
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_EXECUTE);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Could not acquire interpreter mutex\n"));
+       status = acpi_ut_acquire_mutex(ACPI_MTX_EXECUTE);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Could not acquire interpreter mutex\n"));
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_exit_interpreter
@@ -129,25 +119,20 @@ acpi_ex_enter_interpreter (
  *
  ******************************************************************************/
 
-void
-acpi_ex_exit_interpreter (
-       void)
+void acpi_ex_exit_interpreter(void)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ex_exit_interpreter");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ex_exit_interpreter");
 
-       status = acpi_ut_release_mutex (ACPI_MTX_EXECUTE);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Could not release interpreter mutex\n"));
+       status = acpi_ut_release_mutex(ACPI_MTX_EXECUTE);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Could not release interpreter mutex\n"));
        }
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_truncate_for32bit_table
@@ -161,20 +146,17 @@ acpi_ex_exit_interpreter (
  *
  ******************************************************************************/
 
-void
-acpi_ex_truncate_for32bit_table (
-       union acpi_operand_object       *obj_desc)
+void acpi_ex_truncate_for32bit_table(union acpi_operand_object *obj_desc)
 {
 
-       ACPI_FUNCTION_ENTRY ();
-
+       ACPI_FUNCTION_ENTRY();
 
        /*
         * Object must be a valid number and we must be executing
         * a control method
         */
        if ((!obj_desc) ||
-               (ACPI_GET_OBJECT_TYPE (obj_desc) != ACPI_TYPE_INTEGER)) {
+           (ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_INTEGER)) {
                return;
        }
 
@@ -187,7 +169,6 @@ acpi_ex_truncate_for32bit_table (
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_acquire_global_lock
@@ -203,37 +184,31 @@ acpi_ex_truncate_for32bit_table (
  *
  ******************************************************************************/
 
-u8
-acpi_ex_acquire_global_lock (
-       u32                             field_flags)
+u8 acpi_ex_acquire_global_lock(u32 field_flags)
 {
-       u8                              locked = FALSE;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ex_acquire_global_lock");
+       u8 locked = FALSE;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ex_acquire_global_lock");
 
        /* Only attempt lock if the always_lock bit is set */
 
        if (field_flags & AML_FIELD_LOCK_RULE_MASK) {
                /* We should attempt to get the lock, wait forever */
 
-               status = acpi_ev_acquire_global_lock (ACPI_WAIT_FOREVER);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_ev_acquire_global_lock(ACPI_WAIT_FOREVER);
+               if (ACPI_SUCCESS(status)) {
                        locked = TRUE;
-               }
-               else {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Could not acquire Global Lock, %s\n",
-                               acpi_format_exception (status)));
+               } else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Could not acquire Global Lock, %s\n",
+                                         acpi_format_exception(status)));
                }
        }
 
-       return_VALUE (locked);
+       return_VALUE(locked);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_release_global_lock
@@ -247,34 +222,28 @@ acpi_ex_acquire_global_lock (
  *
  ******************************************************************************/
 
-void
-acpi_ex_release_global_lock (
-       u8                              locked_by_me)
+void acpi_ex_release_global_lock(u8 locked_by_me)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ex_release_global_lock");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ex_release_global_lock");
 
        /* Only attempt unlock if the caller locked it */
 
        if (locked_by_me) {
                /* OK, now release the lock */
 
-               status = acpi_ev_release_global_lock ();
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ev_release_global_lock();
+               if (ACPI_FAILURE(status)) {
                        /* Report the error, but there isn't much else we can do */
 
-                       ACPI_REPORT_ERROR (("Could not release ACPI Global Lock, %s\n",
-                               acpi_format_exception (status)));
+                       ACPI_REPORT_ERROR(("Could not release ACPI Global Lock, %s\n", acpi_format_exception(status)));
                }
        }
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_digits_needed
@@ -289,22 +258,17 @@ acpi_ex_release_global_lock (
  *
  ******************************************************************************/
 
-static u32
-acpi_ex_digits_needed (
-       acpi_integer                    value,
-       u32                             base)
+static u32 acpi_ex_digits_needed(acpi_integer value, u32 base)
 {
-       u32                             num_digits;
-       acpi_integer                    current_value;
-
-
-       ACPI_FUNCTION_TRACE ("ex_digits_needed");
+       u32 num_digits;
+       acpi_integer current_value;
 
+       ACPI_FUNCTION_TRACE("ex_digits_needed");
 
        /* acpi_integer is unsigned, so we don't worry about a '-' prefix */
 
        if (value == 0) {
-               return_VALUE (1);
+               return_VALUE(1);
        }
 
        current_value = value;
@@ -313,14 +277,14 @@ acpi_ex_digits_needed (
        /* Count the digits in the requested base */
 
        while (current_value) {
-               (void) acpi_ut_short_divide (current_value, base, &current_value, NULL);
+               (void)acpi_ut_short_divide(current_value, base, &current_value,
+                                          NULL);
                num_digits++;
        }
 
-       return_VALUE (num_digits);
+       return_VALUE(num_digits);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_eisa_id_to_string
@@ -334,32 +298,26 @@ acpi_ex_digits_needed (
  *
  ******************************************************************************/
 
-void
-acpi_ex_eisa_id_to_string (
-       u32                             numeric_id,
-       char                            *out_string)
+void acpi_ex_eisa_id_to_string(u32 numeric_id, char *out_string)
 {
-       u32                             eisa_id;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       u32 eisa_id;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* Swap ID to big-endian to get contiguous bits */
 
-       eisa_id = acpi_ut_dword_byte_swap (numeric_id);
+       eisa_id = acpi_ut_dword_byte_swap(numeric_id);
 
-       out_string[0] = (char) ('@' + (((unsigned long) eisa_id >> 26) & 0x1f));
-       out_string[1] = (char) ('@' + ((eisa_id >> 21) & 0x1f));
-       out_string[2] = (char) ('@' + ((eisa_id >> 16) & 0x1f));
-       out_string[3] = acpi_ut_hex_to_ascii_char ((acpi_integer) eisa_id, 12);
-       out_string[4] = acpi_ut_hex_to_ascii_char ((acpi_integer) eisa_id, 8);
-       out_string[5] = acpi_ut_hex_to_ascii_char ((acpi_integer) eisa_id, 4);
-       out_string[6] = acpi_ut_hex_to_ascii_char ((acpi_integer) eisa_id, 0);
+       out_string[0] = (char)('@' + (((unsigned long)eisa_id >> 26) & 0x1f));
+       out_string[1] = (char)('@' + ((eisa_id >> 21) & 0x1f));
+       out_string[2] = (char)('@' + ((eisa_id >> 16) & 0x1f));
+       out_string[3] = acpi_ut_hex_to_ascii_char((acpi_integer) eisa_id, 12);
+       out_string[4] = acpi_ut_hex_to_ascii_char((acpi_integer) eisa_id, 8);
+       out_string[5] = acpi_ut_hex_to_ascii_char((acpi_integer) eisa_id, 4);
+       out_string[6] = acpi_ut_hex_to_ascii_char((acpi_integer) eisa_id, 0);
        out_string[7] = 0;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ex_unsigned_integer_to_string
@@ -369,30 +327,25 @@ acpi_ex_eisa_id_to_string (
  *
  * RETURN:      None, string
  *
- * DESCRIPTOIN: Convert a number to string representation. Assumes string
+ * DESCRIPTION: Convert a number to string representation. Assumes string
  *              buffer is large enough to hold the string.
  *
  ******************************************************************************/
 
-void
-acpi_ex_unsigned_integer_to_string (
-       acpi_integer                    value,
-       char                            *out_string)
+void acpi_ex_unsigned_integer_to_string(acpi_integer value, char *out_string)
 {
-       u32                             count;
-       u32                             digits_needed;
-       u32                             remainder;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       u32 count;
+       u32 digits_needed;
+       u32 remainder;
 
+       ACPI_FUNCTION_ENTRY();
 
-       digits_needed = acpi_ex_digits_needed (value, 10);
+       digits_needed = acpi_ex_digits_needed(value, 10);
        out_string[digits_needed] = 0;
 
        for (count = digits_needed; count > 0; count--) {
-               (void) acpi_ut_short_divide (value, 10, &value, &remainder);
-               out_string[count-1] = (char) ('0' + remainder);\
+               (void)acpi_ut_short_divide(value, 10, &value, &remainder);
+               out_string[count - 1] = (char)('0' + remainder);
        }
 }
 
index 14192ee55f8f1d907ad32fba8ef4f70d17a108bf..e8165c4f162a238bb9627539e32de41e767846e0 100644 (file)
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define ACPI_FAN_COMPONENT             0x00200000
 #define ACPI_FAN_CLASS                 "fan"
-#define ACPI_FAN_HID                   "PNP0C0B"
 #define ACPI_FAN_DRIVER_NAME           "ACPI Fan Driver"
-#define ACPI_FAN_DEVICE_NAME           "Fan"
 #define ACPI_FAN_FILE_STATE            "state"
-#define ACPI_FAN_NOTIFY_STATUS         0x80
 
 #define _COMPONENT             ACPI_FAN_COMPONENT
-ACPI_MODULE_NAME               ("acpi_fan")
+ACPI_MODULE_NAME("acpi_fan")
 
-MODULE_AUTHOR("Paul Diefenbaugh");
+    MODULE_AUTHOR("Paul Diefenbaugh");
 MODULE_DESCRIPTION(ACPI_FAN_DRIVER_NAME);
 MODULE_LICENSE("GPL");
 
-static int acpi_fan_add (struct acpi_device *device);
-static int acpi_fan_remove (struct acpi_device *device, int type);
+static int acpi_fan_add(struct acpi_device *device);
+static int acpi_fan_remove(struct acpi_device *device, int type);
 
 static struct acpi_driver acpi_fan_driver = {
-       .name =         ACPI_FAN_DRIVER_NAME,
-       .class =        ACPI_FAN_CLASS,
-       .ids =          ACPI_FAN_HID,
-       .ops =          {
-                               .add =          acpi_fan_add,
-                               .remove =       acpi_fan_remove,
-                       },
+       .name = ACPI_FAN_DRIVER_NAME,
+       .class = ACPI_FAN_CLASS,
+       .ids = "PNP0C0B",
+       .ops = {
+               .add = acpi_fan_add,
+               .remove = acpi_fan_remove,
+               },
 };
 
 struct acpi_fan {
-       acpi_handle             handle;
+       acpi_handle handle;
 };
 
-
 /* --------------------------------------------------------------------------
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-static struct proc_dir_entry   *acpi_fan_dir;
+static struct proc_dir_entry *acpi_fan_dir;
 
-
-static int
-acpi_fan_read_state (struct seq_file *seq, void *offset)
+static int acpi_fan_read_state(struct seq_file *seq, void *offset)
 {
-       struct acpi_fan         *fan = seq->private;
-       int                     state = 0;
+       struct acpi_fan *fan = seq->private;
+       int state = 0;
 
        ACPI_FUNCTION_TRACE("acpi_fan_read_state");
 
@@ -88,7 +81,7 @@ acpi_fan_read_state (struct seq_file *seq, void *offset)
                        seq_printf(seq, "status:                  ERROR\n");
                else
                        seq_printf(seq, "status:                  %s\n",
-                                    !state?"on":"off");
+                                  !state ? "on" : "off");
        }
        return_VALUE(0);
 }
@@ -99,29 +92,26 @@ static int acpi_fan_state_open_fs(struct inode *inode, struct file *file)
 }
 
 static ssize_t
-acpi_fan_write_state (
-       struct file             *file,
-       const char              __user *buffer,
-       size_t                  count,
-       loff_t                  *ppos)
+acpi_fan_write_state(struct file *file, const char __user * buffer,
+                    size_t count, loff_t * ppos)
 {
-       int                     result = 0;
-       struct seq_file         *m = (struct seq_file *)file->private_data;
-       struct acpi_fan         *fan = (struct acpi_fan *) m->private;
-       char                    state_string[12] = {'\0'};
+       int result = 0;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_fan *fan = (struct acpi_fan *)m->private;
+       char state_string[12] = { '\0' };
 
        ACPI_FUNCTION_TRACE("acpi_fan_write_state");
 
        if (!fan || (count > sizeof(state_string) - 1))
                return_VALUE(-EINVAL);
-       
+
        if (copy_from_user(state_string, buffer, count))
                return_VALUE(-EFAULT);
-       
+
        state_string[count] = '\0';
-       
-       result = acpi_bus_set_power(fan->handle, 
-               simple_strtoul(state_string, NULL, 0));
+
+       result = acpi_bus_set_power(fan->handle,
+                                   simple_strtoul(state_string, NULL, 0));
        if (result)
                return_VALUE(result);
 
@@ -129,19 +119,17 @@ acpi_fan_write_state (
 }
 
 static struct file_operations acpi_fan_state_ops = {
-       .open           = acpi_fan_state_open_fs,
-       .read           = seq_read,
-       .write          = acpi_fan_write_state,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_fan_state_open_fs,
+       .read = seq_read,
+       .write = acpi_fan_write_state,
+       .llseek = seq_lseek,
+       .release = single_release,
        .owner = THIS_MODULE,
 };
 
-static int
-acpi_fan_add_fs (
-       struct acpi_device      *device)
+static int acpi_fan_add_fs(struct acpi_device *device)
 {
-       struct proc_dir_entry   *entry = NULL;
+       struct proc_dir_entry *entry = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_fan_add_fs");
 
@@ -150,7 +138,7 @@ acpi_fan_add_fs (
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
-                       acpi_fan_dir);
+                                                    acpi_fan_dir);
                if (!acpi_device_dir(device))
                        return_VALUE(-ENODEV);
                acpi_device_dir(device)->owner = THIS_MODULE;
@@ -158,11 +146,12 @@ acpi_fan_add_fs (
 
        /* 'status' [R/W] */
        entry = create_proc_entry(ACPI_FAN_FILE_STATE,
-               S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+                                 S_IFREG | S_IRUGO | S_IWUSR,
+                                 acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_FAN_FILE_STATE));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_FAN_FILE_STATE));
        else {
                entry->proc_fops = &acpi_fan_state_ops;
                entry->data = acpi_driver_data(device);
@@ -172,16 +161,12 @@ acpi_fan_add_fs (
        return_VALUE(0);
 }
 
-
-static int
-acpi_fan_remove_fs (
-       struct acpi_device      *device)
+static int acpi_fan_remove_fs(struct acpi_device *device)
 {
        ACPI_FUNCTION_TRACE("acpi_fan_remove_fs");
 
        if (acpi_device_dir(device)) {
-               remove_proc_entry(ACPI_FAN_FILE_STATE,
-                                 acpi_device_dir(device));
+               remove_proc_entry(ACPI_FAN_FILE_STATE, acpi_device_dir(device));
                remove_proc_entry(acpi_device_bid(device), acpi_fan_dir);
                acpi_device_dir(device) = NULL;
        }
@@ -189,18 +174,15 @@ acpi_fan_remove_fs (
        return_VALUE(0);
 }
 
-
 /* --------------------------------------------------------------------------
                                  Driver Interface
    -------------------------------------------------------------------------- */
 
-static int
-acpi_fan_add (
-       struct acpi_device      *device)
+static int acpi_fan_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       struct acpi_fan         *fan = NULL;
-       int                     state = 0;
+       int result = 0;
+       struct acpi_fan *fan = NULL;
+       int state = 0;
 
        ACPI_FUNCTION_TRACE("acpi_fan_add");
 
@@ -213,14 +195,14 @@ acpi_fan_add (
        memset(fan, 0, sizeof(struct acpi_fan));
 
        fan->handle = device->handle;
-       strcpy(acpi_device_name(device), ACPI_FAN_DEVICE_NAME);
+       strcpy(acpi_device_name(device), "Fan");
        strcpy(acpi_device_class(device), ACPI_FAN_CLASS);
        acpi_driver_data(device) = fan;
 
        result = acpi_bus_get_power(fan->handle, &state);
        if (result) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error reading power state\n"));
+                                 "Error reading power state\n"));
                goto end;
        }
 
@@ -229,30 +211,26 @@ acpi_fan_add (
                goto end;
 
        printk(KERN_INFO PREFIX "%s [%s] (%s)\n",
-               acpi_device_name(device), acpi_device_bid(device),
-               !device->power.state?"on":"off");
+              acpi_device_name(device), acpi_device_bid(device),
+              !device->power.state ? "on" : "off");
 
-end:
+      end:
        if (result)
                kfree(fan);
 
        return_VALUE(result);
 }
 
-
-static int
-acpi_fan_remove (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_fan_remove(struct acpi_device *device, int type)
 {
-       struct acpi_fan         *fan = NULL;
+       struct acpi_fan *fan = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_fan_remove");
 
        if (!device || !acpi_driver_data(device))
                return_VALUE(-EINVAL);
 
-       fan = (struct acpi_fan *) acpi_driver_data(device);
+       fan = (struct acpi_fan *)acpi_driver_data(device);
 
        acpi_fan_remove_fs(device);
 
@@ -261,11 +239,9 @@ acpi_fan_remove (
        return_VALUE(0);
 }
 
-
-static int __init
-acpi_fan_init (void)
+static int __init acpi_fan_init(void)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_fan_init");
 
@@ -283,9 +259,7 @@ acpi_fan_init (void)
        return_VALUE(0);
 }
 
-
-static void __exit
-acpi_fan_exit (void)
+static void __exit acpi_fan_exit(void)
 {
        ACPI_FUNCTION_TRACE("acpi_fan_exit");
 
@@ -296,7 +270,5 @@ acpi_fan_exit (void)
        return_VOID;
 }
 
-
 module_init(acpi_fan_init);
 module_exit(acpi_fan_exit);
-
index 770cfc8b17e0cdbf00f85639ec508f7a6c12a6e2..e36c5da2b31a78efaa2661c053b2b0f8d9e4cd02 100644 (file)
@@ -29,7 +29,8 @@ int register_acpi_bus_type(struct acpi_bus_type *type)
                down_write(&bus_type_sem);
                list_add_tail(&type->list, &bus_type_list);
                up_write(&bus_type_sem);
-               printk(KERN_INFO PREFIX "bus type %s registered\n", type->bus->name);
+               printk(KERN_INFO PREFIX "bus type %s registered\n",
+                      type->bus->name);
                return 0;
        }
        return -ENODEV;
@@ -45,7 +46,8 @@ int unregister_acpi_bus_type(struct acpi_bus_type *type)
                down_write(&bus_type_sem);
                list_del_init(&type->list);
                up_write(&bus_type_sem);
-               printk(KERN_INFO PREFIX "ACPI bus type %s unregistered\n", type->bus->name);
+               printk(KERN_INFO PREFIX "ACPI bus type %s unregistered\n",
+                      type->bus->name);
                return 0;
        }
        return -ENODEV;
@@ -168,9 +170,6 @@ find_pci_rootbridge(acpi_handle handle, u32 lvl, void *context, void **rv)
        status = acpi_evaluate_integer(handle, METHOD_NAME__SEG, NULL, &seg);
        if (status == AE_NOT_FOUND) {
                /* Assume seg = 0 */
-               printk(KERN_INFO PREFIX
-                      "Assume root bridge [%s] segment is 0\n",
-                      (char *)buffer.pointer);
                status = AE_OK;
                seg = 0;
        }
index b51001e74eea9c8440c2e2db7a2a10243a809f3f..1bb3463d7040ae6b5913a8863999bff17e920543 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 
-
 #define _COMPONENT          ACPI_HARDWARE
-        ACPI_MODULE_NAME    ("hwacpi")
-
+ACPI_MODULE_NAME("hwacpi")
 
 /******************************************************************************
  *
  *              the FADT.
  *
  ******************************************************************************/
-
-acpi_status
-acpi_hw_initialize (
-       void)
+acpi_status acpi_hw_initialize(void)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("hw_initialize");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("hw_initialize");
 
        /* We must have the ACPI tables by the time we get here */
 
        if (!acpi_gbl_FADT) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No FADT is present\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "No FADT is present\n"));
 
-               return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+               return_ACPI_STATUS(AE_NO_ACPI_TABLES);
        }
 
        /* Sanity check the FADT for valid values */
 
-       status = acpi_ut_validate_fadt ();
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_validate_fadt();
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_set_mode
@@ -104,24 +95,21 @@ acpi_hw_initialize (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_hw_set_mode (
-       u32                             mode)
+acpi_status acpi_hw_set_mode(u32 mode)
 {
 
-       acpi_status                     status;
-       u32                             retry;
-
+       acpi_status status;
+       u32 retry;
 
-       ACPI_FUNCTION_TRACE ("hw_set_mode");
+       ACPI_FUNCTION_TRACE("hw_set_mode");
 
        /*
         * ACPI 2.0 clarified that if SMI_CMD in FADT is zero,
         * system does not support mode transition.
         */
        if (!acpi_gbl_FADT->smi_cmd) {
-               ACPI_REPORT_ERROR (("No SMI_CMD in FADT, mode transition failed.\n"));
-               return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE);
+               ACPI_REPORT_ERROR(("No SMI_CMD in FADT, mode transition failed.\n"));
+               return_ACPI_STATUS(AE_NO_HARDWARE_RESPONSE);
        }
 
        /*
@@ -132,9 +120,8 @@ acpi_hw_set_mode (
         * transitions are not supported.
         */
        if (!acpi_gbl_FADT->acpi_enable && !acpi_gbl_FADT->acpi_disable) {
-               ACPI_REPORT_ERROR ((
-                       "No ACPI mode transition supported in this system (enable/disable both zero)\n"));
-               return_ACPI_STATUS (AE_OK);
+               ACPI_REPORT_ERROR(("No ACPI mode transition supported in this system (enable/disable both zero)\n"));
+               return_ACPI_STATUS(AE_OK);
        }
 
        switch (mode) {
@@ -142,9 +129,11 @@ acpi_hw_set_mode (
 
                /* BIOS should have disabled ALL fixed and GP events */
 
-               status = acpi_os_write_port (acpi_gbl_FADT->smi_cmd,
-                                 (u32) acpi_gbl_FADT->acpi_enable, 8);
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Attempting to enable ACPI mode\n"));
+               status = acpi_os_write_port(acpi_gbl_FADT->smi_cmd,
+                                           (u32) acpi_gbl_FADT->acpi_enable,
+                                           8);
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Attempting to enable ACPI mode\n"));
                break;
 
        case ACPI_SYS_MODE_LEGACY:
@@ -153,20 +142,21 @@ acpi_hw_set_mode (
                 * BIOS should clear all fixed status bits and restore fixed event
                 * enable bits to default
                 */
-               status = acpi_os_write_port (acpi_gbl_FADT->smi_cmd,
-                                (u32) acpi_gbl_FADT->acpi_disable, 8);
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                                "Attempting to enable Legacy (non-ACPI) mode\n"));
+               status = acpi_os_write_port(acpi_gbl_FADT->smi_cmd,
+                                           (u32) acpi_gbl_FADT->acpi_disable,
+                                           8);
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Attempting to enable Legacy (non-ACPI) mode\n"));
                break;
 
        default:
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Could not write mode change, %s\n",
-                       acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Could not write mode change, %s\n",
+                                  acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -176,19 +166,19 @@ acpi_hw_set_mode (
        retry = 3000;
        while (retry) {
                if (acpi_hw_get_mode() == mode) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Mode %X successfully enabled\n",
-                               mode));
-                       return_ACPI_STATUS (AE_OK);
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "Mode %X successfully enabled\n",
+                                         mode));
+                       return_ACPI_STATUS(AE_OK);
                }
                acpi_os_stall(1000);
                retry--;
        }
 
-       ACPI_REPORT_ERROR (("Hardware never changed modes\n"));
-       return_ACPI_STATUS (AE_NO_HARDWARE_RESPONSE);
+       ACPI_REPORT_ERROR(("Hardware never changed modes\n"));
+       return_ACPI_STATUS(AE_NO_HARDWARE_RESPONSE);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_hw_get_mode
@@ -202,34 +192,30 @@ acpi_hw_set_mode (
  *
  ******************************************************************************/
 
-u32
-acpi_hw_get_mode (
-       void)
+u32 acpi_hw_get_mode(void)
 {
-       acpi_status                     status;
-       u32                             value;
-
-
-       ACPI_FUNCTION_TRACE ("hw_get_mode");
+       acpi_status status;
+       u32 value;
 
+       ACPI_FUNCTION_TRACE("hw_get_mode");
 
        /*
         * ACPI 2.0 clarified that if SMI_CMD in FADT is zero,
         * system does not support mode transition.
         */
        if (!acpi_gbl_FADT->smi_cmd) {
-               return_VALUE (ACPI_SYS_MODE_ACPI);
+               return_VALUE(ACPI_SYS_MODE_ACPI);
        }
 
-       status = acpi_get_register (ACPI_BITREG_SCI_ENABLE, &value, ACPI_MTX_LOCK);
-       if (ACPI_FAILURE (status)) {
-               return_VALUE (ACPI_SYS_MODE_LEGACY);
+       status =
+           acpi_get_register(ACPI_BITREG_SCI_ENABLE, &value, ACPI_MTX_LOCK);
+       if (ACPI_FAILURE(status)) {
+               return_VALUE(ACPI_SYS_MODE_LEGACY);
        }
 
        if (value) {
-               return_VALUE (ACPI_SYS_MODE_ACPI);
-       }
-       else {
-               return_VALUE (ACPI_SYS_MODE_LEGACY);
+               return_VALUE(ACPI_SYS_MODE_ACPI);
+       } else {
+               return_VALUE(ACPI_SYS_MODE_LEGACY);
        }
 }
index 8daeabb2fc7abdd386d689d2286d676bf3dd0340..5c8e5dfd024e5fea65c093a2afe7ca9912265799 100644 (file)
 #include <acpi/acevents.h>
 
 #define _COMPONENT          ACPI_HARDWARE
-        ACPI_MODULE_NAME    ("hwgpe")
+ACPI_MODULE_NAME("hwgpe")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_hw_enable_wakeup_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
-
+acpi_hw_enable_wakeup_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
+                               struct acpi_gpe_block_info *gpe_block);
 
 /******************************************************************************
  *
@@ -71,15 +68,12 @@ acpi_hw_enable_wakeup_gpe_block (
  ******************************************************************************/
 
 acpi_status
-acpi_hw_write_gpe_enable_reg (
-       struct acpi_gpe_event_info      *gpe_event_info)
+acpi_hw_write_gpe_enable_reg(struct acpi_gpe_event_info *gpe_event_info)
 {
-       struct acpi_gpe_register_info   *gpe_register_info;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_gpe_register_info *gpe_register_info;
+       acpi_status status;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* Get the info block for the entire GPE register */
 
@@ -90,13 +84,12 @@ acpi_hw_write_gpe_enable_reg (
 
        /* Write the entire GPE (runtime) enable register */
 
-       status = acpi_hw_low_level_write (8, gpe_register_info->enable_for_run,
-                         &gpe_register_info->enable_address);
+       status = acpi_hw_low_level_write(8, gpe_register_info->enable_for_run,
+                                        &gpe_register_info->enable_address);
 
        return (status);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_clear_gpe
@@ -109,27 +102,23 @@ acpi_hw_write_gpe_enable_reg (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_hw_clear_gpe (
-       struct acpi_gpe_event_info      *gpe_event_info)
+acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info * gpe_event_info)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       acpi_status status;
 
+       ACPI_FUNCTION_ENTRY();
 
        /*
         * Write a one to the appropriate bit in the status register to
         * clear this GPE.
         */
-       status = acpi_hw_low_level_write (8, gpe_event_info->register_bit,
-                         &gpe_event_info->register_info->status_address);
+       status = acpi_hw_low_level_write(8, gpe_event_info->register_bit,
+                                        &gpe_event_info->register_info->
+                                        status_address);
 
        return (status);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_get_gpe_status
@@ -145,19 +134,16 @@ acpi_hw_clear_gpe (
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_hw_get_gpe_status (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       acpi_event_status               *event_status)
+acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info,
+                      acpi_event_status * event_status)
 {
-       u32                             in_byte;
-       u8                              register_bit;
-       struct acpi_gpe_register_info   *gpe_register_info;
-       acpi_status                     status;
-       acpi_event_status               local_event_status = 0;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       u32 in_byte;
+       u8 register_bit;
+       struct acpi_gpe_register_info *gpe_register_info;
+       acpi_status status;
+       acpi_event_status local_event_status = 0;
 
+       ACPI_FUNCTION_ENTRY();
 
        if (!event_status) {
                return (AE_BAD_PARAMETER);
@@ -185,8 +171,10 @@ acpi_hw_get_gpe_status (
 
        /* GPE currently active (status bit == 1)? */
 
-       status = acpi_hw_low_level_read (8, &in_byte, &gpe_register_info->status_address);
-       if (ACPI_FAILURE (status)) {
+       status =
+           acpi_hw_low_level_read(8, &in_byte,
+                                  &gpe_register_info->status_address);
+       if (ACPI_FAILURE(status)) {
                goto unlock_and_exit;
        }
 
@@ -198,12 +186,10 @@ acpi_hw_get_gpe_status (
 
        (*event_status) = local_event_status;
 
-
-unlock_and_exit:
+      unlock_and_exit:
        return (status);
 }
-#endif  /*  ACPI_FUTURE_USAGE  */
-
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /******************************************************************************
  *
@@ -219,22 +205,21 @@ unlock_and_exit:
  ******************************************************************************/
 
 acpi_status
-acpi_hw_disable_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block)
+acpi_hw_disable_gpe_block(struct acpi_gpe_xrupt_info * gpe_xrupt_info,
+                         struct acpi_gpe_block_info * gpe_block)
 {
-       u32                             i;
-       acpi_status                     status;
-
+       u32 i;
+       acpi_status status;
 
        /* Examine each GPE Register within the block */
 
        for (i = 0; i < gpe_block->register_count; i++) {
                /* Disable all GPEs in this register */
 
-               status = acpi_hw_low_level_write (8, 0x00,
-                                &gpe_block->register_info[i].enable_address);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_hw_low_level_write(8, 0x00,
+                                                &gpe_block->register_info[i].
+                                                enable_address);
+               if (ACPI_FAILURE(status)) {
                        return (status);
                }
        }
@@ -242,7 +227,6 @@ acpi_hw_disable_gpe_block (
        return (AE_OK);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_clear_gpe_block
@@ -257,22 +241,21 @@ acpi_hw_disable_gpe_block (
  ******************************************************************************/
 
 acpi_status
-acpi_hw_clear_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block)
+acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info * gpe_xrupt_info,
+                       struct acpi_gpe_block_info * gpe_block)
 {
-       u32                             i;
-       acpi_status                     status;
-
+       u32 i;
+       acpi_status status;
 
        /* Examine each GPE Register within the block */
 
        for (i = 0; i < gpe_block->register_count; i++) {
                /* Clear status on all GPEs in this register */
 
-               status = acpi_hw_low_level_write (8, 0xFF,
-                                &gpe_block->register_info[i].status_address);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_hw_low_level_write(8, 0xFF,
+                                                &gpe_block->register_info[i].
+                                                status_address);
+               if (ACPI_FAILURE(status)) {
                        return (status);
                }
        }
@@ -280,7 +263,6 @@ acpi_hw_clear_gpe_block (
        return (AE_OK);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_enable_runtime_gpe_block
@@ -296,13 +278,11 @@ acpi_hw_clear_gpe_block (
  ******************************************************************************/
 
 acpi_status
-acpi_hw_enable_runtime_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block)
+acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info * gpe_xrupt_info,
+                                struct acpi_gpe_block_info * gpe_block)
 {
-       u32                             i;
-       acpi_status                     status;
-
+       u32 i;
+       acpi_status status;
 
        /* NOTE: assumes that all GPEs are currently disabled */
 
@@ -315,9 +295,13 @@ acpi_hw_enable_runtime_gpe_block (
 
                /* Enable all "runtime" GPEs in this register */
 
-               status = acpi_hw_low_level_write (8, gpe_block->register_info[i].enable_for_run,
-                                &gpe_block->register_info[i].enable_address);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_hw_low_level_write(8,
+                                           gpe_block->register_info[i].
+                                           enable_for_run,
+                                           &gpe_block->register_info[i].
+                                           enable_address);
+               if (ACPI_FAILURE(status)) {
                        return (status);
                }
        }
@@ -325,7 +309,6 @@ acpi_hw_enable_runtime_gpe_block (
        return (AE_OK);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_enable_wakeup_gpe_block
@@ -341,13 +324,11 @@ acpi_hw_enable_runtime_gpe_block (
  ******************************************************************************/
 
 static acpi_status
-acpi_hw_enable_wakeup_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block)
+acpi_hw_enable_wakeup_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
+                               struct acpi_gpe_block_info *gpe_block)
 {
-       u32                             i;
-       acpi_status                     status;
-
+       u32 i;
+       acpi_status status;
 
        /* Examine each GPE Register within the block */
 
@@ -358,10 +339,12 @@ acpi_hw_enable_wakeup_gpe_block (
 
                /* Enable all "wake" GPEs in this register */
 
-               status = acpi_hw_low_level_write (8,
-                                gpe_block->register_info[i].enable_for_wake,
-                                &gpe_block->register_info[i].enable_address);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_hw_low_level_write(8,
+                                                gpe_block->register_info[i].
+                                                enable_for_wake,
+                                                &gpe_block->register_info[i].
+                                                enable_address);
+               if (ACPI_FAILURE(status)) {
                        return (status);
                }
        }
@@ -369,12 +352,11 @@ acpi_hw_enable_wakeup_gpe_block (
        return (AE_OK);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_disable_all_gpes
  *
- * PARAMETERS:  Flags           - ACPI_NOT_ISR or ACPI_ISR
+ * PARAMETERS:  None
  *
  * RETURN:      Status
  *
@@ -382,27 +364,22 @@ acpi_hw_enable_wakeup_gpe_block (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_hw_disable_all_gpes (
-       u32                             flags)
+acpi_status acpi_hw_disable_all_gpes(void)
 {
-       acpi_status                     status;
-
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("hw_disable_all_gpes");
+       ACPI_FUNCTION_TRACE("hw_disable_all_gpes");
 
-
-       status = acpi_ev_walk_gpe_list (acpi_hw_disable_gpe_block, flags);
-       status = acpi_ev_walk_gpe_list (acpi_hw_clear_gpe_block, flags);
-       return_ACPI_STATUS (status);
+       status = acpi_ev_walk_gpe_list(acpi_hw_disable_gpe_block);
+       status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block);
+       return_ACPI_STATUS(status);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_enable_all_runtime_gpes
  *
- * PARAMETERS:  Flags           - ACPI_NOT_ISR or ACPI_ISR
+ * PARAMETERS:  None
  *
  * RETURN:      Status
  *
@@ -410,26 +387,21 @@ acpi_hw_disable_all_gpes (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_hw_enable_all_runtime_gpes (
-       u32                             flags)
+acpi_status acpi_hw_enable_all_runtime_gpes(void)
 {
-       acpi_status                     status;
-
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("hw_enable_all_runtime_gpes");
+       ACPI_FUNCTION_TRACE("hw_enable_all_runtime_gpes");
 
-
-       status = acpi_ev_walk_gpe_list (acpi_hw_enable_runtime_gpe_block, flags);
-       return_ACPI_STATUS (status);
+       status = acpi_ev_walk_gpe_list(acpi_hw_enable_runtime_gpe_block);
+       return_ACPI_STATUS(status);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_enable_all_wakeup_gpes
  *
- * PARAMETERS:  Flags           - ACPI_NOT_ISR or ACPI_ISR
+ * PARAMETERS:  None
  *
  * RETURN:      Status
  *
@@ -437,17 +409,12 @@ acpi_hw_enable_all_runtime_gpes (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_hw_enable_all_wakeup_gpes (
-       u32                             flags)
+acpi_status acpi_hw_enable_all_wakeup_gpes(void)
 {
-       acpi_status                     status;
-
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("hw_enable_all_wakeup_gpes");
+       ACPI_FUNCTION_TRACE("hw_enable_all_wakeup_gpes");
 
-
-       status = acpi_ev_walk_gpe_list (acpi_hw_enable_wakeup_gpe_block, flags);
-       return_ACPI_STATUS (status);
+       status = acpi_ev_walk_gpe_list(acpi_hw_enable_wakeup_gpe_block);
+       return_ACPI_STATUS(status);
 }
-
index 6d9e4eb848361539bce2d394279d37d7ce8389ab..536a7aea80c93a802f206a0268d9c688d48478a3 100644 (file)
@@ -50,8 +50,7 @@
 #include <acpi/acevents.h>
 
 #define _COMPONENT          ACPI_HARDWARE
-        ACPI_MODULE_NAME    ("hwregs")
-
+ACPI_MODULE_NAME("hwregs")
 
 /*******************************************************************************
  *
  *              THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
  *
  ******************************************************************************/
-
-acpi_status
-acpi_hw_clear_acpi_status (
-       u32                             flags)
+acpi_status acpi_hw_clear_acpi_status(u32 flags)
 {
-       acpi_status                     status;
-
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("hw_clear_acpi_status");
+       ACPI_FUNCTION_TRACE("hw_clear_acpi_status");
 
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %04X\n",
-               ACPI_BITMASK_ALL_FIXED_STATUS,
-               (u16) acpi_gbl_FADT->xpm1a_evt_blk.address));
+       ACPI_DEBUG_PRINT((ACPI_DB_IO, "About to write %04X to %04X\n",
+                         ACPI_BITMASK_ALL_FIXED_STATUS,
+                         (u16) acpi_gbl_FADT->xpm1a_evt_blk.address));
 
        if (flags & ACPI_MTX_LOCK) {
-               status = acpi_ut_acquire_mutex (ACPI_MTX_HARDWARE);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_acquire_mutex(ACPI_MTX_HARDWARE);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
-       status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                        ACPI_REGISTER_PM1_STATUS,
-                        ACPI_BITMASK_ALL_FIXED_STATUS);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                       ACPI_REGISTER_PM1_STATUS,
+                                       ACPI_BITMASK_ALL_FIXED_STATUS);
+       if (ACPI_FAILURE(status)) {
                goto unlock_and_exit;
        }
 
        /* Clear the fixed events */
 
        if (acpi_gbl_FADT->xpm1b_evt_blk.address) {
-               status = acpi_hw_low_level_write (16, ACPI_BITMASK_ALL_FIXED_STATUS,
-                                &acpi_gbl_FADT->xpm1b_evt_blk);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_hw_low_level_write(16, ACPI_BITMASK_ALL_FIXED_STATUS,
+                                           &acpi_gbl_FADT->xpm1b_evt_blk);
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
        }
 
        /* Clear the GPE Bits in all GPE registers in all GPE blocks */
 
-       status = acpi_ev_walk_gpe_list (acpi_hw_clear_gpe_block, ACPI_ISR);
+       status = acpi_ev_walk_gpe_list(acpi_hw_clear_gpe_block);
 
-unlock_and_exit:
+      unlock_and_exit:
        if (flags & ACPI_MTX_LOCK) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_HARDWARE);
+               (void)acpi_ut_release_mutex(ACPI_MTX_HARDWARE);
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_sleep_type_data
@@ -132,53 +126,48 @@ unlock_and_exit:
  ******************************************************************************/
 
 acpi_status
-acpi_get_sleep_type_data (
-       u8                              sleep_state,
-       u8                              *sleep_type_a,
-       u8                              *sleep_type_b)
+acpi_get_sleep_type_data(u8 sleep_state, u8 * sleep_type_a, u8 * sleep_type_b)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_parameter_info      info;
-       char                            *sleep_state_name;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_sleep_type_data");
+       acpi_status status = AE_OK;
+       struct acpi_parameter_info info;
+       char *sleep_state_name;
 
+       ACPI_FUNCTION_TRACE("acpi_get_sleep_type_data");
 
        /* Validate parameters */
 
-       if ((sleep_state > ACPI_S_STATES_MAX) ||
-               !sleep_type_a || !sleep_type_b) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((sleep_state > ACPI_S_STATES_MAX) || !sleep_type_a || !sleep_type_b) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Evaluate the namespace object containing the values for this state */
 
        info.parameters = NULL;
        info.return_object = NULL;
-       sleep_state_name = (char *) acpi_gbl_sleep_state_names[sleep_state];
+       sleep_state_name = (char *)acpi_gbl_sleep_state_names[sleep_state];
 
-       status = acpi_ns_evaluate_by_name (sleep_state_name, &info);
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "%s while evaluating sleep_state [%s]\n",
-                       acpi_format_exception (status), sleep_state_name));
+       status = acpi_ns_evaluate_by_name(sleep_state_name, &info);
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "%s while evaluating sleep_state [%s]\n",
+                                 acpi_format_exception(status),
+                                 sleep_state_name));
 
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
        /* Must have a return object */
 
        if (!info.return_object) {
-               ACPI_REPORT_ERROR (("No Sleep State object returned from [%s]\n",
-                       sleep_state_name));
+               ACPI_REPORT_ERROR(("No Sleep State object returned from [%s]\n",
+                                  sleep_state_name));
                status = AE_NOT_EXIST;
        }
 
        /* It must be of type Package */
 
-       else if (ACPI_GET_OBJECT_TYPE (info.return_object) != ACPI_TYPE_PACKAGE) {
-               ACPI_REPORT_ERROR (("Sleep State return object is not a Package\n"));
+       else if (ACPI_GET_OBJECT_TYPE(info.return_object) != ACPI_TYPE_PACKAGE) {
+               ACPI_REPORT_ERROR(("Sleep State return object is not a Package\n"));
                status = AE_AML_OPERAND_TYPE;
        }
 
@@ -190,45 +179,41 @@ acpi_get_sleep_type_data (
         * one per sleep type (A/B).
         */
        else if (info.return_object->package.count < 2) {
-               ACPI_REPORT_ERROR ((
-                       "Sleep State return package does not have at least two elements\n"));
+               ACPI_REPORT_ERROR(("Sleep State return package does not have at least two elements\n"));
                status = AE_AML_NO_OPERAND;
        }
 
        /* The first two elements must both be of type Integer */
 
-       else if ((ACPI_GET_OBJECT_TYPE (info.return_object->package.elements[0])
-                        != ACPI_TYPE_INTEGER) ||
-                        (ACPI_GET_OBJECT_TYPE (info.return_object->package.elements[1])
-                               != ACPI_TYPE_INTEGER)) {
-               ACPI_REPORT_ERROR ((
-                       "Sleep State return package elements are not both Integers (%s, %s)\n",
-                       acpi_ut_get_object_type_name (info.return_object->package.elements[0]),
-                       acpi_ut_get_object_type_name (info.return_object->package.elements[1])));
+       else if ((ACPI_GET_OBJECT_TYPE(info.return_object->package.elements[0])
+                 != ACPI_TYPE_INTEGER) ||
+                (ACPI_GET_OBJECT_TYPE(info.return_object->package.elements[1])
+                 != ACPI_TYPE_INTEGER)) {
+               ACPI_REPORT_ERROR(("Sleep State return package elements are not both Integers (%s, %s)\n", acpi_ut_get_object_type_name(info.return_object->package.elements[0]), acpi_ut_get_object_type_name(info.return_object->package.elements[1])));
                status = AE_AML_OPERAND_TYPE;
-       }
-       else {
+       } else {
                /* Valid _Sx_ package size, type, and value */
 
                *sleep_type_a = (u8)
-                       (info.return_object->package.elements[0])->integer.value;
+                   (info.return_object->package.elements[0])->integer.value;
                *sleep_type_b = (u8)
-                       (info.return_object->package.elements[1])->integer.value;
+                   (info.return_object->package.elements[1])->integer.value;
        }
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "%s While evaluating sleep_state [%s], bad Sleep object %p type %s\n",
-                       acpi_format_exception (status),
-                       sleep_state_name, info.return_object,
-                       acpi_ut_get_object_type_name (info.return_object)));
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "%s While evaluating sleep_state [%s], bad Sleep object %p type %s\n",
+                                 acpi_format_exception(status),
+                                 sleep_state_name, info.return_object,
+                                 acpi_ut_get_object_type_name(info.
+                                                              return_object)));
        }
 
-       acpi_ut_remove_reference (info.return_object);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(info.return_object);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_get_sleep_type_data);
 
+EXPORT_SYMBOL(acpi_get_sleep_type_data);
 
 /*******************************************************************************
  *
@@ -242,22 +227,20 @@ EXPORT_SYMBOL(acpi_get_sleep_type_data);
  *
  ******************************************************************************/
 
-struct acpi_bit_register_info *
-acpi_hw_get_bit_register_info (
-       u32                             register_id)
+struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id)
 {
-       ACPI_FUNCTION_NAME ("hw_get_bit_register_info");
-
+       ACPI_FUNCTION_NAME("hw_get_bit_register_info");
 
        if (register_id > ACPI_BITREG_MAX) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid bit_register ID: %X\n", register_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Invalid bit_register ID: %X\n",
+                                 register_id));
                return (NULL);
        }
 
        return (&acpi_gbl_bit_register_info[register_id]);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_register
@@ -273,59 +256,56 @@ acpi_hw_get_bit_register_info (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_get_register (
-       u32                             register_id,
-       u32                             *return_value,
-       u32                             flags)
+acpi_status acpi_get_register(u32 register_id, u32 * return_value, u32 flags)
 {
-       u32                             register_value = 0;
-       struct acpi_bit_register_info   *bit_reg_info;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_register");
+       u32 register_value = 0;
+       struct acpi_bit_register_info *bit_reg_info;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_get_register");
 
        /* Get the info structure corresponding to the requested ACPI Register */
 
-       bit_reg_info = acpi_hw_get_bit_register_info (register_id);
+       bit_reg_info = acpi_hw_get_bit_register_info(register_id);
        if (!bit_reg_info) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        if (flags & ACPI_MTX_LOCK) {
-               status = acpi_ut_acquire_mutex (ACPI_MTX_HARDWARE);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_acquire_mutex(ACPI_MTX_HARDWARE);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Read from the register */
 
-       status = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK,
-                         bit_reg_info->parent_register, &register_value);
+       status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK,
+                                      bit_reg_info->parent_register,
+                                      &register_value);
 
        if (flags & ACPI_MTX_LOCK) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_HARDWARE);
+               (void)acpi_ut_release_mutex(ACPI_MTX_HARDWARE);
        }
 
-       if (ACPI_SUCCESS (status)) {
+       if (ACPI_SUCCESS(status)) {
                /* Normalize the value that was read */
 
-               register_value = ((register_value & bit_reg_info->access_bit_mask)
-                                  >> bit_reg_info->bit_position);
+               register_value =
+                   ((register_value & bit_reg_info->access_bit_mask)
+                    >> bit_reg_info->bit_position);
 
                *return_value = register_value;
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Read value %8.8X register %X\n",
-                               register_value, bit_reg_info->parent_register));
+               ACPI_DEBUG_PRINT((ACPI_DB_IO, "Read value %8.8X register %X\n",
+                                 register_value,
+                                 bit_reg_info->parent_register));
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_get_register);
 
+EXPORT_SYMBOL(acpi_get_register);
 
 /*******************************************************************************
  *
@@ -342,40 +322,36 @@ EXPORT_SYMBOL(acpi_get_register);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_set_register (
-       u32                             register_id,
-       u32                             value,
-       u32                             flags)
+acpi_status acpi_set_register(u32 register_id, u32 value, u32 flags)
 {
-       u32                             register_value = 0;
-       struct acpi_bit_register_info   *bit_reg_info;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("acpi_set_register", register_id);
+       u32 register_value = 0;
+       struct acpi_bit_register_info *bit_reg_info;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_U32("acpi_set_register", register_id);
 
        /* Get the info structure corresponding to the requested ACPI Register */
 
-       bit_reg_info = acpi_hw_get_bit_register_info (register_id);
+       bit_reg_info = acpi_hw_get_bit_register_info(register_id);
        if (!bit_reg_info) {
-               ACPI_REPORT_ERROR (("Bad ACPI HW register_id: %X\n", register_id));
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               ACPI_REPORT_ERROR(("Bad ACPI HW register_id: %X\n",
+                                  register_id));
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        if (flags & ACPI_MTX_LOCK) {
-               status = acpi_ut_acquire_mutex (ACPI_MTX_HARDWARE);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_acquire_mutex(ACPI_MTX_HARDWARE);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Always do a register read first so we can insert the new bits  */
 
-       status = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK,
-                        bit_reg_info->parent_register, &register_value);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK,
+                                      bit_reg_info->parent_register,
+                                      &register_value);
+       if (ACPI_FAILURE(status)) {
                goto unlock_and_exit;
        }
 
@@ -395,26 +371,30 @@ acpi_set_register (
                 * information is the single bit we're interested in, all others should
                 * be written as 0 so they will be left unchanged.
                 */
-               value = ACPI_REGISTER_PREPARE_BITS (value,
-                                bit_reg_info->bit_position, bit_reg_info->access_bit_mask);
+               value = ACPI_REGISTER_PREPARE_BITS(value,
+                                                  bit_reg_info->bit_position,
+                                                  bit_reg_info->
+                                                  access_bit_mask);
                if (value) {
-                       status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                                        ACPI_REGISTER_PM1_STATUS, (u16) value);
+                       status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                                       ACPI_REGISTER_PM1_STATUS,
+                                                       (u16) value);
                        register_value = 0;
                }
                break;
 
-
        case ACPI_REGISTER_PM1_ENABLE:
 
-               ACPI_REGISTER_INSERT_VALUE (register_value, bit_reg_info->bit_position,
-                               bit_reg_info->access_bit_mask, value);
+               ACPI_REGISTER_INSERT_VALUE(register_value,
+                                          bit_reg_info->bit_position,
+                                          bit_reg_info->access_bit_mask,
+                                          value);
 
-               status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                                ACPI_REGISTER_PM1_ENABLE, (u16) register_value);
+               status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                               ACPI_REGISTER_PM1_ENABLE,
+                                               (u16) register_value);
                break;
 
-
        case ACPI_REGISTER_PM1_CONTROL:
 
                /*
@@ -422,65 +402,73 @@ acpi_set_register (
                 * Note that at this level, the fact that there are actually TWO
                 * registers (A and B - and B may not exist) is abstracted.
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM1 control: Read %X\n", register_value));
+               ACPI_DEBUG_PRINT((ACPI_DB_IO, "PM1 control: Read %X\n",
+                                 register_value));
 
-               ACPI_REGISTER_INSERT_VALUE (register_value, bit_reg_info->bit_position,
-                               bit_reg_info->access_bit_mask, value);
+               ACPI_REGISTER_INSERT_VALUE(register_value,
+                                          bit_reg_info->bit_position,
+                                          bit_reg_info->access_bit_mask,
+                                          value);
 
-               status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                                ACPI_REGISTER_PM1_CONTROL, (u16) register_value);
+               status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                               ACPI_REGISTER_PM1_CONTROL,
+                                               (u16) register_value);
                break;
 
-
        case ACPI_REGISTER_PM2_CONTROL:
 
-               status = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK,
-                                ACPI_REGISTER_PM2_CONTROL, &register_value);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK,
+                                              ACPI_REGISTER_PM2_CONTROL,
+                                              &register_value);
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_IO, "PM2 control: Read %X from %8.8X%8.8X\n",
-                       register_value,
-                       ACPI_FORMAT_UINT64 (
-                               acpi_gbl_FADT->xpm2_cnt_blk.address)));
-
-               ACPI_REGISTER_INSERT_VALUE (register_value, bit_reg_info->bit_position,
-                               bit_reg_info->access_bit_mask, value);
-
-               ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %4.4X to %8.8X%8.8X\n",
-                       register_value,
-                       ACPI_FORMAT_UINT64 (
-                               acpi_gbl_FADT->xpm2_cnt_blk.address)));
-
-               status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                                ACPI_REGISTER_PM2_CONTROL, (u8) (register_value));
+               ACPI_DEBUG_PRINT((ACPI_DB_IO,
+                                 "PM2 control: Read %X from %8.8X%8.8X\n",
+                                 register_value,
+                                 ACPI_FORMAT_UINT64(acpi_gbl_FADT->
+                                                    xpm2_cnt_blk.address)));
+
+               ACPI_REGISTER_INSERT_VALUE(register_value,
+                                          bit_reg_info->bit_position,
+                                          bit_reg_info->access_bit_mask,
+                                          value);
+
+               ACPI_DEBUG_PRINT((ACPI_DB_IO,
+                                 "About to write %4.4X to %8.8X%8.8X\n",
+                                 register_value,
+                                 ACPI_FORMAT_UINT64(acpi_gbl_FADT->
+                                                    xpm2_cnt_blk.address)));
+
+               status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                               ACPI_REGISTER_PM2_CONTROL,
+                                               (u8) (register_value));
                break;
 
-
        default:
                break;
        }
 
-
-unlock_and_exit:
+      unlock_and_exit:
 
        if (flags & ACPI_MTX_LOCK) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_HARDWARE);
+               (void)acpi_ut_release_mutex(ACPI_MTX_HARDWARE);
        }
 
        /* Normalize the value that was read */
 
-       ACPI_DEBUG_EXEC (register_value =
-               ((register_value & bit_reg_info->access_bit_mask) >>
-                       bit_reg_info->bit_position));
+       ACPI_DEBUG_EXEC(register_value =
+                       ((register_value & bit_reg_info->access_bit_mask) >>
+                        bit_reg_info->bit_position));
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_IO, "Set bits: %8.8X actual %8.8X register %X\n",
-                       value, register_value, bit_reg_info->parent_register));
-       return_ACPI_STATUS (status);
+       ACPI_DEBUG_PRINT((ACPI_DB_IO,
+                         "Set bits: %8.8X actual %8.8X register %X\n", value,
+                         register_value, bit_reg_info->parent_register));
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_set_register);
 
+EXPORT_SYMBOL(acpi_set_register);
 
 /******************************************************************************
  *
@@ -498,103 +486,107 @@ EXPORT_SYMBOL(acpi_set_register);
  ******************************************************************************/
 
 acpi_status
-acpi_hw_register_read (
-       u8                              use_lock,
-       u32                             register_id,
-       u32                             *return_value)
+acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value)
 {
-       u32                             value1 = 0;
-       u32                             value2 = 0;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("hw_register_read");
+       u32 value1 = 0;
+       u32 value2 = 0;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("hw_register_read");
 
        if (ACPI_MTX_LOCK == use_lock) {
-               status = acpi_ut_acquire_mutex (ACPI_MTX_HARDWARE);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_acquire_mutex(ACPI_MTX_HARDWARE);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        switch (register_id) {
-       case ACPI_REGISTER_PM1_STATUS:           /* 16-bit access */
+       case ACPI_REGISTER_PM1_STATUS:  /* 16-bit access */
 
-               status = acpi_hw_low_level_read (16, &value1, &acpi_gbl_FADT->xpm1a_evt_blk);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_hw_low_level_read(16, &value1,
+                                          &acpi_gbl_FADT->xpm1a_evt_blk);
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
 
                /* PM1B is optional */
 
-               status = acpi_hw_low_level_read (16, &value2, &acpi_gbl_FADT->xpm1b_evt_blk);
+               status =
+                   acpi_hw_low_level_read(16, &value2,
+                                          &acpi_gbl_FADT->xpm1b_evt_blk);
                value1 |= value2;
                break;
 
+       case ACPI_REGISTER_PM1_ENABLE:  /* 16-bit access */
 
-       case ACPI_REGISTER_PM1_ENABLE:           /* 16-bit access */
-
-               status = acpi_hw_low_level_read (16, &value1, &acpi_gbl_xpm1a_enable);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_hw_low_level_read(16, &value1, &acpi_gbl_xpm1a_enable);
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
 
                /* PM1B is optional */
 
-               status = acpi_hw_low_level_read (16, &value2, &acpi_gbl_xpm1b_enable);
+               status =
+                   acpi_hw_low_level_read(16, &value2, &acpi_gbl_xpm1b_enable);
                value1 |= value2;
                break;
 
+       case ACPI_REGISTER_PM1_CONTROL: /* 16-bit access */
 
-       case ACPI_REGISTER_PM1_CONTROL:          /* 16-bit access */
-
-               status = acpi_hw_low_level_read (16, &value1, &acpi_gbl_FADT->xpm1a_cnt_blk);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_hw_low_level_read(16, &value1,
+                                          &acpi_gbl_FADT->xpm1a_cnt_blk);
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
 
-               status = acpi_hw_low_level_read (16, &value2, &acpi_gbl_FADT->xpm1b_cnt_blk);
+               status =
+                   acpi_hw_low_level_read(16, &value2,
+                                          &acpi_gbl_FADT->xpm1b_cnt_blk);
                value1 |= value2;
                break;
 
+       case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */
 
-       case ACPI_REGISTER_PM2_CONTROL:          /* 8-bit access */
-
-               status = acpi_hw_low_level_read (8, &value1, &acpi_gbl_FADT->xpm2_cnt_blk);
+               status =
+                   acpi_hw_low_level_read(8, &value1,
+                                          &acpi_gbl_FADT->xpm2_cnt_blk);
                break;
 
+       case ACPI_REGISTER_PM_TIMER:    /* 32-bit access */
 
-       case ACPI_REGISTER_PM_TIMER:             /* 32-bit access */
-
-               status = acpi_hw_low_level_read (32, &value1, &acpi_gbl_FADT->xpm_tmr_blk);
+               status =
+                   acpi_hw_low_level_read(32, &value1,
+                                          &acpi_gbl_FADT->xpm_tmr_blk);
                break;
 
-       case ACPI_REGISTER_SMI_COMMAND_BLOCK:    /* 8-bit access */
+       case ACPI_REGISTER_SMI_COMMAND_BLOCK:   /* 8-bit access */
 
-               status = acpi_os_read_port (acpi_gbl_FADT->smi_cmd, &value1, 8);
+               status = acpi_os_read_port(acpi_gbl_FADT->smi_cmd, &value1, 8);
                break;
 
        default:
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown Register ID: %X\n",
-                       register_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unknown Register ID: %X\n",
+                                 register_id));
                status = AE_BAD_PARAMETER;
                break;
        }
 
-unlock_and_exit:
+      unlock_and_exit:
        if (ACPI_MTX_LOCK == use_lock) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_HARDWARE);
+               (void)acpi_ut_release_mutex(ACPI_MTX_HARDWARE);
        }
 
-       if (ACPI_SUCCESS (status)) {
+       if (ACPI_SUCCESS(status)) {
                *return_value = value1;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_register_write
@@ -610,109 +602,112 @@ unlock_and_exit:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_hw_register_write (
-       u8                              use_lock,
-       u32                             register_id,
-       u32                             value)
+acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("hw_register_write");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("hw_register_write");
 
        if (ACPI_MTX_LOCK == use_lock) {
-               status = acpi_ut_acquire_mutex (ACPI_MTX_HARDWARE);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ut_acquire_mutex(ACPI_MTX_HARDWARE);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        switch (register_id) {
-       case ACPI_REGISTER_PM1_STATUS:           /* 16-bit access */
+       case ACPI_REGISTER_PM1_STATUS:  /* 16-bit access */
 
-               status = acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->xpm1a_evt_blk);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_hw_low_level_write(16, value,
+                                           &acpi_gbl_FADT->xpm1a_evt_blk);
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
 
                /* PM1B is optional */
 
-               status = acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->xpm1b_evt_blk);
+               status =
+                   acpi_hw_low_level_write(16, value,
+                                           &acpi_gbl_FADT->xpm1b_evt_blk);
                break;
 
+       case ACPI_REGISTER_PM1_ENABLE:  /* 16-bit access */
 
-       case ACPI_REGISTER_PM1_ENABLE:           /* 16-bit access*/
-
-               status = acpi_hw_low_level_write (16, value, &acpi_gbl_xpm1a_enable);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_hw_low_level_write(16, value, &acpi_gbl_xpm1a_enable);
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
 
                /* PM1B is optional */
 
-               status = acpi_hw_low_level_write (16, value, &acpi_gbl_xpm1b_enable);
+               status =
+                   acpi_hw_low_level_write(16, value, &acpi_gbl_xpm1b_enable);
                break;
 
+       case ACPI_REGISTER_PM1_CONTROL: /* 16-bit access */
 
-       case ACPI_REGISTER_PM1_CONTROL:          /* 16-bit access */
-
-               status = acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->xpm1a_cnt_blk);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_hw_low_level_write(16, value,
+                                           &acpi_gbl_FADT->xpm1a_cnt_blk);
+               if (ACPI_FAILURE(status)) {
                        goto unlock_and_exit;
                }
 
-               status = acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->xpm1b_cnt_blk);
+               status =
+                   acpi_hw_low_level_write(16, value,
+                                           &acpi_gbl_FADT->xpm1b_cnt_blk);
                break;
 
+       case ACPI_REGISTER_PM1A_CONTROL:        /* 16-bit access */
 
-       case ACPI_REGISTER_PM1A_CONTROL:         /* 16-bit access */
-
-               status = acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->xpm1a_cnt_blk);
+               status =
+                   acpi_hw_low_level_write(16, value,
+                                           &acpi_gbl_FADT->xpm1a_cnt_blk);
                break;
 
+       case ACPI_REGISTER_PM1B_CONTROL:        /* 16-bit access */
 
-       case ACPI_REGISTER_PM1B_CONTROL:         /* 16-bit access */
-
-               status = acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->xpm1b_cnt_blk);
+               status =
+                   acpi_hw_low_level_write(16, value,
+                                           &acpi_gbl_FADT->xpm1b_cnt_blk);
                break;
 
+       case ACPI_REGISTER_PM2_CONTROL: /* 8-bit access */
 
-       case ACPI_REGISTER_PM2_CONTROL:          /* 8-bit access */
-
-               status = acpi_hw_low_level_write (8, value, &acpi_gbl_FADT->xpm2_cnt_blk);
+               status =
+                   acpi_hw_low_level_write(8, value,
+                                           &acpi_gbl_FADT->xpm2_cnt_blk);
                break;
 
+       case ACPI_REGISTER_PM_TIMER:    /* 32-bit access */
 
-       case ACPI_REGISTER_PM_TIMER:             /* 32-bit access */
-
-               status = acpi_hw_low_level_write (32, value, &acpi_gbl_FADT->xpm_tmr_blk);
+               status =
+                   acpi_hw_low_level_write(32, value,
+                                           &acpi_gbl_FADT->xpm_tmr_blk);
                break;
 
-
-       case ACPI_REGISTER_SMI_COMMAND_BLOCK:    /* 8-bit access */
+       case ACPI_REGISTER_SMI_COMMAND_BLOCK:   /* 8-bit access */
 
                /* SMI_CMD is currently always in IO space */
 
-               status = acpi_os_write_port (acpi_gbl_FADT->smi_cmd, value, 8);
+               status = acpi_os_write_port(acpi_gbl_FADT->smi_cmd, value, 8);
                break;
 
-
        default:
                status = AE_BAD_PARAMETER;
                break;
        }
 
-unlock_and_exit:
+      unlock_and_exit:
        if (ACPI_MTX_LOCK == use_lock) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_HARDWARE);
+               (void)acpi_ut_release_mutex(ACPI_MTX_HARDWARE);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_low_level_read
@@ -728,17 +723,12 @@ unlock_and_exit:
  ******************************************************************************/
 
 acpi_status
-acpi_hw_low_level_read (
-       u32                             width,
-       u32                             *value,
-       struct acpi_generic_address     *reg)
+acpi_hw_low_level_read(u32 width, u32 * value, struct acpi_generic_address *reg)
 {
-       u64                             address;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_NAME ("hw_low_level_read");
+       u64 address;
+       acpi_status status;
 
+       ACPI_FUNCTION_NAME("hw_low_level_read");
 
        /*
         * Must have a valid pointer to a GAS structure, and
@@ -751,7 +741,7 @@ acpi_hw_low_level_read (
 
        /* Get a local copy of the address.  Handles possible alignment issues */
 
-       ACPI_MOVE_64_TO_64 (&address, &reg->address);
+       ACPI_MOVE_64_TO_64(&address, &reg->address);
        if (!address) {
                return (AE_OK);
        }
@@ -764,35 +754,32 @@ acpi_hw_low_level_read (
        switch (reg->address_space_id) {
        case ACPI_ADR_SPACE_SYSTEM_MEMORY:
 
-               status = acpi_os_read_memory (
-                                (acpi_physical_address) address,
-                                value, width);
+               status = acpi_os_read_memory((acpi_physical_address) address,
+                                            value, width);
                break;
 
-
        case ACPI_ADR_SPACE_SYSTEM_IO:
 
-               status = acpi_os_read_port ((acpi_io_address) address,
-                                value, width);
+               status = acpi_os_read_port((acpi_io_address) address,
+                                          value, width);
                break;
 
-
        default:
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Unsupported address space: %X\n", reg->address_space_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unsupported address space: %X\n",
+                                 reg->address_space_id));
                return (AE_BAD_PARAMETER);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_IO,
-               "Read:  %8.8X width %2d from %8.8X%8.8X (%s)\n",
-               *value, width,
-               ACPI_FORMAT_UINT64 (address),
-               acpi_ut_get_region_name (reg->address_space_id)));
+       ACPI_DEBUG_PRINT((ACPI_DB_IO,
+                         "Read:  %8.8X width %2d from %8.8X%8.8X (%s)\n",
+                         *value, width,
+                         ACPI_FORMAT_UINT64(address),
+                         acpi_ut_get_region_name(reg->address_space_id)));
 
        return (status);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_hw_low_level_write
@@ -808,17 +795,12 @@ acpi_hw_low_level_read (
  ******************************************************************************/
 
 acpi_status
-acpi_hw_low_level_write (
-       u32                             width,
-       u32                             value,
-       struct acpi_generic_address     *reg)
+acpi_hw_low_level_write(u32 width, u32 value, struct acpi_generic_address * reg)
 {
-       u64                             address;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_NAME ("hw_low_level_write");
+       u64 address;
+       acpi_status status;
 
+       ACPI_FUNCTION_NAME("hw_low_level_write");
 
        /*
         * Must have a valid pointer to a GAS structure, and
@@ -831,7 +813,7 @@ acpi_hw_low_level_write (
 
        /* Get a local copy of the address.  Handles possible alignment issues */
 
-       ACPI_MOVE_64_TO_64 (&address, &reg->address);
+       ACPI_MOVE_64_TO_64(&address, &reg->address);
        if (!address) {
                return (AE_OK);
        }
@@ -843,30 +825,28 @@ acpi_hw_low_level_write (
        switch (reg->address_space_id) {
        case ACPI_ADR_SPACE_SYSTEM_MEMORY:
 
-               status = acpi_os_write_memory (
-                                (acpi_physical_address) address,
-                                value, width);
+               status = acpi_os_write_memory((acpi_physical_address) address,
+                                             value, width);
                break;
 
-
        case ACPI_ADR_SPACE_SYSTEM_IO:
 
-               status = acpi_os_write_port ((acpi_io_address) address,
-                                value, width);
+               status = acpi_os_write_port((acpi_io_address) address,
+                                           value, width);
                break;
 
-
        default:
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Unsupported address space: %X\n", reg->address_space_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unsupported address space: %X\n",
+                                 reg->address_space_id));
                return (AE_BAD_PARAMETER);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_IO,
-               "Wrote: %8.8X width %2d   to %8.8X%8.8X (%s)\n",
-               value, width,
-               ACPI_FORMAT_UINT64 (address),
-               acpi_ut_get_region_name (reg->address_space_id)));
+       ACPI_DEBUG_PRINT((ACPI_DB_IO,
+                         "Wrote: %8.8X width %2d   to %8.8X%8.8X (%s)\n",
+                         value, width,
+                         ACPI_FORMAT_UINT64(address),
+                         acpi_ut_get_region_name(reg->address_space_id)));
 
        return (status);
 }
index 415d342aeab5cf41661ac5b38e9513757940ca7d..34519069050c2da488fa445759398220f3ecf897 100644 (file)
@@ -46,8 +46,7 @@
 #include <acpi/acpi.h>
 
 #define _COMPONENT          ACPI_HARDWARE
-        ACPI_MODULE_NAME    ("hwsleep")
-
+ACPI_MODULE_NAME("hwsleep")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Access function for the firmware_waking_vector field in FACS
  *
  ******************************************************************************/
-
 acpi_status
-acpi_set_firmware_waking_vector (
-       acpi_physical_address physical_address)
+acpi_set_firmware_waking_vector(acpi_physical_address physical_address)
 {
 
-       ACPI_FUNCTION_TRACE ("acpi_set_firmware_waking_vector");
-
+       ACPI_FUNCTION_TRACE("acpi_set_firmware_waking_vector");
 
        /* Set the vector */
 
        if (acpi_gbl_common_fACS.vector_width == 32) {
-               *(ACPI_CAST_PTR (u32, acpi_gbl_common_fACS.firmware_waking_vector))
-                               = (u32) physical_address;
-       }
-       else {
-               *acpi_gbl_common_fACS.firmware_waking_vector
-                               = physical_address;
+               *(ACPI_CAST_PTR
+                 (u32, acpi_gbl_common_fACS.firmware_waking_vector))
+                   = (u32) physical_address;
+       } else {
+               *acpi_gbl_common_fACS.firmware_waking_vector = physical_address;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_firmware_waking_vector
@@ -101,33 +95,31 @@ acpi_set_firmware_waking_vector (
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_get_firmware_waking_vector (
-       acpi_physical_address *physical_address)
+acpi_get_firmware_waking_vector(acpi_physical_address * physical_address)
 {
 
-       ACPI_FUNCTION_TRACE ("acpi_get_firmware_waking_vector");
-
+       ACPI_FUNCTION_TRACE("acpi_get_firmware_waking_vector");
 
        if (!physical_address) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Get the vector */
 
        if (acpi_gbl_common_fACS.vector_width == 32) {
                *physical_address = (acpi_physical_address)
-                       *(ACPI_CAST_PTR (u32, acpi_gbl_common_fACS.firmware_waking_vector));
-       }
-       else {
+                   *
+                   (ACPI_CAST_PTR
+                    (u32, acpi_gbl_common_fACS.firmware_waking_vector));
+       } else {
                *physical_address =
-                       *acpi_gbl_common_fACS.firmware_waking_vector;
+                   *acpi_gbl_common_fACS.firmware_waking_vector;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 #endif
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_enter_sleep_state_prep
@@ -143,25 +135,22 @@ acpi_get_firmware_waking_vector (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_enter_sleep_state_prep (
-       u8                          sleep_state)
+acpi_status acpi_enter_sleep_state_prep(u8 sleep_state)
 {
-       acpi_status                 status;
-       struct acpi_object_list     arg_list;
-       union acpi_object           arg;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_enter_sleep_state_prep");
+       acpi_status status;
+       struct acpi_object_list arg_list;
+       union acpi_object arg;
 
+       ACPI_FUNCTION_TRACE("acpi_enter_sleep_state_prep");
 
        /*
         * _PSW methods could be run here to enable wake-on keyboard, LAN, etc.
         */
-       status = acpi_get_sleep_type_data (sleep_state,
-                         &acpi_gbl_sleep_type_a, &acpi_gbl_sleep_type_b);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_get_sleep_type_data(sleep_state,
+                                         &acpi_gbl_sleep_type_a,
+                                         &acpi_gbl_sleep_type_b);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Setup parameter object */
@@ -174,14 +163,14 @@ acpi_enter_sleep_state_prep (
 
        /* Run the _PTS and _GTS methods */
 
-       status = acpi_evaluate_object (NULL, METHOD_NAME__PTS, &arg_list, NULL);
-       if (ACPI_FAILURE (status) && status != AE_NOT_FOUND) {
-               return_ACPI_STATUS (status);
+       status = acpi_evaluate_object(NULL, METHOD_NAME__PTS, &arg_list, NULL);
+       if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_evaluate_object (NULL, METHOD_NAME__GTS, &arg_list, NULL);
-       if (ACPI_FAILURE (status) && status != AE_NOT_FOUND) {
-               return_ACPI_STATUS (status);
+       status = acpi_evaluate_object(NULL, METHOD_NAME__GTS, &arg_list, NULL);
+       if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+               return_ACPI_STATUS(status);
        }
 
        /* Setup the argument to _SST */
@@ -202,22 +191,21 @@ acpi_enter_sleep_state_prep (
                break;
 
        default:
-               arg.integer.value = ACPI_SST_INDICATOR_OFF; /* Default is off */
+               arg.integer.value = ACPI_SST_INDICATOR_OFF;     /* Default is off */
                break;
        }
 
        /* Set the system indicators to show the desired sleep state. */
 
-       status = acpi_evaluate_object (NULL, METHOD_NAME__SST, &arg_list, NULL);
-       if (ACPI_FAILURE (status) && status != AE_NOT_FOUND) {
-                ACPI_REPORT_ERROR (("Method _SST failed, %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_evaluate_object(NULL, METHOD_NAME__SST, &arg_list, NULL);
+       if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+               ACPI_REPORT_ERROR(("Method _SST failed, %s\n",
+                                  acpi_format_exception(status)));
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_enter_sleep_state
@@ -231,80 +219,82 @@ acpi_enter_sleep_state_prep (
  *
  ******************************************************************************/
 
-acpi_status asmlinkage
-acpi_enter_sleep_state (
-       u8                              sleep_state)
+acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state)
 {
-       u32                             PM1Acontrol;
-       u32                             PM1Bcontrol;
-       struct acpi_bit_register_info   *sleep_type_reg_info;
-       struct acpi_bit_register_info   *sleep_enable_reg_info;
-       u32                             in_value;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_enter_sleep_state");
+       u32 PM1Acontrol;
+       u32 PM1Bcontrol;
+       struct acpi_bit_register_info *sleep_type_reg_info;
+       struct acpi_bit_register_info *sleep_enable_reg_info;
+       u32 in_value;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_enter_sleep_state");
 
        if ((acpi_gbl_sleep_type_a > ACPI_SLEEP_TYPE_MAX) ||
-               (acpi_gbl_sleep_type_b > ACPI_SLEEP_TYPE_MAX)) {
-               ACPI_REPORT_ERROR (("Sleep values out of range: A=%X B=%X\n",
-                       acpi_gbl_sleep_type_a, acpi_gbl_sleep_type_b));
-               return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
+           (acpi_gbl_sleep_type_b > ACPI_SLEEP_TYPE_MAX)) {
+               ACPI_REPORT_ERROR(("Sleep values out of range: A=%X B=%X\n",
+                                  acpi_gbl_sleep_type_a,
+                                  acpi_gbl_sleep_type_b));
+               return_ACPI_STATUS(AE_AML_OPERAND_VALUE);
        }
 
-       sleep_type_reg_info = acpi_hw_get_bit_register_info (ACPI_BITREG_SLEEP_TYPE_A);
-       sleep_enable_reg_info = acpi_hw_get_bit_register_info (ACPI_BITREG_SLEEP_ENABLE);
+       sleep_type_reg_info =
+           acpi_hw_get_bit_register_info(ACPI_BITREG_SLEEP_TYPE_A);
+       sleep_enable_reg_info =
+           acpi_hw_get_bit_register_info(ACPI_BITREG_SLEEP_ENABLE);
 
        /* Clear wake status */
 
-       status = acpi_set_register (ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_DO_NOT_LOCK);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_set_register(ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_DO_NOT_LOCK);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Clear all fixed and general purpose status bits */
 
-       status = acpi_hw_clear_acpi_status (ACPI_MTX_DO_NOT_LOCK);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_clear_acpi_status(ACPI_MTX_DO_NOT_LOCK);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
         * 1) Disable/Clear all GPEs
         * 2) Enable all wakeup GPEs
         */
-       status = acpi_hw_disable_all_gpes (ACPI_ISR);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_disable_all_gpes();
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
        acpi_gbl_system_awake_and_running = FALSE;
 
-       status = acpi_hw_enable_all_wakeup_gpes (ACPI_ISR);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_enable_all_wakeup_gpes();
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Get current value of PM1A control */
 
-       status = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK,
-                        ACPI_REGISTER_PM1_CONTROL, &PM1Acontrol);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK,
+                                      ACPI_REGISTER_PM1_CONTROL, &PM1Acontrol);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
-       ACPI_DEBUG_PRINT ((ACPI_DB_INIT,
-               "Entering sleep state [S%d]\n", sleep_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_INIT,
+                         "Entering sleep state [S%d]\n", sleep_state));
 
        /* Clear SLP_EN and SLP_TYP fields */
 
        PM1Acontrol &= ~(sleep_type_reg_info->access_bit_mask |
-                          sleep_enable_reg_info->access_bit_mask);
+                        sleep_enable_reg_info->access_bit_mask);
        PM1Bcontrol = PM1Acontrol;
 
        /* Insert SLP_TYP bits */
 
-       PM1Acontrol |= (acpi_gbl_sleep_type_a << sleep_type_reg_info->bit_position);
-       PM1Bcontrol |= (acpi_gbl_sleep_type_b << sleep_type_reg_info->bit_position);
+       PM1Acontrol |=
+           (acpi_gbl_sleep_type_a << sleep_type_reg_info->bit_position);
+       PM1Bcontrol |=
+           (acpi_gbl_sleep_type_b << sleep_type_reg_info->bit_position);
 
        /*
         * We split the writes of SLP_TYP and SLP_EN to workaround
@@ -313,16 +303,18 @@ acpi_enter_sleep_state (
 
        /* Write #1: fill in SLP_TYP data */
 
-       status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                        ACPI_REGISTER_PM1A_CONTROL, PM1Acontrol);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                       ACPI_REGISTER_PM1A_CONTROL,
+                                       PM1Acontrol);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                        ACPI_REGISTER_PM1B_CONTROL, PM1Bcontrol);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                       ACPI_REGISTER_PM1B_CONTROL,
+                                       PM1Bcontrol);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Insert SLP_ENABLE bit */
@@ -332,18 +324,20 @@ acpi_enter_sleep_state (
 
        /* Write #2: SLP_TYP + SLP_EN */
 
-       ACPI_FLUSH_CPU_CACHE ();
+       ACPI_FLUSH_CPU_CACHE();
 
-       status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                        ACPI_REGISTER_PM1A_CONTROL, PM1Acontrol);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                       ACPI_REGISTER_PM1A_CONTROL,
+                                       PM1Acontrol);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                        ACPI_REGISTER_PM1B_CONTROL, PM1Bcontrol);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                       ACPI_REGISTER_PM1B_CONTROL,
+                                       PM1Bcontrol);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        if (sleep_state > ACPI_STATE_S3) {
@@ -358,33 +352,34 @@ acpi_enter_sleep_state (
                 * still read the right value. Ideally, this block would go
                 * away entirely.
                 */
-               acpi_os_stall (10000000);
-
-               status = acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                                ACPI_REGISTER_PM1_CONTROL,
-                                sleep_enable_reg_info->access_bit_mask);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               acpi_os_stall(10000000);
+
+               status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                               ACPI_REGISTER_PM1_CONTROL,
+                                               sleep_enable_reg_info->
+                                               access_bit_mask);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Wait until we enter sleep state */
 
        do {
-               status = acpi_get_register (ACPI_BITREG_WAKE_STATUS, &in_value,
-                       ACPI_MTX_DO_NOT_LOCK);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_get_register(ACPI_BITREG_WAKE_STATUS, &in_value,
+                                          ACPI_MTX_DO_NOT_LOCK);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /* Spin until we wake */
 
        } while (!in_value);
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-EXPORT_SYMBOL(acpi_enter_sleep_state);
 
+EXPORT_SYMBOL(acpi_enter_sleep_state);
 
 /*******************************************************************************
  *
@@ -399,60 +394,57 @@ EXPORT_SYMBOL(acpi_enter_sleep_state);
  *
  ******************************************************************************/
 
-acpi_status asmlinkage
-acpi_enter_sleep_state_s4bios (
-       void)
+acpi_status asmlinkage acpi_enter_sleep_state_s4bios(void)
 {
-       u32                             in_value;
-       acpi_status                     status;
-
+       u32 in_value;
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("acpi_enter_sleep_state_s4bios");
+       ACPI_FUNCTION_TRACE("acpi_enter_sleep_state_s4bios");
 
-
-       status = acpi_set_register (ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_DO_NOT_LOCK);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_set_register(ACPI_BITREG_WAKE_STATUS, 1, ACPI_MTX_DO_NOT_LOCK);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_hw_clear_acpi_status (ACPI_MTX_DO_NOT_LOCK);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_clear_acpi_status(ACPI_MTX_DO_NOT_LOCK);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
         * 1) Disable/Clear all GPEs
         * 2) Enable all wakeup GPEs
         */
-       status = acpi_hw_disable_all_gpes (ACPI_ISR);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_disable_all_gpes();
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
        acpi_gbl_system_awake_and_running = FALSE;
 
-       status = acpi_hw_enable_all_wakeup_gpes (ACPI_ISR);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_enable_all_wakeup_gpes();
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       ACPI_FLUSH_CPU_CACHE ();
+       ACPI_FLUSH_CPU_CACHE();
 
-       status = acpi_os_write_port (acpi_gbl_FADT->smi_cmd,
-                        (u32) acpi_gbl_FADT->S4bios_req, 8);
+       status = acpi_os_write_port(acpi_gbl_FADT->smi_cmd,
+                                   (u32) acpi_gbl_FADT->S4bios_req, 8);
 
        do {
                acpi_os_stall(1000);
-               status = acpi_get_register (ACPI_BITREG_WAKE_STATUS, &in_value,
-                       ACPI_MTX_DO_NOT_LOCK);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_get_register(ACPI_BITREG_WAKE_STATUS, &in_value,
+                                          ACPI_MTX_DO_NOT_LOCK);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        } while (!in_value);
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-EXPORT_SYMBOL(acpi_enter_sleep_state_s4bios);
 
+EXPORT_SYMBOL(acpi_enter_sleep_state_s4bios);
 
 /*******************************************************************************
  *
@@ -467,55 +459,62 @@ EXPORT_SYMBOL(acpi_enter_sleep_state_s4bios);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_leave_sleep_state (
-       u8                              sleep_state)
+acpi_status acpi_leave_sleep_state(u8 sleep_state)
 {
-       struct acpi_object_list         arg_list;
-       union acpi_object               arg;
-       acpi_status                     status;
-       struct acpi_bit_register_info   *sleep_type_reg_info;
-       struct acpi_bit_register_info   *sleep_enable_reg_info;
-       u32                             PM1Acontrol;
-       u32                             PM1Bcontrol;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_leave_sleep_state");
+       struct acpi_object_list arg_list;
+       union acpi_object arg;
+       acpi_status status;
+       struct acpi_bit_register_info *sleep_type_reg_info;
+       struct acpi_bit_register_info *sleep_enable_reg_info;
+       u32 PM1Acontrol;
+       u32 PM1Bcontrol;
 
+       ACPI_FUNCTION_TRACE("acpi_leave_sleep_state");
 
        /*
         * Set SLP_TYPE and SLP_EN to state S0.
         * This is unclear from the ACPI Spec, but it is required
         * by some machines.
         */
-       status = acpi_get_sleep_type_data (ACPI_STATE_S0,
-                         &acpi_gbl_sleep_type_a, &acpi_gbl_sleep_type_b);
-       if (ACPI_SUCCESS (status)) {
-               sleep_type_reg_info = acpi_hw_get_bit_register_info (ACPI_BITREG_SLEEP_TYPE_A);
-               sleep_enable_reg_info = acpi_hw_get_bit_register_info (ACPI_BITREG_SLEEP_ENABLE);
+       status = acpi_get_sleep_type_data(ACPI_STATE_S0,
+                                         &acpi_gbl_sleep_type_a,
+                                         &acpi_gbl_sleep_type_b);
+       if (ACPI_SUCCESS(status)) {
+               sleep_type_reg_info =
+                   acpi_hw_get_bit_register_info(ACPI_BITREG_SLEEP_TYPE_A);
+               sleep_enable_reg_info =
+                   acpi_hw_get_bit_register_info(ACPI_BITREG_SLEEP_ENABLE);
 
                /* Get current value of PM1A control */
 
-               status = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK,
-                                ACPI_REGISTER_PM1_CONTROL, &PM1Acontrol);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK,
+                                              ACPI_REGISTER_PM1_CONTROL,
+                                              &PM1Acontrol);
+               if (ACPI_SUCCESS(status)) {
                        /* Clear SLP_EN and SLP_TYP fields */
 
                        PM1Acontrol &= ~(sleep_type_reg_info->access_bit_mask |
-                                          sleep_enable_reg_info->access_bit_mask);
+                                        sleep_enable_reg_info->
+                                        access_bit_mask);
                        PM1Bcontrol = PM1Acontrol;
 
                        /* Insert SLP_TYP bits */
 
-                       PM1Acontrol |= (acpi_gbl_sleep_type_a << sleep_type_reg_info->bit_position);
-                       PM1Bcontrol |= (acpi_gbl_sleep_type_b << sleep_type_reg_info->bit_position);
+                       PM1Acontrol |=
+                           (acpi_gbl_sleep_type_a << sleep_type_reg_info->
+                            bit_position);
+                       PM1Bcontrol |=
+                           (acpi_gbl_sleep_type_b << sleep_type_reg_info->
+                            bit_position);
 
                        /* Just ignore any errors */
 
-                       (void) acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                                         ACPI_REGISTER_PM1A_CONTROL, PM1Acontrol);
-                       (void) acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
-                                         ACPI_REGISTER_PM1B_CONTROL, PM1Bcontrol);
+                       (void)acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                                    ACPI_REGISTER_PM1A_CONTROL,
+                                                    PM1Acontrol);
+                       (void)acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
+                                                    ACPI_REGISTER_PM1B_CONTROL,
+                                                    PM1Bcontrol);
                }
        }
 
@@ -532,23 +531,23 @@ acpi_leave_sleep_state (
        /* Ignore any errors from these methods */
 
        arg.integer.value = ACPI_SST_WAKING;
-       status = acpi_evaluate_object (NULL, METHOD_NAME__SST, &arg_list, NULL);
-       if (ACPI_FAILURE (status) && status != AE_NOT_FOUND) {
-               ACPI_REPORT_ERROR (("Method _SST failed, %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_evaluate_object(NULL, METHOD_NAME__SST, &arg_list, NULL);
+       if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+               ACPI_REPORT_ERROR(("Method _SST failed, %s\n",
+                                  acpi_format_exception(status)));
        }
 
        arg.integer.value = sleep_state;
-       status = acpi_evaluate_object (NULL, METHOD_NAME__BFS, &arg_list, NULL);
-       if (ACPI_FAILURE (status) && status != AE_NOT_FOUND) {
-               ACPI_REPORT_ERROR (("Method _BFS failed, %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_evaluate_object(NULL, METHOD_NAME__BFS, &arg_list, NULL);
+       if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+               ACPI_REPORT_ERROR(("Method _BFS failed, %s\n",
+                                  acpi_format_exception(status)));
        }
 
-       status = acpi_evaluate_object (NULL, METHOD_NAME__WAK, &arg_list, NULL);
-       if (ACPI_FAILURE (status) && status != AE_NOT_FOUND) {
-               ACPI_REPORT_ERROR (("Method _WAK failed, %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_evaluate_object(NULL, METHOD_NAME__WAK, &arg_list, NULL);
+       if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+               ACPI_REPORT_ERROR(("Method _WAK failed, %s\n",
+                                  acpi_format_exception(status)));
        }
        /* TBD: _WAK "sometimes" returns stuff - do we want to look at it? */
 
@@ -557,33 +556,35 @@ acpi_leave_sleep_state (
         * 1) Disable/Clear all GPEs
         * 2) Enable all runtime GPEs
         */
-       status = acpi_hw_disable_all_gpes (ACPI_NOT_ISR);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_disable_all_gpes();
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
        acpi_gbl_system_awake_and_running = TRUE;
 
-       status = acpi_hw_enable_all_runtime_gpes (ACPI_NOT_ISR);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_hw_enable_all_runtime_gpes();
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Enable power button */
 
-       (void) acpi_set_register(
-                       acpi_gbl_fixed_event_info[ACPI_EVENT_POWER_BUTTON].enable_register_id,
-                       1, ACPI_MTX_DO_NOT_LOCK);
+       (void)
+           acpi_set_register(acpi_gbl_fixed_event_info
+                             [ACPI_EVENT_POWER_BUTTON].enable_register_id, 1,
+                             ACPI_MTX_DO_NOT_LOCK);
 
-       (void) acpi_set_register(
-                       acpi_gbl_fixed_event_info[ACPI_EVENT_POWER_BUTTON].status_register_id,
-                       1, ACPI_MTX_DO_NOT_LOCK);
+       (void)
+           acpi_set_register(acpi_gbl_fixed_event_info
+                             [ACPI_EVENT_POWER_BUTTON].status_register_id, 1,
+                             ACPI_MTX_DO_NOT_LOCK);
 
        arg.integer.value = ACPI_SST_WORKING;
-       status = acpi_evaluate_object (NULL, METHOD_NAME__SST, &arg_list, NULL);
-       if (ACPI_FAILURE (status) && status != AE_NOT_FOUND) {
-               ACPI_REPORT_ERROR (("Method _SST failed, %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_evaluate_object(NULL, METHOD_NAME__SST, &arg_list, NULL);
+       if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+               ACPI_REPORT_ERROR(("Method _SST failed, %s\n",
+                                  acpi_format_exception(status)));
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
index 49d7b395322e85ffaffbafacd636c90fa4524ebb..aff6dc1417845490516365fc7dff3c968531c7a9 100644 (file)
@@ -46,8 +46,7 @@
 #include <acpi/acpi.h>
 
 #define _COMPONENT          ACPI_HARDWARE
-        ACPI_MODULE_NAME    ("hwtimer")
-
+ACPI_MODULE_NAME("hwtimer")
 
 /******************************************************************************
  *
  * DESCRIPTION: Obtains resolution of the ACPI PM Timer (24 or 32 bits).
  *
  ******************************************************************************/
-
-acpi_status
-acpi_get_timer_resolution (
-       u32                             *resolution)
+acpi_status acpi_get_timer_resolution(u32 * resolution)
 {
-       ACPI_FUNCTION_TRACE ("acpi_get_timer_resolution");
-
+       ACPI_FUNCTION_TRACE("acpi_get_timer_resolution");
 
        if (!resolution) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        if (0 == acpi_gbl_FADT->tmr_val_ext) {
                *resolution = 24;
-       }
-       else {
+       } else {
                *resolution = 32;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_get_timer
@@ -95,26 +88,22 @@ acpi_get_timer_resolution (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_get_timer (
-       u32                             *ticks)
+acpi_status acpi_get_timer(u32 * ticks)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_timer");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_get_timer");
 
        if (!ticks) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_hw_low_level_read (32, ticks, &acpi_gbl_FADT->xpm_tmr_blk);
+       status = acpi_hw_low_level_read(32, ticks, &acpi_gbl_FADT->xpm_tmr_blk);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_get_timer);
 
+EXPORT_SYMBOL(acpi_get_timer);
 
 /******************************************************************************
  *
@@ -146,21 +135,16 @@ EXPORT_SYMBOL(acpi_get_timer);
  ******************************************************************************/
 
 acpi_status
-acpi_get_timer_duration (
-       u32                             start_ticks,
-       u32                             end_ticks,
-       u32                             *time_elapsed)
+acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed)
 {
-       acpi_status                     status;
-       u32                             delta_ticks;
-       acpi_integer                    quotient;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_timer_duration");
+       acpi_status status;
+       u32 delta_ticks;
+       acpi_integer quotient;
 
+       ACPI_FUNCTION_TRACE("acpi_get_timer_duration");
 
        if (!time_elapsed) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
@@ -169,22 +153,22 @@ acpi_get_timer_duration (
         */
        if (start_ticks < end_ticks) {
                delta_ticks = end_ticks - start_ticks;
-       }
-       else if (start_ticks > end_ticks) {
+       } else if (start_ticks > end_ticks) {
                if (0 == acpi_gbl_FADT->tmr_val_ext) {
                        /* 24-bit Timer */
 
-                       delta_ticks = (((0x00FFFFFF - start_ticks) + end_ticks) & 0x00FFFFFF);
-               }
-               else {
+                       delta_ticks =
+                           (((0x00FFFFFF - start_ticks) +
+                             end_ticks) & 0x00FFFFFF);
+               } else {
                        /* 32-bit Timer */
 
                        delta_ticks = (0xFFFFFFFF - start_ticks) + end_ticks;
                }
-       }
-       else /* start_ticks == end_ticks */ {
+       } else {                /* start_ticks == end_ticks */
+
                *time_elapsed = 0;
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /*
@@ -192,12 +176,11 @@ acpi_get_timer_duration (
         *
         * time_elapsed = (delta_ticks * 1000000) / PM_TIMER_FREQUENCY;
         */
-       status = acpi_ut_short_divide (((u64) delta_ticks) * 1000000,
-                        PM_TIMER_FREQUENCY, &quotient, NULL);
+       status = acpi_ut_short_divide(((u64) delta_ticks) * 1000000,
+                                     PM_TIMER_FREQUENCY, &quotient, NULL);
 
        *time_elapsed = (u32) quotient;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
 EXPORT_SYMBOL(acpi_get_timer_duration);
-
index 1f76a40badecea06e7de62811df078fdb1cb23c9..2e2e4051dfa7abb0180023313b21303e248ac67a 100644 (file)
@@ -62,7 +62,7 @@
 #define _COMPONENT              ACPI_HOTKEY_COMPONENT
 ACPI_MODULE_NAME("acpi_hotkey")
 
-MODULE_AUTHOR("luming.yu@intel.com");
+    MODULE_AUTHOR("luming.yu@intel.com");
 MODULE_DESCRIPTION(ACPI_HOTK_NAME);
 MODULE_LICENSE("GPL");
 
@@ -180,8 +180,8 @@ static int hotkey_config_seq_show(struct seq_file *seq, void *offset);
 static int hotkey_poll_config_seq_show(struct seq_file *seq, void *offset);
 static int hotkey_polling_open_fs(struct inode *inode, struct file *file);
 static union acpi_hotkey *get_hotkey_by_event(struct
-                             acpi_hotkey_list
-                             *hotkey_list, int event);
+                                             acpi_hotkey_list
+                                             *hotkey_list, int event);
 
 /* event based config */
 static struct file_operations hotkey_config_fops = {
@@ -246,7 +246,7 @@ static int hotkey_info_open_fs(struct inode *inode, struct file *file)
 static char *format_result(union acpi_object *object)
 {
        char *buf = NULL;
-       
+
        buf = (char *)kmalloc(RESULT_STR_LEN, GFP_KERNEL);
        if (buf)
                memset(buf, 0, RESULT_STR_LEN);
@@ -256,7 +256,7 @@ static char *format_result(union acpi_object *object)
        /* Now, just support integer type */
        if (object->type == ACPI_TYPE_INTEGER)
                sprintf(buf, "%d\n", (u32) object->integer.value);
-do_fail:
+      do_fail:
        return (buf);
 }
 
@@ -268,9 +268,9 @@ static int hotkey_polling_seq_show(struct seq_file *seq, void *offset)
 
        ACPI_FUNCTION_TRACE("hotkey_polling_seq_show");
 
-       if (poll_hotkey->poll_result){
+       if (poll_hotkey->poll_result) {
                buf = format_result(poll_hotkey->poll_result);
-               if(buf)
+               if (buf)
                        seq_printf(seq, "%s", buf);
                kfree(buf);
        }
@@ -299,7 +299,7 @@ static int hotkey_get_internal_event(int event, struct acpi_hotkey_list *list)
                union acpi_hotkey *key =
                    container_of(entries, union acpi_hotkey, entries);
                if (key->link.hotkey_type == ACPI_HOTKEY_EVENT
-                   && key->event_hotkey.external_hotkey_num == event){
+                   && key->event_hotkey.external_hotkey_num == event) {
                        val = key->link.hotkey_standard_num;
                        break;
                }
@@ -343,7 +343,7 @@ static int auto_hotkey_remove(struct acpi_device *device, int type)
 static int create_polling_proc(union acpi_hotkey *device)
 {
        struct proc_dir_entry *proc;
-       char  proc_name[80];
+       char proc_name[80];
        mode_t mode;
 
        ACPI_FUNCTION_TRACE("create_polling_proc");
@@ -351,8 +351,8 @@ static int create_polling_proc(union acpi_hotkey *device)
 
        sprintf(proc_name, "%d", device->link.hotkey_standard_num);
        /*
-       strcat(proc_name, device->poll_hotkey.poll_method);
-       */
+          strcat(proc_name, device->poll_hotkey.poll_method);
+        */
        proc = create_proc_entry(proc_name, mode, hotkey_proc_dir);
 
        if (!proc) {
@@ -415,50 +415,50 @@ static int hotkey_remove(union acpi_hotkey *device)
        return_VALUE(0);
 }
 
-static int  hotkey_update(union acpi_hotkey *key)
+static int hotkey_update(union acpi_hotkey *key)
 {
        struct list_head *entries;
 
        ACPI_FUNCTION_TRACE("hotkey_update");
 
        list_for_each(entries, global_hotkey_list.entries) {
-               union acpi_hotkey *tmp=
+               union acpi_hotkey *tmp =
                    container_of(entries, union acpi_hotkey, entries);
                if (tmp->link.hotkey_standard_num ==
                    key->link.hotkey_standard_num) {
                        if (key->link.hotkey_type == ACPI_HOTKEY_EVENT) {
                                free_hotkey_buffer(tmp);
                                tmp->event_hotkey.bus_handle =
-                                       key->event_hotkey.bus_handle;
+                                   key->event_hotkey.bus_handle;
                                tmp->event_hotkey.external_hotkey_num =
-                                       key->event_hotkey.external_hotkey_num;
+                                   key->event_hotkey.external_hotkey_num;
                                tmp->event_hotkey.action_handle =
-                                       key->event_hotkey.action_handle;
+                                   key->event_hotkey.action_handle;
                                tmp->event_hotkey.action_method =
-                                       key->event_hotkey.action_method;
+                                   key->event_hotkey.action_method;
                                kfree(key);
                        } else {
                                /*
-                               char  proc_name[80];
+                                  char  proc_name[80];
 
-                               sprintf(proc_name, "%d", tmp->link.hotkey_standard_num);
-                               strcat(proc_name, tmp->poll_hotkey.poll_method);
-                               remove_proc_entry(proc_name,hotkey_proc_dir);
-                               */
+                                  sprintf(proc_name, "%d", tmp->link.hotkey_standard_num);
+                                  strcat(proc_name, tmp->poll_hotkey.poll_method);
+                                  remove_proc_entry(proc_name,hotkey_proc_dir);
+                                */
                                free_poll_hotkey_buffer(tmp);
                                tmp->poll_hotkey.poll_handle =
-                                       key->poll_hotkey.poll_handle;
+                                   key->poll_hotkey.poll_handle;
                                tmp->poll_hotkey.poll_method =
-                                       key->poll_hotkey.poll_method;
+                                   key->poll_hotkey.poll_method;
                                tmp->poll_hotkey.action_handle =
-                                       key->poll_hotkey.action_handle;
+                                   key->poll_hotkey.action_handle;
                                tmp->poll_hotkey.action_method =
-                                       key->poll_hotkey.action_method;
+                                   key->poll_hotkey.action_method;
                                tmp->poll_hotkey.poll_result =
-                                       key->poll_hotkey.poll_result;
+                                   key->poll_hotkey.poll_result;
                                /*
-                               create_polling_proc(tmp);
-                               */
+                                  create_polling_proc(tmp);
+                                */
                                kfree(key);
                        }
                        return_VALUE(0);
@@ -483,27 +483,25 @@ static void free_hotkey_device(union acpi_hotkey *key)
                                                   acpi_hotkey_notify_handler);
                free_hotkey_buffer(key);
        } else {
-               char  proc_name[80];
+               char proc_name[80];
 
                sprintf(proc_name, "%d", key->link.hotkey_standard_num);
                /*
-               strcat(proc_name, key->poll_hotkey.poll_method);
-               */
-               remove_proc_entry(proc_name,hotkey_proc_dir);
+                  strcat(proc_name, key->poll_hotkey.poll_method);
+                */
+               remove_proc_entry(proc_name, hotkey_proc_dir);
                free_poll_hotkey_buffer(key);
        }
        kfree(key);
        return_VOID;
 }
 
-static void
-free_hotkey_buffer(union acpi_hotkey *key)
+static void free_hotkey_buffer(union acpi_hotkey *key)
 {
        kfree(key->event_hotkey.action_method);
 }
 
-static void
-free_poll_hotkey_buffer(union acpi_hotkey *key)
+static void free_poll_hotkey_buffer(union acpi_hotkey *key)
 {
        kfree(key->poll_hotkey.action_method);
        kfree(key->poll_hotkey.poll_method);
@@ -513,15 +511,15 @@ static int
 init_hotkey_device(union acpi_hotkey *key, char *bus_str, char *action_str,
                   char *method, int std_num, int external_num)
 {
-       acpi_handle     tmp_handle;
+       acpi_handle tmp_handle;
        acpi_status status = AE_OK;
 
        ACPI_FUNCTION_TRACE("init_hotkey_device");
 
-       if(std_num < 0 || IS_POLL(std_num) || !key )
+       if (std_num < 0 || IS_POLL(std_num) || !key)
                goto do_fail;
 
-       if(!bus_str || !action_str || !method)
+       if (!bus_str || !action_str || !method)
                goto do_fail;
 
        key->link.hotkey_type = ACPI_HOTKEY_EVENT;
@@ -529,19 +527,22 @@ init_hotkey_device(union acpi_hotkey *key, char *bus_str, char *action_str,
        key->event_hotkey.flag = 0;
        key->event_hotkey.action_method = method;
 
-       status = acpi_get_handle(NULL,bus_str, &(key->event_hotkey.bus_handle));
-       if(ACPI_FAILURE(status))
+       status =
+           acpi_get_handle(NULL, bus_str, &(key->event_hotkey.bus_handle));
+       if (ACPI_FAILURE(status))
                goto do_fail;
        key->event_hotkey.external_hotkey_num = external_num;
-       status = acpi_get_handle(NULL,action_str, &(key->event_hotkey.action_handle));
-       if(ACPI_FAILURE(status))
+       status =
+           acpi_get_handle(NULL, action_str,
+                           &(key->event_hotkey.action_handle));
+       if (ACPI_FAILURE(status))
                goto do_fail;
        status = acpi_get_handle(key->event_hotkey.action_handle,
-                               method, &tmp_handle);
+                                method, &tmp_handle);
        if (ACPI_FAILURE(status))
                goto do_fail;
        return_VALUE(AE_OK);
-do_fail:
+      do_fail:
        return_VALUE(-ENODEV);
 }
 
@@ -552,14 +553,14 @@ init_poll_hotkey_device(union acpi_hotkey *key,
                        char *action_str, char *action_method, int std_num)
 {
        acpi_status status = AE_OK;
-       acpi_handle     tmp_handle;
+       acpi_handle tmp_handle;
 
        ACPI_FUNCTION_TRACE("init_poll_hotkey_device");
 
-       if(std_num < 0 || IS_EVENT(std_num) || !key)
+       if (std_num < 0 || IS_EVENT(std_num) || !key)
                goto do_fail;
 
-       if(!poll_str || !poll_method || !action_str || !action_method)
+       if (!poll_str || !poll_method || !action_str || !action_method)
                goto do_fail;
 
        key->link.hotkey_type = ACPI_HOTKEY_POLLING;
@@ -568,30 +569,32 @@ init_poll_hotkey_device(union acpi_hotkey *key,
        key->poll_hotkey.poll_method = poll_method;
        key->poll_hotkey.action_method = action_method;
 
-       status = acpi_get_handle(NULL,poll_str, &(key->poll_hotkey.poll_handle));
-       if(ACPI_FAILURE(status))
+       status =
+           acpi_get_handle(NULL, poll_str, &(key->poll_hotkey.poll_handle));
+       if (ACPI_FAILURE(status))
                goto do_fail;
        status = acpi_get_handle(key->poll_hotkey.poll_handle,
-                               poll_method, &tmp_handle);
-        if (ACPI_FAILURE(status))
-                       goto do_fail;
-       status = acpi_get_handle(NULL,action_str, &(key->poll_hotkey.action_handle));
+                                poll_method, &tmp_handle);
+       if (ACPI_FAILURE(status))
+               goto do_fail;
+       status =
+           acpi_get_handle(NULL, action_str,
+                           &(key->poll_hotkey.action_handle));
        if (ACPI_FAILURE(status))
                goto do_fail;
        status = acpi_get_handle(key->poll_hotkey.action_handle,
-                               action_method, &tmp_handle);
+                                action_method, &tmp_handle);
        if (ACPI_FAILURE(status))
                goto do_fail;
        key->poll_hotkey.poll_result =
            (union acpi_object *)kmalloc(sizeof(union acpi_object), GFP_KERNEL);
-       if(!key->poll_hotkey.poll_result)
+       if (!key->poll_hotkey.poll_result)
                goto do_fail;
        return_VALUE(AE_OK);
-do_fail:
+      do_fail:
        return_VALUE(-ENODEV);
 }
 
-
 static int hotkey_open_config(struct inode *inode, struct file *file)
 {
        ACPI_FUNCTION_TRACE("hotkey_open_config");
@@ -679,8 +682,9 @@ get_parms(char *config_record,
 
        sscanf(config_record, "%d", cmd);
 
-       if(*cmd == 1){
-               if(sscanf(config_record, "%d:%d", cmd, internal_event_num)!=2)
+       if (*cmd == 1) {
+               if (sscanf(config_record, "%d:%d", cmd, internal_event_num) !=
+                   2)
                        goto do_fail;
                else
                        return (6);
@@ -694,8 +698,8 @@ get_parms(char *config_record,
                goto do_fail;
 
        count = tmp1 - tmp;
-       *bus_handle = (char *) kmalloc(count+1, GFP_KERNEL);
-       if(!*bus_handle)
+       *bus_handle = (char *)kmalloc(count + 1, GFP_KERNEL);
+       if (!*bus_handle)
                goto do_fail;
        strncpy(*bus_handle, tmp, count);
        *(*bus_handle + count) = 0;
@@ -706,8 +710,8 @@ get_parms(char *config_record,
        if (!tmp1)
                goto do_fail;
        count = tmp1 - tmp;
-       *bus_method = (char *) kmalloc(count+1, GFP_KERNEL);
-       if(!*bus_method)
+       *bus_method = (char *)kmalloc(count + 1, GFP_KERNEL);
+       if (!*bus_method)
                goto do_fail;
        strncpy(*bus_method, tmp, count);
        *(*bus_method + count) = 0;
@@ -718,7 +722,7 @@ get_parms(char *config_record,
        if (!tmp1)
                goto do_fail;
        count = tmp1 - tmp;
-       *action_handle = (char *) kmalloc(count+1, GFP_KERNEL);
+       *action_handle = (char *)kmalloc(count + 1, GFP_KERNEL);
        strncpy(*action_handle, tmp, count);
        *(*action_handle + count) = 0;
 
@@ -728,17 +732,18 @@ get_parms(char *config_record,
        if (!tmp1)
                goto do_fail;
        count = tmp1 - tmp;
-       *method = (char *) kmalloc(count+1, GFP_KERNEL);
-       if(!*method)
+       *method = (char *)kmalloc(count + 1, GFP_KERNEL);
+       if (!*method)
                goto do_fail;
        strncpy(*method, tmp, count);
        *(*method + count) = 0;
 
-       if(sscanf(tmp1 + 1, "%d:%d", internal_event_num, external_event_num)<=0)
+       if (sscanf(tmp1 + 1, "%d:%d", internal_event_num, external_event_num) <=
+           0)
                goto do_fail;
 
        return_VALUE(6);
-do_fail:
+      do_fail:
        return_VALUE(-1);
 }
 
@@ -758,8 +763,8 @@ static ssize_t hotkey_write_config(struct file *file,
 
        ACPI_FUNCTION_TRACE(("hotkey_write_config"));
 
-       config_record = (char *) kmalloc(count+1, GFP_KERNEL);
-       if(!config_record)
+       config_record = (char *)kmalloc(count + 1, GFP_KERNEL);
+       if (!config_record)
                return_VALUE(-ENOMEM);
 
        if (copy_from_user(config_record, buffer, count)) {
@@ -777,10 +782,10 @@ static ssize_t hotkey_write_config(struct file *file,
                        &method, &internal_event_num, &external_event_num);
 
        kfree(config_record);
-       if(IS_OTHERS(internal_event_num))
+       if (IS_OTHERS(internal_event_num))
                goto do_fail;
        if (ret != 6) {
-do_fail:       
+             do_fail:
                kfree(bus_handle);
                kfree(bus_method);
                kfree(action_handle);
@@ -791,14 +796,14 @@ do_fail:
        }
 
        key = kmalloc(sizeof(union acpi_hotkey), GFP_KERNEL);
-       if(!key)
+       if (!key)
                goto do_fail;
        memset(key, 0, sizeof(union acpi_hotkey));
-       if(cmd == 1) {
+       if (cmd == 1) {
                union acpi_hotkey *tmp = NULL;
                tmp = get_hotkey_by_event(&global_hotkey_list,
-                               internal_event_num);
-               if(!tmp)
+                                         internal_event_num);
+               if (!tmp)
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid key"));
                else
                        memcpy(key, tmp, sizeof(union acpi_hotkey));
@@ -807,15 +812,16 @@ do_fail:
        if (IS_EVENT(internal_event_num)) {
                kfree(bus_method);
                ret = init_hotkey_device(key, bus_handle, action_handle, method,
-                                internal_event_num, external_event_num);
+                                        internal_event_num,
+                                        external_event_num);
        } else
                ret = init_poll_hotkey_device(key, bus_handle, bus_method,
-                                     action_handle, method,
-                                     internal_event_num);
+                                             action_handle, method,
+                                             internal_event_num);
        if (ret) {
                kfree(bus_handle);
                kfree(action_handle);
-               if(IS_EVENT(internal_event_num))
+               if (IS_EVENT(internal_event_num))
                        free_hotkey_buffer(key);
                else
                        free_poll_hotkey_buffer(key);
@@ -824,13 +830,14 @@ do_fail:
                return_VALUE(-EINVAL);
        }
 
-cont_cmd:
+      cont_cmd:
        kfree(bus_handle);
        kfree(action_handle);
 
        switch (cmd) {
        case 0:
-               if(get_hotkey_by_event(&global_hotkey_list,key->link.hotkey_standard_num))
+               if (get_hotkey_by_event
+                   (&global_hotkey_list, key->link.hotkey_standard_num))
                        goto fail_out;
                else
                        hotkey_add(key);
@@ -839,7 +846,7 @@ cont_cmd:
                hotkey_remove(key);
                break;
        case 2:
-               if(hotkey_update(key))
+               if (hotkey_update(key))
                        goto fail_out;
                break;
        default:
@@ -847,8 +854,8 @@ cont_cmd:
                break;
        }
        return_VALUE(count);
-fail_out:
-       if(IS_EVENT(internal_event_num))
+      fail_out:
+       if (IS_EVENT(internal_event_num))
                free_hotkey_buffer(key);
        else
                free_poll_hotkey_buffer(key);
@@ -882,7 +889,8 @@ static int write_acpi_int(acpi_handle handle, const char *method, int val,
        return_VALUE(status == AE_OK);
 }
 
-static int read_acpi_int(acpi_handle handle, const char *method, union acpi_object *val)
+static int read_acpi_int(acpi_handle handle, const char *method,
+                        union acpi_object *val)
 {
        struct acpi_buffer output;
        union acpi_object out_obj;
@@ -893,7 +901,7 @@ static int read_acpi_int(acpi_handle handle, const char *method, union acpi_obje
        output.pointer = &out_obj;
 
        status = acpi_evaluate_object(handle, (char *)method, NULL, &output);
-       if(val){
+       if (val) {
                val->integer.value = out_obj.integer.value;
                val->type = out_obj.type;
        } else
@@ -903,8 +911,8 @@ static int read_acpi_int(acpi_handle handle, const char *method, union acpi_obje
 }
 
 static union acpi_hotkey *get_hotkey_by_event(struct
-                             acpi_hotkey_list
-                             *hotkey_list, int event)
+                                             acpi_hotkey_list
+                                             *hotkey_list, int event)
 {
        struct list_head *entries;
 
@@ -912,10 +920,10 @@ static union acpi_hotkey *get_hotkey_by_event(struct
                union acpi_hotkey *key =
                    container_of(entries, union acpi_hotkey, entries);
                if (key->link.hotkey_standard_num == event) {
-                       return(key);
+                       return (key);
                }
        }
-       return(NULL);
+       return (NULL);
 }
 
 /*
@@ -932,15 +940,15 @@ static ssize_t hotkey_execute_aml_method(struct file *file,
 {
        struct acpi_hotkey_list *hotkey_list = &global_hotkey_list;
        char *arg;
-       int event,method_type,type, value;
+       int event, method_type, type, value;
        union acpi_hotkey *key;
 
        ACPI_FUNCTION_TRACE("hotkey_execte_aml_method");
 
-       arg = (char *) kmalloc(count+1, GFP_KERNEL);
-       if(!arg)
+       arg = (char *)kmalloc(count + 1, GFP_KERNEL);
+       if (!arg)
                return_VALUE(-ENOMEM);
-       arg[count]=0;
+       arg[count] = 0;
 
        if (copy_from_user(arg, buffer, count)) {
                kfree(arg);
@@ -948,7 +956,8 @@ static ssize_t hotkey_execute_aml_method(struct file *file,
                return_VALUE(-EINVAL);
        }
 
-       if (sscanf(arg, "%d:%d:%d:%d", &event, &method_type, &type, &value) != 4) {
+       if (sscanf(arg, "%d:%d:%d:%d", &event, &method_type, &type, &value) !=
+           4) {
                kfree(arg);
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid argument 3"));
                return_VALUE(-EINVAL);
@@ -956,19 +965,21 @@ static ssize_t hotkey_execute_aml_method(struct file *file,
        kfree(arg);
        if (type == ACPI_TYPE_INTEGER) {
                key = get_hotkey_by_event(hotkey_list, event);
-               if(!key)
+               if (!key)
                        goto do_fail;
                if (IS_EVENT(event))
                        write_acpi_int(key->event_hotkey.action_handle,
-                                       key->event_hotkey.action_method, value, NULL);
+                                      key->event_hotkey.action_method, value,
+                                      NULL);
                else if (IS_POLL(event)) {
-                       if ( method_type == POLL_METHOD )
+                       if (method_type == POLL_METHOD)
                                read_acpi_int(key->poll_hotkey.poll_handle,
-                                       key->poll_hotkey.poll_method,
-                                       key->poll_hotkey.poll_result);
-                       else if ( method_type == ACTION_METHOD )
+                                             key->poll_hotkey.poll_method,
+                                             key->poll_hotkey.poll_result);
+                       else if (method_type == ACTION_METHOD)
                                write_acpi_int(key->poll_hotkey.action_handle,
-                                       key->poll_hotkey.action_method, value, NULL);
+                                              key->poll_hotkey.action_method,
+                                              value, NULL);
                        else
                                goto do_fail;
 
@@ -978,7 +989,7 @@ static ssize_t hotkey_execute_aml_method(struct file *file,
                return_VALUE(-EINVAL);
        }
        return_VALUE(count);
-do_fail:
+      do_fail:
        return_VALUE(-EINVAL);
 
 }
@@ -1074,15 +1085,15 @@ static int __init hotkey_init(void)
 
        return (0);
 
-do_fail5:
+      do_fail5:
        remove_proc_entry(HOTKEY_INFO, hotkey_proc_dir);
-do_fail4:
+      do_fail4:
        remove_proc_entry(HOTKEY_ACTION, hotkey_proc_dir);
-do_fail3:
+      do_fail3:
        remove_proc_entry(HOTKEY_PL_CONFIG, hotkey_proc_dir);
-do_fail2:
+      do_fail2:
        remove_proc_entry(HOTKEY_EV_CONFIG, hotkey_proc_dir);
-do_fail1:
+      do_fail1:
        remove_proc_entry(HOTKEY_PROC, acpi_root_dir);
        return (-ENODEV);
 }
index ad85e10001f461f81710bd33656a39ef086e44fd..5cc090326ddc3c134d3550074dbab8e130f077e6 100644 (file)
@@ -2,7 +2,7 @@
  *  ibm_acpi.c - IBM ThinkPad ACPI Extras
  *
  *
- *  Copyright (C) 2004 Borislav Deianov
+ *  Copyright (C) 2004-2005 Borislav Deianov <borislav@users.sf.net>
  *
  *  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
  *  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
- *
+ */
+
+#define IBM_VERSION "0.12a"
+
+/*
  *  Changelog:
- *
- *  2004-08-09 0.1     initial release, support for X series
- *  2004-08-14 0.2     support for T series, X20
- *                     bluetooth enable/disable
- *                     hotkey events disabled by default
- *                     removed fan control, currently useless
- *  2004-08-17 0.3     support for R40
- *                     lcd off, brightness control
- *                     thinklight on/off
- *  2004-09-16 0.4     support for module parameters
- *                     hotkey mask can be prefixed by 0x
- *                     video output switching
- *                     video expansion control
- *                     ultrabay eject support
- *                     removed lcd brightness/on/off control, didn't work
+ *  
+ *  2005-08-17  0.12   fix compilation on 2.6.13-rc kernels
+ *  2005-03-17 0.11    support for 600e, 770x
+ *                         thanks to Jamie Lentin <lentinj@dial.pipex.com>
+ *                     support for 770e, G41
+ *                     G40 and G41 don't have a thinklight
+ *                     temperatures no longer experimental
+ *                     experimental brightness control
+ *                     experimental volume control
+ *                     experimental fan enable/disable
+ *  2005-01-16 0.10    fix module loading on R30, R31 
+ *  2005-01-16 0.9     support for 570, R30, R31
+ *                     ultrabay support on A22p, A3x
+ *                     limit arg for cmos, led, beep, drop experimental status
+ *                     more capable led control on A21e, A22p, T20-22, X20
+ *                     experimental temperatures and fan speed
+ *                     experimental embedded controller register dump
+ *                     mark more functions as __init, drop incorrect __exit
+ *                     use MODULE_VERSION
+ *                         thanks to Henrik Brix Andersen <brix@gentoo.org>
+ *                     fix parameter passing on module loading
+ *                         thanks to Rusty Russell <rusty@rustcorp.com.au>
+ *                         thanks to Jim Radford <radford@blackbean.org>
+ *  2004-11-08 0.8     fix init error case, don't return from a macro
+ *                         thanks to Chris Wright <chrisw@osdl.org>
+ *  2004-10-23 0.7     fix module loading on A21e, A22p, T20, T21, X20
+ *                     fix led control on A21e
+ *  2004-10-19 0.6     use acpi_bus_register_driver() to claim HKEY device
  *  2004-10-18 0.5     thinklight support on A21e, G40, R32, T20, T21, X20
  *                     proc file format changed
  *                     video_switch command
  *                     experimental cmos control
  *                     experimental led control
  *                     experimental acpi sounds
- *  2004-10-19 0.6     use acpi_bus_register_driver() to claim HKEY device
- *  2004-10-23 0.7     fix module loading on A21e, A22p, T20, T21, X20
- *                     fix LED control on A21e
- *  2004-11-08 0.8     fix init error case, don't return from a macro
- *                             thanks to Chris Wright <chrisw@osdl.org>
+ *  2004-09-16 0.4     support for module parameters
+ *                     hotkey mask can be prefixed by 0x
+ *                     video output switching
+ *                     video expansion control
+ *                     ultrabay eject support
+ *                     removed lcd brightness/on/off control, didn't work
+ *  2004-08-17 0.3     support for R40
+ *                     lcd off, brightness control
+ *                     thinklight on/off
+ *  2004-08-14 0.2     support for T series, X20
+ *                     bluetooth enable/disable
+ *                     hotkey events disabled by default
+ *                     removed fan control, currently useless
+ *  2004-08-09 0.1     initial release, support for X series
  */
 
-#define IBM_VERSION "0.8"
-
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #define IBM_FILE "ibm_acpi"
 #define IBM_URL "http://ibm-acpi.sf.net/"
 
+MODULE_AUTHOR("Borislav Deianov");
+MODULE_DESCRIPTION(IBM_DESC);
+MODULE_VERSION(IBM_VERSION);
+MODULE_LICENSE("GPL");
+
 #define IBM_DIR IBM_NAME
 
 #define IBM_LOG IBM_FILE ": "
@@ -84,54 +113,122 @@ static acpi_handle root_handle = NULL;
 #define IBM_HANDLE(object, parent, paths...)                   \
        static acpi_handle  object##_handle;                    \
        static acpi_handle *object##_parent = &parent##_handle; \
+       static char        *object##_path;                      \
        static char        *object##_paths[] = { paths }
 
-IBM_HANDLE(ec, root,
-          "\\_SB.PCI0.ISA.EC",    /* A21e, A22p, T20, T21, X20 */
-          "\\_SB.PCI0.LPC.EC",    /* all others */
-);
-
-IBM_HANDLE(vid, root, 
-          "\\_SB.PCI0.VID",       /* A21e, G40, X30, X40 */
-          "\\_SB.PCI0.AGP.VID",   /* all others */
-);
-
-IBM_HANDLE(cmos, root,
-          "\\UCMS",               /* R50, R50p, R51, T4x, X31, X40 */
-          "\\CMOS",               /* A3x, G40, R32, T23, T30, X22, X24, X30 */
-          "\\CMS",                /* R40, R40e */
-);                                 /* A21e, A22p, T20, T21, X20 */
-
-IBM_HANDLE(dock, root,
-          "\\_SB.GDCK",           /* X30, X31, X40 */
-          "\\_SB.PCI0.DOCK",      /* A22p, T20, T21, X20 */
-          "\\_SB.PCI0.PCI1.DOCK", /* all others */
-);                                 /* A21e, G40, R32, R40, R40e */
-
-IBM_HANDLE(bay, root,
-          "\\_SB.PCI0.IDE0.SCND.MSTR");      /* all except A21e */
-IBM_HANDLE(bayej, root,
-          "\\_SB.PCI0.IDE0.SCND.MSTR._EJ0"); /* all except A2x, A3x */
-
-IBM_HANDLE(lght, root, "\\LGHT");  /* A21e, A22p, T20, T21, X20 */
-IBM_HANDLE(hkey, ec,   "HKEY");    /* all */
-IBM_HANDLE(led,  ec,   "LED");     /* all except A21e, A22p, T20, T21, X20 */
-IBM_HANDLE(sysl, ec,   "SYSL");    /* A21e, A22p, T20, T21, X20 */
-IBM_HANDLE(bled, ec,   "BLED");    /* A22p, T20, T21, X20 */
-IBM_HANDLE(beep, ec,   "BEEP");    /* all models */
+/*
+ * The following models are supported to various degrees:
+ *
+ * 570, 600e, 600x, 770e, 770x
+ * A20m, A21e, A21m, A21p, A22p, A30, A30p, A31, A31p
+ * G40, G41
+ * R30, R31, R32, R40, R40e, R50, R50e, R50p, R51
+ * T20, T21, T22, T23, T30, T40, T40p, T41, T41p, T42, T42p, T43
+ * X20, X21, X22, X23, X24, X30, X31, X40
+ *
+ * The following models have no supported features:
+ *
+ * 240, 240x, i1400
+ *
+ * Still missing DSDTs for the following models:
+ *
+ * A20p, A22e, A22m
+ * R52
+ * S31
+ * T43p
+ */
+
+IBM_HANDLE(ec, root, "\\_SB.PCI0.ISA.EC0",     /* 240, 240x */
+          "\\_SB.PCI.ISA.EC",  /* 570 */
+          "\\_SB.PCI0.ISA0.EC0",       /* 600e/x, 770e, 770x */
+          "\\_SB.PCI0.ISA.EC", /* A21e, A2xm/p, T20-22, X20-21 */
+          "\\_SB.PCI0.AD4S.EC0",       /* i1400, R30 */
+          "\\_SB.PCI0.ICH3.EC0",       /* R31 */
+          "\\_SB.PCI0.LPC.EC", /* all others */
+    );
+
+IBM_HANDLE(vid, root, "\\_SB.PCI.AGP.VGA",     /* 570 */
+          "\\_SB.PCI0.AGP0.VID0",      /* 600e/x, 770x */
+          "\\_SB.PCI0.VID0",   /* 770e */
+          "\\_SB.PCI0.VID",    /* A21e, G4x, R50e, X30, X40 */
+          "\\_SB.PCI0.AGP.VID",        /* all others */
+    );                         /* R30, R31 */
+
+IBM_HANDLE(vid2, root, "\\_SB.PCI0.AGPB.VID"); /* G41 */
+
+IBM_HANDLE(cmos, root, "\\UCMS",       /* R50, R50e, R50p, R51, T4x, X31, X40 */
+          "\\CMOS",            /* A3x, G4x, R32, T23, T30, X22-24, X30 */
+          "\\CMS",             /* R40, R40e */
+    );                         /* all others */
+
+IBM_HANDLE(dock, root, "\\_SB.GDCK",   /* X30, X31, X40 */
+          "\\_SB.PCI0.DOCK",   /* 600e/x,770e,770x,A2xm/p,T20-22,X20-21 */
+          "\\_SB.PCI0.PCI1.DOCK",      /* all others */
+          "\\_SB.PCI.ISA.SLCE",        /* 570 */
+    );                         /* A21e,G4x,R30,R31,R32,R40,R40e,R50e */
+
+IBM_HANDLE(bay, root, "\\_SB.PCI.IDE.SECN.MAST",       /* 570 */
+          "\\_SB.PCI0.IDE0.IDES.IDSM", /* 600e/x, 770e, 770x */
+          "\\_SB.PCI0.IDE0.SCND.MSTR", /* all others */
+    );                         /* A21e, R30, R31 */
+
+IBM_HANDLE(bay_ej, bay, "_EJ3",        /* 600e/x, A2xm/p, A3x */
+          "_EJ0",              /* all others */
+    );                         /* 570,A21e,G4x,R30,R31,R32,R40e,R50e */
+
+IBM_HANDLE(bay2, root, "\\_SB.PCI0.IDE0.PRIM.SLAV",    /* A3x, R32 */
+          "\\_SB.PCI0.IDE0.IDEP.IDPS", /* 600e/x, 770e, 770x */
+    );                         /* all others */
+
+IBM_HANDLE(bay2_ej, bay2, "_EJ3",      /* 600e/x, 770e, A3x */
+          "_EJ0",              /* 770x */
+    );                         /* all others */
+
+/* don't list other alternatives as we install a notify handler on the 570 */
+IBM_HANDLE(pci, root, "\\_SB.PCI");    /* 570 */
+
+IBM_HANDLE(hkey, ec, "\\_SB.HKEY",     /* 600e/x, 770e, 770x */
+          "^HKEY",             /* R30, R31 */
+          "HKEY",              /* all others */
+    );                         /* 570 */
+
+IBM_HANDLE(lght, root, "\\LGHT");      /* A21e, A2xm/p, T20-22, X20-21 */
+IBM_HANDLE(ledb, ec, "LEDB");  /* G4x */
+
+IBM_HANDLE(led, ec, "SLED",    /* 570 */
+          "SYSL",              /* 600e/x, 770e, 770x, A21e, A2xm/p, T20-22, X20-21 */
+          "LED",               /* all others */
+    );                         /* R30, R31 */
+
+IBM_HANDLE(beep, ec, "BEEP");  /* all except R30, R31 */
+IBM_HANDLE(ecrd, ec, "ECRD");  /* 570 */
+IBM_HANDLE(ecwr, ec, "ECWR");  /* 570 */
+IBM_HANDLE(fans, ec, "FANS");  /* X31, X40 */
+
+IBM_HANDLE(gfan, ec, "GFAN",   /* 570 */
+          "\\FSPD",            /* 600e/x, 770e, 770x */
+    );                         /* all others */
+
+IBM_HANDLE(sfan, ec, "SFAN",   /* 570 */
+          "JFNS",              /* 770x-JL */
+    );                         /* all others */
+
+#define IBM_HKEY_HID   "IBM0068"
+#define IBM_PCI_HID    "PNP0A03"
 
 struct ibm_struct {
        char *name;
+       char param[32];
 
        char *hid;
        struct acpi_driver *driver;
-       
-       int  (*init)   (struct ibm_struct *);
-       int  (*read)   (struct ibm_struct *, char *);
-       int  (*write)  (struct ibm_struct *, char *);
-       void (*exit)   (struct ibm_struct *);
 
-       void (*notify) (struct ibm_struct *, u32);      
+       int (*init) (void);
+       int (*read) (char *);
+       int (*write) (char *);
+       void (*exit) (void);
+
+       void (*notify) (struct ibm_struct *, u32);
        acpi_handle *handle;
        int type;
        struct acpi_device *device;
@@ -141,17 +238,6 @@ struct ibm_struct {
        int init_called;
        int notify_installed;
 
-       int supported;
-       union {
-               struct {
-                       int status;
-                       int mask;
-               } hotkey;
-               struct {
-                       int autoswitch;
-               } video;
-       } state;
-
        int experimental;
 };
 
@@ -165,15 +251,15 @@ static int acpi_evalf(acpi_handle handle,
                      void *res, char *method, char *fmt, ...)
 {
        char *fmt0 = fmt;
-        struct acpi_object_list        params;
-        union acpi_object      in_objs[IBM_MAX_ACPI_ARGS];
-        struct acpi_buffer     result;
-        union acpi_object      out_obj;
-        acpi_status            status;
-       va_list                 ap;
-       char                    res_type;
-       int                     success;
-       int                     quiet;
+       struct acpi_object_list params;
+       union acpi_object in_objs[IBM_MAX_ACPI_ARGS];
+       struct acpi_buffer result, *resultp;
+       union acpi_object out_obj;
+       acpi_status status;
+       va_list ap;
+       char res_type;
+       int success;
+       int quiet;
 
        if (!*fmt) {
                printk(IBM_ERR "acpi_evalf() called with empty format\n");
@@ -199,7 +285,7 @@ static int acpi_evalf(acpi_handle handle,
                        in_objs[params.count].integer.value = va_arg(ap, int);
                        in_objs[params.count++].type = ACPI_TYPE_INTEGER;
                        break;
-               /* add more types as needed */
+                       /* add more types as needed */
                default:
                        printk(IBM_ERR "acpi_evalf() called "
                               "with invalid format character '%c'\n", c);
@@ -208,21 +294,25 @@ static int acpi_evalf(acpi_handle handle,
        }
        va_end(ap);
 
-       result.length = sizeof(out_obj);
-       result.pointer = &out_obj;
+       if (res_type != 'v') {
+               result.length = sizeof(out_obj);
+               result.pointer = &out_obj;
+               resultp = &result;
+       } else
+               resultp = NULL;
 
-       status = acpi_evaluate_object(handle, method, &params, &result);
+       status = acpi_evaluate_object(handle, method, &params, resultp);
 
        switch (res_type) {
-       case 'd':       /* int */
+       case 'd':               /* int */
                if (res)
                        *(int *)res = out_obj.integer.value;
                success = status == AE_OK && out_obj.type == ACPI_TYPE_INTEGER;
                break;
-       case 'v':       /* void */
+       case 'v':               /* void */
                success = status == AE_OK;
                break;
-       /* add more types as needed */
+               /* add more types as needed */
        default:
                printk(IBM_ERR "acpi_evalf() called "
                       "with invalid format character '%c'\n", res_type);
@@ -262,7 +352,7 @@ static char *next_cmd(char **cmds)
        return start;
 }
 
-static int driver_init(struct ibm_struct *ibm)
+static int driver_init(void)
 {
        printk(IBM_INFO "%s v%s\n", IBM_DESC, IBM_VERSION);
        printk(IBM_INFO "%s\n", IBM_URL);
@@ -270,7 +360,7 @@ static int driver_init(struct ibm_struct *ibm)
        return 0;
 }
 
-static int driver_read(struct ibm_struct *ibm, char *p)
+static int driver_read(char *p)
 {
        int len = 0;
 
@@ -280,67 +370,74 @@ static int driver_read(struct ibm_struct *ibm, char *p)
        return len;
 }
 
-static int hotkey_get(struct ibm_struct *ibm, int *status, int *mask)
+static int hotkey_supported;
+static int hotkey_mask_supported;
+static int hotkey_orig_status;
+static int hotkey_orig_mask;
+
+static int hotkey_get(int *status, int *mask)
 {
        if (!acpi_evalf(hkey_handle, status, "DHKC", "d"))
-               return -EIO;
-       if (ibm->supported) {
-               if (!acpi_evalf(hkey_handle, mask, "DHKN", "qd"))
-                       return -EIO;
-       } else {
-               *mask = ibm->state.hotkey.mask;
-       }
-       return 0;
+               return 0;
+
+       if (hotkey_mask_supported)
+               if (!acpi_evalf(hkey_handle, mask, "DHKN", "d"))
+                       return 0;
+
+       return 1;
 }
 
-static int hotkey_set(struct ibm_struct *ibm, int status, int mask)
+static int hotkey_set(int status, int mask)
 {
        int i;
 
        if (!acpi_evalf(hkey_handle, NULL, "MHKC", "vd", status))
-               return -EIO;
-
-       if (!ibm->supported)
                return 0;
 
-       for (i=0; i<32; i++) {
-               int bit = ((1 << i) & mask) != 0;
-               if (!acpi_evalf(hkey_handle, NULL, "MHKM", "vdd", i+1, bit))
-                       return -EIO;
-       }
+       if (hotkey_mask_supported)
+               for (i = 0; i < 32; i++) {
+                       int bit = ((1 << i) & mask) != 0;
+                       if (!acpi_evalf(hkey_handle,
+                                       NULL, "MHKM", "vdd", i + 1, bit))
+                               return 0;
+               }
 
-       return 0;
+       return 1;
 }
 
-static int hotkey_init(struct ibm_struct *ibm)
+static int hotkey_init(void)
 {
-       int ret;
+       /* hotkey not supported on 570 */
+       hotkey_supported = hkey_handle != NULL;
 
-       ibm->supported = 1;
-       ret = hotkey_get(ibm,
-                        &ibm->state.hotkey.status,
-                        &ibm->state.hotkey.mask);
-       if (ret < 0) {
-               /* mask not supported on A21e, A22p, T20, T21, X20, X22, X24 */
-               ibm->supported = 0;
-               ret = hotkey_get(ibm,
-                                &ibm->state.hotkey.status,
-                                &ibm->state.hotkey.mask);
+       if (hotkey_supported) {
+               /* mask not supported on 570, 600e/x, 770e, 770x, A21e, A2xm/p,
+                  A30, R30, R31, T20-22, X20-21, X22-24 */
+               hotkey_mask_supported =
+                   acpi_evalf(hkey_handle, NULL, "DHKN", "qv");
+
+               if (!hotkey_get(&hotkey_orig_status, &hotkey_orig_mask))
+                       return -ENODEV;
        }
 
-       return ret;
-}      
+       return 0;
+}
 
-static int hotkey_read(struct ibm_struct *ibm, char *p)
+static int hotkey_read(char *p)
 {
        int status, mask;
        int len = 0;
 
-       if (hotkey_get(ibm, &status, &mask) < 0)
+       if (!hotkey_supported) {
+               len += sprintf(p + len, "status:\t\tnot supported\n");
+               return len;
+       }
+
+       if (!hotkey_get(&status, &mask))
                return -EIO;
 
        len += sprintf(p + len, "status:\t\t%s\n", enabled(status, 0));
-       if (ibm->supported) {
+       if (hotkey_mask_supported) {
                len += sprintf(p + len, "mask:\t\t0x%04x\n", mask);
                len += sprintf(p + len,
                               "commands:\tenable, disable, reset, <mask>\n");
@@ -352,23 +449,26 @@ static int hotkey_read(struct ibm_struct *ibm, char *p)
        return len;
 }
 
-static int hotkey_write(struct ibm_struct *ibm, char *buf)
+static int hotkey_write(char *buf)
 {
        int status, mask;
        char *cmd;
        int do_cmd = 0;
 
-       if (hotkey_get(ibm, &status, &mask) < 0)
+       if (!hotkey_supported)
                return -ENODEV;
 
+       if (!hotkey_get(&status, &mask))
+               return -EIO;
+
        while ((cmd = next_cmd(&buf))) {
                if (strlencmp(cmd, "enable") == 0) {
                        status = 1;
                } else if (strlencmp(cmd, "disable") == 0) {
                        status = 0;
                } else if (strlencmp(cmd, "reset") == 0) {
-                       status = ibm->state.hotkey.status;
-                       mask   = ibm->state.hotkey.mask;
+                       status = hotkey_orig_status;
+                       mask = hotkey_orig_mask;
                } else if (sscanf(cmd, "0x%x", &mask) == 1) {
                        /* mask set */
                } else if (sscanf(cmd, "%x", &mask) == 1) {
@@ -378,15 +478,16 @@ static int hotkey_write(struct ibm_struct *ibm, char *buf)
                do_cmd = 1;
        }
 
-       if (do_cmd && hotkey_set(ibm, status, mask) < 0)
+       if (do_cmd && !hotkey_set(status, mask))
                return -EIO;
 
        return 0;
-}      
+}
 
-static void hotkey_exit(struct ibm_struct *ibm)
+static void hotkey_exit(void)
 {
-       hotkey_set(ibm, ibm->state.hotkey.status, ibm->state.hotkey.mask);
+       if (hotkey_supported)
+               hotkey_set(hotkey_orig_status, hotkey_orig_mask);
 }
 
 static void hotkey_notify(struct ibm_struct *ibm, u32 event)
@@ -398,33 +499,38 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
        else {
                printk(IBM_ERR "unknown hotkey event %d\n", event);
                acpi_bus_generate_event(ibm->device, event, 0);
-       }       
+       }
 }
 
-static int bluetooth_init(struct ibm_struct *ibm)
+static int bluetooth_supported;
+
+static int bluetooth_init(void)
 {
-       /* bluetooth not supported on A21e, G40, T20, T21, X20 */
-       ibm->supported = acpi_evalf(hkey_handle, NULL, "GBDC", "qv");
+       /* bluetooth not supported on 570, 600e/x, 770e, 770x, A21e, A2xm/p,
+          G4x, R30, R31, R40e, R50e, T20-22, X20-21 */
+       bluetooth_supported = hkey_handle &&
+           acpi_evalf(hkey_handle, NULL, "GBDC", "qv");
 
        return 0;
 }
 
-static int bluetooth_status(struct ibm_struct *ibm)
+static int bluetooth_status(void)
 {
        int status;
 
-       if (!ibm->supported || !acpi_evalf(hkey_handle, &status, "GBDC", "d"))
+       if (!bluetooth_supported ||
+           !acpi_evalf(hkey_handle, &status, "GBDC", "d"))
                status = 0;
 
        return status;
 }
 
-static int bluetooth_read(struct ibm_struct *ibm, char *p)
+static int bluetooth_read(char *p)
 {
        int len = 0;
-       int status = bluetooth_status(ibm);
+       int status = bluetooth_status();
 
-       if (!ibm->supported)
+       if (!bluetooth_supported)
                len += sprintf(p + len, "status:\t\tnot supported\n");
        else if (!(status & 1))
                len += sprintf(p + len, "status:\t\tnot installed\n");
@@ -436,14 +542,14 @@ static int bluetooth_read(struct ibm_struct *ibm, char *p)
        return len;
 }
 
-static int bluetooth_write(struct ibm_struct *ibm, char *buf)
+static int bluetooth_write(char *buf)
 {
-       int status = bluetooth_status(ibm);
+       int status = bluetooth_status();
        char *cmd;
        int do_cmd = 0;
 
-       if (!ibm->supported)
-               return -EINVAL;
+       if (!bluetooth_supported)
+               return -ENODEV;
 
        while ((cmd = next_cmd(&buf))) {
                if (strlencmp(cmd, "enable") == 0) {
@@ -456,64 +562,166 @@ static int bluetooth_write(struct ibm_struct *ibm, char *buf)
        }
 
        if (do_cmd && !acpi_evalf(hkey_handle, NULL, "SBDC", "vd", status))
-           return -EIO;
+               return -EIO;
 
        return 0;
 }
 
-static int video_init(struct ibm_struct *ibm)
+static int video_supported;
+static int video_orig_autosw;
+
+#define VIDEO_570 1
+#define VIDEO_770 2
+#define VIDEO_NEW 3
+
+static int video_init(void)
 {
-       if (!acpi_evalf(vid_handle,
-                       &ibm->state.video.autoswitch, "^VDEE", "d"))
-               return -ENODEV;
+       int ivga;
+
+       if (vid2_handle && acpi_evalf(NULL, &ivga, "\\IVGA", "d") && ivga)
+               /* G41, assume IVGA doesn't change */
+               vid_handle = vid2_handle;
+
+       if (!vid_handle)
+               /* video switching not supported on R30, R31 */
+               video_supported = 0;
+       else if (acpi_evalf(vid_handle, &video_orig_autosw, "SWIT", "qd"))
+               /* 570 */
+               video_supported = VIDEO_570;
+       else if (acpi_evalf(vid_handle, &video_orig_autosw, "^VADL", "qd"))
+               /* 600e/x, 770e, 770x */
+               video_supported = VIDEO_770;
+       else
+               /* all others */
+               video_supported = VIDEO_NEW;
 
        return 0;
 }
 
-static int video_status(struct ibm_struct *ibm)
+static int video_status(void)
 {
        int status = 0;
        int i;
 
-       acpi_evalf(NULL, NULL, "\\VUPS", "vd", 1);
-       if (acpi_evalf(NULL, &i, "\\VCDC", "d"))
-               status |= 0x02 * i;
+       if (video_supported == VIDEO_570) {
+               if (acpi_evalf(NULL, &i, "\\_SB.PHS", "dd", 0x87))
+                       status = i & 3;
+       } else if (video_supported == VIDEO_770) {
+               if (acpi_evalf(NULL, &i, "\\VCDL", "d"))
+                       status |= 0x01 * i;
+               if (acpi_evalf(NULL, &i, "\\VCDC", "d"))
+                       status |= 0x02 * i;
+       } else if (video_supported == VIDEO_NEW) {
+               acpi_evalf(NULL, NULL, "\\VUPS", "vd", 1);
+               if (acpi_evalf(NULL, &i, "\\VCDC", "d"))
+                       status |= 0x02 * i;
+
+               acpi_evalf(NULL, NULL, "\\VUPS", "vd", 0);
+               if (acpi_evalf(NULL, &i, "\\VCDL", "d"))
+                       status |= 0x01 * i;
+               if (acpi_evalf(NULL, &i, "\\VCDD", "d"))
+                       status |= 0x08 * i;
+       }
+
+       return status;
+}
 
-       acpi_evalf(NULL, NULL, "\\VUPS", "vd", 0);
-       if (acpi_evalf(NULL, &i, "\\VCDL", "d"))
-               status |= 0x01 * i;
-       if (acpi_evalf(NULL, &i, "\\VCDD", "d"))
-               status |= 0x08 * i;
+static int video_autosw(void)
+{
+       int autosw = 0;
 
-       if (acpi_evalf(vid_handle, &i, "^VDEE", "d"))
-               status |= 0x10 * (i & 1);
+       if (video_supported == VIDEO_570)
+               acpi_evalf(vid_handle, &autosw, "SWIT", "d");
+       else if (video_supported == VIDEO_770 || video_supported == VIDEO_NEW)
+               acpi_evalf(vid_handle, &autosw, "^VDEE", "d");
 
-       return status;
+       return autosw & 1;
 }
 
-static int video_read(struct ibm_struct *ibm, char *p)
+static int video_read(char *p)
 {
-       int status = video_status(ibm);
+       int status = video_status();
+       int autosw = video_autosw();
        int len = 0;
 
+       if (!video_supported) {
+               len += sprintf(p + len, "status:\t\tnot supported\n");
+               return len;
+       }
+
+       len += sprintf(p + len, "status:\t\tsupported\n");
        len += sprintf(p + len, "lcd:\t\t%s\n", enabled(status, 0));
        len += sprintf(p + len, "crt:\t\t%s\n", enabled(status, 1));
-       len += sprintf(p + len, "dvi:\t\t%s\n", enabled(status, 3));
-       len += sprintf(p + len, "auto:\t\t%s\n", enabled(status, 4));
-       len += sprintf(p + len, "commands:\tlcd_enable, lcd_disable, "
-                      "crt_enable, crt_disable\n");
-       len += sprintf(p + len, "commands:\tdvi_enable, dvi_disable, "
-                      "auto_enable, auto_disable\n");
+       if (video_supported == VIDEO_NEW)
+               len += sprintf(p + len, "dvi:\t\t%s\n", enabled(status, 3));
+       len += sprintf(p + len, "auto:\t\t%s\n", enabled(autosw, 0));
+       len += sprintf(p + len, "commands:\tlcd_enable, lcd_disable\n");
+       len += sprintf(p + len, "commands:\tcrt_enable, crt_disable\n");
+       if (video_supported == VIDEO_NEW)
+               len += sprintf(p + len, "commands:\tdvi_enable, dvi_disable\n");
+       len += sprintf(p + len, "commands:\tauto_enable, auto_disable\n");
        len += sprintf(p + len, "commands:\tvideo_switch, expand_toggle\n");
 
        return len;
 }
 
-static int video_write(struct ibm_struct *ibm, char *buf)
+static int video_switch(void)
+{
+       int autosw = video_autosw();
+       int ret;
+
+       if (!acpi_evalf(vid_handle, NULL, "_DOS", "vd", 1))
+               return -EIO;
+       ret = video_supported == VIDEO_570 ?
+           acpi_evalf(ec_handle, NULL, "_Q16", "v") :
+           acpi_evalf(vid_handle, NULL, "VSWT", "v");
+       acpi_evalf(vid_handle, NULL, "_DOS", "vd", autosw);
+
+       return ret;
+}
+
+static int video_expand(void)
+{
+       if (video_supported == VIDEO_570)
+               return acpi_evalf(ec_handle, NULL, "_Q17", "v");
+       else if (video_supported == VIDEO_770)
+               return acpi_evalf(vid_handle, NULL, "VEXP", "v");
+       else
+               return acpi_evalf(NULL, NULL, "\\VEXP", "v");
+}
+
+static int video_switch2(int status)
+{
+       int ret;
+
+       if (video_supported == VIDEO_570) {
+               ret = acpi_evalf(NULL, NULL,
+                                "\\_SB.PHS2", "vdd", 0x8b, status | 0x80);
+       } else if (video_supported == VIDEO_770) {
+               int autosw = video_autosw();
+               if (!acpi_evalf(vid_handle, NULL, "_DOS", "vd", 1))
+                       return -EIO;
+
+               ret = acpi_evalf(vid_handle, NULL,
+                                "ASWT", "vdd", status * 0x100, 0);
+
+               acpi_evalf(vid_handle, NULL, "_DOS", "vd", autosw);
+       } else {
+               ret = acpi_evalf(NULL, NULL, "\\VUPS", "vd", 0x80) &&
+                   acpi_evalf(NULL, NULL, "\\VSDS", "vdd", status, 1);
+       }
+
+       return ret;
+}
+
+static int video_write(char *buf)
 {
        char *cmd;
        int enable, disable, status;
 
+       if (!video_supported)
+               return -ENODEV;
+
        enable = disable = 0;
 
        while ((cmd = next_cmd(&buf))) {
@@ -525,9 +733,11 @@ static int video_write(struct ibm_struct *ibm, char *buf)
                        enable |= 0x02;
                } else if (strlencmp(cmd, "crt_disable") == 0) {
                        disable |= 0x02;
-               } else if (strlencmp(cmd, "dvi_enable") == 0) {
+               } else if (video_supported == VIDEO_NEW &&
+                          strlencmp(cmd, "dvi_enable") == 0) {
                        enable |= 0x08;
-               } else if (strlencmp(cmd, "dvi_disable") == 0) {
+               } else if (video_supported == VIDEO_NEW &&
+                          strlencmp(cmd, "dvi_disable") == 0) {
                        disable |= 0x08;
                } else if (strlencmp(cmd, "auto_enable") == 0) {
                        if (!acpi_evalf(vid_handle, NULL, "_DOS", "vd", 1))
@@ -536,71 +746,75 @@ static int video_write(struct ibm_struct *ibm, char *buf)
                        if (!acpi_evalf(vid_handle, NULL, "_DOS", "vd", 0))
                                return -EIO;
                } else if (strlencmp(cmd, "video_switch") == 0) {
-                       int autoswitch;
-                       if (!acpi_evalf(vid_handle, &autoswitch, "^VDEE", "d"))
-                               return -EIO;
-                       if (!acpi_evalf(vid_handle, NULL, "_DOS", "vd", 1))
-                               return -EIO;
-                       if (!acpi_evalf(vid_handle, NULL, "VSWT", "v"))
-                               return -EIO;
-                       if (!acpi_evalf(vid_handle, NULL, "_DOS", "vd",
-                                       autoswitch))
+                       if (!video_switch())
                                return -EIO;
                } else if (strlencmp(cmd, "expand_toggle") == 0) {
-                       if (!acpi_evalf(NULL, NULL, "\\VEXP", "v"))
+                       if (!video_expand())
                                return -EIO;
                } else
                        return -EINVAL;
        }
 
        if (enable || disable) {
-               status = (video_status(ibm) & 0x0f & ~disable) | enable;
-               if (!acpi_evalf(NULL, NULL, "\\VUPS", "vd", 0x80))
-                       return -EIO;
-               if (!acpi_evalf(NULL, NULL, "\\VSDS", "vdd", status, 1))
+               status = (video_status() & 0x0f & ~disable) | enable;
+               if (!video_switch2(status))
                        return -EIO;
        }
 
        return 0;
 }
 
-static void video_exit(struct ibm_struct *ibm)
+static void video_exit(void)
 {
-       acpi_evalf(vid_handle, NULL, "_DOS", "vd",
-                  ibm->state.video.autoswitch);
+       acpi_evalf(vid_handle, NULL, "_DOS", "vd", video_orig_autosw);
 }
 
-static int light_init(struct ibm_struct *ibm)
+static int light_supported;
+static int light_status_supported;
+
+static int light_init(void)
 {
-       /* kblt not supported on G40, R32, X20 */
-       ibm->supported = acpi_evalf(ec_handle, NULL, "KBLT", "qv");
+       /* light not supported on 570, 600e/x, 770e, 770x, G4x, R30, R31 */
+       light_supported = (cmos_handle || lght_handle) && !ledb_handle;
+
+       if (light_supported)
+               /* light status not supported on
+                  570, 600e/x, 770e, 770x, G4x, R30, R31, R32, X20 */
+               light_status_supported = acpi_evalf(ec_handle, NULL,
+                                                   "KBLT", "qv");
 
        return 0;
 }
 
-static int light_read(struct ibm_struct *ibm, char *p)
+static int light_read(char *p)
 {
        int len = 0;
        int status = 0;
 
-       if (ibm->supported) {
+       if (!light_supported) {
+               len += sprintf(p + len, "status:\t\tnot supported\n");
+       } else if (!light_status_supported) {
+               len += sprintf(p + len, "status:\t\tunknown\n");
+               len += sprintf(p + len, "commands:\ton, off\n");
+       } else {
                if (!acpi_evalf(ec_handle, &status, "KBLT", "d"))
                        return -EIO;
                len += sprintf(p + len, "status:\t\t%s\n", onoff(status, 0));
-       } else
-               len += sprintf(p + len, "status:\t\tunknown\n");
-
-       len += sprintf(p + len, "commands:\ton, off\n");
+               len += sprintf(p + len, "commands:\ton, off\n");
+       }
 
        return len;
 }
 
-static int light_write(struct ibm_struct *ibm, char *buf)
+static int light_write(char *buf)
 {
        int cmos_cmd, lght_cmd;
        char *cmd;
        int success;
-       
+
+       if (!light_supported)
+               return -ENODEV;
+
        while ((cmd = next_cmd(&buf))) {
                if (strlencmp(cmd, "on") == 0) {
                        cmos_cmd = 0x0c;
@@ -610,10 +824,10 @@ static int light_write(struct ibm_struct *ibm, char *buf)
                        lght_cmd = 0;
                } else
                        return -EINVAL;
-               
+
                success = cmos_handle ?
-                       acpi_evalf(cmos_handle, NULL, NULL, "vd", cmos_cmd) :
-                       acpi_evalf(lght_handle, NULL, NULL, "vd", lght_cmd);
+                   acpi_evalf(cmos_handle, NULL, NULL, "vd", cmos_cmd) :
+                   acpi_evalf(lght_handle, NULL, NULL, "vd", lght_cmd);
                if (!success)
                        return -EIO;
        }
@@ -633,7 +847,7 @@ static int _sta(acpi_handle handle)
 
 #define dock_docked() (_sta(dock_handle) & 1)
 
-static int dock_read(struct ibm_struct *ibm, char *p)
+static int dock_read(char *p)
 {
        int len = 0;
        int docked = dock_docked();
@@ -650,18 +864,17 @@ static int dock_read(struct ibm_struct *ibm, char *p)
        return len;
 }
 
-static int dock_write(struct ibm_struct *ibm, char *buf)
+static int dock_write(char *buf)
 {
        char *cmd;
 
        if (!dock_docked())
-               return -EINVAL;
+               return -ENODEV;
 
        while ((cmd = next_cmd(&buf))) {
                if (strlencmp(cmd, "undock") == 0) {
-                       if (!acpi_evalf(dock_handle, NULL, "_DCK", "vd", 0))
-                               return -EIO;
-                       if (!acpi_evalf(dock_handle, NULL, "_EJ0", "vd", 1))
+                       if (!acpi_evalf(dock_handle, NULL, "_DCK", "vd", 0) ||
+                           !acpi_evalf(dock_handle, NULL, "_EJ0", "vd", 1))
                                return -EIO;
                } else if (strlencmp(cmd, "dock") == 0) {
                        if (!acpi_evalf(dock_handle, NULL, "_DCK", "vd", 1))
@@ -671,90 +884,131 @@ static int dock_write(struct ibm_struct *ibm, char *buf)
        }
 
        return 0;
-}      
+}
 
 static void dock_notify(struct ibm_struct *ibm, u32 event)
 {
        int docked = dock_docked();
-
-       if (event == 3 && docked)
-               acpi_bus_generate_event(ibm->device, event, 1); /* button */
+       int pci = ibm->hid && strstr(ibm->hid, IBM_PCI_HID);
+
+       if (event == 1 && !pci) /* 570 */
+               acpi_bus_generate_event(ibm->device, event, 1); /* button */
+       else if (event == 1 && pci)     /* 570 */
+               acpi_bus_generate_event(ibm->device, event, 3); /* dock */
+       else if (event == 3 && docked)
+               acpi_bus_generate_event(ibm->device, event, 1); /* button */
        else if (event == 3 && !docked)
-               acpi_bus_generate_event(ibm->device, event, 2); /* undock */
+               acpi_bus_generate_event(ibm->device, event, 2); /* undock */
        else if (event == 0 && docked)
-               acpi_bus_generate_event(ibm->device, event, 3); /* dock */
+               acpi_bus_generate_event(ibm->device, event, 3); /* dock */
        else {
                printk(IBM_ERR "unknown dock event %d, status %d\n",
                       event, _sta(dock_handle));
-               acpi_bus_generate_event(ibm->device, event, 0); /* unknown */
+               acpi_bus_generate_event(ibm->device, event, 0); /* unknown */
        }
 }
 
-#define bay_occupied() (_sta(bay_handle) & 1)
+static int bay_status_supported;
+static int bay_status2_supported;
+static int bay_eject_supported;
+static int bay_eject2_supported;
 
-static int bay_init(struct ibm_struct *ibm)
+static int bay_init(void)
 {
-       /* bay not supported on A21e, A22p, A31, A31p, G40, R32, R40e */
-       ibm->supported = bay_handle && bayej_handle &&
-               acpi_evalf(bay_handle, NULL, "_STA", "qv");
+       bay_status_supported = bay_handle &&
+           acpi_evalf(bay_handle, NULL, "_STA", "qv");
+       bay_status2_supported = bay2_handle &&
+           acpi_evalf(bay2_handle, NULL, "_STA", "qv");
+
+       bay_eject_supported = bay_handle && bay_ej_handle &&
+           (strlencmp(bay_ej_path, "_EJ0") == 0 || experimental);
+       bay_eject2_supported = bay2_handle && bay2_ej_handle &&
+           (strlencmp(bay2_ej_path, "_EJ0") == 0 || experimental);
 
        return 0;
 }
 
-static int bay_read(struct ibm_struct *ibm, char *p)
+#define bay_occupied(b) (_sta(b##_handle) & 1)
+
+static int bay_read(char *p)
 {
        int len = 0;
-       int occupied = bay_occupied();
-       
-       if (!ibm->supported)
-               len += sprintf(p + len, "status:\t\tnot supported\n");
-       else if (!occupied)
-               len += sprintf(p + len, "status:\t\tunoccupied\n");
-       else {
-               len += sprintf(p + len, "status:\t\toccupied\n");
+       int occupied = bay_occupied(bay);
+       int occupied2 = bay_occupied(bay2);
+       int eject, eject2;
+
+       len += sprintf(p + len, "status:\t\t%s\n", bay_status_supported ?
+                      (occupied ? "occupied" : "unoccupied") :
+                      "not supported");
+       if (bay_status2_supported)
+               len += sprintf(p + len, "status2:\t%s\n", occupied2 ?
+                              "occupied" : "unoccupied");
+
+       eject = bay_eject_supported && occupied;
+       eject2 = bay_eject2_supported && occupied2;
+
+       if (eject && eject2)
+               len += sprintf(p + len, "commands:\teject, eject2\n");
+       else if (eject)
                len += sprintf(p + len, "commands:\teject\n");
-       }
+       else if (eject2)
+               len += sprintf(p + len, "commands:\teject2\n");
 
        return len;
 }
 
-static int bay_write(struct ibm_struct *ibm, char *buf)
+static int bay_write(char *buf)
 {
        char *cmd;
 
+       if (!bay_eject_supported && !bay_eject2_supported)
+               return -ENODEV;
+
        while ((cmd = next_cmd(&buf))) {
-               if (strlencmp(cmd, "eject") == 0) {
-                       if (!ibm->supported ||
-                           !acpi_evalf(bay_handle, NULL, "_EJ0", "vd", 1))
+               if (bay_eject_supported && strlencmp(cmd, "eject") == 0) {
+                       if (!acpi_evalf(bay_ej_handle, NULL, NULL, "vd", 1))
+                               return -EIO;
+               } else if (bay_eject2_supported &&
+                          strlencmp(cmd, "eject2") == 0) {
+                       if (!acpi_evalf(bay2_ej_handle, NULL, NULL, "vd", 1))
                                return -EIO;
                } else
                        return -EINVAL;
        }
 
        return 0;
-}      
+}
 
 static void bay_notify(struct ibm_struct *ibm, u32 event)
 {
        acpi_bus_generate_event(ibm->device, event, 0);
 }
 
-static int cmos_read(struct ibm_struct *ibm, char *p)
+static int cmos_read(char *p)
 {
        int len = 0;
 
-       /* cmos not supported on A21e, A22p, T20, T21, X20 */
+       /* cmos not supported on 570, 600e/x, 770e, 770x, A21e, A2xm/p,
+          R30, R31, T20-22, X20-21 */
        if (!cmos_handle)
                len += sprintf(p + len, "status:\t\tnot supported\n");
        else {
                len += sprintf(p + len, "status:\t\tsupported\n");
-               len += sprintf(p + len, "commands:\t<int>\n");
+               len += sprintf(p + len, "commands:\t<cmd> (<cmd> is 0-21)\n");
        }
 
        return len;
 }
 
-static int cmos_write(struct ibm_struct *ibm, char *buf)
+static int cmos_eval(int cmos_cmd)
+{
+       if (cmos_handle)
+               return acpi_evalf(cmos_handle, NULL, NULL, "vd", cmos_cmd);
+       else
+               return 1;
+}
+
+static int cmos_write(char *buf)
 {
        char *cmd;
        int cmos_cmd;
@@ -763,183 +1017,644 @@ static int cmos_write(struct ibm_struct *ibm, char *buf)
                return -EINVAL;
 
        while ((cmd = next_cmd(&buf))) {
-               if (sscanf(cmd, "%u", &cmos_cmd) == 1) {
+               if (sscanf(cmd, "%u", &cmos_cmd) == 1 &&
+                   cmos_cmd >= 0 && cmos_cmd <= 21) {
                        /* cmos_cmd set */
                } else
                        return -EINVAL;
 
-               if (!acpi_evalf(cmos_handle, NULL, NULL, "vd", cmos_cmd))
+               if (!cmos_eval(cmos_cmd))
                        return -EIO;
        }
 
        return 0;
-}      
-               
-static int led_read(struct ibm_struct *ibm, char *p)
+}
+
+static int led_supported;
+
+#define LED_570 1
+#define LED_OLD 2
+#define LED_NEW 3
+
+static int led_init(void)
+{
+       if (!led_handle)
+               /* led not supported on R30, R31 */
+               led_supported = 0;
+       else if (strlencmp(led_path, "SLED") == 0)
+               /* 570 */
+               led_supported = LED_570;
+       else if (strlencmp(led_path, "SYSL") == 0)
+               /* 600e/x, 770e, 770x, A21e, A2xm/p, T20-22, X20-21 */
+               led_supported = LED_OLD;
+       else
+               /* all others */
+               led_supported = LED_NEW;
+
+       return 0;
+}
+
+#define led_status(s) ((s) == 0 ? "off" : ((s) == 1 ? "on" : "blinking"))
+
+static int led_read(char *p)
 {
        int len = 0;
 
+       if (!led_supported) {
+               len += sprintf(p + len, "status:\t\tnot supported\n");
+               return len;
+       }
+       len += sprintf(p + len, "status:\t\tsupported\n");
+
+       if (led_supported == LED_570) {
+               /* 570 */
+               int i, status;
+               for (i = 0; i < 8; i++) {
+                       if (!acpi_evalf(ec_handle,
+                                       &status, "GLED", "dd", 1 << i))
+                               return -EIO;
+                       len += sprintf(p + len, "%d:\t\t%s\n",
+                                      i, led_status(status));
+               }
+       }
+
        len += sprintf(p + len, "commands:\t"
-                      "<int> on, <int> off, <int> blink\n");
+                      "<led> on, <led> off, <led> blink (<led> is 0-7)\n");
 
        return len;
 }
 
-static int led_write(struct ibm_struct *ibm, char *buf)
+/* off, on, blink */
+static const int led_sled_arg1[] = { 0, 1, 3 };
+static const int led_exp_hlbl[] = { 0, 0, 1 }; /* led# * */
+static const int led_exp_hlcl[] = { 0, 1, 1 }; /* led# * */
+static const int led_led_arg1[] = { 0, 0x80, 0xc0 };
+
+#define EC_HLCL 0x0c
+#define EC_HLBL 0x0d
+#define EC_HLMS 0x0e
+
+static int led_write(char *buf)
 {
        char *cmd;
-       unsigned int led;
-       int led_cmd, sysl_cmd, bled_a, bled_b;
+       int led, ind, ret;
+
+       if (!led_supported)
+               return -ENODEV;
 
        while ((cmd = next_cmd(&buf))) {
-               if (sscanf(cmd, "%u", &led) != 1)
+               if (sscanf(cmd, "%d", &led) != 1 || led < 0 || led > 7)
                        return -EINVAL;
 
-               if (strstr(cmd, "blink")) {
-                       led_cmd = 0xc0;
-                       sysl_cmd = 2;
-                       bled_a = 2;
-                       bled_b = 1;
+               if (strstr(cmd, "off")) {
+                       ind = 0;
                } else if (strstr(cmd, "on")) {
-                       led_cmd = 0x80;
-                       sysl_cmd = 1;
-                       bled_a = 2;
-                       bled_b = 0;
-               } else if (strstr(cmd, "off")) {
-                       led_cmd = sysl_cmd = bled_a = bled_b = 0;
+                       ind = 1;
+               } else if (strstr(cmd, "blink")) {
+                       ind = 2;
                } else
                        return -EINVAL;
-               
-               if (led_handle) {
+
+               if (led_supported == LED_570) {
+                       /* 570 */
+                       led = 1 << led;
                        if (!acpi_evalf(led_handle, NULL, NULL, "vdd",
-                                       led, led_cmd))
+                                       led, led_sled_arg1[ind]))
                                return -EIO;
-               } else if (led < 2) {
-                       if (acpi_evalf(sysl_handle, NULL, NULL, "vdd",
-                                      led, sysl_cmd))
+               } else if (led_supported == LED_OLD) {
+                       /* 600e/x, 770e, 770x, A21e, A2xm/p, T20-22, X20 */
+                       led = 1 << led;
+                       ret = ec_write(EC_HLMS, led);
+                       if (ret >= 0)
+                               ret =
+                                   ec_write(EC_HLBL, led * led_exp_hlbl[ind]);
+                       if (ret >= 0)
+                               ret =
+                                   ec_write(EC_HLCL, led * led_exp_hlcl[ind]);
+                       if (ret < 0)
+                               return ret;
+               } else {
+                       /* all others */
+                       if (!acpi_evalf(led_handle, NULL, NULL, "vdd",
+                                       led, led_led_arg1[ind]))
                                return -EIO;
-               } else if (led == 2 && bled_handle) {
-                       if (acpi_evalf(bled_handle, NULL, NULL, "vdd",
-                                      bled_a, bled_b))
+               }
+       }
+
+       return 0;
+}
+
+static int beep_read(char *p)
+{
+       int len = 0;
+
+       if (!beep_handle)
+               len += sprintf(p + len, "status:\t\tnot supported\n");
+       else {
+               len += sprintf(p + len, "status:\t\tsupported\n");
+               len += sprintf(p + len, "commands:\t<cmd> (<cmd> is 0-17)\n");
+       }
+
+       return len;
+}
+
+static int beep_write(char *buf)
+{
+       char *cmd;
+       int beep_cmd;
+
+       if (!beep_handle)
+               return -ENODEV;
+
+       while ((cmd = next_cmd(&buf))) {
+               if (sscanf(cmd, "%u", &beep_cmd) == 1 &&
+                   beep_cmd >= 0 && beep_cmd <= 17) {
+                       /* beep_cmd set */
+               } else
+                       return -EINVAL;
+               if (!acpi_evalf(beep_handle, NULL, NULL, "vdd", beep_cmd, 0))
+                       return -EIO;
+       }
+
+       return 0;
+}
+
+static int acpi_ec_read(int i, u8 * p)
+{
+       int v;
+
+       if (ecrd_handle) {
+               if (!acpi_evalf(ecrd_handle, &v, NULL, "dd", i))
+                       return 0;
+               *p = v;
+       } else {
+               if (ec_read(i, p) < 0)
+                       return 0;
+       }
+
+       return 1;
+}
+
+static int acpi_ec_write(int i, u8 v)
+{
+       if (ecwr_handle) {
+               if (!acpi_evalf(ecwr_handle, NULL, NULL, "vdd", i, v))
+                       return 0;
+       } else {
+               if (ec_write(i, v) < 0)
+                       return 0;
+       }
+
+       return 1;
+}
+
+static int thermal_tmp_supported;
+static int thermal_updt_supported;
+
+static int thermal_init(void)
+{
+       /* temperatures not supported on 570, G4x, R30, R31, R32 */
+       thermal_tmp_supported = acpi_evalf(ec_handle, NULL, "TMP7", "qv");
+
+       /* 600e/x, 770e, 770x */
+       thermal_updt_supported = acpi_evalf(ec_handle, NULL, "UPDT", "qv");
+
+       return 0;
+}
+
+static int thermal_read(char *p)
+{
+       int len = 0;
+
+       if (!thermal_tmp_supported)
+               len += sprintf(p + len, "temperatures:\tnot supported\n");
+       else {
+               int i, t;
+               char tmpi[] = "TMPi";
+               s8 tmp[8];
+
+               if (thermal_updt_supported)
+                       if (!acpi_evalf(ec_handle, NULL, "UPDT", "v"))
+                               return -EIO;
+
+               for (i = 0; i < 8; i++) {
+                       tmpi[3] = '0' + i;
+                       if (!acpi_evalf(ec_handle, &t, tmpi, "d"))
+                               return -EIO;
+                       if (thermal_updt_supported)
+                               tmp[i] = (t - 2732 + 5) / 10;
+                       else
+                               tmp[i] = t;
+               }
+
+               len += sprintf(p + len,
+                              "temperatures:\t%d %d %d %d %d %d %d %d\n",
+                              tmp[0], tmp[1], tmp[2], tmp[3],
+                              tmp[4], tmp[5], tmp[6], tmp[7]);
+       }
+
+       return len;
+}
+
+static u8 ecdump_regs[256];
+
+static int ecdump_read(char *p)
+{
+       int len = 0;
+       int i, j;
+       u8 v;
+
+       len += sprintf(p + len, "EC      "
+                      " +00 +01 +02 +03 +04 +05 +06 +07"
+                      " +08 +09 +0a +0b +0c +0d +0e +0f\n");
+       for (i = 0; i < 256; i += 16) {
+               len += sprintf(p + len, "EC 0x%02x:", i);
+               for (j = 0; j < 16; j++) {
+                       if (!acpi_ec_read(i + j, &v))
+                               break;
+                       if (v != ecdump_regs[i + j])
+                               len += sprintf(p + len, " *%02x", v);
+                       else
+                               len += sprintf(p + len, "  %02x", v);
+                       ecdump_regs[i + j] = v;
+               }
+               len += sprintf(p + len, "\n");
+               if (j != 16)
+                       break;
+       }
+
+       /* These are way too dangerous to advertise openly... */
+#if 0
+       len += sprintf(p + len, "commands:\t0x<offset> 0x<value>"
+                      " (<offset> is 00-ff, <value> is 00-ff)\n");
+       len += sprintf(p + len, "commands:\t0x<offset> <value>  "
+                      " (<offset> is 00-ff, <value> is 0-255)\n");
+#endif
+       return len;
+}
+
+static int ecdump_write(char *buf)
+{
+       char *cmd;
+       int i, v;
+
+       while ((cmd = next_cmd(&buf))) {
+               if (sscanf(cmd, "0x%x 0x%x", &i, &v) == 2) {
+                       /* i and v set */
+               } else if (sscanf(cmd, "0x%x %u", &i, &v) == 2) {
+                       /* i and v set */
+               } else
+                       return -EINVAL;
+               if (i >= 0 && i < 256 && v >= 0 && v < 256) {
+                       if (!acpi_ec_write(i, v))
                                return -EIO;
                } else
                        return -EINVAL;
        }
 
        return 0;
-}      
-               
-static int beep_read(struct ibm_struct *ibm, char *p)
+}
+
+static int brightness_offset = 0x31;
+
+static int brightness_read(char *p)
 {
        int len = 0;
+       u8 level;
 
-       len += sprintf(p + len, "commands:\t<int>\n");
+       if (!acpi_ec_read(brightness_offset, &level)) {
+               len += sprintf(p + len, "level:\t\tunreadable\n");
+       } else {
+               len += sprintf(p + len, "level:\t\t%d\n", level & 0x7);
+               len += sprintf(p + len, "commands:\tup, down\n");
+               len += sprintf(p + len, "commands:\tlevel <level>"
+                              " (<level> is 0-7)\n");
+       }
 
        return len;
 }
 
-static int beep_write(struct ibm_struct *ibm, char *buf)
+#define BRIGHTNESS_UP  4
+#define BRIGHTNESS_DOWN        5
+
+static int brightness_write(char *buf)
 {
+       int cmos_cmd, inc, i;
+       u8 level;
+       int new_level;
        char *cmd;
-       int beep_cmd;
 
        while ((cmd = next_cmd(&buf))) {
-               if (sscanf(cmd, "%u", &beep_cmd) == 1) {
-                       /* beep_cmd set */
+               if (!acpi_ec_read(brightness_offset, &level))
+                       return -EIO;
+               level &= 7;
+
+               if (strlencmp(cmd, "up") == 0) {
+                       new_level = level == 7 ? 7 : level + 1;
+               } else if (strlencmp(cmd, "down") == 0) {
+                       new_level = level == 0 ? 0 : level - 1;
+               } else if (sscanf(cmd, "level %d", &new_level) == 1 &&
+                          new_level >= 0 && new_level <= 7) {
+                       /* new_level set */
+               } else
+                       return -EINVAL;
+
+               cmos_cmd = new_level > level ? BRIGHTNESS_UP : BRIGHTNESS_DOWN;
+               inc = new_level > level ? 1 : -1;
+               for (i = level; i != new_level; i += inc) {
+                       if (!cmos_eval(cmos_cmd))
+                               return -EIO;
+                       if (!acpi_ec_write(brightness_offset, i + inc))
+                               return -EIO;
+               }
+       }
+
+       return 0;
+}
+
+static int volume_offset = 0x30;
+
+static int volume_read(char *p)
+{
+       int len = 0;
+       u8 level;
+
+       if (!acpi_ec_read(volume_offset, &level)) {
+               len += sprintf(p + len, "level:\t\tunreadable\n");
+       } else {
+               len += sprintf(p + len, "level:\t\t%d\n", level & 0xf);
+               len += sprintf(p + len, "mute:\t\t%s\n", onoff(level, 6));
+               len += sprintf(p + len, "commands:\tup, down, mute\n");
+               len += sprintf(p + len, "commands:\tlevel <level>"
+                              " (<level> is 0-15)\n");
+       }
+
+       return len;
+}
+
+#define VOLUME_DOWN    0
+#define VOLUME_UP      1
+#define VOLUME_MUTE    2
+
+static int volume_write(char *buf)
+{
+       int cmos_cmd, inc, i;
+       u8 level, mute;
+       int new_level, new_mute;
+       char *cmd;
+
+       while ((cmd = next_cmd(&buf))) {
+               if (!acpi_ec_read(volume_offset, &level))
+                       return -EIO;
+               new_mute = mute = level & 0x40;
+               new_level = level = level & 0xf;
+
+               if (strlencmp(cmd, "up") == 0) {
+                       if (mute)
+                               new_mute = 0;
+                       else
+                               new_level = level == 15 ? 15 : level + 1;
+               } else if (strlencmp(cmd, "down") == 0) {
+                       if (mute)
+                               new_mute = 0;
+                       else
+                               new_level = level == 0 ? 0 : level - 1;
+               } else if (sscanf(cmd, "level %d", &new_level) == 1 &&
+                          new_level >= 0 && new_level <= 15) {
+                       /* new_level set */
+               } else if (strlencmp(cmd, "mute") == 0) {
+                       new_mute = 0x40;
                } else
                        return -EINVAL;
 
-               if (!acpi_evalf(beep_handle, NULL, NULL, "vd", beep_cmd))
+               if (new_level != level) {       /* mute doesn't change */
+                       cmos_cmd = new_level > level ? VOLUME_UP : VOLUME_DOWN;
+                       inc = new_level > level ? 1 : -1;
+
+                       if (mute && (!cmos_eval(cmos_cmd) ||
+                                    !acpi_ec_write(volume_offset, level)))
+                               return -EIO;
+
+                       for (i = level; i != new_level; i += inc)
+                               if (!cmos_eval(cmos_cmd) ||
+                                   !acpi_ec_write(volume_offset, i + inc))
+                                       return -EIO;
+
+                       if (mute && (!cmos_eval(VOLUME_MUTE) ||
+                                    !acpi_ec_write(volume_offset,
+                                                   new_level + mute)))
+                               return -EIO;
+               }
+
+               if (new_mute != mute) { /* level doesn't change */
+                       cmos_cmd = new_mute ? VOLUME_MUTE : VOLUME_UP;
+
+                       if (!cmos_eval(cmos_cmd) ||
+                           !acpi_ec_write(volume_offset, level + new_mute))
+                               return -EIO;
+               }
+       }
+
+       return 0;
+}
+
+static int fan_status_offset = 0x2f;
+static int fan_rpm_offset = 0x84;
+
+static int fan_read(char *p)
+{
+       int len = 0;
+       int s;
+       u8 lo, hi, status;
+
+       if (gfan_handle) {
+               /* 570, 600e/x, 770e, 770x */
+               if (!acpi_evalf(gfan_handle, &s, NULL, "d"))
                        return -EIO;
+
+               len += sprintf(p + len, "level:\t\t%d\n", s);
+       } else {
+               /* all except 570, 600e/x, 770e, 770x */
+               if (!acpi_ec_read(fan_status_offset, &status))
+                       len += sprintf(p + len, "status:\t\tunreadable\n");
+               else
+                       len += sprintf(p + len, "status:\t\t%s\n",
+                                      enabled(status, 7));
+
+               if (!acpi_ec_read(fan_rpm_offset, &lo) ||
+                   !acpi_ec_read(fan_rpm_offset + 1, &hi))
+                       len += sprintf(p + len, "speed:\t\tunreadable\n");
+               else
+                       len += sprintf(p + len, "speed:\t\t%d\n",
+                                      (hi << 8) + lo);
+       }
+
+       if (sfan_handle)
+               /* 570, 770x-JL */
+               len += sprintf(p + len, "commands:\tlevel <level>"
+                              " (<level> is 0-7)\n");
+       if (!gfan_handle)
+               /* all except 570, 600e/x, 770e, 770x */
+               len += sprintf(p + len, "commands:\tenable, disable\n");
+       if (fans_handle)
+               /* X31, X40 */
+               len += sprintf(p + len, "commands:\tspeed <speed>"
+                              " (<speed> is 0-65535)\n");
+
+       return len;
+}
+
+static int fan_write(char *buf)
+{
+       char *cmd;
+       int level, speed;
+
+       while ((cmd = next_cmd(&buf))) {
+               if (sfan_handle &&
+                   sscanf(cmd, "level %d", &level) == 1 &&
+                   level >= 0 && level <= 7) {
+                       /* 570, 770x-JL */
+                       if (!acpi_evalf(sfan_handle, NULL, NULL, "vd", level))
+                               return -EIO;
+               } else if (!gfan_handle && strlencmp(cmd, "enable") == 0) {
+                       /* all except 570, 600e/x, 770e, 770x */
+                       if (!acpi_ec_write(fan_status_offset, 0x80))
+                               return -EIO;
+               } else if (!gfan_handle && strlencmp(cmd, "disable") == 0) {
+                       /* all except 570, 600e/x, 770e, 770x */
+                       if (!acpi_ec_write(fan_status_offset, 0x00))
+                               return -EIO;
+               } else if (fans_handle &&
+                          sscanf(cmd, "speed %d", &speed) == 1 &&
+                          speed >= 0 && speed <= 65535) {
+                       /* X31, X40 */
+                       if (!acpi_evalf(fans_handle, NULL, NULL, "vddd",
+                                       speed, speed, speed))
+                               return -EIO;
+               } else
+                       return -EINVAL;
        }
 
        return 0;
-}      
-               
+}
+
 static struct ibm_struct ibms[] = {
        {
-               .name   = "driver",
-               .init   = driver_init,
-               .read   = driver_read,
-       },
+        .name = "driver",
+        .init = driver_init,
+        .read = driver_read,
+        },
+       {
+        .name = "hotkey",
+        .hid = IBM_HKEY_HID,
+        .init = hotkey_init,
+        .read = hotkey_read,
+        .write = hotkey_write,
+        .exit = hotkey_exit,
+        .notify = hotkey_notify,
+        .handle = &hkey_handle,
+        .type = ACPI_DEVICE_NOTIFY,
+        },
+       {
+        .name = "bluetooth",
+        .init = bluetooth_init,
+        .read = bluetooth_read,
+        .write = bluetooth_write,
+        },
+       {
+        .name = "video",
+        .init = video_init,
+        .read = video_read,
+        .write = video_write,
+        .exit = video_exit,
+        },
        {
-               .name   = "hotkey",
-               .hid    = "IBM0068",
-               .init   = hotkey_init,
-               .read   = hotkey_read,
-               .write  = hotkey_write,
-               .exit   = hotkey_exit,
-               .notify = hotkey_notify,
-               .handle = &hkey_handle,
-               .type   = ACPI_DEVICE_NOTIFY,
-       },
+        .name = "light",
+        .init = light_init,
+        .read = light_read,
+        .write = light_write,
+        },
        {
-               .name   = "bluetooth",
-               .init   = bluetooth_init,
-               .read   = bluetooth_read,
-               .write  = bluetooth_write,
-       },
+        .name = "dock",
+        .read = dock_read,
+        .write = dock_write,
+        .notify = dock_notify,
+        .handle = &dock_handle,
+        .type = ACPI_SYSTEM_NOTIFY,
+        },
        {
-               .name   = "video",
-               .init   = video_init,
-               .read   = video_read,
-               .write  = video_write,
-               .exit   = video_exit,
-       },
+        .name = "dock",
+        .hid = IBM_PCI_HID,
+        .notify = dock_notify,
+        .handle = &pci_handle,
+        .type = ACPI_SYSTEM_NOTIFY,
+        },
        {
-               .name   = "light",
-               .init   = light_init,
-               .read   = light_read,
-               .write  = light_write,
-       },
+        .name = "bay",
+        .init = bay_init,
+        .read = bay_read,
+        .write = bay_write,
+        .notify = bay_notify,
+        .handle = &bay_handle,
+        .type = ACPI_SYSTEM_NOTIFY,
+        },
        {
-               .name   = "dock",
-               .read   = dock_read,
-               .write  = dock_write,
-               .notify = dock_notify,
-               .handle = &dock_handle,
-               .type   = ACPI_SYSTEM_NOTIFY,
-       },
+        .name = "cmos",
+        .read = cmos_read,
+        .write = cmos_write,
+        },
        {
-               .name   = "bay",
-               .init   = bay_init,
-               .read   = bay_read,
-               .write  = bay_write,
-               .notify = bay_notify,
-               .handle = &bay_handle,
-               .type   = ACPI_SYSTEM_NOTIFY,
-       },
+        .name = "led",
+        .init = led_init,
+        .read = led_read,
+        .write = led_write,
+        },
        {
-               .name   = "cmos",
-               .read   = cmos_read,
-               .write  = cmos_write,
-               .experimental = 1,
-       },
+        .name = "beep",
+        .read = beep_read,
+        .write = beep_write,
+        },
        {
-               .name   = "led",
-               .read   = led_read,
-               .write  = led_write,
-               .experimental = 1,
-       },
+        .name = "thermal",
+        .init = thermal_init,
+        .read = thermal_read,
+        },
        {
-               .name   = "beep",
-               .read   = beep_read,
-               .write  = beep_write,
-               .experimental = 1,
-       },
+        .name = "ecdump",
+        .read = ecdump_read,
+        .write = ecdump_write,
+        .experimental = 1,
+        },
+       {
+        .name = "brightness",
+        .read = brightness_read,
+        .write = brightness_write,
+        .experimental = 1,
+        },
+       {
+        .name = "volume",
+        .read = volume_read,
+        .write = volume_write,
+        .experimental = 1,
+        },
+       {
+        .name = "fan",
+        .read = fan_read,
+        .write = fan_write,
+        .experimental = 1,
+        },
 };
-#define NUM_IBMS (sizeof(ibms)/sizeof(ibms[0]))
 
 static int dispatch_read(char *page, char **start, off_t off, int count,
                         int *eof, void *data)
 {
        struct ibm_struct *ibm = (struct ibm_struct *)data;
        int len;
-       
+
        if (!ibm || !ibm->read)
                return -EINVAL;
 
-       len = ibm->read(ibm, page);
+       len = ibm->read(page);
        if (len < 0)
                return len;
 
@@ -955,7 +1670,7 @@ static int dispatch_read(char *page, char **start, off_t off, int count,
        return len;
 }
 
-static int dispatch_write(struct file *file, const char __user *userbuf,
+static int dispatch_write(struct file *file, const char __user * userbuf,
                          unsigned long count, void *data)
 {
        struct ibm_struct *ibm = (struct ibm_struct *)data;
@@ -969,20 +1684,20 @@ static int dispatch_write(struct file *file, const char __user *userbuf,
        if (!kernbuf)
                return -ENOMEM;
 
-        if (copy_from_user(kernbuf, userbuf, count)) {
+       if (copy_from_user(kernbuf, userbuf, count)) {
                kfree(kernbuf);
-                return -EFAULT;
+               return -EFAULT;
        }
 
        kernbuf[count] = 0;
        strcat(kernbuf, ",");
-       ret = ibm->write(ibm, kernbuf);
+       ret = ibm->write(kernbuf);
        if (ret == 0)
                ret = count;
 
        kfree(kernbuf);
 
-        return ret;
+       return ret;
 }
 
 static void dispatch_notify(acpi_handle handle, u32 event, void *data)
@@ -995,7 +1710,7 @@ static void dispatch_notify(acpi_handle handle, u32 event, void *data)
        ibm->notify(ibm, event);
 }
 
-static int setup_notify(struct ibm_struct *ibm)
+static int __init setup_notify(struct ibm_struct *ibm)
 {
        acpi_status status;
        int ret;
@@ -1020,17 +1735,15 @@ static int setup_notify(struct ibm_struct *ibm)
                return -ENODEV;
        }
 
-       ibm->notify_installed = 1;
-
        return 0;
 }
 
-static int ibmacpi_device_add(struct acpi_device *device)
+static int __init ibm_device_add(struct acpi_device *device)
 {
        return 0;
 }
 
-static int register_driver(struct ibm_struct *ibm)
+static int __init register_driver(struct ibm_struct *ibm)
 {
        int ret;
 
@@ -1043,7 +1756,7 @@ static int register_driver(struct ibm_struct *ibm)
        memset(ibm->driver, 0, sizeof(struct acpi_driver));
        sprintf(ibm->driver->name, "%s/%s", IBM_NAME, ibm->name);
        ibm->driver->ids = ibm->hid;
-       ibm->driver->ops.add = &ibmacpi_device_add;
+       ibm->driver->ops.add = &ibm_device_add;
 
        ret = acpi_bus_register_driver(ibm->driver);
        if (ret < 0) {
@@ -1055,7 +1768,7 @@ static int register_driver(struct ibm_struct *ibm)
        return ret;
 }
 
-static int ibm_init(struct ibm_struct *ibm)
+static int __init ibm_init(struct ibm_struct *ibm)
 {
        int ret;
        struct proc_dir_entry *entry;
@@ -1071,31 +1784,34 @@ static int ibm_init(struct ibm_struct *ibm)
        }
 
        if (ibm->init) {
-               ret = ibm->init(ibm);
+               ret = ibm->init();
                if (ret != 0)
                        return ret;
                ibm->init_called = 1;
        }
 
-       entry = create_proc_entry(ibm->name, S_IFREG | S_IRUGO | S_IWUSR,
-                                 proc_dir);
-       if (!entry) {
-               printk(IBM_ERR "unable to create proc entry %s\n", ibm->name);
-               return -ENODEV;
-       }
-       entry->owner = THIS_MODULE;
-       ibm->proc_created = 1;
-       
-       entry->data = ibm;
-       if (ibm->read)
+       if (ibm->read) {
+               entry = create_proc_entry(ibm->name,
+                                         S_IFREG | S_IRUGO | S_IWUSR,
+                                         proc_dir);
+               if (!entry) {
+                       printk(IBM_ERR "unable to create proc entry %s\n",
+                              ibm->name);
+                       return -ENODEV;
+               }
+               entry->owner = THIS_MODULE;
+               entry->data = ibm;
                entry->read_proc = &dispatch_read;
-       if (ibm->write)
-               entry->write_proc = &dispatch_write;
+               if (ibm->write)
+                       entry->write_proc = &dispatch_write;
+               ibm->proc_created = 1;
+       }
 
        if (ibm->notify) {
                ret = setup_notify(ibm);
                if (ret < 0)
                        return ret;
+               ibm->notify_installed = 1;
        }
 
        return 0;
@@ -1111,7 +1827,7 @@ static void ibm_exit(struct ibm_struct *ibm)
                remove_proc_entry(ibm->name, proc_dir);
 
        if (ibm->init_called && ibm->exit)
-               ibm->exit(ibm);
+               ibm->exit();
 
        if (ibm->driver_registered) {
                acpi_bus_unregister_driver(ibm->driver);
@@ -1119,60 +1835,66 @@ static void ibm_exit(struct ibm_struct *ibm)
        }
 }
 
-static int ibm_handle_init(char *name,
-                          acpi_handle *handle, acpi_handle parent,
-                          char **paths, int num_paths, int required)
+static void __init ibm_handle_init(char *name,
+                                  acpi_handle * handle, acpi_handle parent,
+                                  char **paths, int num_paths, char **path)
 {
        int i;
        acpi_status status;
 
-       for (i=0; i<num_paths; i++) {
+       for (i = 0; i < num_paths; i++) {
                status = acpi_get_handle(parent, paths[i], handle);
-               if (ACPI_SUCCESS(status))
-                       return 0;
-       }
-       
-       *handle = NULL;
-
-       if (required) {
-               printk(IBM_ERR "%s object not found\n", name);
-               return -1;
+               if (ACPI_SUCCESS(status)) {
+                       *path = paths[i];
+                       return;
+               }
        }
 
-       return 0;
+       *handle = NULL;
 }
 
-#define IBM_HANDLE_INIT(object, required)                              \
+#define IBM_HANDLE_INIT(object)                                                \
        ibm_handle_init(#object, &object##_handle, *object##_parent,    \
-               object##_paths, sizeof(object##_paths)/sizeof(char*), required)
-
+               object##_paths, ARRAY_SIZE(object##_paths), &object##_path)
 
 static int set_ibm_param(const char *val, struct kernel_param *kp)
 {
        unsigned int i;
-       char arg_with_comma[32];
-
-       if (strlen(val) > 30)
-               return -ENOSPC;
 
-       strcpy(arg_with_comma, val);
-       strcat(arg_with_comma, ",");
+       for (i = 0; i < ARRAY_SIZE(ibms); i++)
+               if (strcmp(ibms[i].name, kp->name) == 0 && ibms[i].write) {
+                       if (strlen(val) > sizeof(ibms[i].param) - 2)
+                               return -ENOSPC;
+                       strcpy(ibms[i].param, val);
+                       strcat(ibms[i].param, ",");
+                       return 0;
+               }
 
-       for (i=0; i<NUM_IBMS; i++)
-               if (strcmp(ibms[i].name, kp->name) == 0)
-                       return ibms[i].write(&ibms[i], arg_with_comma);
-       BUG();
        return -EINVAL;
 }
 
 #define IBM_PARAM(feature) \
        module_param_call(feature, set_ibm_param, NULL, NULL, 0)
 
+IBM_PARAM(hotkey);
+IBM_PARAM(bluetooth);
+IBM_PARAM(video);
+IBM_PARAM(light);
+IBM_PARAM(dock);
+IBM_PARAM(bay);
+IBM_PARAM(cmos);
+IBM_PARAM(led);
+IBM_PARAM(beep);
+IBM_PARAM(ecdump);
+IBM_PARAM(brightness);
+IBM_PARAM(volume);
+IBM_PARAM(fan);
+
 static void acpi_ibm_exit(void)
 {
        int i;
 
-       for (i=NUM_IBMS-1; i>=0; i--)
+       for (i = ARRAY_SIZE(ibms) - 1; i >= 0; i--)
                ibm_exit(&ibms[i]);
 
        remove_proc_entry(IBM_DIR, acpi_root_dir);
@@ -1185,30 +1907,40 @@ static int __init acpi_ibm_init(void)
        if (acpi_disabled)
                return -ENODEV;
 
-       if (!acpi_specific_hotkey_enabled){
-               printk(IBM_ERR "Using generic hotkey driver\n");
-               return -ENODEV; 
-       }
-       /* these handles are required */
-       if (IBM_HANDLE_INIT(ec,   1) < 0 ||
-           IBM_HANDLE_INIT(hkey, 1) < 0 ||
-           IBM_HANDLE_INIT(vid,  1) < 0 ||
-           IBM_HANDLE_INIT(beep, 1) < 0)
+       if (!acpi_specific_hotkey_enabled) {
+               printk(IBM_ERR "using generic hotkey driver\n");
                return -ENODEV;
+       }
 
-       /* these handles have alternatives */
-       IBM_HANDLE_INIT(lght, 0);
-       if (IBM_HANDLE_INIT(cmos, !lght_handle) < 0)
-               return -ENODEV;
-       IBM_HANDLE_INIT(sysl, 0);
-       if (IBM_HANDLE_INIT(led, !sysl_handle) < 0)
+       /* ec is required because many other handles are relative to it */
+       IBM_HANDLE_INIT(ec);
+       if (!ec_handle) {
+               printk(IBM_ERR "ec object not found\n");
                return -ENODEV;
+       }
 
        /* these handles are not required */
-       IBM_HANDLE_INIT(dock,  0);
-       IBM_HANDLE_INIT(bay,   0);
-       IBM_HANDLE_INIT(bayej, 0);
-       IBM_HANDLE_INIT(bled,  0);
+       IBM_HANDLE_INIT(vid);
+       IBM_HANDLE_INIT(vid2);
+       IBM_HANDLE_INIT(ledb);
+       IBM_HANDLE_INIT(led);
+       IBM_HANDLE_INIT(hkey);
+       IBM_HANDLE_INIT(lght);
+       IBM_HANDLE_INIT(cmos);
+       IBM_HANDLE_INIT(dock);
+       IBM_HANDLE_INIT(pci);
+       IBM_HANDLE_INIT(bay);
+       if (bay_handle)
+               IBM_HANDLE_INIT(bay_ej);
+       IBM_HANDLE_INIT(bay2);
+       if (bay2_handle)
+               IBM_HANDLE_INIT(bay2_ej);
+       IBM_HANDLE_INIT(beep);
+       IBM_HANDLE_INIT(ecrd);
+       IBM_HANDLE_INIT(ecwr);
+       IBM_HANDLE_INIT(fans);
+       IBM_HANDLE_INIT(gfan);
+       IBM_HANDLE_INIT(sfan);
 
        proc_dir = proc_mkdir(IBM_DIR, acpi_root_dir);
        if (!proc_dir) {
@@ -1216,9 +1948,11 @@ static int __init acpi_ibm_init(void)
                return -ENODEV;
        }
        proc_dir->owner = THIS_MODULE;
-       
-       for (i=0; i<NUM_IBMS; i++) {
+
+       for (i = 0; i < ARRAY_SIZE(ibms); i++) {
                ret = ibm_init(&ibms[i]);
+               if (ret >= 0 && *ibms[i].param)
+                       ret = ibms[i].write(ibms[i].param);
                if (ret < 0) {
                        acpi_ibm_exit();
                        return ret;
@@ -1230,17 +1964,3 @@ static int __init acpi_ibm_init(void)
 
 module_init(acpi_ibm_init);
 module_exit(acpi_ibm_exit);
-
-MODULE_AUTHOR("Borislav Deianov");
-MODULE_DESCRIPTION(IBM_DESC);
-MODULE_LICENSE("GPL");
-
-IBM_PARAM(hotkey);
-IBM_PARAM(bluetooth);
-IBM_PARAM(video);
-IBM_PARAM(light);
-IBM_PARAM(dock);
-IBM_PARAM(bay);
-IBM_PARAM(cmos);
-IBM_PARAM(led);
-IBM_PARAM(beep);
index 61ea70742d4912863df0fe4a25f01c1a98d54829..e928e8c2c6ec90629aab15eeef143319c8c2462e 100644 (file)
 #include <acpi/acpi_drivers.h>
 
 #define _COMPONENT             ACPI_SYSTEM_COMPONENT
-ACPI_MODULE_NAME               ("acpi_motherboard")
+ACPI_MODULE_NAME("acpi_motherboard")
 
 /* Dell use PNP0C01 instead of PNP0C02 */
 #define ACPI_MB_HID1                   "PNP0C01"
 #define ACPI_MB_HID2                   "PNP0C02"
-
 /**
  * Doesn't care about legacy IO ports, only IO ports beyond 0x1000 are reserved
  * Doesn't care about the failure of 'request_region', since other may reserve 
@@ -44,15 +43,12 @@ ACPI_MODULE_NAME            ("acpi_motherboard")
 #define IS_RESERVED_ADDR(base, len) \
        (((len) > 0) && ((base) > 0) && ((base) + (len) < IO_SPACE_LIMIT) \
        && ((base) + (len) > PCIBIOS_MIN_IO))
-
 /*
  * Clearing the flag (IORESOURCE_BUSY) allows drivers to use
  * the io ports if they really know they can use it, while
  * still preventing hotplug PCI devices from using it. 
  */
-
-static acpi_status
-acpi_reserve_io_ranges (struct acpi_resource *res, void *data)
+static acpi_status acpi_reserve_io_ranges(struct acpi_resource *res, void *data)
 {
        struct resource *requested_res = NULL;
 
@@ -63,22 +59,32 @@ acpi_reserve_io_ranges (struct acpi_resource *res, void *data)
 
                if (io_res->min_base_address != io_res->max_base_address)
                        return_VALUE(AE_OK);
-               if (IS_RESERVED_ADDR(io_res->min_base_address, io_res->range_length)) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Motherboard resources 0x%08x - 0x%08x\n",
-                               io_res->min_base_address, 
-                               io_res->min_base_address + io_res->range_length));
-                       requested_res = request_region(io_res->min_base_address, 
-                               io_res->range_length, "motherboard");
+               if (IS_RESERVED_ADDR
+                   (io_res->min_base_address, io_res->range_length)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "Motherboard resources 0x%08x - 0x%08x\n",
+                                         io_res->min_base_address,
+                                         io_res->min_base_address +
+                                         io_res->range_length));
+                       requested_res =
+                           request_region(io_res->min_base_address,
+                                          io_res->range_length, "motherboard");
                }
        } else if (res->id == ACPI_RSTYPE_FIXED_IO) {
-               struct acpi_resource_fixed_io *fixed_io_res = &res->data.fixed_io;
-
-               if (IS_RESERVED_ADDR(fixed_io_res->base_address, fixed_io_res->range_length)) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Motherboard resources 0x%08x - 0x%08x\n",
-                               fixed_io_res->base_address, 
-                               fixed_io_res->base_address + fixed_io_res->range_length));
-                       requested_res = request_region(fixed_io_res->base_address, 
-                               fixed_io_res->range_length, "motherboard");
+               struct acpi_resource_fixed_io *fixed_io_res =
+                   &res->data.fixed_io;
+
+               if (IS_RESERVED_ADDR
+                   (fixed_io_res->base_address, fixed_io_res->range_length)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "Motherboard resources 0x%08x - 0x%08x\n",
+                                         fixed_io_res->base_address,
+                                         fixed_io_res->base_address +
+                                         fixed_io_res->range_length));
+                       requested_res =
+                           request_region(fixed_io_res->base_address,
+                                          fixed_io_res->range_length,
+                                          "motherboard");
                }
        } else {
                /* Memory mapped IO? */
@@ -89,72 +95,70 @@ acpi_reserve_io_ranges (struct acpi_resource *res, void *data)
        return_VALUE(AE_OK);
 }
 
-static int acpi_motherboard_add (struct acpi_device *device)
+static int acpi_motherboard_add(struct acpi_device *device)
 {
        if (!device)
                return -EINVAL;
-       acpi_walk_resources(device->handle, METHOD_NAME__CRS, 
-               acpi_reserve_io_ranges, NULL);
+       acpi_walk_resources(device->handle, METHOD_NAME__CRS,
+                           acpi_reserve_io_ranges, NULL);
 
        return 0;
 }
 
 static struct acpi_driver acpi_motherboard_driver1 = {
-       .name =         "motherboard",
-       .class =        "",
-       .ids =          ACPI_MB_HID1,
-       .ops =  {
-               .add =          acpi_motherboard_add,
-       },
+       .name = "motherboard",
+       .class = "",
+       .ids = ACPI_MB_HID1,
+       .ops = {
+               .add = acpi_motherboard_add,
+               },
 };
 
 static struct acpi_driver acpi_motherboard_driver2 = {
-       .name =         "motherboard",
-       .class =        "",
-       .ids =          ACPI_MB_HID2,
-       .ops =  {
-               .add =          acpi_motherboard_add,
-       },
+       .name = "motherboard",
+       .class = "",
+       .ids = ACPI_MB_HID2,
+       .ops = {
+               .add = acpi_motherboard_add,
+               },
 };
 
-static void __init
-acpi_reserve_resources (void)
+static void __init acpi_reserve_resources(void)
 {
        if (acpi_gbl_FADT->xpm1a_evt_blk.address && acpi_gbl_FADT->pm1_evt_len)
-               request_region(acpi_gbl_FADT->xpm1a_evt_blk.address, 
-                       acpi_gbl_FADT->pm1_evt_len, "PM1a_EVT_BLK");
+               request_region(acpi_gbl_FADT->xpm1a_evt_blk.address,
+                              acpi_gbl_FADT->pm1_evt_len, "PM1a_EVT_BLK");
 
        if (acpi_gbl_FADT->xpm1b_evt_blk.address && acpi_gbl_FADT->pm1_evt_len)
                request_region(acpi_gbl_FADT->xpm1b_evt_blk.address,
-                       acpi_gbl_FADT->pm1_evt_len, "PM1b_EVT_BLK");
+                              acpi_gbl_FADT->pm1_evt_len, "PM1b_EVT_BLK");
 
        if (acpi_gbl_FADT->xpm1a_cnt_blk.address && acpi_gbl_FADT->pm1_cnt_len)
-               request_region(acpi_gbl_FADT->xpm1a_cnt_blk.address, 
-                       acpi_gbl_FADT->pm1_cnt_len, "PM1a_CNT_BLK");
+               request_region(acpi_gbl_FADT->xpm1a_cnt_blk.address,
+                              acpi_gbl_FADT->pm1_cnt_len, "PM1a_CNT_BLK");
 
        if (acpi_gbl_FADT->xpm1b_cnt_blk.address && acpi_gbl_FADT->pm1_cnt_len)
-               request_region(acpi_gbl_FADT->xpm1b_cnt_blk.address, 
-                       acpi_gbl_FADT->pm1_cnt_len, "PM1b_CNT_BLK");
+               request_region(acpi_gbl_FADT->xpm1b_cnt_blk.address,
+                              acpi_gbl_FADT->pm1_cnt_len, "PM1b_CNT_BLK");
 
        if (acpi_gbl_FADT->xpm_tmr_blk.address && acpi_gbl_FADT->pm_tm_len == 4)
-               request_region(acpi_gbl_FADT->xpm_tmr_blk.address,
-                       4, "PM_TMR");
+               request_region(acpi_gbl_FADT->xpm_tmr_blk.address, 4, "PM_TMR");
 
        if (acpi_gbl_FADT->xpm2_cnt_blk.address && acpi_gbl_FADT->pm2_cnt_len)
                request_region(acpi_gbl_FADT->xpm2_cnt_blk.address,
-                       acpi_gbl_FADT->pm2_cnt_len, "PM2_CNT_BLK");
+                              acpi_gbl_FADT->pm2_cnt_len, "PM2_CNT_BLK");
 
        /* Length of GPE blocks must be a non-negative multiple of 2 */
 
        if (acpi_gbl_FADT->xgpe0_blk.address && acpi_gbl_FADT->gpe0_blk_len &&
-                       !(acpi_gbl_FADT->gpe0_blk_len & 0x1))
+           !(acpi_gbl_FADT->gpe0_blk_len & 0x1))
                request_region(acpi_gbl_FADT->xgpe0_blk.address,
-                       acpi_gbl_FADT->gpe0_blk_len, "GPE0_BLK");
+                              acpi_gbl_FADT->gpe0_blk_len, "GPE0_BLK");
 
        if (acpi_gbl_FADT->xgpe1_blk.address && acpi_gbl_FADT->gpe1_blk_len &&
-                       !(acpi_gbl_FADT->gpe1_blk_len & 0x1))
+           !(acpi_gbl_FADT->gpe1_blk_len & 0x1))
                request_region(acpi_gbl_FADT->xgpe1_blk.address,
-                       acpi_gbl_FADT->gpe1_blk_len, "GPE1_BLK");
+                              acpi_gbl_FADT->gpe1_blk_len, "GPE1_BLK");
 }
 
 static int __init acpi_motherboard_init(void)
@@ -166,7 +170,7 @@ static int __init acpi_motherboard_init(void)
         * This module must run after scan.c
         */
        if (!acpi_disabled)
-               acpi_reserve_resources ();
+               acpi_reserve_resources();
        return 0;
 }
 
index ece7a9dedd5c740a4b5f95c194538b7ec48513e5..edfbe34600f5178b66b9ec39f18c768eee2b1dfd 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/amlcode.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acdispat.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsaccess")
-
+ACPI_MODULE_NAME("nsaccess")
 
 /*******************************************************************************
  *
  * MUTEX:       Locks namespace for entire execution
  *
  ******************************************************************************/
-
-acpi_status
-acpi_ns_root_initialize (
-       void)
+acpi_status acpi_ns_root_initialize(void)
 {
-       acpi_status                         status;
+       acpi_status status;
        const struct acpi_predefined_names *init_val = NULL;
-       struct acpi_namespace_node          *new_node;
-       union acpi_operand_object           *obj_desc;
-       acpi_string                         val = NULL;
-
-
-       ACPI_FUNCTION_TRACE ("ns_root_initialize");
+       struct acpi_namespace_node *new_node;
+       union acpi_operand_object *obj_desc;
+       acpi_string val = NULL;
 
+       ACPI_FUNCTION_TRACE("ns_root_initialize");
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -102,24 +94,26 @@ acpi_ns_root_initialize (
 
        /* Enter the pre-defined names in the name table */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "Entering predefined entries into namespace\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Entering predefined entries into namespace\n"));
 
        for (init_val = acpi_gbl_pre_defined_names; init_val->name; init_val++) {
                /* _OSI is optional for now, will be permanent later */
 
-               if (!ACPI_STRCMP (init_val->name, "_OSI") && !acpi_gbl_create_osi_method) {
+               if (!ACPI_STRCMP(init_val->name, "_OSI")
+                   && !acpi_gbl_create_osi_method) {
                        continue;
                }
 
-               status = acpi_ns_lookup (NULL, init_val->name, init_val->type,
-                                 ACPI_IMODE_LOAD_PASS2, ACPI_NS_NO_UPSEARCH,
-                                 NULL, &new_node);
+               status = acpi_ns_lookup(NULL, init_val->name, init_val->type,
+                                       ACPI_IMODE_LOAD_PASS2,
+                                       ACPI_NS_NO_UPSEARCH, NULL, &new_node);
 
-               if (ACPI_FAILURE (status) || (!new_node)) /* Must be on same line for code converter */ {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Could not create predefined name %s, %s\n",
-                               init_val->name, acpi_format_exception (status)));
+               if (ACPI_FAILURE(status) || (!new_node)) {      /* Must be on same line for code converter */
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Could not create predefined name %s, %s\n",
+                                         init_val->name,
+                                         acpi_format_exception(status)));
                }
 
                /*
@@ -128,11 +122,11 @@ acpi_ns_root_initialize (
                 * initial value, create the initial value.
                 */
                if (init_val->val) {
-                       status = acpi_os_predefined_override (init_val, &val);
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Could not override predefined %s\n",
-                                       init_val->name));
+                       status = acpi_os_predefined_override(init_val, &val);
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Could not override predefined %s\n",
+                                                 init_val->name));
                        }
 
                        if (!val) {
@@ -143,7 +137,8 @@ acpi_ns_root_initialize (
                         * Entry requests an initial value, allocate a
                         * descriptor for it.
                         */
-                       obj_desc = acpi_ut_create_internal_object (init_val->type);
+                       obj_desc =
+                           acpi_ut_create_internal_object(init_val->type);
                        if (!obj_desc) {
                                status = AE_NO_MEMORY;
                                goto unlock_and_exit;
@@ -156,55 +151,62 @@ acpi_ns_root_initialize (
                         */
                        switch (init_val->type) {
                        case ACPI_TYPE_METHOD:
-                               obj_desc->method.param_count = (u8) ACPI_TO_INTEGER (val);
+                               obj_desc->method.param_count =
+                                   (u8) ACPI_TO_INTEGER(val);
                                obj_desc->common.flags |= AOPOBJ_DATA_VALID;
 
-#if defined (_ACPI_ASL_COMPILER) || defined (_ACPI_DUMP_App)
+#if defined (ACPI_ASL_COMPILER)
 
-                               /*
-                                * i_aSL Compiler cheats by putting parameter count
-                                * in the owner_iD
-                                */
-                               new_node->owner_id = obj_desc->method.param_count;
+                               /* save the parameter count for the i_aSL compiler */
+
+                               new_node->value = obj_desc->method.param_count;
 #else
                                /* Mark this as a very SPECIAL method */
 
-                               obj_desc->method.method_flags = AML_METHOD_INTERNAL_ONLY;
-                               obj_desc->method.implementation = acpi_ut_osi_implementation;
+                               obj_desc->method.method_flags =
+                                   AML_METHOD_INTERNAL_ONLY;
+
+#ifndef ACPI_DUMP_APP
+                               obj_desc->method.implementation =
+                                   acpi_ut_osi_implementation;
+#endif
 #endif
                                break;
 
                        case ACPI_TYPE_INTEGER:
 
-                               obj_desc->integer.value = ACPI_TO_INTEGER (val);
+                               obj_desc->integer.value = ACPI_TO_INTEGER(val);
                                break;
 
-
                        case ACPI_TYPE_STRING:
 
                                /*
                                 * Build an object around the static string
                                 */
-                               obj_desc->string.length = (u32) ACPI_STRLEN (val);
+                               obj_desc->string.length =
+                                   (u32) ACPI_STRLEN(val);
                                obj_desc->string.pointer = val;
                                obj_desc->common.flags |= AOPOBJ_STATIC_POINTER;
                                break;
 
-
                        case ACPI_TYPE_MUTEX:
 
                                obj_desc->mutex.node = new_node;
-                               obj_desc->mutex.sync_level = (u8) (ACPI_TO_INTEGER (val) - 1);
+                               obj_desc->mutex.sync_level =
+                                   (u8) (ACPI_TO_INTEGER(val) - 1);
 
-                               if (ACPI_STRCMP (init_val->name, "_GL_") == 0) {
+                               if (ACPI_STRCMP(init_val->name, "_GL_") == 0) {
                                        /*
                                         * Create a counting semaphore for the
                                         * global lock
                                         */
-                                       status = acpi_os_create_semaphore (ACPI_NO_UNIT_LIMIT,
-                                                        1, &obj_desc->mutex.semaphore);
-                                       if (ACPI_FAILURE (status)) {
-                                               acpi_ut_remove_reference (obj_desc);
+                                       status =
+                                           acpi_os_create_semaphore
+                                           (ACPI_NO_UNIT_LIMIT, 1,
+                                            &obj_desc->mutex.semaphore);
+                                       if (ACPI_FAILURE(status)) {
+                                               acpi_ut_remove_reference
+                                                   (obj_desc);
                                                goto unlock_and_exit;
                                        }
 
@@ -212,56 +214,58 @@ acpi_ns_root_initialize (
                                         * We just created the mutex for the
                                         * global lock, save it
                                         */
-                                       acpi_gbl_global_lock_semaphore = obj_desc->mutex.semaphore;
-                               }
-                               else {
+                                       acpi_gbl_global_lock_semaphore =
+                                           obj_desc->mutex.semaphore;
+                               else {
                                        /* Create a mutex */
 
-                                       status = acpi_os_create_semaphore (1, 1,
-                                                          &obj_desc->mutex.semaphore);
-                                       if (ACPI_FAILURE (status)) {
-                                               acpi_ut_remove_reference (obj_desc);
+                                       status = acpi_os_create_semaphore(1, 1,
+                                                                         &obj_desc->
+                                                                         mutex.
+                                                                         semaphore);
+                                       if (ACPI_FAILURE(status)) {
+                                               acpi_ut_remove_reference
+                                                   (obj_desc);
                                                goto unlock_and_exit;
                                        }
                                }
                                break;
 
-
                        default:
 
-                               ACPI_REPORT_ERROR (("Unsupported initial type value %X\n",
-                                       init_val->type));
-                               acpi_ut_remove_reference (obj_desc);
+                               ACPI_REPORT_ERROR(("Unsupported initial type value %X\n", init_val->type));
+                               acpi_ut_remove_reference(obj_desc);
                                obj_desc = NULL;
                                continue;
                        }
 
                        /* Store pointer to value descriptor in the Node */
 
-                       status = acpi_ns_attach_object (new_node, obj_desc,
-                                        ACPI_GET_OBJECT_TYPE (obj_desc));
+                       status = acpi_ns_attach_object(new_node, obj_desc,
+                                                      ACPI_GET_OBJECT_TYPE
+                                                      (obj_desc));
 
                        /* Remove local reference to the object */
 
-                       acpi_ut_remove_reference (obj_desc);
+                       acpi_ut_remove_reference(obj_desc);
                }
        }
 
-
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
 
        /* Save a handle to "_GPE", it is always present */
 
-       if (ACPI_SUCCESS (status)) {
-               status = acpi_ns_get_node_by_path ("\\_GPE", NULL, ACPI_NS_NO_UPSEARCH,
-                                 &acpi_gbl_fadt_gpe_device);
+       if (ACPI_SUCCESS(status)) {
+               status =
+                   acpi_ns_get_node_by_path("\\_GPE", NULL,
+                                            ACPI_NS_NO_UPSEARCH,
+                                            &acpi_gbl_fadt_gpe_device);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_lookup
@@ -286,62 +290,57 @@ unlock_and_exit:
  ******************************************************************************/
 
 acpi_status
-acpi_ns_lookup (
-       union acpi_generic_state        *scope_info,
-       char                            *pathname,
-       acpi_object_type                type,
-       acpi_interpreter_mode           interpreter_mode,
-       u32                             flags,
-       struct acpi_walk_state          *walk_state,
-       struct acpi_namespace_node      **return_node)
+acpi_ns_lookup(union acpi_generic_state *scope_info,
+              char *pathname,
+              acpi_object_type type,
+              acpi_interpreter_mode interpreter_mode,
+              u32 flags,
+              struct acpi_walk_state *walk_state,
+              struct acpi_namespace_node **return_node)
 {
-       acpi_status                     status;
-       char                            *path = pathname;
-       struct acpi_namespace_node      *prefix_node;
-       struct acpi_namespace_node      *current_node = NULL;
-       struct acpi_namespace_node      *this_node = NULL;
-       u32                             num_segments;
-       u32                             num_carats;
-       acpi_name                       simple_name;
-       acpi_object_type                type_to_check_for;
-       acpi_object_type                this_search_type;
-       u32                             search_parent_flag = ACPI_NS_SEARCH_PARENT;
-       u32                             local_flags = flags & ~(ACPI_NS_ERROR_IF_FOUND |
-                          ACPI_NS_SEARCH_PARENT);
-
-
-       ACPI_FUNCTION_TRACE ("ns_lookup");
-
+       acpi_status status;
+       char *path = pathname;
+       struct acpi_namespace_node *prefix_node;
+       struct acpi_namespace_node *current_node = NULL;
+       struct acpi_namespace_node *this_node = NULL;
+       u32 num_segments;
+       u32 num_carats;
+       acpi_name simple_name;
+       acpi_object_type type_to_check_for;
+       acpi_object_type this_search_type;
+       u32 search_parent_flag = ACPI_NS_SEARCH_PARENT;
+       u32 local_flags = flags & ~(ACPI_NS_ERROR_IF_FOUND |
+                                   ACPI_NS_SEARCH_PARENT);
+
+       ACPI_FUNCTION_TRACE("ns_lookup");
 
        if (!return_node) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        acpi_gbl_ns_lookup_count++;
        *return_node = ACPI_ENTRY_NOT_FOUND;
 
        if (!acpi_gbl_root_node) {
-               return_ACPI_STATUS (AE_NO_NAMESPACE);
+               return_ACPI_STATUS(AE_NO_NAMESPACE);
        }
 
        /*
         * Get the prefix scope.
         * A null scope means use the root scope
         */
-       if ((!scope_info) ||
-               (!scope_info->scope.node)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                       "Null scope prefix, using root node (%p)\n",
-                       acpi_gbl_root_node));
+       if ((!scope_info) || (!scope_info->scope.node)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                 "Null scope prefix, using root node (%p)\n",
+                                 acpi_gbl_root_node));
 
                prefix_node = acpi_gbl_root_node;
-       }
-       else {
+       } else {
                prefix_node = scope_info->scope.node;
-               if (ACPI_GET_DESCRIPTOR_TYPE (prefix_node) != ACPI_DESC_TYPE_NAMED) {
-                       ACPI_REPORT_ERROR (("ns_lookup: %p is not a namespace node [%s]\n",
-                                       prefix_node, acpi_ut_get_descriptor_name (prefix_node)));
-                       return_ACPI_STATUS (AE_AML_INTERNAL);
+               if (ACPI_GET_DESCRIPTOR_TYPE(prefix_node) !=
+                   ACPI_DESC_TYPE_NAMED) {
+                       ACPI_REPORT_ERROR(("ns_lookup: %p is not a namespace node [%s]\n", prefix_node, acpi_ut_get_descriptor_name(prefix_node)));
+                       return_ACPI_STATUS(AE_AML_INTERNAL);
                }
 
                /*
@@ -349,9 +348,9 @@ acpi_ns_lookup (
                 * Device/Method, etc.)  It could be a Package or other object node.
                 * Backup up the tree to find the containing scope node.
                 */
-               while (!acpi_ns_opens_scope (prefix_node->type) &&
-                               prefix_node->type != ACPI_TYPE_ANY) {
-                       prefix_node = acpi_ns_get_parent_node (prefix_node);
+               while (!acpi_ns_opens_scope(prefix_node->type) &&
+                      prefix_node->type != ACPI_TYPE_ANY) {
+                       prefix_node = acpi_ns_get_parent_node(prefix_node);
                }
        }
 
@@ -366,13 +365,13 @@ acpi_ns_lookup (
                /* A Null name_path is allowed and refers to the root */
 
                num_segments = 0;
-               this_node    = acpi_gbl_root_node;
-               path     = "";
+               this_node = acpi_gbl_root_node;
+               path = "";
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                       "Null Pathname (Zero segments), Flags=%X\n", flags));
-       }
-       else {
+               ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                 "Null Pathname (Zero segments), Flags=%X\n",
+                                 flags));
+       else {
                /*
                 * Name pointer is valid (and must be in internal name format)
                 *
@@ -396,15 +395,16 @@ acpi_ns_lookup (
 
                        path++;
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                               "Path is absolute from root [%p]\n", this_node));
-               }
-               else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "Path is absolute from root [%p]\n",
+                                         this_node));
+               else {
                        /* Pathname is relative to current scope, start there */
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                               "Searching relative to prefix scope [%4.4s] (%p)\n",
-                               acpi_ut_get_node_name (prefix_node), prefix_node));
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "Searching relative to prefix scope [%4.4s] (%p)\n",
+                                         acpi_ut_get_node_name(prefix_node),
+                                         prefix_node));
 
                        /*
                         * Handle multiple Parent Prefixes (carat) by just getting
@@ -425,20 +425,20 @@ acpi_ns_lookup (
                                /* Backup to the parent node */
 
                                num_carats++;
-                               this_node = acpi_ns_get_parent_node (this_node);
+                               this_node = acpi_ns_get_parent_node(this_node);
                                if (!this_node) {
                                        /* Current scope has no parent scope */
 
-                                       ACPI_REPORT_ERROR (
-                                               ("ACPI path has too many parent prefixes (^) - reached beyond root node\n"));
-                                       return_ACPI_STATUS (AE_NOT_FOUND);
+                                       ACPI_REPORT_ERROR(("ACPI path has too many parent prefixes (^) - reached beyond root node\n"));
+                                       return_ACPI_STATUS(AE_NOT_FOUND);
                                }
                        }
 
                        if (search_parent_flag == ACPI_NS_NO_UPSEARCH) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                                       "Search scope is [%4.4s], path has %d carat(s)\n",
-                                       acpi_ut_get_node_name (this_node), num_carats));
+                               ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                                 "Search scope is [%4.4s], path has %d carat(s)\n",
+                                                 acpi_ut_get_node_name
+                                                 (this_node), num_carats));
                        }
                }
 
@@ -464,9 +464,9 @@ acpi_ns_lookup (
                        num_segments = 0;
                        type = this_node->type;
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                               "Prefix-only Pathname (Zero name segments), Flags=%X\n",
-                               flags));
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "Prefix-only Pathname (Zero name segments), Flags=%X\n",
+                                         flags));
                        break;
 
                case AML_DUAL_NAME_PREFIX:
@@ -480,8 +480,9 @@ acpi_ns_lookup (
                        num_segments = 2;
                        path++;
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                               "Dual Pathname (2 segments, Flags=%X)\n", flags));
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "Dual Pathname (2 segments, Flags=%X)\n",
+                                         flags));
                        break;
 
                case AML_MULTI_NAME_PREFIX_OP:
@@ -493,12 +494,12 @@ acpi_ns_lookup (
                        /* Extract segment count, point to first name segment */
 
                        path++;
-                       num_segments = (u32) (u8) *path;
+                       num_segments = (u32) (u8) * path;
                        path++;
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                               "Multi Pathname (%d Segments, Flags=%X) \n",
-                               num_segments, flags));
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "Multi Pathname (%d Segments, Flags=%X) \n",
+                                         num_segments, flags));
                        break;
 
                default:
@@ -508,15 +509,15 @@ acpi_ns_lookup (
                         */
                        num_segments = 1;
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                               "Simple Pathname (1 segment, Flags=%X)\n", flags));
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "Simple Pathname (1 segment, Flags=%X)\n",
+                                         flags));
                        break;
                }
 
-               ACPI_DEBUG_EXEC (acpi_ns_print_pathname (num_segments, path));
+               ACPI_DEBUG_EXEC(acpi_ns_print_pathname(num_segments, path));
        }
 
-
        /*
         * Search namespace for each segment of the name.  Loop through and
         * verify (or add to the namespace) each name segment.
@@ -540,7 +541,7 @@ acpi_ns_lookup (
                         * requested it AND we have a single, non-fully-qualified name_seg
                         */
                        if ((search_parent_flag != ACPI_NS_NO_UPSEARCH) &&
-                               (flags & ACPI_NS_SEARCH_PARENT)) {
+                           (flags & ACPI_NS_SEARCH_PARENT)) {
                                local_flags |= ACPI_NS_SEARCH_PARENT;
                        }
 
@@ -553,24 +554,28 @@ acpi_ns_lookup (
 
                /* Extract one ACPI name from the front of the pathname */
 
-               ACPI_MOVE_32_TO_32 (&simple_name, path);
+               ACPI_MOVE_32_TO_32(&simple_name, path);
 
                /* Try to find the single (4 character) ACPI name */
 
-               status = acpi_ns_search_and_enter (simple_name, walk_state, current_node,
-                                interpreter_mode, this_search_type, local_flags, &this_node);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_ns_search_and_enter(simple_name, walk_state,
+                                            current_node, interpreter_mode,
+                                            this_search_type, local_flags,
+                                            &this_node);
+               if (ACPI_FAILURE(status)) {
                        if (status == AE_NOT_FOUND) {
                                /* Name not found in ACPI namespace */
 
-                               ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                                       "Name [%4.4s] not found in scope [%4.4s] %p\n",
-                                       (char *) &simple_name, (char *) &current_node->name,
-                                       current_node));
+                               ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                                 "Name [%4.4s] not found in scope [%4.4s] %p\n",
+                                                 (char *)&simple_name,
+                                                 (char *)&current_node->name,
+                                                 current_node));
                        }
 
                        *return_node = this_node;
-                       return_ACPI_STATUS (status);
+                       return_ACPI_STATUS(status);
                }
 
                /*
@@ -586,19 +591,16 @@ acpi_ns_lookup (
                 *
                 * Then we have a type mismatch.  Just warn and ignore it.
                 */
-               if ((num_segments       == 0)                               &&
-                       (type_to_check_for  != ACPI_TYPE_ANY)                   &&
-                       (type_to_check_for  != ACPI_TYPE_LOCAL_ALIAS)           &&
-                       (type_to_check_for  != ACPI_TYPE_LOCAL_METHOD_ALIAS)    &&
-                       (type_to_check_for  != ACPI_TYPE_LOCAL_SCOPE)           &&
-                       (this_node->type    != ACPI_TYPE_ANY)                   &&
-                       (this_node->type    != type_to_check_for)) {
+               if ((num_segments == 0) &&
+                   (type_to_check_for != ACPI_TYPE_ANY) &&
+                   (type_to_check_for != ACPI_TYPE_LOCAL_ALIAS) &&
+                   (type_to_check_for != ACPI_TYPE_LOCAL_METHOD_ALIAS) &&
+                   (type_to_check_for != ACPI_TYPE_LOCAL_SCOPE) &&
+                   (this_node->type != ACPI_TYPE_ANY) &&
+                   (this_node->type != type_to_check_for)) {
                        /* Complain about a type mismatch */
 
-                       ACPI_REPORT_WARNING (
-                               ("ns_lookup: Type mismatch on %4.4s (%s), searching for (%s)\n",
-                               (char *) &simple_name, acpi_ut_get_type_name (this_node->type),
-                               acpi_ut_get_type_name (type_to_check_for)));
+                       ACPI_REPORT_WARNING(("ns_lookup: Type mismatch on %4.4s (%s), searching for (%s)\n", (char *)&simple_name, acpi_ut_get_type_name(this_node->type), acpi_ut_get_type_name(type_to_check_for)));
                }
 
                /*
@@ -624,15 +626,16 @@ acpi_ns_lookup (
                 * If entry is a type which opens a scope, push the new scope on the
                 * scope stack.
                 */
-               if (acpi_ns_opens_scope (type)) {
-                       status = acpi_ds_scope_stack_push (this_node, type, walk_state);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+               if (acpi_ns_opens_scope(type)) {
+                       status =
+                           acpi_ds_scope_stack_push(this_node, type,
+                                                    walk_state);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
                }
        }
 
        *return_node = this_node;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
index 5653a19d7172b7f1a6383e5adf6169d8005265bb..cc7a85f8cfe686004d29abd3c7e735367e021472 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsalloc")
+ACPI_MODULE_NAME("nsalloc")
 
 /* Local prototypes */
-
-static void
-acpi_ns_remove_reference (
-       struct acpi_namespace_node      *node);
-
+static void acpi_ns_remove_reference(struct acpi_namespace_node *node);
 
 /*******************************************************************************
  *
@@ -68,31 +62,26 @@ acpi_ns_remove_reference (
  *
  ******************************************************************************/
 
-struct acpi_namespace_node *
-acpi_ns_create_node (
-       u32                             name)
+struct acpi_namespace_node *acpi_ns_create_node(u32 name)
 {
-       struct acpi_namespace_node      *node;
-
+       struct acpi_namespace_node *node;
 
-       ACPI_FUNCTION_TRACE ("ns_create_node");
+       ACPI_FUNCTION_TRACE("ns_create_node");
 
-
-       node = ACPI_MEM_CALLOCATE (sizeof (struct acpi_namespace_node));
+       node = ACPI_MEM_CALLOCATE(sizeof(struct acpi_namespace_node));
        if (!node) {
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
-       ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_NSNODE].total_allocated++);
+       ACPI_MEM_TRACKING(acpi_gbl_ns_node_list->total_allocated++);
 
-       node->name.integer   = name;
+       node->name.integer = name;
        node->reference_count = 1;
-       ACPI_SET_DESCRIPTOR_TYPE (node, ACPI_DESC_TYPE_NAMED);
+       ACPI_SET_DESCRIPTOR_TYPE(node, ACPI_DESC_TYPE_NAMED);
 
-       return_PTR (node);
+       return_PTR(node);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_delete_node
@@ -105,19 +94,15 @@ acpi_ns_create_node (
  *
  ******************************************************************************/
 
-void
-acpi_ns_delete_node (
-       struct acpi_namespace_node      *node)
+void acpi_ns_delete_node(struct acpi_namespace_node *node)
 {
-       struct acpi_namespace_node      *parent_node;
-       struct acpi_namespace_node      *prev_node;
-       struct acpi_namespace_node      *next_node;
-
+       struct acpi_namespace_node *parent_node;
+       struct acpi_namespace_node *prev_node;
+       struct acpi_namespace_node *next_node;
 
-       ACPI_FUNCTION_TRACE_PTR ("ns_delete_node", node);
+       ACPI_FUNCTION_TRACE_PTR("ns_delete_node", node);
 
-
-       parent_node = acpi_ns_get_parent_node (node);
+       parent_node = acpi_ns_get_parent_node(node);
 
        prev_node = NULL;
        next_node = parent_node->child;
@@ -136,32 +121,29 @@ acpi_ns_delete_node (
                if (next_node->flags & ANOBJ_END_OF_PEER_LIST) {
                        prev_node->flags |= ANOBJ_END_OF_PEER_LIST;
                }
-       }
-       else {
+       } else {
                /* Node is first child (has no previous peer) */
 
                if (next_node->flags & ANOBJ_END_OF_PEER_LIST) {
                        /* No peers at all */
 
                        parent_node->child = NULL;
-               }
-               else {   /* Link peer list to parent */
+               } else {        /* Link peer list to parent */
 
                        parent_node->child = next_node->peer;
                }
        }
 
-       ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_NSNODE].total_freed++);
+       ACPI_MEM_TRACKING(acpi_gbl_ns_node_list->total_freed++);
 
        /*
         * Detach an object if there is one then delete the node
         */
-       acpi_ns_detach_object (node);
-       ACPI_MEM_FREE (node);
+       acpi_ns_detach_object(node);
+       ACPI_MEM_FREE(node);
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_install_node
@@ -176,30 +158,20 @@ acpi_ns_delete_node (
  * DESCRIPTION: Initialize a new namespace node and install it amongst
  *              its peers.
  *
- *              Note: Current namespace lookup is linear search.  However, the
- *              nodes are linked in alphabetical order to 1) put all reserved
- *              names (start with underscore) first, and to 2) make a readable
- *              namespace dump.
+ *              Note: Current namespace lookup is linear search. This appears
+ *              to be sufficient as namespace searches consume only a small
+ *              fraction of the execution time of the ACPI subsystem.
  *
  ******************************************************************************/
 
-void
-acpi_ns_install_node (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_namespace_node      *parent_node,   /* Parent */
-       struct acpi_namespace_node      *node,          /* New Child*/
-       acpi_object_type                type)
+void acpi_ns_install_node(struct acpi_walk_state *walk_state, struct acpi_namespace_node *parent_node, /* Parent */
+                         struct acpi_namespace_node *node,     /* New Child */
+                         acpi_object_type type)
 {
-       u16                             owner_id = 0;
-       struct acpi_namespace_node      *child_node;
-#ifdef ACPI_ALPHABETIC_NAMESPACE
-
-       struct acpi_namespace_node      *previous_child_node;
-#endif
-
-
-       ACPI_FUNCTION_TRACE ("ns_install_node");
+       acpi_owner_id owner_id = 0;
+       struct acpi_namespace_node *child_node;
 
+       ACPI_FUNCTION_TRACE("ns_install_node");
 
        /*
         * Get the owner ID from the Walk state
@@ -217,59 +189,7 @@ acpi_ns_install_node (
                parent_node->child = node;
                node->flags |= ANOBJ_END_OF_PEER_LIST;
                node->peer = parent_node;
-       }
-       else {
-#ifdef ACPI_ALPHABETIC_NAMESPACE
-               /*
-                * Walk the list whilst searching for the correct
-                * alphabetic placement.
-                */
-               previous_child_node = NULL;
-               while (acpi_ns_compare_names (acpi_ut_get_node_name (child_node),
-                                acpi_ut_get_node_name (node)) < 0) {
-                       if (child_node->flags & ANOBJ_END_OF_PEER_LIST) {
-                               /* Last peer;  Clear end-of-list flag */
-
-                               child_node->flags &= ~ANOBJ_END_OF_PEER_LIST;
-
-                               /* This node is the new peer to the child node */
-
-                               child_node->peer = node;
-
-                               /* This node is the new end-of-list */
-
-                               node->flags |= ANOBJ_END_OF_PEER_LIST;
-                               node->peer = parent_node;
-                               break;
-                       }
-
-                       /* Get next peer */
-
-                       previous_child_node = child_node;
-                       child_node = child_node->peer;
-               }
-
-               /* Did the node get inserted at the end-of-list? */
-
-               if (!(node->flags & ANOBJ_END_OF_PEER_LIST)) {
-                       /*
-                        * Loop above terminated without reaching the end-of-list.
-                        * Insert the new node at the current location
-                        */
-                       if (previous_child_node) {
-                               /* Insert node alphabetically */
-
-                               node->peer = child_node;
-                               previous_child_node->peer = node;
-                       }
-                       else {
-                               /* Insert node alphabetically at start of list */
-
-                               node->peer = child_node;
-                               parent_node->child = node;
-                       }
-               }
-#else
+       } else {
                while (!(child_node->flags & ANOBJ_END_OF_PEER_LIST)) {
                        child_node = child_node->peer;
                }
@@ -279,9 +199,8 @@ acpi_ns_install_node (
                /* Clear end-of-list flag */
 
                child_node->flags &= ~ANOBJ_END_OF_PEER_LIST;
-               node->flags     |= ANOBJ_END_OF_PEER_LIST;
+               node->flags |= ANOBJ_END_OF_PEER_LIST;
                node->peer = parent_node;
-#endif
        }
 
        /* Init the new entry */
@@ -289,24 +208,25 @@ acpi_ns_install_node (
        node->owner_id = owner_id;
        node->type = (u8) type;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-               "%4.4s (%s) [Node %p Owner %X] added to %4.4s (%s) [Node %p]\n",
-               acpi_ut_get_node_name (node), acpi_ut_get_type_name (node->type), node, owner_id,
-               acpi_ut_get_node_name (parent_node), acpi_ut_get_type_name (parent_node->type),
-               parent_node));
+       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                         "%4.4s (%s) [Node %p Owner %X] added to %4.4s (%s) [Node %p]\n",
+                         acpi_ut_get_node_name(node),
+                         acpi_ut_get_type_name(node->type), node, owner_id,
+                         acpi_ut_get_node_name(parent_node),
+                         acpi_ut_get_type_name(parent_node->type),
+                         parent_node));
 
        /*
         * Increment the reference count(s) of all parents up to
         * the root!
         */
-       while ((node = acpi_ns_get_parent_node (node)) != NULL) {
+       while ((node = acpi_ns_get_parent_node(node)) != NULL) {
                node->reference_count++;
        }
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_delete_children
@@ -320,18 +240,14 @@ acpi_ns_install_node (
  *
  ******************************************************************************/
 
-void
-acpi_ns_delete_children (
-       struct acpi_namespace_node      *parent_node)
+void acpi_ns_delete_children(struct acpi_namespace_node *parent_node)
 {
-       struct acpi_namespace_node      *child_node;
-       struct acpi_namespace_node      *next_node;
-       struct acpi_namespace_node      *node;
-       u8                              flags;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ns_delete_children", parent_node);
+       struct acpi_namespace_node *child_node;
+       struct acpi_namespace_node *next_node;
+       struct acpi_namespace_node *node;
+       u8 flags;
 
+       ACPI_FUNCTION_TRACE_PTR("ns_delete_children", parent_node);
 
        if (!parent_node) {
                return_VOID;
@@ -350,48 +266,48 @@ acpi_ns_delete_children (
        do {
                /* Get the things we need */
 
-               next_node   = child_node->peer;
-               flags       = child_node->flags;
+               next_node = child_node->peer;
+               flags = child_node->flags;
 
                /* Grandchildren should have all been deleted already */
 
                if (child_node->child) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Found a grandchild! P=%p C=%p\n",
-                               parent_node, child_node));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Found a grandchild! P=%p C=%p\n",
+                                         parent_node, child_node));
                }
 
                /* Now we can free this child object */
 
-               ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_NSNODE].total_freed++);
+               ACPI_MEM_TRACKING(acpi_gbl_ns_node_list->total_freed++);
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Object %p, Remaining %X\n",
-                       child_node, acpi_gbl_current_node_count));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "Object %p, Remaining %X\n", child_node,
+                                 acpi_gbl_current_node_count));
 
                /*
                 * Detach an object if there is one, then free the child node
                 */
-               acpi_ns_detach_object (child_node);
+               acpi_ns_detach_object(child_node);
 
                /*
                 * Decrement the reference count(s) of all parents up to
                 * the root! (counts were incremented when the node was created)
                 */
                node = child_node;
-               while ((node = acpi_ns_get_parent_node (node)) != NULL) {
+               while ((node = acpi_ns_get_parent_node(node)) != NULL) {
                        node->reference_count--;
                }
 
                /* There should be only one reference remaining on this node */
 
                if (child_node->reference_count != 1) {
-                       ACPI_REPORT_WARNING ((
-                               "Existing references (%d) on node being deleted (%p)\n",
-                               child_node->reference_count, child_node));
+                       ACPI_REPORT_WARNING(("Existing references (%d) on node being deleted (%p)\n", child_node->reference_count, child_node));
                }
 
                /* Now we can delete the node */
 
-               ACPI_MEM_FREE (child_node);
+               ACPI_MEM_FREE(child_node);
 
                /* And move on to the next child in the list */
 
@@ -399,7 +315,6 @@ acpi_ns_delete_children (
 
        } while (!(flags & ANOBJ_END_OF_PEER_LIST));
 
-
        /* Clear the parent's child pointer */
 
        parent_node->child = NULL;
@@ -407,7 +322,6 @@ acpi_ns_delete_children (
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_delete_namespace_subtree
@@ -421,16 +335,12 @@ acpi_ns_delete_children (
  *
  ******************************************************************************/
 
-void
-acpi_ns_delete_namespace_subtree (
-       struct acpi_namespace_node      *parent_node)
+void acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_node)
 {
-       struct acpi_namespace_node      *child_node = NULL;
-       u32                             level = 1;
-
-
-       ACPI_FUNCTION_TRACE ("ns_delete_namespace_subtree");
+       struct acpi_namespace_node *child_node = NULL;
+       u32 level = 1;
 
+       ACPI_FUNCTION_TRACE("ns_delete_namespace_subtree");
 
        if (!parent_node) {
                return_VOID;
@@ -443,16 +353,17 @@ acpi_ns_delete_namespace_subtree (
        while (level > 0) {
                /* Get the next node in this scope (NULL if none) */
 
-               child_node = acpi_ns_get_next_node (ACPI_TYPE_ANY, parent_node,
-                                child_node);
+               child_node = acpi_ns_get_next_node(ACPI_TYPE_ANY, parent_node,
+                                                  child_node);
                if (child_node) {
                        /* Found a child node - detach any attached object */
 
-                       acpi_ns_detach_object (child_node);
+                       acpi_ns_detach_object(child_node);
 
                        /* Check if this node has any children */
 
-                       if (acpi_ns_get_next_node (ACPI_TYPE_ANY, child_node, NULL)) {
+                       if (acpi_ns_get_next_node
+                           (ACPI_TYPE_ANY, child_node, NULL)) {
                                /*
                                 * There is at least one child of this node,
                                 * visit the node
@@ -461,8 +372,7 @@ acpi_ns_delete_namespace_subtree (
                                parent_node = child_node;
                                child_node = NULL;
                        }
-               }
-               else {
+               } else {
                        /*
                         * No more children of this parent node.
                         * Move up to the grandparent.
@@ -473,7 +383,7 @@ acpi_ns_delete_namespace_subtree (
                         * Now delete all of the children of this parent
                         * all at the same time.
                         */
-                       acpi_ns_delete_children (parent_node);
+                       acpi_ns_delete_children(parent_node);
 
                        /* New "last child" is this parent node */
 
@@ -481,14 +391,13 @@ acpi_ns_delete_namespace_subtree (
 
                        /* Move up the tree to the grandparent */
 
-                       parent_node = acpi_ns_get_parent_node (parent_node);
+                       parent_node = acpi_ns_get_parent_node(parent_node);
                }
        }
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_remove_reference
@@ -504,16 +413,12 @@ acpi_ns_delete_namespace_subtree (
  *
  ******************************************************************************/
 
-static void
-acpi_ns_remove_reference (
-       struct acpi_namespace_node      *node)
+static void acpi_ns_remove_reference(struct acpi_namespace_node *node)
 {
-       struct acpi_namespace_node      *parent_node;
-       struct acpi_namespace_node      *this_node;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_namespace_node *parent_node;
+       struct acpi_namespace_node *this_node;
 
+       ACPI_FUNCTION_ENTRY();
 
        /*
         * Decrement the reference count(s) of this node and all
@@ -523,7 +428,7 @@ acpi_ns_remove_reference (
        while (this_node) {
                /* Prepare to move up to parent */
 
-               parent_node = acpi_ns_get_parent_node (this_node);
+               parent_node = acpi_ns_get_parent_node(this_node);
 
                /* Decrement the reference count on this node */
 
@@ -534,15 +439,14 @@ acpi_ns_remove_reference (
                if (!this_node->reference_count) {
                        /* Delete all children and delete the node */
 
-                       acpi_ns_delete_children (this_node);
-                       acpi_ns_delete_node (this_node);
+                       acpi_ns_delete_children(this_node);
+                       acpi_ns_delete_node(this_node);
                }
 
                this_node = parent_node;
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_delete_namespace_by_owner
@@ -557,23 +461,23 @@ acpi_ns_remove_reference (
  *
  ******************************************************************************/
 
-void
-acpi_ns_delete_namespace_by_owner (
-       u16                             owner_id)
+void acpi_ns_delete_namespace_by_owner(acpi_owner_id owner_id)
 {
-       struct acpi_namespace_node      *child_node;
-       struct acpi_namespace_node      *deletion_node;
-       u32                             level;
-       struct acpi_namespace_node      *parent_node;
-
+       struct acpi_namespace_node *child_node;
+       struct acpi_namespace_node *deletion_node;
+       u32 level;
+       struct acpi_namespace_node *parent_node;
 
-       ACPI_FUNCTION_TRACE_U32 ("ns_delete_namespace_by_owner", owner_id);
+       ACPI_FUNCTION_TRACE_U32("ns_delete_namespace_by_owner", owner_id);
 
+       if (owner_id == 0) {
+               return_VOID;
+       }
 
-       parent_node   = acpi_gbl_root_node;
-       child_node    = NULL;
+       parent_node = acpi_gbl_root_node;
+       child_node = NULL;
        deletion_node = NULL;
-       level         = 1;
+       level = 1;
 
        /*
         * Traverse the tree of nodes until we bubble back up
@@ -584,10 +488,12 @@ acpi_ns_delete_namespace_by_owner (
                 * Get the next child of this parent node. When child_node is NULL,
                 * the first child of the parent is returned
                 */
-               child_node = acpi_ns_get_next_node (ACPI_TYPE_ANY, parent_node, child_node);
+               child_node =
+                   acpi_ns_get_next_node(ACPI_TYPE_ANY, parent_node,
+                                         child_node);
 
                if (deletion_node) {
-                       acpi_ns_remove_reference (deletion_node);
+                       acpi_ns_remove_reference(deletion_node);
                        deletion_node = NULL;
                }
 
@@ -595,12 +501,13 @@ acpi_ns_delete_namespace_by_owner (
                        if (child_node->owner_id == owner_id) {
                                /* Found a matching child node - detach any attached object */
 
-                               acpi_ns_detach_object (child_node);
+                               acpi_ns_detach_object(child_node);
                        }
 
                        /* Check if this node has any children */
 
-                       if (acpi_ns_get_next_node (ACPI_TYPE_ANY, child_node, NULL)) {
+                       if (acpi_ns_get_next_node
+                           (ACPI_TYPE_ANY, child_node, NULL)) {
                                /*
                                 * There is at least one child of this node,
                                 * visit the node
@@ -608,12 +515,10 @@ acpi_ns_delete_namespace_by_owner (
                                level++;
                                parent_node = child_node;
                                child_node = NULL;
-                       }
-                       else if (child_node->owner_id == owner_id) {
+                       } else if (child_node->owner_id == owner_id) {
                                deletion_node = child_node;
                        }
-               }
-               else {
+               } else {
                        /*
                         * No more children of this parent node.
                         * Move up to the grandparent.
@@ -631,62 +536,9 @@ acpi_ns_delete_namespace_by_owner (
 
                        /* Move up the tree to the grandparent */
 
-                       parent_node = acpi_ns_get_parent_node (parent_node);
+                       parent_node = acpi_ns_get_parent_node(parent_node);
                }
        }
 
        return_VOID;
 }
-
-
-#ifdef ACPI_ALPHABETIC_NAMESPACE
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ns_compare_names
- *
- * PARAMETERS:  Name1           - First name to compare
- *              Name2           - Second name to compare
- *
- * RETURN:      value from strncmp
- *
- * DESCRIPTION: Compare two ACPI names.  Names that are prefixed with an
- *              underscore are forced to be alphabetically first.
- *
- ******************************************************************************/
-
-int
-acpi_ns_compare_names (
-       char                            *name1,
-       char                            *name2)
-{
-       char                            reversed_name1[ACPI_NAME_SIZE];
-       char                            reversed_name2[ACPI_NAME_SIZE];
-       u32                             i;
-       u32                             j;
-
-
-       /*
-        * Replace all instances of "underscore" with a value that is smaller so
-        * that all names that are prefixed with underscore(s) are alphabetically
-        * first.
-        *
-        * Reverse the name bytewise so we can just do a 32-bit compare instead
-        * of a strncmp.
-        */
-       for (i = 0, j= (ACPI_NAME_SIZE - 1); i < ACPI_NAME_SIZE; i++, j--) {
-               reversed_name1[j] = name1[i];
-               if (name1[i] == '_') {
-                       reversed_name1[j] = '*';
-               }
-
-               reversed_name2[j] = name2[i];
-               if (name2[i] == '_') {
-                       reversed_name2[j] = '*';
-               }
-       }
-
-       return (*(int *) reversed_name1 - *(int *) reversed_name2);
-}
-#endif
-
-
index 6c2aef0e0dd4d47b8f451c487d7c83777a1f8cc8..9faf1d5c86ed8179ecdd7210df20f81d22b11d2a 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acparser.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsdump")
+ACPI_MODULE_NAME("nsdump")
 
 /* Local prototypes */
-
 #ifdef ACPI_OBSOLETE_FUNCTIONS
-void
-acpi_ns_dump_root_devices (
-       void);
+void acpi_ns_dump_root_devices(void);
 
 static acpi_status
-acpi_ns_dump_one_device (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value);
+acpi_ns_dump_one_device(acpi_handle obj_handle,
+                       u32 level, void *context, void **return_value);
 #endif
 
-
 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 /*******************************************************************************
  *
@@ -80,36 +71,38 @@ acpi_ns_dump_one_device (
  *
  ******************************************************************************/
 
-void
-acpi_ns_print_pathname (
-       u32                             num_segments,
-       char                            *pathname)
+void acpi_ns_print_pathname(u32 num_segments, char *pathname)
 {
-       ACPI_FUNCTION_NAME ("ns_print_pathname");
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_NAME("ns_print_pathname");
 
-       if (!(acpi_dbg_level & ACPI_LV_NAMES) || !(acpi_dbg_layer & ACPI_NAMESPACE)) {
+       if (!(acpi_dbg_level & ACPI_LV_NAMES)
+           || !(acpi_dbg_layer & ACPI_NAMESPACE)) {
                return;
        }
 
        /* Print the entire name */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "["));
+       ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "["));
 
        while (num_segments) {
-               acpi_os_printf ("%4.4s", pathname);
-               pathname += ACPI_NAME_SIZE;
+               for (i = 0; i < 4; i++) {
+                       ACPI_IS_PRINT(pathname[i]) ?
+                           acpi_os_printf("%c", pathname[i]) :
+                           acpi_os_printf("?");
+               }
 
+               pathname += ACPI_NAME_SIZE;
                num_segments--;
                if (num_segments) {
-                       acpi_os_printf (".");
+                       acpi_os_printf(".");
                }
        }
 
-       acpi_os_printf ("]\n");
+       acpi_os_printf("]\n");
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_dump_pathname
@@ -127,15 +120,10 @@ acpi_ns_print_pathname (
  ******************************************************************************/
 
 void
-acpi_ns_dump_pathname (
-       acpi_handle                     handle,
-       char                            *msg,
-       u32                             level,
-       u32                             component)
+acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component)
 {
 
-       ACPI_FUNCTION_TRACE ("ns_dump_pathname");
-
+       ACPI_FUNCTION_TRACE("ns_dump_pathname");
 
        /* Do this only if the requested debug level and component are enabled */
 
@@ -145,12 +133,11 @@ acpi_ns_dump_pathname (
 
        /* Convert handle to a full pathname and print it (with supplied message) */
 
-       acpi_ns_print_node_pathname (handle, msg);
-       acpi_os_printf ("\n");
+       acpi_ns_print_node_pathname(handle, msg);
+       acpi_os_printf("\n");
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_dump_one_object
@@ -168,24 +155,19 @@ acpi_ns_dump_pathname (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_dump_one_object (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value)
+acpi_ns_dump_one_object(acpi_handle obj_handle,
+                       u32 level, void *context, void **return_value)
 {
-       struct acpi_walk_info           *info = (struct acpi_walk_info *) context;
-       struct acpi_namespace_node      *this_node;
-       union acpi_operand_object       *obj_desc = NULL;
-       acpi_object_type                obj_type;
-       acpi_object_type                type;
-       u32                             bytes_to_dump;
-       u32                             dbg_level;
-       u32                             i;
-
-
-       ACPI_FUNCTION_NAME ("ns_dump_one_object");
+       struct acpi_walk_info *info = (struct acpi_walk_info *)context;
+       struct acpi_namespace_node *this_node;
+       union acpi_operand_object *obj_desc = NULL;
+       acpi_object_type obj_type;
+       acpi_object_type type;
+       u32 bytes_to_dump;
+       u32 dbg_level;
+       u32 i;
 
+       ACPI_FUNCTION_NAME("ns_dump_one_object");
 
        /* Is output enabled? */
 
@@ -194,193 +176,215 @@ acpi_ns_dump_one_object (
        }
 
        if (!obj_handle) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Null object handle\n"));
                return (AE_OK);
        }
 
-       this_node = acpi_ns_map_handle_to_node (obj_handle);
+       this_node = acpi_ns_map_handle_to_node(obj_handle);
        type = this_node->type;
 
        /* Check if the owner matches */
 
-       if ((info->owner_id != ACPI_UINT32_MAX) &&
-               (info->owner_id != this_node->owner_id)) {
+       if ((info->owner_id != ACPI_OWNER_ID_MAX) &&
+           (info->owner_id != this_node->owner_id)) {
                return (AE_OK);
        }
 
-       /* Indent the object according to the level */
+       if (!(info->display_type & ACPI_DISPLAY_SHORT)) {
+               /* Indent the object according to the level */
 
-       acpi_os_printf ("%2d%*s", (u32) level - 1, (int) level * 2, " ");
+               acpi_os_printf("%2d%*s", (u32) level - 1, (int)level * 2, " ");
 
-       /* Check the node type and name */
+               /* Check the node type and name */
 
-       if (type > ACPI_TYPE_LOCAL_MAX) {
-               ACPI_REPORT_WARNING (("Invalid ACPI Type %08X\n", type));
-       }
+               if (type > ACPI_TYPE_LOCAL_MAX) {
+                       ACPI_REPORT_WARNING(("Invalid ACPI Type %08X\n", type));
+               }
+
+               if (!acpi_ut_valid_acpi_name(this_node->name.integer)) {
+                       ACPI_REPORT_WARNING(("Invalid ACPI Name %08X\n",
+                                            this_node->name.integer));
+               }
 
-       if (!acpi_ut_valid_acpi_name (this_node->name.integer)) {
-               ACPI_REPORT_WARNING (("Invalid ACPI Name %08X\n",
-                       this_node->name.integer));
+               acpi_os_printf("%4.4s", acpi_ut_get_node_name(this_node));
        }
 
        /*
         * Now we can print out the pertinent information
         */
-       acpi_os_printf ("%4.4s %-12s %p ",
-                       acpi_ut_get_node_name (this_node), acpi_ut_get_type_name (type), this_node);
+       acpi_os_printf(" %-12s %p ", acpi_ut_get_type_name(type), this_node);
 
        dbg_level = acpi_dbg_level;
        acpi_dbg_level = 0;
-       obj_desc = acpi_ns_get_attached_object (this_node);
+       obj_desc = acpi_ns_get_attached_object(this_node);
        acpi_dbg_level = dbg_level;
 
-       switch (info->display_type) {
+       switch (info->display_type & ACPI_DISPLAY_MASK) {
        case ACPI_DISPLAY_SUMMARY:
 
                if (!obj_desc) {
                        /* No attached object, we are done */
 
-                       acpi_os_printf ("\n");
+                       acpi_os_printf("\n");
                        return (AE_OK);
                }
 
                switch (type) {
                case ACPI_TYPE_PROCESSOR:
 
-                       acpi_os_printf ("ID %X Len %.4X Addr %p\n",
-                               obj_desc->processor.proc_id, obj_desc->processor.length,
-                               (char *) obj_desc->processor.address);
+                       acpi_os_printf("ID %X Len %.4X Addr %p\n",
+                                      obj_desc->processor.proc_id,
+                                      obj_desc->processor.length,
+                                      (char *)obj_desc->processor.address);
                        break;
 
-
                case ACPI_TYPE_DEVICE:
 
-                       acpi_os_printf ("Notify Object: %p\n", obj_desc);
+                       acpi_os_printf("Notify Object: %p\n", obj_desc);
                        break;
 
-
                case ACPI_TYPE_METHOD:
 
-                       acpi_os_printf ("Args %X Len %.4X Aml %p\n",
-                               (u32) obj_desc->method.param_count,
-                               obj_desc->method.aml_length, obj_desc->method.aml_start);
+                       acpi_os_printf("Args %X Len %.4X Aml %p\n",
+                                      (u32) obj_desc->method.param_count,
+                                      obj_desc->method.aml_length,
+                                      obj_desc->method.aml_start);
                        break;
 
-
                case ACPI_TYPE_INTEGER:
 
-                       acpi_os_printf ("= %8.8X%8.8X\n",
-                               ACPI_FORMAT_UINT64 (obj_desc->integer.value));
+                       acpi_os_printf("= %8.8X%8.8X\n",
+                                      ACPI_FORMAT_UINT64(obj_desc->integer.
+                                                         value));
                        break;
 
-
                case ACPI_TYPE_PACKAGE:
 
                        if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
-                               acpi_os_printf ("Elements %.2X\n",
-                                       obj_desc->package.count);
-                       }
-                       else {
-                               acpi_os_printf ("[Length not yet evaluated]\n");
+                               acpi_os_printf("Elements %.2X\n",
+                                              obj_desc->package.count);
+                       } else {
+                               acpi_os_printf("[Length not yet evaluated]\n");
                        }
                        break;
 
-
                case ACPI_TYPE_BUFFER:
 
                        if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
-                               acpi_os_printf ("Len %.2X",
-                                                obj_desc->buffer.length);
+                               acpi_os_printf("Len %.2X",
+                                              obj_desc->buffer.length);
 
                                /* Dump some of the buffer */
 
                                if (obj_desc->buffer.length > 0) {
-                                       acpi_os_printf (" =");
-                                       for (i = 0; (i < obj_desc->buffer.length && i < 12); i++) {
-                                               acpi_os_printf (" %.2hX", obj_desc->buffer.pointer[i]);
+                                       acpi_os_printf(" =");
+                                       for (i = 0;
+                                            (i < obj_desc->buffer.length
+                                             && i < 12); i++) {
+                                               acpi_os_printf(" %.2hX",
+                                                              obj_desc->buffer.
+                                                              pointer[i]);
                                        }
                                }
-                               acpi_os_printf ("\n");
-                       }
-                       else {
-                               acpi_os_printf ("[Length not yet evaluated]\n");
+                               acpi_os_printf("\n");
+                       } else {
+                               acpi_os_printf("[Length not yet evaluated]\n");
                        }
                        break;
 
-
                case ACPI_TYPE_STRING:
 
-                       acpi_os_printf ("Len %.2X ", obj_desc->string.length);
-                       acpi_ut_print_string (obj_desc->string.pointer, 32);
-                       acpi_os_printf ("\n");
+                       acpi_os_printf("Len %.2X ", obj_desc->string.length);
+                       acpi_ut_print_string(obj_desc->string.pointer, 32);
+                       acpi_os_printf("\n");
                        break;
 
-
                case ACPI_TYPE_REGION:
 
-                       acpi_os_printf ("[%s]",
-                               acpi_ut_get_region_name (obj_desc->region.space_id));
+                       acpi_os_printf("[%s]",
+                                      acpi_ut_get_region_name(obj_desc->region.
+                                                              space_id));
                        if (obj_desc->region.flags & AOPOBJ_DATA_VALID) {
-                               acpi_os_printf (" Addr %8.8X%8.8X Len %.4X\n",
-                                       ACPI_FORMAT_UINT64 (obj_desc->region.address),
-                                       obj_desc->region.length);
-                       }
-                       else {
-                               acpi_os_printf (" [Address/Length not yet evaluated]\n");
+                               acpi_os_printf(" Addr %8.8X%8.8X Len %.4X\n",
+                                              ACPI_FORMAT_UINT64(obj_desc->
+                                                                 region.
+                                                                 address),
+                                              obj_desc->region.length);
+                       } else {
+                               acpi_os_printf
+                                   (" [Address/Length not yet evaluated]\n");
                        }
                        break;
 
-
                case ACPI_TYPE_LOCAL_REFERENCE:
 
-                       acpi_os_printf ("[%s]\n",
-                               acpi_ps_get_opcode_name (obj_desc->reference.opcode));
+                       acpi_os_printf("[%s]\n",
+                                      acpi_ps_get_opcode_name(obj_desc->
+                                                              reference.
+                                                              opcode));
                        break;
 
-
                case ACPI_TYPE_BUFFER_FIELD:
 
                        if (obj_desc->buffer_field.buffer_obj &&
-                               obj_desc->buffer_field.buffer_obj->buffer.node) {
-                               acpi_os_printf ("Buf [%4.4s]",
-                                       acpi_ut_get_node_name (obj_desc->buffer_field.buffer_obj->buffer.node));
+                           obj_desc->buffer_field.buffer_obj->buffer.node) {
+                               acpi_os_printf("Buf [%4.4s]",
+                                              acpi_ut_get_node_name(obj_desc->
+                                                                    buffer_field.
+                                                                    buffer_obj->
+                                                                    buffer.
+                                                                    node));
                        }
                        break;
 
-
                case ACPI_TYPE_LOCAL_REGION_FIELD:
 
-                       acpi_os_printf ("Rgn [%4.4s]",
-                               acpi_ut_get_node_name (obj_desc->common_field.region_obj->region.node));
+                       acpi_os_printf("Rgn [%4.4s]",
+                                      acpi_ut_get_node_name(obj_desc->
+                                                            common_field.
+                                                            region_obj->region.
+                                                            node));
                        break;
 
-
                case ACPI_TYPE_LOCAL_BANK_FIELD:
 
-                       acpi_os_printf ("Rgn [%4.4s] Bnk [%4.4s]",
-                               acpi_ut_get_node_name (obj_desc->common_field.region_obj->region.node),
-                               acpi_ut_get_node_name (obj_desc->bank_field.bank_obj->common_field.node));
+                       acpi_os_printf("Rgn [%4.4s] Bnk [%4.4s]",
+                                      acpi_ut_get_node_name(obj_desc->
+                                                            common_field.
+                                                            region_obj->region.
+                                                            node),
+                                      acpi_ut_get_node_name(obj_desc->
+                                                            bank_field.
+                                                            bank_obj->
+                                                            common_field.
+                                                            node));
                        break;
 
-
                case ACPI_TYPE_LOCAL_INDEX_FIELD:
 
-                       acpi_os_printf ("Idx [%4.4s] Dat [%4.4s]",
-                               acpi_ut_get_node_name (obj_desc->index_field.index_obj->common_field.node),
-                               acpi_ut_get_node_name (obj_desc->index_field.data_obj->common_field.node));
+                       acpi_os_printf("Idx [%4.4s] Dat [%4.4s]",
+                                      acpi_ut_get_node_name(obj_desc->
+                                                            index_field.
+                                                            index_obj->
+                                                            common_field.node),
+                                      acpi_ut_get_node_name(obj_desc->
+                                                            index_field.
+                                                            data_obj->
+                                                            common_field.
+                                                            node));
                        break;
 
-
                case ACPI_TYPE_LOCAL_ALIAS:
                case ACPI_TYPE_LOCAL_METHOD_ALIAS:
 
-                       acpi_os_printf ("Target %4.4s (%p)\n",
-                               acpi_ut_get_node_name (obj_desc), obj_desc);
+                       acpi_os_printf("Target %4.4s (%p)\n",
+                                      acpi_ut_get_node_name(obj_desc),
+                                      obj_desc);
                        break;
 
                default:
 
-                       acpi_os_printf ("Object %p\n", obj_desc);
+                       acpi_os_printf("Object %p\n", obj_desc);
                        break;
                }
 
@@ -392,11 +396,15 @@ acpi_ns_dump_one_object (
                case ACPI_TYPE_LOCAL_BANK_FIELD:
                case ACPI_TYPE_LOCAL_INDEX_FIELD:
 
-                       acpi_os_printf (" Off %.3X Len %.2X Acc %.2hd\n",
-                               (obj_desc->common_field.base_byte_offset * 8)
-                                       + obj_desc->common_field.start_field_bit_offset,
-                               obj_desc->common_field.bit_length,
-                               obj_desc->common_field.access_byte_width);
+                       acpi_os_printf(" Off %.3X Len %.2X Acc %.2hd\n",
+                                      (obj_desc->common_field.
+                                       base_byte_offset * 8)
+                                      +
+                                      obj_desc->common_field.
+                                      start_field_bit_offset,
+                                      obj_desc->common_field.bit_length,
+                                      obj_desc->common_field.
+                                      access_byte_width);
                        break;
 
                default:
@@ -404,56 +412,55 @@ acpi_ns_dump_one_object (
                }
                break;
 
-
        case ACPI_DISPLAY_OBJECTS:
 
-               acpi_os_printf ("O:%p", obj_desc);
+               acpi_os_printf("O:%p", obj_desc);
                if (!obj_desc) {
                        /* No attached object, we are done */
 
-                       acpi_os_printf ("\n");
+                       acpi_os_printf("\n");
                        return (AE_OK);
                }
 
-               acpi_os_printf ("(R%d)", obj_desc->common.reference_count);
+               acpi_os_printf("(R%d)", obj_desc->common.reference_count);
 
                switch (type) {
                case ACPI_TYPE_METHOD:
 
                        /* Name is a Method and its AML offset/length are set */
 
-                       acpi_os_printf (" M:%p-%X\n", obj_desc->method.aml_start,
-                                         obj_desc->method.aml_length);
+                       acpi_os_printf(" M:%p-%X\n", obj_desc->method.aml_start,
+                                      obj_desc->method.aml_length);
                        break;
 
                case ACPI_TYPE_INTEGER:
 
-                       acpi_os_printf (" I:%8.8X8.8%X\n",
-                                       ACPI_FORMAT_UINT64 (obj_desc->integer.value));
+                       acpi_os_printf(" I:%8.8X8.8%X\n",
+                                      ACPI_FORMAT_UINT64(obj_desc->integer.
+                                                         value));
                        break;
 
                case ACPI_TYPE_STRING:
 
-                       acpi_os_printf (" S:%p-%X\n", obj_desc->string.pointer,
-                                         obj_desc->string.length);
+                       acpi_os_printf(" S:%p-%X\n", obj_desc->string.pointer,
+                                      obj_desc->string.length);
                        break;
 
                case ACPI_TYPE_BUFFER:
 
-                       acpi_os_printf (" B:%p-%X\n", obj_desc->buffer.pointer,
-                                         obj_desc->buffer.length);
+                       acpi_os_printf(" B:%p-%X\n", obj_desc->buffer.pointer,
+                                      obj_desc->buffer.length);
                        break;
 
                default:
 
-                       acpi_os_printf ("\n");
+                       acpi_os_printf("\n");
                        break;
                }
                break;
 
-
        default:
-               acpi_os_printf ("\n");
+               acpi_os_printf("\n");
                break;
        }
 
@@ -463,61 +470,58 @@ acpi_ns_dump_one_object (
                return (AE_OK);
        }
 
-
        /* If there is an attached object, display it */
 
-       dbg_level    = acpi_dbg_level;
+       dbg_level = acpi_dbg_level;
        acpi_dbg_level = 0;
-       obj_desc     = acpi_ns_get_attached_object (this_node);
+       obj_desc = acpi_ns_get_attached_object(this_node);
        acpi_dbg_level = dbg_level;
 
        /* Dump attached objects */
 
        while (obj_desc) {
                obj_type = ACPI_TYPE_INVALID;
-               acpi_os_printf ("      Attached Object %p: ", obj_desc);
+               acpi_os_printf("Attached Object %p: ", obj_desc);
 
                /* Decode the type of attached object and dump the contents */
 
-               switch (ACPI_GET_DESCRIPTOR_TYPE (obj_desc)) {
+               switch (ACPI_GET_DESCRIPTOR_TYPE(obj_desc)) {
                case ACPI_DESC_TYPE_NAMED:
 
-                       acpi_os_printf ("(Ptr to Node)\n");
-                       bytes_to_dump = sizeof (struct acpi_namespace_node);
+                       acpi_os_printf("(Ptr to Node)\n");
+                       bytes_to_dump = sizeof(struct acpi_namespace_node);
+                       ACPI_DUMP_BUFFER(obj_desc, bytes_to_dump);
                        break;
 
-
                case ACPI_DESC_TYPE_OPERAND:
 
-                       obj_type = ACPI_GET_OBJECT_TYPE (obj_desc);
+                       obj_type = ACPI_GET_OBJECT_TYPE(obj_desc);
 
                        if (obj_type > ACPI_TYPE_LOCAL_MAX) {
-                               acpi_os_printf ("(Ptr to ACPI Object type %X [UNKNOWN])\n",
-                                       obj_type);
+                               acpi_os_printf
+                                   ("(Ptr to ACPI Object type %X [UNKNOWN])\n",
+                                    obj_type);
                                bytes_to_dump = 32;
+                       } else {
+                               acpi_os_printf
+                                   ("(Ptr to ACPI Object type %X [%s])\n",
+                                    obj_type, acpi_ut_get_type_name(obj_type));
+                               bytes_to_dump =
+                                   sizeof(union acpi_operand_object);
                        }
-                       else {
-                               acpi_os_printf ("(Ptr to ACPI Object type %s, %X)\n",
-                                       acpi_ut_get_type_name (obj_type), obj_type);
-                               bytes_to_dump = sizeof (union acpi_operand_object);
-                       }
-                       break;
 
+                       ACPI_DUMP_BUFFER(obj_desc, bytes_to_dump);
+                       break;
 
                default:
 
-                       acpi_os_printf (
-                               "(String or Buffer ptr - not an object descriptor) [%s]\n",
-                               acpi_ut_get_descriptor_name (obj_desc));
-                       bytes_to_dump = 16;
                        break;
                }
 
-               ACPI_DUMP_BUFFER (obj_desc, bytes_to_dump);
-
                /* If value is NOT an internal object, we are done */
 
-               if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) {
+               if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) !=
+                   ACPI_DESC_TYPE_OPERAND) {
                        goto cleanup;
                }
 
@@ -525,51 +529,56 @@ acpi_ns_dump_one_object (
                 * Valid object, get the pointer to next level, if any
                 */
                switch (obj_type) {
-               case ACPI_TYPE_STRING:
-                       obj_desc = (void *) obj_desc->string.pointer;
-                       break;
-
                case ACPI_TYPE_BUFFER:
-                       obj_desc = (void *) obj_desc->buffer.pointer;
-                       break;
+               case ACPI_TYPE_STRING:
+                       /*
+                        * NOTE: takes advantage of common fields between string/buffer
+                        */
+                       bytes_to_dump = obj_desc->string.length;
+                       obj_desc = (void *)obj_desc->string.pointer;
+                       acpi_os_printf("(Buffer/String pointer %p length %X)\n",
+                                      obj_desc, bytes_to_dump);
+                       ACPI_DUMP_BUFFER(obj_desc, bytes_to_dump);
+                       goto cleanup;
 
                case ACPI_TYPE_BUFFER_FIELD:
-                       obj_desc = (union acpi_operand_object *) obj_desc->buffer_field.buffer_obj;
+                       obj_desc =
+                           (union acpi_operand_object *)obj_desc->buffer_field.
+                           buffer_obj;
                        break;
 
                case ACPI_TYPE_PACKAGE:
-                       obj_desc = (void *) obj_desc->package.elements;
+                       obj_desc = (void *)obj_desc->package.elements;
                        break;
 
                case ACPI_TYPE_METHOD:
-                       obj_desc = (void *) obj_desc->method.aml_start;
+                       obj_desc = (void *)obj_desc->method.aml_start;
                        break;
 
                case ACPI_TYPE_LOCAL_REGION_FIELD:
-                       obj_desc = (void *) obj_desc->field.region_obj;
+                       obj_desc = (void *)obj_desc->field.region_obj;
                        break;
 
                case ACPI_TYPE_LOCAL_BANK_FIELD:
-                       obj_desc = (void *) obj_desc->bank_field.region_obj;
+                       obj_desc = (void *)obj_desc->bank_field.region_obj;
                        break;
 
                case ACPI_TYPE_LOCAL_INDEX_FIELD:
-                       obj_desc = (void *) obj_desc->index_field.index_obj;
+                       obj_desc = (void *)obj_desc->index_field.index_obj;
                        break;
 
                default:
                        goto cleanup;
                }
 
-               obj_type = ACPI_TYPE_INVALID;  /* Terminate loop after next pass */
+               obj_type = ACPI_TYPE_INVALID;   /* Terminate loop after next pass */
        }
 
-cleanup:
-       acpi_os_printf ("\n");
+      cleanup:
+       acpi_os_printf("\n");
        return (AE_OK);
 }
 
-
 #ifdef ACPI_FUTURE_USAGE
 /*******************************************************************************
  *
@@ -591,29 +600,25 @@ cleanup:
  ******************************************************************************/
 
 void
-acpi_ns_dump_objects (
-       acpi_object_type                type,
-       u8                              display_type,
-       u32                             max_depth,
-       u32                             owner_id,
-       acpi_handle                     start_handle)
+acpi_ns_dump_objects(acpi_object_type type,
+                    u8 display_type,
+                    u32 max_depth,
+                    acpi_owner_id owner_id, acpi_handle start_handle)
 {
-       struct acpi_walk_info           info;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_walk_info info;
 
+       ACPI_FUNCTION_ENTRY();
 
        info.debug_level = ACPI_LV_TABLES;
        info.owner_id = owner_id;
        info.display_type = display_type;
 
-       (void) acpi_ns_walk_namespace (type, start_handle, max_depth,
-                        ACPI_NS_WALK_NO_UNLOCK, acpi_ns_dump_one_object,
-                        (void *) &info, NULL);
+       (void)acpi_ns_walk_namespace(type, start_handle, max_depth,
+                                    ACPI_NS_WALK_NO_UNLOCK,
+                                    acpi_ns_dump_one_object, (void *)&info,
+                                    NULL);
 }
-#endif /* ACPI_FUTURE_USAGE */
-
+#endif                         /* ACPI_FUTURE_USAGE */
 
 /*******************************************************************************
  *
@@ -628,26 +633,20 @@ acpi_ns_dump_objects (
  *
  ******************************************************************************/
 
-void
-acpi_ns_dump_entry (
-       acpi_handle                     handle,
-       u32                             debug_level)
+void acpi_ns_dump_entry(acpi_handle handle, u32 debug_level)
 {
-       struct acpi_walk_info           info;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_walk_info info;
 
+       ACPI_FUNCTION_ENTRY();
 
        info.debug_level = debug_level;
-       info.owner_id = ACPI_UINT32_MAX;
+       info.owner_id = ACPI_OWNER_ID_MAX;
        info.display_type = ACPI_DISPLAY_SUMMARY;
 
-       (void) acpi_ns_dump_one_object (handle, 1, &info, NULL);
+       (void)acpi_ns_dump_one_object(handle, 1, &info, NULL);
 }
 
-
-#ifdef _ACPI_ASL_COMPILER
+#ifdef ACPI_ASL_COMPILER
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_dump_tables
@@ -663,23 +662,19 @@ acpi_ns_dump_entry (
  *
  ******************************************************************************/
 
-void
-acpi_ns_dump_tables (
-       acpi_handle                     search_base,
-       u32                             max_depth)
+void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth)
 {
-       acpi_handle                     search_handle = search_base;
-
-
-       ACPI_FUNCTION_TRACE ("ns_dump_tables");
+       acpi_handle search_handle = search_base;
 
+       ACPI_FUNCTION_TRACE("ns_dump_tables");
 
        if (!acpi_gbl_root_node) {
                /*
                 * If the name space has not been initialized,
                 * there is nothing to dump.
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "namespace not initialized!\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
+                                 "namespace not initialized!\n"));
                return_VOID;
        }
 
@@ -687,12 +682,12 @@ acpi_ns_dump_tables (
                /* Entire namespace */
 
                search_handle = acpi_gbl_root_node;
-               ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_TABLES, "\\\n"));
        }
 
-       acpi_ns_dump_objects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, max_depth,
-                       ACPI_UINT32_MAX, search_handle);
+       acpi_ns_dump_objects(ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, max_depth,
+                            ACPI_OWNER_ID_MAX, search_handle);
        return_VOID;
 }
-#endif /* _ACPI_ASL_COMPILER */
-#endif /* defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) */
+#endif                         /* _ACPI_ASL_COMPILER */
+#endif                         /* defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) */
index 27c4f7cd2a43a6a96f8c5ed92f6b2d93b7f3e171..55de883943d67d976c3b14334a4ae0cb3733d279 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 
-
 /* TBD: This entire module is apparently obsolete and should be removed */
 
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsdumpdv")
-
+ACPI_MODULE_NAME("nsdumpdv")
 #ifdef ACPI_OBSOLETE_FUNCTIONS
 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
-
 #include <acpi/acnamesp.h>
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_dump_one_device
  *              This procedure is a user_function called by acpi_ns_walk_namespace.
  *
  ******************************************************************************/
-
 static acpi_status
-acpi_ns_dump_one_device (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value)
+acpi_ns_dump_one_device(acpi_handle obj_handle,
+                       u32 level, void *context, void **return_value)
 {
-       struct acpi_buffer              buffer;
-       struct acpi_device_info         *info;
-       acpi_status                     status;
-       u32                             i;
-
+       struct acpi_buffer buffer;
+       struct acpi_device_info *info;
+       acpi_status status;
+       u32 i;
 
-       ACPI_FUNCTION_NAME ("ns_dump_one_device");
+       ACPI_FUNCTION_NAME("ns_dump_one_device");
 
-
-       status = acpi_ns_dump_one_object (obj_handle, level, context, return_value);
+       status =
+           acpi_ns_dump_one_object(obj_handle, level, context, return_value);
 
        buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
-       status = acpi_get_object_info (obj_handle, &buffer);
-       if (ACPI_SUCCESS (status)) {
+       status = acpi_get_object_info(obj_handle, &buffer);
+       if (ACPI_SUCCESS(status)) {
                info = buffer.pointer;
                for (i = 0; i < level; i++) {
-                       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES, " "));
+                       ACPI_DEBUG_PRINT_RAW((ACPI_DB_TABLES, " "));
                }
 
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_TABLES,
-                       "    HID: %s, ADR: %8.8X%8.8X, Status: %X\n",
-                       info->hardware_id.value, ACPI_FORMAT_UINT64 (info->address),
-                       info->current_status));
-               ACPI_MEM_FREE (info);
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_TABLES,
+                                     "    HID: %s, ADR: %8.8X%8.8X, Status: %X\n",
+                                     info->hardware_id.value,
+                                     ACPI_FORMAT_UINT64(info->address),
+                                     info->current_status));
+               ACPI_MEM_FREE(info);
        }
 
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_dump_root_devices
@@ -120,16 +110,12 @@ acpi_ns_dump_one_device (
  *
  ******************************************************************************/
 
-void
-acpi_ns_dump_root_devices (
-       void)
+void acpi_ns_dump_root_devices(void)
 {
-       acpi_handle                     sys_bus_handle;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_NAME ("ns_dump_root_devices");
+       acpi_handle sys_bus_handle;
+       acpi_status status;
 
+       ACPI_FUNCTION_NAME("ns_dump_root_devices");
 
        /* Only dump the table if tracing is enabled */
 
@@ -138,19 +124,17 @@ acpi_ns_dump_root_devices (
        }
 
        status = acpi_get_handle(NULL, ACPI_NS_SYSTEM_BUS, &sys_bus_handle);
-       if (ACPI_FAILURE (status)) {
+       if (ACPI_FAILURE(status)) {
                return;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_TABLES,
-               "Display of all devices in the namespace:\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
+                         "Display of all devices in the namespace:\n"));
 
-       status = acpi_ns_walk_namespace (ACPI_TYPE_DEVICE, sys_bus_handle,
-                        ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK,
-                        acpi_ns_dump_one_device, NULL, NULL);
+       status = acpi_ns_walk_namespace(ACPI_TYPE_DEVICE, sys_bus_handle,
+                                       ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK,
+                                       acpi_ns_dump_one_device, NULL, NULL);
 }
 
 #endif
 #endif
-
-
index 1ae89a1c88268a4a05db959585b6ad86b300c0ab..0191c7d92824234a91444505e517045909dd5b5b 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/acinterp.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nseval")
+ACPI_MODULE_NAME("nseval")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ns_execute_control_method (
-       struct acpi_parameter_info      *info);
-
-static acpi_status
-acpi_ns_get_object_value (
-       struct acpi_parameter_info      *info);
+acpi_ns_execute_control_method(struct acpi_parameter_info *info);
 
+static acpi_status acpi_ns_get_object_value(struct acpi_parameter_info *info);
 
 /*******************************************************************************
  *
@@ -85,48 +78,44 @@ acpi_ns_get_object_value (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_evaluate_relative (
-       char                            *pathname,
-       struct acpi_parameter_info      *info)
+acpi_ns_evaluate_relative(char *pathname, struct acpi_parameter_info *info)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node = NULL;
-       union acpi_generic_state        *scope_info;
-       char                            *internal_path = NULL;
-
-
-       ACPI_FUNCTION_TRACE ("ns_evaluate_relative");
+       acpi_status status;
+       struct acpi_namespace_node *node = NULL;
+       union acpi_generic_state *scope_info;
+       char *internal_path = NULL;
 
+       ACPI_FUNCTION_TRACE("ns_evaluate_relative");
 
        /*
         * Must have a valid object handle
         */
        if (!info || !info->node) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Build an internal name string for the method */
 
-       status = acpi_ns_internalize_name (pathname, &internal_path);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ns_internalize_name(pathname, &internal_path);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       scope_info = acpi_ut_create_generic_state ();
+       scope_info = acpi_ut_create_generic_state();
        if (!scope_info) {
                goto cleanup1;
        }
 
        /* Get the prefix handle and Node */
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
-       info->node = acpi_ns_map_handle_to_node (info->node);
+       info->node = acpi_ns_map_handle_to_node(info->node);
        if (!info->node) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+               (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
                status = AE_BAD_PARAMETER;
                goto cleanup;
        }
@@ -134,39 +123,38 @@ acpi_ns_evaluate_relative (
        /* Lookup the name in the namespace */
 
        scope_info->scope.node = info->node;
-       status = acpi_ns_lookup (scope_info, internal_path, ACPI_TYPE_ANY,
-                        ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, NULL,
-                        &node);
+       status = acpi_ns_lookup(scope_info, internal_path, ACPI_TYPE_ANY,
+                               ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, NULL,
+                               &node);
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Object [%s] not found [%s]\n",
-                       pathname, acpi_format_exception (status)));
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "Object [%s] not found [%s]\n",
+                                 pathname, acpi_format_exception(status)));
                goto cleanup;
        }
 
        /*
         * Now that we have a handle to the object, we can attempt to evaluate it.
         */
-       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n",
-               pathname, node, acpi_ns_get_attached_object (node)));
+       ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "%s [%p] Value %p\n",
+                         pathname, node, acpi_ns_get_attached_object(node)));
 
        info->node = node;
-       status = acpi_ns_evaluate_by_handle (info);
+       status = acpi_ns_evaluate_by_handle(info);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "*** Completed eval of object %s ***\n",
-               pathname));
+       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                         "*** Completed eval of object %s ***\n", pathname));
 
-cleanup:
-       acpi_ut_delete_generic_state (scope_info);
+      cleanup:
+       acpi_ut_delete_generic_state(scope_info);
 
-cleanup1:
-       ACPI_MEM_FREE (internal_path);
-       return_ACPI_STATUS (status);
+      cleanup1:
+       ACPI_MEM_FREE(internal_path);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_evaluate_by_name
@@ -189,68 +177,63 @@ cleanup1:
  ******************************************************************************/
 
 acpi_status
-acpi_ns_evaluate_by_name (
-       char                            *pathname,
-       struct acpi_parameter_info      *info)
+acpi_ns_evaluate_by_name(char *pathname, struct acpi_parameter_info *info)
 {
-       acpi_status                     status;
-       char                            *internal_path = NULL;
-
-
-       ACPI_FUNCTION_TRACE ("ns_evaluate_by_name");
+       acpi_status status;
+       char *internal_path = NULL;
 
+       ACPI_FUNCTION_TRACE("ns_evaluate_by_name");
 
        /* Build an internal name string for the method */
 
-       status = acpi_ns_internalize_name (pathname, &internal_path);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ns_internalize_name(pathname, &internal_path);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
        /* Lookup the name in the namespace */
 
-       status = acpi_ns_lookup (NULL, internal_path, ACPI_TYPE_ANY,
-                        ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, NULL,
-                        &info->node);
+       status = acpi_ns_lookup(NULL, internal_path, ACPI_TYPE_ANY,
+                               ACPI_IMODE_EXECUTE, ACPI_NS_NO_UPSEARCH, NULL,
+                               &info->node);
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                       "Object at [%s] was not found, status=%.4X\n",
-                       pathname, status));
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                 "Object at [%s] was not found, status=%.4X\n",
+                                 pathname, status));
                goto cleanup;
        }
 
        /*
         * Now that we have a handle to the object, we can attempt to evaluate it.
         */
-       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "%s [%p] Value %p\n",
-               pathname, info->node, acpi_ns_get_attached_object (info->node)));
-
-       status = acpi_ns_evaluate_by_handle (info);
+       ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "%s [%p] Value %p\n",
+                         pathname, info->node,
+                         acpi_ns_get_attached_object(info->node)));
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "*** Completed eval of object %s ***\n",
-               pathname));
+       status = acpi_ns_evaluate_by_handle(info);
 
+       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                         "*** Completed eval of object %s ***\n", pathname));
 
-cleanup:
+      cleanup:
 
        /* Cleanup */
 
        if (internal_path) {
-               ACPI_MEM_FREE (internal_path);
+               ACPI_MEM_FREE(internal_path);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_evaluate_by_handle
@@ -275,26 +258,22 @@ cleanup:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ns_evaluate_by_handle (
-       struct acpi_parameter_info      *info)
+acpi_status acpi_ns_evaluate_by_handle(struct acpi_parameter_info *info)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ns_evaluate_by_handle");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ns_evaluate_by_handle");
 
        /* Check if namespace has been initialized */
 
        if (!acpi_gbl_root_node) {
-               return_ACPI_STATUS (AE_NO_NAMESPACE);
+               return_ACPI_STATUS(AE_NO_NAMESPACE);
        }
 
        /* Parameter Validation */
 
        if (!info) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Initialize the return value to an invalid object */
@@ -303,23 +282,25 @@ acpi_ns_evaluate_by_handle (
 
        /* Get the prefix handle and Node */
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       info->node = acpi_ns_map_handle_to_node (info->node);
+       info->node = acpi_ns_map_handle_to_node(info->node);
        if (!info->node) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
         * For a method alias, we must grab the actual method node so that proper
         * scoping context will be established before execution.
         */
-       if (acpi_ns_get_type (info->node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) {
-               info->node = ACPI_CAST_PTR (struct acpi_namespace_node, info->node->object);
+       if (acpi_ns_get_type(info->node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) {
+               info->node =
+                   ACPI_CAST_PTR(struct acpi_namespace_node,
+                                 info->node->object);
        }
 
        /*
@@ -329,17 +310,16 @@ acpi_ns_evaluate_by_handle (
         *
         * In both cases, the namespace is unlocked by the acpi_ns* procedure
         */
-       if (acpi_ns_get_type (info->node) == ACPI_TYPE_METHOD) {
+       if (acpi_ns_get_type(info->node) == ACPI_TYPE_METHOD) {
                /*
                 * Case 1) We have an actual control method to execute
                 */
-               status = acpi_ns_execute_control_method (info);
-       }
-       else {
+               status = acpi_ns_execute_control_method(info);
+       } else {
                /*
                 * Case 2) Object is NOT a method, just return its current value
                 */
-               status = acpi_ns_get_object_value (info);
+               status = acpi_ns_get_object_value(info);
        }
 
        /*
@@ -355,16 +335,16 @@ acpi_ns_evaluate_by_handle (
         * Namespace was unlocked by the handling acpi_ns* function, so we
         * just return
         */
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_execute_control_method
  *
  * PARAMETERS:  Info            - Method info block, contains:
  *                  Node            - Method Node to execute
+ *                  obj_desc        - Method object
  *                  Parameters      - List of parameters to pass to the method,
  *                                    terminated by NULL. Params itself may be
  *                                    NULL if no parameters are being passed.
@@ -383,31 +363,29 @@ acpi_ns_evaluate_by_handle (
  ******************************************************************************/
 
 static acpi_status
-acpi_ns_execute_control_method (
-       struct acpi_parameter_info      *info)
+acpi_ns_execute_control_method(struct acpi_parameter_info *info)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-
-
-       ACPI_FUNCTION_TRACE ("ns_execute_control_method");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ns_execute_control_method");
 
        /* Verify that there is a method associated with this object */
 
-       obj_desc = acpi_ns_get_attached_object (info->node);
-       if (!obj_desc) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "No attached method object\n"));
+       info->obj_desc = acpi_ns_get_attached_object(info->node);
+       if (!info->obj_desc) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "No attached method object\n"));
 
-               (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-               return_ACPI_STATUS (AE_NULL_OBJECT);
+               (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+               return_ACPI_STATUS(AE_NULL_OBJECT);
        }
 
-       ACPI_DUMP_PATHNAME (info->node, "Execute Method:",
-               ACPI_LV_INFO, _COMPONENT);
+       ACPI_DUMP_PATHNAME(info->node, "Execute Method:",
+                          ACPI_LV_INFO, _COMPONENT);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Method at AML address %p Length %X\n",
-               obj_desc->method.aml_start + 1, obj_desc->method.aml_length - 1));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Method at AML address %p Length %X\n",
+                         info->obj_desc->method.aml_start + 1,
+                         info->obj_desc->method.aml_length - 1));
 
        /*
         * Unlock the namespace before execution.  This allows namespace access
@@ -416,27 +394,26 @@ acpi_ns_execute_control_method (
         * interpreter locks to ensure that no thread is using the portion of the
         * namespace that is being deleted.
         */
-       status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
         * Execute the method via the interpreter.  The interpreter is locked
         * here before calling into the AML parser
         */
-       status = acpi_ex_enter_interpreter ();
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ex_enter_interpreter();
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_psx_execute (info);
-       acpi_ex_exit_interpreter ();
+       status = acpi_ps_execute_method(info);
+       acpi_ex_exit_interpreter();
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_object_value
@@ -454,16 +431,12 @@ acpi_ns_execute_control_method (
  *
  ******************************************************************************/
 
-static acpi_status
-acpi_ns_get_object_value (
-       struct acpi_parameter_info      *info)
+static acpi_status acpi_ns_get_object_value(struct acpi_parameter_info *info)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_namespace_node      *resolved_node = info->node;
-
-
-       ACPI_FUNCTION_TRACE ("ns_get_object_value");
+       acpi_status status = AE_OK;
+       struct acpi_namespace_node *resolved_node = info->node;
 
+       ACPI_FUNCTION_TRACE("ns_get_object_value");
 
        /*
         * Objects require additional resolution steps (e.g., the Node may be a
@@ -486,32 +459,33 @@ acpi_ns_get_object_value (
         *
         * We must release the namespace lock before entering the intepreter.
         */
-       status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_ex_enter_interpreter ();
-       if (ACPI_SUCCESS (status)) {
-               status = acpi_ex_resolve_node_to_value (&resolved_node, NULL);
+       status = acpi_ex_enter_interpreter();
+       if (ACPI_SUCCESS(status)) {
+               status = acpi_ex_resolve_node_to_value(&resolved_node, NULL);
                /*
                 * If acpi_ex_resolve_node_to_value() succeeded, the return value was placed
                 * in resolved_node.
                 */
-               acpi_ex_exit_interpreter ();
+               acpi_ex_exit_interpreter();
 
-               if (ACPI_SUCCESS (status)) {
+               if (ACPI_SUCCESS(status)) {
                        status = AE_CTRL_RETURN_VALUE;
                        info->return_object = ACPI_CAST_PTR
-                                        (union acpi_operand_object, resolved_node);
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Returning object %p [%s]\n",
-                               info->return_object,
-                               acpi_ut_get_object_type_name (info->return_object)));
+                           (union acpi_operand_object, resolved_node);
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "Returning object %p [%s]\n",
+                                         info->return_object,
+                                         acpi_ut_get_object_type_name(info->
+                                                                      return_object)));
                }
        }
 
        /* Namespace is unlocked */
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
index 362802ae29a215f0b9cdd4e23af7ec7c64b09b46..0a08d2f04a06bd5394d18698338c0c6cdb9db985 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acdispat.h>
 #include <acpi/acinterp.h>
 
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsinit")
+ACPI_MODULE_NAME("nsinit")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ns_init_one_object (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value);
+acpi_ns_init_one_object(acpi_handle obj_handle,
+                       u32 level, void *context, void **return_value);
 
 static acpi_status
-acpi_ns_init_one_device (
-       acpi_handle                     obj_handle,
-       u32                             nesting_level,
-       void                            *context,
-       void                            **return_value);
-
+acpi_ns_init_one_device(acpi_handle obj_handle,
+                       u32 nesting_level, void *context, void **return_value);
 
 /*******************************************************************************
  *
@@ -80,52 +71,48 @@ acpi_ns_init_one_device (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ns_initialize_objects (
-       void)
+acpi_status acpi_ns_initialize_objects(void)
 {
-       acpi_status                     status;
-       struct acpi_init_walk_info      info;
-
+       acpi_status status;
+       struct acpi_init_walk_info info;
 
-       ACPI_FUNCTION_TRACE ("ns_initialize_objects");
+       ACPI_FUNCTION_TRACE("ns_initialize_objects");
 
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "**** Starting initialization of namespace objects ****\n"));
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
-               "Completing Region/Field/Buffer/Package initialization:"));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "**** Starting initialization of namespace objects ****\n"));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
+                             "Completing Region/Field/Buffer/Package initialization:"));
 
        /* Set all init info to zero */
 
-       ACPI_MEMSET (&info, 0, sizeof (struct acpi_init_walk_info));
+       ACPI_MEMSET(&info, 0, sizeof(struct acpi_init_walk_info));
 
        /* Walk entire namespace from the supplied root */
 
-       status = acpi_walk_namespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
-                         ACPI_UINT32_MAX, acpi_ns_init_one_object,
-                         &info, NULL);
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "walk_namespace failed! %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
+                                    ACPI_UINT32_MAX, acpi_ns_init_one_object,
+                                    &info, NULL);
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "walk_namespace failed! %s\n",
+                                 acpi_format_exception(status)));
        }
 
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
-               "\nInitialized %hd/%hd Regions %hd/%hd Fields %hd/%hd Buffers %hd/%hd Packages (%hd nodes)\n",
-               info.op_region_init, info.op_region_count,
-               info.field_init,    info.field_count,
-               info.buffer_init,   info.buffer_count,
-               info.package_init,  info.package_count, info.object_count));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
+                             "\nInitialized %hd/%hd Regions %hd/%hd Fields %hd/%hd Buffers %hd/%hd Packages (%hd nodes)\n",
+                             info.op_region_init, info.op_region_count,
+                             info.field_init, info.field_count,
+                             info.buffer_init, info.buffer_count,
+                             info.package_init, info.package_count,
+                             info.object_count));
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "%hd Control Methods found\n", info.method_count));
-       ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
-               "%hd Op Regions found\n", info.op_region_count));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "%hd Control Methods found\n", info.method_count));
+       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                         "%hd Op Regions found\n", info.op_region_count));
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_initialize_devices
@@ -142,16 +129,12 @@ acpi_ns_initialize_objects (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ns_initialize_devices (
-       void)
+acpi_status acpi_ns_initialize_devices(void)
 {
-       acpi_status                     status;
-       struct acpi_device_walk_info    info;
-
-
-       ACPI_FUNCTION_TRACE ("ns_initialize_devices");
+       acpi_status status;
+       struct acpi_device_walk_info info;
 
+       ACPI_FUNCTION_TRACE("ns_initialize_devices");
 
        /* Init counters */
 
@@ -159,34 +142,34 @@ acpi_ns_initialize_devices (
        info.num_STA = 0;
        info.num_INI = 0;
 
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
-               "Executing all Device _STA and_INI methods:"));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
+                             "Executing all Device _STA and_INI methods:"));
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Walk namespace for all objects */
 
-       status = acpi_ns_walk_namespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
-                         ACPI_UINT32_MAX, TRUE, acpi_ns_init_one_device, &info, NULL);
+       status = acpi_ns_walk_namespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
+                                       ACPI_UINT32_MAX, TRUE,
+                                       acpi_ns_init_one_device, &info, NULL);
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "walk_namespace failed! %s\n",
-                       acpi_format_exception (status)));
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "walk_namespace failed! %s\n",
+                                 acpi_format_exception(status)));
        }
 
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
-               "\n%hd Devices found containing: %hd _STA, %hd _INI methods\n",
-               info.device_count, info.num_STA, info.num_INI));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
+                             "\n%hd Devices found containing: %hd _STA, %hd _INI methods\n",
+                             info.device_count, info.num_STA, info.num_INI));
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_init_one_object
@@ -208,28 +191,25 @@ acpi_ns_initialize_devices (
  ******************************************************************************/
 
 static acpi_status
-acpi_ns_init_one_object (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value)
+acpi_ns_init_one_object(acpi_handle obj_handle,
+                       u32 level, void *context, void **return_value)
 {
-       acpi_object_type                type;
-       acpi_status                     status;
-       struct acpi_init_walk_info      *info = (struct acpi_init_walk_info *) context;
-       struct acpi_namespace_node      *node = (struct acpi_namespace_node *) obj_handle;
-       union acpi_operand_object       *obj_desc;
-
-
-       ACPI_FUNCTION_NAME ("ns_init_one_object");
+       acpi_object_type type;
+       acpi_status status;
+       struct acpi_init_walk_info *info =
+           (struct acpi_init_walk_info *)context;
+       struct acpi_namespace_node *node =
+           (struct acpi_namespace_node *)obj_handle;
+       union acpi_operand_object *obj_desc;
 
+       ACPI_FUNCTION_NAME("ns_init_one_object");
 
        info->object_count++;
 
        /* And even then, we are only interested in a few object types */
 
-       type = acpi_ns_get_type (obj_handle);
-       obj_desc = acpi_ns_get_attached_object (node);
+       type = acpi_ns_get_type(obj_handle);
+       obj_desc = acpi_ns_get_attached_object(node);
        if (!obj_desc) {
                return (AE_OK);
        }
@@ -269,8 +249,8 @@ acpi_ns_init_one_object (
        /*
         * Must lock the interpreter before executing AML code
         */
-       status = acpi_ex_enter_interpreter ();
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ex_enter_interpreter();
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
@@ -282,25 +262,25 @@ acpi_ns_init_one_object (
        case ACPI_TYPE_REGION:
 
                info->op_region_init++;
-               status = acpi_ds_get_region_arguments (obj_desc);
+               status = acpi_ds_get_region_arguments(obj_desc);
                break;
 
        case ACPI_TYPE_BUFFER_FIELD:
 
                info->field_init++;
-               status = acpi_ds_get_buffer_field_arguments (obj_desc);
+               status = acpi_ds_get_buffer_field_arguments(obj_desc);
                break;
 
        case ACPI_TYPE_BUFFER:
 
                info->buffer_init++;
-               status = acpi_ds_get_buffer_arguments (obj_desc);
+               status = acpi_ds_get_buffer_arguments(obj_desc);
                break;
 
        case ACPI_TYPE_PACKAGE:
 
                info->package_init++;
-               status = acpi_ds_get_package_arguments (obj_desc);
+               status = acpi_ds_get_package_arguments(obj_desc);
                break;
 
        default:
@@ -308,12 +288,13 @@ acpi_ns_init_one_object (
                break;
        }
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ERROR, "\n"));
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Could not execute arguments for [%4.4s] (%s), %s\n",
-                               acpi_ut_get_node_name (node), acpi_ut_get_type_name (type),
-                               acpi_format_exception (status)));
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_ERROR, "\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Could not execute arguments for [%4.4s] (%s), %s\n",
+                                 acpi_ut_get_node_name(node),
+                                 acpi_ut_get_type_name(type),
+                                 acpi_format_exception(status)));
        }
 
        /*
@@ -321,18 +302,17 @@ acpi_ns_init_one_object (
         * pathname
         */
        if (!(acpi_dbg_level & ACPI_LV_INIT_NAMES)) {
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "."));
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, "."));
        }
 
        /*
         * We ignore errors from above, and always return OK, since we don't want
         * to abort the walk on any single error.
         */
-       acpi_ex_exit_interpreter ();
+       acpi_ex_exit_interpreter();
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_init_one_device
@@ -348,41 +328,37 @@ acpi_ns_init_one_object (
  ******************************************************************************/
 
 static acpi_status
-acpi_ns_init_one_device (
-       acpi_handle                     obj_handle,
-       u32                             nesting_level,
-       void                            *context,
-       void                            **return_value)
+acpi_ns_init_one_device(acpi_handle obj_handle,
+                       u32 nesting_level, void *context, void **return_value)
 {
-       struct acpi_device_walk_info   *info = (struct acpi_device_walk_info *) context;
-       struct acpi_parameter_info      pinfo;
-       u32                             flags;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ns_init_one_device");
+       struct acpi_device_walk_info *info =
+           (struct acpi_device_walk_info *)context;
+       struct acpi_parameter_info pinfo;
+       u32 flags;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ns_init_one_device");
 
        pinfo.parameters = NULL;
        pinfo.parameter_type = ACPI_PARAM_ARGS;
 
-       pinfo.node = acpi_ns_map_handle_to_node (obj_handle);
+       pinfo.node = acpi_ns_map_handle_to_node(obj_handle);
        if (!pinfo.node) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
         * We will run _STA/_INI on Devices, Processors and thermal_zones only
         */
-       if ((pinfo.node->type != ACPI_TYPE_DEVICE)      &&
-               (pinfo.node->type != ACPI_TYPE_PROCESSOR)   &&
-               (pinfo.node->type != ACPI_TYPE_THERMAL)) {
-               return_ACPI_STATUS (AE_OK);
+       if ((pinfo.node->type != ACPI_TYPE_DEVICE) &&
+           (pinfo.node->type != ACPI_TYPE_PROCESSOR) &&
+           (pinfo.node->type != ACPI_TYPE_THERMAL)) {
+               return_ACPI_STATUS(AE_OK);
        }
 
        if ((acpi_dbg_level <= ACPI_LV_ALL_EXCEPTIONS) &&
-               (!(acpi_dbg_level & ACPI_LV_INFO))) {
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, "."));
+           (!(acpi_dbg_level & ACPI_LV_INFO))) {
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, "."));
        }
 
        info->device_count++;
@@ -390,20 +366,20 @@ acpi_ns_init_one_device (
        /*
         * Run _STA to determine if we can run _INI on the device.
         */
-       ACPI_DEBUG_EXEC (acpi_ut_display_init_pathname (ACPI_TYPE_METHOD,
-                          pinfo.node, METHOD_NAME__STA));
-       status = acpi_ut_execute_STA (pinfo.node, &flags);
+       ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD,
+                                                     pinfo.node,
+                                                     METHOD_NAME__STA));
+       status = acpi_ut_execute_STA(pinfo.node, &flags);
 
-       if (ACPI_FAILURE (status)) {
+       if (ACPI_FAILURE(status)) {
                if (pinfo.node->type == ACPI_TYPE_DEVICE) {
                        /* Ignore error and move on to next device */
 
-                       return_ACPI_STATUS (AE_OK);
+                       return_ACPI_STATUS(AE_OK);
                }
 
                /* _STA is not required for Processor or thermal_zone objects */
-       }
-       else {
+       } else {
                info->num_STA++;
 
                if (!(flags & 0x01)) {
@@ -416,32 +392,34 @@ acpi_ns_init_one_device (
        /*
         * The device is present. Run _INI.
         */
-       ACPI_DEBUG_EXEC (acpi_ut_display_init_pathname (ACPI_TYPE_METHOD,
-                          pinfo.node, METHOD_NAME__INI));
-       status = acpi_ns_evaluate_relative (METHOD_NAME__INI, &pinfo);
-       if (ACPI_FAILURE (status)) {
+       ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname(ACPI_TYPE_METHOD,
+                                                     pinfo.node,
+                                                     METHOD_NAME__INI));
+       status = acpi_ns_evaluate_relative(METHOD_NAME__INI, &pinfo);
+       if (ACPI_FAILURE(status)) {
                /* No _INI (AE_NOT_FOUND) means device requires no initialization */
 
                if (status != AE_NOT_FOUND) {
                        /* Ignore error and move on to next device */
 
 #ifdef ACPI_DEBUG_OUTPUT
-                       char                *scope_name = acpi_ns_get_external_pathname (pinfo.node);
+                       char *scope_name =
+                           acpi_ns_get_external_pathname(pinfo.node);
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "%s._INI failed: %s\n",
-                                       scope_name, acpi_format_exception (status)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_WARN, "%s._INI failed: %s\n",
+                                         scope_name,
+                                         acpi_format_exception(status)));
 
-                       ACPI_MEM_FREE (scope_name);
+                       ACPI_MEM_FREE(scope_name);
 #endif
                }
 
                status = AE_OK;
-       }
-       else {
+       } else {
                /* Delete any return object (especially if implicit_return is enabled) */
 
                if (pinfo.return_object) {
-                       acpi_ut_remove_reference (pinfo.return_object);
+                       acpi_ut_remove_reference(pinfo.return_object);
                }
 
                /* Count of successful INIs */
@@ -452,8 +430,9 @@ acpi_ns_init_one_device (
        if (acpi_gbl_init_handler) {
                /* External initialization handler is present, call it */
 
-               status = acpi_gbl_init_handler (pinfo.node, ACPI_INIT_DEVICE_INI);
+               status =
+                   acpi_gbl_init_handler(pinfo.node, ACPI_INIT_DEVICE_INI);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
index 34e497016601de5b27af03e8f54ec4f12e83d0ff..c28849de465a61fbb442a63b1a49c7d6f68e3f71 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acdispat.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsload")
+ACPI_MODULE_NAME("nsload")
 
 /* Local prototypes */
-
-static acpi_status
-acpi_ns_load_table_by_type (
-       acpi_table_type                 table_type);
+static acpi_status acpi_ns_load_table_by_type(acpi_table_type table_type);
 
 #ifdef ACPI_FUTURE_IMPLEMENTATION
-acpi_status
-acpi_ns_unload_namespace (
-       acpi_handle                     handle);
+acpi_status acpi_ns_unload_namespace(acpi_handle handle);
 
-static acpi_status
-acpi_ns_delete_subtree (
-       acpi_handle                     start_handle);
+static acpi_status acpi_ns_delete_subtree(acpi_handle start_handle);
 #endif
 
-
 #ifndef ACPI_NO_METHOD_EXECUTION
 /*******************************************************************************
  *
@@ -82,40 +72,39 @@ acpi_ns_delete_subtree (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_load_table (
-       struct acpi_table_desc          *table_desc,
-       struct acpi_namespace_node      *node)
+acpi_ns_load_table(struct acpi_table_desc *table_desc,
+                  struct acpi_namespace_node *node)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ns_load_table");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ns_load_table");
 
        /* Check if table contains valid AML (must be DSDT, PSDT, SSDT, etc.) */
 
-       if (!(acpi_gbl_table_data[table_desc->type].flags & ACPI_TABLE_EXECUTABLE)) {
+       if (!
+           (acpi_gbl_table_data[table_desc->type].
+            flags & ACPI_TABLE_EXECUTABLE)) {
                /* Just ignore this table */
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Check validity of the AML start and length */
 
        if (!table_desc->aml_start) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Null AML pointer\n"));
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Null AML pointer\n"));
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "AML block at %p\n",
-               table_desc->aml_start));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "AML block at %p\n",
+                         table_desc->aml_start));
 
        /* Ignore table if there is no AML contained within */
 
        if (!table_desc->aml_length) {
-               ACPI_REPORT_WARNING (("Zero-length AML block in table [%4.4s]\n",
-                       table_desc->pointer->signature));
-               return_ACPI_STATUS (AE_OK);
+               ACPI_REPORT_WARNING(("Zero-length AML block in table [%4.4s]\n",
+                                    table_desc->pointer->signature));
+               return_ACPI_STATUS(AE_OK);
        }
 
        /*
@@ -127,19 +116,19 @@ acpi_ns_load_table (
         * to another control method, we can't continue parsing
         * because we don't know how many arguments to parse next!
         */
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "**** Loading table into namespace ****\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "**** Loading table into namespace ****\n"));
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_ns_parse_table (table_desc, node->child);
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+       status = acpi_ns_parse_table(table_desc, node->child);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
 
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -148,18 +137,17 @@ acpi_ns_load_table (
         * just-in-time parsing, we delete the control method
         * parse trees.
         */
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "**** Begin Table Method Parsing and Object Initialization ****\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "**** Begin Table Method Parsing and Object Initialization ****\n"));
 
-       status = acpi_ds_initialize_objects (table_desc, node);
+       status = acpi_ds_initialize_objects(table_desc, node);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "**** Completed Table Method Parsing and Object Initialization ****\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "**** Completed Table Method Parsing and Object Initialization ****\n"));
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_load_table_by_type
@@ -174,21 +162,17 @@ acpi_ns_load_table (
  *
  ******************************************************************************/
 
-static acpi_status
-acpi_ns_load_table_by_type (
-       acpi_table_type                 table_type)
+static acpi_status acpi_ns_load_table_by_type(acpi_table_type table_type)
 {
-       u32                             i;
-       acpi_status                     status;
-       struct acpi_table_desc          *table_desc;
-
+       u32 i;
+       acpi_status status;
+       struct acpi_table_desc *table_desc;
 
-       ACPI_FUNCTION_TRACE ("ns_load_table_by_type");
+       ACPI_FUNCTION_TRACE("ns_load_table_by_type");
 
-
-       status = acpi_ut_acquire_mutex (ACPI_MTX_TABLES);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -198,7 +182,7 @@ acpi_ns_load_table_by_type (
        switch (table_type) {
        case ACPI_TABLE_DSDT:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Loading DSDT\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Namespace load: DSDT\n"));
 
                table_desc = acpi_gbl_table_lists[ACPI_TABLE_DSDT].next;
 
@@ -210,57 +194,33 @@ acpi_ns_load_table_by_type (
 
                /* Now load the single DSDT */
 
-               status = acpi_ns_load_table (table_desc, acpi_gbl_root_node);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_ns_load_table(table_desc, acpi_gbl_root_node);
+               if (ACPI_SUCCESS(status)) {
                        table_desc->loaded_into_namespace = TRUE;
                }
                break;
 
-
        case ACPI_TABLE_SSDT:
+       case ACPI_TABLE_PSDT:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Loading %d SSDTs\n",
-                       acpi_gbl_table_lists[ACPI_TABLE_SSDT].count));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Namespace load: %d SSDT or PSDTs\n",
+                                 acpi_gbl_table_lists[table_type].count));
 
                /*
-                * Traverse list of SSDT tables
+                * Traverse list of SSDT or PSDT tables
                 */
-               table_desc = acpi_gbl_table_lists[ACPI_TABLE_SSDT].next;
-               for (i = 0; i < acpi_gbl_table_lists[ACPI_TABLE_SSDT].count; i++) {
+               table_desc = acpi_gbl_table_lists[table_type].next;
+               for (i = 0; i < acpi_gbl_table_lists[table_type].count; i++) {
                        /*
-                        * Only attempt to load table if it is not
+                        * Only attempt to load table into namespace if it is not
                         * already loaded!
                         */
                        if (!table_desc->loaded_into_namespace) {
-                               status = acpi_ns_load_table (table_desc, acpi_gbl_root_node);
-                               if (ACPI_FAILURE (status)) {
-                                       break;
-                               }
-
-                               table_desc->loaded_into_namespace = TRUE;
-                       }
-
-                       table_desc = table_desc->next;
-               }
-               break;
-
-
-       case ACPI_TABLE_PSDT:
-
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Loading %d PSDTs\n",
-                       acpi_gbl_table_lists[ACPI_TABLE_PSDT].count));
-
-               /*
-                * Traverse list of PSDT tables
-                */
-               table_desc = acpi_gbl_table_lists[ACPI_TABLE_PSDT].next;
-
-               for (i = 0; i < acpi_gbl_table_lists[ACPI_TABLE_PSDT].count; i++) {
-                       /* Only attempt to load table if it is not already loaded! */
-
-                       if (!table_desc->loaded_into_namespace) {
-                               status = acpi_ns_load_table (table_desc, acpi_gbl_root_node);
-                               if (ACPI_FAILURE (status)) {
+                               status =
+                                   acpi_ns_load_table(table_desc,
+                                                      acpi_gbl_root_node);
+                               if (ACPI_FAILURE(status)) {
                                        break;
                                }
 
@@ -271,19 +231,16 @@ acpi_ns_load_table_by_type (
                }
                break;
 
-
        default:
                status = AE_SUPPORT;
                break;
        }
 
-
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_TABLES);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_load_namespace
@@ -297,45 +254,40 @@ unlock_and_exit:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ns_load_namespace (
-       void)
+acpi_status acpi_ns_load_namespace(void)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_load_name_space");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_load_name_space");
 
        /* There must be at least a DSDT installed */
 
        if (acpi_gbl_DSDT == NULL) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "DSDT is not in memory\n"));
-               return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "DSDT is not in memory\n"));
+               return_ACPI_STATUS(AE_NO_ACPI_TABLES);
        }
 
        /*
         * Load the namespace.  The DSDT is required,
         * but the SSDT and PSDT tables are optional.
         */
-       status = acpi_ns_load_table_by_type (ACPI_TABLE_DSDT);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ns_load_table_by_type(ACPI_TABLE_DSDT);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Ignore exceptions from these */
 
-       (void) acpi_ns_load_table_by_type (ACPI_TABLE_SSDT);
-       (void) acpi_ns_load_table_by_type (ACPI_TABLE_PSDT);
+       (void)acpi_ns_load_table_by_type(ACPI_TABLE_SSDT);
+       (void)acpi_ns_load_table_by_type(ACPI_TABLE_PSDT);
 
-       ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
-               "ACPI Namespace successfully loaded at root %p\n",
-               acpi_gbl_root_node));
+       ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT,
+                             "ACPI Namespace successfully loaded at root %p\n",
+                             acpi_gbl_root_node));
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 #ifdef ACPI_FUTURE_IMPLEMENTATION
 /*******************************************************************************
  *
@@ -353,24 +305,20 @@ acpi_ns_load_namespace (
  *
  ******************************************************************************/
 
-static acpi_status
-acpi_ns_delete_subtree (
-       acpi_handle                     start_handle)
+static acpi_status acpi_ns_delete_subtree(acpi_handle start_handle)
 {
-       acpi_status                     status;
-       acpi_handle                     child_handle;
-       acpi_handle                     parent_handle;
-       acpi_handle                     next_child_handle;
-       acpi_handle                     dummy;
-       u32                             level;
-
-
-       ACPI_FUNCTION_TRACE ("ns_delete_subtree");
+       acpi_status status;
+       acpi_handle child_handle;
+       acpi_handle parent_handle;
+       acpi_handle next_child_handle;
+       acpi_handle dummy;
+       u32 level;
 
+       ACPI_FUNCTION_TRACE("ns_delete_subtree");
 
        parent_handle = start_handle;
        child_handle = NULL;
-       level        = 1;
+       level = 1;
 
        /*
         * Traverse the tree of objects until we bubble back up
@@ -379,18 +327,19 @@ acpi_ns_delete_subtree (
        while (level > 0) {
                /* Attempt to get the next object in this scope */
 
-               status = acpi_get_next_object (ACPI_TYPE_ANY, parent_handle,
-                                 child_handle, &next_child_handle);
+               status = acpi_get_next_object(ACPI_TYPE_ANY, parent_handle,
+                                             child_handle, &next_child_handle);
 
                child_handle = next_child_handle;
 
                /* Did we get a new object? */
 
-               if (ACPI_SUCCESS (status)) {
+               if (ACPI_SUCCESS(status)) {
                        /* Check if this object has any children */
 
-                       if (ACPI_SUCCESS (acpi_get_next_object (ACPI_TYPE_ANY, child_handle,
-                                        NULL, &dummy))) {
+                       if (ACPI_SUCCESS
+                           (acpi_get_next_object
+                            (ACPI_TYPE_ANY, child_handle, NULL, &dummy))) {
                                /*
                                 * There is at least one child of this object,
                                 * visit the object
@@ -399,8 +348,7 @@ acpi_ns_delete_subtree (
                                parent_handle = child_handle;
                                child_handle = NULL;
                        }
-               }
-               else {
+               } else {
                        /*
                         * No more children in this object, go back up to
                         * the object's parent
@@ -409,24 +357,23 @@ acpi_ns_delete_subtree (
 
                        /* Delete all children now */
 
-                       acpi_ns_delete_children (child_handle);
+                       acpi_ns_delete_children(child_handle);
 
                        child_handle = parent_handle;
-                       status = acpi_get_parent (parent_handle, &parent_handle);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status = acpi_get_parent(parent_handle, &parent_handle);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
                }
        }
 
        /* Now delete the starting object, and we are done */
 
-       acpi_ns_delete_node (child_handle);
+       acpi_ns_delete_node(child_handle);
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  *  FUNCTION:       acpi_ns_unload_name_space
@@ -441,32 +388,27 @@ acpi_ns_delete_subtree (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ns_unload_namespace (
-       acpi_handle                     handle)
+acpi_status acpi_ns_unload_namespace(acpi_handle handle)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ns_unload_name_space");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ns_unload_name_space");
 
        /* Parameter validation */
 
        if (!acpi_gbl_root_node) {
-               return_ACPI_STATUS (AE_NO_NAMESPACE);
+               return_ACPI_STATUS(AE_NO_NAMESPACE);
        }
 
        if (!handle) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* This function does the real work */
 
-       status = acpi_ns_delete_subtree (handle);
+       status = acpi_ns_delete_subtree(handle);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 #endif
 #endif
-
index d8ce7e39795fde0a5450b7c07859c6115c568530..d5e8dea61c278f1e3f2fe76d3713e9fd380b851b 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/amlcode.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsnames")
+ACPI_MODULE_NAME("nsnames")
 
 /* Local prototypes */
-
 static void
-acpi_ns_build_external_path (
-       struct acpi_namespace_node      *node,
-       acpi_size                       size,
-       char                            *name_buffer);
-
+acpi_ns_build_external_path(struct acpi_namespace_node *node,
+                           acpi_size size, char *name_buffer);
 
 /*******************************************************************************
  *
@@ -75,17 +69,13 @@ acpi_ns_build_external_path (
  ******************************************************************************/
 
 static void
-acpi_ns_build_external_path (
-       struct acpi_namespace_node      *node,
-       acpi_size                       size,
-       char                            *name_buffer)
+acpi_ns_build_external_path(struct acpi_namespace_node *node,
+                           acpi_size size, char *name_buffer)
 {
-       acpi_size                       index;
-       struct acpi_namespace_node      *parent_node;
-
-
-       ACPI_FUNCTION_NAME ("ns_build_external_path");
+       acpi_size index;
+       struct acpi_namespace_node *parent_node;
 
+       ACPI_FUNCTION_NAME("ns_build_external_path");
 
        /* Special case for root */
 
@@ -106,8 +96,8 @@ acpi_ns_build_external_path (
 
                /* Put the name into the buffer */
 
-               ACPI_MOVE_32_TO_32 ((name_buffer + index), &parent_node->name);
-               parent_node = acpi_ns_get_parent_node (parent_node);
+               ACPI_MOVE_32_TO_32((name_buffer + index), &parent_node->name);
+               parent_node = acpi_ns_get_parent_node(parent_node);
 
                /* Prefix name with the path separator */
 
@@ -120,15 +110,14 @@ acpi_ns_build_external_path (
        name_buffer[index] = AML_ROOT_PREFIX;
 
        if (index != 0) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Could not construct pathname; index=%X, size=%X, Path=%s\n",
-                       (u32) index, (u32) size, &name_buffer[size]));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Could not construct pathname; index=%X, size=%X, Path=%s\n",
+                                 (u32) index, (u32) size, &name_buffer[size]));
        }
 
        return;
 }
 
-
 #ifdef ACPI_DEBUG_OUTPUT
 /*******************************************************************************
  *
@@ -144,37 +133,32 @@ acpi_ns_build_external_path (
  *
  ******************************************************************************/
 
-char *
-acpi_ns_get_external_pathname (
-       struct acpi_namespace_node      *node)
+char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node)
 {
-       char                            *name_buffer;
-       acpi_size                       size;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ns_get_external_pathname", node);
+       char *name_buffer;
+       acpi_size size;
 
+       ACPI_FUNCTION_TRACE_PTR("ns_get_external_pathname", node);
 
        /* Calculate required buffer size based on depth below root */
 
-       size = acpi_ns_get_pathname_length (node);
+       size = acpi_ns_get_pathname_length(node);
 
        /* Allocate a buffer to be returned to caller */
 
-       name_buffer = ACPI_MEM_CALLOCATE (size);
+       name_buffer = ACPI_MEM_CALLOCATE(size);
        if (!name_buffer) {
-               ACPI_REPORT_ERROR (("ns_get_table_pathname: allocation failure\n"));
-               return_PTR (NULL);
+               ACPI_REPORT_ERROR(("ns_get_table_pathname: allocation failure\n"));
+               return_PTR(NULL);
        }
 
        /* Build the path in the allocated buffer */
 
-       acpi_ns_build_external_path (node, size, name_buffer);
-       return_PTR (name_buffer);
+       acpi_ns_build_external_path(node, size, name_buffer);
+       return_PTR(name_buffer);
 }
 #endif
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_pathname_length
@@ -187,16 +171,12 @@ acpi_ns_get_external_pathname (
  *
  ******************************************************************************/
 
-acpi_size
-acpi_ns_get_pathname_length (
-       struct acpi_namespace_node      *node)
+acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node)
 {
-       acpi_size                       size;
-       struct acpi_namespace_node      *next_node;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       acpi_size size;
+       struct acpi_namespace_node *next_node;
 
+       ACPI_FUNCTION_ENTRY();
 
        /*
         * Compute length of pathname as 5 * number of name segments.
@@ -207,17 +187,16 @@ acpi_ns_get_pathname_length (
 
        while (next_node && (next_node != acpi_gbl_root_node)) {
                size += ACPI_PATH_SEGMENT_LENGTH;
-               next_node = acpi_ns_get_parent_node (next_node);
+               next_node = acpi_ns_get_parent_node(next_node);
        }
 
        if (!size) {
-               size = 1;       /* Root node case */
+               size = 1;       /* Root node case */
        }
 
-       return (size + 1);  /* +1 for null string terminator */
+       return (size + 1);      /* +1 for null string terminator */
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_handle_to_pathname
@@ -233,41 +212,36 @@ acpi_ns_get_pathname_length (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_handle_to_pathname (
-       acpi_handle                     target_handle,
-       struct acpi_buffer              *buffer)
+acpi_ns_handle_to_pathname(acpi_handle target_handle,
+                          struct acpi_buffer * buffer)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-       acpi_size                       required_size;
+       acpi_status status;
+       struct acpi_namespace_node *node;
+       acpi_size required_size;
 
+       ACPI_FUNCTION_TRACE_PTR("ns_handle_to_pathname", target_handle);
 
-       ACPI_FUNCTION_TRACE_PTR ("ns_handle_to_pathname", target_handle);
-
-
-       node = acpi_ns_map_handle_to_node (target_handle);
+       node = acpi_ns_map_handle_to_node(target_handle);
        if (!node) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Determine size required for the caller buffer */
 
-       required_size = acpi_ns_get_pathname_length (node);
+       required_size = acpi_ns_get_pathname_length(node);
 
        /* Validate/Allocate/Clear caller buffer */
 
-       status = acpi_ut_initialize_buffer (buffer, required_size);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_initialize_buffer(buffer, required_size);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Build the path in the caller buffer */
 
-       acpi_ns_build_external_path (node, required_size, buffer->pointer);
+       acpi_ns_build_external_path(node, required_size, buffer->pointer);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s [%X] \n",
-               (char *) buffer->pointer, (u32) required_size));
-       return_ACPI_STATUS (AE_OK);
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "%s [%X] \n",
+                         (char *)buffer->pointer, (u32) required_size));
+       return_ACPI_STATUS(AE_OK);
 }
-
-
index 27258c1ca4f12170b76cb99bbc5ffdbc91e75222..fc9be946ebed7c24c3fef227ceed40f2bc7b8499 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsobject")
-
+ACPI_MODULE_NAME("nsobject")
 
 /*******************************************************************************
  *
  * MUTEX:       Assumes namespace is locked
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ns_attach_object (
-       struct acpi_namespace_node      *node,
-       union acpi_operand_object       *object,
-       acpi_object_type                type)
+acpi_ns_attach_object(struct acpi_namespace_node *node,
+                     union acpi_operand_object *object, acpi_object_type type)
 {
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *last_obj_desc;
-       acpi_object_type                object_type = ACPI_TYPE_ANY;
-
-
-       ACPI_FUNCTION_TRACE ("ns_attach_object");
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *last_obj_desc;
+       acpi_object_type object_type = ACPI_TYPE_ANY;
 
+       ACPI_FUNCTION_TRACE("ns_attach_object");
 
        /*
         * Parameter validation
@@ -92,40 +84,39 @@ acpi_ns_attach_object (
        if (!node) {
                /* Invalid handle */
 
-               ACPI_REPORT_ERROR (("ns_attach_object: Null named_obj handle\n"));
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               ACPI_REPORT_ERROR(("ns_attach_object: Null named_obj handle\n"));
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        if (!object && (ACPI_TYPE_ANY != type)) {
                /* Null object */
 
-               ACPI_REPORT_ERROR ((
-                       "ns_attach_object: Null object, but type not ACPI_TYPE_ANY\n"));
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               ACPI_REPORT_ERROR(("ns_attach_object: Null object, but type not ACPI_TYPE_ANY\n"));
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (node) != ACPI_DESC_TYPE_NAMED) {
+       if (ACPI_GET_DESCRIPTOR_TYPE(node) != ACPI_DESC_TYPE_NAMED) {
                /* Not a name handle */
 
-               ACPI_REPORT_ERROR (("ns_attach_object: Invalid handle %p [%s]\n",
-                               node, acpi_ut_get_descriptor_name (node)));
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               ACPI_REPORT_ERROR(("ns_attach_object: Invalid handle %p [%s]\n",
+                                  node, acpi_ut_get_descriptor_name(node)));
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Check if this object is already attached */
 
        if (node->object == object) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "Obj %p already installed in name_obj %p\n",
-                       object, node));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "Obj %p already installed in name_obj %p\n",
+                                 object, node));
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* If null object, we will just install it */
 
        if (!object) {
-               obj_desc   = NULL;
+               obj_desc = NULL;
                object_type = ACPI_TYPE_ANY;
        }
 
@@ -133,14 +124,14 @@ acpi_ns_attach_object (
         * If the source object is a namespace Node with an attached object,
         * we will use that (attached) object
         */
-       else if ((ACPI_GET_DESCRIPTOR_TYPE (object) == ACPI_DESC_TYPE_NAMED) &&
-                       ((struct acpi_namespace_node *) object)->object) {
+       else if ((ACPI_GET_DESCRIPTOR_TYPE(object) == ACPI_DESC_TYPE_NAMED) &&
+                ((struct acpi_namespace_node *)object)->object) {
                /*
                 * Value passed is a name handle and that name has a
                 * non-null value.  Use that name's value and type.
                 */
-               obj_desc   = ((struct acpi_namespace_node *) object)->object;
-               object_type = ((struct acpi_namespace_node *) object)->type;
+               obj_desc = ((struct acpi_namespace_node *)object)->object;
+               object_type = ((struct acpi_namespace_node *)object)->type;
        }
 
        /*
@@ -148,20 +139,20 @@ acpi_ns_attach_object (
         * it first
         */
        else {
-               obj_desc = (union acpi_operand_object   *) object;
+               obj_desc = (union acpi_operand_object *)object;
 
                /* Use the given type */
 
                object_type = type;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Installing %p into Node %p [%4.4s]\n",
-               obj_desc, node, acpi_ut_get_node_name (node)));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Installing %p into Node %p [%4.4s]\n",
+                         obj_desc, node, acpi_ut_get_node_name(node)));
 
        /* Detach an existing attached object if present */
 
        if (node->object) {
-               acpi_ns_detach_object (node);
+               acpi_ns_detach_object(node);
        }
 
        if (obj_desc) {
@@ -169,7 +160,7 @@ acpi_ns_attach_object (
                 * Must increment the new value's reference count
                 * (if it is an internal object)
                 */
-               acpi_ut_add_reference (obj_desc);
+               acpi_ut_add_reference(obj_desc);
 
                /*
                 * Handle objects with multiple descriptors - walk
@@ -185,13 +176,12 @@ acpi_ns_attach_object (
                last_obj_desc->common.next_object = node->object;
        }
 
-       node->type     = (u8) object_type;
-       node->object   = obj_desc;
+       node->type = (u8) object_type;
+       node->object = obj_desc;
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_detach_object
@@ -206,30 +196,27 @@ acpi_ns_attach_object (
  *
  ******************************************************************************/
 
-void
-acpi_ns_detach_object (
-       struct acpi_namespace_node      *node)
+void acpi_ns_detach_object(struct acpi_namespace_node *node)
 {
-       union acpi_operand_object       *obj_desc;
-
-
-       ACPI_FUNCTION_TRACE ("ns_detach_object");
+       union acpi_operand_object *obj_desc;
 
+       ACPI_FUNCTION_TRACE("ns_detach_object");
 
        obj_desc = node->object;
 
        if (!obj_desc ||
-               (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_LOCAL_DATA)) {
+           (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_DATA)) {
                return_VOID;
        }
 
        /* Clear the entry in all cases */
 
        node->object = NULL;
-       if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_OPERAND) {
+       if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) == ACPI_DESC_TYPE_OPERAND) {
                node->object = obj_desc->common.next_object;
                if (node->object &&
-                  (ACPI_GET_OBJECT_TYPE (node->object) != ACPI_TYPE_LOCAL_DATA)) {
+                   (ACPI_GET_OBJECT_TYPE(node->object) !=
+                    ACPI_TYPE_LOCAL_DATA)) {
                        node->object = node->object->common.next_object;
                }
        }
@@ -238,16 +225,15 @@ acpi_ns_detach_object (
 
        node->type = ACPI_TYPE_ANY;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Node %p [%4.4s] Object %p\n",
-               node, acpi_ut_get_node_name (node), obj_desc));
+       ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "Node %p [%4.4s] Object %p\n",
+                         node, acpi_ut_get_node_name(node), obj_desc));
 
        /* Remove one reference on the object (and all subobjects) */
 
-       acpi_ut_remove_reference (obj_desc);
+       acpi_ut_remove_reference(obj_desc);
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_attached_object
@@ -261,29 +247,28 @@ acpi_ns_detach_object (
  *
  ******************************************************************************/
 
-union acpi_operand_object *
-acpi_ns_get_attached_object (
-       struct acpi_namespace_node      *node)
+union acpi_operand_object *acpi_ns_get_attached_object(struct
+                                                      acpi_namespace_node
+                                                      *node)
 {
-       ACPI_FUNCTION_TRACE_PTR ("ns_get_attached_object", node);
-
+       ACPI_FUNCTION_TRACE_PTR("ns_get_attached_object", node);
 
        if (!node) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Null Node ptr\n"));
-               return_PTR (NULL);
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Null Node ptr\n"));
+               return_PTR(NULL);
        }
 
        if (!node->object ||
-                       ((ACPI_GET_DESCRIPTOR_TYPE (node->object) != ACPI_DESC_TYPE_OPERAND) &&
-                        (ACPI_GET_DESCRIPTOR_TYPE (node->object) != ACPI_DESC_TYPE_NAMED))  ||
-               (ACPI_GET_OBJECT_TYPE (node->object) == ACPI_TYPE_LOCAL_DATA)) {
-               return_PTR (NULL);
+           ((ACPI_GET_DESCRIPTOR_TYPE(node->object) != ACPI_DESC_TYPE_OPERAND)
+            && (ACPI_GET_DESCRIPTOR_TYPE(node->object) !=
+                ACPI_DESC_TYPE_NAMED))
+           || (ACPI_GET_OBJECT_TYPE(node->object) == ACPI_TYPE_LOCAL_DATA)) {
+               return_PTR(NULL);
        }
 
-       return_PTR (node->object);
+       return_PTR(node->object);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_secondary_object
@@ -297,24 +282,23 @@ acpi_ns_get_attached_object (
  *
  ******************************************************************************/
 
-union acpi_operand_object *
-acpi_ns_get_secondary_object (
-       union acpi_operand_object       *obj_desc)
+union acpi_operand_object *acpi_ns_get_secondary_object(union
+                                                       acpi_operand_object
+                                                       *obj_desc)
 {
-       ACPI_FUNCTION_TRACE_PTR ("ns_get_secondary_object", obj_desc);
-
-
-       if ((!obj_desc)                                               ||
-               (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_LOCAL_DATA) ||
-               (!obj_desc->common.next_object)                           ||
-               (ACPI_GET_OBJECT_TYPE (obj_desc->common.next_object) == ACPI_TYPE_LOCAL_DATA)) {
-               return_PTR (NULL);
+       ACPI_FUNCTION_TRACE_PTR("ns_get_secondary_object", obj_desc);
+
+       if ((!obj_desc) ||
+           (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_DATA) ||
+           (!obj_desc->common.next_object) ||
+           (ACPI_GET_OBJECT_TYPE(obj_desc->common.next_object) ==
+            ACPI_TYPE_LOCAL_DATA)) {
+               return_PTR(NULL);
        }
 
-       return_PTR (obj_desc->common.next_object);
+       return_PTR(obj_desc->common.next_object);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_attach_data
@@ -330,23 +314,20 @@ acpi_ns_get_secondary_object (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_attach_data (
-       struct acpi_namespace_node      *node,
-       acpi_object_handler             handler,
-       void                            *data)
+acpi_ns_attach_data(struct acpi_namespace_node *node,
+                   acpi_object_handler handler, void *data)
 {
-       union acpi_operand_object       *prev_obj_desc;
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *data_desc;
-
+       union acpi_operand_object *prev_obj_desc;
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *data_desc;
 
        /* We only allow one attachment per handler */
 
        prev_obj_desc = NULL;
        obj_desc = node->object;
        while (obj_desc) {
-               if ((ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_LOCAL_DATA) &&
-                       (obj_desc->data.handler == handler)) {
+               if ((ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_DATA) &&
+                   (obj_desc->data.handler == handler)) {
                        return (AE_ALREADY_EXISTS);
                }
 
@@ -356,7 +337,7 @@ acpi_ns_attach_data (
 
        /* Create an internal object for the data */
 
-       data_desc = acpi_ut_create_internal_object (ACPI_TYPE_LOCAL_DATA);
+       data_desc = acpi_ut_create_internal_object(ACPI_TYPE_LOCAL_DATA);
        if (!data_desc) {
                return (AE_NO_MEMORY);
        }
@@ -368,15 +349,13 @@ acpi_ns_attach_data (
 
        if (prev_obj_desc) {
                prev_obj_desc->common.next_object = data_desc;
-       }
-       else {
+       } else {
                node->object = data_desc;
        }
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_detach_data
@@ -392,27 +371,25 @@ acpi_ns_attach_data (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_detach_data (
-       struct acpi_namespace_node      *node,
-       acpi_object_handler             handler)
+acpi_ns_detach_data(struct acpi_namespace_node * node,
+                   acpi_object_handler handler)
 {
-       union acpi_operand_object       *obj_desc;
-       union acpi_operand_object       *prev_obj_desc;
-
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object *prev_obj_desc;
 
        prev_obj_desc = NULL;
        obj_desc = node->object;
        while (obj_desc) {
-               if ((ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_LOCAL_DATA) &&
-                       (obj_desc->data.handler == handler)) {
+               if ((ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_DATA) &&
+                   (obj_desc->data.handler == handler)) {
                        if (prev_obj_desc) {
-                               prev_obj_desc->common.next_object = obj_desc->common.next_object;
-                       }
-                       else {
+                               prev_obj_desc->common.next_object =
+                                   obj_desc->common.next_object;
+                       else {
                                node->object = obj_desc->common.next_object;
                        }
 
-                       acpi_ut_remove_reference (obj_desc);
+                       acpi_ut_remove_reference(obj_desc);
                        return (AE_OK);
                }
 
@@ -423,7 +400,6 @@ acpi_ns_detach_data (
        return (AE_NOT_FOUND);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_attached_data
@@ -440,18 +416,15 @@ acpi_ns_detach_data (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_get_attached_data (
-       struct acpi_namespace_node      *node,
-       acpi_object_handler             handler,
-       void                            **data)
+acpi_ns_get_attached_data(struct acpi_namespace_node * node,
+                         acpi_object_handler handler, void **data)
 {
-       union acpi_operand_object       *obj_desc;
-
+       union acpi_operand_object *obj_desc;
 
        obj_desc = node->object;
        while (obj_desc) {
-               if ((ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_LOCAL_DATA) &&
-                       (obj_desc->data.handler == handler)) {
+               if ((ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_LOCAL_DATA) &&
+                   (obj_desc->data.handler == handler)) {
                        *data = obj_desc->data.pointer;
                        return (AE_OK);
                }
@@ -461,5 +434,3 @@ acpi_ns_get_attached_data (
 
        return (AE_NOT_FOUND);
 }
-
-
index a0e13e8d376489ee000c2724136f7729b5815c70..433442a9ec7441c019f0360e147519f38df315b7 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acparser.h>
 #include <acpi/acdispat.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsparse")
-
+ACPI_MODULE_NAME("nsparse")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Perform one complete parse of an ACPI/AML table.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ns_one_complete_parse (
-       u32                             pass_number,
-       struct acpi_table_desc          *table_desc)
+acpi_ns_one_complete_parse(u8 pass_number, struct acpi_table_desc * table_desc)
 {
-       union acpi_parse_object         *parse_root;
-       acpi_status                     status;
-       struct acpi_walk_state          *walk_state;
-
-
-       ACPI_FUNCTION_TRACE ("ns_one_complete_parse");
+       union acpi_parse_object *parse_root;
+       acpi_status status;
+       struct acpi_walk_state *walk_state;
 
+       ACPI_FUNCTION_TRACE("ns_one_complete_parse");
 
        /* Create and init a Root Node */
 
-       parse_root = acpi_ps_create_scope_op ();
+       parse_root = acpi_ps_create_scope_op();
        if (!parse_root) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Create and initialize a new walk state */
 
-       walk_state = acpi_ds_create_walk_state (table_desc->table_id,
-                          NULL, NULL, NULL);
+       walk_state = acpi_ds_create_walk_state(table_desc->owner_id,
+                                              NULL, NULL, NULL);
        if (!walk_state) {
-               acpi_ps_free_op (parse_root);
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               acpi_ps_free_op(parse_root);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
-       status = acpi_ds_init_aml_walk (walk_state, parse_root, NULL,
-                         table_desc->aml_start, table_desc->aml_length,
-                         NULL, pass_number);
-       if (ACPI_FAILURE (status)) {
-               acpi_ds_delete_walk_state (walk_state);
-               return_ACPI_STATUS (status);
+       status = acpi_ds_init_aml_walk(walk_state, parse_root, NULL,
+                                      table_desc->aml_start,
+                                      table_desc->aml_length, NULL,
+                                      pass_number);
+       if (ACPI_FAILURE(status)) {
+               acpi_ds_delete_walk_state(walk_state);
+               return_ACPI_STATUS(status);
        }
 
        /* Parse the AML */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "*PARSE* pass %d parse\n", pass_number));
-       status = acpi_ps_parse_aml (walk_state);
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "*PARSE* pass %d parse\n",
+                         pass_number));
+       status = acpi_ps_parse_aml(walk_state);
 
-       acpi_ps_delete_parse_tree (parse_root);
-       return_ACPI_STATUS (status);
+       acpi_ps_delete_parse_tree(parse_root);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_parse_table
@@ -126,15 +119,12 @@ acpi_ns_one_complete_parse (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_parse_table (
-       struct acpi_table_desc          *table_desc,
-       struct acpi_namespace_node      *start_node)
+acpi_ns_parse_table(struct acpi_table_desc *table_desc,
+                   struct acpi_namespace_node *start_node)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ns_parse_table");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ns_parse_table");
 
        /*
         * AML Parse, pass 1
@@ -146,9 +136,10 @@ acpi_ns_parse_table (
         * to service the entire parse.  The second pass of the parse then
         * performs another complete parse of the AML..
         */
-       status = acpi_ns_one_complete_parse (1, table_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 1\n"));
+       status = acpi_ns_one_complete_parse(1, table_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -160,12 +151,11 @@ acpi_ns_parse_table (
         * overhead of this is compensated for by the fact that the
         * parse objects are all cached.
         */
-       status = acpi_ns_one_complete_parse (2, table_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "**** Start pass 2\n"));
+       status = acpi_ns_one_complete_parse(2, table_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index af8aaa9cc4f31eb4728331918997f017e6b39421..50a3ca5470ed6f1c41cd0332d7e03bec14ad4768 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nssearch")
+ACPI_MODULE_NAME("nssearch")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ns_search_parent_tree (
-       u32                             target_name,
-       struct acpi_namespace_node      *node,
-       acpi_object_type                type,
-       struct acpi_namespace_node      **return_node);
-
+acpi_ns_search_parent_tree(u32 target_name,
+                          struct acpi_namespace_node *node,
+                          acpi_object_type type,
+                          struct acpi_namespace_node **return_node);
 
 /*******************************************************************************
  *
@@ -87,30 +82,28 @@ acpi_ns_search_parent_tree (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_search_node (
-       u32                             target_name,
-       struct acpi_namespace_node      *node,
-       acpi_object_type                type,
-       struct acpi_namespace_node      **return_node)
+acpi_ns_search_node(u32 target_name,
+                   struct acpi_namespace_node *node,
+                   acpi_object_type type,
+                   struct acpi_namespace_node **return_node)
 {
-       struct acpi_namespace_node      *next_node;
-
-
-       ACPI_FUNCTION_TRACE ("ns_search_node");
+       struct acpi_namespace_node *next_node;
 
+       ACPI_FUNCTION_TRACE("ns_search_node");
 
 #ifdef ACPI_DEBUG_OUTPUT
        if (ACPI_LV_NAMES & acpi_dbg_level) {
-               char                        *scope_name;
+               char *scope_name;
 
-               scope_name = acpi_ns_get_external_pathname (node);
+               scope_name = acpi_ns_get_external_pathname(node);
                if (scope_name) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                               "Searching %s (%p) For [%4.4s] (%s)\n",
-                               scope_name, node, (char *) &target_name,
-                               acpi_ut_get_type_name (type)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "Searching %s (%p) For [%4.4s] (%s)\n",
+                                         scope_name, node,
+                                         (char *)&target_name,
+                                         acpi_ut_get_type_name(type)));
 
-                       ACPI_MEM_FREE (scope_name);
+                       ACPI_MEM_FREE(scope_name);
                }
        }
 #endif
@@ -126,20 +119,26 @@ acpi_ns_search_node (
                if (next_node->name.integer == target_name) {
                        /* Resolve a control method alias if any */
 
-                       if (acpi_ns_get_type (next_node) == ACPI_TYPE_LOCAL_METHOD_ALIAS) {
-                               next_node = ACPI_CAST_PTR (struct acpi_namespace_node, next_node->object);
+                       if (acpi_ns_get_type(next_node) ==
+                           ACPI_TYPE_LOCAL_METHOD_ALIAS) {
+                               next_node =
+                                   ACPI_CAST_PTR(struct acpi_namespace_node,
+                                                 next_node->object);
                        }
 
                        /*
                         * Found matching entry.
                         */
-                       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                               "Name [%4.4s] (%s) %p found in scope [%4.4s] %p\n",
-                               (char *) &target_name, acpi_ut_get_type_name (next_node->type),
-                               next_node, acpi_ut_get_node_name (node), node));
+                       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                         "Name [%4.4s] (%s) %p found in scope [%4.4s] %p\n",
+                                         (char *)&target_name,
+                                         acpi_ut_get_type_name(next_node->
+                                                               type),
+                                         next_node,
+                                         acpi_ut_get_node_name(node), node));
 
                        *return_node = next_node;
-                       return_ACPI_STATUS (AE_OK);
+                       return_ACPI_STATUS(AE_OK);
                }
 
                /*
@@ -159,15 +158,14 @@ acpi_ns_search_node (
 
        /* Searched entire namespace level, not found */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-               "Name [%4.4s] (%s) not found in search in scope [%4.4s] %p first child %p\n",
-               (char *) &target_name, acpi_ut_get_type_name (type),
-               acpi_ut_get_node_name (node), node, node->child));
+       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                         "Name [%4.4s] (%s) not found in search in scope [%4.4s] %p first child %p\n",
+                         (char *)&target_name, acpi_ut_get_type_name(type),
+                         acpi_ut_get_node_name(node), node, node->child));
 
-       return_ACPI_STATUS (AE_NOT_FOUND);
+       return_ACPI_STATUS(AE_NOT_FOUND);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_search_parent_tree
@@ -194,43 +192,42 @@ acpi_ns_search_node (
  ******************************************************************************/
 
 static acpi_status
-acpi_ns_search_parent_tree (
-       u32                             target_name,
-       struct acpi_namespace_node      *node,
-       acpi_object_type                type,
-       struct acpi_namespace_node      **return_node)
+acpi_ns_search_parent_tree(u32 target_name,
+                          struct acpi_namespace_node *node,
+                          acpi_object_type type,
+                          struct acpi_namespace_node **return_node)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *parent_node;
+       acpi_status status;
+       struct acpi_namespace_node *parent_node;
 
+       ACPI_FUNCTION_TRACE("ns_search_parent_tree");
 
-       ACPI_FUNCTION_TRACE ("ns_search_parent_tree");
-
-
-       parent_node = acpi_ns_get_parent_node (node);
+       parent_node = acpi_ns_get_parent_node(node);
 
        /*
         * If there is no parent (i.e., we are at the root) or type is "local",
         * we won't be searching the parent tree.
         */
        if (!parent_node) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[%4.4s] has no parent\n",
-                       (char *) &target_name));
-               return_ACPI_STATUS (AE_NOT_FOUND);
+               ACPI_DEBUG_PRINT((ACPI_DB_NAMES, "[%4.4s] has no parent\n",
+                                 (char *)&target_name));
+               return_ACPI_STATUS(AE_NOT_FOUND);
        }
 
-       if (acpi_ns_local (type)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                       "[%4.4s] type [%s] must be local to this scope (no parent search)\n",
-                       (char *) &target_name, acpi_ut_get_type_name (type)));
-               return_ACPI_STATUS (AE_NOT_FOUND);
+       if (acpi_ns_local(type)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                 "[%4.4s] type [%s] must be local to this scope (no parent search)\n",
+                                 (char *)&target_name,
+                                 acpi_ut_get_type_name(type)));
+               return_ACPI_STATUS(AE_NOT_FOUND);
        }
 
        /* Search the parent tree */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-               "Searching parent [%4.4s] for [%4.4s]\n",
-               acpi_ut_get_node_name (parent_node), (char *) &target_name));
+       ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                         "Searching parent [%4.4s] for [%4.4s]\n",
+                         acpi_ut_get_node_name(parent_node),
+                         (char *)&target_name));
 
        /*
         * Search parents until target is found or we have backed up to the root
@@ -241,25 +238,24 @@ acpi_ns_search_parent_tree (
                 * object type at this point, we only care about the existence of
                 * the actual name we are searching for.  Typechecking comes later.
                 */
-               status = acpi_ns_search_node (target_name, parent_node,
-                                 ACPI_TYPE_ANY, return_node);
-               if (ACPI_SUCCESS (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ns_search_node(target_name, parent_node,
+                                            ACPI_TYPE_ANY, return_node);
+               if (ACPI_SUCCESS(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /*
                 * Not found here, go up another level
                 * (until we reach the root)
                 */
-               parent_node = acpi_ns_get_parent_node (parent_node);
+               parent_node = acpi_ns_get_parent_node(parent_node);
        }
 
        /* Not found in parent tree */
 
-       return_ACPI_STATUS (AE_NOT_FOUND);
+       return_ACPI_STATUS(AE_NOT_FOUND);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_search_and_enter
@@ -286,52 +282,46 @@ acpi_ns_search_parent_tree (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_search_and_enter (
-       u32                             target_name,
-       struct acpi_walk_state          *walk_state,
-       struct acpi_namespace_node      *node,
-       acpi_interpreter_mode           interpreter_mode,
-       acpi_object_type                type,
-       u32                             flags,
-       struct acpi_namespace_node      **return_node)
+acpi_ns_search_and_enter(u32 target_name,
+                        struct acpi_walk_state *walk_state,
+                        struct acpi_namespace_node *node,
+                        acpi_interpreter_mode interpreter_mode,
+                        acpi_object_type type,
+                        u32 flags, struct acpi_namespace_node **return_node)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *new_node;
-
-
-       ACPI_FUNCTION_TRACE ("ns_search_and_enter");
+       acpi_status status;
+       struct acpi_namespace_node *new_node;
 
+       ACPI_FUNCTION_TRACE("ns_search_and_enter");
 
        /* Parameter validation */
 
        if (!node || !target_name || !return_node) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Null param: Node %p Name %X return_node %p\n",
-                       node, target_name, return_node));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Null param: Node %p Name %X return_node %p\n",
+                                 node, target_name, return_node));
 
-               ACPI_REPORT_ERROR (("ns_search_and_enter: Null parameter\n"));
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               ACPI_REPORT_ERROR(("ns_search_and_enter: Null parameter\n"));
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Name must consist of printable characters */
 
-       if (!acpi_ut_valid_acpi_name (target_name)) {
-               ACPI_REPORT_ERROR (("ns_search_and_enter: Bad character in ACPI Name: %X\n",
-                       target_name));
-               return_ACPI_STATUS (AE_BAD_CHARACTER);
+       if (!acpi_ut_valid_acpi_name(target_name)) {
+               ACPI_REPORT_ERROR(("ns_search_and_enter: Bad character in ACPI Name: %X\n", target_name));
+               return_ACPI_STATUS(AE_BAD_CHARACTER);
        }
 
        /* Try to find the name in the namespace level specified by the caller */
 
        *return_node = ACPI_ENTRY_NOT_FOUND;
-       status = acpi_ns_search_node (target_name, node, type, return_node);
+       status = acpi_ns_search_node(target_name, node, type, return_node);
        if (status != AE_NOT_FOUND) {
                /*
                 * If we found it AND the request specifies that a find is an error,
                 * return the error
                 */
-               if ((status == AE_OK) &&
-                       (flags & ACPI_NS_ERROR_IF_FOUND)) {
+               if ((status == AE_OK) && (flags & ACPI_NS_ERROR_IF_FOUND)) {
                        status = AE_ALREADY_EXISTS;
                }
 
@@ -339,7 +329,7 @@ acpi_ns_search_and_enter (
                 * Either found it or there was an error
                 * -- finished either way
                 */
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -351,14 +341,16 @@ acpi_ns_search_and_enter (
         * and during the execution phase.
         */
        if ((interpreter_mode != ACPI_IMODE_LOAD_PASS1) &&
-               (flags & ACPI_NS_SEARCH_PARENT)) {
+           (flags & ACPI_NS_SEARCH_PARENT)) {
                /*
                 * Not found at this level - search parent tree according to the
                 * ACPI specification
                 */
-               status = acpi_ns_search_parent_tree (target_name, node, type, return_node);
-               if (ACPI_SUCCESS (status)) {
-                       return_ACPI_STATUS (status);
+               status =
+                   acpi_ns_search_parent_tree(target_name, node, type,
+                                              return_node);
+               if (ACPI_SUCCESS(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -366,25 +358,24 @@ acpi_ns_search_and_enter (
         * In execute mode, just search, never add names.  Exit now.
         */
        if (interpreter_mode == ACPI_IMODE_EXECUTE) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
-                       "%4.4s Not found in %p [Not adding]\n",
-                       (char *) &target_name, node));
+               ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                 "%4.4s Not found in %p [Not adding]\n",
+                                 (char *)&target_name, node));
 
-               return_ACPI_STATUS (AE_NOT_FOUND);
+               return_ACPI_STATUS(AE_NOT_FOUND);
        }
 
        /* Create the new named object */
 
-       new_node = acpi_ns_create_node (target_name);
+       new_node = acpi_ns_create_node(target_name);
        if (!new_node) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Install the new object into the parent's list of children */
 
-       acpi_ns_install_node (walk_state, node, new_node, type);
+       acpi_ns_install_node(walk_state, node, new_node, type);
        *return_node = new_node;
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
index c53b82e94ce3b973a2f0cac18871166734e1ea97..ebec036423c9af25db4d25d029d946a5fce08a35 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 #include <acpi/amlcode.h>
 #include <acpi/actables.h>
 
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsutils")
+ACPI_MODULE_NAME("nsutils")
 
 /* Local prototypes */
-
-static u8
-acpi_ns_valid_path_separator (
-       char                            sep);
+static u8 acpi_ns_valid_path_separator(char sep);
 
 #ifdef ACPI_OBSOLETE_FUNCTIONS
-acpi_name
-acpi_ns_find_parent_name (
-       struct acpi_namespace_node      *node_to_search);
+acpi_name acpi_ns_find_parent_name(struct acpi_namespace_node *node_to_search);
 #endif
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_report_error
@@ -81,51 +74,45 @@ acpi_ns_find_parent_name (
  ******************************************************************************/
 
 void
-acpi_ns_report_error (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id,
-       char                            *internal_name,
-       acpi_status                     lookup_status)
+acpi_ns_report_error(char *module_name,
+                    u32 line_number,
+                    u32 component_id,
+                    char *internal_name, acpi_status lookup_status)
 {
-       acpi_status                     status;
-       char                            *name = NULL;
-
+       acpi_status status;
+       char *name = NULL;
 
-       acpi_os_printf ("%8s-%04d: *** Error: Looking up ",
-               module_name, line_number);
+       acpi_os_printf("%8s-%04d: *** Error: Looking up ",
+                      module_name, line_number);
 
        if (lookup_status == AE_BAD_CHARACTER) {
                /* There is a non-ascii character in the name */
 
-               acpi_os_printf ("[0x%4.4X] (NON-ASCII)\n",
-                       *(ACPI_CAST_PTR (u32, internal_name)));
-       }
-       else {
+               acpi_os_printf("[0x%4.4X] (NON-ASCII)\n",
+                              *(ACPI_CAST_PTR(u32, internal_name)));
+       } else {
                /* Convert path to external format */
 
-               status = acpi_ns_externalize_name (ACPI_UINT32_MAX,
-                                internal_name, NULL, &name);
+               status = acpi_ns_externalize_name(ACPI_UINT32_MAX,
+                                                 internal_name, NULL, &name);
 
                /* Print target name */
 
-               if (ACPI_SUCCESS (status)) {
-                       acpi_os_printf ("[%s]", name);
-               }
-               else {
-                       acpi_os_printf ("[COULD NOT EXTERNALIZE NAME]");
+               if (ACPI_SUCCESS(status)) {
+                       acpi_os_printf("[%s]", name);
+               } else {
+                       acpi_os_printf("[COULD NOT EXTERNALIZE NAME]");
                }
 
                if (name) {
-                       ACPI_MEM_FREE (name);
+                       ACPI_MEM_FREE(name);
                }
        }
 
-       acpi_os_printf (" in namespace, %s\n",
-               acpi_format_exception (lookup_status));
+       acpi_os_printf(" in namespace, %s\n",
+                      acpi_format_exception(lookup_status));
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_report_method_error
@@ -145,34 +132,31 @@ acpi_ns_report_error (
  ******************************************************************************/
 
 void
-acpi_ns_report_method_error (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id,
-       char                            *message,
-       struct acpi_namespace_node      *prefix_node,
-       char                            *path,
-       acpi_status                     method_status)
+acpi_ns_report_method_error(char *module_name,
+                           u32 line_number,
+                           u32 component_id,
+                           char *message,
+                           struct acpi_namespace_node *prefix_node,
+                           char *path, acpi_status method_status)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node = prefix_node;
-
+       acpi_status status;
+       struct acpi_namespace_node *node = prefix_node;
 
        if (path) {
-               status = acpi_ns_get_node_by_path (path, prefix_node,
-                                ACPI_NS_NO_UPSEARCH, &node);
-               if (ACPI_FAILURE (status)) {
-                       acpi_os_printf ("report_method_error: Could not get node\n");
+               status = acpi_ns_get_node_by_path(path, prefix_node,
+                                                 ACPI_NS_NO_UPSEARCH, &node);
+               if (ACPI_FAILURE(status)) {
+                       acpi_os_printf
+                           ("report_method_error: Could not get node\n");
                        return;
                }
        }
 
-       acpi_os_printf ("%8s-%04d: *** Error: ", module_name, line_number);
-       acpi_ns_print_node_pathname (node, message);
-       acpi_os_printf (", %s\n", acpi_format_exception (method_status));
+       acpi_os_printf("%8s-%04d: *** Error: ", module_name, line_number);
+       acpi_ns_print_node_pathname(node, message);
+       acpi_os_printf(", %s\n", acpi_format_exception(method_status));
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_print_node_pathname
@@ -186,16 +170,13 @@ acpi_ns_report_method_error (
  ******************************************************************************/
 
 void
-acpi_ns_print_node_pathname (
-       struct acpi_namespace_node      *node,
-       char                            *message)
+acpi_ns_print_node_pathname(struct acpi_namespace_node *node, char *message)
 {
-       struct acpi_buffer              buffer;
-       acpi_status                     status;
-
+       struct acpi_buffer buffer;
+       acpi_status status;
 
        if (!node) {
-               acpi_os_printf ("[NULL NAME]");
+               acpi_os_printf("[NULL NAME]");
                return;
        }
 
@@ -203,18 +184,17 @@ acpi_ns_print_node_pathname (
 
        buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
 
-       status = acpi_ns_handle_to_pathname (node, &buffer);
-       if (ACPI_SUCCESS (status)) {
+       status = acpi_ns_handle_to_pathname(node, &buffer);
+       if (ACPI_SUCCESS(status)) {
                if (message) {
-                       acpi_os_printf ("%s ", message);
+                       acpi_os_printf("%s ", message);
                }
 
-               acpi_os_printf ("[%s] (Node %p)", (char *) buffer.pointer, node);
-               ACPI_MEM_FREE (buffer.pointer);
+               acpi_os_printf("[%s] (Node %p)", (char *)buffer.pointer, node);
+               ACPI_MEM_FREE(buffer.pointer);
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_valid_root_prefix
@@ -227,15 +207,12 @@ acpi_ns_print_node_pathname (
  *
  ******************************************************************************/
 
-u8
-acpi_ns_valid_root_prefix (
-       char                            prefix)
+u8 acpi_ns_valid_root_prefix(char prefix)
 {
 
        return ((u8) (prefix == '\\'));
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_valid_path_separator
@@ -248,15 +225,12 @@ acpi_ns_valid_root_prefix (
  *
  ******************************************************************************/
 
-static u8
-acpi_ns_valid_path_separator (
-       char                            sep)
+static u8 acpi_ns_valid_path_separator(char sep)
 {
 
        return ((u8) (sep == '.'));
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_type
@@ -269,22 +243,18 @@ acpi_ns_valid_path_separator (
  *
  ******************************************************************************/
 
-acpi_object_type
-acpi_ns_get_type (
-       struct acpi_namespace_node      *node)
+acpi_object_type acpi_ns_get_type(struct acpi_namespace_node * node)
 {
-       ACPI_FUNCTION_TRACE ("ns_get_type");
-
+       ACPI_FUNCTION_TRACE("ns_get_type");
 
        if (!node) {
-               ACPI_REPORT_WARNING (("ns_get_type: Null Node input pointer\n"));
-               return_VALUE (ACPI_TYPE_ANY);
+               ACPI_REPORT_WARNING(("ns_get_type: Null Node input pointer\n"));
+               return_VALUE(ACPI_TYPE_ANY);
        }
 
-       return_VALUE ((acpi_object_type) node->type);
+       return_VALUE((acpi_object_type) node->type);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_local
@@ -298,24 +268,20 @@ acpi_ns_get_type (
  *
  ******************************************************************************/
 
-u32
-acpi_ns_local (
-       acpi_object_type                type)
+u32 acpi_ns_local(acpi_object_type type)
 {
-       ACPI_FUNCTION_TRACE ("ns_local");
-
+       ACPI_FUNCTION_TRACE("ns_local");
 
-       if (!acpi_ut_valid_object_type (type)) {
+       if (!acpi_ut_valid_object_type(type)) {
                /* Type code out of range  */
 
-               ACPI_REPORT_WARNING (("ns_local: Invalid Object Type\n"));
-               return_VALUE (ACPI_NS_NORMAL);
+               ACPI_REPORT_WARNING(("ns_local: Invalid Object Type\n"));
+               return_VALUE(ACPI_NS_NORMAL);
        }
 
-       return_VALUE ((u32) acpi_gbl_ns_properties[type] & ACPI_NS_LOCAL);
+       return_VALUE((u32) acpi_gbl_ns_properties[type] & ACPI_NS_LOCAL);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_internal_name_length
@@ -330,16 +296,12 @@ acpi_ns_local (
  *
  ******************************************************************************/
 
-void
-acpi_ns_get_internal_name_length (
-       struct acpi_namestring_info     *info)
+void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info)
 {
-       char                            *next_external_char;
-       u32                             i;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       char *next_external_char;
+       u32 i;
 
+       ACPI_FUNCTION_ENTRY();
 
        next_external_char = info->external_name;
        info->num_carats = 0;
@@ -353,11 +315,10 @@ acpi_ns_get_internal_name_length (
         *
         * strlen() + 1 covers the first name_seg, which has no path separator
         */
-       if (acpi_ns_valid_root_prefix (next_external_char[0])) {
+       if (acpi_ns_valid_root_prefix(next_external_char[0])) {
                info->fully_qualified = TRUE;
                next_external_char++;
-       }
-       else {
+       } else {
                /*
                 * Handle Carat prefixes
                 */
@@ -375,19 +336,18 @@ acpi_ns_get_internal_name_length (
        if (*next_external_char) {
                info->num_segments = 1;
                for (i = 0; next_external_char[i]; i++) {
-                       if (acpi_ns_valid_path_separator (next_external_char[i])) {
+                       if (acpi_ns_valid_path_separator(next_external_char[i])) {
                                info->num_segments++;
                        }
                }
        }
 
        info->length = (ACPI_NAME_SIZE * info->num_segments) +
-                         4 + info->num_carats;
+           4 + info->num_carats;
 
        info->next_external_char = next_external_char;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_build_internal_name
@@ -401,19 +361,15 @@ acpi_ns_get_internal_name_length (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ns_build_internal_name (
-       struct acpi_namestring_info     *info)
+acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)
 {
-       u32                             num_segments = info->num_segments;
-       char                            *internal_name = info->internal_name;
-       char                            *external_name = info->next_external_char;
-       char                            *result = NULL;
-       acpi_native_uint                i;
-
-
-       ACPI_FUNCTION_TRACE ("ns_build_internal_name");
+       u32 num_segments = info->num_segments;
+       char *internal_name = info->internal_name;
+       char *external_name = info->next_external_char;
+       char *result = NULL;
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_TRACE("ns_build_internal_name");
 
        /* Setup the correct prefixes, counts, and pointers */
 
@@ -422,18 +378,15 @@ acpi_ns_build_internal_name (
 
                if (num_segments <= 1) {
                        result = &internal_name[1];
-               }
-               else if (num_segments == 2) {
+               } else if (num_segments == 2) {
                        internal_name[1] = AML_DUAL_NAME_PREFIX;
                        result = &internal_name[2];
-               }
-               else {
+               } else {
                        internal_name[1] = AML_MULTI_NAME_PREFIX_OP;
-                       internal_name[2] = (char) num_segments;
+                       internal_name[2] = (char)num_segments;
                        result = &internal_name[3];
                }
-       }
-       else {
+       } else {
                /*
                 * Not fully qualified.
                 * Handle Carats first, then append the name segments
@@ -447,15 +400,14 @@ acpi_ns_build_internal_name (
 
                if (num_segments <= 1) {
                        result = &internal_name[i];
-               }
-               else if (num_segments == 2) {
+               } else if (num_segments == 2) {
                        internal_name[i] = AML_DUAL_NAME_PREFIX;
-                       result = &internal_name[(acpi_native_uint) (i+1)];
-               }
-               else {
+                       result = &internal_name[(acpi_native_uint) (i + 1)];
+               } else {
                        internal_name[i] = AML_MULTI_NAME_PREFIX_OP;
-                       internal_name[(acpi_native_uint) (i+1)] = (char) num_segments;
-                       result = &internal_name[(acpi_native_uint) (i+2)];
+                       internal_name[(acpi_native_uint) (i + 1)] =
+                           (char)num_segments;
+                       result = &internal_name[(acpi_native_uint) (i + 2)];
                }
        }
 
@@ -463,25 +415,25 @@ acpi_ns_build_internal_name (
 
        for (; num_segments; num_segments--) {
                for (i = 0; i < ACPI_NAME_SIZE; i++) {
-                       if (acpi_ns_valid_path_separator (*external_name) ||
-                          (*external_name == 0)) {
+                       if (acpi_ns_valid_path_separator(*external_name) ||
+                           (*external_name == 0)) {
                                /* Pad the segment with underscore(s) if segment is short */
 
                                result[i] = '_';
-                       }
-                       else {
+                       } else {
                                /* Convert the character to uppercase and save it */
 
-                               result[i] = (char) ACPI_TOUPPER ((int) *external_name);
+                               result[i] =
+                                   (char)ACPI_TOUPPER((int)*external_name);
                                external_name++;
                        }
                }
 
                /* Now we must have a path separator, or the pathname is bad */
 
-               if (!acpi_ns_valid_path_separator (*external_name) &&
-                       (*external_name != 0)) {
-                       return_ACPI_STATUS (AE_BAD_PARAMETER);
+               if (!acpi_ns_valid_path_separator(*external_name) &&
+                   (*external_name != 0)) {
+                       return_ACPI_STATUS(AE_BAD_PARAMETER);
                }
 
                /* Move on the next segment */
@@ -495,18 +447,17 @@ acpi_ns_build_internal_name (
        *result = 0;
 
        if (info->fully_qualified) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Returning [%p] (abs) \"\\%s\"\n",
-                       internal_name, internal_name));
-       }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Returning [%p] (rel) \"%s\"\n",
-                       internal_name, internal_name));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "Returning [%p] (abs) \"\\%s\"\n",
+                                 internal_name, internal_name));
+       else {
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Returning [%p] (rel) \"%s\"\n",
+                                 internal_name, internal_name));
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_internalize_name
@@ -522,51 +473,43 @@ acpi_ns_build_internal_name (
  *
  *******************************************************************************/
 
-acpi_status
-acpi_ns_internalize_name (
-       char                            *external_name,
-       char                            **converted_name)
+acpi_status acpi_ns_internalize_name(char *external_name, char **converted_name)
 {
-       char                            *internal_name;
-       struct acpi_namestring_info     info;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ns_internalize_name");
+       char *internal_name;
+       struct acpi_namestring_info info;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ns_internalize_name");
 
-       if ((!external_name)     ||
-               (*external_name == 0) ||
-               (!converted_name)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((!external_name) || (*external_name == 0) || (!converted_name)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Get the length of the new internal name */
 
        info.external_name = external_name;
-       acpi_ns_get_internal_name_length (&info);
+       acpi_ns_get_internal_name_length(&info);
 
        /* We need a segment to store the internal  name */
 
-       internal_name = ACPI_MEM_CALLOCATE (info.length);
+       internal_name = ACPI_MEM_CALLOCATE(info.length);
        if (!internal_name) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Build the name */
 
        info.internal_name = internal_name;
-       status = acpi_ns_build_internal_name (&info);
-       if (ACPI_FAILURE (status)) {
-               ACPI_MEM_FREE (internal_name);
-               return_ACPI_STATUS (status);
+       status = acpi_ns_build_internal_name(&info);
+       if (ACPI_FAILURE(status)) {
+               ACPI_MEM_FREE(internal_name);
+               return_ACPI_STATUS(status);
        }
 
        *converted_name = internal_name;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_externalize_name
@@ -585,27 +528,21 @@ acpi_ns_internalize_name (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_externalize_name (
-       u32                             internal_name_length,
-       char                            *internal_name,
-       u32                             *converted_name_length,
-       char                            **converted_name)
+acpi_ns_externalize_name(u32 internal_name_length,
+                        char *internal_name,
+                        u32 * converted_name_length, char **converted_name)
 {
-       acpi_native_uint                names_index = 0;
-       acpi_native_uint                num_segments = 0;
-       acpi_native_uint                required_length;
-       acpi_native_uint                prefix_length = 0;
-       acpi_native_uint                i = 0;
-       acpi_native_uint                j = 0;
-
+       acpi_native_uint names_index = 0;
+       acpi_native_uint num_segments = 0;
+       acpi_native_uint required_length;
+       acpi_native_uint prefix_length = 0;
+       acpi_native_uint i = 0;
+       acpi_native_uint j = 0;
 
-       ACPI_FUNCTION_TRACE ("ns_externalize_name");
+       ACPI_FUNCTION_TRACE("ns_externalize_name");
 
-
-       if (!internal_name_length   ||
-               !internal_name          ||
-               !converted_name) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if (!internal_name_length || !internal_name || !converted_name) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
@@ -620,8 +557,7 @@ acpi_ns_externalize_name (
                for (i = 0; i < internal_name_length; i++) {
                        if (internal_name[i] == '^') {
                                prefix_length = i + 1;
-                       }
-                       else {
+                       } else {
                                break;
                        }
                }
@@ -648,7 +584,8 @@ acpi_ns_externalize_name (
 
                        names_index = prefix_length + 2;
                        num_segments = (acpi_native_uint) (u8)
-                                          internal_name[(acpi_native_uint) (prefix_length + 1)];
+                           internal_name[(acpi_native_uint)
+                                         (prefix_length + 1)];
                        break;
 
                case AML_DUAL_NAME_PREFIX:
@@ -683,23 +620,23 @@ acpi_ns_externalize_name (
         * punctuation ('.') between object names, plus the NULL terminator.
         */
        required_length = prefix_length + (4 * num_segments) +
-                          ((num_segments > 0) ? (num_segments - 1) : 0) + 1;
+           ((num_segments > 0) ? (num_segments - 1) : 0) + 1;
 
        /*
         * Check to see if we're still in bounds.  If not, there's a problem
         * with internal_name (invalid format).
         */
        if (required_length > internal_name_length) {
-               ACPI_REPORT_ERROR (("ns_externalize_name: Invalid internal name\n"));
-               return_ACPI_STATUS (AE_BAD_PATHNAME);
+               ACPI_REPORT_ERROR(("ns_externalize_name: Invalid internal name\n"));
+               return_ACPI_STATUS(AE_BAD_PATHNAME);
        }
 
        /*
         * Build converted_name
         */
-       *converted_name = ACPI_MEM_CALLOCATE (required_length);
+       *converted_name = ACPI_MEM_CALLOCATE(required_length);
        if (!(*converted_name)) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        j = 0;
@@ -725,10 +662,9 @@ acpi_ns_externalize_name (
                *converted_name_length = (u32) required_length;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_map_handle_to_node
@@ -745,13 +681,10 @@ acpi_ns_externalize_name (
  *
  ******************************************************************************/
 
-struct acpi_namespace_node *
-acpi_ns_map_handle_to_node (
-       acpi_handle                     handle)
+struct acpi_namespace_node *acpi_ns_map_handle_to_node(acpi_handle handle)
 {
 
-       ACPI_FUNCTION_ENTRY ();
-
+       ACPI_FUNCTION_ENTRY();
 
        /*
         * Simple implementation.
@@ -766,14 +699,13 @@ acpi_ns_map_handle_to_node (
 
        /* We can at least attempt to verify the handle */
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (handle) != ACPI_DESC_TYPE_NAMED) {
+       if (ACPI_GET_DESCRIPTOR_TYPE(handle) != ACPI_DESC_TYPE_NAMED) {
                return (NULL);
        }
 
-       return ((struct acpi_namespace_node *) handle);
+       return ((struct acpi_namespace_node *)handle);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_convert_entry_to_handle
@@ -786,18 +718,14 @@ acpi_ns_map_handle_to_node (
  *
  ******************************************************************************/
 
-acpi_handle
-acpi_ns_convert_entry_to_handle (
-       struct acpi_namespace_node          *node)
+acpi_handle acpi_ns_convert_entry_to_handle(struct acpi_namespace_node *node)
 {
 
-
        /*
         * Simple implementation for now;
         */
        return ((acpi_handle) node);
 
-
 /* Example future implementation ---------------------
 
        if (!Node)
@@ -810,12 +738,10 @@ acpi_ns_convert_entry_to_handle (
                return (ACPI_ROOT_OBJECT);
        }
 
-
        return ((acpi_handle) Node);
 ------------------------------------------------------*/
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_terminate
@@ -828,42 +754,37 @@ acpi_ns_convert_entry_to_handle (
  *
  ******************************************************************************/
 
-void
-acpi_ns_terminate (
-       void)
+void acpi_ns_terminate(void)
 {
-       union acpi_operand_object       *obj_desc;
-
-
-       ACPI_FUNCTION_TRACE ("ns_terminate");
+       union acpi_operand_object *obj_desc;
 
+       ACPI_FUNCTION_TRACE("ns_terminate");
 
        /*
         * 1) Free the entire namespace -- all nodes and objects
         *
         * Delete all object descriptors attached to namepsace nodes
         */
-       acpi_ns_delete_namespace_subtree (acpi_gbl_root_node);
+       acpi_ns_delete_namespace_subtree(acpi_gbl_root_node);
 
        /* Detach any objects attached to the root */
 
-       obj_desc = acpi_ns_get_attached_object (acpi_gbl_root_node);
+       obj_desc = acpi_ns_get_attached_object(acpi_gbl_root_node);
        if (obj_desc) {
-               acpi_ns_detach_object (acpi_gbl_root_node);
+               acpi_ns_detach_object(acpi_gbl_root_node);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Namespace freed\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Namespace freed\n"));
 
        /*
         * 2) Now we can delete the ACPI tables
         */
-       acpi_tb_delete_all_tables ();
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ACPI Tables freed\n"));
+       acpi_tb_delete_all_tables();
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "ACPI Tables freed\n"));
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_opens_scope
@@ -875,24 +796,21 @@ acpi_ns_terminate (
  *
  ******************************************************************************/
 
-u32
-acpi_ns_opens_scope (
-       acpi_object_type                type)
+u32 acpi_ns_opens_scope(acpi_object_type type)
 {
-       ACPI_FUNCTION_TRACE_STR ("ns_opens_scope", acpi_ut_get_type_name (type));
-
+       ACPI_FUNCTION_TRACE_STR("ns_opens_scope", acpi_ut_get_type_name(type));
 
-       if (!acpi_ut_valid_object_type (type)) {
+       if (!acpi_ut_valid_object_type(type)) {
                /* type code out of range  */
 
-               ACPI_REPORT_WARNING (("ns_opens_scope: Invalid Object Type %X\n", type));
-               return_VALUE (ACPI_NS_NORMAL);
+               ACPI_REPORT_WARNING(("ns_opens_scope: Invalid Object Type %X\n",
+                                    type));
+               return_VALUE(ACPI_NS_NORMAL);
        }
 
-       return_VALUE (((u32) acpi_gbl_ns_properties[type]) & ACPI_NS_NEWSCOPE);
+       return_VALUE(((u32) acpi_gbl_ns_properties[type]) & ACPI_NS_NEWSCOPE);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_node_by_path
@@ -916,33 +834,29 @@ acpi_ns_opens_scope (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_get_node_by_path (
-       char                            *pathname,
-       struct acpi_namespace_node      *start_node,
-       u32                             flags,
-       struct acpi_namespace_node      **return_node)
+acpi_ns_get_node_by_path(char *pathname,
+                        struct acpi_namespace_node *start_node,
+                        u32 flags, struct acpi_namespace_node **return_node)
 {
-       union acpi_generic_state        scope_info;
-       acpi_status                     status;
-       char                            *internal_path = NULL;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ns_get_node_by_path", pathname);
+       union acpi_generic_state scope_info;
+       acpi_status status;
+       char *internal_path = NULL;
 
+       ACPI_FUNCTION_TRACE_PTR("ns_get_node_by_path", pathname);
 
        if (pathname) {
                /* Convert path to internal representation */
 
-               status = acpi_ns_internalize_name (pathname, &internal_path);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ns_internalize_name(pathname, &internal_path);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Must lock namespace during lookup */
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
@@ -952,25 +866,25 @@ acpi_ns_get_node_by_path (
 
        /* Lookup the name in the namespace */
 
-       status = acpi_ns_lookup (&scope_info, internal_path,
-                        ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
-                        (flags | ACPI_NS_DONT_OPEN_SCOPE),
-                        NULL, return_node);
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s, %s\n",
-                               internal_path, acpi_format_exception (status)));
+       status = acpi_ns_lookup(&scope_info, internal_path,
+                               ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE,
+                               (flags | ACPI_NS_DONT_OPEN_SCOPE),
+                               NULL, return_node);
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s, %s\n",
+                                 internal_path,
+                                 acpi_format_exception(status)));
        }
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
 
-cleanup:
+      cleanup:
        if (internal_path) {
-               ACPI_MEM_FREE (internal_path);
+               ACPI_MEM_FREE(internal_path);
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_parent_node
@@ -983,12 +897,10 @@ cleanup:
  *
  ******************************************************************************/
 
-struct acpi_namespace_node *
-acpi_ns_get_parent_node (
-       struct acpi_namespace_node      *node)
+struct acpi_namespace_node *acpi_ns_get_parent_node(struct acpi_namespace_node
+                                                   *node)
 {
-       ACPI_FUNCTION_ENTRY ();
-
+       ACPI_FUNCTION_ENTRY();
 
        if (!node) {
                return (NULL);
@@ -1006,7 +918,6 @@ acpi_ns_get_parent_node (
        return (node->peer);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_get_next_valid_node
@@ -1021,9 +932,9 @@ acpi_ns_get_parent_node (
  *
  ******************************************************************************/
 
-struct acpi_namespace_node *
-acpi_ns_get_next_valid_node (
-       struct acpi_namespace_node      *node)
+struct acpi_namespace_node *acpi_ns_get_next_valid_node(struct
+                                                       acpi_namespace_node
+                                                       *node)
 {
 
        /* If we are at the end of this peer list, return NULL */
@@ -1037,7 +948,6 @@ acpi_ns_get_next_valid_node (
        return (node->peer);
 }
 
-
 #ifdef ACPI_OBSOLETE_FUNCTIONS
 /*******************************************************************************
  *
@@ -1053,38 +963,36 @@ acpi_ns_get_next_valid_node (
  *
  ******************************************************************************/
 
-acpi_name
-acpi_ns_find_parent_name (
-       struct acpi_namespace_node      *child_node)
+acpi_name acpi_ns_find_parent_name(struct acpi_namespace_node * child_node)
 {
-       struct acpi_namespace_node      *parent_node;
-
-
-       ACPI_FUNCTION_TRACE ("ns_find_parent_name");
+       struct acpi_namespace_node *parent_node;
 
+       ACPI_FUNCTION_TRACE("ns_find_parent_name");
 
        if (child_node) {
                /* Valid entry.  Get the parent Node */
 
-               parent_node = acpi_ns_get_parent_node (child_node);
+               parent_node = acpi_ns_get_parent_node(child_node);
                if (parent_node) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                               "Parent of %p [%4.4s] is %p [%4.4s]\n",
-                               child_node, acpi_ut_get_node_name (child_node),
-                               parent_node, acpi_ut_get_node_name (parent_node)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                         "Parent of %p [%4.4s] is %p [%4.4s]\n",
+                                         child_node,
+                                         acpi_ut_get_node_name(child_node),
+                                         parent_node,
+                                         acpi_ut_get_node_name(parent_node)));
 
                        if (parent_node->name.integer) {
-                               return_VALUE ((acpi_name) parent_node->name.integer);
+                               return_VALUE((acpi_name) parent_node->name.
+                                            integer);
                        }
                }
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "Unable to find parent of %p (%4.4s)\n",
-                       child_node, acpi_ut_get_node_name (child_node)));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "Unable to find parent of %p (%4.4s)\n",
+                                 child_node,
+                                 acpi_ut_get_node_name(child_node)));
        }
 
-       return_VALUE (ACPI_UNKNOWN_NAME);
+       return_VALUE(ACPI_UNKNOWN_NAME);
 }
 #endif
-
-
index f9a7277dca6ea916490038997eeab5a00a325cf5..5f164c0df33b15e34a7dd4eb9638c5d2449cc319 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nswalk")
-
+ACPI_MODULE_NAME("nswalk")
 
 /*******************************************************************************
  *
  *              within Scope is returned.
  *
  ******************************************************************************/
-
-struct acpi_namespace_node *
-acpi_ns_get_next_node (
-       acpi_object_type                type,
-       struct acpi_namespace_node      *parent_node,
-       struct acpi_namespace_node      *child_node)
+struct acpi_namespace_node *acpi_ns_get_next_node(acpi_object_type type,
+                                                 struct acpi_namespace_node
+                                                 *parent_node,
+                                                 struct acpi_namespace_node
+                                                 *child_node)
 {
-       struct acpi_namespace_node      *next_node = NULL;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_namespace_node *next_node = NULL;
 
+       ACPI_FUNCTION_ENTRY();
 
        if (!child_node) {
                /* It's really the parent's _scope_ that we want */
@@ -92,7 +86,7 @@ acpi_ns_get_next_node (
        else {
                /* Start search at the NEXT node */
 
-               next_node = acpi_ns_get_next_valid_node (child_node);
+               next_node = acpi_ns_get_next_valid_node(child_node);
        }
 
        /* If any type is OK, we are done */
@@ -114,7 +108,7 @@ acpi_ns_get_next_node (
 
                /* Otherwise, move on to the next node */
 
-               next_node = acpi_ns_get_next_valid_node (next_node);
+               next_node = acpi_ns_get_next_valid_node(next_node);
        }
 
        /* Not found */
@@ -122,7 +116,6 @@ acpi_ns_get_next_node (
        return (NULL);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ns_walk_namespace
@@ -154,25 +147,21 @@ acpi_ns_get_next_node (
  ******************************************************************************/
 
 acpi_status
-acpi_ns_walk_namespace (
-       acpi_object_type                type,
-       acpi_handle                     start_node,
-       u32                             max_depth,
-       u8                              unlock_before_callback,
-       acpi_walk_callback              user_function,
-       void                            *context,
-       void                            **return_value)
+acpi_ns_walk_namespace(acpi_object_type type,
+                      acpi_handle start_node,
+                      u32 max_depth,
+                      u8 unlock_before_callback,
+                      acpi_walk_callback user_function,
+                      void *context, void **return_value)
 {
-       acpi_status                     status;
-       acpi_status                     mutex_status;
-       struct acpi_namespace_node      *child_node;
-       struct acpi_namespace_node      *parent_node;
-       acpi_object_type                child_type;
-       u32                             level;
-
-
-       ACPI_FUNCTION_TRACE ("ns_walk_namespace");
+       acpi_status status;
+       acpi_status mutex_status;
+       struct acpi_namespace_node *child_node;
+       struct acpi_namespace_node *parent_node;
+       acpi_object_type child_type;
+       u32 level;
 
+       ACPI_FUNCTION_TRACE("ns_walk_namespace");
 
        /* Special case for the namespace Root Node */
 
@@ -183,9 +172,9 @@ acpi_ns_walk_namespace (
        /* Null child means "get first node" */
 
        parent_node = start_node;
-       child_node  = NULL;
-       child_type  = ACPI_TYPE_ANY;
-       level       = 1;
+       child_node = NULL;
+       child_type = ACPI_TYPE_ANY;
+       level = 1;
 
        /*
         * Traverse the tree of nodes until we bubble back up to where we
@@ -196,7 +185,9 @@ acpi_ns_walk_namespace (
                /* Get the next node in this scope.  Null if not found */
 
                status = AE_OK;
-               child_node = acpi_ns_get_next_node (ACPI_TYPE_ANY, parent_node, child_node);
+               child_node =
+                   acpi_ns_get_next_node(ACPI_TYPE_ANY, parent_node,
+                                         child_node);
                if (child_node) {
                        /*
                         * Found node, Get the type if we are not
@@ -212,19 +203,25 @@ acpi_ns_walk_namespace (
                                 * callback function
                                 */
                                if (unlock_before_callback) {
-                                       mutex_status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-                                       if (ACPI_FAILURE (mutex_status)) {
-                                               return_ACPI_STATUS (mutex_status);
+                                       mutex_status =
+                                           acpi_ut_release_mutex
+                                           (ACPI_MTX_NAMESPACE);
+                                       if (ACPI_FAILURE(mutex_status)) {
+                                               return_ACPI_STATUS
+                                                   (mutex_status);
                                        }
                                }
 
-                               status = user_function (child_node, level,
-                                                context, return_value);
+                               status = user_function(child_node, level,
+                                                      context, return_value);
 
                                if (unlock_before_callback) {
-                                       mutex_status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-                                       if (ACPI_FAILURE (mutex_status)) {
-                                               return_ACPI_STATUS (mutex_status);
+                                       mutex_status =
+                                           acpi_ut_acquire_mutex
+                                           (ACPI_MTX_NAMESPACE);
+                                       if (ACPI_FAILURE(mutex_status)) {
+                                               return_ACPI_STATUS
+                                                   (mutex_status);
                                        }
                                }
 
@@ -239,13 +236,13 @@ acpi_ns_walk_namespace (
 
                                        /* Exit now, with OK status */
 
-                                       return_ACPI_STATUS (AE_OK);
+                                       return_ACPI_STATUS(AE_OK);
 
                                default:
 
                                        /* All others are valid exceptions */
 
-                                       return_ACPI_STATUS (status);
+                                       return_ACPI_STATUS(status);
                                }
                        }
 
@@ -258,7 +255,8 @@ acpi_ns_walk_namespace (
                         * maximum depth has been reached.
                         */
                        if ((level < max_depth) && (status != AE_CTRL_DEPTH)) {
-                               if (acpi_ns_get_next_node (ACPI_TYPE_ANY, child_node, NULL)) {
+                               if (acpi_ns_get_next_node
+                                   (ACPI_TYPE_ANY, child_node, NULL)) {
                                        /*
                                         * There is at least one child of this
                                         * node, visit the onde
@@ -268,8 +266,7 @@ acpi_ns_walk_namespace (
                                        child_node = NULL;
                                }
                        }
-               }
-               else {
+               } else {
                        /*
                         * No more children of this node (acpi_ns_get_next_node
                         * failed), go back upwards in the namespace tree to
@@ -277,13 +274,11 @@ acpi_ns_walk_namespace (
                         */
                        level--;
                        child_node = parent_node;
-                       parent_node = acpi_ns_get_parent_node (parent_node);
+                       parent_node = acpi_ns_get_parent_node(parent_node);
                }
        }
 
        /* Complete walk, not terminated by user function */
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
-
index 12ea202257fa257dd0f6277baf31d9ab964ade1f..c07b046659ff6c9dd298bf9ca6afd7dbdefce089 100644 (file)
 #include <acpi/acnamesp.h>
 #include <acpi/acinterp.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsxfeval")
-
+ACPI_MODULE_NAME("nsxfeval")
 
 /*******************************************************************************
  *
  *              be valid (non-null)
  *
  ******************************************************************************/
-
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_evaluate_object_typed (
-       acpi_handle                     handle,
-       acpi_string                     pathname,
-       struct acpi_object_list         *external_params,
-       struct acpi_buffer              *return_buffer,
-       acpi_object_type                return_type)
+acpi_evaluate_object_typed(acpi_handle handle,
+                          acpi_string pathname,
+                          struct acpi_object_list *external_params,
+                          struct acpi_buffer *return_buffer,
+                          acpi_object_type return_type)
 {
-       acpi_status                     status;
-       u8                              must_free = FALSE;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_evaluate_object_typed");
+       acpi_status status;
+       u8 must_free = FALSE;
 
+       ACPI_FUNCTION_TRACE("acpi_evaluate_object_typed");
 
        /* Return buffer must be valid */
 
        if (!return_buffer) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        if (return_buffer->length == ACPI_ALLOCATE_BUFFER) {
@@ -102,51 +96,52 @@ acpi_evaluate_object_typed (
 
        /* Evaluate the object */
 
-       status = acpi_evaluate_object (handle, pathname, external_params, return_buffer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_evaluate_object(handle, pathname, external_params,
+                                return_buffer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Type ANY means "don't care" */
 
        if (return_type == ACPI_TYPE_ANY) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        if (return_buffer->length == 0) {
                /* Error because caller specifically asked for a return value */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "No return value\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "No return value\n"));
 
-               return_ACPI_STATUS (AE_NULL_OBJECT);
+               return_ACPI_STATUS(AE_NULL_OBJECT);
        }
 
        /* Examine the object type returned from evaluate_object */
 
-       if (((union acpi_object *) return_buffer->pointer)->type == return_type) {
-               return_ACPI_STATUS (AE_OK);
+       if (((union acpi_object *)return_buffer->pointer)->type == return_type) {
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Return object type does not match requested type */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-               "Incorrect return type [%s] requested [%s]\n",
-               acpi_ut_get_type_name (((union acpi_object *) return_buffer->pointer)->type),
-               acpi_ut_get_type_name (return_type)));
+       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                         "Incorrect return type [%s] requested [%s]\n",
+                         acpi_ut_get_type_name(((union acpi_object *)
+                                                return_buffer->pointer)->type),
+                         acpi_ut_get_type_name(return_type)));
 
        if (must_free) {
                /* Caller used ACPI_ALLOCATE_BUFFER, free the return buffer */
 
-               acpi_os_free (return_buffer->pointer);
+               acpi_os_free(return_buffer->pointer);
                return_buffer->pointer = NULL;
        }
 
        return_buffer->length = 0;
-       return_ACPI_STATUS (AE_TYPE);
+       return_ACPI_STATUS(AE_TYPE);
 }
-#endif  /*  ACPI_FUTURE_USAGE  */
-
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*******************************************************************************
  *
@@ -169,21 +164,18 @@ acpi_evaluate_object_typed (
  ******************************************************************************/
 
 acpi_status
-acpi_evaluate_object (
-       acpi_handle                     handle,
-       acpi_string                     pathname,
-       struct acpi_object_list         *external_params,
-       struct acpi_buffer              *return_buffer)
+acpi_evaluate_object(acpi_handle handle,
+                    acpi_string pathname,
+                    struct acpi_object_list *external_params,
+                    struct acpi_buffer *return_buffer)
 {
-       acpi_status                     status;
-       acpi_status                     status2;
-       struct acpi_parameter_info      info;
-       acpi_size                       buffer_space_needed;
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_evaluate_object");
+       acpi_status status;
+       acpi_status status2;
+       struct acpi_parameter_info info;
+       acpi_size buffer_space_needed;
+       u32 i;
 
+       ACPI_FUNCTION_TRACE("acpi_evaluate_object");
 
        info.node = handle;
        info.parameters = NULL;
@@ -200,11 +192,11 @@ acpi_evaluate_object (
                 * Allocate a new parameter block for the internal objects
                 * Add 1 to count to allow for null terminated internal list
                 */
-               info.parameters = ACPI_MEM_CALLOCATE (
-                                ((acpi_size) external_params->count + 1) *
-                                sizeof (void *));
+               info.parameters = ACPI_MEM_CALLOCATE(((acpi_size)
+                                                     external_params->count +
+                                                     1) * sizeof(void *));
                if (!info.parameters) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                /*
@@ -212,48 +204,47 @@ acpi_evaluate_object (
                 * internal object
                 */
                for (i = 0; i < external_params->count; i++) {
-                       status = acpi_ut_copy_eobject_to_iobject (&external_params->pointer[i],
-                                         &info.parameters[i]);
-                       if (ACPI_FAILURE (status)) {
-                               acpi_ut_delete_internal_object_list (info.parameters);
-                               return_ACPI_STATUS (status);
+                       status =
+                           acpi_ut_copy_eobject_to_iobject(&external_params->
+                                                           pointer[i],
+                                                           &info.
+                                                           parameters[i]);
+                       if (ACPI_FAILURE(status)) {
+                               acpi_ut_delete_internal_object_list(info.
+                                                                   parameters);
+                               return_ACPI_STATUS(status);
                        }
                }
                info.parameters[external_params->count] = NULL;
        }
 
-
        /*
         * Three major cases:
         * 1) Fully qualified pathname
         * 2) No handle, not fully qualified pathname (error)
         * 3) Valid handle
         */
-       if ((pathname) &&
-               (acpi_ns_valid_root_prefix (pathname[0]))) {
+       if ((pathname) && (acpi_ns_valid_root_prefix(pathname[0]))) {
                /*
                 *  The path is fully qualified, just evaluate by name
                 */
-               status = acpi_ns_evaluate_by_name (pathname, &info);
-       }
-       else if (!handle) {
+               status = acpi_ns_evaluate_by_name(pathname, &info);
+       } else if (!handle) {
                /*
                 * A handle is optional iff a fully qualified pathname
                 * is specified.  Since we've already handled fully
                 * qualified names above, this is an error
                 */
                if (!pathname) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Both Handle and Pathname are NULL\n"));
-               }
-               else {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Handle is NULL and Pathname is relative\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Both Handle and Pathname are NULL\n"));
+               } else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Handle is NULL and Pathname is relative\n"));
                }
 
                status = AE_BAD_PARAMETER;
-       }
-       else {
+       } else {
                /*
                 * We get here if we have a handle -- and if we have a
                 * pathname it is relative.  The handle will be validated
@@ -264,17 +255,15 @@ acpi_evaluate_object (
                         * The null pathname case means the handle is for
                         * the actual object to be evaluated
                         */
-                       status = acpi_ns_evaluate_by_handle (&info);
-               }
-               else {
-                  /*
-                       * Both a Handle and a relative Pathname
-                       */
-                       status = acpi_ns_evaluate_relative (pathname, &info);
+                       status = acpi_ns_evaluate_by_handle(&info);
+               } else {
+                       /*
+                        * Both a Handle and a relative Pathname
+                        */
+                       status = acpi_ns_evaluate_relative(pathname, &info);
                }
        }
 
-
        /*
         * If we are expecting a return value, and all went well above,
         * copy the return value to an external object.
@@ -282,9 +271,9 @@ acpi_evaluate_object (
        if (return_buffer) {
                if (!info.return_object) {
                        return_buffer->length = 0;
-               }
-               else {
-                       if (ACPI_GET_DESCRIPTOR_TYPE (info.return_object) == ACPI_DESC_TYPE_NAMED) {
+               } else {
+                       if (ACPI_GET_DESCRIPTOR_TYPE(info.return_object) ==
+                           ACPI_DESC_TYPE_NAMED) {
                                /*
                                 * If we received a NS Node as a return object, this means that
                                 * the object we are evaluating has nothing interesting to
@@ -294,37 +283,43 @@ acpi_evaluate_object (
                                 * support for various types at a later date if necessary.
                                 */
                                status = AE_TYPE;
-                               info.return_object = NULL;  /* No need to delete a NS Node */
+                               info.return_object = NULL;      /* No need to delete a NS Node */
                                return_buffer->length = 0;
                        }
 
-                       if (ACPI_SUCCESS (status)) {
+                       if (ACPI_SUCCESS(status)) {
                                /*
                                 * Find out how large a buffer is needed
                                 * to contain the returned object
                                 */
-                               status = acpi_ut_get_object_size (info.return_object,
-                                                  &buffer_space_needed);
-                               if (ACPI_SUCCESS (status)) {
+                               status =
+                                   acpi_ut_get_object_size(info.return_object,
+                                                           &buffer_space_needed);
+                               if (ACPI_SUCCESS(status)) {
                                        /* Validate/Allocate/Clear caller buffer */
 
-                                       status = acpi_ut_initialize_buffer (return_buffer,
-                                                         buffer_space_needed);
-                                       if (ACPI_FAILURE (status)) {
+                                       status =
+                                           acpi_ut_initialize_buffer
+                                           (return_buffer,
+                                            buffer_space_needed);
+                                       if (ACPI_FAILURE(status)) {
                                                /*
                                                 * Caller's buffer is too small or a new one can't be allocated
                                                 */
-                                               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                                                       "Needed buffer size %X, %s\n",
-                                                       (u32) buffer_space_needed,
-                                                       acpi_format_exception (status)));
-                                       }
-                                       else {
+                                               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                                                 "Needed buffer size %X, %s\n",
+                                                                 (u32)
+                                                                 buffer_space_needed,
+                                                                 acpi_format_exception
+                                                                 (status)));
+                                       } else {
                                                /*
                                                 *  We have enough space for the object, build it
                                                 */
-                                               status = acpi_ut_copy_iobject_to_eobject (info.return_object,
-                                                                 return_buffer);
+                                               status =
+                                                   acpi_ut_copy_iobject_to_eobject
+                                                   (info.return_object,
+                                                    return_buffer);
                                        }
                                }
                        }
@@ -336,14 +331,14 @@ acpi_evaluate_object (
                 * Delete the internal return object.  NOTE: Interpreter
                 * must be locked to avoid race condition.
                 */
-               status2 = acpi_ex_enter_interpreter ();
-               if (ACPI_SUCCESS (status2)) {
+               status2 = acpi_ex_enter_interpreter();
+               if (ACPI_SUCCESS(status2)) {
                        /*
                         * Delete the internal return object. (Or at least
                         * decrement the reference count by one)
                         */
-                       acpi_ut_remove_reference (info.return_object);
-                       acpi_ex_exit_interpreter ();
+                       acpi_ut_remove_reference(info.return_object);
+                       acpi_ex_exit_interpreter();
                }
        }
 
@@ -353,13 +348,13 @@ acpi_evaluate_object (
        if (info.parameters) {
                /* Free the allocated parameter block */
 
-               acpi_ut_delete_internal_object_list (info.parameters);
+               acpi_ut_delete_internal_object_list(info.parameters);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_evaluate_object);
 
+EXPORT_SYMBOL(acpi_evaluate_object);
 
 /*******************************************************************************
  *
@@ -392,26 +387,20 @@ EXPORT_SYMBOL(acpi_evaluate_object);
  ******************************************************************************/
 
 acpi_status
-acpi_walk_namespace (
-       acpi_object_type                type,
-       acpi_handle                     start_object,
-       u32                             max_depth,
-       acpi_walk_callback              user_function,
-       void                            *context,
-       void                            **return_value)
+acpi_walk_namespace(acpi_object_type type,
+                   acpi_handle start_object,
+                   u32 max_depth,
+                   acpi_walk_callback user_function,
+                   void *context, void **return_value)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_walk_namespace");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_walk_namespace");
 
        /* Parameter validation */
 
-       if ((type > ACPI_TYPE_EXTERNAL_MAX) ||
-               (!max_depth)                    ||
-               (!user_function)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((type > ACPI_TYPE_EXTERNAL_MAX) || (!max_depth) || (!user_function)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
@@ -420,20 +409,20 @@ acpi_walk_namespace (
         * to the user function - since this function
         * must be allowed to make Acpi calls itself.
         */
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_ns_walk_namespace (type, start_object, max_depth,
-                         ACPI_NS_WALK_UNLOCK,
-                         user_function, context, return_value);
+       status = acpi_ns_walk_namespace(type, start_object, max_depth,
+                                       ACPI_NS_WALK_UNLOCK,
+                                       user_function, context, return_value);
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (status);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_walk_namespace);
 
+EXPORT_SYMBOL(acpi_walk_namespace);
 
 /*******************************************************************************
  *
@@ -450,29 +439,26 @@ EXPORT_SYMBOL(acpi_walk_namespace);
  ******************************************************************************/
 
 static acpi_status
-acpi_ns_get_device_callback (
-       acpi_handle                     obj_handle,
-       u32                             nesting_level,
-       void                            *context,
-       void                            **return_value)
+acpi_ns_get_device_callback(acpi_handle obj_handle,
+                           u32 nesting_level,
+                           void *context, void **return_value)
 {
-       struct acpi_get_devices_info    *info = context;
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-       u32                             flags;
-       struct acpi_device_id           hid;
+       struct acpi_get_devices_info *info = context;
+       acpi_status status;
+       struct acpi_namespace_node *node;
+       u32 flags;
+       struct acpi_device_id hid;
        struct acpi_compatible_id_list *cid;
-       acpi_native_uint                i;
-
+       acpi_native_uint i;
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
-       node = acpi_ns_map_handle_to_node (obj_handle);
-       status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       node = acpi_ns_map_handle_to_node(obj_handle);
+       status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
@@ -482,8 +468,8 @@ acpi_ns_get_device_callback (
 
        /* Run _STA to determine if device is present */
 
-       status = acpi_ut_execute_STA (node, &flags);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_execute_STA(node, &flags);
+       if (ACPI_FAILURE(status)) {
                return (AE_CTRL_DEPTH);
        }
 
@@ -496,44 +482,43 @@ acpi_ns_get_device_callback (
        /* Filter based on device HID & CID */
 
        if (info->hid != NULL) {
-               status = acpi_ut_execute_HID (node, &hid);
+               status = acpi_ut_execute_HID(node, &hid);
                if (status == AE_NOT_FOUND) {
                        return (AE_OK);
-               }
-               else if (ACPI_FAILURE (status)) {
+               } else if (ACPI_FAILURE(status)) {
                        return (AE_CTRL_DEPTH);
                }
 
-               if (ACPI_STRNCMP (hid.value, info->hid, sizeof (hid.value)) != 0) {
+               if (ACPI_STRNCMP(hid.value, info->hid, sizeof(hid.value)) != 0) {
                        /* Get the list of Compatible IDs */
 
-                       status = acpi_ut_execute_CID (node, &cid);
+                       status = acpi_ut_execute_CID(node, &cid);
                        if (status == AE_NOT_FOUND) {
                                return (AE_OK);
-                       }
-                       else if (ACPI_FAILURE (status)) {
+                       } else if (ACPI_FAILURE(status)) {
                                return (AE_CTRL_DEPTH);
                        }
 
                        /* Walk the CID list */
 
                        for (i = 0; i < cid->count; i++) {
-                               if (ACPI_STRNCMP (cid->id[i].value, info->hid,
-                                                sizeof (struct acpi_compatible_id)) != 0) {
-                                       ACPI_MEM_FREE (cid);
+                               if (ACPI_STRNCMP(cid->id[i].value, info->hid,
+                                                sizeof(struct
+                                                       acpi_compatible_id)) !=
+                                   0) {
+                                       ACPI_MEM_FREE(cid);
                                        return (AE_OK);
                                }
                        }
-                       ACPI_MEM_FREE (cid);
+                       ACPI_MEM_FREE(cid);
                }
        }
 
-       status = info->user_function (obj_handle, nesting_level, info->context,
-                        return_value);
+       status = info->user_function(obj_handle, nesting_level, info->context,
+                                    return_value);
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_devices
@@ -560,32 +545,28 @@ acpi_ns_get_device_callback (
  ******************************************************************************/
 
 acpi_status
-acpi_get_devices (
-       char                            *HID,
-       acpi_walk_callback              user_function,
-       void                            *context,
-       void                            **return_value)
+acpi_get_devices(char *HID,
+                acpi_walk_callback user_function,
+                void *context, void **return_value)
 {
-       acpi_status                     status;
-       struct acpi_get_devices_info    info;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_devices");
+       acpi_status status;
+       struct acpi_get_devices_info info;
 
+       ACPI_FUNCTION_TRACE("acpi_get_devices");
 
        /* Parameter validation */
 
        if (!user_function) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
         * We're going to call their callback from OUR callback, so we need
         * to know what it is, and their context parameter.
         */
-       info.context      = context;
+       info.context = context;
        info.user_function = user_function;
-       info.hid          = HID;
+       info.hid = HID;
 
        /*
         * Lock the namespace around the walk.
@@ -593,22 +574,22 @@ acpi_get_devices (
         * to the user function - since this function
         * must be allowed to make Acpi calls itself.
         */
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_ns_walk_namespace (ACPI_TYPE_DEVICE,
-                          ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
-                          ACPI_NS_WALK_UNLOCK,
-                          acpi_ns_get_device_callback, &info,
-                          return_value);
+       status = acpi_ns_walk_namespace(ACPI_TYPE_DEVICE,
+                                       ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
+                                       ACPI_NS_WALK_UNLOCK,
+                                       acpi_ns_get_device_callback, &info,
+                                       return_value);
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       return_ACPI_STATUS (status);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_get_devices);
 
+EXPORT_SYMBOL(acpi_get_devices);
 
 /*******************************************************************************
  *
@@ -625,44 +606,38 @@ EXPORT_SYMBOL(acpi_get_devices);
  ******************************************************************************/
 
 acpi_status
-acpi_attach_data (
-       acpi_handle                     obj_handle,
-       acpi_object_handler             handler,
-       void                            *data)
+acpi_attach_data(acpi_handle obj_handle,
+                acpi_object_handler handler, void *data)
 {
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
        /* Parameter validation */
 
-       if (!obj_handle ||
-               !handler    ||
-               !data) {
+       if (!obj_handle || !handler || !data) {
                return (AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
        /* Convert and validate the handle */
 
-       node = acpi_ns_map_handle_to_node (obj_handle);
+       node = acpi_ns_map_handle_to_node(obj_handle);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
        }
 
-       status = acpi_ns_attach_data (node, handler, data);
+       status = acpi_ns_attach_data(node, handler, data);
 
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_detach_data
@@ -677,42 +652,37 @@ unlock_and_exit:
  ******************************************************************************/
 
 acpi_status
-acpi_detach_data (
-       acpi_handle                     obj_handle,
-       acpi_object_handler             handler)
+acpi_detach_data(acpi_handle obj_handle, acpi_object_handler handler)
 {
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
        /* Parameter validation */
 
-       if (!obj_handle ||
-               !handler) {
+       if (!obj_handle || !handler) {
                return (AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
        /* Convert and validate the handle */
 
-       node = acpi_ns_map_handle_to_node (obj_handle);
+       node = acpi_ns_map_handle_to_node(obj_handle);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
        }
 
-       status = acpi_ns_detach_data (node, handler);
+       status = acpi_ns_detach_data(node, handler);
 
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_data
@@ -728,41 +698,33 @@ unlock_and_exit:
  ******************************************************************************/
 
 acpi_status
-acpi_get_data (
-       acpi_handle                     obj_handle,
-       acpi_object_handler             handler,
-       void                            **data)
+acpi_get_data(acpi_handle obj_handle, acpi_object_handler handler, void **data)
 {
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
        /* Parameter validation */
 
-       if (!obj_handle ||
-               !handler    ||
-               !data) {
+       if (!obj_handle || !handler || !data) {
                return (AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
        /* Convert and validate the handle */
 
-       node = acpi_ns_map_handle_to_node (obj_handle);
+       node = acpi_ns_map_handle_to_node(obj_handle);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
        }
 
-       status = acpi_ns_get_attached_data (node, handler, data);
+       status = acpi_ns_get_attached_data(node, handler, data);
 
-unlock_and_exit:
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
        return (status);
 }
-
-
index 8d097914c49ad2fc4427ff39f9a958f52a041428..6b5f8d4481d131f8140da6fd2b9b5890d995d9e8 100644 (file)
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsxfname")
-
+ACPI_MODULE_NAME("nsxfname")
 
 /******************************************************************************
  *
  *              namespace handle.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_get_handle (
-       acpi_handle                     parent,
-       acpi_string                     pathname,
-       acpi_handle                     *ret_handle)
+acpi_get_handle(acpi_handle parent,
+               acpi_string pathname, acpi_handle * ret_handle)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node = NULL;
-       struct acpi_namespace_node      *prefix_node = NULL;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       acpi_status status;
+       struct acpi_namespace_node *node = NULL;
+       struct acpi_namespace_node *prefix_node = NULL;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* Parameter Validation */
 
@@ -93,45 +86,47 @@ acpi_get_handle (
        /* Convert a parent handle to a prefix node */
 
        if (parent) {
-               status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+               if (ACPI_FAILURE(status)) {
                        return (status);
                }
 
-               prefix_node = acpi_ns_map_handle_to_node (parent);
+               prefix_node = acpi_ns_map_handle_to_node(parent);
                if (!prefix_node) {
-                       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+                       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
                        return (AE_BAD_PARAMETER);
                }
 
-               status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+               if (ACPI_FAILURE(status)) {
                        return (status);
                }
        }
 
        /* Special case for root, since we can't search for it */
 
-       if (ACPI_STRCMP (pathname, ACPI_NS_ROOT_PATH) == 0) {
-               *ret_handle = acpi_ns_convert_entry_to_handle (acpi_gbl_root_node);
+       if (ACPI_STRCMP(pathname, ACPI_NS_ROOT_PATH) == 0) {
+               *ret_handle =
+                   acpi_ns_convert_entry_to_handle(acpi_gbl_root_node);
                return (AE_OK);
        }
 
        /*
         *  Find the Node and convert to a handle
         */
-       status = acpi_ns_get_node_by_path (pathname, prefix_node, ACPI_NS_NO_UPSEARCH,
-                         &node);
+       status =
+           acpi_ns_get_node_by_path(pathname, prefix_node, ACPI_NS_NO_UPSEARCH,
+                                    &node);
 
        *ret_handle = NULL;
-       if (ACPI_SUCCESS (status)) {
-               *ret_handle = acpi_ns_convert_entry_to_handle (node);
+       if (ACPI_SUCCESS(status)) {
+               *ret_handle = acpi_ns_convert_entry_to_handle(node);
        }
 
        return (status);
 }
-EXPORT_SYMBOL(acpi_get_handle);
 
+EXPORT_SYMBOL(acpi_get_handle);
 
 /******************************************************************************
  *
@@ -150,14 +145,10 @@ EXPORT_SYMBOL(acpi_get_handle);
  ******************************************************************************/
 
 acpi_status
-acpi_get_name (
-       acpi_handle                     handle,
-       u32                             name_type,
-       struct acpi_buffer              *buffer)
+acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer * buffer)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-
+       acpi_status status;
+       struct acpi_namespace_node *node;
 
        /* Parameter validation */
 
@@ -165,15 +156,15 @@ acpi_get_name (
                return (AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_validate_buffer (buffer);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_validate_buffer(buffer);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
        if (name_type == ACPI_FULL_PATHNAME) {
                /* Get the full pathname (From the namespace root) */
 
-               status = acpi_ns_handle_to_pathname (handle, buffer);
+               status = acpi_ns_handle_to_pathname(handle, buffer);
                return (status);
        }
 
@@ -181,12 +172,12 @@ acpi_get_name (
         * Wants the single segment ACPI name.
         * Validate handle and convert to a namespace Node
         */
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
-       node = acpi_ns_map_handle_to_node (handle);
+       node = acpi_ns_map_handle_to_node(handle);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -194,26 +185,25 @@ acpi_get_name (
 
        /* Validate/Allocate/Clear caller buffer */
 
-       status = acpi_ut_initialize_buffer (buffer, ACPI_PATH_SEGMENT_LENGTH);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_initialize_buffer(buffer, ACPI_PATH_SEGMENT_LENGTH);
+       if (ACPI_FAILURE(status)) {
                goto unlock_and_exit;
        }
 
        /* Just copy the ACPI name from the Node and zero terminate it */
 
-       ACPI_STRNCPY (buffer->pointer, acpi_ut_get_node_name (node),
-                        ACPI_NAME_SIZE);
-       ((char *) buffer->pointer) [ACPI_NAME_SIZE] = 0;
+       ACPI_STRNCPY(buffer->pointer, acpi_ut_get_node_name(node),
+                    ACPI_NAME_SIZE);
+       ((char *)buffer->pointer)[ACPI_NAME_SIZE] = 0;
        status = AE_OK;
 
+      unlock_and_exit:
 
-unlock_and_exit:
-
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
        return (status);
 }
-EXPORT_SYMBOL(acpi_get_name);
 
+EXPORT_SYMBOL(acpi_get_name);
 
 /******************************************************************************
  *
@@ -231,17 +221,14 @@ EXPORT_SYMBOL(acpi_get_name);
  ******************************************************************************/
 
 acpi_status
-acpi_get_object_info (
-       acpi_handle                     handle,
-       struct acpi_buffer              *buffer)
+acpi_get_object_info(acpi_handle handle, struct acpi_buffer * buffer)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-       struct acpi_device_info         *info;
-       struct acpi_device_info         *return_info;
+       acpi_status status;
+       struct acpi_namespace_node *node;
+       struct acpi_device_info *info;
+       struct acpi_device_info *return_info;
        struct acpi_compatible_id_list *cid_list = NULL;
-       acpi_size                       size;
-
+       acpi_size size;
 
        /* Parameter validation */
 
@@ -249,37 +236,37 @@ acpi_get_object_info (
                return (AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_validate_buffer (buffer);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_validate_buffer(buffer);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
-       info = ACPI_MEM_CALLOCATE (sizeof (struct acpi_device_info));
+       info = ACPI_MEM_CALLOCATE(sizeof(struct acpi_device_info));
        if (!info) {
                return (AE_NO_MEMORY);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
-       node = acpi_ns_map_handle_to_node (handle);
+       node = acpi_ns_map_handle_to_node(handle);
        if (!node) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+               (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
                goto cleanup;
        }
 
        /* Init return structure */
 
-       size = sizeof (struct acpi_device_info);
+       size = sizeof(struct acpi_device_info);
 
-       info->type  = node->type;
-       info->name  = node->name.integer;
+       info->type = node->type;
+       info->name = node->name.integer;
        info->valid = 0;
 
-       status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
@@ -297,73 +284,73 @@ acpi_get_object_info (
 
                /* Execute the Device._HID method */
 
-               status = acpi_ut_execute_HID (node, &info->hardware_id);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_ut_execute_HID(node, &info->hardware_id);
+               if (ACPI_SUCCESS(status)) {
                        info->valid |= ACPI_VALID_HID;
                }
 
                /* Execute the Device._UID method */
 
-               status = acpi_ut_execute_UID (node, &info->unique_id);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_ut_execute_UID(node, &info->unique_id);
+               if (ACPI_SUCCESS(status)) {
                        info->valid |= ACPI_VALID_UID;
                }
 
                /* Execute the Device._CID method */
 
-               status = acpi_ut_execute_CID (node, &cid_list);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_ut_execute_CID(node, &cid_list);
+               if (ACPI_SUCCESS(status)) {
                        size += ((acpi_size) cid_list->count - 1) *
-                                        sizeof (struct acpi_compatible_id);
+                           sizeof(struct acpi_compatible_id);
                        info->valid |= ACPI_VALID_CID;
                }
 
                /* Execute the Device._STA method */
 
-               status = acpi_ut_execute_STA (node, &info->current_status);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_ut_execute_STA(node, &info->current_status);
+               if (ACPI_SUCCESS(status)) {
                        info->valid |= ACPI_VALID_STA;
                }
 
                /* Execute the Device._ADR method */
 
-               status = acpi_ut_evaluate_numeric_object (METHOD_NAME__ADR, node,
-                                 &info->address);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_ut_evaluate_numeric_object(METHOD_NAME__ADR, node,
+                                                        &info->address);
+               if (ACPI_SUCCESS(status)) {
                        info->valid |= ACPI_VALID_ADR;
                }
 
                /* Execute the Device._sx_d methods */
 
-               status = acpi_ut_execute_sxds (node, info->highest_dstates);
-               if (ACPI_SUCCESS (status)) {
+               status = acpi_ut_execute_sxds(node, info->highest_dstates);
+               if (ACPI_SUCCESS(status)) {
                        info->valid |= ACPI_VALID_SXDS;
                }
        }
 
        /* Validate/Allocate/Clear caller buffer */
 
-       status = acpi_ut_initialize_buffer (buffer, size);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_initialize_buffer(buffer, size);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
        /* Populate the return buffer */
 
        return_info = buffer->pointer;
-       ACPI_MEMCPY (return_info, info, sizeof (struct acpi_device_info));
+       ACPI_MEMCPY(return_info, info, sizeof(struct acpi_device_info));
 
        if (cid_list) {
-               ACPI_MEMCPY (&return_info->compatibility_id, cid_list, cid_list->size);
+               ACPI_MEMCPY(&return_info->compatibility_id, cid_list,
+                           cid_list->size);
        }
 
-
-cleanup:
-       ACPI_MEM_FREE (info);
+      cleanup:
+       ACPI_MEM_FREE(info);
        if (cid_list) {
-               ACPI_MEM_FREE (cid_list);
+               ACPI_MEM_FREE(cid_list);
        }
        return (status);
 }
-EXPORT_SYMBOL(acpi_get_object_info);
 
+EXPORT_SYMBOL(acpi_get_object_info);
index 363e1f6cfb182670d1420739ff5b9239ad8bb81e..0856d42e690982c66790ddb564a080a79c8421d9 100644 (file)
@@ -47,9 +47,8 @@
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_NAMESPACE
-        ACPI_MODULE_NAME    ("nsxfobj")
+ACPI_MODULE_NAME("nsxfobj")
 
 /*******************************************************************************
  *
  * DESCRIPTION: This routine returns the type associatd with a particular handle
  *
  ******************************************************************************/
-
-acpi_status
-acpi_get_type (
-       acpi_handle                     handle,
-       acpi_object_type                *ret_type)
+acpi_status acpi_get_type(acpi_handle handle, acpi_object_type * ret_type)
 {
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
        /* Parameter Validation */
 
@@ -88,27 +82,26 @@ acpi_get_type (
                return (AE_OK);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
        /* Convert and validate the handle */
 
-       node = acpi_ns_map_handle_to_node (handle);
+       node = acpi_ns_map_handle_to_node(handle);
        if (!node) {
-               (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+               (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
                return (AE_BAD_PARAMETER);
        }
 
        *ret_type = node->type;
 
-
-       status = acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+       status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
        return (status);
 }
-EXPORT_SYMBOL(acpi_get_type);
 
+EXPORT_SYMBOL(acpi_get_type);
 
 /*******************************************************************************
  *
@@ -124,14 +117,10 @@ EXPORT_SYMBOL(acpi_get_type);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_get_parent (
-       acpi_handle                     handle,
-       acpi_handle                     *ret_handle)
+acpi_status acpi_get_parent(acpi_handle handle, acpi_handle * ret_handle)
 {
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-
+       struct acpi_namespace_node *node;
+       acpi_status status;
 
        if (!ret_handle) {
                return (AE_BAD_PARAMETER);
@@ -143,14 +132,14 @@ acpi_get_parent (
                return (AE_NULL_ENTRY);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
        /* Convert and validate the handle */
 
-       node = acpi_ns_map_handle_to_node (handle);
+       node = acpi_ns_map_handle_to_node(handle);
        if (!node) {
                status = AE_BAD_PARAMETER;
                goto unlock_and_exit;
@@ -159,22 +148,21 @@ acpi_get_parent (
        /* Get the parent entry */
 
        *ret_handle =
-               acpi_ns_convert_entry_to_handle (acpi_ns_get_parent_node (node));
+           acpi_ns_convert_entry_to_handle(acpi_ns_get_parent_node(node));
 
        /* Return exception if parent is null */
 
-       if (!acpi_ns_get_parent_node (node)) {
+       if (!acpi_ns_get_parent_node(node)) {
                status = AE_NULL_ENTRY;
        }
 
+      unlock_and_exit:
 
-unlock_and_exit:
-
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
        return (status);
 }
-EXPORT_SYMBOL(acpi_get_parent);
 
+EXPORT_SYMBOL(acpi_get_parent);
 
 /*******************************************************************************
  *
@@ -195,17 +183,14 @@ EXPORT_SYMBOL(acpi_get_parent);
  ******************************************************************************/
 
 acpi_status
-acpi_get_next_object (
-       acpi_object_type                type,
-       acpi_handle                     parent,
-       acpi_handle                     child,
-       acpi_handle                     *ret_handle)
+acpi_get_next_object(acpi_object_type type,
+                    acpi_handle parent,
+                    acpi_handle child, acpi_handle * ret_handle)
 {
-       acpi_status                     status;
-       struct acpi_namespace_node      *node;
-       struct acpi_namespace_node      *parent_node = NULL;
-       struct acpi_namespace_node      *child_node = NULL;
-
+       acpi_status status;
+       struct acpi_namespace_node *node;
+       struct acpi_namespace_node *parent_node = NULL;
+       struct acpi_namespace_node *child_node = NULL;
 
        /* Parameter validation */
 
@@ -213,8 +198,8 @@ acpi_get_next_object (
                return (AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
+       if (ACPI_FAILURE(status)) {
                return (status);
        }
 
@@ -223,17 +208,16 @@ acpi_get_next_object (
        if (!child) {
                /* Start search at the beginning of the specified scope */
 
-               parent_node = acpi_ns_map_handle_to_node (parent);
+               parent_node = acpi_ns_map_handle_to_node(parent);
                if (!parent_node) {
                        status = AE_BAD_PARAMETER;
                        goto unlock_and_exit;
                }
-       }
-       else {
+       } else {
                /* Non-null handle, ignore the parent */
                /* Convert and validate the handle */
 
-               child_node = acpi_ns_map_handle_to_node (child);
+               child_node = acpi_ns_map_handle_to_node(child);
                if (!child_node) {
                        status = AE_BAD_PARAMETER;
                        goto unlock_and_exit;
@@ -242,20 +226,19 @@ acpi_get_next_object (
 
        /* Internal function does the real work */
 
-       node = acpi_ns_get_next_node (type, parent_node, child_node);
+       node = acpi_ns_get_next_node(type, parent_node, child_node);
        if (!node) {
                status = AE_NOT_FOUND;
                goto unlock_and_exit;
        }
 
        if (ret_handle) {
-               *ret_handle = acpi_ns_convert_entry_to_handle (node);
+               *ret_handle = acpi_ns_convert_entry_to_handle(node);
        }
 
+      unlock_and_exit:
 
-unlock_and_exit:
-
-       (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE);
+       (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
        return (status);
 }
 
index a82834b32752b094f02a68b8c9ece04c47223a61..64b98e82feb736985394ae32e48723f4fd8c29ef 100644 (file)
 
 #define ACPI_NUMA      0x80000000
 #define _COMPONENT     ACPI_NUMA
-       ACPI_MODULE_NAME ("numa")
+ACPI_MODULE_NAME("numa")
 
-extern int __init acpi_table_parse_madt_family (enum acpi_table_id id, unsigned long madt_size, int entry_id, acpi_madt_entry_handler handler, unsigned int max_entries);
+extern int __init acpi_table_parse_madt_family(enum acpi_table_id id,
+                                              unsigned long madt_size,
+                                              int entry_id,
+                                              acpi_madt_entry_handler handler,
+                                              unsigned int max_entries);
 
-void __init
-acpi_table_print_srat_entry (
-       acpi_table_entry_header *header)
+void __init acpi_table_print_srat_entry(acpi_table_entry_header * header)
 {
 
-       ACPI_FUNCTION_NAME ("acpi_table_print_srat_entry");
+       ACPI_FUNCTION_NAME("acpi_table_print_srat_entry");
 
        if (!header)
                return;
@@ -52,48 +54,55 @@ acpi_table_print_srat_entry (
 
        case ACPI_SRAT_PROCESSOR_AFFINITY:
 #ifdef ACPI_DEBUG_OUTPUT
-       {
-               struct acpi_table_processor_affinity *p =
-                       (struct acpi_table_processor_affinity*) header;
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "SRAT Processor (id[0x%02x] eid[0x%02x]) in proximity domain %d %s\n",
-                      p->apic_id, p->lsapic_eid, p->proximity_domain,
-                      p->flags.enabled?"enabled":"disabled"));
-       }
-#endif /* ACPI_DEBUG_OUTPUT */
+               {
+                       struct acpi_table_processor_affinity *p =
+                           (struct acpi_table_processor_affinity *)header;
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "SRAT Processor (id[0x%02x] eid[0x%02x]) in proximity domain %d %s\n",
+                                         p->apic_id, p->lsapic_eid,
+                                         p->proximity_domain,
+                                         p->flags.
+                                         enabled ? "enabled" : "disabled"));
+               }
+#endif                         /* ACPI_DEBUG_OUTPUT */
                break;
 
        case ACPI_SRAT_MEMORY_AFFINITY:
 #ifdef ACPI_DEBUG_OUTPUT
-       {
-               struct acpi_table_memory_affinity *p =
-                       (struct acpi_table_memory_affinity*) header;
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "SRAT Memory (0x%08x%08x length 0x%08x%08x type 0x%x) in proximity domain %d %s%s\n",
-                      p->base_addr_hi, p->base_addr_lo, p->length_hi, p->length_lo,
-                      p->memory_type, p->proximity_domain,
-                      p->flags.enabled ? "enabled" : "disabled",
-                      p->flags.hot_pluggable ? " hot-pluggable" : ""));
-       }
-#endif /* ACPI_DEBUG_OUTPUT */
+               {
+                       struct acpi_table_memory_affinity *p =
+                           (struct acpi_table_memory_affinity *)header;
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "SRAT Memory (0x%08x%08x length 0x%08x%08x type 0x%x) in proximity domain %d %s%s\n",
+                                         p->base_addr_hi, p->base_addr_lo,
+                                         p->length_hi, p->length_lo,
+                                         p->memory_type, p->proximity_domain,
+                                         p->flags.
+                                         enabled ? "enabled" : "disabled",
+                                         p->flags.
+                                         hot_pluggable ? " hot-pluggable" :
+                                         ""));
+               }
+#endif                         /* ACPI_DEBUG_OUTPUT */
                break;
 
        default:
-               printk(KERN_WARNING PREFIX "Found unsupported SRAT entry (type = 0x%x)\n",
-                       header->type);
+               printk(KERN_WARNING PREFIX
+                      "Found unsupported SRAT entry (type = 0x%x)\n",
+                      header->type);
                break;
        }
 }
 
-
-static int __init
-acpi_parse_slit (unsigned long phys_addr, unsigned long size)
+static int __init acpi_parse_slit(unsigned long phys_addr, unsigned long size)
 {
-       struct acpi_table_slit  *slit;
-       u32                     localities;
+       struct acpi_table_slit *slit;
+       u32 localities;
 
        if (!phys_addr || !size)
                return -EINVAL;
 
-       slit = (struct acpi_table_slit *) __va(phys_addr);
+       slit = (struct acpi_table_slit *)__va(phys_addr);
 
        /* downcast just for %llu vs %lu for i386/ia64  */
        localities = (u32) slit->localities;
@@ -103,15 +112,13 @@ acpi_parse_slit (unsigned long phys_addr, unsigned long size)
        return 0;
 }
 
-
 static int __init
-acpi_parse_processor_affinity (
-       acpi_table_entry_header *header,
-       const unsigned long end)
+acpi_parse_processor_affinity(acpi_table_entry_header * header,
+                             const unsigned long end)
 {
        struct acpi_table_processor_affinity *processor_affinity;
 
-       processor_affinity = (struct acpi_table_processor_affinity*) header;
+       processor_affinity = (struct acpi_table_processor_affinity *)header;
        if (!processor_affinity)
                return -EINVAL;
 
@@ -123,15 +130,13 @@ acpi_parse_processor_affinity (
        return 0;
 }
 
-
 static int __init
-acpi_parse_memory_affinity (
-       acpi_table_entry_header *header,
-       const unsigned long end)
+acpi_parse_memory_affinity(acpi_table_entry_header * header,
+                          const unsigned long end)
 {
        struct acpi_table_memory_affinity *memory_affinity;
 
-       memory_affinity = (struct acpi_table_memory_affinity*) header;
+       memory_affinity = (struct acpi_table_memory_affinity *)header;
        if (!memory_affinity)
                return -EINVAL;
 
@@ -143,36 +148,30 @@ acpi_parse_memory_affinity (
        return 0;
 }
 
-
-static int __init
-acpi_parse_srat (unsigned long phys_addr, unsigned long size)
+static int __init acpi_parse_srat(unsigned long phys_addr, unsigned long size)
 {
-       struct acpi_table_srat  *srat;
+       struct acpi_table_srat *srat;
 
        if (!phys_addr || !size)
                return -EINVAL;
 
-       srat = (struct acpi_table_srat *) __va(phys_addr);
+       srat = (struct acpi_table_srat *)__va(phys_addr);
 
        return 0;
 }
 
-
 int __init
-acpi_table_parse_srat (
-       enum acpi_srat_entry_id id,
-       acpi_madt_entry_handler handler,
-       unsigned int max_entries)
+acpi_table_parse_srat(enum acpi_srat_entry_id id,
+                     acpi_madt_entry_handler handler, unsigned int max_entries)
 {
-       return acpi_table_parse_madt_family(ACPI_SRAT, sizeof(struct acpi_table_srat),
-                                           id, handler, max_entries);
+       return acpi_table_parse_madt_family(ACPI_SRAT,
+                                           sizeof(struct acpi_table_srat), id,
+                                           handler, max_entries);
 }
 
-
-int __init
-acpi_numa_init(void)
+int __init acpi_numa_init(void)
 {
-       int                     result;
+       int result;
 
        /* SRAT: Static Resource Affinity Table */
        result = acpi_table_parse(ACPI_SRAT, acpi_parse_srat);
@@ -181,9 +180,7 @@ acpi_numa_init(void)
                result = acpi_table_parse_srat(ACPI_SRAT_PROCESSOR_AFFINITY,
                                               acpi_parse_processor_affinity,
                                               NR_CPUS);
-               result = acpi_table_parse_srat(ACPI_SRAT_MEMORY_AFFINITY,
-                                              acpi_parse_memory_affinity,
-                                              NR_NODE_MEMBLKS);        // IA64 specific
+               result = acpi_table_parse_srat(ACPI_SRAT_MEMORY_AFFINITY, acpi_parse_memory_affinity, NR_NODE_MEMBLKS); // IA64 specific
        }
 
        /* SLIT: System Locality Information Table */
@@ -193,8 +190,7 @@ acpi_numa_init(void)
        return 0;
 }
 
-int
-acpi_get_pxm(acpi_handle h)
+int acpi_get_pxm(acpi_handle h)
 {
        unsigned long pxm;
        acpi_status status;
@@ -207,7 +203,8 @@ acpi_get_pxm(acpi_handle h)
                if (ACPI_SUCCESS(status))
                        return (int)pxm;
                status = acpi_get_parent(handle, &phandle);
-       } while(ACPI_SUCCESS(status));
+       } while (ACPI_SUCCESS(status));
        return -1;
 }
+
 EXPORT_SYMBOL(acpi_get_pxm);
index 0d11d6e6abd6d652efab6c2831a81b340c7a50f7..d528c750a3801bd65591639baec49d3f64a381fe 100644 (file)
 
 #include <linux/efi.h>
 
-
 #define _COMPONENT             ACPI_OS_SERVICES
-ACPI_MODULE_NAME       ("osl")
-
+ACPI_MODULE_NAME("osl")
 #define PREFIX         "ACPI: "
-
-struct acpi_os_dpc
-{
-    acpi_osd_exec_callback  function;
-    void                   *context;
+struct acpi_os_dpc {
+       acpi_osd_exec_callback function;
+       void *context;
 };
 
 #ifdef CONFIG_ACPI_CUSTOM_DSDT
@@ -69,7 +65,7 @@ int acpi_in_debugger;
 EXPORT_SYMBOL(acpi_in_debugger);
 
 extern char line_buf[80];
-#endif /*ENABLE_DEBUGGER*/
+#endif                         /*ENABLE_DEBUGGER */
 
 int acpi_specific_hotkey_enabled = TRUE;
 EXPORT_SYMBOL(acpi_specific_hotkey_enabled);
@@ -79,33 +75,29 @@ static acpi_osd_handler acpi_irq_handler;
 static void *acpi_irq_context;
 static struct workqueue_struct *kacpid_wq;
 
-acpi_status
-acpi_os_initialize(void)
+acpi_status acpi_os_initialize(void)
 {
        return AE_OK;
 }
 
-acpi_status
-acpi_os_initialize1(void)
+acpi_status acpi_os_initialize1(void)
 {
        /*
         * Initialize PCI configuration space access, as we'll need to access
         * it while walking the namespace (bus 0 and root bridges w/ _BBNs).
         */
-#ifdef CONFIG_ACPI_PCI
        if (!raw_pci_ops) {
-               printk(KERN_ERR PREFIX "Access to PCI configuration space unavailable\n");
+               printk(KERN_ERR PREFIX
+                      "Access to PCI configuration space unavailable\n");
                return AE_NULL_ENTRY;
        }
-#endif
        kacpid_wq = create_singlethread_workqueue("kacpid");
        BUG_ON(!kacpid_wq);
 
        return AE_OK;
 }
 
-acpi_status
-acpi_os_terminate(void)
+acpi_status acpi_os_terminate(void)
 {
        if (acpi_irq_handler) {
                acpi_os_remove_interrupt_handler(acpi_irq_irq,
@@ -117,21 +109,20 @@ acpi_os_terminate(void)
        return AE_OK;
 }
 
-void
-acpi_os_printf(const char *fmt,...)
+void acpi_os_printf(const char *fmt, ...)
 {
        va_list args;
        va_start(args, fmt);
        acpi_os_vprintf(fmt, args);
        va_end(args);
 }
+
 EXPORT_SYMBOL(acpi_os_printf);
 
-void
-acpi_os_vprintf(const char *fmt, va_list args)
+void acpi_os_vprintf(const char *fmt, va_list args)
 {
        static char buffer[512];
-       
+
        vsprintf(buffer, fmt, args);
 
 #ifdef ENABLE_DEBUGGER
@@ -146,8 +137,7 @@ acpi_os_vprintf(const char *fmt, va_list args)
 }
 
 extern int acpi_in_resume;
-void *
-acpi_os_allocate(acpi_size size)
+void *acpi_os_allocate(acpi_size size)
 {
        if (acpi_in_resume)
                return kmalloc(size, GFP_ATOMIC);
@@ -155,31 +145,32 @@ acpi_os_allocate(acpi_size size)
                return kmalloc(size, GFP_KERNEL);
 }
 
-void
-acpi_os_free(void *ptr)
+void acpi_os_free(void *ptr)
 {
        kfree(ptr);
 }
+
 EXPORT_SYMBOL(acpi_os_free);
 
-acpi_status
-acpi_os_get_root_pointer(u32 flags, struct acpi_pointer *addr)
+acpi_status acpi_os_get_root_pointer(u32 flags, struct acpi_pointer *addr)
 {
        if (efi_enabled) {
                addr->pointer_type = ACPI_PHYSICAL_POINTER;
                if (efi.acpi20)
                        addr->pointer.physical =
-                               (acpi_physical_address) virt_to_phys(efi.acpi20);
+                           (acpi_physical_address) virt_to_phys(efi.acpi20);
                else if (efi.acpi)
                        addr->pointer.physical =
-                               (acpi_physical_address) virt_to_phys(efi.acpi);
+                           (acpi_physical_address) virt_to_phys(efi.acpi);
                else {
-                       printk(KERN_ERR PREFIX "System description tables not found\n");
+                       printk(KERN_ERR PREFIX
+                              "System description tables not found\n");
                        return AE_NOT_FOUND;
                }
        } else {
                if (ACPI_FAILURE(acpi_find_root_pointer(flags, addr))) {
-                       printk(KERN_ERR PREFIX "System description tables not found\n");
+                       printk(KERN_ERR PREFIX
+                              "System description tables not found\n");
                        return AE_NOT_FOUND;
                }
        }
@@ -188,11 +179,12 @@ acpi_os_get_root_pointer(u32 flags, struct acpi_pointer *addr)
 }
 
 acpi_status
-acpi_os_map_memory(acpi_physical_address phys, acpi_size size, void __iomem **virt)
+acpi_os_map_memory(acpi_physical_address phys, acpi_size size,
+                  void __iomem ** virt)
 {
        if (efi_enabled) {
                if (EFI_MEMORY_WB & efi_mem_attributes(phys)) {
-                       *virt = (void __iomem *) phys_to_virt(phys);
+                       *virt = (void __iomem *)phys_to_virt(phys);
                } else {
                        *virt = ioremap(phys, size);
                }
@@ -202,9 +194,9 @@ acpi_os_map_memory(acpi_physical_address phys, acpi_size size, void __iomem **vi
                        return AE_BAD_PARAMETER;
                }
                /*
-                * ioremap checks to ensure this is in reserved space
-                */
-               *virt = ioremap((unsigned long) phys, size);
+                * ioremap checks to ensure this is in reserved space
+                */
+               *virt = ioremap((unsigned long)phys, size);
        }
 
        if (!*virt)
@@ -213,17 +205,16 @@ acpi_os_map_memory(acpi_physical_address phys, acpi_size size, void __iomem **vi
        return AE_OK;
 }
 
-void
-acpi_os_unmap_memory(void __iomem *virt, acpi_size size)
+void acpi_os_unmap_memory(void __iomem * virt, acpi_size size)
 {
        iounmap(virt);
 }
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_os_get_physical_address(void *virt, acpi_physical_address *phys)
+acpi_os_get_physical_address(void *virt, acpi_physical_address * phys)
 {
-       if(!phys || !virt)
+       if (!phys || !virt)
                return AE_BAD_PARAMETER;
 
        *phys = virt_to_phys(virt);
@@ -237,16 +228,16 @@ acpi_os_get_physical_address(void *virt, acpi_physical_address *phys)
 static char acpi_os_name[ACPI_MAX_OVERRIDE_LEN];
 
 acpi_status
-acpi_os_predefined_override (const struct acpi_predefined_names *init_val,
-                            acpi_string *new_val)
+acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
+                           acpi_string * new_val)
 {
        if (!init_val || !new_val)
                return AE_BAD_PARAMETER;
 
        *new_val = NULL;
-       if (!memcmp (init_val->name, "_OS_", 4) && strlen(acpi_os_name)) {
+       if (!memcmp(init_val->name, "_OS_", 4) && strlen(acpi_os_name)) {
                printk(KERN_INFO PREFIX "Overriding _OS definition to '%s'\n",
-                       acpi_os_name);
+                      acpi_os_name);
                *new_val = acpi_os_name;
        }
 
@@ -254,15 +245,15 @@ acpi_os_predefined_override (const struct acpi_predefined_names *init_val,
 }
 
 acpi_status
-acpi_os_table_override (struct acpi_table_header *existing_table,
-                       struct acpi_table_header **new_table)
+acpi_os_table_override(struct acpi_table_header * existing_table,
+                      struct acpi_table_header ** new_table)
 {
        if (!existing_table || !new_table)
                return AE_BAD_PARAMETER;
 
 #ifdef CONFIG_ACPI_CUSTOM_DSDT
        if (strncmp(existing_table->signature, "DSDT", 4) == 0)
-               *new_table = (struct acpi_table_header*)AmlCode;
+               *new_table = (struct acpi_table_header *)AmlCode;
        else
                *new_table = NULL;
 #else
@@ -271,14 +262,14 @@ acpi_os_table_override (struct acpi_table_header *existing_table,
        return AE_OK;
 }
 
-static irqreturn_t
-acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
 {
-       return (*acpi_irq_handler)(acpi_irq_context) ? IRQ_HANDLED : IRQ_NONE;
+       return (*acpi_irq_handler) (acpi_irq_context) ? IRQ_HANDLED : IRQ_NONE;
 }
 
 acpi_status
-acpi_os_install_interrupt_handler(u32 gsi, acpi_osd_handler handler, void *context)
+acpi_os_install_interrupt_handler(u32 gsi, acpi_osd_handler handler,
+                                 void *context)
 {
        unsigned int irq;
 
@@ -305,8 +296,7 @@ acpi_os_install_interrupt_handler(u32 gsi, acpi_osd_handler handler, void *conte
        return AE_OK;
 }
 
-acpi_status
-acpi_os_remove_interrupt_handler(u32 irq, acpi_osd_handler handler)
+acpi_status acpi_os_remove_interrupt_handler(u32 irq, acpi_osd_handler handler)
 {
        if (irq) {
                free_irq(irq, acpi_irq);
@@ -321,16 +311,15 @@ acpi_os_remove_interrupt_handler(u32 irq, acpi_osd_handler handler)
  * Running in interpreter thread context, safe to sleep
  */
 
-void
-acpi_os_sleep(acpi_integer ms)
+void acpi_os_sleep(acpi_integer ms)
 {
        current->state = TASK_INTERRUPTIBLE;
-       schedule_timeout(((signed long) ms * HZ) / 1000);
+       schedule_timeout(((signed long)ms * HZ) / 1000);
 }
+
 EXPORT_SYMBOL(acpi_os_sleep);
 
-void
-acpi_os_stall(u32 us)
+void acpi_os_stall(u32 us)
 {
        while (us) {
                u32 delay = 1000;
@@ -342,6 +331,7 @@ acpi_os_stall(u32 us)
                us -= delay;
        }
 }
+
 EXPORT_SYMBOL(acpi_os_stall);
 
 /*
@@ -349,8 +339,7 @@ EXPORT_SYMBOL(acpi_os_stall);
  * Returns 64-bit free-running, monotonically increasing timer
  * with 100ns granularity
  */
-u64
-acpi_os_get_timer (void)
+u64 acpi_os_get_timer(void)
 {
        static u64 t;
 
@@ -367,27 +356,22 @@ acpi_os_get_timer (void)
        return ++t;
 }
 
-acpi_status
-acpi_os_read_port(
-       acpi_io_address port,
-       u32             *value,
-       u32             width)
+acpi_status acpi_os_read_port(acpi_io_address port, u32 * value, u32 width)
 {
        u32 dummy;
 
        if (!value)
                value = &dummy;
 
-       switch (width)
-       {
+       switch (width) {
        case 8:
-               *(u8*)  value = inb(port);
+               *(u8 *) value = inb(port);
                break;
        case 16:
-               *(u16*) value = inw(port);
+               *(u16 *) value = inw(port);
                break;
        case 32:
-               *(u32*) value = inl(port);
+               *(u32 *) value = inl(port);
                break;
        default:
                BUG();
@@ -395,16 +379,12 @@ acpi_os_read_port(
 
        return AE_OK;
 }
+
 EXPORT_SYMBOL(acpi_os_read_port);
 
-acpi_status
-acpi_os_write_port(
-       acpi_io_address port,
-       u32             value,
-       u32             width)
+acpi_status acpi_os_write_port(acpi_io_address port, u32 value, u32 width)
 {
-       switch (width)
-       {
+       switch (width) {
        case 8:
                outb(value, port);
                break;
@@ -420,40 +400,38 @@ acpi_os_write_port(
 
        return AE_OK;
 }
+
 EXPORT_SYMBOL(acpi_os_write_port);
 
 acpi_status
-acpi_os_read_memory(
-       acpi_physical_address   phys_addr,
-       u32                     *value,
-       u32                     width)
+acpi_os_read_memory(acpi_physical_address phys_addr, u32 * value, u32 width)
 {
-       u32                     dummy;
-       void __iomem            *virt_addr;
-       int                     iomem = 0;
+       u32 dummy;
+       void __iomem *virt_addr;
+       int iomem = 0;
 
        if (efi_enabled) {
                if (EFI_MEMORY_WB & efi_mem_attributes(phys_addr)) {
                        /* HACK ALERT! We can use readb/w/l on real memory too.. */
-                       virt_addr = (void __iomem *) phys_to_virt(phys_addr);
+                       virt_addr = (void __iomem *)phys_to_virt(phys_addr);
                } else {
                        iomem = 1;
                        virt_addr = ioremap(phys_addr, width);
                }
        } else
-               virt_addr = (void __iomem *) phys_to_virt(phys_addr);
+               virt_addr = (void __iomem *)phys_to_virt(phys_addr);
        if (!value)
                value = &dummy;
 
        switch (width) {
        case 8:
-               *(u8*) value = readb(virt_addr);
+               *(u8 *) value = readb(virt_addr);
                break;
        case 16:
-               *(u16*) value = readw(virt_addr);
+               *(u16 *) value = readw(virt_addr);
                break;
        case 32:
-               *(u32*) value = readl(virt_addr);
+               *(u32 *) value = readl(virt_addr);
                break;
        default:
                BUG();
@@ -468,24 +446,21 @@ acpi_os_read_memory(
 }
 
 acpi_status
-acpi_os_write_memory(
-       acpi_physical_address   phys_addr,
-       u32                     value,
-       u32                     width)
+acpi_os_write_memory(acpi_physical_address phys_addr, u32 value, u32 width)
 {
-       void __iomem            *virt_addr;
-       int                     iomem = 0;
+       void __iomem *virt_addr;
+       int iomem = 0;
 
        if (efi_enabled) {
                if (EFI_MEMORY_WB & efi_mem_attributes(phys_addr)) {
                        /* HACK ALERT! We can use writeb/w/l on real memory too */
-                       virt_addr = (void __iomem *) phys_to_virt(phys_addr);
+                       virt_addr = (void __iomem *)phys_to_virt(phys_addr);
                } else {
                        iomem = 1;
                        virt_addr = ioremap(phys_addr, width);
                }
        } else
-               virt_addr = (void __iomem *) phys_to_virt(phys_addr);
+               virt_addr = (void __iomem *)phys_to_virt(phys_addr);
 
        switch (width) {
        case 8:
@@ -507,10 +482,9 @@ acpi_os_write_memory(
        return AE_OK;
 }
 
-#ifdef CONFIG_ACPI_PCI
-
 acpi_status
-acpi_os_read_pci_configuration (struct acpi_pci_id *pci_id, u32 reg, void *value, u32 width)
+acpi_os_read_pci_configuration(struct acpi_pci_id * pci_id, u32 reg,
+                              void *value, u32 width)
 {
        int result, size;
 
@@ -534,15 +508,17 @@ acpi_os_read_pci_configuration (struct acpi_pci_id *pci_id, u32 reg, void *value
        BUG_ON(!raw_pci_ops);
 
        result = raw_pci_ops->read(pci_id->segment, pci_id->bus,
-                               PCI_DEVFN(pci_id->device, pci_id->function),
-                               reg, size, value);
+                                  PCI_DEVFN(pci_id->device, pci_id->function),
+                                  reg, size, value);
 
        return (result ? AE_ERROR : AE_OK);
 }
+
 EXPORT_SYMBOL(acpi_os_read_pci_configuration);
 
 acpi_status
-acpi_os_write_pci_configuration (struct acpi_pci_id *pci_id, u32 reg, acpi_integer value, u32 width)
+acpi_os_write_pci_configuration(struct acpi_pci_id * pci_id, u32 reg,
+                               acpi_integer value, u32 width)
 {
        int result, size;
 
@@ -563,56 +539,62 @@ acpi_os_write_pci_configuration (struct acpi_pci_id *pci_id, u32 reg, acpi_integ
        BUG_ON(!raw_pci_ops);
 
        result = raw_pci_ops->write(pci_id->segment, pci_id->bus,
-                               PCI_DEVFN(pci_id->device, pci_id->function),
-                               reg, size, value);
+                                   PCI_DEVFN(pci_id->device, pci_id->function),
+                                   reg, size, value);
 
        return (result ? AE_ERROR : AE_OK);
 }
 
 /* TODO: Change code to take advantage of driver model more */
-static void
-acpi_os_derive_pci_id_2 (
-       acpi_handle             rhandle,        /* upper bound  */
-       acpi_handle             chandle,        /* current node */
-       struct acpi_pci_id      **id,
-       int                     *is_bridge,
-       u8                      *bus_number)
+static void acpi_os_derive_pci_id_2(acpi_handle rhandle,       /* upper bound  */
+                                   acpi_handle chandle,        /* current node */
+                                   struct acpi_pci_id **id,
+                                   int *is_bridge, u8 * bus_number)
 {
-       acpi_handle             handle;
-       struct acpi_pci_id      *pci_id = *id;
-       acpi_status             status;
-       unsigned long           temp;
-       acpi_object_type        type;
-       u8                      tu8;
+       acpi_handle handle;
+       struct acpi_pci_id *pci_id = *id;
+       acpi_status status;
+       unsigned long temp;
+       acpi_object_type type;
+       u8 tu8;
 
        acpi_get_parent(chandle, &handle);
        if (handle != rhandle) {
-               acpi_os_derive_pci_id_2(rhandle, handle, &pci_id, is_bridge, bus_number);
+               acpi_os_derive_pci_id_2(rhandle, handle, &pci_id, is_bridge,
+                                       bus_number);
 
                status = acpi_get_type(handle, &type);
-               if ( (ACPI_FAILURE(status)) || (type != ACPI_TYPE_DEVICE) )
+               if ((ACPI_FAILURE(status)) || (type != ACPI_TYPE_DEVICE))
                        return;
 
-               status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, &temp);
+               status =
+                   acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL,
+                                         &temp);
                if (ACPI_SUCCESS(status)) {
-                       pci_id->device  = ACPI_HIWORD (ACPI_LODWORD (temp));
-                       pci_id->function = ACPI_LOWORD (ACPI_LODWORD (temp));
+                       pci_id->device = ACPI_HIWORD(ACPI_LODWORD(temp));
+                       pci_id->function = ACPI_LOWORD(ACPI_LODWORD(temp));
 
                        if (*is_bridge)
                                pci_id->bus = *bus_number;
 
                        /* any nicer way to get bus number of bridge ? */
-                       status = acpi_os_read_pci_configuration(pci_id, 0x0e, &tu8, 8);
-                       if (ACPI_SUCCESS(status) &&
-                           ((tu8 & 0x7f) == 1 || (tu8 & 0x7f) == 2)) {
-                               status = acpi_os_read_pci_configuration(pci_id, 0x18, &tu8, 8);
+                       status =
+                           acpi_os_read_pci_configuration(pci_id, 0x0e, &tu8,
+                                                          8);
+                       if (ACPI_SUCCESS(status)
+                           && ((tu8 & 0x7f) == 1 || (tu8 & 0x7f) == 2)) {
+                               status =
+                                   acpi_os_read_pci_configuration(pci_id, 0x18,
+                                                                  &tu8, 8);
                                if (!ACPI_SUCCESS(status)) {
                                        /* Certainly broken...  FIX ME */
                                        return;
                                }
                                *is_bridge = 1;
                                pci_id->bus = tu8;
-                               status = acpi_os_read_pci_configuration(pci_id, 0x19, &tu8, 8);
+                               status =
+                                   acpi_os_read_pci_configuration(pci_id, 0x19,
+                                                                  &tu8, 8);
                                if (ACPI_SUCCESS(status)) {
                                        *bus_number = tu8;
                                }
@@ -622,11 +604,9 @@ acpi_os_derive_pci_id_2 (
        }
 }
 
-void
-acpi_os_derive_pci_id (
-       acpi_handle             rhandle,        /* upper bound  */
-       acpi_handle             chandle,        /* current node */
-       struct acpi_pci_id      **id)
+void acpi_os_derive_pci_id(acpi_handle rhandle,        /* upper bound  */
+                          acpi_handle chandle, /* current node */
+                          struct acpi_pci_id **id)
 {
        int is_bridge = 1;
        u8 bus_number = (*id)->bus;
@@ -634,49 +614,15 @@ acpi_os_derive_pci_id (
        acpi_os_derive_pci_id_2(rhandle, chandle, id, &is_bridge, &bus_number);
 }
 
-#else /*!CONFIG_ACPI_PCI*/
-
-acpi_status
-acpi_os_write_pci_configuration (
-       struct acpi_pci_id      *pci_id,
-       u32                     reg,
-       acpi_integer            value,
-       u32                     width)
-{
-       return AE_SUPPORT;
-}
-
-acpi_status
-acpi_os_read_pci_configuration (
-       struct acpi_pci_id      *pci_id,
-       u32                     reg,
-       void                    *value,
-       u32                     width)
-{
-       return AE_SUPPORT;
-}
-
-void
-acpi_os_derive_pci_id (
-       acpi_handle             rhandle,        /* upper bound  */
-       acpi_handle             chandle,        /* current node */
-       struct acpi_pci_id      **id)
-{
-}
-
-#endif /*CONFIG_ACPI_PCI*/
-
-static void
-acpi_os_execute_deferred (
-       void *context)
+static void acpi_os_execute_deferred(void *context)
 {
-       struct acpi_os_dpc      *dpc = NULL;
+       struct acpi_os_dpc *dpc = NULL;
 
-       ACPI_FUNCTION_TRACE ("os_execute_deferred");
+       ACPI_FUNCTION_TRACE("os_execute_deferred");
 
-       dpc = (struct acpi_os_dpc *) context;
+       dpc = (struct acpi_os_dpc *)context;
        if (!dpc) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid (NULL) context.\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid (NULL) context.\n"));
                return_VOID;
        }
 
@@ -688,21 +634,21 @@ acpi_os_execute_deferred (
 }
 
 acpi_status
-acpi_os_queue_for_execution(
-       u32                     priority,
-       acpi_osd_exec_callback  function,
-       void                    *context)
+acpi_os_queue_for_execution(u32 priority,
+                           acpi_osd_exec_callback function, void *context)
 {
-       acpi_status             status = AE_OK;
-       struct acpi_os_dpc      *dpc;
-       struct work_struct      *task;
+       acpi_status status = AE_OK;
+       struct acpi_os_dpc *dpc;
+       struct work_struct *task;
 
-       ACPI_FUNCTION_TRACE ("os_queue_for_execution");
+       ACPI_FUNCTION_TRACE("os_queue_for_execution");
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Scheduling function [%p(%p)] for deferred execution.\n", function, context));
+       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                         "Scheduling function [%p(%p)] for deferred execution.\n",
+                         function, context));
 
        if (!function)
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
 
        /*
         * Allocate/initialize DPC structure.  Note that this memory will be
@@ -715,146 +661,94 @@ acpi_os_queue_for_execution(
         * from the same memory.
         */
 
-       dpc = kmalloc(sizeof(struct acpi_os_dpc)+sizeof(struct work_struct), GFP_ATOMIC);
+       dpc =
+           kmalloc(sizeof(struct acpi_os_dpc) + sizeof(struct work_struct),
+                   GFP_ATOMIC);
        if (!dpc)
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
 
        dpc->function = function;
        dpc->context = context;
 
-       task = (void *)(dpc+1);
-       INIT_WORK(task, acpi_os_execute_deferred, (void*)dpc);
+       task = (void *)(dpc + 1);
+       INIT_WORK(task, acpi_os_execute_deferred, (void *)dpc);
 
        if (!queue_work(kacpid_wq, task)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Call to queue_work() failed.\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Call to queue_work() failed.\n"));
                kfree(dpc);
                status = AE_ERROR;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
+
 EXPORT_SYMBOL(acpi_os_queue_for_execution);
 
-void
-acpi_os_wait_events_complete(
-       void *context)
+void acpi_os_wait_events_complete(void *context)
 {
        flush_workqueue(kacpid_wq);
 }
+
 EXPORT_SYMBOL(acpi_os_wait_events_complete);
 
 /*
  * Allocate the memory for a spinlock and initialize it.
  */
-acpi_status
-acpi_os_create_lock (
-       acpi_handle     *out_handle)
+acpi_status acpi_os_create_lock(acpi_handle * out_handle)
 {
        spinlock_t *lock_ptr;
 
-       ACPI_FUNCTION_TRACE ("os_create_lock");
+       ACPI_FUNCTION_TRACE("os_create_lock");
 
        lock_ptr = acpi_os_allocate(sizeof(spinlock_t));
 
        spin_lock_init(lock_ptr);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Creating spinlock[%p].\n", lock_ptr));
+       ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Creating spinlock[%p].\n", lock_ptr));
 
        *out_handle = lock_ptr;
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*
  * Deallocate the memory for a spinlock.
  */
-void
-acpi_os_delete_lock (
-       acpi_handle     handle)
+void acpi_os_delete_lock(acpi_handle handle)
 {
-       ACPI_FUNCTION_TRACE ("os_create_lock");
+       ACPI_FUNCTION_TRACE("os_create_lock");
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Deleting spinlock[%p].\n", handle));
+       ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Deleting spinlock[%p].\n", handle));
 
        acpi_os_free(handle);
 
        return_VOID;
 }
 
-/*
- * Acquire a spinlock.
- *
- * handle is a pointer to the spinlock_t.
- * flags is *not* the result of save_flags - it is an ACPI-specific flag variable
- *   that indicates whether we are at interrupt level.
- */
-void
-acpi_os_acquire_lock (
-       acpi_handle     handle,
-       u32             flags)
-{
-       ACPI_FUNCTION_TRACE ("os_acquire_lock");
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Acquiring spinlock[%p] from %s level\n", handle,
-               ((flags & ACPI_NOT_ISR) ? "non-interrupt" : "interrupt")));
-
-       if (flags & ACPI_NOT_ISR)
-               ACPI_DISABLE_IRQS();
-
-       spin_lock((spinlock_t *)handle);
-
-       return_VOID;
-}
-
-
-/*
- * Release a spinlock. See above.
- */
-void
-acpi_os_release_lock (
-       acpi_handle     handle,
-       u32             flags)
-{
-       ACPI_FUNCTION_TRACE ("os_release_lock");
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Releasing spinlock[%p] from %s level\n", handle,
-               ((flags & ACPI_NOT_ISR) ? "non-interrupt" : "interrupt")));
-
-       spin_unlock((spinlock_t *)handle);
-
-       if (flags & ACPI_NOT_ISR)
-               ACPI_ENABLE_IRQS();
-
-       return_VOID;
-}
-
-
 acpi_status
-acpi_os_create_semaphore(
-       u32             max_units,
-       u32             initial_units,
-       acpi_handle     *handle)
+acpi_os_create_semaphore(u32 max_units, u32 initial_units, acpi_handle * handle)
 {
-       struct semaphore        *sem = NULL;
+       struct semaphore *sem = NULL;
 
-       ACPI_FUNCTION_TRACE ("os_create_semaphore");
+       ACPI_FUNCTION_TRACE("os_create_semaphore");
 
        sem = acpi_os_allocate(sizeof(struct semaphore));
        if (!sem)
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        memset(sem, 0, sizeof(struct semaphore));
 
        sema_init(sem, initial_units);
 
-       *handle = (acpi_handle*)sem;
+       *handle = (acpi_handle *) sem;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Creating semaphore[%p|%d].\n", *handle, initial_units));
+       ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Creating semaphore[%p|%d].\n",
+                         *handle, initial_units));
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-EXPORT_SYMBOL(acpi_os_create_semaphore);
 
+EXPORT_SYMBOL(acpi_os_create_semaphore);
 
 /*
  * TODO: A better way to delete semaphores?  Linux doesn't have a
@@ -863,25 +757,24 @@ EXPORT_SYMBOL(acpi_os_create_semaphore);
  * we at least check for blocked threads and signal/cancel them?
  */
 
-acpi_status
-acpi_os_delete_semaphore(
-       acpi_handle     handle)
+acpi_status acpi_os_delete_semaphore(acpi_handle handle)
 {
-       struct semaphore *sem = (struct semaphore*) handle;
+       struct semaphore *sem = (struct semaphore *)handle;
 
-       ACPI_FUNCTION_TRACE ("os_delete_semaphore");
+       ACPI_FUNCTION_TRACE("os_delete_semaphore");
 
        if (!sem)
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Deleting semaphore[%p].\n", handle));
+       ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Deleting semaphore[%p].\n", handle));
 
-       acpi_os_free(sem); sem =  NULL;
+       acpi_os_free(sem);
+       sem = NULL;
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-EXPORT_SYMBOL(acpi_os_delete_semaphore);
 
+EXPORT_SYMBOL(acpi_os_delete_semaphore);
 
 /*
  * TODO: The kernel doesn't have a 'down_timeout' function -- had to
@@ -892,31 +785,27 @@ EXPORT_SYMBOL(acpi_os_delete_semaphore);
  *
  * TODO: Support for units > 1?
  */
-acpi_status
-acpi_os_wait_semaphore(
-       acpi_handle             handle,
-       u32                     units,
-       u16                     timeout)
+acpi_status acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 timeout)
 {
-       acpi_status             status = AE_OK;
-       struct semaphore        *sem = (struct semaphore*)handle;
-       int                     ret = 0;
+       acpi_status status = AE_OK;
+       struct semaphore *sem = (struct semaphore *)handle;
+       int ret = 0;
 
-       ACPI_FUNCTION_TRACE ("os_wait_semaphore");
+       ACPI_FUNCTION_TRACE("os_wait_semaphore");
 
        if (!sem || (units < 1))
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
 
        if (units > 1)
-               return_ACPI_STATUS (AE_SUPPORT);
+               return_ACPI_STATUS(AE_SUPPORT);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Waiting for semaphore[%p|%d|%d]\n", handle, units, timeout));
+       ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Waiting for semaphore[%p|%d|%d]\n",
+                         handle, units, timeout));
 
        if (in_atomic())
                timeout = 0;
 
-       switch (timeout)
-       {
+       switch (timeout) {
                /*
                 * No Wait:
                 * --------
@@ -924,8 +813,8 @@ acpi_os_wait_semaphore(
                 * acquire the semaphore if available otherwise return AE_TIME
                 * (a.k.a. 'would block').
                 */
-               case 0:
-               if(down_trylock(sem))
+       case 0:
+               if (down_trylock(sem))
                        status = AE_TIME;
                break;
 
@@ -933,7 +822,7 @@ acpi_os_wait_semaphore(
                 * Wait Indefinitely:
                 * ------------------
                 */
-               case ACPI_WAIT_FOREVER:
+       case ACPI_WAIT_FOREVER:
                down(sem);
                break;
 
@@ -941,11 +830,11 @@ acpi_os_wait_semaphore(
                 * Wait w/ Timeout:
                 * ----------------
                 */
-               default:
+       default:
                // TODO: A better timeout algorithm?
                {
                        int i = 0;
-                       static const int quantum_ms = 1000/HZ;
+                       static const int quantum_ms = 1000 / HZ;
 
                        ret = down_trylock(sem);
                        for (i = timeout; (i > 0 && ret < 0); i -= quantum_ms) {
@@ -953,7 +842,7 @@ acpi_os_wait_semaphore(
                                schedule_timeout(1);
                                ret = down_trylock(sem);
                        }
-       
+
                        if (ret != 0)
                                status = AE_TIME;
                }
@@ -961,47 +850,48 @@ acpi_os_wait_semaphore(
        }
 
        if (ACPI_FAILURE(status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Failed to acquire semaphore[%p|%d|%d], %s\n", 
-                       handle, units, timeout, acpi_format_exception(status)));
-       }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Acquired semaphore[%p|%d|%d]\n", handle, units, timeout));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Failed to acquire semaphore[%p|%d|%d], %s\n",
+                                 handle, units, timeout,
+                                 acpi_format_exception(status)));
+       } else {
+               ACPI_DEBUG_PRINT((ACPI_DB_MUTEX,
+                                 "Acquired semaphore[%p|%d|%d]\n", handle,
+                                 units, timeout));
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_os_wait_semaphore);
 
+EXPORT_SYMBOL(acpi_os_wait_semaphore);
 
 /*
  * TODO: Support for units > 1?
  */
-acpi_status
-acpi_os_signal_semaphore(
-    acpi_handle            handle,
-    u32                    units)
+acpi_status acpi_os_signal_semaphore(acpi_handle handle, u32 units)
 {
-       struct semaphore *sem = (struct semaphore *) handle;
+       struct semaphore *sem = (struct semaphore *)handle;
 
-       ACPI_FUNCTION_TRACE ("os_signal_semaphore");
+       ACPI_FUNCTION_TRACE("os_signal_semaphore");
 
        if (!sem || (units < 1))
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
 
        if (units > 1)
-               return_ACPI_STATUS (AE_SUPPORT);
+               return_ACPI_STATUS(AE_SUPPORT);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Signaling semaphore[%p|%d]\n", handle, units));
+       ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Signaling semaphore[%p|%d]\n", handle,
+                         units));
 
        up(sem);
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
+
 EXPORT_SYMBOL(acpi_os_signal_semaphore);
 
 #ifdef ACPI_FUTURE_USAGE
-u32
-acpi_os_get_line(char *buffer)
+u32 acpi_os_get_line(char *buffer)
 {
 
 #ifdef ENABLE_DEBUGGER
@@ -1018,22 +908,21 @@ acpi_os_get_line(char *buffer)
 
        return 0;
 }
-#endif  /*  ACPI_FUTURE_USAGE  */
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /* Assumes no unreadable holes inbetween */
-u8
-acpi_os_readable(void *ptr, acpi_size len)
+u8 acpi_os_readable(void *ptr, acpi_size len)
 {
-#if defined(__i386__) || defined(__x86_64__) 
+#if defined(__i386__) || defined(__x86_64__)
        char tmp;
-       return !__get_user(tmp, (char __user *)ptr) && !__get_user(tmp, (char __user *)ptr + len - 1);
+       return !__get_user(tmp, (char __user *)ptr)
+           && !__get_user(tmp, (char __user *)ptr + len - 1);
 #endif
        return 1;
 }
 
 #ifdef ACPI_FUTURE_USAGE
-u8
-acpi_os_writable(void *ptr, acpi_size len)
+u8 acpi_os_writable(void *ptr, acpi_size len)
 {
        /* could do dummy write (racy) or a kernel page table lookup.
           The later may be difficult at early boot when kmap doesn't work yet. */
@@ -1041,8 +930,7 @@ acpi_os_writable(void *ptr, acpi_size len)
 }
 #endif
 
-u32
-acpi_os_get_thread_id (void)
+u32 acpi_os_get_thread_id(void)
 {
        if (!in_atomic())
                return current->pid;
@@ -1050,13 +938,9 @@ acpi_os_get_thread_id (void)
        return 0;
 }
 
-acpi_status
-acpi_os_signal (
-    u32                function,
-    void       *info)
+acpi_status acpi_os_signal(u32 function, void *info)
 {
-       switch (function)
-       {
+       switch (function) {
        case ACPI_SIGNAL_FATAL:
                printk(KERN_ERR PREFIX "Fatal opcode executed\n");
                break;
@@ -1076,13 +960,13 @@ acpi_os_signal (
 
        return AE_OK;
 }
+
 EXPORT_SYMBOL(acpi_os_signal);
 
-static int __init
-acpi_os_name_setup(char *str)
+static int __init acpi_os_name_setup(char *str)
 {
        char *p = acpi_os_name;
-       int count = ACPI_MAX_OVERRIDE_LEN-1;
+       int count = ACPI_MAX_OVERRIDE_LEN - 1;
 
        if (!str || !*str)
                return 0;
@@ -1098,7 +982,7 @@ acpi_os_name_setup(char *str)
        *p = 0;
 
        return 1;
-               
+
 }
 
 __setup("acpi_os_name=", acpi_os_name_setup);
@@ -1108,16 +992,15 @@ __setup("acpi_os_name=", acpi_os_name_setup);
  * empty string disables _OSI
  * TBD additional string adds to _OSI
  */
-static int __init
-acpi_osi_setup(char *str)
+static int __init acpi_osi_setup(char *str)
 {
        if (str == NULL || *str == '\0') {
                printk(KERN_INFO PREFIX "_OSI method disabled\n");
                acpi_gbl_create_osi_method = FALSE;
-       } else
-       {
+       } else {
                /* TBD */
-               printk(KERN_ERR PREFIX "_OSI additional string ignored -- %s\n", str);
+               printk(KERN_ERR PREFIX "_OSI additional string ignored -- %s\n",
+                      str);
        }
 
        return 1;
@@ -1126,8 +1009,7 @@ acpi_osi_setup(char *str)
 __setup("acpi_osi=", acpi_osi_setup);
 
 /* enable serialization to combat AE_ALREADY_EXISTS errors */
-static int __init
-acpi_serialize_setup(char *str)
+static int __init acpi_serialize_setup(char *str)
 {
        printk(KERN_INFO PREFIX "serialize enabled\n");
 
@@ -1147,8 +1029,7 @@ __setup("acpi_serialize", acpi_serialize_setup);
  * Run-time events on the same GPE this flag is available
  * to tell Linux to keep the wake-time GPEs enabled at run-time.
  */
-static int __init
-acpi_wake_gpes_always_on_setup(char *str)
+static int __init acpi_wake_gpes_always_on_setup(char *str)
 {
        printk(KERN_INFO PREFIX "wake GPEs not disabled\n");
 
@@ -1159,8 +1040,7 @@ acpi_wake_gpes_always_on_setup(char *str)
 
 __setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup);
 
-int __init
-acpi_hotkey_setup(char *str)
+static int __init acpi_hotkey_setup(char *str)
 {
        acpi_specific_hotkey_enabled = FALSE;
        return 1;
@@ -1174,5 +1054,132 @@ __setup("acpi_generic_hotkey", acpi_hotkey_setup);
  */
 unsigned int max_cstate = ACPI_PROCESSOR_MAX_POWER;
 
-
 EXPORT_SYMBOL(max_cstate);
+
+/*
+ * Acquire a spinlock.
+ *
+ * handle is a pointer to the spinlock_t.
+ * flags is *not* the result of save_flags - it is an ACPI-specific flag variable
+ *   that indicates whether we are at interrupt level.
+ */
+
+unsigned long acpi_os_acquire_lock(acpi_handle handle)
+{
+       unsigned long flags;
+       spin_lock_irqsave((spinlock_t *) handle, flags);
+       return flags;
+}
+
+/*
+ * Release a spinlock. See above.
+ */
+
+void acpi_os_release_lock(acpi_handle handle, unsigned long flags)
+{
+       spin_unlock_irqrestore((spinlock_t *) handle, flags);
+}
+
+#ifndef ACPI_USE_LOCAL_CACHE
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_os_create_cache
+ *
+ * PARAMETERS:  CacheName       - Ascii name for the cache
+ *              ObjectSize      - Size of each cached object
+ *              MaxDepth        - Maximum depth of the cache (in objects)
+ *              ReturnCache     - Where the new cache object is returned
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Create a cache object
+ *
+ ******************************************************************************/
+
+acpi_status
+acpi_os_create_cache(char *name, u16 size, u16 depth, acpi_cache_t ** cache)
+{
+       *cache = kmem_cache_create(name, size, 0, 0, NULL, NULL);
+       return AE_OK;
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_os_purge_cache
+ *
+ * PARAMETERS:  Cache           - Handle to cache object
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Free all objects within the requested cache.
+ *
+ ******************************************************************************/
+
+acpi_status acpi_os_purge_cache(acpi_cache_t * cache)
+{
+       (void)kmem_cache_shrink(cache);
+       return (AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_os_delete_cache
+ *
+ * PARAMETERS:  Cache           - Handle to cache object
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Free all objects within the requested cache and delete the
+ *              cache object.
+ *
+ ******************************************************************************/
+
+acpi_status acpi_os_delete_cache(acpi_cache_t * cache)
+{
+       (void)kmem_cache_destroy(cache);
+       return (AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_os_release_object
+ *
+ * PARAMETERS:  Cache       - Handle to cache object
+ *              Object      - The object to be released
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Release an object to the specified cache.  If cache is full,
+ *              the object is deleted.
+ *
+ ******************************************************************************/
+
+acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object)
+{
+       kmem_cache_free(cache, object);
+       return (AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_os_acquire_object
+ *
+ * PARAMETERS:  Cache           - Handle to cache object
+ *              ReturnObject    - Where the object is returned
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Get an object from the specified cache.  If cache is empty,
+ *              the object is allocated.
+ *
+ ******************************************************************************/
+
+void *acpi_os_acquire_object(acpi_cache_t * cache)
+{
+       void *object = kmem_cache_alloc(cache, GFP_KERNEL);
+       WARN_ON(!object);
+       return object;
+}
+
+#endif
index bbdd286c660d581147efccba0c49a5d58ffde7c0..db24ee09cf11777a11e20e293c9fb85031366be8 100644 (file)
@@ -2,7 +2,7 @@
 # Makefile for all Linux ACPI interpreter subdirectories
 #
 
-obj-y := psargs.o    psparse.o  pstree.o   pswalk.o  \
+obj-y := psargs.o    psparse.o  psloop.o pstree.o   pswalk.o  \
         psopcode.o  psscope.o  psutils.o  psxface.o
 
 EXTRA_CFLAGS += $(ACPI_CFLAGS)
index b7ac68cc9e1c71babe183cd6096e68ec7df9fb53..5858188f94a69912220474c7af6142e7ba494b53 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 #include <acpi/acnamesp.h>
 
 #define _COMPONENT          ACPI_PARSER
-        ACPI_MODULE_NAME    ("psargs")
+ACPI_MODULE_NAME("psargs")
 
 /* Local prototypes */
-
 static u32
-acpi_ps_get_next_package_length (
-       struct acpi_parse_state         *parser_state);
-
-static union acpi_parse_object *
-acpi_ps_get_next_field (
-       struct acpi_parse_state         *parser_state);
+acpi_ps_get_next_package_length(struct acpi_parse_state *parser_state);
 
+static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
+                                                      *parser_state);
 
 /*******************************************************************************
  *
@@ -75,49 +70,43 @@ acpi_ps_get_next_field (
  ******************************************************************************/
 
 static u32
-acpi_ps_get_next_package_length (
-       struct acpi_parse_state         *parser_state)
+acpi_ps_get_next_package_length(struct acpi_parse_state *parser_state)
 {
-       u32                             encoded_length;
-       u32                             length = 0;
+       u32 encoded_length;
+       u32 length = 0;
 
+       ACPI_FUNCTION_TRACE("ps_get_next_package_length");
 
-       ACPI_FUNCTION_TRACE ("ps_get_next_package_length");
-
-
-       encoded_length = (u32) ACPI_GET8 (parser_state->aml);
+       encoded_length = (u32) ACPI_GET8(parser_state->aml);
        parser_state->aml++;
 
-       switch (encoded_length >> 6) /* bits 6-7 contain encoding scheme */ {
-       case 0: /* 1-byte encoding (bits 0-5) */
+       switch (encoded_length >> 6) {  /* bits 6-7 contain encoding scheme */
+       case 0:         /* 1-byte encoding (bits 0-5) */
 
                length = (encoded_length & 0x3F);
                break;
 
+       case 1:         /* 2-byte encoding (next byte + bits 0-3) */
 
-       case 1: /* 2-byte encoding (next byte + bits 0-3) */
-
-               length = ((ACPI_GET8 (parser_state->aml) << 04) |
-                                (encoded_length & 0x0F));
+               length = ((ACPI_GET8(parser_state->aml) << 04) |
+                         (encoded_length & 0x0F));
                parser_state->aml++;
                break;
 
+       case 2:         /* 3-byte encoding (next 2 bytes + bits 0-3) */
 
-       case 2: /* 3-byte encoding (next 2 bytes + bits 0-3) */
-
-               length = ((ACPI_GET8 (parser_state->aml + 1) << 12) |
-                                 (ACPI_GET8 (parser_state->aml)    << 04) |
-                                 (encoded_length & 0x0F));
+               length = ((ACPI_GET8(parser_state->aml + 1) << 12) |
+                         (ACPI_GET8(parser_state->aml) << 04) |
+                         (encoded_length & 0x0F));
                parser_state->aml += 2;
                break;
 
+       case 3:         /* 4-byte encoding (next 3 bytes + bits 0-3) */
 
-       case 3: /* 4-byte encoding (next 3 bytes + bits 0-3) */
-
-               length = ((ACPI_GET8 (parser_state->aml + 2) << 20) |
-                                 (ACPI_GET8 (parser_state->aml + 1) << 12) |
-                                 (ACPI_GET8 (parser_state->aml)    << 04) |
-                                 (encoded_length & 0x0F));
+               length = ((ACPI_GET8(parser_state->aml + 2) << 20) |
+                         (ACPI_GET8(parser_state->aml + 1) << 12) |
+                         (ACPI_GET8(parser_state->aml) << 04) |
+                         (encoded_length & 0x0F));
                parser_state->aml += 3;
                break;
 
@@ -127,10 +116,9 @@ acpi_ps_get_next_package_length (
                break;
        }
 
-       return_VALUE (length);
+       return_VALUE(length);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_get_next_package_end
@@ -144,25 +132,21 @@ acpi_ps_get_next_package_length (
  *
  ******************************************************************************/
 
-u8 *
-acpi_ps_get_next_package_end (
-       struct acpi_parse_state         *parser_state)
+u8 *acpi_ps_get_next_package_end(struct acpi_parse_state *parser_state)
 {
-       u8                              *start = parser_state->aml;
-       acpi_native_uint                length;
-
-
-       ACPI_FUNCTION_TRACE ("ps_get_next_package_end");
+       u8 *start = parser_state->aml;
+       acpi_native_uint length;
 
+       ACPI_FUNCTION_TRACE("ps_get_next_package_end");
 
        /* Function below changes parser_state->Aml */
 
-       length = (acpi_native_uint) acpi_ps_get_next_package_length (parser_state);
+       length =
+           (acpi_native_uint) acpi_ps_get_next_package_length(parser_state);
 
-       return_PTR (start + length); /* end of package */
+       return_PTR(start + length);     /* end of package */
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_get_next_namestring
@@ -178,20 +162,16 @@ acpi_ps_get_next_package_end (
  *
  ******************************************************************************/
 
-char *
-acpi_ps_get_next_namestring (
-       struct acpi_parse_state         *parser_state)
+char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state)
 {
-       u8                              *start = parser_state->aml;
-       u8                              *end = parser_state->aml;
-
-
-       ACPI_FUNCTION_TRACE ("ps_get_next_namestring");
+       u8 *start = parser_state->aml;
+       u8 *end = parser_state->aml;
 
+       ACPI_FUNCTION_TRACE("ps_get_next_namestring");
 
        /* Handle multiple prefix characters */
 
-       while (acpi_ps_is_prefix_char (ACPI_GET8 (end))) {
+       while (acpi_ps_is_prefix_char(ACPI_GET8(end))) {
                /* Include prefix '\\' or '^' */
 
                end++;
@@ -199,7 +179,7 @@ acpi_ps_get_next_namestring (
 
        /* Decode the path */
 
-       switch (ACPI_GET8 (end)) {
+       switch (ACPI_GET8(end)) {
        case 0:
 
                /* null_name */
@@ -221,7 +201,7 @@ acpi_ps_get_next_namestring (
 
                /* Multiple name segments, 4 chars each */
 
-               end += 2 + ((acpi_size) ACPI_GET8 (end + 1) * ACPI_NAME_SIZE);
+               end += 2 + ((acpi_size) ACPI_GET8(end + 1) * ACPI_NAME_SIZE);
                break;
 
        default:
@@ -232,11 +212,10 @@ acpi_ps_get_next_namestring (
                break;
        }
 
-       parser_state->aml = (u8*) end;
-       return_PTR ((char *) start);
+       parser_state->aml = (u8 *) end;
+       return_PTR((char *)start);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_get_next_namepath
@@ -259,24 +238,20 @@ acpi_ps_get_next_namestring (
  ******************************************************************************/
 
 acpi_status
-acpi_ps_get_next_namepath (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_parse_state         *parser_state,
-       union acpi_parse_object         *arg,
-       u8                              method_call)
+acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
+                         struct acpi_parse_state *parser_state,
+                         union acpi_parse_object *arg, u8 method_call)
 {
-       char                            *path;
-       union acpi_parse_object         *name_op;
-       acpi_status                     status = AE_OK;
-       union acpi_operand_object       *method_desc;
-       struct acpi_namespace_node      *node;
-       union acpi_generic_state        scope_info;
+       char *path;
+       union acpi_parse_object *name_op;
+       acpi_status status = AE_OK;
+       union acpi_operand_object *method_desc;
+       struct acpi_namespace_node *node;
+       union acpi_generic_state scope_info;
 
+       ACPI_FUNCTION_TRACE("ps_get_next_namepath");
 
-       ACPI_FUNCTION_TRACE ("ps_get_next_namepath");
-
-
-       path = acpi_ps_get_next_namestring (parser_state);
+       path = acpi_ps_get_next_namestring(parser_state);
 
        /* Null path case is allowed */
 
@@ -296,49 +271,50 @@ acpi_ps_get_next_namepath (
                 * parent tree, but don't open a new scope -- we just want to lookup the
                 * object  (MUST BE mode EXECUTE to perform upsearch)
                 */
-               status = acpi_ns_lookup (&scope_info, path, ACPI_TYPE_ANY,
-                                ACPI_IMODE_EXECUTE,
-                                ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
-                                NULL, &node);
-               if (ACPI_SUCCESS (status) && method_call) {
+               status = acpi_ns_lookup(&scope_info, path, ACPI_TYPE_ANY,
+                                       ACPI_IMODE_EXECUTE,
+                                       ACPI_NS_SEARCH_PARENT |
+                                       ACPI_NS_DONT_OPEN_SCOPE, NULL, &node);
+               if (ACPI_SUCCESS(status) && method_call) {
                        if (node->type == ACPI_TYPE_METHOD) {
                                /* This name is actually a control method invocation */
 
-                               method_desc = acpi_ns_get_attached_object (node);
-                               ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
-                                       "Control Method - %p Desc %p Path=%p\n",
-                                       node, method_desc, path));
+                               method_desc = acpi_ns_get_attached_object(node);
+                               ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                                                 "Control Method - %p Desc %p Path=%p\n",
+                                                 node, method_desc, path));
 
-                               name_op = acpi_ps_alloc_op (AML_INT_NAMEPATH_OP);
+                               name_op = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP);
                                if (!name_op) {
-                                       return_ACPI_STATUS (AE_NO_MEMORY);
+                                       return_ACPI_STATUS(AE_NO_MEMORY);
                                }
 
                                /* Change arg into a METHOD CALL and attach name to it */
 
-                               acpi_ps_init_op (arg, AML_INT_METHODCALL_OP);
+                               acpi_ps_init_op(arg, AML_INT_METHODCALL_OP);
                                name_op->common.value.name = path;
 
                                /* Point METHODCALL/NAME to the METHOD Node */
 
                                name_op->common.node = node;
-                               acpi_ps_append_arg (arg, name_op);
+                               acpi_ps_append_arg(arg, name_op);
 
                                if (!method_desc) {
-                                       ACPI_REPORT_ERROR ((
-                                               "ps_get_next_namepath: Control Method %p has no attached object\n",
-                                               node));
-                                       return_ACPI_STATUS (AE_AML_INTERNAL);
+                                       ACPI_REPORT_ERROR(("ps_get_next_namepath: Control Method %p has no attached object\n", node));
+                                       return_ACPI_STATUS(AE_AML_INTERNAL);
                                }
 
-                               ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
-                                       "Control Method - %p Args %X\n",
-                                       node, method_desc->method.param_count));
+                               ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                                                 "Control Method - %p Args %X\n",
+                                                 node,
+                                                 method_desc->method.
+                                                 param_count));
 
                                /* Get the number of arguments to expect */
 
-                               walk_state->arg_count = method_desc->method.param_count;
-                               return_ACPI_STATUS (AE_OK);
+                               walk_state->arg_count =
+                                   method_desc->method.param_count;
+                               return_ACPI_STATUS(AE_OK);
                        }
 
                        /*
@@ -348,25 +324,26 @@ acpi_ps_get_next_namepath (
                         */
                }
 
-               if (ACPI_FAILURE (status)) {
+               if (ACPI_FAILURE(status)) {
                        /*
                         * 1) Any error other than NOT_FOUND is always severe
                         * 2) NOT_FOUND is only important if we are executing a method.
                         * 3) If executing a cond_ref_of opcode, NOT_FOUND is ok.
                         */
-                       if ((((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) &&
-                               (status == AE_NOT_FOUND)                                                &&
-                               (walk_state->op->common.aml_opcode != AML_COND_REF_OF_OP)) ||
-
-                               (status != AE_NOT_FOUND)) {
-                               ACPI_REPORT_NSERROR (path, status);
-
-                               acpi_os_printf ("search_node %p start_node %p return_node %p\n",
-                                       scope_info.scope.node, parser_state->start_node, node);
-
-
-                       }
-                       else {
+                       if ((((walk_state->
+                              parse_flags & ACPI_PARSE_MODE_MASK) ==
+                             ACPI_PARSE_EXECUTE) && (status == AE_NOT_FOUND)
+                            && (walk_state->op->common.aml_opcode !=
+                                AML_COND_REF_OF_OP))
+                           || (status != AE_NOT_FOUND)) {
+                               ACPI_REPORT_NSERROR(path, status);
+
+                               acpi_os_printf
+                                   ("search_node %p start_node %p return_node %p\n",
+                                    scope_info.scope.node,
+                                    parser_state->start_node, node);
+
+                       } else {
                                /*
                                 * We got a NOT_FOUND during table load or we encountered
                                 * a cond_ref_of(x) where the target does not exist.
@@ -381,13 +358,12 @@ acpi_ps_get_next_namepath (
         * Regardless of success/failure above,
         * Just initialize the Op with the pathname.
         */
-       acpi_ps_init_op (arg, AML_INT_NAMEPATH_OP);
+       acpi_ps_init_op(arg, AML_INT_NAMEPATH_OP);
        arg->common.value.name = path;
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_get_next_simple_arg
@@ -403,87 +379,81 @@ acpi_ps_get_next_namepath (
  ******************************************************************************/
 
 void
-acpi_ps_get_next_simple_arg (
-       struct acpi_parse_state         *parser_state,
-       u32                             arg_type,
-       union acpi_parse_object         *arg)
+acpi_ps_get_next_simple_arg(struct acpi_parse_state *parser_state,
+                           u32 arg_type, union acpi_parse_object *arg)
 {
 
-       ACPI_FUNCTION_TRACE_U32 ("ps_get_next_simple_arg", arg_type);
-
+       ACPI_FUNCTION_TRACE_U32("ps_get_next_simple_arg", arg_type);
 
        switch (arg_type) {
        case ARGP_BYTEDATA:
 
-               acpi_ps_init_op (arg, AML_BYTE_OP);
-               arg->common.value.integer = (u32) ACPI_GET8 (parser_state->aml);
+               acpi_ps_init_op(arg, AML_BYTE_OP);
+               arg->common.value.integer = (u32) ACPI_GET8(parser_state->aml);
                parser_state->aml++;
                break;
 
-
        case ARGP_WORDDATA:
 
-               acpi_ps_init_op (arg, AML_WORD_OP);
+               acpi_ps_init_op(arg, AML_WORD_OP);
 
                /* Get 2 bytes from the AML stream */
 
-               ACPI_MOVE_16_TO_32 (&arg->common.value.integer, parser_state->aml);
+               ACPI_MOVE_16_TO_32(&arg->common.value.integer,
+                                  parser_state->aml);
                parser_state->aml += 2;
                break;
 
-
        case ARGP_DWORDDATA:
 
-               acpi_ps_init_op (arg, AML_DWORD_OP);
+               acpi_ps_init_op(arg, AML_DWORD_OP);
 
                /* Get 4 bytes from the AML stream */
 
-               ACPI_MOVE_32_TO_32 (&arg->common.value.integer, parser_state->aml);
+               ACPI_MOVE_32_TO_32(&arg->common.value.integer,
+                                  parser_state->aml);
                parser_state->aml += 4;
                break;
 
-
        case ARGP_QWORDDATA:
 
-               acpi_ps_init_op (arg, AML_QWORD_OP);
+               acpi_ps_init_op(arg, AML_QWORD_OP);
 
                /* Get 8 bytes from the AML stream */
 
-               ACPI_MOVE_64_TO_64 (&arg->common.value.integer, parser_state->aml);
+               ACPI_MOVE_64_TO_64(&arg->common.value.integer,
+                                  parser_state->aml);
                parser_state->aml += 8;
                break;
 
-
        case ARGP_CHARLIST:
 
-               acpi_ps_init_op (arg, AML_STRING_OP);
-               arg->common.value.string = (char *) parser_state->aml;
+               acpi_ps_init_op(arg, AML_STRING_OP);
+               arg->common.value.string = (char *)parser_state->aml;
 
-               while (ACPI_GET8 (parser_state->aml) != '\0') {
+               while (ACPI_GET8(parser_state->aml) != '\0') {
                        parser_state->aml++;
                }
                parser_state->aml++;
                break;
 
-
        case ARGP_NAME:
        case ARGP_NAMESTRING:
 
-               acpi_ps_init_op (arg, AML_INT_NAMEPATH_OP);
-               arg->common.value.name = acpi_ps_get_next_namestring (parser_state);
+               acpi_ps_init_op(arg, AML_INT_NAMEPATH_OP);
+               arg->common.value.name =
+                   acpi_ps_get_next_namestring(parser_state);
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("Invalid arg_type %X\n", arg_type));
+               ACPI_REPORT_ERROR(("Invalid arg_type %X\n", arg_type));
                break;
        }
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_get_next_field
@@ -496,24 +466,21 @@ acpi_ps_get_next_simple_arg (
  *
  ******************************************************************************/
 
-static union acpi_parse_object *
-acpi_ps_get_next_field (
-       struct acpi_parse_state         *parser_state)
+static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
+                                                      *parser_state)
 {
-       u32                             aml_offset = (u32)
-                         ACPI_PTR_DIFF (parser_state->aml,
-                                          parser_state->aml_start);
-       union acpi_parse_object         *field;
-       u16                             opcode;
-       u32                             name;
-
-
-       ACPI_FUNCTION_TRACE ("ps_get_next_field");
+       u32 aml_offset = (u32)
+           ACPI_PTR_DIFF(parser_state->aml,
+                         parser_state->aml_start);
+       union acpi_parse_object *field;
+       u16 opcode;
+       u32 name;
 
+       ACPI_FUNCTION_TRACE("ps_get_next_field");
 
        /* Determine field type */
 
-       switch (ACPI_GET8 (parser_state->aml)) {
+       switch (ACPI_GET8(parser_state->aml)) {
        default:
 
                opcode = AML_INT_NAMEDFIELD_OP;
@@ -534,9 +501,9 @@ acpi_ps_get_next_field (
 
        /* Allocate a new field op */
 
-       field = acpi_ps_alloc_op (opcode);
+       field = acpi_ps_alloc_op(opcode);
        if (!field) {
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
        field->common.aml_offset = aml_offset;
@@ -548,33 +515,34 @@ acpi_ps_get_next_field (
 
                /* Get the 4-character name */
 
-               ACPI_MOVE_32_TO_32 (&name, parser_state->aml);
-               acpi_ps_set_name (field, name);
+               ACPI_MOVE_32_TO_32(&name, parser_state->aml);
+               acpi_ps_set_name(field, name);
                parser_state->aml += ACPI_NAME_SIZE;
 
                /* Get the length which is encoded as a package length */
 
-               field->common.value.size = acpi_ps_get_next_package_length (parser_state);
+               field->common.value.size =
+                   acpi_ps_get_next_package_length(parser_state);
                break;
 
-
        case AML_INT_RESERVEDFIELD_OP:
 
                /* Get the length which is encoded as a package length */
 
-               field->common.value.size = acpi_ps_get_next_package_length (parser_state);
+               field->common.value.size =
+                   acpi_ps_get_next_package_length(parser_state);
                break;
 
-
        case AML_INT_ACCESSFIELD_OP:
 
                /*
                 * Get access_type and access_attrib and merge into the field Op
                 * access_type is first operand, access_attribute is second
                 */
-               field->common.value.integer = (ACPI_GET8 (parser_state->aml) << 8);
+               field->common.value.integer =
+                   (ACPI_GET8(parser_state->aml) << 8);
                parser_state->aml++;
-               field->common.value.integer |= ACPI_GET8 (parser_state->aml);
+               field->common.value.integer |= ACPI_GET8(parser_state->aml);
                parser_state->aml++;
                break;
 
@@ -584,10 +552,9 @@ acpi_ps_get_next_field (
                break;
        }
 
-       return_PTR (field);
+       return_PTR(field);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_get_next_arg
@@ -605,21 +572,17 @@ acpi_ps_get_next_field (
  ******************************************************************************/
 
 acpi_status
-acpi_ps_get_next_arg (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_parse_state         *parser_state,
-       u32                             arg_type,
-       union acpi_parse_object         **return_arg)
+acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
+                    struct acpi_parse_state *parser_state,
+                    u32 arg_type, union acpi_parse_object **return_arg)
 {
-       union acpi_parse_object         *arg = NULL;
-       union acpi_parse_object         *prev = NULL;
-       union acpi_parse_object         *field;
-       u32                             subop;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ps_get_next_arg", parser_state);
+       union acpi_parse_object *arg = NULL;
+       union acpi_parse_object *prev = NULL;
+       union acpi_parse_object *field;
+       u32 subop;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE_PTR("ps_get_next_arg", parser_state);
 
        switch (arg_type) {
        case ARGP_BYTEDATA:
@@ -631,37 +594,35 @@ acpi_ps_get_next_arg (
 
                /* Constants, strings, and namestrings are all the same size */
 
-               arg = acpi_ps_alloc_op (AML_BYTE_OP);
+               arg = acpi_ps_alloc_op(AML_BYTE_OP);
                if (!arg) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
-               acpi_ps_get_next_simple_arg (parser_state, arg_type, arg);
+               acpi_ps_get_next_simple_arg(parser_state, arg_type, arg);
                break;
 
-
        case ARGP_PKGLENGTH:
 
                /* Package length, nothing returned */
 
-               parser_state->pkg_end = acpi_ps_get_next_package_end (parser_state);
+               parser_state->pkg_end =
+                   acpi_ps_get_next_package_end(parser_state);
                break;
 
-
        case ARGP_FIELDLIST:
 
                if (parser_state->aml < parser_state->pkg_end) {
                        /* Non-empty list */
 
                        while (parser_state->aml < parser_state->pkg_end) {
-                               field = acpi_ps_get_next_field (parser_state);
+                               field = acpi_ps_get_next_field(parser_state);
                                if (!field) {
-                                       return_ACPI_STATUS (AE_NO_MEMORY);
+                                       return_ACPI_STATUS(AE_NO_MEMORY);
                                }
 
                                if (prev) {
                                        prev->common.next = field;
-                               }
-                               else {
+                               } else {
                                        arg = field;
                                }
                                prev = field;
@@ -673,21 +634,21 @@ acpi_ps_get_next_arg (
                }
                break;
 
-
        case ARGP_BYTELIST:
 
                if (parser_state->aml < parser_state->pkg_end) {
                        /* Non-empty list */
 
-                       arg = acpi_ps_alloc_op (AML_INT_BYTELIST_OP);
+                       arg = acpi_ps_alloc_op(AML_INT_BYTELIST_OP);
                        if (!arg) {
-                               return_ACPI_STATUS (AE_NO_MEMORY);
+                               return_ACPI_STATUS(AE_NO_MEMORY);
                        }
 
                        /* Fill in bytelist data */
 
                        arg->common.value.size = (u32)
-                               ACPI_PTR_DIFF (parser_state->pkg_end, parser_state->aml);
+                           ACPI_PTR_DIFF(parser_state->pkg_end,
+                                         parser_state->aml);
                        arg->named.data = parser_state->aml;
 
                        /* Skip to End of byte data */
@@ -696,32 +657,31 @@ acpi_ps_get_next_arg (
                }
                break;
 
-
        case ARGP_TARGET:
        case ARGP_SUPERNAME:
        case ARGP_SIMPLENAME:
 
-               subop = acpi_ps_peek_opcode (parser_state);
-               if (subop == 0                  ||
-                       acpi_ps_is_leading_char (subop) ||
-                       acpi_ps_is_prefix_char (subop)) {
+               subop = acpi_ps_peek_opcode(parser_state);
+               if (subop == 0 ||
+                   acpi_ps_is_leading_char(subop) ||
+                   acpi_ps_is_prefix_char(subop)) {
                        /* null_name or name_string */
 
-                       arg = acpi_ps_alloc_op (AML_INT_NAMEPATH_OP);
+                       arg = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP);
                        if (!arg) {
-                               return_ACPI_STATUS (AE_NO_MEMORY);
+                               return_ACPI_STATUS(AE_NO_MEMORY);
                        }
 
-                       status = acpi_ps_get_next_namepath (walk_state, parser_state, arg, 0);
-               }
-               else {
+                       status =
+                           acpi_ps_get_next_namepath(walk_state, parser_state,
+                                                     arg, 0);
+               } else {
                        /* Single complex argument, nothing returned */
 
                        walk_state->arg_count = 1;
                }
                break;
 
-
        case ARGP_DATAOBJ:
        case ARGP_TERMARG:
 
@@ -730,7 +690,6 @@ acpi_ps_get_next_arg (
                walk_state->arg_count = 1;
                break;
 
-
        case ARGP_DATAOBJLIST:
        case ARGP_TERMLIST:
        case ARGP_OBJLIST:
@@ -742,14 +701,13 @@ acpi_ps_get_next_arg (
                }
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("Invalid arg_type: %X\n", arg_type));
+               ACPI_REPORT_ERROR(("Invalid arg_type: %X\n", arg_type));
                status = AE_AML_OPERAND_TYPE;
                break;
        }
 
        *return_arg = arg;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
diff --git a/drivers/acpi/parser/psloop.c b/drivers/acpi/parser/psloop.c
new file mode 100644 (file)
index 0000000..088d339
--- /dev/null
@@ -0,0 +1,874 @@
+/******************************************************************************
+ *
+ * Module Name: psloop - Main AML parse loop
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2005, R. Byron Moore
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+/*
+ * Parse the AML and build an operation tree as most interpreters,
+ * like Perl, do.  Parsing is done by hand rather than with a YACC
+ * generated parser to tightly constrain stack and dynamic memory
+ * usage.  At the same time, parsing is kept flexible and the code
+ * fairly compact by parsing based on a list of AML opcode
+ * templates in aml_op_info[]
+ */
+
+#include <acpi/acpi.h>
+#include <acpi/acparser.h>
+#include <acpi/acdispat.h>
+#include <acpi/amlcode.h>
+
+#define _COMPONENT          ACPI_PARSER
+ACPI_MODULE_NAME("psloop")
+
+static u32 acpi_gbl_depth = 0;
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ps_parse_loop
+ *
+ * PARAMETERS:  walk_state          - Current state
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Parse AML (pointed to by the current parser state) and return
+ *              a tree of ops.
+ *
+ ******************************************************************************/
+
+acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
+{
+       acpi_status status = AE_OK;
+       acpi_status status2;
+       union acpi_parse_object *op = NULL;     /* current op */
+       union acpi_parse_object *arg = NULL;
+       union acpi_parse_object *pre_op = NULL;
+       struct acpi_parse_state *parser_state;
+       u8 *aml_op_start = NULL;
+
+       ACPI_FUNCTION_TRACE_PTR("ps_parse_loop", walk_state);
+
+       if (walk_state->descending_callback == NULL) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
+       }
+
+       parser_state = &walk_state->parser_state;
+       walk_state->arg_types = 0;
+
+#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
+
+       if (walk_state->walk_type & ACPI_WALK_METHOD_RESTART) {
+               /* We are restarting a preempted control method */
+
+               if (acpi_ps_has_completed_scope(parser_state)) {
+                       /*
+                        * We must check if a predicate to an IF or WHILE statement
+                        * was just completed
+                        */
+                       if ((parser_state->scope->parse_scope.op) &&
+                           ((parser_state->scope->parse_scope.op->common.
+                             aml_opcode == AML_IF_OP)
+                            || (parser_state->scope->parse_scope.op->common.
+                                aml_opcode == AML_WHILE_OP))
+                           && (walk_state->control_state)
+                           && (walk_state->control_state->common.state ==
+                               ACPI_CONTROL_PREDICATE_EXECUTING)) {
+                               /*
+                                * A predicate was just completed, get the value of the
+                                * predicate and branch based on that value
+                                */
+                               walk_state->op = NULL;
+                               status =
+                                   acpi_ds_get_predicate_value(walk_state,
+                                                               ACPI_TO_POINTER
+                                                               (TRUE));
+                               if (ACPI_FAILURE(status)
+                                   && ((status & AE_CODE_MASK) !=
+                                       AE_CODE_CONTROL)) {
+                                       if (status == AE_AML_NO_RETURN_VALUE) {
+                                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                                 "Invoked method did not return a value, %s\n",
+                                                                 acpi_format_exception
+                                                                 (status)));
+
+                                       }
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "get_predicate Failed, %s\n",
+                                                         acpi_format_exception
+                                                         (status)));
+                                       return_ACPI_STATUS(status);
+                               }
+
+                               status =
+                                   acpi_ps_next_parse_state(walk_state, op,
+                                                            status);
+                       }
+
+                       acpi_ps_pop_scope(parser_state, &op,
+                                         &walk_state->arg_types,
+                                         &walk_state->arg_count);
+                       ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                                         "Popped scope, Op=%p\n", op));
+               } else if (walk_state->prev_op) {
+                       /* We were in the middle of an op */
+
+                       op = walk_state->prev_op;
+                       walk_state->arg_types = walk_state->prev_arg_types;
+               }
+       }
+#endif
+
+       /* Iterative parsing loop, while there is more AML to process: */
+
+       while ((parser_state->aml < parser_state->aml_end) || (op)) {
+               aml_op_start = parser_state->aml;
+               if (!op) {
+                       /* Get the next opcode from the AML stream */
+
+                       walk_state->aml_offset =
+                           (u32) ACPI_PTR_DIFF(parser_state->aml,
+                                               parser_state->aml_start);
+                       walk_state->opcode = acpi_ps_peek_opcode(parser_state);
+
+                       /*
+                        * First cut to determine what we have found:
+                        * 1) A valid AML opcode
+                        * 2) A name string
+                        * 3) An unknown/invalid opcode
+                        */
+                       walk_state->op_info =
+                           acpi_ps_get_opcode_info(walk_state->opcode);
+                       switch (walk_state->op_info->class) {
+                       case AML_CLASS_ASCII:
+                       case AML_CLASS_PREFIX:
+                               /*
+                                * Starts with a valid prefix or ASCII char, this is a name
+                                * string.  Convert the bare name string to a namepath.
+                                */
+                               walk_state->opcode = AML_INT_NAMEPATH_OP;
+                               walk_state->arg_types = ARGP_NAMESTRING;
+                               break;
+
+                       case AML_CLASS_UNKNOWN:
+
+                               /* The opcode is unrecognized.  Just skip unknown opcodes */
+
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Found unknown opcode %X at AML address %p offset %X, ignoring\n",
+                                                 walk_state->opcode,
+                                                 parser_state->aml,
+                                                 walk_state->aml_offset));
+
+                               ACPI_DUMP_BUFFER(parser_state->aml, 128);
+
+                               /* Assume one-byte bad opcode */
+
+                               parser_state->aml++;
+                               continue;
+
+                       default:
+
+                               /* Found opcode info, this is a normal opcode */
+
+                               parser_state->aml +=
+                                   acpi_ps_get_opcode_size(walk_state->opcode);
+                               walk_state->arg_types =
+                                   walk_state->op_info->parse_args;
+                               break;
+                       }
+
+                       /* Create Op structure and append to parent's argument list */
+
+                       if (walk_state->op_info->flags & AML_NAMED) {
+                               /* Allocate a new pre_op if necessary */
+
+                               if (!pre_op) {
+                                       pre_op =
+                                           acpi_ps_alloc_op(walk_state->
+                                                            opcode);
+                                       if (!pre_op) {
+                                               status = AE_NO_MEMORY;
+                                               goto close_this_op;
+                                       }
+                               }
+
+                               pre_op->common.value.arg = NULL;
+                               pre_op->common.aml_opcode = walk_state->opcode;
+
+                               /*
+                                * Get and append arguments until we find the node that contains
+                                * the name (the type ARGP_NAME).
+                                */
+                               while (GET_CURRENT_ARG_TYPE
+                                      (walk_state->arg_types)
+                                      &&
+                                      (GET_CURRENT_ARG_TYPE
+                                       (walk_state->arg_types) != ARGP_NAME)) {
+                                       status =
+                                           acpi_ps_get_next_arg(walk_state,
+                                                                parser_state,
+                                                                GET_CURRENT_ARG_TYPE
+                                                                (walk_state->
+                                                                 arg_types),
+                                                                &arg);
+                                       if (ACPI_FAILURE(status)) {
+                                               goto close_this_op;
+                                       }
+
+                                       acpi_ps_append_arg(pre_op, arg);
+                                       INCREMENT_ARG_LIST(walk_state->
+                                                          arg_types);
+                               }
+
+                               /*
+                                * Make sure that we found a NAME and didn't run out of
+                                * arguments
+                                */
+                               if (!GET_CURRENT_ARG_TYPE
+                                   (walk_state->arg_types)) {
+                                       status = AE_AML_NO_OPERAND;
+                                       goto close_this_op;
+                               }
+
+                               /* We know that this arg is a name, move to next arg */
+
+                               INCREMENT_ARG_LIST(walk_state->arg_types);
+
+                               /*
+                                * Find the object.  This will either insert the object into
+                                * the namespace or simply look it up
+                                */
+                               walk_state->op = NULL;
+
+                               status =
+                                   walk_state->descending_callback(walk_state,
+                                                                   &op);
+                               if (ACPI_FAILURE(status)) {
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "During name lookup/catalog, %s\n",
+                                                         acpi_format_exception
+                                                         (status)));
+                                       goto close_this_op;
+                               }
+
+                               if (!op) {
+                                       continue;
+                               }
+
+                               status =
+                                   acpi_ps_next_parse_state(walk_state, op,
+                                                            status);
+                               if (status == AE_CTRL_PENDING) {
+                                       status = AE_OK;
+                                       goto close_this_op;
+                               }
+
+                               if (ACPI_FAILURE(status)) {
+                                       goto close_this_op;
+                               }
+
+                               acpi_ps_append_arg(op,
+                                                  pre_op->common.value.arg);
+                               acpi_gbl_depth++;
+
+                               if (op->common.aml_opcode == AML_REGION_OP) {
+                                       /*
+                                        * Defer final parsing of an operation_region body,
+                                        * because we don't have enough info in the first pass
+                                        * to parse it correctly (i.e., there may be method
+                                        * calls within the term_arg elements of the body.)
+                                        *
+                                        * However, we must continue parsing because
+                                        * the opregion is not a standalone package --
+                                        * we don't know where the end is at this point.
+                                        *
+                                        * (Length is unknown until parse of the body complete)
+                                        */
+                                       op->named.data = aml_op_start;
+                                       op->named.length = 0;
+                               }
+                       } else {
+                               /* Not a named opcode, just allocate Op and append to parent */
+
+                               walk_state->op_info =
+                                   acpi_ps_get_opcode_info(walk_state->opcode);
+                               op = acpi_ps_alloc_op(walk_state->opcode);
+                               if (!op) {
+                                       status = AE_NO_MEMORY;
+                                       goto close_this_op;
+                               }
+
+                               if (walk_state->op_info->flags & AML_CREATE) {
+                                       /*
+                                        * Backup to beginning of create_xXXfield declaration
+                                        * body_length is unknown until we parse the body
+                                        */
+                                       op->named.data = aml_op_start;
+                                       op->named.length = 0;
+                               }
+
+                               acpi_ps_append_arg(acpi_ps_get_parent_scope
+                                                  (parser_state), op);
+
+                               if ((walk_state->descending_callback != NULL)) {
+                                       /*
+                                        * Find the object. This will either insert the object into
+                                        * the namespace or simply look it up
+                                        */
+                                       walk_state->op = op;
+
+                                       status =
+                                           walk_state->
+                                           descending_callback(walk_state,
+                                                               &op);
+                                       status =
+                                           acpi_ps_next_parse_state(walk_state,
+                                                                    op,
+                                                                    status);
+                                       if (status == AE_CTRL_PENDING) {
+                                               status = AE_OK;
+                                               goto close_this_op;
+                                       }
+
+                                       if (ACPI_FAILURE(status)) {
+                                               goto close_this_op;
+                                       }
+                               }
+                       }
+
+                       op->common.aml_offset = walk_state->aml_offset;
+
+                       if (walk_state->op_info) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                                                 "Opcode %4.4X [%s] Op %p Aml %p aml_offset %5.5X\n",
+                                                 (u32) op->common.aml_opcode,
+                                                 walk_state->op_info->name, op,
+                                                 parser_state->aml,
+                                                 op->common.aml_offset));
+                       }
+               }
+
+               /*
+                * Start arg_count at zero because we don't know if there are
+                * any args yet
+                */
+               walk_state->arg_count = 0;
+
+               /* Are there any arguments that must be processed? */
+
+               if (walk_state->arg_types) {
+                       /* Get arguments */
+
+                       switch (op->common.aml_opcode) {
+                       case AML_BYTE_OP:       /* AML_BYTEDATA_ARG */
+                       case AML_WORD_OP:       /* AML_WORDDATA_ARG */
+                       case AML_DWORD_OP:      /* AML_DWORDATA_ARG */
+                       case AML_QWORD_OP:      /* AML_QWORDATA_ARG */
+                       case AML_STRING_OP:     /* AML_ASCIICHARLIST_ARG */
+
+                               /* Fill in constant or string argument directly */
+
+                               acpi_ps_get_next_simple_arg(parser_state,
+                                                           GET_CURRENT_ARG_TYPE
+                                                           (walk_state->
+                                                            arg_types), op);
+                               break;
+
+                       case AML_INT_NAMEPATH_OP:       /* AML_NAMESTRING_ARG */
+
+                               status =
+                                   acpi_ps_get_next_namepath(walk_state,
+                                                             parser_state, op,
+                                                             1);
+                               if (ACPI_FAILURE(status)) {
+                                       goto close_this_op;
+                               }
+
+                               walk_state->arg_types = 0;
+                               break;
+
+                       default:
+                               /*
+                                * Op is not a constant or string, append each argument
+                                * to the Op
+                                */
+                               while (GET_CURRENT_ARG_TYPE
+                                      (walk_state->arg_types)
+                                      && !walk_state->arg_count) {
+                                       walk_state->aml_offset = (u32)
+                                           ACPI_PTR_DIFF(parser_state->aml,
+                                                         parser_state->
+                                                         aml_start);
+
+                                       status =
+                                           acpi_ps_get_next_arg(walk_state,
+                                                                parser_state,
+                                                                GET_CURRENT_ARG_TYPE
+                                                                (walk_state->
+                                                                 arg_types),
+                                                                &arg);
+                                       if (ACPI_FAILURE(status)) {
+                                               goto close_this_op;
+                                       }
+
+                                       if (arg) {
+                                               arg->common.aml_offset =
+                                                   walk_state->aml_offset;
+                                               acpi_ps_append_arg(op, arg);
+                                       }
+                                       INCREMENT_ARG_LIST(walk_state->
+                                                          arg_types);
+                               }
+
+                               /* Special processing for certain opcodes */
+
+                               /* TBD (remove): Temporary mechanism to disable this code if needed */
+
+#ifdef ACPI_ENABLE_MODULE_LEVEL_CODE
+
+                               if ((walk_state->pass_number <=
+                                    ACPI_IMODE_LOAD_PASS1)
+                                   &&
+                                   ((walk_state->
+                                     parse_flags & ACPI_PARSE_DISASSEMBLE) ==
+                                    0)) {
+                                       /*
+                                        * We want to skip If/Else/While constructs during Pass1
+                                        * because we want to actually conditionally execute the
+                                        * code during Pass2.
+                                        *
+                                        * Except for disassembly, where we always want to
+                                        * walk the If/Else/While packages
+                                        */
+                                       switch (op->common.aml_opcode) {
+                                       case AML_IF_OP:
+                                       case AML_ELSE_OP:
+                                       case AML_WHILE_OP:
+
+                                               ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                                                                 "Pass1: Skipping an If/Else/While body\n"));
+
+                                               /* Skip body of if/else/while in pass 1 */
+
+                                               parser_state->aml =
+                                                   parser_state->pkg_end;
+                                               walk_state->arg_count = 0;
+                                               break;
+
+                                       default:
+                                               break;
+                                       }
+                               }
+#endif
+                               switch (op->common.aml_opcode) {
+                               case AML_METHOD_OP:
+
+                                       /*
+                                        * Skip parsing of control method
+                                        * because we don't have enough info in the first pass
+                                        * to parse it correctly.
+                                        *
+                                        * Save the length and address of the body
+                                        */
+                                       op->named.data = parser_state->aml;
+                                       op->named.length =
+                                           (u32) (parser_state->pkg_end -
+                                                  parser_state->aml);
+
+                                       /* Skip body of method */
+
+                                       parser_state->aml =
+                                           parser_state->pkg_end;
+                                       walk_state->arg_count = 0;
+                                       break;
+
+                               case AML_BUFFER_OP:
+                               case AML_PACKAGE_OP:
+                               case AML_VAR_PACKAGE_OP:
+
+                                       if ((op->common.parent) &&
+                                           (op->common.parent->common.
+                                            aml_opcode == AML_NAME_OP)
+                                           && (walk_state->pass_number <=
+                                               ACPI_IMODE_LOAD_PASS2)) {
+                                               /*
+                                                * Skip parsing of Buffers and Packages
+                                                * because we don't have enough info in the first pass
+                                                * to parse them correctly.
+                                                */
+                                               op->named.data = aml_op_start;
+                                               op->named.length =
+                                                   (u32) (parser_state->
+                                                          pkg_end -
+                                                          aml_op_start);
+
+                                               /* Skip body */
+
+                                               parser_state->aml =
+                                                   parser_state->pkg_end;
+                                               walk_state->arg_count = 0;
+                                       }
+                                       break;
+
+                               case AML_WHILE_OP:
+
+                                       if (walk_state->control_state) {
+                                               walk_state->control_state->
+                                                   control.package_end =
+                                                   parser_state->pkg_end;
+                                       }
+                                       break;
+
+                               default:
+
+                                       /* No action for all other opcodes */
+                                       break;
+                               }
+                               break;
+                       }
+               }
+
+               /* Check for arguments that need to be processed */
+
+               if (walk_state->arg_count) {
+                       /*
+                        * There are arguments (complex ones), push Op and
+                        * prepare for argument
+                        */
+                       status = acpi_ps_push_scope(parser_state, op,
+                                                   walk_state->arg_types,
+                                                   walk_state->arg_count);
+                       if (ACPI_FAILURE(status)) {
+                               goto close_this_op;
+                       }
+                       op = NULL;
+                       continue;
+               }
+
+               /*
+                * All arguments have been processed -- Op is complete,
+                * prepare for next
+                */
+               walk_state->op_info =
+                   acpi_ps_get_opcode_info(op->common.aml_opcode);
+               if (walk_state->op_info->flags & AML_NAMED) {
+                       if (acpi_gbl_depth) {
+                               acpi_gbl_depth--;
+                       }
+
+                       if (op->common.aml_opcode == AML_REGION_OP) {
+                               /*
+                                * Skip parsing of control method or opregion body,
+                                * because we don't have enough info in the first pass
+                                * to parse them correctly.
+                                *
+                                * Completed parsing an op_region declaration, we now
+                                * know the length.
+                                */
+                               op->named.length =
+                                   (u32) (parser_state->aml - op->named.data);
+                       }
+               }
+
+               if (walk_state->op_info->flags & AML_CREATE) {
+                       /*
+                        * Backup to beginning of create_xXXfield declaration (1 for
+                        * Opcode)
+                        *
+                        * body_length is unknown until we parse the body
+                        */
+                       op->named.length =
+                           (u32) (parser_state->aml - op->named.data);
+               }
+
+               /* This op complete, notify the dispatcher */
+
+               if (walk_state->ascending_callback != NULL) {
+                       walk_state->op = op;
+                       walk_state->opcode = op->common.aml_opcode;
+
+                       status = walk_state->ascending_callback(walk_state);
+                       status =
+                           acpi_ps_next_parse_state(walk_state, op, status);
+                       if (status == AE_CTRL_PENDING) {
+                               status = AE_OK;
+                               goto close_this_op;
+                       }
+               }
+
+             close_this_op:
+               /*
+                * Finished one argument of the containing scope
+                */
+               parser_state->scope->parse_scope.arg_count--;
+
+               /* Finished with pre_op */
+
+               if (pre_op) {
+                       acpi_ps_free_op(pre_op);
+                       pre_op = NULL;
+               }
+
+               /* Close this Op (will result in parse subtree deletion) */
+
+               status2 = acpi_ps_complete_this_op(walk_state, op);
+               if (ACPI_FAILURE(status2)) {
+                       return_ACPI_STATUS(status2);
+               }
+               op = NULL;
+
+               switch (status) {
+               case AE_OK:
+                       break;
+
+               case AE_CTRL_TRANSFER:
+
+                       /* We are about to transfer to a called method. */
+
+                       walk_state->prev_op = op;
+                       walk_state->prev_arg_types = walk_state->arg_types;
+                       return_ACPI_STATUS(status);
+
+               case AE_CTRL_END:
+
+                       acpi_ps_pop_scope(parser_state, &op,
+                                         &walk_state->arg_types,
+                                         &walk_state->arg_count);
+
+                       if (op) {
+                               walk_state->op = op;
+                               walk_state->op_info =
+                                   acpi_ps_get_opcode_info(op->common.
+                                                           aml_opcode);
+                               walk_state->opcode = op->common.aml_opcode;
+
+                               status =
+                                   walk_state->ascending_callback(walk_state);
+                               status =
+                                   acpi_ps_next_parse_state(walk_state, op,
+                                                            status);
+
+                               status2 =
+                                   acpi_ps_complete_this_op(walk_state, op);
+                               if (ACPI_FAILURE(status2)) {
+                                       return_ACPI_STATUS(status2);
+                               }
+                               op = NULL;
+                       }
+                       status = AE_OK;
+                       break;
+
+               case AE_CTRL_BREAK:
+               case AE_CTRL_CONTINUE:
+
+                       /* Pop off scopes until we find the While */
+
+                       while (!op || (op->common.aml_opcode != AML_WHILE_OP)) {
+                               acpi_ps_pop_scope(parser_state, &op,
+                                                 &walk_state->arg_types,
+                                                 &walk_state->arg_count);
+                       }
+
+                       /* Close this iteration of the While loop */
+
+                       walk_state->op = op;
+                       walk_state->op_info =
+                           acpi_ps_get_opcode_info(op->common.aml_opcode);
+                       walk_state->opcode = op->common.aml_opcode;
+
+                       status = walk_state->ascending_callback(walk_state);
+                       status =
+                           acpi_ps_next_parse_state(walk_state, op, status);
+
+                       status2 = acpi_ps_complete_this_op(walk_state, op);
+                       if (ACPI_FAILURE(status2)) {
+                               return_ACPI_STATUS(status2);
+                       }
+                       op = NULL;
+
+                       status = AE_OK;
+                       break;
+
+               case AE_CTRL_TERMINATE:
+
+                       status = AE_OK;
+
+                       /* Clean up */
+                       do {
+                               if (op) {
+                                       status2 =
+                                           acpi_ps_complete_this_op(walk_state,
+                                                                    op);
+                                       if (ACPI_FAILURE(status2)) {
+                                               return_ACPI_STATUS(status2);
+                                       }
+                               }
+                               acpi_ps_pop_scope(parser_state, &op,
+                                                 &walk_state->arg_types,
+                                                 &walk_state->arg_count);
+
+                       } while (op);
+
+                       return_ACPI_STATUS(status);
+
+               default:        /* All other non-AE_OK status */
+
+                       do {
+                               if (op) {
+                                       status2 =
+                                           acpi_ps_complete_this_op(walk_state,
+                                                                    op);
+                                       if (ACPI_FAILURE(status2)) {
+                                               return_ACPI_STATUS(status2);
+                                       }
+                               }
+                               acpi_ps_pop_scope(parser_state, &op,
+                                                 &walk_state->arg_types,
+                                                 &walk_state->arg_count);
+
+                       } while (op);
+
+                       /*
+                        * TBD: Cleanup parse ops on error
+                        */
+#if 0
+                       if (op == NULL) {
+                               acpi_ps_pop_scope(parser_state, &op,
+                                                 &walk_state->arg_types,
+                                                 &walk_state->arg_count);
+                       }
+#endif
+                       walk_state->prev_op = op;
+                       walk_state->prev_arg_types = walk_state->arg_types;
+                       return_ACPI_STATUS(status);
+               }
+
+               /* This scope complete? */
+
+               if (acpi_ps_has_completed_scope(parser_state)) {
+                       acpi_ps_pop_scope(parser_state, &op,
+                                         &walk_state->arg_types,
+                                         &walk_state->arg_count);
+                       ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                                         "Popped scope, Op=%p\n", op));
+               } else {
+                       op = NULL;
+               }
+
+       }                       /* while parser_state->Aml */
+
+       /*
+        * Complete the last Op (if not completed), and clear the scope stack.
+        * It is easily possible to end an AML "package" with an unbounded number
+        * of open scopes (such as when several ASL blocks are closed with
+        * sequential closing braces).  We want to terminate each one cleanly.
+        */
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "AML package complete at Op %p\n",
+                         op));
+       do {
+               if (op) {
+                       if (walk_state->ascending_callback != NULL) {
+                               walk_state->op = op;
+                               walk_state->op_info =
+                                   acpi_ps_get_opcode_info(op->common.
+                                                           aml_opcode);
+                               walk_state->opcode = op->common.aml_opcode;
+
+                               status =
+                                   walk_state->ascending_callback(walk_state);
+                               status =
+                                   acpi_ps_next_parse_state(walk_state, op,
+                                                            status);
+                               if (status == AE_CTRL_PENDING) {
+                                       status = AE_OK;
+                                       goto close_this_op;
+                               }
+
+                               if (status == AE_CTRL_TERMINATE) {
+                                       status = AE_OK;
+
+                                       /* Clean up */
+                                       do {
+                                               if (op) {
+                                                       status2 =
+                                                           acpi_ps_complete_this_op
+                                                           (walk_state, op);
+                                                       if (ACPI_FAILURE
+                                                           (status2)) {
+                                                               return_ACPI_STATUS
+                                                                   (status2);
+                                                       }
+                                               }
+
+                                               acpi_ps_pop_scope(parser_state,
+                                                                 &op,
+                                                                 &walk_state->
+                                                                 arg_types,
+                                                                 &walk_state->
+                                                                 arg_count);
+
+                                       } while (op);
+
+                                       return_ACPI_STATUS(status);
+                               }
+
+                               else if (ACPI_FAILURE(status)) {
+                                       /* First error is most important */
+
+                                       (void)
+                                           acpi_ps_complete_this_op(walk_state,
+                                                                    op);
+                                       return_ACPI_STATUS(status);
+                               }
+                       }
+
+                       status2 = acpi_ps_complete_this_op(walk_state, op);
+                       if (ACPI_FAILURE(status2)) {
+                               return_ACPI_STATUS(status2);
+                       }
+               }
+
+               acpi_ps_pop_scope(parser_state, &op, &walk_state->arg_types,
+                                 &walk_state->arg_count);
+
+       } while (op);
+
+       return_ACPI_STATUS(status);
+}
index 5744673568c0a3bbc8100de14179dea48d785be1..229ae86afe8beb8cd7150f8b1518ec54d8e663c4 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/acopcode.h>
 #include <acpi/amlcode.h>
 
-
 #define _COMPONENT          ACPI_PARSER
-        ACPI_MODULE_NAME    ("psopcode")
-
+ACPI_MODULE_NAME("psopcode")
 
 /*******************************************************************************
  *
@@ -62,7 +59,6 @@
  *              the operand type.
  *
  ******************************************************************************/
-
 /*
  * Summary of opcode types/flags
  *
        AML_CREATE_QWORD_FIELD_OP
 
  ******************************************************************************/
-
-
 /*
  * Master Opcode information table.  A summary of everything we know about each
  * opcode, all in one place.
  */
-const struct acpi_opcode_info     acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
-{
+const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = {
 /*! [Begin] no source code translation */
 /* Index           Name                 Parser Args               Interpreter Args                ObjectType                    Class                      Type                  Flags */
 
-/* 00 */ ACPI_OP ("Zero",               ARGP_ZERO_OP,              ARGI_ZERO_OP,               ACPI_TYPE_INTEGER,           AML_CLASS_ARGUMENT,        AML_TYPE_CONSTANT,        AML_CONSTANT),
-/* 01 */ ACPI_OP ("One",                ARGP_ONE_OP,               ARGI_ONE_OP,                ACPI_TYPE_INTEGER,           AML_CLASS_ARGUMENT,        AML_TYPE_CONSTANT,        AML_CONSTANT),
-/* 02 */ ACPI_OP ("Alias",              ARGP_ALIAS_OP,             ARGI_ALIAS_OP,              ACPI_TYPE_LOCAL_ALIAS,       AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_SIMPLE,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
-/* 03 */ ACPI_OP ("Name",               ARGP_NAME_OP,              ARGI_NAME_OP,               ACPI_TYPE_ANY,               AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_COMPLEX,   AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
-/* 04 */ ACPI_OP ("ByteConst",          ARGP_BYTE_OP,              ARGI_BYTE_OP,               ACPI_TYPE_INTEGER,           AML_CLASS_ARGUMENT,        AML_TYPE_LITERAL,         AML_CONSTANT),
-/* 05 */ ACPI_OP ("WordConst",          ARGP_WORD_OP,              ARGI_WORD_OP,               ACPI_TYPE_INTEGER,           AML_CLASS_ARGUMENT,        AML_TYPE_LITERAL,         AML_CONSTANT),
-/* 06 */ ACPI_OP ("DwordConst",         ARGP_DWORD_OP,             ARGI_DWORD_OP,              ACPI_TYPE_INTEGER,           AML_CLASS_ARGUMENT,        AML_TYPE_LITERAL,         AML_CONSTANT),
-/* 07 */ ACPI_OP ("String",             ARGP_STRING_OP,            ARGI_STRING_OP,             ACPI_TYPE_STRING,            AML_CLASS_ARGUMENT,        AML_TYPE_LITERAL,         AML_CONSTANT),
-/* 08 */ ACPI_OP ("Scope",              ARGP_SCOPE_OP,             ARGI_SCOPE_OP,              ACPI_TYPE_LOCAL_SCOPE,       AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_NO_OBJ,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
-/* 09 */ ACPI_OP ("Buffer",             ARGP_BUFFER_OP,            ARGI_BUFFER_OP,             ACPI_TYPE_BUFFER,            AML_CLASS_CREATE,          AML_TYPE_CREATE_OBJECT,   AML_HAS_ARGS | AML_DEFER | AML_CONSTANT),
-/* 0A */ ACPI_OP ("Package",            ARGP_PACKAGE_OP,           ARGI_PACKAGE_OP,            ACPI_TYPE_PACKAGE,           AML_CLASS_CREATE,          AML_TYPE_CREATE_OBJECT,   AML_HAS_ARGS | AML_DEFER | AML_CONSTANT),
-/* 0B */ ACPI_OP ("Method",             ARGP_METHOD_OP,            ARGI_METHOD_OP,             ACPI_TYPE_METHOD,            AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_COMPLEX,   AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
-/* 0C */ ACPI_OP ("Local0",             ARGP_LOCAL0,               ARGI_LOCAL0,                ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_LOCAL_VARIABLE,  0),
-/* 0D */ ACPI_OP ("Local1",             ARGP_LOCAL1,               ARGI_LOCAL1,                ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_LOCAL_VARIABLE,  0),
-/* 0E */ ACPI_OP ("Local2",             ARGP_LOCAL2,               ARGI_LOCAL2,                ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_LOCAL_VARIABLE,  0),
-/* 0F */ ACPI_OP ("Local3",             ARGP_LOCAL3,               ARGI_LOCAL3,                ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_LOCAL_VARIABLE,  0),
-/* 10 */ ACPI_OP ("Local4",             ARGP_LOCAL4,               ARGI_LOCAL4,                ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_LOCAL_VARIABLE,  0),
-/* 11 */ ACPI_OP ("Local5",             ARGP_LOCAL5,               ARGI_LOCAL5,                ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_LOCAL_VARIABLE,  0),
-/* 12 */ ACPI_OP ("Local6",             ARGP_LOCAL6,               ARGI_LOCAL6,                ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_LOCAL_VARIABLE,  0),
-/* 13 */ ACPI_OP ("Local7",             ARGP_LOCAL7,               ARGI_LOCAL7,                ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_LOCAL_VARIABLE,  0),
-/* 14 */ ACPI_OP ("Arg0",               ARGP_ARG0,                 ARGI_ARG0,                  ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_METHOD_ARGUMENT, 0),
-/* 15 */ ACPI_OP ("Arg1",               ARGP_ARG1,                 ARGI_ARG1,                  ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_METHOD_ARGUMENT, 0),
-/* 16 */ ACPI_OP ("Arg2",               ARGP_ARG2,                 ARGI_ARG2,                  ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_METHOD_ARGUMENT, 0),
-/* 17 */ ACPI_OP ("Arg3",               ARGP_ARG3,                 ARGI_ARG3,                  ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_METHOD_ARGUMENT, 0),
-/* 18 */ ACPI_OP ("Arg4",               ARGP_ARG4,                 ARGI_ARG4,                  ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_METHOD_ARGUMENT, 0),
-/* 19 */ ACPI_OP ("Arg5",               ARGP_ARG5,                 ARGI_ARG5,                  ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_METHOD_ARGUMENT, 0),
-/* 1A */ ACPI_OP ("Arg6",               ARGP_ARG6,                 ARGI_ARG6,                  ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_METHOD_ARGUMENT, 0),
-/* 1B */ ACPI_OP ("Store",              ARGP_STORE_OP,             ARGI_STORE_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R),
-/* 1C */ ACPI_OP ("RefOf",              ARGP_REF_OF_OP,            ARGI_REF_OF_OP,             ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_1R,   AML_FLAGS_EXEC_1A_0T_1R),
-/* 1D */ ACPI_OP ("Add",                ARGP_ADD_OP,               ARGI_ADD_OP,                ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
-/* 1E */ ACPI_OP ("Concatenate",        ARGP_CONCAT_OP,            ARGI_CONCAT_OP,             ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
-/* 1F */ ACPI_OP ("Subtract",           ARGP_SUBTRACT_OP,          ARGI_SUBTRACT_OP,           ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
-/* 20 */ ACPI_OP ("Increment",          ARGP_INCREMENT_OP,         ARGI_INCREMENT_OP,          ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_1R,   AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
-/* 21 */ ACPI_OP ("Decrement",          ARGP_DECREMENT_OP,         ARGI_DECREMENT_OP,          ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_1R,   AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
-/* 22 */ ACPI_OP ("Multiply",           ARGP_MULTIPLY_OP,          ARGI_MULTIPLY_OP,           ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
-/* 23 */ ACPI_OP ("Divide",             ARGP_DIVIDE_OP,            ARGI_DIVIDE_OP,             ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_2T_1R,   AML_FLAGS_EXEC_2A_2T_1R | AML_CONSTANT),
-/* 24 */ ACPI_OP ("ShiftLeft",          ARGP_SHIFT_LEFT_OP,        ARGI_SHIFT_LEFT_OP,         ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
-/* 25 */ ACPI_OP ("ShiftRight",         ARGP_SHIFT_RIGHT_OP,       ARGI_SHIFT_RIGHT_OP,        ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
-/* 26 */ ACPI_OP ("And",                ARGP_BIT_AND_OP,           ARGI_BIT_AND_OP,            ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
-/* 27 */ ACPI_OP ("NAnd",               ARGP_BIT_NAND_OP,          ARGI_BIT_NAND_OP,           ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
-/* 28 */ ACPI_OP ("Or",                 ARGP_BIT_OR_OP,            ARGI_BIT_OR_OP,             ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
-/* 29 */ ACPI_OP ("NOr",                ARGP_BIT_NOR_OP,           ARGI_BIT_NOR_OP,            ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
-/* 2A */ ACPI_OP ("XOr",                ARGP_BIT_XOR_OP,           ARGI_BIT_XOR_OP,            ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
-/* 2B */ ACPI_OP ("Not",                ARGP_BIT_NOT_OP,           ARGI_BIT_NOT_OP,            ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
-/* 2C */ ACPI_OP ("FindSetLeftBit",     ARGP_FIND_SET_LEFT_BIT_OP, ARGI_FIND_SET_LEFT_BIT_OP,  ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
-/* 2D */ ACPI_OP ("FindSetRightBit",    ARGP_FIND_SET_RIGHT_BIT_OP,ARGI_FIND_SET_RIGHT_BIT_OP, ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
-/* 2E */ ACPI_OP ("DerefOf",            ARGP_DEREF_OF_OP,          ARGI_DEREF_OF_OP,           ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_1R,   AML_FLAGS_EXEC_1A_0T_1R),
-/* 2F */ ACPI_OP ("Notify",             ARGP_NOTIFY_OP,            ARGI_NOTIFY_OP,             ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_0T_0R,   AML_FLAGS_EXEC_2A_0T_0R),
-/* 30 */ ACPI_OP ("SizeOf",             ARGP_SIZE_OF_OP,           ARGI_SIZE_OF_OP,            ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_1R,   AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE),
-/* 31 */ ACPI_OP ("Index",              ARGP_INDEX_OP,             ARGI_INDEX_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R),
-/* 32 */ ACPI_OP ("Match",              ARGP_MATCH_OP,             ARGI_MATCH_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_6A_0T_1R,   AML_FLAGS_EXEC_6A_0T_1R | AML_CONSTANT),
-/* 33 */ ACPI_OP ("CreateDWordField",   ARGP_CREATE_DWORD_FIELD_OP,ARGI_CREATE_DWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD,      AML_CLASS_CREATE,          AML_TYPE_CREATE_FIELD,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
-/* 34 */ ACPI_OP ("CreateWordField",    ARGP_CREATE_WORD_FIELD_OP, ARGI_CREATE_WORD_FIELD_OP,  ACPI_TYPE_BUFFER_FIELD,      AML_CLASS_CREATE,          AML_TYPE_CREATE_FIELD,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
-/* 35 */ ACPI_OP ("CreateByteField",    ARGP_CREATE_BYTE_FIELD_OP, ARGI_CREATE_BYTE_FIELD_OP,  ACPI_TYPE_BUFFER_FIELD,      AML_CLASS_CREATE,          AML_TYPE_CREATE_FIELD,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
-/* 36 */ ACPI_OP ("CreateBitField",     ARGP_CREATE_BIT_FIELD_OP,  ARGI_CREATE_BIT_FIELD_OP,   ACPI_TYPE_BUFFER_FIELD,      AML_CLASS_CREATE,          AML_TYPE_CREATE_FIELD,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
-/* 37 */ ACPI_OP ("ObjectType",         ARGP_TYPE_OP,              ARGI_TYPE_OP,               ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_1R,   AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE),
-/* 38 */ ACPI_OP ("LAnd",               ARGP_LAND_OP,              ARGI_LAND_OP,               ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_0T_1R,   AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | AML_CONSTANT),
-/* 39 */ ACPI_OP ("LOr",                ARGP_LOR_OP,               ARGI_LOR_OP,                ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_0T_1R,   AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | AML_CONSTANT),
-/* 3A */ ACPI_OP ("LNot",               ARGP_LNOT_OP,              ARGI_LNOT_OP,               ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_1R,   AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
-/* 3B */ ACPI_OP ("LEqual",             ARGP_LEQUAL_OP,            ARGI_LEQUAL_OP,             ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_0T_1R,   AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
-/* 3C */ ACPI_OP ("LGreater",           ARGP_LGREATER_OP,          ARGI_LGREATER_OP,           ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_0T_1R,   AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
-/* 3D */ ACPI_OP ("LLess",              ARGP_LLESS_OP,             ARGI_LLESS_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_0T_1R,   AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
-/* 3E */ ACPI_OP ("If",                 ARGP_IF_OP,                ARGI_IF_OP,                 ACPI_TYPE_ANY,               AML_CLASS_CONTROL,         AML_TYPE_CONTROL,         AML_HAS_ARGS),
-/* 3F */ ACPI_OP ("Else",               ARGP_ELSE_OP,              ARGI_ELSE_OP,               ACPI_TYPE_ANY,               AML_CLASS_CONTROL,         AML_TYPE_CONTROL,         AML_HAS_ARGS),
-/* 40 */ ACPI_OP ("While",              ARGP_WHILE_OP,             ARGI_WHILE_OP,              ACPI_TYPE_ANY,               AML_CLASS_CONTROL,         AML_TYPE_CONTROL,         AML_HAS_ARGS),
-/* 41 */ ACPI_OP ("Noop",               ARGP_NOOP_OP,              ARGI_NOOP_OP,               ACPI_TYPE_ANY,               AML_CLASS_CONTROL,         AML_TYPE_CONTROL,         0),
-/* 42 */ ACPI_OP ("Return",             ARGP_RETURN_OP,            ARGI_RETURN_OP,             ACPI_TYPE_ANY,               AML_CLASS_CONTROL,         AML_TYPE_CONTROL,         AML_HAS_ARGS),
-/* 43 */ ACPI_OP ("Break",              ARGP_BREAK_OP,             ARGI_BREAK_OP,              ACPI_TYPE_ANY,               AML_CLASS_CONTROL,         AML_TYPE_CONTROL,         0),
-/* 44 */ ACPI_OP ("BreakPoint",         ARGP_BREAK_POINT_OP,       ARGI_BREAK_POINT_OP,        ACPI_TYPE_ANY,               AML_CLASS_CONTROL,         AML_TYPE_CONTROL,         0),
-/* 45 */ ACPI_OP ("Ones",               ARGP_ONES_OP,              ARGI_ONES_OP,               ACPI_TYPE_INTEGER,           AML_CLASS_ARGUMENT,        AML_TYPE_CONSTANT,        AML_CONSTANT),
+/* 00 */ ACPI_OP("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, ACPI_TYPE_INTEGER,
+                        AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT),
+/* 01 */ ACPI_OP("One", ARGP_ONE_OP, ARGI_ONE_OP, ACPI_TYPE_INTEGER,
+                        AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT),
+/* 02 */ ACPI_OP("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP,
+                        ACPI_TYPE_LOCAL_ALIAS, AML_CLASS_NAMED_OBJECT,
+                        AML_TYPE_NAMED_SIMPLE,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED),
+/* 03 */ ACPI_OP("Name", ARGP_NAME_OP, ARGI_NAME_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED),
+/* 04 */ ACPI_OP("ByteConst", ARGP_BYTE_OP, ARGI_BYTE_OP,
+                        ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LITERAL, AML_CONSTANT),
+/* 05 */ ACPI_OP("WordConst", ARGP_WORD_OP, ARGI_WORD_OP,
+                        ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LITERAL, AML_CONSTANT),
+/* 06 */ ACPI_OP("DwordConst", ARGP_DWORD_OP, ARGI_DWORD_OP,
+                        ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LITERAL, AML_CONSTANT),
+/* 07 */ ACPI_OP("String", ARGP_STRING_OP, ARGI_STRING_OP,
+                        ACPI_TYPE_STRING, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LITERAL, AML_CONSTANT),
+/* 08 */ ACPI_OP("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP,
+                        ACPI_TYPE_LOCAL_SCOPE, AML_CLASS_NAMED_OBJECT,
+                        AML_TYPE_NAMED_NO_OBJ,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED),
+/* 09 */ ACPI_OP("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP,
+                        ACPI_TYPE_BUFFER, AML_CLASS_CREATE,
+                        AML_TYPE_CREATE_OBJECT,
+                        AML_HAS_ARGS | AML_DEFER | AML_CONSTANT),
+/* 0A */ ACPI_OP("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP,
+                        ACPI_TYPE_PACKAGE, AML_CLASS_CREATE,
+                        AML_TYPE_CREATE_OBJECT,
+                        AML_HAS_ARGS | AML_DEFER | AML_CONSTANT),
+/* 0B */ ACPI_OP("Method", ARGP_METHOD_OP, ARGI_METHOD_OP,
+                        ACPI_TYPE_METHOD, AML_CLASS_NAMED_OBJECT,
+                        AML_TYPE_NAMED_COMPLEX,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED | AML_DEFER),
+/* 0C */ ACPI_OP("Local0", ARGP_LOCAL0, ARGI_LOCAL0,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LOCAL_VARIABLE, 0),
+/* 0D */ ACPI_OP("Local1", ARGP_LOCAL1, ARGI_LOCAL1,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LOCAL_VARIABLE, 0),
+/* 0E */ ACPI_OP("Local2", ARGP_LOCAL2, ARGI_LOCAL2,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LOCAL_VARIABLE, 0),
+/* 0F */ ACPI_OP("Local3", ARGP_LOCAL3, ARGI_LOCAL3,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LOCAL_VARIABLE, 0),
+/* 10 */ ACPI_OP("Local4", ARGP_LOCAL4, ARGI_LOCAL4,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LOCAL_VARIABLE, 0),
+/* 11 */ ACPI_OP("Local5", ARGP_LOCAL5, ARGI_LOCAL5,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LOCAL_VARIABLE, 0),
+/* 12 */ ACPI_OP("Local6", ARGP_LOCAL6, ARGI_LOCAL6,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LOCAL_VARIABLE, 0),
+/* 13 */ ACPI_OP("Local7", ARGP_LOCAL7, ARGI_LOCAL7,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LOCAL_VARIABLE, 0),
+/* 14 */ ACPI_OP("Arg0", ARGP_ARG0, ARGI_ARG0,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_METHOD_ARGUMENT, 0),
+/* 15 */ ACPI_OP("Arg1", ARGP_ARG1, ARGI_ARG1,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_METHOD_ARGUMENT, 0),
+/* 16 */ ACPI_OP("Arg2", ARGP_ARG2, ARGI_ARG2,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_METHOD_ARGUMENT, 0),
+/* 17 */ ACPI_OP("Arg3", ARGP_ARG3, ARGI_ARG3,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_METHOD_ARGUMENT, 0),
+/* 18 */ ACPI_OP("Arg4", ARGP_ARG4, ARGI_ARG4,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_METHOD_ARGUMENT, 0),
+/* 19 */ ACPI_OP("Arg5", ARGP_ARG5, ARGI_ARG5,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_METHOD_ARGUMENT, 0),
+/* 1A */ ACPI_OP("Arg6", ARGP_ARG6, ARGI_ARG6,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_METHOD_ARGUMENT, 0),
+/* 1B */ ACPI_OP("Store", ARGP_STORE_OP, ARGI_STORE_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
+                        AML_FLAGS_EXEC_1A_1T_1R),
+/* 1C */ ACPI_OP("RefOf", ARGP_REF_OF_OP, ARGI_REF_OF_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R,
+                        AML_FLAGS_EXEC_1A_0T_1R),
+/* 1D */ ACPI_OP("Add", ARGP_ADD_OP, ARGI_ADD_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
+/* 1E */ ACPI_OP("Concatenate", ARGP_CONCAT_OP, ARGI_CONCAT_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
+/* 1F */ ACPI_OP("Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
+/* 20 */ ACPI_OP("Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_0T_1R,
+                        AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
+/* 21 */ ACPI_OP("Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_0T_1R,
+                        AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
+/* 22 */ ACPI_OP("Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
+/* 23 */ ACPI_OP("Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_2T_1R,
+                        AML_FLAGS_EXEC_2A_2T_1R | AML_CONSTANT),
+/* 24 */ ACPI_OP("ShiftLeft", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
+/* 25 */ ACPI_OP("ShiftRight", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
+/* 26 */ ACPI_OP("And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
+/* 27 */ ACPI_OP("NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
+/* 28 */ ACPI_OP("Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
+/* 29 */ ACPI_OP("NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
+/* 2A */ ACPI_OP("XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT),
+/* 2B */ ACPI_OP("Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
+                        AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
+/* 2C */ ACPI_OP("FindSetLeftBit", ARGP_FIND_SET_LEFT_BIT_OP,
+                        ARGI_FIND_SET_LEFT_BIT_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
+                        AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
+/* 2D */ ACPI_OP("FindSetRightBit", ARGP_FIND_SET_RIGHT_BIT_OP,
+                        ARGI_FIND_SET_RIGHT_BIT_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
+                        AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
+/* 2E */ ACPI_OP("DerefOf", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R),
+/* 2F */ ACPI_OP("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_0T_0R, AML_FLAGS_EXEC_2A_0T_0R),
+/* 30 */ ACPI_OP("SizeOf", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_0T_1R,
+                        AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE),
+/* 31 */ ACPI_OP("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R),
+/* 32 */ ACPI_OP("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R,
+                        AML_FLAGS_EXEC_6A_0T_1R | AML_CONSTANT),
+/* 33 */ ACPI_OP("CreateDWordField", ARGP_CREATE_DWORD_FIELD_OP,
+                        ARGI_CREATE_DWORD_FIELD_OP,
+                        ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE,
+                        AML_TYPE_CREATE_FIELD,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
+                        AML_DEFER | AML_CREATE),
+/* 34 */ ACPI_OP("CreateWordField", ARGP_CREATE_WORD_FIELD_OP,
+                        ARGI_CREATE_WORD_FIELD_OP,
+                        ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE,
+                        AML_TYPE_CREATE_FIELD,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
+                        AML_DEFER | AML_CREATE),
+/* 35 */ ACPI_OP("CreateByteField", ARGP_CREATE_BYTE_FIELD_OP,
+                        ARGI_CREATE_BYTE_FIELD_OP,
+                        ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE,
+                        AML_TYPE_CREATE_FIELD,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
+                        AML_DEFER | AML_CREATE),
+/* 36 */ ACPI_OP("CreateBitField", ARGP_CREATE_BIT_FIELD_OP,
+                        ARGI_CREATE_BIT_FIELD_OP,
+                        ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE,
+                        AML_TYPE_CREATE_FIELD,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
+                        AML_DEFER | AML_CREATE),
+/* 37 */ ACPI_OP("ObjectType", ARGP_TYPE_OP, ARGI_TYPE_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_0T_1R,
+                        AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE),
+/* 38 */ ACPI_OP("LAnd", ARGP_LAND_OP, ARGI_LAND_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R,
+                        AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC |
+                        AML_CONSTANT),
+/* 39 */ ACPI_OP("LOr", ARGP_LOR_OP, ARGI_LOR_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R,
+                        AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC |
+                        AML_CONSTANT),
+/* 3A */ ACPI_OP("LNot", ARGP_LNOT_OP, ARGI_LNOT_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R,
+                        AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT),
+/* 3B */ ACPI_OP("LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_0T_1R,
+                        AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
+/* 3C */ ACPI_OP("LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_0T_1R,
+                        AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
+/* 3D */ ACPI_OP("LLess", ARGP_LLESS_OP, ARGI_LLESS_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R,
+                        AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT),
+/* 3E */ ACPI_OP("If", ARGP_IF_OP, ARGI_IF_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
+/* 3F */ ACPI_OP("Else", ARGP_ELSE_OP, ARGI_ELSE_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
+/* 40 */ ACPI_OP("While", ARGP_WHILE_OP, ARGI_WHILE_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS),
+/* 41 */ ACPI_OP("Noop", ARGP_NOOP_OP, ARGI_NOOP_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
+/* 42 */ ACPI_OP("Return", ARGP_RETURN_OP, ARGI_RETURN_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_CONTROL,
+                        AML_TYPE_CONTROL, AML_HAS_ARGS),
+/* 43 */ ACPI_OP("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
+/* 44 */ ACPI_OP("BreakPoint", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
+/* 45 */ ACPI_OP("Ones", ARGP_ONES_OP, ARGI_ONES_OP, ACPI_TYPE_INTEGER,
+                        AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT),
 
 /* Prefixed opcodes (Two-byte opcodes with a prefix op) */
 
-/* 46 */ ACPI_OP ("Mutex",              ARGP_MUTEX_OP,             ARGI_MUTEX_OP,              ACPI_TYPE_MUTEX,             AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_SIMPLE,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
-/* 47 */ ACPI_OP ("Event",              ARGP_EVENT_OP,             ARGI_EVENT_OP,              ACPI_TYPE_EVENT,             AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_SIMPLE,    AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ),
-/* 48 */ ACPI_OP ("CondRefOf",          ARGP_COND_REF_OF_OP,       ARGI_COND_REF_OF_OP,        ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R),
-/* 49 */ ACPI_OP ("CreateField",        ARGP_CREATE_FIELD_OP,      ARGI_CREATE_FIELD_OP,       ACPI_TYPE_BUFFER_FIELD,      AML_CLASS_CREATE,          AML_TYPE_CREATE_FIELD,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_FIELD | AML_CREATE),
-/* 4A */ ACPI_OP ("Load",               ARGP_LOAD_OP,              ARGI_LOAD_OP,               ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_0R,   AML_FLAGS_EXEC_1A_1T_0R),
-/* 4B */ ACPI_OP ("Stall",              ARGP_STALL_OP,             ARGI_STALL_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_0R,   AML_FLAGS_EXEC_1A_0T_0R),
-/* 4C */ ACPI_OP ("Sleep",              ARGP_SLEEP_OP,             ARGI_SLEEP_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_0R,   AML_FLAGS_EXEC_1A_0T_0R),
-/* 4D */ ACPI_OP ("Acquire",            ARGP_ACQUIRE_OP,           ARGI_ACQUIRE_OP,            ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_0T_1R,   AML_FLAGS_EXEC_2A_0T_1R),
-/* 4E */ ACPI_OP ("Signal",             ARGP_SIGNAL_OP,            ARGI_SIGNAL_OP,             ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_0R,   AML_FLAGS_EXEC_1A_0T_0R),
-/* 4F */ ACPI_OP ("Wait",               ARGP_WAIT_OP,              ARGI_WAIT_OP,               ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_0T_1R,   AML_FLAGS_EXEC_2A_0T_1R),
-/* 50 */ ACPI_OP ("Reset",              ARGP_RESET_OP,             ARGI_RESET_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_0R,   AML_FLAGS_EXEC_1A_0T_0R),
-/* 51 */ ACPI_OP ("Release",            ARGP_RELEASE_OP,           ARGI_RELEASE_OP,            ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_0R,   AML_FLAGS_EXEC_1A_0T_0R),
-/* 52 */ ACPI_OP ("FromBCD",            ARGP_FROM_BCD_OP,          ARGI_FROM_BCD_OP,           ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
-/* 53 */ ACPI_OP ("ToBCD",              ARGP_TO_BCD_OP,            ARGI_TO_BCD_OP,             ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
-/* 54 */ ACPI_OP ("Unload",             ARGP_UNLOAD_OP,            ARGI_UNLOAD_OP,             ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_0T_0R,   AML_FLAGS_EXEC_1A_0T_0R),
-/* 55 */ ACPI_OP ("Revision",           ARGP_REVISION_OP,          ARGI_REVISION_OP,           ACPI_TYPE_INTEGER,           AML_CLASS_ARGUMENT,        AML_TYPE_CONSTANT,        0),
-/* 56 */ ACPI_OP ("Debug",              ARGP_DEBUG_OP,             ARGI_DEBUG_OP,              ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_CONSTANT,        0),
-/* 57 */ ACPI_OP ("Fatal",              ARGP_FATAL_OP,             ARGI_FATAL_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_3A_0T_0R,   AML_FLAGS_EXEC_3A_0T_0R),
-/* 58 */ ACPI_OP ("OperationRegion",    ARGP_REGION_OP,            ARGI_REGION_OP,             ACPI_TYPE_REGION,            AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_COMPLEX,   AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED | AML_DEFER),
-/* 59 */ ACPI_OP ("Field",              ARGP_FIELD_OP,             ARGI_FIELD_OP,              ACPI_TYPE_ANY,               AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_FIELD,     AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
-/* 5A */ ACPI_OP ("Device",             ARGP_DEVICE_OP,            ARGI_DEVICE_OP,             ACPI_TYPE_DEVICE,            AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_NO_OBJ,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
-/* 5B */ ACPI_OP ("Processor",          ARGP_PROCESSOR_OP,         ARGI_PROCESSOR_OP,          ACPI_TYPE_PROCESSOR,         AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_SIMPLE,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
-/* 5C */ ACPI_OP ("PowerResource",      ARGP_POWER_RES_OP,         ARGI_POWER_RES_OP,          ACPI_TYPE_POWER,             AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_SIMPLE,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
-/* 5D */ ACPI_OP ("ThermalZone",        ARGP_THERMAL_ZONE_OP,      ARGI_THERMAL_ZONE_OP,       ACPI_TYPE_THERMAL,           AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_NO_OBJ,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
-/* 5E */ ACPI_OP ("IndexField",         ARGP_INDEX_FIELD_OP,       ARGI_INDEX_FIELD_OP,        ACPI_TYPE_ANY,               AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_FIELD,     AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
-/* 5F */ ACPI_OP ("BankField",          ARGP_BANK_FIELD_OP,        ARGI_BANK_FIELD_OP,         ACPI_TYPE_ANY,               AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_FIELD,     AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_FIELD),
+/* 46 */ ACPI_OP("Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP, ACPI_TYPE_MUTEX,
+                        AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED),
+/* 47 */ ACPI_OP("Event", ARGP_EVENT_OP, ARGI_EVENT_OP, ACPI_TYPE_EVENT,
+                        AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE,
+                        AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
+/* 48 */ ACPI_OP("CondRefOf", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
+/* 49 */ ACPI_OP("CreateField", ARGP_CREATE_FIELD_OP,
+                        ARGI_CREATE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD,
+                        AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
+                        AML_DEFER | AML_FIELD | AML_CREATE),
+/* 4A */ ACPI_OP("Load", ARGP_LOAD_OP, ARGI_LOAD_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_0R,
+                        AML_FLAGS_EXEC_1A_1T_0R),
+/* 4B */ ACPI_OP("Stall", ARGP_STALL_OP, ARGI_STALL_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R,
+                        AML_FLAGS_EXEC_1A_0T_0R),
+/* 4C */ ACPI_OP("Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R,
+                        AML_FLAGS_EXEC_1A_0T_0R),
+/* 4D */ ACPI_OP("Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R),
+/* 4E */ ACPI_OP("Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
+/* 4F */ ACPI_OP("Wait", ARGP_WAIT_OP, ARGI_WAIT_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R,
+                        AML_FLAGS_EXEC_2A_0T_1R),
+/* 50 */ ACPI_OP("Reset", ARGP_RESET_OP, ARGI_RESET_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R,
+                        AML_FLAGS_EXEC_1A_0T_0R),
+/* 51 */ ACPI_OP("Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
+/* 52 */ ACPI_OP("FromBCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_1T_1R,
+                        AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
+/* 53 */ ACPI_OP("ToBCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
+                        AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
+/* 54 */ ACPI_OP("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R),
+/* 55 */ ACPI_OP("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP,
+                        ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT,
+                        AML_TYPE_CONSTANT, 0),
+/* 56 */ ACPI_OP("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_CONSTANT, 0),
+/* 57 */ ACPI_OP("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_0T_0R,
+                        AML_FLAGS_EXEC_3A_0T_0R),
+/* 58 */ ACPI_OP("OperationRegion", ARGP_REGION_OP, ARGI_REGION_OP,
+                        ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT,
+                        AML_TYPE_NAMED_COMPLEX,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED | AML_DEFER),
+/* 59 */ ACPI_OP("Field", ARGP_FIELD_OP, ARGI_FIELD_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_FIELD),
+/* 5A */ ACPI_OP("Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP,
+                        ACPI_TYPE_DEVICE, AML_CLASS_NAMED_OBJECT,
+                        AML_TYPE_NAMED_NO_OBJ,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED),
+/* 5B */ ACPI_OP("Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP,
+                        ACPI_TYPE_PROCESSOR, AML_CLASS_NAMED_OBJECT,
+                        AML_TYPE_NAMED_SIMPLE,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED),
+/* 5C */ ACPI_OP("PowerResource", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP,
+                        ACPI_TYPE_POWER, AML_CLASS_NAMED_OBJECT,
+                        AML_TYPE_NAMED_SIMPLE,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED),
+/* 5D */ ACPI_OP("ThermalZone", ARGP_THERMAL_ZONE_OP,
+                        ARGI_THERMAL_ZONE_OP, ACPI_TYPE_THERMAL,
+                        AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED),
+/* 5E */ ACPI_OP("IndexField", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT,
+                        AML_TYPE_NAMED_FIELD,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_FIELD),
+/* 5F */ ACPI_OP("BankField", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT,
+                        AML_TYPE_NAMED_FIELD,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_FIELD),
 
 /* Internal opcodes that map to invalid AML opcodes */
 
-/* 60 */ ACPI_OP ("LNotEqual",          ARGP_LNOTEQUAL_OP,         ARGI_LNOTEQUAL_OP,          ACPI_TYPE_ANY,               AML_CLASS_INTERNAL,        AML_TYPE_BOGUS,           AML_HAS_ARGS | AML_CONSTANT),
-/* 61 */ ACPI_OP ("LLessEqual",         ARGP_LLESSEQUAL_OP,        ARGI_LLESSEQUAL_OP,         ACPI_TYPE_ANY,               AML_CLASS_INTERNAL,        AML_TYPE_BOGUS,           AML_HAS_ARGS | AML_CONSTANT),
-/* 62 */ ACPI_OP ("LGreaterEqual",      ARGP_LGREATEREQUAL_OP,     ARGI_LGREATEREQUAL_OP,      ACPI_TYPE_ANY,               AML_CLASS_INTERNAL,        AML_TYPE_BOGUS,           AML_HAS_ARGS | AML_CONSTANT),
-/* 63 */ ACPI_OP ("-NamePath-",         ARGP_NAMEPATH_OP,          ARGI_NAMEPATH_OP,           ACPI_TYPE_LOCAL_REFERENCE,   AML_CLASS_ARGUMENT,        AML_TYPE_LITERAL,         AML_NSOBJECT | AML_NSNODE ),
-/* 64 */ ACPI_OP ("-MethodCall-",       ARGP_METHODCALL_OP,        ARGI_METHODCALL_OP,         ACPI_TYPE_METHOD,            AML_CLASS_METHOD_CALL,     AML_TYPE_METHOD_CALL,     AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE),
-/* 65 */ ACPI_OP ("-ByteList-",         ARGP_BYTELIST_OP,          ARGI_BYTELIST_OP,           ACPI_TYPE_ANY,               AML_CLASS_ARGUMENT,        AML_TYPE_LITERAL,         0),
-/* 66 */ ACPI_OP ("-ReservedField-",    ARGP_RESERVEDFIELD_OP,     ARGI_RESERVEDFIELD_OP,      ACPI_TYPE_ANY,               AML_CLASS_INTERNAL,        AML_TYPE_BOGUS,           0),
-/* 67 */ ACPI_OP ("-NamedField-",       ARGP_NAMEDFIELD_OP,        ARGI_NAMEDFIELD_OP,         ACPI_TYPE_ANY,               AML_CLASS_INTERNAL,        AML_TYPE_BOGUS,           AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED ),
-/* 68 */ ACPI_OP ("-AccessField-",      ARGP_ACCESSFIELD_OP,       ARGI_ACCESSFIELD_OP,        ACPI_TYPE_ANY,               AML_CLASS_INTERNAL,        AML_TYPE_BOGUS,           0),
-/* 69 */ ACPI_OP ("-StaticString",      ARGP_STATICSTRING_OP,      ARGI_STATICSTRING_OP,       ACPI_TYPE_ANY,               AML_CLASS_INTERNAL,        AML_TYPE_BOGUS,           0),
-/* 6A */ ACPI_OP ("-Return Value-",     ARG_NONE,                  ARG_NONE,                   ACPI_TYPE_ANY,               AML_CLASS_RETURN_VALUE,    AML_TYPE_RETURN,          AML_HAS_ARGS | AML_HAS_RETVAL),
-/* 6B */ ACPI_OP ("-UNKNOWN_OP-",       ARG_NONE,                  ARG_NONE,                   ACPI_TYPE_INVALID,           AML_CLASS_UNKNOWN,         AML_TYPE_BOGUS,           AML_HAS_ARGS),
-/* 6C */ ACPI_OP ("-ASCII_ONLY-",       ARG_NONE,                  ARG_NONE,                   ACPI_TYPE_ANY,               AML_CLASS_ASCII,           AML_TYPE_BOGUS,           AML_HAS_ARGS),
-/* 6D */ ACPI_OP ("-PREFIX_ONLY-",      ARG_NONE,                  ARG_NONE,                   ACPI_TYPE_ANY,               AML_CLASS_PREFIX,          AML_TYPE_BOGUS,           AML_HAS_ARGS),
+/* 60 */ ACPI_OP("LNotEqual", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_INTERNAL,
+                        AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT),
+/* 61 */ ACPI_OP("LLessEqual", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_INTERNAL,
+                        AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT),
+/* 62 */ ACPI_OP("LGreaterEqual", ARGP_LGREATEREQUAL_OP,
+                        ARGI_LGREATEREQUAL_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_INTERNAL, AML_TYPE_BOGUS,
+                        AML_HAS_ARGS | AML_CONSTANT),
+/* 63 */ ACPI_OP("-NamePath-", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP,
+                        ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE),
+/* 64 */ ACPI_OP("-MethodCall-", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP,
+                        ACPI_TYPE_METHOD, AML_CLASS_METHOD_CALL,
+                        AML_TYPE_METHOD_CALL,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE),
+/* 65 */ ACPI_OP("-ByteList-", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LITERAL, 0),
+/* 66 */ ACPI_OP("-ReservedField-", ARGP_RESERVEDFIELD_OP,
+                        ARGI_RESERVEDFIELD_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
+/* 67 */ ACPI_OP("-NamedField-", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_INTERNAL,
+                        AML_TYPE_BOGUS,
+                        AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
+/* 68 */ ACPI_OP("-AccessField-", ARGP_ACCESSFIELD_OP,
+                        ARGI_ACCESSFIELD_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
+/* 69 */ ACPI_OP("-StaticString", ARGP_STATICSTRING_OP,
+                        ARGI_STATICSTRING_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0),
+/* 6A */ ACPI_OP("-Return Value-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY,
+                        AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN,
+                        AML_HAS_ARGS | AML_HAS_RETVAL),
+/* 6B */ ACPI_OP("-UNKNOWN_OP-", ARG_NONE, ARG_NONE, ACPI_TYPE_INVALID,
+                        AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS),
+/* 6C */ ACPI_OP("-ASCII_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY,
+                        AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS),
+/* 6D */ ACPI_OP("-PREFIX_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY,
+                        AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS),
 
 /* ACPI 2.0 opcodes */
 
-/* 6E */ ACPI_OP ("QwordConst",         ARGP_QWORD_OP,             ARGI_QWORD_OP,              ACPI_TYPE_INTEGER,           AML_CLASS_ARGUMENT,        AML_TYPE_LITERAL,         AML_CONSTANT),
-/* 6F */ ACPI_OP ("Package /*Var*/",    ARGP_VAR_PACKAGE_OP,       ARGI_VAR_PACKAGE_OP,        ACPI_TYPE_PACKAGE,           AML_CLASS_CREATE,          AML_TYPE_CREATE_OBJECT,   AML_HAS_ARGS | AML_DEFER),
-/* 70 */ ACPI_OP ("ConcatenateResTemplate", ARGP_CONCAT_RES_OP,    ARGI_CONCAT_RES_OP,         ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
-/* 71 */ ACPI_OP ("Mod",                ARGP_MOD_OP,               ARGI_MOD_OP,                ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
-/* 72 */ ACPI_OP ("CreateQWordField",   ARGP_CREATE_QWORD_FIELD_OP,ARGI_CREATE_QWORD_FIELD_OP, ACPI_TYPE_BUFFER_FIELD,      AML_CLASS_CREATE,          AML_TYPE_CREATE_FIELD,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | AML_DEFER | AML_CREATE),
-/* 73 */ ACPI_OP ("ToBuffer",           ARGP_TO_BUFFER_OP,         ARGI_TO_BUFFER_OP,          ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
-/* 74 */ ACPI_OP ("ToDecimalString",    ARGP_TO_DEC_STR_OP,        ARGI_TO_DEC_STR_OP,         ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
-/* 75 */ ACPI_OP ("ToHexString",        ARGP_TO_HEX_STR_OP,        ARGI_TO_HEX_STR_OP,         ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
-/* 76 */ ACPI_OP ("ToInteger",          ARGP_TO_INTEGER_OP,        ARGI_TO_INTEGER_OP,         ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
-/* 77 */ ACPI_OP ("ToString",           ARGP_TO_STRING_OP,         ARGI_TO_STRING_OP,          ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_2A_1T_1R,   AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
-/* 78 */ ACPI_OP ("CopyObject",         ARGP_COPY_OP,              ARGI_COPY_OP,               ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_1A_1T_1R,   AML_FLAGS_EXEC_1A_1T_1R),
-/* 79 */ ACPI_OP ("Mid",                ARGP_MID_OP,               ARGI_MID_OP,                ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_3A_1T_1R,   AML_FLAGS_EXEC_3A_1T_1R | AML_CONSTANT),
-/* 7A */ ACPI_OP ("Continue",           ARGP_CONTINUE_OP,          ARGI_CONTINUE_OP,           ACPI_TYPE_ANY,               AML_CLASS_CONTROL,         AML_TYPE_CONTROL,         0),
-/* 7B */ ACPI_OP ("LoadTable",          ARGP_LOAD_TABLE_OP,        ARGI_LOAD_TABLE_OP,         ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_6A_0T_1R,   AML_FLAGS_EXEC_6A_0T_1R),
-/* 7C */ ACPI_OP ("DataTableRegion",    ARGP_DATA_REGION_OP,       ARGI_DATA_REGION_OP,        ACPI_TYPE_REGION,            AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_SIMPLE,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
-/* 7D */ ACPI_OP ("[EvalSubTree]",      ARGP_SCOPE_OP,             ARGI_SCOPE_OP,              ACPI_TYPE_ANY,               AML_CLASS_NAMED_OBJECT,    AML_TYPE_NAMED_NO_OBJ,    AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE),
+/* 6E */ ACPI_OP("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP,
+                        ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT,
+                        AML_TYPE_LITERAL, AML_CONSTANT),
+       /* 6F */ ACPI_OP("Package", /* Var */ ARGP_VAR_PACKAGE_OP,
+                        ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE,
+                        AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT,
+                        AML_HAS_ARGS | AML_DEFER),
+/* 70 */ ACPI_OP("ConcatenateResTemplate", ARGP_CONCAT_RES_OP,
+                        ARGI_CONCAT_RES_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
+/* 71 */ ACPI_OP("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
+/* 72 */ ACPI_OP("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP,
+                        ARGI_CREATE_QWORD_FIELD_OP,
+                        ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE,
+                        AML_TYPE_CREATE_FIELD,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE |
+                        AML_DEFER | AML_CREATE),
+/* 73 */ ACPI_OP("ToBuffer", ARGP_TO_BUFFER_OP, ARGI_TO_BUFFER_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_1T_1R,
+                        AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
+/* 74 */ ACPI_OP("ToDecimalString", ARGP_TO_DEC_STR_OP,
+                        ARGI_TO_DEC_STR_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R,
+                        AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
+/* 75 */ ACPI_OP("ToHexString", ARGP_TO_HEX_STR_OP, ARGI_TO_HEX_STR_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_1T_1R,
+                        AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
+/* 76 */ ACPI_OP("ToInteger", ARGP_TO_INTEGER_OP, ARGI_TO_INTEGER_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_1T_1R,
+                        AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT),
+/* 77 */ ACPI_OP("ToString", ARGP_TO_STRING_OP, ARGI_TO_STRING_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_2A_1T_1R,
+                        AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT),
+/* 78 */ ACPI_OP("CopyObject", ARGP_COPY_OP, ARGI_COPY_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R),
+/* 79 */ ACPI_OP("Mid", ARGP_MID_OP, ARGI_MID_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_1T_1R,
+                        AML_FLAGS_EXEC_3A_1T_1R | AML_CONSTANT),
+/* 7A */ ACPI_OP("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0),
+/* 7B */ ACPI_OP("LoadTable", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_EXECUTE,
+                        AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R),
+/* 7C */ ACPI_OP("DataTableRegion", ARGP_DATA_REGION_OP,
+                        ARGI_DATA_REGION_OP, ACPI_TYPE_REGION,
+                        AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE | AML_NAMED),
+/* 7D */ ACPI_OP("[EvalSubTree]", ARGP_SCOPE_OP, ARGI_SCOPE_OP,
+                        ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT,
+                        AML_TYPE_NAMED_NO_OBJ,
+                        AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE |
+                        AML_NSNODE),
 
 /* ACPI 3.0 opcodes */
 
-/* 7E */ ACPI_OP ("Timer",              ARGP_TIMER_OP,             ARGI_TIMER_OP,              ACPI_TYPE_ANY,               AML_CLASS_EXECUTE,         AML_TYPE_EXEC_0A_0T_1R,   AML_FLAGS_EXEC_0A_0T_1R)
+/* 7E */ ACPI_OP("Timer", ARGP_TIMER_OP, ARGI_TIMER_OP, ACPI_TYPE_ANY,
+                        AML_CLASS_EXECUTE, AML_TYPE_EXEC_0A_0T_1R,
+                        AML_FLAGS_EXEC_0A_0T_1R)
 
 /*! [End] no source code translation !*/
 };
@@ -338,73 +646,70 @@ const struct acpi_opcode_info     acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
  * This table is directly indexed by the opcodes, and returns an
  * index into the table above
  */
-static const u8 acpi_gbl_short_op_index[256] =
-{
+static const u8 acpi_gbl_short_op_index[256] = {
 /*              0     1     2     3     4     5     6     7  */
 /*              8     9     A     B     C     D     E     F  */
-/* 0x00 */     0x00, 0x01, _UNK, _UNK, _UNK, _UNK, 0x02, _UNK,
-/* 0x08 */     0x03, _UNK, 0x04, 0x05, 0x06, 0x07, 0x6E, _UNK,
-/* 0x10 */     0x08, 0x09, 0x0a, 0x6F, 0x0b, _UNK, _UNK, _UNK,
-/* 0x18 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x20 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x28 */     _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX,
-/* 0x30 */     0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, 0x7D,
-/* 0x38 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x40 */     _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
-/* 0x48 */     _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
-/* 0x50 */     _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
-/* 0x58 */     _ASC, _ASC, _ASC, _UNK, _PFX, _UNK, _PFX, _ASC,
-/* 0x60 */     0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
-/* 0x68 */     0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, _UNK,
-/* 0x70 */     0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
-/* 0x78 */     0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a,
-/* 0x80 */     0x2b, 0x2c, 0x2d, 0x2e, 0x70, 0x71, 0x2f, 0x30,
-/* 0x88 */     0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x72,
-/* 0x90 */     0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x73, 0x74,
-/* 0x98 */     0x75, 0x76, _UNK, _UNK, 0x77, 0x78, 0x79, 0x7A,
-/* 0xA0 */     0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x60, 0x61,
-/* 0xA8 */     0x62, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0xB0 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0xB8 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0xC0 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0xC8 */     _UNK, _UNK, _UNK, _UNK, 0x44, _UNK, _UNK, _UNK,
-/* 0xD0 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0xD8 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0xE0 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0xE8 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0xF0 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0xF8 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x45,
+/* 0x00 */ 0x00, 0x01, _UNK, _UNK, _UNK, _UNK, 0x02, _UNK,
+/* 0x08 */ 0x03, _UNK, 0x04, 0x05, 0x06, 0x07, 0x6E, _UNK,
+/* 0x10 */ 0x08, 0x09, 0x0a, 0x6F, 0x0b, _UNK, _UNK, _UNK,
+/* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x20 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x28 */ _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX,
+/* 0x30 */ 0x67, 0x66, 0x68, 0x65, 0x69, 0x64, 0x6A, 0x7D,
+/* 0x38 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x40 */ _UNK, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
+/* 0x48 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
+/* 0x50 */ _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC, _ASC,
+/* 0x58 */ _ASC, _ASC, _ASC, _UNK, _PFX, _UNK, _PFX, _ASC,
+/* 0x60 */ 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
+/* 0x68 */ 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, _UNK,
+/* 0x70 */ 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
+/* 0x78 */ 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a,
+/* 0x80 */ 0x2b, 0x2c, 0x2d, 0x2e, 0x70, 0x71, 0x2f, 0x30,
+/* 0x88 */ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x72,
+/* 0x90 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x73, 0x74,
+/* 0x98 */ 0x75, 0x76, _UNK, _UNK, 0x77, 0x78, 0x79, 0x7A,
+/* 0xA0 */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x60, 0x61,
+/* 0xA8 */ 0x62, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0xB0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0xB8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0xC0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0xC8 */ _UNK, _UNK, _UNK, _UNK, 0x44, _UNK, _UNK, _UNK,
+/* 0xD0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0xD8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0xE0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0xE8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0xF0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0xF8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x45,
 };
 
 /*
  * This table is indexed by the second opcode of the extended opcode
  * pair.  It returns an index into the opcode table (acpi_gbl_aml_op_info)
  */
-static const u8 acpi_gbl_long_op_index[NUM_EXTENDED_OPCODE] =
-{
+static const u8 acpi_gbl_long_op_index[NUM_EXTENDED_OPCODE] = {
 /*              0     1     2     3     4     5     6     7  */
 /*              8     9     A     B     C     D     E     F  */
-/* 0x00 */     _UNK, 0x46, 0x47, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x08 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x10 */     _UNK, _UNK, 0x48, 0x49, _UNK, _UNK, _UNK, _UNK,
-/* 0x18 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x7B,
-/* 0x20 */     0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51,
-/* 0x28 */     0x52, 0x53, 0x54, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x30 */     0x55, 0x56, 0x57, 0x7e, _UNK, _UNK, _UNK, _UNK,
-/* 0x38 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x40 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x48 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x50 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x58 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x60 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x68 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x70 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x78 */     _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
-/* 0x80 */     0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
-/* 0x88 */     0x7C,
+/* 0x00 */ _UNK, 0x46, 0x47, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x08 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x10 */ _UNK, _UNK, 0x48, 0x49, _UNK, _UNK, _UNK, _UNK,
+/* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0x7B,
+/* 0x20 */ 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51,
+/* 0x28 */ 0x52, 0x53, 0x54, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x30 */ 0x55, 0x56, 0x57, 0x7e, _UNK, _UNK, _UNK, _UNK,
+/* 0x38 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x40 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x48 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x50 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x58 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x60 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x68 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x70 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x78 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
+/* 0x80 */ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+/* 0x88 */ 0x7C,
 };
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_get_opcode_info
@@ -418,48 +723,36 @@ static const u8 acpi_gbl_long_op_index[NUM_EXTENDED_OPCODE] =
  *
  ******************************************************************************/
 
-const struct acpi_opcode_info *
-acpi_ps_get_opcode_info (
-       u16                             opcode)
+const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode)
 {
-       ACPI_FUNCTION_NAME ("ps_get_opcode_info");
-
+       ACPI_FUNCTION_NAME("ps_get_opcode_info");
 
        /*
         * Detect normal 8-bit opcode or extended 16-bit opcode
         */
-       switch ((u8) (opcode >> 8)) {
-       case 0:
-
+       if (!(opcode & 0xFF00)) {
                /* Simple (8-bit) opcode: 0-255, can't index beyond table  */
 
-               return (&acpi_gbl_aml_op_info [acpi_gbl_short_op_index [(u8) opcode]]);
-
-       case AML_EXTOP:
-
-               /* Extended (16-bit, prefix+opcode) opcode */
-
-               if (((u8) opcode) <= MAX_EXTENDED_OPCODE) {
-                       return (&acpi_gbl_aml_op_info [acpi_gbl_long_op_index [(u8) opcode]]);
-               }
-
-               /* Else fall through to error case below */
-               /*lint -fallthrough */
+               return (&acpi_gbl_aml_op_info
+                       [acpi_gbl_short_op_index[(u8) opcode]]);
+       }
 
-       default:
+       if (((opcode & 0xFF00) == AML_EXTENDED_OPCODE) &&
+           (((u8) opcode) <= MAX_EXTENDED_OPCODE)) {
+               /* Valid extended (16-bit) opcode */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Unknown AML opcode [%4.4X]\n", opcode));
-               break;
+               return (&acpi_gbl_aml_op_info
+                       [acpi_gbl_long_op_index[(u8) opcode]]);
        }
 
+       /* Unknown AML opcode */
 
-       /* Default is "unknown opcode" */
+       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                         "Unknown AML opcode [%4.4X]\n", opcode));
 
-       return (&acpi_gbl_aml_op_info [_UNK]);
+       return (&acpi_gbl_aml_op_info[_UNK]);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_get_opcode_name
@@ -473,16 +766,13 @@ acpi_ps_get_opcode_info (
  *
  ******************************************************************************/
 
-char *
-acpi_ps_get_opcode_name (
-       u16                             opcode)
+char *acpi_ps_get_opcode_name(u16 opcode)
 {
 #if defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
 
-       const struct acpi_opcode_info   *op;
+       const struct acpi_opcode_info *op;
 
-
-       op = acpi_ps_get_opcode_info (opcode);
+       op = acpi_ps_get_opcode_info(opcode);
 
        /* Always guaranteed to return a valid pointer */
 
@@ -493,4 +783,3 @@ acpi_ps_get_opcode_name (
 
 #endif
 }
-
index bbfdc1a58c27aeaca93bd97acb85a1ef46846515..76d4d640d83cdebaa7362742258b2daac841e2d9 100644 (file)
@@ -41,7 +41,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 /*
  * Parse the AML and build an operation tree as most interpreters,
  * like Perl, do.  Parsing is done by hand rather than with a YACC
 #include <acpi/acinterp.h>
 
 #define _COMPONENT          ACPI_PARSER
-        ACPI_MODULE_NAME    ("psparse")
-
-
-static u32                          acpi_gbl_depth = 0;
-
-/* Local prototypes */
-
-static void
-acpi_ps_complete_this_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op);
-
-static acpi_status
-acpi_ps_next_parse_state (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       acpi_status                     callback_status);
-
-static acpi_status
-acpi_ps_parse_loop (
-       struct acpi_walk_state          *walk_state);
-
+ACPI_MODULE_NAME("psparse")
 
 /*******************************************************************************
  *
@@ -93,10 +71,7 @@ acpi_ps_parse_loop (
  * DESCRIPTION: Get the size of the current opcode.
  *
  ******************************************************************************/
-
-u32
-acpi_ps_get_opcode_size (
-       u32                             opcode)
+u32 acpi_ps_get_opcode_size(u32 opcode)
 {
 
        /* Extended (2-byte) opcode if > 255 */
@@ -110,7 +85,6 @@ acpi_ps_get_opcode_size (
        return (1);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_peek_opcode
@@ -123,28 +97,24 @@ acpi_ps_get_opcode_size (
  *
  ******************************************************************************/
 
-u16
-acpi_ps_peek_opcode (
-       struct acpi_parse_state         *parser_state)
+u16 acpi_ps_peek_opcode(struct acpi_parse_state * parser_state)
 {
-       u8                              *aml;
-       u16                             opcode;
-
+       u8 *aml;
+       u16 opcode;
 
        aml = parser_state->aml;
-       opcode = (u16) ACPI_GET8 (aml);
+       opcode = (u16) ACPI_GET8(aml);
 
-       if (opcode == AML_EXTOP) {
-               /* Extended opcode */
+       if (opcode == AML_EXTENDED_OP_PREFIX) {
+               /* Extended opcode, get the second opcode byte */
 
                aml++;
-               opcode = (u16) ((opcode << 8) | ACPI_GET8 (aml));
+               opcode = (u16) ((opcode << 8) | ACPI_GET8(aml));
        }
 
        return (opcode);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_complete_this_op
@@ -152,47 +122,54 @@ acpi_ps_peek_opcode (
  * PARAMETERS:  walk_state      - Current State
  *              Op              - Op to complete
  *
- * RETURN:      None.
+ * RETURN:      Status
  *
  * DESCRIPTION: Perform any cleanup at the completion of an Op.
  *
  ******************************************************************************/
 
-static void
-acpi_ps_complete_this_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op)
+acpi_status
+acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
+                        union acpi_parse_object * op)
 {
-       union acpi_parse_object         *prev;
-       union acpi_parse_object         *next;
-       const struct acpi_opcode_info   *parent_info;
-       union acpi_parse_object         *replacement_op = NULL;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ps_complete_this_op", op);
+       union acpi_parse_object *prev;
+       union acpi_parse_object *next;
+       const struct acpi_opcode_info *parent_info;
+       union acpi_parse_object *replacement_op = NULL;
 
+       ACPI_FUNCTION_TRACE_PTR("ps_complete_this_op", op);
 
        /* Check for null Op, can happen if AML code is corrupt */
 
        if (!op) {
-               return_VOID;
+               return_ACPI_STATUS(AE_OK);      /* OK for now */
        }
 
        /* Delete this op and the subtree below it if asked to */
 
-       if (((walk_state->parse_flags & ACPI_PARSE_TREE_MASK) != ACPI_PARSE_DELETE_TREE) ||
-                (walk_state->op_info->class == AML_CLASS_ARGUMENT)) {
-               return_VOID;
+       if (((walk_state->parse_flags & ACPI_PARSE_TREE_MASK) !=
+            ACPI_PARSE_DELETE_TREE)
+           || (walk_state->op_info->class == AML_CLASS_ARGUMENT)) {
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Make sure that we only delete this subtree */
 
        if (op->common.parent) {
+               prev = op->common.parent->common.value.arg;
+               if (!prev) {
+                       /* Nothing more to do */
+
+                       goto cleanup;
+               }
+
                /*
                 * Check if we need to replace the operator and its subtree
                 * with a return value op (placeholder op)
                 */
-               parent_info = acpi_ps_get_opcode_info (op->common.parent->common.aml_opcode);
+               parent_info =
+                   acpi_ps_get_opcode_info(op->common.parent->common.
+                                           aml_opcode);
 
                switch (parent_info->class) {
                case AML_CLASS_CONTROL:
@@ -204,9 +181,10 @@ acpi_ps_complete_this_op (
                         * These opcodes contain term_arg operands. The current
                         * op must be replaced by a placeholder return op
                         */
-                       replacement_op = acpi_ps_alloc_op (AML_INT_RETURN_VALUE_OP);
+                       replacement_op =
+                           acpi_ps_alloc_op(AML_INT_RETURN_VALUE_OP);
                        if (!replacement_op) {
-                               goto cleanup;
+                               goto allocate_error;
                        }
                        break;
 
@@ -216,91 +194,117 @@ acpi_ps_complete_this_op (
                         * These opcodes contain term_arg operands. The current
                         * op must be replaced by a placeholder return op
                         */
-                       if ((op->common.parent->common.aml_opcode == AML_REGION_OP)      ||
-                               (op->common.parent->common.aml_opcode == AML_DATA_REGION_OP) ||
-                               (op->common.parent->common.aml_opcode == AML_BUFFER_OP)      ||
-                               (op->common.parent->common.aml_opcode == AML_PACKAGE_OP)     ||
-                               (op->common.parent->common.aml_opcode == AML_VAR_PACKAGE_OP)) {
-                               replacement_op = acpi_ps_alloc_op (AML_INT_RETURN_VALUE_OP);
+                       if ((op->common.parent->common.aml_opcode ==
+                            AML_REGION_OP)
+                           || (op->common.parent->common.aml_opcode ==
+                               AML_DATA_REGION_OP)
+                           || (op->common.parent->common.aml_opcode ==
+                               AML_BUFFER_OP)
+                           || (op->common.parent->common.aml_opcode ==
+                               AML_PACKAGE_OP)
+                           || (op->common.parent->common.aml_opcode ==
+                               AML_VAR_PACKAGE_OP)) {
+                               replacement_op =
+                                   acpi_ps_alloc_op(AML_INT_RETURN_VALUE_OP);
                                if (!replacement_op) {
-                                       goto cleanup;
+                                       goto allocate_error;
                                }
-                       }
-
-                       if ((op->common.parent->common.aml_opcode == AML_NAME_OP) &&
-                               (walk_state->descending_callback != acpi_ds_exec_begin_op)) {
-                               if ((op->common.aml_opcode == AML_BUFFER_OP) ||
-                                       (op->common.aml_opcode == AML_PACKAGE_OP) ||
-                                       (op->common.aml_opcode == AML_VAR_PACKAGE_OP)) {
-                                       replacement_op = acpi_ps_alloc_op (op->common.aml_opcode);
+                       } else
+                           if ((op->common.parent->common.aml_opcode ==
+                                AML_NAME_OP)
+                               && (walk_state->pass_number <=
+                                   ACPI_IMODE_LOAD_PASS2)) {
+                               if ((op->common.aml_opcode == AML_BUFFER_OP)
+                                   || (op->common.aml_opcode == AML_PACKAGE_OP)
+                                   || (op->common.aml_opcode ==
+                                       AML_VAR_PACKAGE_OP)) {
+                                       replacement_op =
+                                           acpi_ps_alloc_op(op->common.
+                                                            aml_opcode);
                                        if (!replacement_op) {
-                                               goto cleanup;
+                                               goto allocate_error;
                                        }
 
-                                       replacement_op->named.data = op->named.data;
-                                       replacement_op->named.length = op->named.length;
+                                       replacement_op->named.data =
+                                           op->named.data;
+                                       replacement_op->named.length =
+                                           op->named.length;
                                }
                        }
                        break;
 
                default:
-                       replacement_op = acpi_ps_alloc_op (AML_INT_RETURN_VALUE_OP);
+
+                       replacement_op =
+                           acpi_ps_alloc_op(AML_INT_RETURN_VALUE_OP);
                        if (!replacement_op) {
-                               goto cleanup;
+                               goto allocate_error;
                        }
                }
 
                /* We must unlink this op from the parent tree */
 
-               prev = op->common.parent->common.value.arg;
                if (prev == op) {
                        /* This op is the first in the list */
 
                        if (replacement_op) {
-                               replacement_op->common.parent       = op->common.parent;
-                               replacement_op->common.value.arg    = NULL;
-                               replacement_op->common.node         = op->common.node;
-                               op->common.parent->common.value.arg = replacement_op;
-                               replacement_op->common.next         = op->common.next;
-                       }
-                       else {
-                               op->common.parent->common.value.arg = op->common.next;
+                               replacement_op->common.parent =
+                                   op->common.parent;
+                               replacement_op->common.value.arg = NULL;
+                               replacement_op->common.node = op->common.node;
+                               op->common.parent->common.value.arg =
+                                   replacement_op;
+                               replacement_op->common.next = op->common.next;
+                       } else {
+                               op->common.parent->common.value.arg =
+                                   op->common.next;
                        }
                }
 
                /* Search the parent list */
 
-               else while (prev) {
-                       /* Traverse all siblings in the parent's argument list */
-
-                       next = prev->common.next;
-                       if (next == op) {
-                               if (replacement_op) {
-                                       replacement_op->common.parent   = op->common.parent;
-                                       replacement_op->common.value.arg = NULL;
-                                       replacement_op->common.node     = op->common.node;
-                                       prev->common.next               = replacement_op;
-                                       replacement_op->common.next     = op->common.next;
-                                       next = NULL;
-                               }
-                               else {
-                                       prev->common.next = op->common.next;
-                                       next = NULL;
+               else
+                       while (prev) {
+                               /* Traverse all siblings in the parent's argument list */
+
+                               next = prev->common.next;
+                               if (next == op) {
+                                       if (replacement_op) {
+                                               replacement_op->common.parent =
+                                                   op->common.parent;
+                                               replacement_op->common.value.
+                                                   arg = NULL;
+                                               replacement_op->common.node =
+                                                   op->common.node;
+                                               prev->common.next =
+                                                   replacement_op;
+                                               replacement_op->common.next =
+                                                   op->common.next;
+                                               next = NULL;
+                                       } else {
+                                               prev->common.next =
+                                                   op->common.next;
+                                               next = NULL;
+                                       }
                                }
+                               prev = next;
                        }
-                       prev = next;
-               }
        }
 
-
-cleanup:
+      cleanup:
 
        /* Now we can actually delete the subtree rooted at Op */
 
-       acpi_ps_delete_parse_tree (op);
-       return_VOID;
-}
+       acpi_ps_delete_parse_tree(op);
+       return_ACPI_STATUS(AE_OK);
 
+      allocate_error:
+
+       /* Always delete the subtree, even on error */
+
+       acpi_ps_delete_parse_tree(op);
+       return_ACPI_STATUS(AE_NO_MEMORY);
+}
 
 /*******************************************************************************
  *
@@ -317,18 +321,15 @@ cleanup:
  *
  ******************************************************************************/
 
-static acpi_status
-acpi_ps_next_parse_state (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       acpi_status                     callback_status)
+acpi_status
+acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
+                        union acpi_parse_object *op,
+                        acpi_status callback_status)
 {
-       struct acpi_parse_state         *parser_state = &walk_state->parser_state;
-       acpi_status                     status = AE_CTRL_PENDING;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ps_next_parse_state", op);
+       struct acpi_parse_state *parser_state = &walk_state->parser_state;
+       acpi_status status = AE_CTRL_PENDING;
 
+       ACPI_FUNCTION_TRACE_PTR("ps_next_parse_state", op);
 
        switch (callback_status) {
        case AE_CTRL_TERMINATE:
@@ -341,7 +342,6 @@ acpi_ps_next_parse_state (
                status = AE_CTRL_TERMINATE;
                break;
 
-
        case AE_CTRL_BREAK:
 
                parser_state->aml = walk_state->aml_last_while;
@@ -351,7 +351,6 @@ acpi_ps_next_parse_state (
 
        case AE_CTRL_CONTINUE:
 
-
                parser_state->aml = walk_state->aml_last_while;
                status = AE_CTRL_CONTINUE;
                break;
@@ -375,10 +374,9 @@ acpi_ps_next_parse_state (
                 * Predicate of an IF was true, and we are at the matching ELSE.
                 * Just close out this package
                 */
-               parser_state->aml = acpi_ps_get_next_package_end (parser_state);
+               parser_state->aml = acpi_ps_get_next_package_end(parser_state);
                break;
 
-
        case AE_CTRL_FALSE:
 
                /*
@@ -396,7 +394,6 @@ acpi_ps_next_parse_state (
                status = AE_CTRL_END;
                break;
 
-
        case AE_CTRL_TRANSFER:
 
                /* A method call (invocation) -- transfer control */
@@ -404,14 +401,15 @@ acpi_ps_next_parse_state (
                status = AE_CTRL_TRANSFER;
                walk_state->prev_op = op;
                walk_state->method_call_op = op;
-               walk_state->method_call_node = (op->common.value.arg)->common.node;
+               walk_state->method_call_node =
+                   (op->common.value.arg)->common.node;
 
                /* Will return value (if any) be used by the caller? */
 
-               walk_state->return_used = acpi_ds_is_result_used (op, walk_state);
+               walk_state->return_used =
+                   acpi_ds_is_result_used(op, walk_state);
                break;
 
-
        default:
 
                status = callback_status;
@@ -421,667 +419,9 @@ acpi_ps_next_parse_state (
                break;
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ps_parse_loop
- *
- * PARAMETERS:  walk_state          - Current state
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Parse AML (pointed to by the current parser state) and return
- *              a tree of ops.
- *
- ******************************************************************************/
-
-static acpi_status
-acpi_ps_parse_loop (
-       struct acpi_walk_state          *walk_state)
-{
-       acpi_status                     status = AE_OK;
-       union acpi_parse_object         *op = NULL;     /* current op */
-       union acpi_parse_object         *arg = NULL;
-       union acpi_parse_object         *pre_op = NULL;
-       struct acpi_parse_state         *parser_state;
-       u8                              *aml_op_start = NULL;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ps_parse_loop", walk_state);
-
-       if (walk_state->descending_callback == NULL) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
-       }
-
-       parser_state = &walk_state->parser_state;
-       walk_state->arg_types = 0;
-
-#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
-
-       if (walk_state->walk_type & ACPI_WALK_METHOD_RESTART) {
-               /* We are restarting a preempted control method */
-
-               if (acpi_ps_has_completed_scope (parser_state)) {
-                       /*
-                        * We must check if a predicate to an IF or WHILE statement
-                        * was just completed
-                        */
-                       if ((parser_state->scope->parse_scope.op) &&
-                          ((parser_state->scope->parse_scope.op->common.aml_opcode == AML_IF_OP) ||
-                               (parser_state->scope->parse_scope.op->common.aml_opcode == AML_WHILE_OP)) &&
-                               (walk_state->control_state) &&
-                               (walk_state->control_state->common.state ==
-                                       ACPI_CONTROL_PREDICATE_EXECUTING)) {
-                               /*
-                                * A predicate was just completed, get the value of the
-                                * predicate and branch based on that value
-                                */
-                               walk_state->op = NULL;
-                               status = acpi_ds_get_predicate_value (walk_state, ACPI_TO_POINTER (TRUE));
-                               if (ACPI_FAILURE (status) &&
-                                       ((status & AE_CODE_MASK) != AE_CODE_CONTROL)) {
-                                       if (status == AE_AML_NO_RETURN_VALUE) {
-                                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                                       "Invoked method did not return a value, %s\n",
-                                                       acpi_format_exception (status)));
-
-                                       }
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                               "get_predicate Failed, %s\n",
-                                               acpi_format_exception (status)));
-                                       return_ACPI_STATUS (status);
-                               }
-
-                               status = acpi_ps_next_parse_state (walk_state, op, status);
-                       }
-
-                       acpi_ps_pop_scope (parser_state, &op,
-                               &walk_state->arg_types, &walk_state->arg_count);
-                       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Popped scope, Op=%p\n", op));
-               }
-               else if (walk_state->prev_op) {
-                       /* We were in the middle of an op */
-
-                       op = walk_state->prev_op;
-                       walk_state->arg_types = walk_state->prev_arg_types;
-               }
-       }
-#endif
-
-       /* Iterative parsing loop, while there is more AML to process: */
-
-       while ((parser_state->aml < parser_state->aml_end) || (op)) {
-               aml_op_start = parser_state->aml;
-               if (!op) {
-                       /* Get the next opcode from the AML stream */
-
-                       walk_state->aml_offset = (u32) ACPI_PTR_DIFF (parser_state->aml,
-                                         parser_state->aml_start);
-                       walk_state->opcode   = acpi_ps_peek_opcode (parser_state);
-
-                       /*
-                        * First cut to determine what we have found:
-                        * 1) A valid AML opcode
-                        * 2) A name string
-                        * 3) An unknown/invalid opcode
-                        */
-                       walk_state->op_info = acpi_ps_get_opcode_info (walk_state->opcode);
-                       switch (walk_state->op_info->class) {
-                       case AML_CLASS_ASCII:
-                       case AML_CLASS_PREFIX:
-                               /*
-                                * Starts with a valid prefix or ASCII char, this is a name
-                                * string.  Convert the bare name string to a namepath.
-                                */
-                               walk_state->opcode = AML_INT_NAMEPATH_OP;
-                               walk_state->arg_types = ARGP_NAMESTRING;
-                               break;
-
-                       case AML_CLASS_UNKNOWN:
-
-                               /* The opcode is unrecognized.  Just skip unknown opcodes */
-
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Found unknown opcode %X at AML address %p offset %X, ignoring\n",
-                                       walk_state->opcode, parser_state->aml, walk_state->aml_offset));
-
-                               ACPI_DUMP_BUFFER (parser_state->aml, 128);
-
-                               /* Assume one-byte bad opcode */
-
-                               parser_state->aml++;
-                               continue;
-
-                       default:
-
-                               /* Found opcode info, this is a normal opcode */
-
-                               parser_state->aml += acpi_ps_get_opcode_size (walk_state->opcode);
-                               walk_state->arg_types = walk_state->op_info->parse_args;
-                               break;
-                       }
-
-                       /* Create Op structure and append to parent's argument list */
-
-                       if (walk_state->op_info->flags & AML_NAMED) {
-                               /* Allocate a new pre_op if necessary */
-
-                               if (!pre_op) {
-                                       pre_op = acpi_ps_alloc_op (walk_state->opcode);
-                                       if (!pre_op) {
-                                               status = AE_NO_MEMORY;
-                                               goto close_this_op;
-                                       }
-                               }
-
-                               pre_op->common.value.arg = NULL;
-                               pre_op->common.aml_opcode = walk_state->opcode;
-
-                               /*
-                                * Get and append arguments until we find the node that contains
-                                * the name (the type ARGP_NAME).
-                                */
-                               while (GET_CURRENT_ARG_TYPE (walk_state->arg_types) &&
-                                         (GET_CURRENT_ARG_TYPE (walk_state->arg_types) != ARGP_NAME)) {
-                                       status = acpi_ps_get_next_arg (walk_state, parser_state,
-                                                        GET_CURRENT_ARG_TYPE (walk_state->arg_types), &arg);
-                                       if (ACPI_FAILURE (status)) {
-                                               goto close_this_op;
-                                       }
-
-                                       acpi_ps_append_arg (pre_op, arg);
-                                       INCREMENT_ARG_LIST (walk_state->arg_types);
-                               }
-
-                               /*
-                                * Make sure that we found a NAME and didn't run out of
-                                * arguments
-                                */
-                               if (!GET_CURRENT_ARG_TYPE (walk_state->arg_types)) {
-                                       status = AE_AML_NO_OPERAND;
-                                       goto close_this_op;
-                               }
-
-                               /* We know that this arg is a name, move to next arg */
-
-                               INCREMENT_ARG_LIST (walk_state->arg_types);
-
-                               /*
-                                * Find the object.  This will either insert the object into
-                                * the namespace or simply look it up
-                                */
-                               walk_state->op = NULL;
-
-                               status = walk_state->descending_callback (walk_state, &op);
-                               if (ACPI_FAILURE (status)) {
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                               "During name lookup/catalog, %s\n",
-                                               acpi_format_exception (status)));
-                                       goto close_this_op;
-                               }
-
-                               if (!op) {
-                                       continue;
-                               }
-
-                               status = acpi_ps_next_parse_state (walk_state, op, status);
-                               if (status == AE_CTRL_PENDING) {
-                                       status = AE_OK;
-                                       goto close_this_op;
-                               }
-
-                               if (ACPI_FAILURE (status)) {
-                                       goto close_this_op;
-                               }
-
-                               acpi_ps_append_arg (op, pre_op->common.value.arg);
-                               acpi_gbl_depth++;
-
-                               if (op->common.aml_opcode == AML_REGION_OP) {
-                                       /*
-                                        * Defer final parsing of an operation_region body,
-                                        * because we don't have enough info in the first pass
-                                        * to parse it correctly (i.e., there may be method
-                                        * calls within the term_arg elements of the body.)
-                                        *
-                                        * However, we must continue parsing because
-                                        * the opregion is not a standalone package --
-                                        * we don't know where the end is at this point.
-                                        *
-                                        * (Length is unknown until parse of the body complete)
-                                        */
-                                       op->named.data    = aml_op_start;
-                                       op->named.length  = 0;
-                               }
-                       }
-                       else {
-                               /* Not a named opcode, just allocate Op and append to parent */
-
-                               walk_state->op_info = acpi_ps_get_opcode_info (walk_state->opcode);
-                               op = acpi_ps_alloc_op (walk_state->opcode);
-                               if (!op) {
-                                       status = AE_NO_MEMORY;
-                                       goto close_this_op;
-                               }
-
-                               if (walk_state->op_info->flags & AML_CREATE) {
-                                       /*
-                                        * Backup to beginning of create_xXXfield declaration
-                                        * body_length is unknown until we parse the body
-                                        */
-                                       op->named.data    = aml_op_start;
-                                       op->named.length  = 0;
-                               }
-
-                               acpi_ps_append_arg (acpi_ps_get_parent_scope (parser_state), op);
-
-                               if ((walk_state->descending_callback != NULL)) {
-                                       /*
-                                        * Find the object. This will either insert the object into
-                                        * the namespace or simply look it up
-                                        */
-                                       walk_state->op = op;
-
-                                       status = walk_state->descending_callback (walk_state, &op);
-                                       status = acpi_ps_next_parse_state (walk_state, op, status);
-                                       if (status == AE_CTRL_PENDING) {
-                                               status = AE_OK;
-                                               goto close_this_op;
-                                       }
-
-                                       if (ACPI_FAILURE (status)) {
-                                               goto close_this_op;
-                                       }
-                               }
-                       }
-
-                       op->common.aml_offset = walk_state->aml_offset;
-
-                       if (walk_state->op_info) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
-                                       "Opcode %4.4X [%s] Op %p Aml %p aml_offset %5.5X\n",
-                                        (u32) op->common.aml_opcode, walk_state->op_info->name,
-                                        op, parser_state->aml, op->common.aml_offset));
-                       }
-               }
-
-
-               /*
-                * Start arg_count at zero because we don't know if there are
-                * any args yet
-                */
-               walk_state->arg_count = 0;
-
-               /* Are there any arguments that must be processed? */
-
-               if (walk_state->arg_types) {
-                       /* Get arguments */
-
-                       switch (op->common.aml_opcode) {
-                       case AML_BYTE_OP:       /* AML_BYTEDATA_ARG */
-                       case AML_WORD_OP:       /* AML_WORDDATA_ARG */
-                       case AML_DWORD_OP:      /* AML_DWORDATA_ARG */
-                       case AML_QWORD_OP:      /* AML_QWORDATA_ARG */
-                       case AML_STRING_OP:     /* AML_ASCIICHARLIST_ARG */
-
-                               /* Fill in constant or string argument directly */
-
-                               acpi_ps_get_next_simple_arg (parser_state,
-                                       GET_CURRENT_ARG_TYPE (walk_state->arg_types), op);
-                               break;
-
-                       case AML_INT_NAMEPATH_OP:   /* AML_NAMESTRING_ARG */
-
-                               status = acpi_ps_get_next_namepath (walk_state, parser_state, op, 1);
-                               if (ACPI_FAILURE (status)) {
-                                       goto close_this_op;
-                               }
-
-                               walk_state->arg_types = 0;
-                               break;
-
-                       default:
-
-                               /*
-                                * Op is not a constant or string, append each argument
-                                * to the Op
-                                */
-                               while (GET_CURRENT_ARG_TYPE (walk_state->arg_types) &&
-                                               !walk_state->arg_count) {
-                                       walk_state->aml_offset = (u32)
-                                               ACPI_PTR_DIFF (parser_state->aml, parser_state->aml_start);
-
-                                       status = acpi_ps_get_next_arg (walk_state, parser_state,
-                                                        GET_CURRENT_ARG_TYPE (walk_state->arg_types),
-                                                        &arg);
-                                       if (ACPI_FAILURE (status)) {
-                                               goto close_this_op;
-                                       }
-
-                                       if (arg) {
-                                               arg->common.aml_offset = walk_state->aml_offset;
-                                               acpi_ps_append_arg (op, arg);
-                                       }
-                                       INCREMENT_ARG_LIST (walk_state->arg_types);
-                               }
-
-                               /* Special processing for certain opcodes */
-
-                               switch (op->common.aml_opcode) {
-                               case AML_METHOD_OP:
-
-                                       /*
-                                        * Skip parsing of control method
-                                        * because we don't have enough info in the first pass
-                                        * to parse it correctly.
-                                        *
-                                        * Save the length and address of the body
-                                        */
-                                       op->named.data   = parser_state->aml;
-                                       op->named.length = (u32) (parser_state->pkg_end -
-                                                          parser_state->aml);
-
-                                       /* Skip body of method */
-
-                                       parser_state->aml   = parser_state->pkg_end;
-                                       walk_state->arg_count = 0;
-                                       break;
-
-                               case AML_BUFFER_OP:
-                               case AML_PACKAGE_OP:
-                               case AML_VAR_PACKAGE_OP:
-
-                                       if ((op->common.parent) &&
-                                               (op->common.parent->common.aml_opcode == AML_NAME_OP) &&
-                                               (walk_state->descending_callback != acpi_ds_exec_begin_op)) {
-                                               /*
-                                                * Skip parsing of Buffers and Packages
-                                                * because we don't have enough info in the first pass
-                                                * to parse them correctly.
-                                                */
-                                               op->named.data   = aml_op_start;
-                                               op->named.length = (u32) (parser_state->pkg_end -
-                                                                  aml_op_start);
-
-                                               /* Skip body */
-
-                                               parser_state->aml   = parser_state->pkg_end;
-                                               walk_state->arg_count = 0;
-                                       }
-                                       break;
-
-                               case AML_WHILE_OP:
-
-                                       if (walk_state->control_state) {
-                                               walk_state->control_state->control.package_end =
-                                                       parser_state->pkg_end;
-                                       }
-                                       break;
-
-                               default:
-
-                                       /* No action for all other opcodes */
-                                       break;
-                               }
-                               break;
-                       }
-               }
-
-               /* Check for arguments that need to be processed */
-
-               if (walk_state->arg_count) {
-                       /*
-                        * There are arguments (complex ones), push Op and
-                        * prepare for argument
-                        */
-                       status = acpi_ps_push_scope (parser_state, op,
-                                        walk_state->arg_types, walk_state->arg_count);
-                       if (ACPI_FAILURE (status)) {
-                               goto close_this_op;
-                       }
-                       op = NULL;
-                       continue;
-               }
-
-               /*
-                * All arguments have been processed -- Op is complete,
-                * prepare for next
-                */
-               walk_state->op_info = acpi_ps_get_opcode_info (op->common.aml_opcode);
-               if (walk_state->op_info->flags & AML_NAMED) {
-                       if (acpi_gbl_depth) {
-                               acpi_gbl_depth--;
-                       }
-
-                       if (op->common.aml_opcode == AML_REGION_OP) {
-                               /*
-                                * Skip parsing of control method or opregion body,
-                                * because we don't have enough info in the first pass
-                                * to parse them correctly.
-                                *
-                                * Completed parsing an op_region declaration, we now
-                                * know the length.
-                                */
-                               op->named.length = (u32) (parser_state->aml - op->named.data);
-                       }
-               }
-
-               if (walk_state->op_info->flags & AML_CREATE) {
-                       /*
-                        * Backup to beginning of create_xXXfield declaration (1 for
-                        * Opcode)
-                        *
-                        * body_length is unknown until we parse the body
-                        */
-                       op->named.length = (u32) (parser_state->aml - op->named.data);
-               }
-
-               /* This op complete, notify the dispatcher */
-
-               if (walk_state->ascending_callback != NULL) {
-                       walk_state->op    = op;
-                       walk_state->opcode = op->common.aml_opcode;
-
-                       status = walk_state->ascending_callback (walk_state);
-                       status = acpi_ps_next_parse_state (walk_state, op, status);
-                       if (status == AE_CTRL_PENDING) {
-                               status = AE_OK;
-                               goto close_this_op;
-                       }
-               }
-
-
-close_this_op:
-               /*
-                * Finished one argument of the containing scope
-                */
-               parser_state->scope->parse_scope.arg_count--;
-
-               /* Close this Op (will result in parse subtree deletion) */
-
-               acpi_ps_complete_this_op (walk_state, op);
-               op = NULL;
-               if (pre_op) {
-                       acpi_ps_free_op (pre_op);
-                       pre_op = NULL;
-               }
-
-               switch (status) {
-               case AE_OK:
-                       break;
-
-
-               case AE_CTRL_TRANSFER:
-
-                       /* We are about to transfer to a called method. */
-
-                       walk_state->prev_op = op;
-                       walk_state->prev_arg_types = walk_state->arg_types;
-                       return_ACPI_STATUS (status);
-
-
-               case AE_CTRL_END:
-
-                       acpi_ps_pop_scope (parser_state, &op,
-                               &walk_state->arg_types, &walk_state->arg_count);
-
-                       if (op) {
-                               walk_state->op    = op;
-                               walk_state->op_info = acpi_ps_get_opcode_info (op->common.aml_opcode);
-                               walk_state->opcode = op->common.aml_opcode;
-
-                               status = walk_state->ascending_callback (walk_state);
-                               status = acpi_ps_next_parse_state (walk_state, op, status);
-
-                               acpi_ps_complete_this_op (walk_state, op);
-                               op = NULL;
-                       }
-                       status = AE_OK;
-                       break;
-
-
-               case AE_CTRL_BREAK:
-               case AE_CTRL_CONTINUE:
-
-                       /* Pop off scopes until we find the While */
-
-                       while (!op || (op->common.aml_opcode != AML_WHILE_OP)) {
-                               acpi_ps_pop_scope (parser_state, &op,
-                                       &walk_state->arg_types, &walk_state->arg_count);
-                       }
-
-                       /* Close this iteration of the While loop */
-
-                       walk_state->op    = op;
-                       walk_state->op_info = acpi_ps_get_opcode_info (op->common.aml_opcode);
-                       walk_state->opcode = op->common.aml_opcode;
-
-                       status = walk_state->ascending_callback (walk_state);
-                       status = acpi_ps_next_parse_state (walk_state, op, status);
-
-                       acpi_ps_complete_this_op (walk_state, op);
-                       op = NULL;
-
-                       status = AE_OK;
-                       break;
-
-
-               case AE_CTRL_TERMINATE:
-
-                       status = AE_OK;
-
-                       /* Clean up */
-                       do {
-                               if (op) {
-                                       acpi_ps_complete_this_op (walk_state, op);
-                               }
-                               acpi_ps_pop_scope (parser_state, &op,
-                                       &walk_state->arg_types, &walk_state->arg_count);
-
-                       } while (op);
-
-                       return_ACPI_STATUS (status);
-
-
-               default:  /* All other non-AE_OK status */
-
-                       do {
-                               if (op) {
-                                       acpi_ps_complete_this_op (walk_state, op);
-                               }
-                               acpi_ps_pop_scope (parser_state, &op,
-                                       &walk_state->arg_types, &walk_state->arg_count);
-
-                       } while (op);
-
-
-                       /*
-                        * TBD: Cleanup parse ops on error
-                        */
-#if 0
-                       if (op == NULL) {
-                               acpi_ps_pop_scope (parser_state, &op,
-                                       &walk_state->arg_types, &walk_state->arg_count);
-                       }
-#endif
-                       walk_state->prev_op = op;
-                       walk_state->prev_arg_types = walk_state->arg_types;
-                       return_ACPI_STATUS (status);
-               }
-
-               /* This scope complete? */
-
-               if (acpi_ps_has_completed_scope (parser_state)) {
-                       acpi_ps_pop_scope (parser_state, &op,
-                               &walk_state->arg_types, &walk_state->arg_count);
-                       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Popped scope, Op=%p\n", op));
-               }
-               else {
-                       op = NULL;
-               }
-
-       } /* while parser_state->Aml */
-
-
-       /*
-        * Complete the last Op (if not completed), and clear the scope stack.
-        * It is easily possible to end an AML "package" with an unbounded number
-        * of open scopes (such as when several ASL blocks are closed with
-        * sequential closing braces).  We want to terminate each one cleanly.
-        */
-       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "AML package complete at Op %p\n", op));
-       do {
-               if (op) {
-                       if (walk_state->ascending_callback != NULL) {
-                               walk_state->op    = op;
-                               walk_state->op_info = acpi_ps_get_opcode_info (op->common.aml_opcode);
-                               walk_state->opcode = op->common.aml_opcode;
-
-                               status = walk_state->ascending_callback (walk_state);
-                               status = acpi_ps_next_parse_state (walk_state, op, status);
-                               if (status == AE_CTRL_PENDING) {
-                                       status = AE_OK;
-                                       goto close_this_op;
-                               }
-
-                               if (status == AE_CTRL_TERMINATE) {
-                                       status = AE_OK;
-
-                                       /* Clean up */
-                                       do {
-                                               if (op) {
-                                                       acpi_ps_complete_this_op (walk_state, op);
-                                               }
-
-                                               acpi_ps_pop_scope (parser_state, &op,
-                                                       &walk_state->arg_types, &walk_state->arg_count);
-
-                                       } while (op);
-
-                                       return_ACPI_STATUS (status);
-                               }
-
-                               else if (ACPI_FAILURE (status)) {
-                                       acpi_ps_complete_this_op (walk_state, op);
-                                       return_ACPI_STATUS (status);
-                               }
-                       }
-
-                       acpi_ps_complete_this_op (walk_state, op);
-               }
-
-               acpi_ps_pop_scope (parser_state, &op, &walk_state->arg_types,
-                       &walk_state->arg_count);
-
-       } while (op);
-
-       return_ACPI_STATUS (status);
-}
-
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_parse_aml
@@ -1095,34 +435,29 @@ close_this_op:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ps_parse_aml (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status;
-       acpi_status                     terminate_status;
-       struct acpi_thread_state        *thread;
-       struct acpi_thread_state        *prev_walk_list = acpi_gbl_current_walk_list;
-       struct acpi_walk_state          *previous_walk_state;
+       acpi_status status;
+       struct acpi_thread_state *thread;
+       struct acpi_thread_state *prev_walk_list = acpi_gbl_current_walk_list;
+       struct acpi_walk_state *previous_walk_state;
 
+       ACPI_FUNCTION_TRACE("ps_parse_aml");
 
-       ACPI_FUNCTION_TRACE ("ps_parse_aml");
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
-               "Entered with walk_state=%p Aml=%p size=%X\n",
-               walk_state, walk_state->parser_state.aml,
-               walk_state->parser_state.aml_size));
-
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                         "Entered with walk_state=%p Aml=%p size=%X\n",
+                         walk_state, walk_state->parser_state.aml,
+                         walk_state->parser_state.aml_size));
 
        /* Create and initialize a new thread state */
 
-       thread = acpi_ut_create_thread_state ();
+       thread = acpi_ut_create_thread_state();
        if (!thread) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        walk_state->thread = thread;
-       acpi_ds_push_walk_state (walk_state, thread);
+       acpi_ds_push_walk_state(walk_state, thread);
 
        /*
         * This global allows the AML debugger to get a handle to the currently
@@ -1134,130 +469,136 @@ acpi_ps_parse_aml (
         * Execute the walk loop as long as there is a valid Walk State.  This
         * handles nested control method invocations without recursion.
         */
-       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "State=%p\n", walk_state));
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "State=%p\n", walk_state));
 
        status = AE_OK;
        while (walk_state) {
-               if (ACPI_SUCCESS (status)) {
+               if (ACPI_SUCCESS(status)) {
                        /*
                         * The parse_loop executes AML until the method terminates
                         * or calls another method.
                         */
-                       status = acpi_ps_parse_loop (walk_state);
+                       status = acpi_ps_parse_loop(walk_state);
                }
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
-                       "Completed one call to walk loop, %s State=%p\n",
-                       acpi_format_exception (status), walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                                 "Completed one call to walk loop, %s State=%p\n",
+                                 acpi_format_exception(status), walk_state));
 
                if (status == AE_CTRL_TRANSFER) {
                        /*
                         * A method call was detected.
                         * Transfer control to the called control method
                         */
-                       status = acpi_ds_call_control_method (thread, walk_state, NULL);
+                       status =
+                           acpi_ds_call_control_method(thread, walk_state,
+                                                       NULL);
 
                        /*
                         * If the transfer to the new method method call worked, a new walk
                         * state was created -- get it
                         */
-                       walk_state = acpi_ds_get_current_walk_state (thread);
+                       walk_state = acpi_ds_get_current_walk_state(thread);
                        continue;
-               }
-               else if (status == AE_CTRL_TERMINATE) {
+               } else if (status == AE_CTRL_TERMINATE) {
                        status = AE_OK;
-               }
-               else if ((status != AE_OK) && (walk_state->method_desc)) {
-                       ACPI_REPORT_METHOD_ERROR ("Method execution failed",
-                               walk_state->method_node, NULL, status);
+               } else if ((status != AE_OK) && (walk_state->method_desc)) {
+                       ACPI_REPORT_METHOD_ERROR("Method execution failed",
+                                                walk_state->method_node, NULL,
+                                                status);
+
+                       /* Ensure proper cleanup */
+
+                       walk_state->parse_flags |= ACPI_PARSE_EXECUTE;
 
                        /* Check for possible multi-thread reentrancy problem */
 
                        if ((status == AE_ALREADY_EXISTS) &&
-                               (!walk_state->method_desc->method.semaphore)) {
+                           (!walk_state->method_desc->method.semaphore)) {
                                /*
                                 * This method is marked not_serialized, but it tried to create
                                 * a named object, causing the second thread entrance to fail.
                                 * We will workaround this by marking the method permanently
                                 * as Serialized.
                                 */
-                               walk_state->method_desc->method.method_flags |= AML_METHOD_SERIALIZED;
+                               walk_state->method_desc->method.method_flags |=
+                                   AML_METHOD_SERIALIZED;
                                walk_state->method_desc->method.concurrency = 1;
                        }
                }
 
-               if (walk_state->method_desc) {
-                       /* Decrement the thread count on the method parse tree */
-
-                       if (walk_state->method_desc->method.thread_count) {
-                               walk_state->method_desc->method.thread_count--;
-                       }
-               }
-
                /* We are done with this walk, move on to the parent if any */
 
-               walk_state = acpi_ds_pop_walk_state (thread);
+               walk_state = acpi_ds_pop_walk_state(thread);
 
                /* Reset the current scope to the beginning of scope stack */
 
-               acpi_ds_scope_stack_clear (walk_state);
+               acpi_ds_scope_stack_clear(walk_state);
 
                /*
                 * If we just returned from the execution of a control method,
                 * there's lots of cleanup to do
                 */
-               if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) == ACPI_PARSE_EXECUTE) {
-                       terminate_status = acpi_ds_terminate_control_method (walk_state);
-                       if (ACPI_FAILURE (terminate_status)) {
-                               ACPI_REPORT_ERROR ((
-                                       "Could not terminate control method properly\n"));
+               if ((walk_state->parse_flags & ACPI_PARSE_MODE_MASK) ==
+                   ACPI_PARSE_EXECUTE) {
+                       if (walk_state->method_desc) {
+                               /* Decrement the thread count on the method parse tree */
 
-                               /* Ignore error and continue */
+                               walk_state->method_desc->method.thread_count--;
                        }
+
+                       acpi_ds_terminate_control_method(walk_state);
                }
 
                /* Delete this walk state and all linked control states */
 
-               acpi_ps_cleanup_scope (&walk_state->parser_state);
+               acpi_ps_cleanup_scope(&walk_state->parser_state);
 
                previous_walk_state = walk_state;
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
-                       "return_value=%p, implicit_value=%p State=%p\n",
-                       walk_state->return_desc, walk_state->implicit_return_obj, walk_state));
+               ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                                 "return_value=%p, implicit_value=%p State=%p\n",
+                                 walk_state->return_desc,
+                                 walk_state->implicit_return_obj, walk_state));
 
                /* Check if we have restarted a preempted walk */
 
-               walk_state = acpi_ds_get_current_walk_state (thread);
+               walk_state = acpi_ds_get_current_walk_state(thread);
                if (walk_state) {
-                       if (ACPI_SUCCESS (status)) {
+                       if (ACPI_SUCCESS(status)) {
                                /*
                                 * There is another walk state, restart it.
                                 * If the method return value is not used by the parent,
                                 * The object is deleted
                                 */
                                if (!previous_walk_state->return_desc) {
-                                       status = acpi_ds_restart_control_method (walk_state,
-                                                        previous_walk_state->implicit_return_obj);
-                               }
-                               else {
+                                       status =
+                                           acpi_ds_restart_control_method
+                                           (walk_state,
+                                            previous_walk_state->
+                                            implicit_return_obj);
+                               } else {
                                        /*
                                         * We have a valid return value, delete any implicit
                                         * return value.
                                         */
-                                       acpi_ds_clear_implicit_return (previous_walk_state);
+                                       acpi_ds_clear_implicit_return
+                                           (previous_walk_state);
 
-                                       status = acpi_ds_restart_control_method (walk_state,
-                                                        previous_walk_state->return_desc);
+                                       status =
+                                           acpi_ds_restart_control_method
+                                           (walk_state,
+                                            previous_walk_state->return_desc);
                                }
-                               if (ACPI_SUCCESS (status)) {
-                                       walk_state->walk_type |= ACPI_WALK_METHOD_RESTART;
+                               if (ACPI_SUCCESS(status)) {
+                                       walk_state->walk_type |=
+                                           ACPI_WALK_METHOD_RESTART;
                                }
-                       }
-                       else {
+                       } else {
                                /* On error, delete any return object */
 
-                               acpi_ut_remove_reference (previous_walk_state->return_desc);
+                               acpi_ut_remove_reference(previous_walk_state->
+                                                        return_desc);
                        }
                }
 
@@ -1268,37 +609,36 @@ acpi_ps_parse_aml (
                else if (previous_walk_state->caller_return_desc) {
                        if (previous_walk_state->implicit_return_obj) {
                                *(previous_walk_state->caller_return_desc) =
-                                       previous_walk_state->implicit_return_obj;
-                       }
-                       else {
-                                /* NULL if no return value */
+                                   previous_walk_state->implicit_return_obj;
+                       } else {
+                               /* NULL if no return value */
 
                                *(previous_walk_state->caller_return_desc) =
-                                       previous_walk_state->return_desc;
+                                   previous_walk_state->return_desc;
                        }
-               }
-               else {
+               } else {
                        if (previous_walk_state->return_desc) {
                                /* Caller doesn't want it, must delete it */
 
-                               acpi_ut_remove_reference (previous_walk_state->return_desc);
+                               acpi_ut_remove_reference(previous_walk_state->
+                                                        return_desc);
                        }
                        if (previous_walk_state->implicit_return_obj) {
                                /* Caller doesn't want it, must delete it */
 
-                               acpi_ut_remove_reference (previous_walk_state->implicit_return_obj);
+                               acpi_ut_remove_reference(previous_walk_state->
+                                                        implicit_return_obj);
                        }
                }
 
-               acpi_ds_delete_walk_state (previous_walk_state);
+               acpi_ds_delete_walk_state(previous_walk_state);
        }
 
        /* Normal exit */
 
-       acpi_ex_release_all_mutexes (thread);
-       acpi_ut_delete_generic_state (ACPI_CAST_PTR (union acpi_generic_state, thread));
+       acpi_ex_release_all_mutexes(thread);
+       acpi_ut_delete_generic_state(ACPI_CAST_PTR
+                                    (union acpi_generic_state, thread));
        acpi_gbl_current_walk_list = prev_walk_list;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 8dcd1b1e71312e2bbc85dade9c18d6e94137c7ed..1c953b6f1af16958fb7a7163e5fa0ac847650972 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 
 #define _COMPONENT          ACPI_PARSER
-        ACPI_MODULE_NAME    ("psscope")
-
+ACPI_MODULE_NAME("psscope")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Get parent of current op being parsed
  *
  ******************************************************************************/
-
-union acpi_parse_object *
-acpi_ps_get_parent_scope (
-       struct acpi_parse_state         *parser_state)
+union acpi_parse_object *acpi_ps_get_parent_scope(struct acpi_parse_state
+                                                 *parser_state)
 {
 
        return (parser_state->scope->parse_scope.op);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_has_completed_scope
@@ -84,17 +79,14 @@ acpi_ps_get_parent_scope (
  *
  ******************************************************************************/
 
-u8
-acpi_ps_has_completed_scope (
-       struct acpi_parse_state         *parser_state)
+u8 acpi_ps_has_completed_scope(struct acpi_parse_state * parser_state)
 {
 
        return ((u8)
-                       ((parser_state->aml >= parser_state->scope->parse_scope.arg_end ||
-                        !parser_state->scope->parse_scope.arg_count)));
+               ((parser_state->aml >= parser_state->scope->parse_scope.arg_end
+                 || !parser_state->scope->parse_scope.arg_count)));
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_init_scope
@@ -109,34 +101,30 @@ acpi_ps_has_completed_scope (
  ******************************************************************************/
 
 acpi_status
-acpi_ps_init_scope (
-       struct acpi_parse_state         *parser_state,
-       union acpi_parse_object         *root_op)
+acpi_ps_init_scope(struct acpi_parse_state * parser_state,
+                  union acpi_parse_object * root_op)
 {
-       union acpi_generic_state        *scope;
+       union acpi_generic_state *scope;
 
+       ACPI_FUNCTION_TRACE_PTR("ps_init_scope", root_op);
 
-       ACPI_FUNCTION_TRACE_PTR ("ps_init_scope", root_op);
-
-
-       scope = acpi_ut_create_generic_state ();
+       scope = acpi_ut_create_generic_state();
        if (!scope) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
-       scope->common.data_type     = ACPI_DESC_TYPE_STATE_RPSCOPE;
-       scope->parse_scope.op       = root_op;
+       scope->common.data_type = ACPI_DESC_TYPE_STATE_RPSCOPE;
+       scope->parse_scope.op = root_op;
        scope->parse_scope.arg_count = ACPI_VAR_ARGS;
-       scope->parse_scope.arg_end  = parser_state->aml_end;
-       scope->parse_scope.pkg_end  = parser_state->aml_end;
+       scope->parse_scope.arg_end = parser_state->aml_end;
+       scope->parse_scope.pkg_end = parser_state->aml_end;
 
-       parser_state->scope         = scope;
-       parser_state->start_op      = root_op;
+       parser_state->scope = scope;
+       parser_state->start_op = root_op;
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_push_scope
@@ -153,48 +141,42 @@ acpi_ps_init_scope (
  ******************************************************************************/
 
 acpi_status
-acpi_ps_push_scope (
-       struct acpi_parse_state         *parser_state,
-       union acpi_parse_object         *op,
-       u32                             remaining_args,
-       u32                             arg_count)
+acpi_ps_push_scope(struct acpi_parse_state *parser_state,
+                  union acpi_parse_object *op,
+                  u32 remaining_args, u32 arg_count)
 {
-       union acpi_generic_state        *scope;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ps_push_scope", op);
+       union acpi_generic_state *scope;
 
+       ACPI_FUNCTION_TRACE_PTR("ps_push_scope", op);
 
-       scope = acpi_ut_create_generic_state ();
+       scope = acpi_ut_create_generic_state();
        if (!scope) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
-       scope->common.data_type    = ACPI_DESC_TYPE_STATE_PSCOPE;
-       scope->parse_scope.op      = op;
+       scope->common.data_type = ACPI_DESC_TYPE_STATE_PSCOPE;
+       scope->parse_scope.op = op;
        scope->parse_scope.arg_list = remaining_args;
        scope->parse_scope.arg_count = arg_count;
        scope->parse_scope.pkg_end = parser_state->pkg_end;
 
        /* Push onto scope stack */
 
-       acpi_ut_push_generic_state (&parser_state->scope, scope);
+       acpi_ut_push_generic_state(&parser_state->scope, scope);
 
        if (arg_count == ACPI_VAR_ARGS) {
                /* Multiple arguments */
 
                scope->parse_scope.arg_end = parser_state->pkg_end;
-       }
-       else {
+       } else {
                /* Single argument */
 
-               scope->parse_scope.arg_end = ACPI_TO_POINTER (ACPI_MAX_PTR);
+               scope->parse_scope.arg_end = ACPI_TO_POINTER(ACPI_MAX_PTR);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_pop_scope
@@ -212,48 +194,41 @@ acpi_ps_push_scope (
  ******************************************************************************/
 
 void
-acpi_ps_pop_scope (
-       struct acpi_parse_state         *parser_state,
-       union acpi_parse_object         **op,
-       u32                             *arg_list,
-       u32                             *arg_count)
+acpi_ps_pop_scope(struct acpi_parse_state *parser_state,
+                 union acpi_parse_object **op, u32 * arg_list, u32 * arg_count)
 {
-       union acpi_generic_state        *scope = parser_state->scope;
-
-
-       ACPI_FUNCTION_TRACE ("ps_pop_scope");
+       union acpi_generic_state *scope = parser_state->scope;
 
+       ACPI_FUNCTION_TRACE("ps_pop_scope");
 
        /* Only pop the scope if there is in fact a next scope */
 
        if (scope->common.next) {
-               scope = acpi_ut_pop_generic_state (&parser_state->scope);
+               scope = acpi_ut_pop_generic_state(&parser_state->scope);
 
                /* return to parsing previous op */
 
-               *op                 = scope->parse_scope.op;
-               *arg_list           = scope->parse_scope.arg_list;
-               *arg_count          = scope->parse_scope.arg_count;
+               *op = scope->parse_scope.op;
+               *arg_list = scope->parse_scope.arg_list;
+               *arg_count = scope->parse_scope.arg_count;
                parser_state->pkg_end = scope->parse_scope.pkg_end;
 
                /* All done with this scope state structure */
 
-               acpi_ut_delete_generic_state (scope);
-       }
-       else {
+               acpi_ut_delete_generic_state(scope);
+       } else {
                /* empty parse stack, prepare to fetch next opcode */
 
-               *op       = NULL;
+               *op = NULL;
                *arg_list = 0;
                *arg_count = 0;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
-               "Popped Op %p Args %X\n", *op, *arg_count));
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                         "Popped Op %p Args %X\n", *op, *arg_count));
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_cleanup_scope
@@ -267,15 +242,11 @@ acpi_ps_pop_scope (
  *
  ******************************************************************************/
 
-void
-acpi_ps_cleanup_scope (
-       struct acpi_parse_state         *parser_state)
+void acpi_ps_cleanup_scope(struct acpi_parse_state *parser_state)
 {
-       union acpi_generic_state        *scope;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ps_cleanup_scope", parser_state);
+       union acpi_generic_state *scope;
 
+       ACPI_FUNCTION_TRACE_PTR("ps_cleanup_scope", parser_state);
 
        if (!parser_state) {
                return_VOID;
@@ -284,10 +255,9 @@ acpi_ps_cleanup_scope (
        /* Delete anything on the scope stack */
 
        while (parser_state->scope) {
-               scope = acpi_ut_pop_generic_state (&parser_state->scope);
-               acpi_ut_delete_generic_state (scope);
+               scope = acpi_ut_pop_generic_state(&parser_state->scope);
+               acpi_ut_delete_generic_state(scope);
        }
 
        return_VOID;
 }
-
index d5aafe73fca0e7ca118761c1c0f7de2f133edeb6..f0e755884eea849fbe6dbd1c7690c41ddf13223c 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 
 #define _COMPONENT          ACPI_PARSER
-        ACPI_MODULE_NAME    ("pstree")
+ACPI_MODULE_NAME("pstree")
 
 /* Local prototypes */
-
 #ifdef ACPI_OBSOLETE_FUNCTIONS
-union acpi_parse_object *
-acpi_ps_get_child (
-       union acpi_parse_object         *op);
+union acpi_parse_object *acpi_ps_get_child(union acpi_parse_object *op);
 #endif
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_get_arg
@@ -71,21 +66,16 @@ acpi_ps_get_child (
  *
  ******************************************************************************/
 
-union acpi_parse_object *
-acpi_ps_get_arg (
-       union acpi_parse_object         *op,
-       u32                             argn)
+union acpi_parse_object *acpi_ps_get_arg(union acpi_parse_object *op, u32 argn)
 {
-       union acpi_parse_object         *arg = NULL;
-       const struct acpi_opcode_info   *op_info;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       union acpi_parse_object *arg = NULL;
+       const struct acpi_opcode_info *op_info;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* Get the info structure for this opcode */
 
-       op_info = acpi_ps_get_opcode_info (op->common.aml_opcode);
+       op_info = acpi_ps_get_opcode_info(op->common.aml_opcode);
        if (op_info->class == AML_CLASS_UNKNOWN) {
                /* Invalid opcode or ASCII character */
 
@@ -111,7 +101,6 @@ acpi_ps_get_arg (
        return (arg);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_append_arg
@@ -126,16 +115,12 @@ acpi_ps_get_arg (
  ******************************************************************************/
 
 void
-acpi_ps_append_arg (
-       union acpi_parse_object         *op,
-       union acpi_parse_object         *arg)
+acpi_ps_append_arg(union acpi_parse_object *op, union acpi_parse_object *arg)
 {
-       union acpi_parse_object         *prev_arg;
-       const struct acpi_opcode_info   *op_info;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       union acpi_parse_object *prev_arg;
+       const struct acpi_opcode_info *op_info;
 
+       ACPI_FUNCTION_ENTRY();
 
        if (!op) {
                return;
@@ -143,12 +128,11 @@ acpi_ps_append_arg (
 
        /* Get the info structure for this opcode */
 
-       op_info = acpi_ps_get_opcode_info (op->common.aml_opcode);
+       op_info = acpi_ps_get_opcode_info(op->common.aml_opcode);
        if (op_info->class == AML_CLASS_UNKNOWN) {
                /* Invalid opcode */
 
-               ACPI_REPORT_ERROR (("ps_append_arg: Invalid AML Opcode: 0x%2.2X\n",
-                       op->common.aml_opcode));
+               ACPI_REPORT_ERROR(("ps_append_arg: Invalid AML Opcode: 0x%2.2X\n", op->common.aml_opcode));
                return;
        }
 
@@ -170,8 +154,7 @@ acpi_ps_append_arg (
                        prev_arg = prev_arg->common.next;
                }
                prev_arg->common.next = arg;
-       }
-       else {
+       } else {
                /* No argument list, this will be the first argument */
 
                op->common.value.arg = arg;
@@ -185,7 +168,6 @@ acpi_ps_append_arg (
        }
 }
 
-
 #ifdef ACPI_FUTURE_USAGE
 /*******************************************************************************
  *
@@ -201,18 +183,14 @@ acpi_ps_append_arg (
  *
  ******************************************************************************/
 
-union acpi_parse_object *
-acpi_ps_get_depth_next (
-       union acpi_parse_object         *origin,
-       union acpi_parse_object         *op)
+union acpi_parse_object *acpi_ps_get_depth_next(union acpi_parse_object *origin,
+                                               union acpi_parse_object *op)
 {
-       union acpi_parse_object         *next = NULL;
-       union acpi_parse_object         *parent;
-       union acpi_parse_object         *arg;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       union acpi_parse_object *next = NULL;
+       union acpi_parse_object *parent;
+       union acpi_parse_object *arg;
 
+       ACPI_FUNCTION_ENTRY();
 
        if (!op) {
                return (NULL);
@@ -220,7 +198,7 @@ acpi_ps_get_depth_next (
 
        /* Look for an argument or child */
 
-       next = acpi_ps_get_arg (op, 0);
+       next = acpi_ps_get_arg(op, 0);
        if (next) {
                return (next);
        }
@@ -237,7 +215,7 @@ acpi_ps_get_depth_next (
        parent = op->common.parent;
 
        while (parent) {
-               arg = acpi_ps_get_arg (parent, 0);
+               arg = acpi_ps_get_arg(parent, 0);
                while (arg && (arg != origin) && (arg != op)) {
                        arg = arg->common.next;
                }
@@ -261,7 +239,6 @@ acpi_ps_get_depth_next (
        return (next);
 }
 
-
 #ifdef ACPI_OBSOLETE_FUNCTIONS
 /*******************************************************************************
  *
@@ -275,15 +252,11 @@ acpi_ps_get_depth_next (
  *
  ******************************************************************************/
 
-union acpi_parse_object *
-acpi_ps_get_child (
-       union acpi_parse_object         *op)
+union acpi_parse_object *acpi_ps_get_child(union acpi_parse_object *op)
 {
-       union acpi_parse_object         *child = NULL;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       union acpi_parse_object *child = NULL;
 
+       ACPI_FUNCTION_ENTRY();
 
        switch (op->common.aml_opcode) {
        case AML_SCOPE_OP:
@@ -292,10 +265,9 @@ acpi_ps_get_child (
        case AML_THERMAL_ZONE_OP:
        case AML_INT_METHODCALL_OP:
 
-               child = acpi_ps_get_arg (op, 0);
+               child = acpi_ps_get_arg(op, 0);
                break;
 
-
        case AML_BUFFER_OP:
        case AML_PACKAGE_OP:
        case AML_METHOD_OP:
@@ -303,24 +275,21 @@ acpi_ps_get_child (
        case AML_WHILE_OP:
        case AML_FIELD_OP:
 
-               child = acpi_ps_get_arg (op, 1);
+               child = acpi_ps_get_arg(op, 1);
                break;
 
-
        case AML_POWER_RES_OP:
        case AML_INDEX_FIELD_OP:
 
-               child = acpi_ps_get_arg (op, 2);
+               child = acpi_ps_get_arg(op, 2);
                break;
 
-
        case AML_PROCESSOR_OP:
        case AML_BANK_FIELD_OP:
 
-               child = acpi_ps_get_arg (op, 3);
+               child = acpi_ps_get_arg(op, 3);
                break;
 
-
        default:
                /* All others have no children */
                break;
@@ -330,5 +299,4 @@ acpi_ps_get_child (
 }
 #endif
 
-#endif  /*  ACPI_FUTURE_USAGE  */
-
+#endif                         /*  ACPI_FUTURE_USAGE  */
index a10f88715d43b96dbf26187349686d0c85be9b7a..2075efbb4324c79259083a852a023f38d03f7cfa 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/amlcode.h>
 
 #define _COMPONENT          ACPI_PARSER
-        ACPI_MODULE_NAME    ("psutils")
-
+ACPI_MODULE_NAME("psutils")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Create a Scope and associated namepath op with the root name
  *
  ******************************************************************************/
-
-union acpi_parse_object *
-acpi_ps_create_scope_op (
-       void)
+union acpi_parse_object *acpi_ps_create_scope_op(void)
 {
-       union acpi_parse_object         *scope_op;
+       union acpi_parse_object *scope_op;
 
-
-       scope_op = acpi_ps_alloc_op (AML_SCOPE_OP);
+       scope_op = acpi_ps_alloc_op(AML_SCOPE_OP);
        if (!scope_op) {
                return (NULL);
        }
@@ -78,7 +72,6 @@ acpi_ps_create_scope_op (
        return (scope_op);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_init_op
@@ -92,23 +85,19 @@ acpi_ps_create_scope_op (
  *
  ******************************************************************************/
 
-void
-acpi_ps_init_op (
-       union acpi_parse_object         *op,
-       u16                             opcode)
+void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode)
 {
-       ACPI_FUNCTION_ENTRY ();
-
+       ACPI_FUNCTION_ENTRY();
 
        op->common.data_type = ACPI_DESC_TYPE_PARSER;
        op->common.aml_opcode = opcode;
 
-       ACPI_DISASM_ONLY_MEMBERS (ACPI_STRNCPY (op->common.aml_op_name,
-                       (acpi_ps_get_opcode_info (opcode))->name,
-                               sizeof (op->common.aml_op_name)));
+       ACPI_DISASM_ONLY_MEMBERS(ACPI_STRNCPY(op->common.aml_op_name,
+                                             (acpi_ps_get_opcode_info
+                                              (opcode))->name,
+                                             sizeof(op->common.aml_op_name)));
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_alloc_op
@@ -123,29 +112,23 @@ acpi_ps_init_op (
  *
  ******************************************************************************/
 
-union acpi_parse_object*
-acpi_ps_alloc_op (
-       u16                             opcode)
+union acpi_parse_object *acpi_ps_alloc_op(u16 opcode)
 {
-       union acpi_parse_object         *op;
-       const struct acpi_opcode_info   *op_info;
-       u8                              flags = ACPI_PARSEOP_GENERIC;
-
+       union acpi_parse_object *op;
+       const struct acpi_opcode_info *op_info;
+       u8 flags = ACPI_PARSEOP_GENERIC;
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
-
-       op_info = acpi_ps_get_opcode_info (opcode);
+       op_info = acpi_ps_get_opcode_info(opcode);
 
        /* Determine type of parse_op required */
 
        if (op_info->flags & AML_DEFER) {
                flags = ACPI_PARSEOP_DEFERRED;
-       }
-       else if (op_info->flags & AML_NAMED) {
+       } else if (op_info->flags & AML_NAMED) {
                flags = ACPI_PARSEOP_NAMED;
-       }
-       else if (opcode == AML_INT_BYTELIST_OP) {
+       } else if (opcode == AML_INT_BYTELIST_OP) {
                flags = ACPI_PARSEOP_BYTELIST;
        }
 
@@ -154,25 +137,25 @@ acpi_ps_alloc_op (
        if (flags == ACPI_PARSEOP_GENERIC) {
                /* The generic op (default) is by far the most common (16 to 1) */
 
-               op = acpi_ut_acquire_from_cache (ACPI_MEM_LIST_PSNODE);
-       }
-       else {
+               op = acpi_os_acquire_object(acpi_gbl_ps_node_cache);
+               memset(op, 0, sizeof(struct acpi_parse_obj_common));
+       else {
                /* Extended parseop */
 
-               op = acpi_ut_acquire_from_cache (ACPI_MEM_LIST_PSNODE_EXT);
+               op = acpi_os_acquire_object(acpi_gbl_ps_node_ext_cache);
+               memset(op, 0, sizeof(struct acpi_parse_obj_named));
        }
 
        /* Initialize the Op */
 
        if (op) {
-               acpi_ps_init_op (op, opcode);
+               acpi_ps_init_op(op, opcode);
                op->common.flags = flags;
        }
 
        return (op);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ps_free_op
@@ -186,53 +169,22 @@ acpi_ps_alloc_op (
  *
  ******************************************************************************/
 
-void
-acpi_ps_free_op (
-       union acpi_parse_object         *op)
+void acpi_ps_free_op(union acpi_parse_object *op)
 {
-       ACPI_FUNCTION_NAME ("ps_free_op");
-
+       ACPI_FUNCTION_NAME("ps_free_op");
 
        if (op->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Free retval op: %p\n", op));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "Free retval op: %p\n",
+                                 op));
        }
 
        if (op->common.flags & ACPI_PARSEOP_GENERIC) {
-               acpi_ut_release_to_cache (ACPI_MEM_LIST_PSNODE, op);
-       }
-       else {
-               acpi_ut_release_to_cache (ACPI_MEM_LIST_PSNODE_EXT, op);
+               (void)acpi_os_release_object(acpi_gbl_ps_node_cache, op);
+       } else {
+               (void)acpi_os_release_object(acpi_gbl_ps_node_ext_cache, op);
        }
 }
 
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ps_delete_parse_cache
- *
- * PARAMETERS:  None
- *
- * RETURN:      None
- *
- * DESCRIPTION: Free all objects that are on the parse cache list.
- *
- ******************************************************************************/
-
-void
-acpi_ps_delete_parse_cache (
-       void)
-{
-       ACPI_FUNCTION_TRACE ("ps_delete_parse_cache");
-
-
-       acpi_ut_delete_generic_cache (ACPI_MEM_LIST_PSNODE);
-       acpi_ut_delete_generic_cache (ACPI_MEM_LIST_PSNODE_EXT);
-       return_VOID;
-}
-#endif
-
-
 /*******************************************************************************
  *
  * FUNCTION:    Utility functions
@@ -241,36 +193,27 @@ acpi_ps_delete_parse_cache (
  *
  ******************************************************************************/
 
-
 /*
  * Is "c" a namestring lead character?
  */
-u8
-acpi_ps_is_leading_char (
-       u32                             c)
+u8 acpi_ps_is_leading_char(u32 c)
 {
        return ((u8) (c == '_' || (c >= 'A' && c <= 'Z')));
 }
 
-
 /*
  * Is "c" a namestring prefix character?
  */
-u8
-acpi_ps_is_prefix_char (
-       u32                             c)
+u8 acpi_ps_is_prefix_char(u32 c)
 {
        return ((u8) (c == '\\' || c == '^'));
 }
 
-
 /*
  * Get op's name (4-byte name segment) or 0 if unnamed
  */
 #ifdef ACPI_FUTURE_USAGE
-u32
-acpi_ps_get_name (
-       union acpi_parse_object         *op)
+u32 acpi_ps_get_name(union acpi_parse_object * op)
 {
 
        /* The "generic" object has no name associated with it */
@@ -283,16 +226,12 @@ acpi_ps_get_name (
 
        return (op->named.name);
 }
-#endif  /*  ACPI_FUTURE_USAGE  */
-
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*
  * Set op's name
  */
-void
-acpi_ps_set_name (
-       union acpi_parse_object         *op,
-       u32                             name)
+void acpi_ps_set_name(union acpi_parse_object *op, u32 name)
 {
 
        /* The "generic" object has no name associated with it */
@@ -303,4 +242,3 @@ acpi_ps_set_name (
 
        op->named.name = name;
 }
-
index 9d20cb2ceb518768814a22473a8f7d3fa34bc4c5..08f2321b6ded21e923c35b8ed8f8d32d283361f8 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 
 #define _COMPONENT          ACPI_PARSER
-        ACPI_MODULE_NAME    ("pswalk")
-
+ACPI_MODULE_NAME("pswalk")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Delete a portion of or an entire parse tree.
  *
  ******************************************************************************/
-
-void
-acpi_ps_delete_parse_tree (
-       union acpi_parse_object         *subtree_root)
+void acpi_ps_delete_parse_tree(union acpi_parse_object *subtree_root)
 {
-       union acpi_parse_object         *op = subtree_root;
-       union acpi_parse_object         *next = NULL;
-       union acpi_parse_object         *parent = NULL;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ps_delete_parse_tree", subtree_root);
+       union acpi_parse_object *op = subtree_root;
+       union acpi_parse_object *next = NULL;
+       union acpi_parse_object *parent = NULL;
 
+       ACPI_FUNCTION_TRACE_PTR("ps_delete_parse_tree", subtree_root);
 
        /* Visit all nodes in the subtree */
 
@@ -81,7 +74,7 @@ acpi_ps_delete_parse_tree (
                if (op != parent) {
                        /* Look for an argument or child of the current op */
 
-                       next = acpi_ps_get_arg (op, 0);
+                       next = acpi_ps_get_arg(op, 0);
                        if (next) {
                                /* Still going downward in tree (Op is not completed yet) */
 
@@ -95,7 +88,7 @@ acpi_ps_delete_parse_tree (
                next = op->common.next;
                parent = op->common.parent;
 
-               acpi_ps_free_op (op);
+               acpi_ps_free_op(op);
 
                /* If we are back to the starting point, the walk is complete. */
 
@@ -104,8 +97,7 @@ acpi_ps_delete_parse_tree (
                }
                if (next) {
                        op = next;
-               }
-               else {
+               } else {
                        op = parent;
                }
        }
index dba893648e84b762cba90073ba1b5df05b29bd5f..4dcbd443160e64a90e62c8ca59412c59cf00e5b2 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acparser.h>
 #include <acpi/acdispat.h>
 #include <acpi/acinterp.h>
-#include <acpi/acnamesp.h>
-
 
 #define _COMPONENT          ACPI_PARSER
-        ACPI_MODULE_NAME    ("psxface")
+ACPI_MODULE_NAME("psxface")
+
+/* Local Prototypes */
+static acpi_status acpi_ps_execute_pass(struct acpi_parameter_info *info);
 
+static void
+acpi_ps_update_parameter_list(struct acpi_parameter_info *info, u16 action);
 
 /*******************************************************************************
  *
- * FUNCTION:    acpi_psx_execute
+ * FUNCTION:    acpi_ps_execute_method
  *
  * PARAMETERS:  Info            - Method info block, contains:
  *                  Node            - Method Node to execute
+ *                  obj_desc        - Method object
  *                  Parameters      - List of parameters to pass to the method,
  *                                    terminated by NULL. Params itself may be
  *                                    NULL if no parameters are being passed.
@@ -67,6 +70,7 @@
  *                  parameter_type  - Type of Parameter list
  *                  return_object   - Where to put method's return value (if
  *                                    any). If NULL, no value is returned.
+ *                  pass_number     - Parse or execute pass
  *
  * RETURN:      Status
  *
  *
  ******************************************************************************/
 
-acpi_status
-acpi_psx_execute (
-       struct acpi_parameter_info      *info)
+acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info)
 {
-       acpi_status                     status;
-       union acpi_operand_object       *obj_desc;
-       u32                             i;
-       union acpi_parse_object         *op;
-       struct acpi_walk_state          *walk_state;
-
-
-       ACPI_FUNCTION_TRACE ("psx_execute");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ps_execute_method");
 
-       /* Validate the Node and get the attached object */
+       /* Validate the Info and method Node */
 
        if (!info || !info->node) {
-               return_ACPI_STATUS (AE_NULL_ENTRY);
-       }
-
-       obj_desc = acpi_ns_get_attached_object (info->node);
-       if (!obj_desc) {
-               return_ACPI_STATUS (AE_NULL_OBJECT);
+               return_ACPI_STATUS(AE_NULL_ENTRY);
        }
 
        /* Init for new method, wait on concurrency semaphore */
 
-       status = acpi_ds_begin_method_execution (info->node, obj_desc, NULL);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ds_begin_method_execution(info->node, info->obj_desc, NULL);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       if ((info->parameter_type == ACPI_PARAM_ARGS) &&
-               (info->parameters)) {
-               /*
-                * The caller "owns" the parameters, so give each one an extra
-                * reference
-                */
-               for (i = 0; info->parameters[i]; i++) {
-                       acpi_ut_add_reference (info->parameters[i]);
-               }
-       }
+       /*
+        * The caller "owns" the parameters, so give each one an extra
+        * reference
+        */
+       acpi_ps_update_parameter_list(info, REF_INCREMENT);
 
        /*
         * 1) Perform the first pass parse of the method to enter any
-        * named objects that it creates into the namespace
+        *    named objects that it creates into the namespace
         */
-       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
-               "**** Begin Method Parse **** Entry=%p obj=%p\n",
-               info->node, obj_desc));
-
-       /* Create and init a Root Node */
-
-       op = acpi_ps_create_scope_op ();
-       if (!op) {
-               status = AE_NO_MEMORY;
-               goto cleanup1;
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                         "**** Begin Method Parse **** Entry=%p obj=%p\n",
+                         info->node, info->obj_desc));
+
+       info->pass_number = 1;
+       status = acpi_ps_execute_pass(info);
+       if (ACPI_FAILURE(status)) {
+               goto cleanup;
        }
 
        /*
-        * Get a new owner_id for objects created by this method. Namespace
-        * objects (such as Operation Regions) can be created during the
-        * first pass parse.
+        * 2) Execute the method. Performs second pass parse simultaneously
         */
-       obj_desc->method.owning_id = acpi_ut_allocate_owner_id (ACPI_OWNER_TYPE_METHOD);
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                         "**** Begin Method Execution **** Entry=%p obj=%p\n",
+                         info->node, info->obj_desc));
 
-       /* Create and initialize a new walk state */
+       info->pass_number = 3;
+       status = acpi_ps_execute_pass(info);
 
-       walk_state = acpi_ds_create_walk_state (obj_desc->method.owning_id,
-                          NULL, NULL, NULL);
-       if (!walk_state) {
-               status = AE_NO_MEMORY;
-               goto cleanup2;
-       }
+      cleanup:
+       /* Take away the extra reference that we gave the parameters above */
 
-       status = acpi_ds_init_aml_walk (walk_state, op, info->node,
-                         obj_desc->method.aml_start,
-                         obj_desc->method.aml_length, NULL, 1);
-       if (ACPI_FAILURE (status)) {
-               goto cleanup3;
-       }
+       acpi_ps_update_parameter_list(info, REF_DECREMENT);
 
-       /* Parse the AML */
+       /* Exit now if error above */
 
-       status = acpi_ps_parse_aml (walk_state);
-       acpi_ps_delete_parse_tree (op);
-       if (ACPI_FAILURE (status)) {
-               goto cleanup1; /* Walk state is already deleted */
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
-        * 2) Execute the method.  Performs second pass parse simultaneously
+        * If the method has returned an object, signal this to the caller with
+        * a control exception code
         */
-       ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
-               "**** Begin Method Execution **** Entry=%p obj=%p\n",
-               info->node, obj_desc));
-
-       /* Create and init a Root Node */
+       if (info->return_object) {
+               ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
+                                 "Method returned obj_desc=%p\n",
+                                 info->return_object));
+               ACPI_DUMP_STACK_ENTRY(info->return_object);
 
-       op = acpi_ps_create_scope_op ();
-       if (!op) {
-               status = AE_NO_MEMORY;
-               goto cleanup1;
+               status = AE_CTRL_RETURN_VALUE;
        }
 
-       /* Init new op with the method name and pointer back to the NS node */
+       return_ACPI_STATUS(status);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ps_update_parameter_list
+ *
+ * PARAMETERS:  Info            - See struct acpi_parameter_info
+ *                                (Used: parameter_type and Parameters)
+ *              Action          - Add or Remove reference
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Update reference count on all method parameter objects
+ *
+ ******************************************************************************/
 
-       acpi_ps_set_name (op, info->node->name.integer);
-       op->common.node = info->node;
+static void
+acpi_ps_update_parameter_list(struct acpi_parameter_info *info, u16 action)
+{
+       acpi_native_uint i;
 
-       /* Create and initialize a new walk state */
+       if ((info->parameter_type == ACPI_PARAM_ARGS) && (info->parameters)) {
+               /* Update reference count for each parameter */
 
-       walk_state = acpi_ds_create_walk_state (0, NULL, NULL, NULL);
-       if (!walk_state) {
-               status = AE_NO_MEMORY;
-               goto cleanup2;
-       }
+               for (i = 0; info->parameters[i]; i++) {
+                       /* Ignore errors, just do them all */
 
-       status = acpi_ds_init_aml_walk (walk_state, op, info->node,
-                         obj_desc->method.aml_start,
-                         obj_desc->method.aml_length, info, 3);
-       if (ACPI_FAILURE (status)) {
-               goto cleanup3;
+                       (void)acpi_ut_update_object_reference(info->
+                                                             parameters[i],
+                                                             action);
+               }
        }
+}
 
-       /* The walk of the parse tree is where we actually execute the method */
-
-       status = acpi_ps_parse_aml (walk_state);
-       goto cleanup2; /* Walk state already deleted */
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ps_execute_pass
+ *
+ * PARAMETERS:  Info            - See struct acpi_parameter_info
+ *                                (Used: pass_number, Node, and obj_desc)
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Single AML pass: Parse or Execute a control method
+ *
+ ******************************************************************************/
 
+static acpi_status acpi_ps_execute_pass(struct acpi_parameter_info *info)
+{
+       acpi_status status;
+       union acpi_parse_object *op;
+       struct acpi_walk_state *walk_state;
 
-cleanup3:
-       acpi_ds_delete_walk_state (walk_state);
+       ACPI_FUNCTION_TRACE("ps_execute_pass");
 
-cleanup2:
-       acpi_ps_delete_parse_tree (op);
+       /* Create and init a Root Node */
 
-cleanup1:
-       if ((info->parameter_type == ACPI_PARAM_ARGS) &&
-               (info->parameters)) {
-               /* Take away the extra reference that we gave the parameters above */
+       op = acpi_ps_create_scope_op();
+       if (!op) {
+               return_ACPI_STATUS(AE_NO_MEMORY);
+       }
 
-               for (i = 0; info->parameters[i]; i++) {
-                       /* Ignore errors, just do them all */
+       /* Create and initialize a new walk state */
 
-                       (void) acpi_ut_update_object_reference (
-                                        info->parameters[i], REF_DECREMENT);
-               }
+       walk_state =
+           acpi_ds_create_walk_state(info->obj_desc->method.owner_id, NULL,
+                                     NULL, NULL);
+       if (!walk_state) {
+               status = AE_NO_MEMORY;
+               goto cleanup;
        }
 
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ds_init_aml_walk(walk_state, op, info->node,
+                                      info->obj_desc->method.aml_start,
+                                      info->obj_desc->method.aml_length,
+                                      info->pass_number == 1 ? NULL : info,
+                                      info->pass_number);
+       if (ACPI_FAILURE(status)) {
+               acpi_ds_delete_walk_state(walk_state);
+               goto cleanup;
        }
 
-       /*
-        * If the method has returned an object, signal this to the caller with
-        * a control exception code
-        */
-       if (info->return_object) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "Method returned obj_desc=%p\n",
-                       info->return_object));
-               ACPI_DUMP_STACK_ENTRY (info->return_object);
-
-               status = AE_CTRL_RETURN_VALUE;
-       }
+       /* Parse the AML */
 
-       return_ACPI_STATUS (status);
-}
+       status = acpi_ps_parse_aml(walk_state);
 
+       /* Walk state was deleted by parse_aml */
 
+      cleanup:
+       acpi_ps_delete_parse_tree(op);
+       return_ACPI_STATUS(status);
+}
index 5148f3c10b5cf268d56fd0562f59ab7c538937f0..2a718df769b546ee533e55dc96fa5e8cdd510625 100644 (file)
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define _COMPONENT             ACPI_PCI_COMPONENT
-ACPI_MODULE_NAME               ("pci_bind")
+ACPI_MODULE_NAME("pci_bind")
 
 struct acpi_pci_data {
-       struct acpi_pci_id      id;
-       struct pci_bus          *bus;
-       struct pci_dev          *dev;
+       struct acpi_pci_id id;
+       struct pci_bus *bus;
+       struct pci_dev *dev;
 };
 
-
-void
-acpi_pci_data_handler (
-       acpi_handle             handle,
-       u32                     function,
-       void                    *context)
+static void acpi_pci_data_handler(acpi_handle handle, u32 function,
+                                 void *context)
 {
        ACPI_FUNCTION_TRACE("acpi_pci_data_handler");
 
@@ -59,7 +54,6 @@ acpi_pci_data_handler (
        return_VOID;
 }
 
-
 /**
  * acpi_get_pci_id
  * ------------------
@@ -67,15 +61,12 @@ acpi_pci_data_handler (
  * to resolve PCI information for ACPI-PCI devices defined in the namespace.
  * This typically occurs when resolving PCI operation region information.
  */
-acpi_status
-acpi_get_pci_id (
-       acpi_handle             handle,
-       struct acpi_pci_id      *id)
+acpi_status acpi_get_pci_id(acpi_handle handle, struct acpi_pci_id *id)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_device      *device = NULL;
-       struct acpi_pci_data    *data = NULL;
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_device *device = NULL;
+       struct acpi_pci_data *data = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_get_pci_id");
 
@@ -84,52 +75,50 @@ acpi_get_pci_id (
 
        result = acpi_bus_get_device(handle, &device);
        if (result) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                       "Invalid ACPI Bus context for device %s\n",
-                       acpi_device_bid(device)));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Invalid ACPI Bus context for device %s\n",
+                                 acpi_device_bid(device)));
                return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
-       status = acpi_get_data(handle, acpi_pci_data_handler, (void**) &data);
+       status = acpi_get_data(handle, acpi_pci_data_handler, (void **)&data);
        if (ACPI_FAILURE(status) || !data) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                       "Invalid ACPI-PCI context for device %s\n",
-                       acpi_device_bid(device)));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Invalid ACPI-PCI context for device %s\n",
+                                 acpi_device_bid(device)));
                return_ACPI_STATUS(status);
        }
 
        *id = data->id;
-       
+
        /*
-       id->segment = data->id.segment;
-       id->bus = data->id.bus;
-       id->device = data->id.device;
-       id->function = data->id.function;
-       */
+          id->segment = data->id.segment;
+          id->bus = data->id.bus;
+          id->device = data->id.device;
+          id->function = data->id.function;
+        */
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, 
-               "Device %s has PCI address %02x:%02x:%02x.%02x\n", 
-               acpi_device_bid(device), id->segment, id->bus, 
-               id->device, id->function));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Device %s has PCI address %02x:%02x:%02x.%02x\n",
+                         acpi_device_bid(device), id->segment, id->bus,
+                         id->device, id->function));
 
        return_ACPI_STATUS(AE_OK);
 }
+
 EXPORT_SYMBOL(acpi_get_pci_id);
 
-       
-int
-acpi_pci_bind (
-       struct acpi_device      *device)
+int acpi_pci_bind(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_pci_data    *data = NULL;
-       struct acpi_pci_data    *pdata = NULL;
-       char                    *pathname = NULL;
-       struct acpi_buffer      buffer = {0, NULL};
-       acpi_handle             handle = NULL;
-       struct pci_dev          *dev;
-       struct pci_bus          *bus;
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_pci_data *data = NULL;
+       struct acpi_pci_data *pdata = NULL;
+       char *pathname = NULL;
+       struct acpi_buffer buffer = { 0, NULL };
+       acpi_handle handle = NULL;
+       struct pci_dev *dev;
+       struct pci_bus *bus;
 
        ACPI_FUNCTION_TRACE("acpi_pci_bind");
 
@@ -137,34 +126,34 @@ acpi_pci_bind (
                return_VALUE(-EINVAL);
 
        pathname = kmalloc(ACPI_PATHNAME_MAX, GFP_KERNEL);
-       if(!pathname)
+       if (!pathname)
                return_VALUE(-ENOMEM);
        memset(pathname, 0, ACPI_PATHNAME_MAX);
        buffer.length = ACPI_PATHNAME_MAX;
        buffer.pointer = pathname;
 
        data = kmalloc(sizeof(struct acpi_pci_data), GFP_KERNEL);
-       if (!data){
-               kfree (pathname);
+       if (!data) {
+               kfree(pathname);
                return_VALUE(-ENOMEM);
        }
        memset(data, 0, sizeof(struct acpi_pci_data));
 
        acpi_get_name(device->handle, ACPI_FULL_PATHNAME, &buffer);
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Binding PCI device [%s]...\n", 
-               pathname));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Binding PCI device [%s]...\n",
+                         pathname));
 
        /* 
         * Segment & Bus
         * -------------
         * These are obtained via the parent device's ACPI-PCI context.
         */
-       status = acpi_get_data(device->parent->handle, acpi_pci_data_handler, 
-               (void**) &pdata);
+       status = acpi_get_data(device->parent->handle, acpi_pci_data_handler,
+                              (void **)&pdata);
        if (ACPI_FAILURE(status) || !pdata || !pdata->bus) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                       "Invalid ACPI-PCI context for parent device %s\n",
-                       acpi_device_bid(device->parent)));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Invalid ACPI-PCI context for parent device %s\n",
+                                 acpi_device_bid(device->parent)));
                result = -ENODEV;
                goto end;
        }
@@ -181,8 +170,8 @@ acpi_pci_bind (
        data->id.function = device->pnp.bus_address & 0xFFFF;
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "...to %02x:%02x:%02x.%02x\n",
-               data->id.segment, data->id.bus, data->id.device, 
-               data->id.function));
+                         data->id.segment, data->id.bus, data->id.device,
+                         data->id.function));
 
        /*
         * TBD: Support slot devices (e.g. function=0xFFFF).
@@ -202,25 +191,25 @@ acpi_pci_bind (
        if (bus) {
                list_for_each_entry(dev, &bus->devices, bus_list) {
                        if (dev->devfn == PCI_DEVFN(data->id.device,
-                                               data->id.function)) {
+                                                   data->id.function)) {
                                data->dev = dev;
                                break;
                        }
                }
        }
        if (!data->dev) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, 
-                       "Device %02x:%02x:%02x.%02x not present in PCI namespace\n",
-                       data->id.segment, data->id.bus, 
-                       data->id.device, data->id.function));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Device %02x:%02x:%02x.%02x not present in PCI namespace\n",
+                                 data->id.segment, data->id.bus,
+                                 data->id.device, data->id.function));
                result = -ENODEV;
                goto end;
        }
        if (!data->dev->bus) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                       "Device %02x:%02x:%02x.%02x has invalid 'bus' field\n",
-                       data->id.segment, data->id.bus, 
-                       data->id.device, data->id.function));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Device %02x:%02x:%02x.%02x has invalid 'bus' field\n",
+                                 data->id.segment, data->id.bus,
+                                 data->id.device, data->id.function));
                result = -ENODEV;
                goto end;
        }
@@ -232,10 +221,10 @@ acpi_pci_bind (
         * facilitate callbacks for all of its children.
         */
        if (data->dev->subordinate) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, 
-                       "Device %02x:%02x:%02x.%02x is a PCI bridge\n",
-                       data->id.segment, data->id.bus, 
-                       data->id.device, data->id.function));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Device %02x:%02x:%02x.%02x is a PCI bridge\n",
+                                 data->id.segment, data->id.bus,
+                                 data->id.device, data->id.function));
                data->bus = data->dev->subordinate;
                device->ops.bind = acpi_pci_bind;
                device->ops.unbind = acpi_pci_unbind;
@@ -249,8 +238,8 @@ acpi_pci_bind (
        status = acpi_attach_data(device->handle, acpi_pci_data_handler, data);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to attach ACPI-PCI context to device %s\n",
-                       acpi_device_bid(device)));
+                                 "Unable to attach ACPI-PCI context to device %s\n",
+                                 acpi_device_bid(device)));
                result = -ENODEV;
                goto end;
        }
@@ -267,15 +256,15 @@ acpi_pci_bind (
         */
        status = acpi_get_handle(device->handle, METHOD_NAME__PRT, &handle);
        if (ACPI_SUCCESS(status)) {
-               if (data->bus)                              /* PCI-PCI bridge */
-                       acpi_pci_irq_add_prt(device->handle, data->id.segment, 
-                               data->bus->number);
-               else                                 /* non-bridge PCI device */
+               if (data->bus)  /* PCI-PCI bridge */
                        acpi_pci_irq_add_prt(device->handle, data->id.segment,
-                               data->id.bus);
+                                            data->bus->number);
+               else            /* non-bridge PCI device */
+                       acpi_pci_irq_add_prt(device->handle, data->id.segment,
+                                            data->id.bus);
        }
 
-end:
+      end:
        kfree(pathname);
        if (result)
                kfree(data);
@@ -283,22 +272,21 @@ end:
        return_VALUE(result);
 }
 
-int acpi_pci_unbind(
-       struct acpi_device      *device)
+int acpi_pci_unbind(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_pci_data    *data = NULL;
-       char                    *pathname = NULL;
-       struct acpi_buffer      buffer = {0, NULL};
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_pci_data *data = NULL;
+       char *pathname = NULL;
+       struct acpi_buffer buffer = { 0, NULL };
 
        ACPI_FUNCTION_TRACE("acpi_pci_unbind");
 
        if (!device || !device->parent)
                return_VALUE(-EINVAL);
 
-       pathname = (char *) kmalloc(ACPI_PATHNAME_MAX, GFP_KERNEL);
-       if(!pathname)
+       pathname = (char *)kmalloc(ACPI_PATHNAME_MAX, GFP_KERNEL);
+       if (!pathname)
                return_VALUE(-ENOMEM);
        memset(pathname, 0, ACPI_PATHNAME_MAX);
 
@@ -306,14 +294,16 @@ int acpi_pci_unbind(
        buffer.pointer = pathname;
        acpi_get_name(device->handle, ACPI_FULL_PATHNAME, &buffer);
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Unbinding PCI device [%s]...\n",
-               pathname));
+                         pathname));
        kfree(pathname);
 
-       status = acpi_get_data(device->handle, acpi_pci_data_handler, (void**)&data);
+       status =
+           acpi_get_data(device->handle, acpi_pci_data_handler,
+                         (void **)&data);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to get data from device %s\n",
-                       acpi_device_bid(device)));
+                                 "Unable to get data from device %s\n",
+                                 acpi_device_bid(device)));
                result = -ENODEV;
                goto end;
        }
@@ -321,8 +311,8 @@ int acpi_pci_unbind(
        status = acpi_detach_data(device->handle, acpi_pci_data_handler);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to detach data from device %s\n",
-                       acpi_device_bid(device)));
+                                 "Unable to detach data from device %s\n",
+                                 acpi_device_bid(device)));
                result = -ENODEV;
                goto end;
        }
@@ -331,39 +321,37 @@ int acpi_pci_unbind(
        }
        kfree(data);
 
-end:
+      end:
        return_VALUE(result);
 }
 
-int 
-acpi_pci_bind_root (
-       struct acpi_device      *device,
-       struct acpi_pci_id      *id,
-       struct pci_bus          *bus) 
+int
+acpi_pci_bind_root(struct acpi_device *device,
+                  struct acpi_pci_id *id, struct pci_bus *bus)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_pci_data    *data = NULL;
-       char                    *pathname = NULL;
-       struct acpi_buffer      buffer = {0, NULL};
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_pci_data *data = NULL;
+       char *pathname = NULL;
+       struct acpi_buffer buffer = { 0, NULL };
 
        ACPI_FUNCTION_TRACE("acpi_pci_bind_root");
 
        pathname = (char *)kmalloc(ACPI_PATHNAME_MAX, GFP_KERNEL);
-       if(!pathname)
+       if (!pathname)
                return_VALUE(-ENOMEM);
        memset(pathname, 0, ACPI_PATHNAME_MAX);
 
        buffer.length = ACPI_PATHNAME_MAX;
        buffer.pointer = pathname;
 
-       if (!device || !id || !bus){
+       if (!device || !id || !bus) {
                kfree(pathname);
                return_VALUE(-EINVAL);
        }
 
        data = kmalloc(sizeof(struct acpi_pci_data), GFP_KERNEL);
-       if (!data){
+       if (!data) {
                kfree(pathname);
                return_VALUE(-ENOMEM);
        }
@@ -377,18 +365,18 @@ acpi_pci_bind_root (
        acpi_get_name(device->handle, ACPI_FULL_PATHNAME, &buffer);
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Binding PCI root bridge [%s] to "
-               "%02x:%02x\n", pathname, id->segment, id->bus));
+                         "%02x:%02x\n", pathname, id->segment, id->bus));
 
        status = acpi_attach_data(device->handle, acpi_pci_data_handler, data);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to attach ACPI-PCI context to device %s\n",
-                       pathname));
+                                 "Unable to attach ACPI-PCI context to device %s\n",
+                                 pathname));
                result = -ENODEV;
                goto end;
        }
 
-end:
+      end:
        kfree(pathname);
        if (result != 0)
                kfree(data);
index bb973d2109a11e7404f1d3fa788f1d0655038d5e..09567c2edcfb5225a67deb44d71cba7249915735 100644 (file)
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define _COMPONENT             ACPI_PCI_COMPONENT
-ACPI_MODULE_NAME               ("pci_irq")
+ACPI_MODULE_NAME("pci_irq")
 
-static struct acpi_prt_list    acpi_prt;
+static struct acpi_prt_list acpi_prt;
 static DEFINE_SPINLOCK(acpi_prt_lock);
 
 /* --------------------------------------------------------------------------
                          PCI IRQ Routing Table (PRT) Support
    -------------------------------------------------------------------------- */
 
-static struct acpi_prt_entry *
-acpi_pci_irq_find_prt_entry (
-       int                     segment,
-       int                     bus,
-       int                     device,
-       int                     pin)
+static struct acpi_prt_entry *acpi_pci_irq_find_prt_entry(int segment,
+                                                         int bus,
+                                                         int device, int pin)
 {
-       struct list_head        *node = NULL;
-       struct acpi_prt_entry   *entry = NULL;
+       struct list_head *node = NULL;
+       struct acpi_prt_entry *entry = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_pci_irq_find_prt_entry");
 
@@ -72,10 +68,10 @@ acpi_pci_irq_find_prt_entry (
        spin_lock(&acpi_prt_lock);
        list_for_each(node, &acpi_prt.entries) {
                entry = list_entry(node, struct acpi_prt_entry, node);
-               if ((segment == entry->id.segment) 
-                       && (bus == entry->id.bus) 
-                       && (device == entry->id.device)
-                       && (pin == entry->pin)) {
+               if ((segment == entry->id.segment)
+                   && (bus == entry->id.bus)
+                   && (device == entry->id.device)
+                   && (pin == entry->pin)) {
                        spin_unlock(&acpi_prt_lock);
                        return_PTR(entry);
                }
@@ -85,15 +81,11 @@ acpi_pci_irq_find_prt_entry (
        return_PTR(NULL);
 }
 
-
 static int
-acpi_pci_irq_add_entry (
-       acpi_handle                     handle,
-       int                             segment,
-       int                             bus,
-       struct acpi_pci_routing_table   *prt)
+acpi_pci_irq_add_entry(acpi_handle handle,
+                      int segment, int bus, struct acpi_pci_routing_table *prt)
 {
-       struct acpi_prt_entry   *entry = NULL;
+       struct acpi_prt_entry *entry = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_pci_irq_add_entry");
 
@@ -139,9 +131,10 @@ acpi_pci_irq_add_entry (
                entry->link.index = prt->source_index;
 
        ACPI_DEBUG_PRINT_RAW((ACPI_DB_INFO,
-               "      %02X:%02X:%02X[%c] -> %s[%d]\n", 
-               entry->id.segment, entry->id.bus, entry->id.device, 
-               ('A' + entry->pin), prt->source, entry->link.index));
+                             "      %02X:%02X:%02X[%c] -> %s[%d]\n",
+                             entry->id.segment, entry->id.bus,
+                             entry->id.device, ('A' + entry->pin), prt->source,
+                             entry->link.index));
 
        spin_lock(&acpi_prt_lock);
        list_add_tail(&entry->node, &acpi_prt.entries);
@@ -151,38 +144,29 @@ acpi_pci_irq_add_entry (
        return_VALUE(0);
 }
 
-
 static void
-acpi_pci_irq_del_entry (
-       int                             segment,
-       int                             bus,
-       struct acpi_prt_entry           *entry)
+acpi_pci_irq_del_entry(int segment, int bus, struct acpi_prt_entry *entry)
 {
-       if (segment == entry->id.segment && bus == entry->id.bus){
+       if (segment == entry->id.segment && bus == entry->id.bus) {
                acpi_prt.count--;
                list_del(&entry->node);
                kfree(entry);
        }
 }
 
-
-int
-acpi_pci_irq_add_prt (
-       acpi_handle             handle,
-       int                     segment,
-       int                     bus)
+int acpi_pci_irq_add_prt(acpi_handle handle, int segment, int bus)
 {
-       acpi_status                     status = AE_OK;
-       char                            *pathname = NULL;
-       struct acpi_buffer              buffer = {0, NULL};
-       struct acpi_pci_routing_table   *prt = NULL;
-       struct acpi_pci_routing_table   *entry = NULL;
-       static int                      first_time = 1;
+       acpi_status status = AE_OK;
+       char *pathname = NULL;
+       struct acpi_buffer buffer = { 0, NULL };
+       struct acpi_pci_routing_table *prt = NULL;
+       struct acpi_pci_routing_table *entry = NULL;
+       static int first_time = 1;
 
        ACPI_FUNCTION_TRACE("acpi_pci_irq_add_prt");
 
-       pathname = (char *) kmalloc(ACPI_PATHNAME_MAX, GFP_KERNEL);
-       if(!pathname)
+       pathname = (char *)kmalloc(ACPI_PATHNAME_MAX, GFP_KERNEL);
+       if (!pathname)
                return_VALUE(-ENOMEM);
        memset(pathname, 0, ACPI_PATHNAME_MAX);
 
@@ -202,7 +186,7 @@ acpi_pci_irq_add_prt (
        acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
 
        printk(KERN_DEBUG "ACPI: PCI Interrupt Routing Table [%s._PRT]\n",
-               pathname);
+              pathname);
 
        /* 
         * Evaluate this _PRT and add its entries to our global list (acpi_prt).
@@ -214,12 +198,12 @@ acpi_pci_irq_add_prt (
        status = acpi_get_irq_routing_table(handle, &buffer);
        if (status != AE_BUFFER_OVERFLOW) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PRT [%s]\n",
-                       acpi_format_exception(status)));
+                                 acpi_format_exception(status)));
                return_VALUE(-ENODEV);
        }
 
        prt = kmalloc(buffer.length, GFP_KERNEL);
-       if (!prt){
+       if (!prt) {
                return_VALUE(-ENOMEM);
        }
        memset(prt, 0, buffer.length);
@@ -228,7 +212,7 @@ acpi_pci_irq_add_prt (
        status = acpi_get_irq_routing_table(handle, &buffer);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PRT [%s]\n",
-                       acpi_format_exception(status)));
+                                 acpi_format_exception(status)));
                kfree(buffer.pointer);
                return_VALUE(-ENODEV);
        }
@@ -238,7 +222,7 @@ acpi_pci_irq_add_prt (
        while (entry && (entry->length > 0)) {
                acpi_pci_irq_add_entry(handle, segment, bus, entry);
                entry = (struct acpi_pci_routing_table *)
-                       ((unsigned long) entry + entry->length);
+                   ((unsigned long)entry + entry->length);
        }
 
        kfree(prt);
@@ -246,18 +230,18 @@ acpi_pci_irq_add_prt (
        return_VALUE(0);
 }
 
-void
-acpi_pci_irq_del_prt (int segment, int bus)
+void acpi_pci_irq_del_prt(int segment, int bus)
 {
-       struct list_head        *node = NULL, *n = NULL;
-       struct acpi_prt_entry   *entry = NULL;
+       struct list_head *node = NULL, *n = NULL;
+       struct acpi_prt_entry *entry = NULL;
 
-       if (!acpi_prt.count)    {
+       if (!acpi_prt.count) {
                return;
        }
 
-       printk(KERN_DEBUG "ACPI: Delete PCI Interrupt Routing Table for %x:%x\n",
-               segment, bus);
+       printk(KERN_DEBUG
+              "ACPI: Delete PCI Interrupt Routing Table for %x:%x\n", segment,
+              bus);
        spin_lock(&acpi_prt_lock);
        list_for_each_safe(node, n, &acpi_prt.entries) {
                entry = list_entry(node, struct acpi_prt_entry, node);
@@ -266,26 +250,27 @@ acpi_pci_irq_del_prt (int segment, int bus)
        }
        spin_unlock(&acpi_prt_lock);
 }
+
 /* --------------------------------------------------------------------------
                           PCI Interrupt Routing Support
    -------------------------------------------------------------------------- */
-typedef int (*irq_lookup_func)(struct acpi_prt_entry *, int *, int *, char **);
+typedef int (*irq_lookup_func) (struct acpi_prt_entry *, int *, int *, char **);
 
 static int
 acpi_pci_allocate_irq(struct acpi_prt_entry *entry,
-       int     *edge_level,
-       int     *active_high_low,
-       char    **link)
+                     int *edge_level, int *active_high_low, char **link)
 {
-       int     irq;
+       int irq;
 
        ACPI_FUNCTION_TRACE("acpi_pci_allocate_irq");
 
        if (entry->link.handle) {
                irq = acpi_pci_link_allocate_irq(entry->link.handle,
-                       entry->link.index, edge_level, active_high_low, link);
+                                                entry->link.index, edge_level,
+                                                active_high_low, link);
                if (irq < 0) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid IRQ link routing entry\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                         "Invalid IRQ link routing entry\n"));
                        return_VALUE(-1);
                }
        } else {
@@ -300,11 +285,9 @@ acpi_pci_allocate_irq(struct acpi_prt_entry *entry,
 
 static int
 acpi_pci_free_irq(struct acpi_prt_entry *entry,
-       int     *edge_level,
-       int     *active_high_low,
-       char    **link)
+                 int *edge_level, int *active_high_low, char **link)
 {
-       int     irq;
+       int irq;
 
        ACPI_FUNCTION_TRACE("acpi_pci_free_irq");
        if (entry->link.handle) {
@@ -314,38 +297,36 @@ acpi_pci_free_irq(struct acpi_prt_entry *entry,
        }
        return_VALUE(irq);
 }
+
 /*
  * acpi_pci_irq_lookup
  * success: return IRQ >= 0
  * failure: return -1
  */
 static int
-acpi_pci_irq_lookup (
-       struct pci_bus          *bus,
-       int                     device,
-       int                     pin,
-       int                     *edge_level,
-       int                     *active_high_low,
-       char                    **link,
-       irq_lookup_func         func)
+acpi_pci_irq_lookup(struct pci_bus *bus,
+                   int device,
+                   int pin,
+                   int *edge_level,
+                   int *active_high_low, char **link, irq_lookup_func func)
 {
-       struct acpi_prt_entry   *entry = NULL;
+       struct acpi_prt_entry *entry = NULL;
        int segment = pci_domain_nr(bus);
        int bus_nr = bus->number;
        int ret;
 
        ACPI_FUNCTION_TRACE("acpi_pci_irq_lookup");
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, 
-               "Searching for PRT entry for %02x:%02x:%02x[%c]\n", 
-               segment, bus_nr, device, ('A' + pin)));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Searching for PRT entry for %02x:%02x:%02x[%c]\n",
+                         segment, bus_nr, device, ('A' + pin)));
 
-       entry = acpi_pci_irq_find_prt_entry(segment, bus_nr, device, pin); 
+       entry = acpi_pci_irq_find_prt_entry(segment, bus_nr, device, pin);
        if (!entry) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "PRT entry not found\n"));
                return_VALUE(-1);
        }
-       
+
        ret = func(entry, edge_level, active_high_low, link);
        return_VALUE(ret);
 }
@@ -356,17 +337,14 @@ acpi_pci_irq_lookup (
  * failure: return < 0
  */
 static int
-acpi_pci_irq_derive (
-       struct pci_dev          *dev,
-       int                     pin,
-       int                     *edge_level,
-       int                     *active_high_low,
-       char                    **link,
-       irq_lookup_func         func)
+acpi_pci_irq_derive(struct pci_dev *dev,
+                   int pin,
+                   int *edge_level,
+                   int *active_high_low, char **link, irq_lookup_func func)
 {
-       struct pci_dev          *bridge = dev;
-       int                     irq = -1;
-       u8                      bridge_pin = 0;
+       struct pci_dev *bridge = dev;
+       int irq = -1;
+       u8 bridge_pin = 0;
 
        ACPI_FUNCTION_TRACE("acpi_pci_irq_derive");
 
@@ -383,28 +361,33 @@ acpi_pci_irq_derive (
 
                if ((bridge->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS) {
                        /* PC card has the same IRQ as its cardbridge */
-                       pci_read_config_byte(bridge, PCI_INTERRUPT_PIN, &bridge_pin);
+                       pci_read_config_byte(bridge, PCI_INTERRUPT_PIN,
+                                            &bridge_pin);
                        if (!bridge_pin) {
-                               ACPI_DEBUG_PRINT((ACPI_DB_INFO, 
-                                       "No interrupt pin configured for device %s\n", pci_name(bridge)));
+                               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                                 "No interrupt pin configured for device %s\n",
+                                                 pci_name(bridge)));
                                return_VALUE(-1);
                        }
                        /* Pin is from 0 to 3 */
-                       bridge_pin --;
+                       bridge_pin--;
                        pin = bridge_pin;
                }
 
                irq = acpi_pci_irq_lookup(bridge->bus, PCI_SLOT(bridge->devfn),
-                       pin, edge_level, active_high_low, link, func);
+                                         pin, edge_level, active_high_low,
+                                         link, func);
        }
 
        if (irq < 0) {
-               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Unable to derive IRQ for device %s\n", pci_name(dev)));
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Unable to derive IRQ for device %s\n",
+                                 pci_name(dev)));
                return_VALUE(-1);
        }
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Derive IRQ %d for device %s from %s\n",
-               irq, pci_name(dev), pci_name(bridge)));
+                         irq, pci_name(dev), pci_name(bridge)));
 
        return_VALUE(irq);
 }
@@ -415,30 +398,32 @@ acpi_pci_irq_derive (
  * failure: return < 0
  */
 
-int
-acpi_pci_irq_enable (
-       struct pci_dev          *dev)
+int acpi_pci_irq_enable(struct pci_dev *dev)
 {
-       int                     irq = 0;
-       u8                      pin = 0;
-       int                     edge_level = ACPI_LEVEL_SENSITIVE;
-       int                     active_high_low = ACPI_ACTIVE_LOW;
-       char                    *link = NULL;
+       int irq = 0;
+       u8 pin = 0;
+       int edge_level = ACPI_LEVEL_SENSITIVE;
+       int active_high_low = ACPI_ACTIVE_LOW;
+       char *link = NULL;
+       int rc;
 
        ACPI_FUNCTION_TRACE("acpi_pci_irq_enable");
 
        if (!dev)
                return_VALUE(-EINVAL);
-       
+
        pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
        if (!pin) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No interrupt pin configured for device %s\n", pci_name(dev)));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "No interrupt pin configured for device %s\n",
+                                 pci_name(dev)));
                return_VALUE(0);
        }
        pin--;
 
        if (!dev->bus) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid (NULL) 'bus' field\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Invalid (NULL) 'bus' field\n"));
                return_VALUE(-ENODEV);
        }
 
@@ -446,69 +431,76 @@ acpi_pci_irq_enable (
         * First we check the PCI IRQ routing table (PRT) for an IRQ.  PRT
         * values override any BIOS-assigned IRQs set during boot.
         */
-       irq = acpi_pci_irq_lookup(dev->bus, PCI_SLOT(dev->devfn), pin,
-               &edge_level, &active_high_low, &link, acpi_pci_allocate_irq);
+       irq = acpi_pci_irq_lookup(dev->bus, PCI_SLOT(dev->devfn), pin,
+                                 &edge_level, &active_high_low, &link,
+                                 acpi_pci_allocate_irq);
 
        /*
         * If no PRT entry was found, we'll try to derive an IRQ from the
         * device's parent bridge.
         */
        if (irq < 0)
-               irq = acpi_pci_irq_derive(dev, pin, &edge_level,
-                       &active_high_low, &link, acpi_pci_allocate_irq);
+               irq = acpi_pci_irq_derive(dev, pin, &edge_level,
+                                         &active_high_low, &link,
+                                         acpi_pci_allocate_irq);
+
        /*
         * No IRQ known to the ACPI subsystem - maybe the BIOS / 
         * driver reported one, then use it. Exit in any case.
         */
        if (irq < 0) {
                printk(KERN_WARNING PREFIX "PCI Interrupt %s[%c]: no GSI",
-                       pci_name(dev), ('A' + pin));
+                      pci_name(dev), ('A' + pin));
                /* Interrupt Line values above 0xF are forbidden */
                if (dev->irq > 0 && (dev->irq <= 0xF)) {
                        printk(" - using IRQ %d\n", dev->irq);
-                       acpi_register_gsi(dev->irq, ACPI_LEVEL_SENSITIVE, ACPI_ACTIVE_LOW);
+                       acpi_register_gsi(dev->irq, ACPI_LEVEL_SENSITIVE,
+                                         ACPI_ACTIVE_LOW);
                        return_VALUE(0);
-               }
-               else {
+               } else {
                        printk("\n");
                        return_VALUE(0);
                }
-       }
+       }
 
-       dev->irq = acpi_register_gsi(irq, edge_level, active_high_low);
+       rc = acpi_register_gsi(irq, edge_level, active_high_low);
+       if (rc < 0) {
+               printk(KERN_WARNING PREFIX "PCI Interrupt %s[%c]: failed "
+                      "to register GSI\n", pci_name(dev), ('A' + pin));
+               return_VALUE(rc);
+       }
+       dev->irq = rc;
 
        printk(KERN_INFO PREFIX "PCI Interrupt %s[%c] -> ",
-               pci_name(dev), 'A' + pin);
+              pci_name(dev), 'A' + pin);
 
        if (link)
                printk("Link [%s] -> ", link);
 
        printk("GSI %u (%s, %s) -> IRQ %d\n", irq,
-               (edge_level == ACPI_LEVEL_SENSITIVE) ? "level" : "edge",
-               (active_high_low == ACPI_ACTIVE_LOW) ? "low" : "high",
-               dev->irq);
+              (edge_level == ACPI_LEVEL_SENSITIVE) ? "level" : "edge",
+              (active_high_low == ACPI_ACTIVE_LOW) ? "low" : "high", dev->irq);
 
        return_VALUE(0);
 }
-EXPORT_SYMBOL(acpi_pci_irq_enable);
 
+EXPORT_SYMBOL(acpi_pci_irq_enable);
 
 /* FIXME: implement x86/x86_64 version */
-void __attribute__((weak)) acpi_unregister_gsi(u32 i) {}
+void __attribute__ ((weak)) acpi_unregister_gsi(u32 i)
+{
+}
 
-void
-acpi_pci_irq_disable (
-       struct pci_dev          *dev)
+void acpi_pci_irq_disable(struct pci_dev *dev)
 {
-       int                     gsi = 0;
-       u8                      pin = 0;
-       int                     edge_level = ACPI_LEVEL_SENSITIVE;
-       int                     active_high_low = ACPI_ACTIVE_LOW;
+       int gsi = 0;
+       u8 pin = 0;
+       int edge_level = ACPI_LEVEL_SENSITIVE;
+       int active_high_low = ACPI_ACTIVE_LOW;
 
        ACPI_FUNCTION_TRACE("acpi_pci_irq_disable");
 
-       if (!dev)
+       if (!dev || !dev->bus)
                return_VOID;
 
        pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
@@ -516,21 +508,20 @@ acpi_pci_irq_disable (
                return_VOID;
        pin--;
 
-       if (!dev->bus)
-               return_VOID;
-
        /*
         * First we check the PCI IRQ routing table (PRT) for an IRQ.
         */
-       gsi = acpi_pci_irq_lookup(dev->bus, PCI_SLOT(dev->devfn), pin,
-                       &edge_level, &active_high_low, NULL, acpi_pci_free_irq);
+       gsi = acpi_pci_irq_lookup(dev->bus, PCI_SLOT(dev->devfn), pin,
+                                 &edge_level, &active_high_low, NULL,
+                                 acpi_pci_free_irq);
        /*
         * If no PRT entry was found, we'll try to derive an IRQ from the
         * device's parent bridge.
         */
        if (gsi < 0)
-               gsi = acpi_pci_irq_derive(dev, pin,
-                       &edge_level, &active_high_low, NULL, acpi_pci_free_irq);
+               gsi = acpi_pci_irq_derive(dev, pin,
+                                         &edge_level, &active_high_low, NULL,
+                                         acpi_pci_free_irq);
        if (gsi < 0)
                return_VOID;
 
index 834c2ceff1aa4ba1864e2dfff84667384a33a72a..82292b77e5c681b874334913078926106546bb2f 100644 (file)
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define _COMPONENT             ACPI_PCI_COMPONENT
-ACPI_MODULE_NAME               ("pci_link")
-
+ACPI_MODULE_NAME("pci_link")
 #define ACPI_PCI_LINK_CLASS            "pci_irq_routing"
 #define ACPI_PCI_LINK_HID              "PNP0C0F"
 #define ACPI_PCI_LINK_DRIVER_NAME      "ACPI PCI Interrupt Link Driver"
 #define ACPI_PCI_LINK_DEVICE_NAME      "PCI Interrupt Link"
 #define ACPI_PCI_LINK_FILE_INFO                "info"
 #define ACPI_PCI_LINK_FILE_STATUS      "state"
-
 #define ACPI_PCI_LINK_MAX_POSSIBLE 16
-
-static int acpi_pci_link_add (struct acpi_device *device);
-static int acpi_pci_link_remove (struct acpi_device *device, int type);
+static int acpi_pci_link_add(struct acpi_device *device);
+static int acpi_pci_link_remove(struct acpi_device *device, int type);
 
 static struct acpi_driver acpi_pci_link_driver = {
-       .name =         ACPI_PCI_LINK_DRIVER_NAME,
-       .class =        ACPI_PCI_LINK_CLASS,
-       .ids =          ACPI_PCI_LINK_HID,
-       .ops =          {
-                               .add =    acpi_pci_link_add,
-                               .remove = acpi_pci_link_remove,
-                       },
+       .name = ACPI_PCI_LINK_DRIVER_NAME,
+       .class = ACPI_PCI_LINK_CLASS,
+       .ids = ACPI_PCI_LINK_HID,
+       .ops = {
+               .add = acpi_pci_link_add,
+               .remove = acpi_pci_link_remove,
+               },
 };
 
 /*
@@ -73,31 +69,30 @@ static struct acpi_driver acpi_pci_link_driver = {
  * later even the link is disable. Instead, we just repick the active irq
  */
 struct acpi_pci_link_irq {
-       u8                      active;                 /* Current IRQ */
-       u8                      edge_level;             /* All IRQs */
-       u8                      active_high_low;        /* All IRQs */
-       u8                      resource_type;
-       u8                      possible_count;
-       u8                      possible[ACPI_PCI_LINK_MAX_POSSIBLE];
-       u8                      initialized:1;
-       u8                      reserved:7;
+       u8 active;              /* Current IRQ */
+       u8 edge_level;          /* All IRQs */
+       u8 active_high_low;     /* All IRQs */
+       u8 resource_type;
+       u8 possible_count;
+       u8 possible[ACPI_PCI_LINK_MAX_POSSIBLE];
+       u8 initialized:1;
+       u8 reserved:7;
 };
 
 struct acpi_pci_link {
-       struct list_head        node;
-       struct acpi_device      *device;
-       acpi_handle             handle;
+       struct list_head node;
+       struct acpi_device *device;
+       acpi_handle handle;
        struct acpi_pci_link_irq irq;
-       int                     refcnt;
+       int refcnt;
 };
 
 static struct {
-       int                     count;
-       struct list_head        entries;
-}                              acpi_link;
+       int count;
+       struct list_head entries;
+} acpi_link;
 DECLARE_MUTEX(acpi_link_lock);
 
-
 /* --------------------------------------------------------------------------
                             PCI Link Device Management
    -------------------------------------------------------------------------- */
@@ -106,12 +101,10 @@ DECLARE_MUTEX(acpi_link_lock);
  * set context (link) possible list from resource list
  */
 static acpi_status
-acpi_pci_link_check_possible (
-       struct acpi_resource    *resource,
-       void                    *context)
+acpi_pci_link_check_possible(struct acpi_resource *resource, void *context)
 {
-       struct acpi_pci_link    *link = (struct acpi_pci_link *) context;
-       u32                     i = 0;
+       struct acpi_pci_link *link = (struct acpi_pci_link *)context;
+       u32 i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_pci_link_check_possible");
 
@@ -119,61 +112,68 @@ acpi_pci_link_check_possible (
        case ACPI_RSTYPE_START_DPF:
                return_ACPI_STATUS(AE_OK);
        case ACPI_RSTYPE_IRQ:
-       {
-               struct acpi_resource_irq *p = &resource->data.irq;
-               if (!p || !p->number_of_interrupts) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Blank IRQ resource\n"));
-                       return_ACPI_STATUS(AE_OK);
-               }
-               for (i = 0; (i<p->number_of_interrupts && i<ACPI_PCI_LINK_MAX_POSSIBLE); i++) {
-                       if (!p->interrupts[i]) {
-                               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid IRQ %d\n", p->interrupts[i]));
-                               continue;
+               {
+                       struct acpi_resource_irq *p = &resource->data.irq;
+                       if (!p || !p->number_of_interrupts) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                 "Blank IRQ resource\n"));
+                               return_ACPI_STATUS(AE_OK);
                        }
-                       link->irq.possible[i] = p->interrupts[i];
-                       link->irq.possible_count++;
+                       for (i = 0;
+                            (i < p->number_of_interrupts
+                             && i < ACPI_PCI_LINK_MAX_POSSIBLE); i++) {
+                               if (!p->interrupts[i]) {
+                                       ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                         "Invalid IRQ %d\n",
+                                                         p->interrupts[i]));
+                                       continue;
+                               }
+                               link->irq.possible[i] = p->interrupts[i];
+                               link->irq.possible_count++;
+                       }
+                       link->irq.edge_level = p->edge_level;
+                       link->irq.active_high_low = p->active_high_low;
+                       link->irq.resource_type = ACPI_RSTYPE_IRQ;
+                       break;
                }
-               link->irq.edge_level = p->edge_level;
-               link->irq.active_high_low = p->active_high_low;
-               link->irq.resource_type = ACPI_RSTYPE_IRQ;
-               break;
-       }
        case ACPI_RSTYPE_EXT_IRQ:
-       {
-               struct acpi_resource_ext_irq *p = &resource->data.extended_irq;
-               if (!p || !p->number_of_interrupts) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_WARN, 
-                               "Blank EXT IRQ resource\n"));
-                       return_ACPI_STATUS(AE_OK);
-               }
-               for (i = 0; (i<p->number_of_interrupts && i<ACPI_PCI_LINK_MAX_POSSIBLE); i++) {
-                       if (!p->interrupts[i]) {
-                               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid IRQ %d\n", p->interrupts[i]));
-                               continue;
+               {
+                       struct acpi_resource_ext_irq *p =
+                           &resource->data.extended_irq;
+                       if (!p || !p->number_of_interrupts) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                 "Blank EXT IRQ resource\n"));
+                               return_ACPI_STATUS(AE_OK);
+                       }
+                       for (i = 0;
+                            (i < p->number_of_interrupts
+                             && i < ACPI_PCI_LINK_MAX_POSSIBLE); i++) {
+                               if (!p->interrupts[i]) {
+                                       ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                         "Invalid IRQ %d\n",
+                                                         p->interrupts[i]));
+                                       continue;
+                               }
+                               link->irq.possible[i] = p->interrupts[i];
+                               link->irq.possible_count++;
                        }
-                       link->irq.possible[i] = p->interrupts[i];
-                       link->irq.possible_count++;
+                       link->irq.edge_level = p->edge_level;
+                       link->irq.active_high_low = p->active_high_low;
+                       link->irq.resource_type = ACPI_RSTYPE_EXT_IRQ;
+                       break;
                }
-               link->irq.edge_level = p->edge_level;
-               link->irq.active_high_low = p->active_high_low;
-               link->irq.resource_type = ACPI_RSTYPE_EXT_IRQ;
-               break;
-       }
        default:
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                       "Resource is not an IRQ entry\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Resource is not an IRQ entry\n"));
                return_ACPI_STATUS(AE_OK);
        }
 
        return_ACPI_STATUS(AE_CTRL_TERMINATE);
 }
 
-
-static int
-acpi_pci_link_get_possible (
-       struct acpi_pci_link    *link)
+static int acpi_pci_link_get_possible(struct acpi_pci_link *link)
 {
-       acpi_status             status;
+       acpi_status status;
 
        ACPI_FUNCTION_TRACE("acpi_pci_link_get_possible");
 
@@ -181,62 +181,60 @@ acpi_pci_link_get_possible (
                return_VALUE(-EINVAL);
 
        status = acpi_walk_resources(link->handle, METHOD_NAME__PRS,
-                       acpi_pci_link_check_possible, link);
+                                    acpi_pci_link_check_possible, link);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PRS\n"));
                return_VALUE(-ENODEV);
        }
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, 
-               "Found %d possible IRQs\n", link->irq.possible_count));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Found %d possible IRQs\n",
+                         link->irq.possible_count));
 
        return_VALUE(0);
 }
 
-
 static acpi_status
-acpi_pci_link_check_current (
-       struct acpi_resource    *resource,
-       void                    *context)
+acpi_pci_link_check_current(struct acpi_resource *resource, void *context)
 {
-       int                     *irq = (int *) context;
+       int *irq = (int *)context;
 
        ACPI_FUNCTION_TRACE("acpi_pci_link_check_current");
 
        switch (resource->id) {
        case ACPI_RSTYPE_IRQ:
-       {
-               struct acpi_resource_irq *p = &resource->data.irq;
-               if (!p || !p->number_of_interrupts) {
-                       /*
-                        * IRQ descriptors may have no IRQ# bits set,
-                        * particularly those those w/ _STA disabled
-                        */
-                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                               "Blank IRQ resource\n")); 
-                       return_ACPI_STATUS(AE_OK);
+               {
+                       struct acpi_resource_irq *p = &resource->data.irq;
+                       if (!p || !p->number_of_interrupts) {
+                               /*
+                                * IRQ descriptors may have no IRQ# bits set,
+                                * particularly those those w/ _STA disabled
+                                */
+                               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                                 "Blank IRQ resource\n"));
+                               return_ACPI_STATUS(AE_OK);
+                       }
+                       *irq = p->interrupts[0];
+                       break;
                }
-               *irq = p->interrupts[0];
-               break;
-       }
        case ACPI_RSTYPE_EXT_IRQ:
-       {
-               struct acpi_resource_ext_irq *p = &resource->data.extended_irq;
-               if (!p || !p->number_of_interrupts) {
-                       /*
-                        * extended IRQ descriptors must
-                        * return at least 1 IRQ
-                        */
-                       ACPI_DEBUG_PRINT((ACPI_DB_WARN,
-                               "Blank EXT IRQ resource\n"));
-                       return_ACPI_STATUS(AE_OK);
+               {
+                       struct acpi_resource_ext_irq *p =
+                           &resource->data.extended_irq;
+                       if (!p || !p->number_of_interrupts) {
+                               /*
+                                * extended IRQ descriptors must
+                                * return at least 1 IRQ
+                                */
+                               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                 "Blank EXT IRQ resource\n"));
+                               return_ACPI_STATUS(AE_OK);
+                       }
+                       *irq = p->interrupts[0];
+                       break;
                }
-               *irq = p->interrupts[0];
-               break;
-       }
        default:
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Resource isn't an IRQ\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Resource isn't an IRQ\n"));
                return_ACPI_STATUS(AE_OK);
        }
        return_ACPI_STATUS(AE_CTRL_TERMINATE);
@@ -249,13 +247,11 @@ acpi_pci_link_check_current (
  * 0 - success
  * !0 - failure
  */
-static int
-acpi_pci_link_get_current (
-       struct acpi_pci_link    *link)
+static int acpi_pci_link_get_current(struct acpi_pci_link *link)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       int                     irq = 0;
+       int result = 0;
+       acpi_status status = AE_OK;
+       int irq = 0;
 
        ACPI_FUNCTION_TRACE("acpi_pci_link_get_current");
 
@@ -269,7 +265,8 @@ acpi_pci_link_get_current (
                /* Query _STA, set link->device->status */
                result = acpi_bus_get_status(link->device);
                if (result) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unable to read status\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Unable to read status\n"));
                        goto end;
                }
 
@@ -284,7 +281,7 @@ acpi_pci_link_get_current (
         */
 
        status = acpi_walk_resources(link->handle, METHOD_NAME__CRS,
-                       acpi_pci_link_check_current, &irq);
+                                    acpi_pci_link_check_current, &irq);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _CRS\n"));
                result = -ENODEV;
@@ -300,58 +297,61 @@ acpi_pci_link_get_current (
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Link at IRQ %d \n", link->irq.active));
 
-end:
+      end:
        return_VALUE(result);
 }
 
-static int
-acpi_pci_link_set (
-       struct acpi_pci_link    *link,
-       int                     irq)
+static int acpi_pci_link_set(struct acpi_pci_link *link, int irq)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
+       int result = 0;
+       acpi_status status = AE_OK;
        struct {
-               struct acpi_resource    res;
-               struct acpi_resource    end;
-       }    *resource;
-       struct acpi_buffer      buffer = {0, NULL};
+               struct acpi_resource res;
+               struct acpi_resource end;
+       } *resource;
+       struct acpi_buffer buffer = { 0, NULL };
 
        ACPI_FUNCTION_TRACE("acpi_pci_link_set");
 
        if (!link || !irq)
                return_VALUE(-EINVAL);
 
-       resource = kmalloc( sizeof(*resource)+1, GFP_KERNEL);
-       if(!resource)
+       resource = kmalloc(sizeof(*resource) + 1, GFP_KERNEL);
+       if (!resource)
                return_VALUE(-ENOMEM);
 
-       memset(resource, 0, sizeof(*resource)+1);
-       buffer.length = sizeof(*resource) +1;
+       memset(resource, 0, sizeof(*resource) + 1);
+       buffer.length = sizeof(*resource) + 1;
        buffer.pointer = resource;
 
-       switch(link->irq.resource_type) {
+       switch (link->irq.resource_type) {
        case ACPI_RSTYPE_IRQ:
                resource->res.id = ACPI_RSTYPE_IRQ;
                resource->res.length = sizeof(struct acpi_resource);
                resource->res.data.irq.edge_level = link->irq.edge_level;
-               resource->res.data.irq.active_high_low = link->irq.active_high_low;
+               resource->res.data.irq.active_high_low =
+                   link->irq.active_high_low;
                if (link->irq.edge_level == ACPI_EDGE_SENSITIVE)
-                       resource->res.data.irq.shared_exclusive = ACPI_EXCLUSIVE;
+                       resource->res.data.irq.shared_exclusive =
+                           ACPI_EXCLUSIVE;
                else
                        resource->res.data.irq.shared_exclusive = ACPI_SHARED;
                resource->res.data.irq.number_of_interrupts = 1;
                resource->res.data.irq.interrupts[0] = irq;
                break;
-          
+
        case ACPI_RSTYPE_EXT_IRQ:
                resource->res.id = ACPI_RSTYPE_EXT_IRQ;
                resource->res.length = sizeof(struct acpi_resource);
-               resource->res.data.extended_irq.producer_consumer = ACPI_CONSUMER;
-               resource->res.data.extended_irq.edge_level = link->irq.edge_level;
-               resource->res.data.extended_irq.active_high_low = link->irq.active_high_low;
+               resource->res.data.extended_irq.producer_consumer =
+                   ACPI_CONSUMER;
+               resource->res.data.extended_irq.edge_level =
+                   link->irq.edge_level;
+               resource->res.data.extended_irq.active_high_low =
+                   link->irq.active_high_low;
                if (link->irq.edge_level == ACPI_EDGE_SENSITIVE)
-                       resource->res.data.irq.shared_exclusive = ACPI_EXCLUSIVE;
+                       resource->res.data.irq.shared_exclusive =
+                           ACPI_EXCLUSIVE;
                else
                        resource->res.data.irq.shared_exclusive = ACPI_SHARED;
                resource->res.data.extended_irq.number_of_interrupts = 1;
@@ -384,9 +384,9 @@ acpi_pci_link_set (
        }
        if (!link->device->status.enabled) {
                printk(KERN_WARNING PREFIX
-                       "%s [%s] disabled and referenced, BIOS bug.\n",
-                       acpi_device_name(link->device),
-                       acpi_device_bid(link->device));
+                      "%s [%s] disabled and referenced, BIOS bug.\n",
+                      acpi_device_name(link->device),
+                      acpi_device_bid(link->device));
        }
 
        /* Query _CRS, set link->irq.active */
@@ -404,22 +404,20 @@ acpi_pci_link_set (
                 * policy: when _CRS doesn't return what we just _SRS
                 * assume _SRS worked and override _CRS value.
                 */
-               printk(KERN_WARNING PREFIX 
-                       "%s [%s] BIOS reported IRQ %d, using IRQ %d\n",
-                       acpi_device_name(link->device),
-                       acpi_device_bid(link->device),
-                       link->irq.active, irq);
+               printk(KERN_WARNING PREFIX
+                      "%s [%s] BIOS reported IRQ %d, using IRQ %d\n",
+                      acpi_device_name(link->device),
+                      acpi_device_bid(link->device), link->irq.active, irq);
                link->irq.active = irq;
        }
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Set IRQ %d\n", link->irq.active));
-       
-end:
+
+      end:
        kfree(resource);
        return_VALUE(result);
 }
 
-
 /* --------------------------------------------------------------------------
                             PCI Link IRQ Management
    -------------------------------------------------------------------------- */
@@ -469,8 +467,8 @@ static int acpi_irq_penalty[ACPI_MAX_IRQS] = {
        PIRQ_PENALTY_ISA_ALWAYS,        /* IRQ0 timer */
        PIRQ_PENALTY_ISA_ALWAYS,        /* IRQ1 keyboard */
        PIRQ_PENALTY_ISA_ALWAYS,        /* IRQ2 cascade */
-       PIRQ_PENALTY_ISA_TYPICAL,       /* IRQ3 serial */
-       PIRQ_PENALTY_ISA_TYPICAL,       /* IRQ4 serial */
+       PIRQ_PENALTY_ISA_TYPICAL,       /* IRQ3 serial */
+       PIRQ_PENALTY_ISA_TYPICAL,       /* IRQ4 serial */
        PIRQ_PENALTY_ISA_TYPICAL,       /* IRQ5 sometimes SoundBlaster */
        PIRQ_PENALTY_ISA_TYPICAL,       /* IRQ6 */
        PIRQ_PENALTY_ISA_TYPICAL,       /* IRQ7 parallel, spurious */
@@ -482,15 +480,14 @@ static int acpi_irq_penalty[ACPI_MAX_IRQS] = {
        PIRQ_PENALTY_ISA_USED,  /* IRQ13 fpe, sometimes */
        PIRQ_PENALTY_ISA_USED,  /* IRQ14 ide0 */
        PIRQ_PENALTY_ISA_USED,  /* IRQ15 ide1 */
-                       /* >IRQ15 */
+       /* >IRQ15 */
 };
 
-int __init
-acpi_irq_penalty_init(void)
+int __init acpi_irq_penalty_init(void)
 {
-       struct list_head        *node = NULL;
-       struct acpi_pci_link    *link = NULL;
-       int                     i = 0;
+       struct list_head *node = NULL;
+       struct acpi_pci_link *link = NULL;
+       int i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_irq_penalty_init");
 
@@ -501,7 +498,8 @@ acpi_irq_penalty_init(void)
 
                link = list_entry(node, struct acpi_pci_link, node);
                if (!link) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid link context\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid link context\n"));
                        continue;
                }
 
@@ -510,15 +508,20 @@ acpi_irq_penalty_init(void)
                 * useful for breaking ties.
                 */
                if (link->irq.possible_count) {
-                       int penalty = PIRQ_PENALTY_PCI_POSSIBLE / link->irq.possible_count;
+                       int penalty =
+                           PIRQ_PENALTY_PCI_POSSIBLE /
+                           link->irq.possible_count;
 
                        for (i = 0; i < link->irq.possible_count; i++) {
                                if (link->irq.possible[i] < ACPI_MAX_ISA_IRQ)
-                                       acpi_irq_penalty[link->irq.possible[i]] += penalty;
+                                       acpi_irq_penalty[link->irq.
+                                                        possible[i]] +=
+                                           penalty;
                        }
 
                } else if (link->irq.active) {
-                       acpi_irq_penalty[link->irq.active] += PIRQ_PENALTY_PCI_POSSIBLE;
+                       acpi_irq_penalty[link->irq.active] +=
+                           PIRQ_PENALTY_PCI_POSSIBLE;
                }
        }
        /* Add a penalty for the SCI */
@@ -529,11 +532,10 @@ acpi_irq_penalty_init(void)
 
 static int acpi_irq_balance;   /* 0: static, 1: balance */
 
-static int acpi_pci_link_allocate(
-       struct acpi_pci_link    *link)
+static int acpi_pci_link_allocate(struct acpi_pci_link *link)
 {
-       int                     irq;
-       int                     i;
+       int irq;
+       int i;
 
        ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
 
@@ -557,7 +559,7 @@ static int acpi_pci_link_allocate(
        if (i == link->irq.possible_count) {
                if (acpi_strict)
                        printk(KERN_WARNING PREFIX "_CRS %d not found"
-                               " in _PRS\n", link->irq.active);
+                              " in _PRS\n", link->irq.active);
                link->irq.active = 0;
        }
 
@@ -576,23 +578,25 @@ static int acpi_pci_link_allocate(
                 * the use of IRQs 9, 10, 11, and >15.
                 */
                for (i = (link->irq.possible_count - 1); i >= 0; i--) {
-                       if (acpi_irq_penalty[irq] > acpi_irq_penalty[link->irq.possible[i]])
+                       if (acpi_irq_penalty[irq] >
+                           acpi_irq_penalty[link->irq.possible[i]])
                                irq = link->irq.possible[i];
                }
        }
 
        /* Attempt to enable the link device at this IRQ. */
        if (acpi_pci_link_set(link, irq)) {
-               printk(PREFIX "Unable to set IRQ for %s [%s] (likely buggy ACPI BIOS).\n"
-                               "Try pci=noacpi or acpi=off\n",
-                       acpi_device_name(link->device),
-                       acpi_device_bid(link->device));
+               printk(PREFIX
+                      "Unable to set IRQ for %s [%s] (likely buggy ACPI BIOS).\n"
+                      "Try pci=noacpi or acpi=off\n",
+                      acpi_device_name(link->device),
+                      acpi_device_bid(link->device));
                return_VALUE(-ENODEV);
        } else {
                acpi_irq_penalty[link->irq.active] += PIRQ_PENALTY_PCI_USING;
-               printk(PREFIX "%s [%s] enabled at IRQ %d\n", 
-                       acpi_device_name(link->device),
-                       acpi_device_bid(link->device), link->irq.active);
+               printk(PREFIX "%s [%s] enabled at IRQ %d\n",
+                      acpi_device_name(link->device),
+                      acpi_device_bid(link->device), link->irq.active);
        }
 
        link->irq.initialized = 1;
@@ -607,16 +611,13 @@ static int acpi_pci_link_allocate(
  */
 
 int
-acpi_pci_link_allocate_irq (
-       acpi_handle             handle,
-       int                     index,
-       int                     *edge_level,
-       int                     *active_high_low,
-       char                    **name)
+acpi_pci_link_allocate_irq(acpi_handle handle,
+                          int index,
+                          int *edge_level, int *active_high_low, char **name)
 {
-       int                     result = 0;
-       struct acpi_device      *device = NULL;
-       struct acpi_pci_link    *link = NULL;
+       int result = 0;
+       struct acpi_device *device = NULL;
+       struct acpi_pci_link *link = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_pci_link_allocate_irq");
 
@@ -626,7 +627,7 @@ acpi_pci_link_allocate_irq (
                return_VALUE(-1);
        }
 
-       link = (struct acpi_pci_link *) acpi_driver_data(device);
+       link = (struct acpi_pci_link *)acpi_driver_data(device);
        if (!link) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid link context\n"));
                return_VALUE(-1);
@@ -643,20 +644,24 @@ acpi_pci_link_allocate_irq (
                up(&acpi_link_lock);
                return_VALUE(-1);
        }
-          
+
        if (!link->irq.active) {
                up(&acpi_link_lock);
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Link active IRQ is 0!\n"));
                return_VALUE(-1);
        }
-       link->refcnt ++;
+       link->refcnt++;
        up(&acpi_link_lock);
 
-       if (edge_level) *edge_level = link->irq.edge_level;
-       if (active_high_low) *active_high_low = link->irq.active_high_low;
-       if (name) *name = acpi_device_bid(link->device);
+       if (edge_level)
+               *edge_level = link->irq.edge_level;
+       if (active_high_low)
+               *active_high_low = link->irq.active_high_low;
+       if (name)
+               *name = acpi_device_bid(link->device);
        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-               "Link %s is referenced\n", acpi_device_bid(link->device)));
+                         "Link %s is referenced\n",
+                         acpi_device_bid(link->device)));
        return_VALUE(link->irq.active);
 }
 
@@ -664,12 +669,11 @@ acpi_pci_link_allocate_irq (
  * We don't change link's irq information here.  After it is reenabled, we
  * continue use the info
  */
-int
-acpi_pci_link_free_irq(acpi_handle handle)
+int acpi_pci_link_free_irq(acpi_handle handle)
 {
-       struct acpi_device      *device = NULL;
-       struct acpi_pci_link    *link = NULL;
-       acpi_status             result;
+       struct acpi_device *device = NULL;
+       struct acpi_pci_link *link = NULL;
+       acpi_status result;
 
        ACPI_FUNCTION_TRACE("acpi_pci_link_free_irq");
 
@@ -679,7 +683,7 @@ acpi_pci_link_free_irq(acpi_handle handle)
                return_VALUE(-1);
        }
 
-       link = (struct acpi_pci_link *) acpi_driver_data(device);
+       link = (struct acpi_pci_link *)acpi_driver_data(device);
        if (!link) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid link context\n"));
                return_VALUE(-1);
@@ -691,7 +695,6 @@ acpi_pci_link_free_irq(acpi_handle handle)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Link isn't initialized\n"));
                return_VALUE(-1);
        }
-
 #ifdef FUTURE_USE
        /*
         * The Link reference count allows us to _DISable an unused link
@@ -702,10 +705,11 @@ acpi_pci_link_free_irq(acpi_handle handle)
         * to prevent duplicate acpi_pci_link_set()
         * which would harm some systems
         */
-       link->refcnt --;
+       link->refcnt--;
 #endif
        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-               "Link %s is dereferenced\n", acpi_device_bid(link->device)));
+                         "Link %s is dereferenced\n",
+                         acpi_device_bid(link->device)));
 
        if (link->refcnt == 0) {
                acpi_ut_evaluate_object(link->handle, "_DIS", 0, NULL);
@@ -713,18 +717,17 @@ acpi_pci_link_free_irq(acpi_handle handle)
        up(&acpi_link_lock);
        return_VALUE(link->irq.active);
 }
+
 /* --------------------------------------------------------------------------
                                  Driver Interface
    -------------------------------------------------------------------------- */
 
-static int
-acpi_pci_link_add (
-       struct acpi_device *device)
+static int acpi_pci_link_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       struct acpi_pci_link    *link = NULL;
-       int                     i = 0;
-       int                     found = 0;
+       int result = 0;
+       struct acpi_pci_link *link = NULL;
+       int i = 0;
+       int found = 0;
 
        ACPI_FUNCTION_TRACE("acpi_pci_link_add");
 
@@ -751,13 +754,12 @@ acpi_pci_link_add (
        acpi_pci_link_get_current(link);
 
        printk(PREFIX "%s [%s] (IRQs", acpi_device_name(device),
-               acpi_device_bid(device));
+              acpi_device_bid(device));
        for (i = 0; i < link->irq.possible_count; i++) {
                if (link->irq.active == link->irq.possible[i]) {
                        printk(" *%d", link->irq.possible[i]);
                        found = 1;
-               }
-               else
+               } else
                        printk(" %d", link->irq.possible[i]);
        }
 
@@ -766,7 +768,7 @@ acpi_pci_link_add (
        if (!found)
                printk(" *%d", link->irq.active);
 
-       if(!link->device->status.enabled)
+       if (!link->device->status.enabled)
                printk(", disabled.");
 
        printk("\n");
@@ -775,7 +777,7 @@ acpi_pci_link_add (
        list_add_tail(&link->node, &acpi_link.entries);
        acpi_link.count++;
 
-end:
+      end:
        /* disable all links -- to be activated on use */
        acpi_ut_evaluate_object(link->handle, "_DIS", 0, NULL);
        up(&acpi_link_lock);
@@ -786,9 +788,7 @@ end:
        return_VALUE(result);
 }
 
-static int
-acpi_pci_link_resume(
-       struct acpi_pci_link *link)
+static int acpi_pci_link_resume(struct acpi_pci_link *link)
 {
        ACPI_FUNCTION_TRACE("acpi_pci_link_resume");
 
@@ -803,12 +803,10 @@ acpi_pci_link_resume(
  * after every device calls pci_disable_device in .resume.
  */
 int acpi_in_resume;
-static int
-irqrouter_resume(
-       struct sys_device *dev)
+static int irqrouter_resume(struct sys_device *dev)
 {
-       struct list_head        *node = NULL;
-       struct acpi_pci_link    *link = NULL;
+       struct list_head *node = NULL;
+       struct acpi_pci_link *link = NULL;
 
        ACPI_FUNCTION_TRACE("irqrouter_resume");
 
@@ -817,7 +815,7 @@ irqrouter_resume(
                link = list_entry(node, struct acpi_pci_link, node);
                if (!link) {
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                               "Invalid link context\n"));
+                                         "Invalid link context\n"));
                        continue;
                }
                acpi_pci_link_resume(link);
@@ -826,11 +824,7 @@ irqrouter_resume(
        return_VALUE(0);
 }
 
-
-static int
-acpi_pci_link_remove (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_pci_link_remove(struct acpi_device *device, int type)
 {
        struct acpi_pci_link *link = NULL;
 
@@ -839,7 +833,7 @@ acpi_pci_link_remove (
        if (!device || !acpi_driver_data(device))
                return_VALUE(-EINVAL);
 
-       link = (struct acpi_pci_link *) acpi_driver_data(device);
+       link = (struct acpi_pci_link *)acpi_driver_data(device);
 
        down(&acpi_link_lock);
        list_del(&link->node);
@@ -861,14 +855,14 @@ static int __init acpi_irq_penalty_update(char *str, int used)
                int retval;
                int irq;
 
-               retval = get_option(&str,&irq);
+               retval = get_option(&str, &irq);
 
                if (!retval)
                        break;  /* no number found */
 
                if (irq < 0)
                        continue;
-               
+
                if (irq >= ACPI_MAX_IRQS)
                        continue;
 
@@ -907,6 +901,7 @@ static int __init acpi_irq_isa(char *str)
 {
        return acpi_irq_penalty_update(str, 1);
 }
+
 __setup("acpi_irq_isa=", acpi_irq_isa);
 
 /*
@@ -918,6 +913,7 @@ static int __init acpi_irq_pci(char *str)
 {
        return acpi_irq_penalty_update(str, 0);
 }
+
 __setup("acpi_irq_pci=", acpi_irq_pci);
 
 static int __init acpi_irq_nobalance_set(char *str)
@@ -925,6 +921,7 @@ static int __init acpi_irq_nobalance_set(char *str)
        acpi_irq_balance = 0;
        return 1;
 }
+
 __setup("acpi_irq_nobalance", acpi_irq_nobalance_set);
 
 int __init acpi_irq_balance_set(char *str)
@@ -932,22 +929,20 @@ int __init acpi_irq_balance_set(char *str)
        acpi_irq_balance = 1;
        return 1;
 }
-__setup("acpi_irq_balance", acpi_irq_balance_set);
 
+__setup("acpi_irq_balance", acpi_irq_balance_set);
 
 /* FIXME: we will remove this interface after all drivers call pci_disable_device */
 static struct sysdev_class irqrouter_sysdev_class = {
-        set_kset_name("irqrouter"),
-        .resume = irqrouter_resume,
+       set_kset_name("irqrouter"),
+       .resume = irqrouter_resume,
 };
 
-
 static struct sys_device device_irqrouter = {
-       .id     = 0,
-       .cls    = &irqrouter_sysdev_class,
+       .id = 0,
+       .cls = &irqrouter_sysdev_class,
 };
 
-
 static int __init irqrouter_init_sysfs(void)
 {
        int error;
@@ -962,12 +957,11 @@ static int __init irqrouter_init_sysfs(void)
                error = sysdev_register(&device_irqrouter);
 
        return_VALUE(error);
-}                                        
+}
 
 device_initcall(irqrouter_init_sysfs);
 
-
-static int __init acpi_pci_link_init (void)
+static int __init acpi_pci_link_init(void)
 {
        ACPI_FUNCTION_TRACE("acpi_pci_link_init");
 
index 5d2f77fcd50c7a2992a3f7957a1862ac33da1f8d..0fd9988c283d199f3a3d5d9a6f14369198d73474 100644 (file)
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define _COMPONENT             ACPI_PCI_COMPONENT
-ACPI_MODULE_NAME               ("pci_root")
-
+ACPI_MODULE_NAME("pci_root")
 #define ACPI_PCI_ROOT_CLASS            "pci_bridge"
 #define ACPI_PCI_ROOT_HID              "PNP0A03"
 #define ACPI_PCI_ROOT_DRIVER_NAME      "ACPI PCI Root Bridge Driver"
 #define ACPI_PCI_ROOT_DEVICE_NAME      "PCI Root Bridge"
-
-static int acpi_pci_root_add (struct acpi_device *device);
-static int acpi_pci_root_remove (struct acpi_device *device, int type);
-static int acpi_pci_root_start (struct acpi_device *device);
+static int acpi_pci_root_add(struct acpi_device *device);
+static int acpi_pci_root_remove(struct acpi_device *device, int type);
+static int acpi_pci_root_start(struct acpi_device *device);
 
 static struct acpi_driver acpi_pci_root_driver = {
-       .name =         ACPI_PCI_ROOT_DRIVER_NAME,
-       .class =        ACPI_PCI_ROOT_CLASS,
-       .ids =          ACPI_PCI_ROOT_HID,
-       .ops =          {
-                               .add =    acpi_pci_root_add,
-                               .remove = acpi_pci_root_remove,
-                               .start =  acpi_pci_root_start,
-                       },
+       .name = ACPI_PCI_ROOT_DRIVER_NAME,
+       .class = ACPI_PCI_ROOT_CLASS,
+       .ids = ACPI_PCI_ROOT_HID,
+       .ops = {
+               .add = acpi_pci_root_add,
+               .remove = acpi_pci_root_remove,
+               .start = acpi_pci_root_start,
+               },
 };
 
 struct acpi_pci_root {
-       struct list_head        node;
-       acpi_handle             handle;
-       struct acpi_pci_id      id;
-       struct pci_bus          *bus;
+       struct list_head node;
+       acpi_handle handle;
+       struct acpi_pci_id id;
+       struct pci_bus *bus;
 };
 
 static LIST_HEAD(acpi_pci_roots);
@@ -92,6 +89,7 @@ int acpi_pci_register_driver(struct acpi_pci_driver *driver)
 
        return n;
 }
+
 EXPORT_SYMBOL(acpi_pci_register_driver);
 
 void acpi_pci_unregister_driver(struct acpi_pci_driver *driver)
@@ -115,10 +113,11 @@ void acpi_pci_unregister_driver(struct acpi_pci_driver *driver)
                driver->remove(root->handle);
        }
 }
+
 EXPORT_SYMBOL(acpi_pci_unregister_driver);
 
 static acpi_status
-get_root_bridge_busnr_callback (struct acpi_resource *resource, void *data)
+get_root_bridge_busnr_callback(struct acpi_resource *resource, void *data)
 {
        int *busnr = (int *)data;
        struct acpi_resource_address64 address;
@@ -129,20 +128,21 @@ get_root_bridge_busnr_callback (struct acpi_resource *resource, void *data)
                return AE_OK;
 
        acpi_resource_to_address64(resource, &address);
-       if ((address.address_length > 0) && 
-          (address.resource_type == ACPI_BUS_NUMBER_RANGE))
+       if ((address.address_length > 0) &&
+           (address.resource_type == ACPI_BUS_NUMBER_RANGE))
                *busnr = address.min_address_range;
 
        return AE_OK;
 }
 
-static acpi_status 
-try_get_root_bridge_busnr(acpi_handle handle, int *busnum)
+static acpi_status try_get_root_bridge_busnr(acpi_handle handle, int *busnum)
 {
        acpi_status status;
 
        *busnum = -1;
-       status = acpi_walk_resources(handle, METHOD_NAME__CRS, get_root_bridge_busnr_callback, busnum);
+       status =
+           acpi_walk_resources(handle, METHOD_NAME__CRS,
+                               get_root_bridge_busnr_callback, busnum);
        if (ACPI_FAILURE(status))
                return status;
        /* Check if we really get a bus number from _CRS */
@@ -151,16 +151,14 @@ try_get_root_bridge_busnr(acpi_handle handle, int *busnum)
        return AE_OK;
 }
 
-static int
-acpi_pci_root_add (
-       struct acpi_device      *device)
+static int acpi_pci_root_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       struct acpi_pci_root    *root = NULL;
-       struct acpi_pci_root    *tmp;
-       acpi_status             status = AE_OK;
-       unsigned long           value = 0;
-       acpi_handle             handle = NULL;
+       int result = 0;
+       struct acpi_pci_root *root = NULL;
+       struct acpi_pci_root *tmp;
+       acpi_status status = AE_OK;
+       unsigned long value = 0;
+       acpi_handle handle = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_pci_root_add");
 
@@ -188,15 +186,15 @@ acpi_pci_root_add (
         * -------
         * Obtained via _SEG, if exists, otherwise assumed to be zero (0).
         */
-       status = acpi_evaluate_integer(root->handle, METHOD_NAME__SEG, NULL, 
-               &value);
+       status = acpi_evaluate_integer(root->handle, METHOD_NAME__SEG, NULL,
+                                      &value);
        switch (status) {
        case AE_OK:
                root->id.segment = (u16) value;
                break;
        case AE_NOT_FOUND:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, 
-                       "Assuming segment 0 (no _SEG)\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Assuming segment 0 (no _SEG)\n"));
                root->id.segment = 0;
                break;
        default:
@@ -210,8 +208,8 @@ acpi_pci_root_add (
         * ---
         * Obtained via _BBN, if exists, otherwise assumed to be zero (0).
         */
-       status = acpi_evaluate_integer(root->handle, METHOD_NAME__BBN, NULL, 
-               &value);
+       status = acpi_evaluate_integer(root->handle, METHOD_NAME__BBN, NULL,
+                                      &value);
        switch (status) {
        case AE_OK:
                root->id.bus = (u16) value;
@@ -229,18 +227,19 @@ acpi_pci_root_add (
        /* Some systems have wrong _BBN */
        list_for_each_entry(tmp, &acpi_pci_roots, node) {
                if ((tmp->id.segment == root->id.segment)
-                               && (tmp->id.bus == root->id.bus)) {
+                   && (tmp->id.bus == root->id.bus)) {
                        int bus = 0;
                        acpi_status status;
 
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                               "Wrong _BBN value, please reboot and using option 'pci=noacpi'\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Wrong _BBN value, please reboot and using option 'pci=noacpi'\n"));
 
                        status = try_get_root_bridge_busnr(root->handle, &bus);
                        if (ACPI_FAILURE(status))
                                break;
                        if (bus != root->id.bus) {
-                               printk(KERN_INFO PREFIX "PCI _CRS %d overrides _BBN 0\n", bus);
+                               printk(KERN_INFO PREFIX
+                                      "PCI _CRS %d overrides _BBN 0\n", bus);
                                root->id.bus = bus;
                        }
                        break;
@@ -258,12 +257,12 @@ acpi_pci_root_add (
         * TBD: Need PCI interface for enumeration/configuration of roots.
         */
 
-       /* TBD: Locking */
-       list_add_tail(&root->node, &acpi_pci_roots);
+       /* TBD: Locking */
+       list_add_tail(&root->node, &acpi_pci_roots);
 
-       printk(KERN_INFO PREFIX "%s [%s] (%04x:%02x)\n", 
-               acpi_device_name(device), acpi_device_bid(device),
-               root->id.segment, root->id.bus);
+       printk(KERN_INFO PREFIX "%s [%s] (%04x:%02x)\n",
+              acpi_device_name(device), acpi_device_bid(device),
+              root->id.segment, root->id.bus);
 
        /*
         * Scan the Root Bridge
@@ -274,9 +273,9 @@ acpi_pci_root_add (
         */
        root->bus = pci_acpi_scan_root(device, root->id.segment, root->id.bus);
        if (!root->bus) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                       "Bus %04x:%02x not present in PCI namespace\n", 
-                       root->id.segment, root->id.bus));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Bus %04x:%02x not present in PCI namespace\n",
+                                 root->id.segment, root->id.bus));
                result = -ENODEV;
                goto end;
        }
@@ -298,9 +297,9 @@ acpi_pci_root_add (
        status = acpi_get_handle(root->handle, METHOD_NAME__PRT, &handle);
        if (ACPI_SUCCESS(status))
                result = acpi_pci_irq_add_prt(root->handle, root->id.segment,
-                       root->id.bus);
+                                             root->id.bus);
 
-end:
+      end:
        if (result) {
                if (!list_empty(&root->node))
                        list_del(&root->node);
@@ -310,11 +309,9 @@ end:
        return_VALUE(result);
 }
 
-static int
-acpi_pci_root_start (
-       struct acpi_device      *device)
+static int acpi_pci_root_start(struct acpi_device *device)
 {
-       struct acpi_pci_root    *root;
+       struct acpi_pci_root *root;
 
        ACPI_FUNCTION_TRACE("acpi_pci_root_start");
 
@@ -327,27 +324,23 @@ acpi_pci_root_start (
        return_VALUE(-ENODEV);
 }
 
-static int
-acpi_pci_root_remove (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_pci_root_remove(struct acpi_device *device, int type)
 {
-       struct acpi_pci_root    *root = NULL;
+       struct acpi_pci_root *root = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_pci_root_remove");
 
        if (!device || !acpi_driver_data(device))
                return_VALUE(-EINVAL);
 
-       root = (struct acpi_pci_root *) acpi_driver_data(device);
+       root = (struct acpi_pci_root *)acpi_driver_data(device);
 
        kfree(root);
 
        return_VALUE(0);
 }
 
-
-static int __init acpi_pci_root_init (void)
+static int __init acpi_pci_root_init(void)
 {
        ACPI_FUNCTION_TRACE("acpi_pci_root_init");
 
@@ -355,8 +348,8 @@ static int __init acpi_pci_root_init (void)
                return_VALUE(0);
 
        /* DEBUG:
-       acpi_dbg_layer = ACPI_PCI_COMPONENT;
-       acpi_dbg_level = 0xFFFFFFFF;
+          acpi_dbg_layer = ACPI_PCI_COMPONENT;
+          acpi_dbg_level = 0xFFFFFFFF;
         */
 
        if (acpi_bus_register_driver(&acpi_pci_root_driver) < 0)
@@ -366,4 +359,3 @@ static int __init acpi_pci_root_init (void)
 }
 
 subsys_initcall(acpi_pci_root_init);
-
index 373a3a95bb4e1b6d642b4f0e49ac96e18c1b5031..62a5595ed8bc7551e7951b12dabb283662633b7f 100644 (file)
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define _COMPONENT             ACPI_POWER_COMPONENT
-ACPI_MODULE_NAME               ("acpi_power")
-
+ACPI_MODULE_NAME("acpi_power")
 #define ACPI_POWER_COMPONENT           0x00800000
 #define ACPI_POWER_CLASS               "power_resource"
 #define ACPI_POWER_DRIVER_NAME         "ACPI Power Resource Driver"
@@ -57,38 +55,36 @@ ACPI_MODULE_NAME            ("acpi_power")
 #define ACPI_POWER_RESOURCE_STATE_OFF  0x00
 #define ACPI_POWER_RESOURCE_STATE_ON   0x01
 #define ACPI_POWER_RESOURCE_STATE_UNKNOWN 0xFF
-
-static int acpi_power_add (struct acpi_device *device);
-static int acpi_power_remove (struct acpi_device *device, int type);
+static int acpi_power_add(struct acpi_device *device);
+static int acpi_power_remove(struct acpi_device *device, int type);
 static int acpi_power_open_fs(struct inode *inode, struct file *file);
 
 static struct acpi_driver acpi_power_driver = {
-       .name =         ACPI_POWER_DRIVER_NAME,
-       .class =        ACPI_POWER_CLASS,
-       .ids =          ACPI_POWER_HID,
-       .ops =          {
-                               .add =          acpi_power_add,
-                               .remove =       acpi_power_remove,
-                       },
+       .name = ACPI_POWER_DRIVER_NAME,
+       .class = ACPI_POWER_CLASS,
+       .ids = ACPI_POWER_HID,
+       .ops = {
+               .add = acpi_power_add,
+               .remove = acpi_power_remove,
+               },
 };
 
-struct acpi_power_resource
-{
-       acpi_handle             handle;
-       acpi_bus_id             name;
-       u32                     system_level;
-       u32                     order;
-       int                     state;
-       int                     references;
+struct acpi_power_resource {
+       acpi_handle handle;
+       acpi_bus_id name;
+       u32 system_level;
+       u32 order;
+       int state;
+       int references;
 };
 
-static struct list_head                acpi_power_resource_list;
+static struct list_head acpi_power_resource_list;
 
 static struct file_operations acpi_power_fops = {
-       .open           = acpi_power_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_power_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 /* --------------------------------------------------------------------------
@@ -96,12 +92,11 @@ static struct file_operations acpi_power_fops = {
    -------------------------------------------------------------------------- */
 
 static int
-acpi_power_get_context (
-       acpi_handle             handle,
-       struct acpi_power_resource **resource)
+acpi_power_get_context(acpi_handle handle,
+                      struct acpi_power_resource **resource)
 {
-       int                     result = 0;
-       struct acpi_device      *device = NULL;
+       int result = 0;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_power_get_context");
 
@@ -111,24 +106,21 @@ acpi_power_get_context (
        result = acpi_bus_get_device(handle, &device);
        if (result) {
                ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Error getting context [%p]\n",
-                       handle));
+                                 handle));
                return_VALUE(result);
        }
 
-       *resource = (struct acpi_power_resource *) acpi_driver_data(device);
+       *resource = (struct acpi_power_resource *)acpi_driver_data(device);
        if (!resource)
                return_VALUE(-ENODEV);
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_power_get_state (
-       struct acpi_power_resource *resource)
+static int acpi_power_get_state(struct acpi_power_resource *resource)
 {
-       acpi_status             status = AE_OK;
-       unsigned long           sta = 0;
+       acpi_status status = AE_OK;
+       unsigned long sta = 0;
 
        ACPI_FUNCTION_TRACE("acpi_power_get_state");
 
@@ -145,20 +137,16 @@ acpi_power_get_state (
                resource->state = ACPI_POWER_RESOURCE_STATE_OFF;
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Resource [%s] is %s\n",
-               resource->name, resource->state?"on":"off"));
+                         resource->name, resource->state ? "on" : "off"));
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_power_get_list_state (
-       struct acpi_handle_list *list,
-       int                     *state)
+static int acpi_power_get_list_state(struct acpi_handle_list *list, int *state)
 {
-       int                     result = 0;
+       int result = 0;
        struct acpi_power_resource *resource = NULL;
-       u32                     i = 0;
+       u32 i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_power_get_list_state");
 
@@ -167,7 +155,7 @@ acpi_power_get_list_state (
 
        /* The state of the list is 'on' IFF all resources are 'on'. */
 
-       for (i=0; i<list->count; i++) {
+       for (i = 0; i < list->count; i++) {
                result = acpi_power_get_context(list->handles[i], &resource);
                if (result)
                        return_VALUE(result);
@@ -182,19 +170,16 @@ acpi_power_get_list_state (
        }
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Resource list is %s\n",
-               *state?"on":"off"));
+                         *state ? "on" : "off"));
 
        return_VALUE(result);
 }
 
-
-static int
-acpi_power_on (
-       acpi_handle             handle)
+static int acpi_power_on(acpi_handle handle)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_device      *device = NULL;
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_device *device = NULL;
        struct acpi_power_resource *resource = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_power_on");
@@ -205,10 +190,10 @@ acpi_power_on (
 
        resource->references++;
 
-       if ((resource->references > 1) 
-               || (resource->state == ACPI_POWER_RESOURCE_STATE_ON)) {
+       if ((resource->references > 1)
+           || (resource->state == ACPI_POWER_RESOURCE_STATE_ON)) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Resource [%s] already on\n",
-                       resource->name));
+                                 resource->name));
                return_VALUE(0);
        }
 
@@ -229,19 +214,16 @@ acpi_power_on (
        device->power.state = ACPI_STATE_D0;
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Resource [%s] turned on\n",
-               resource->name));
+                         resource->name));
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_power_off_device (
-       acpi_handle             handle)
+static int acpi_power_off_device(acpi_handle handle)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_device      *device = NULL;
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_device *device = NULL;
        struct acpi_power_resource *resource = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_power_off_device");
@@ -254,15 +236,15 @@ acpi_power_off_device (
                resource->references--;
 
        if (resource->references) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, 
-                       "Resource [%s] is still in use, dereferencing\n",
-                       device->pnp.bus_id));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Resource [%s] is still in use, dereferencing\n",
+                                 device->pnp.bus_id));
                return_VALUE(0);
        }
 
        if (resource->state == ACPI_POWER_RESOURCE_STATE_OFF) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Resource [%s] already off\n",
-                       device->pnp.bus_id));
+                                 device->pnp.bus_id));
                return_VALUE(0);
        }
 
@@ -283,7 +265,7 @@ acpi_power_off_device (
        device->power.state = ACPI_STATE_D3;
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Resource [%s] turned off\n",
-               resource->name));
+                         resource->name));
 
        return_VALUE(0);
 }
@@ -293,13 +275,13 @@ acpi_power_off_device (
  * 1. Power on the power resources required for the wakeup device 
  * 2. Enable _PSW (power state wake) for the device if present
  */
-int acpi_enable_wakeup_device_power (struct acpi_device *dev)
+int acpi_enable_wakeup_device_power(struct acpi_device *dev)
 {
-       union acpi_object               arg = {ACPI_TYPE_INTEGER};
-       struct acpi_object_list arg_list = {1, &arg};
-       acpi_status                     status = AE_OK;
-       int                                     i;
-       int                                     ret = 0;
+       union acpi_object arg = { ACPI_TYPE_INTEGER };
+       struct acpi_object_list arg_list = { 1, &arg };
+       acpi_status status = AE_OK;
+       int i;
+       int ret = 0;
 
        ACPI_FUNCTION_TRACE("acpi_enable_wakeup_device_power");
        if (!dev || !dev->wakeup.flags.valid)
@@ -310,8 +292,8 @@ int acpi_enable_wakeup_device_power (struct acpi_device *dev)
        for (i = 0; i < dev->wakeup.resources.count; i++) {
                ret = acpi_power_on(dev->wakeup.resources.handles[i]);
                if (ret) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                               "Error transition power state\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Error transition power state\n"));
                        dev->wakeup.flags.valid = 0;
                        return_VALUE(-1);
                }
@@ -333,20 +315,20 @@ int acpi_enable_wakeup_device_power (struct acpi_device *dev)
  * 1. Disable _PSW (power state wake)
  * 2. Shutdown down the power resources
  */
-int acpi_disable_wakeup_device_power (struct acpi_device *dev)
+int acpi_disable_wakeup_device_power(struct acpi_device *dev)
 {
-       union acpi_object               arg = {ACPI_TYPE_INTEGER};
-       struct acpi_object_list arg_list = {1, &arg};
-       acpi_status                     status = AE_OK;
-       int                                     i;
-       int                                     ret = 0;
+       union acpi_object arg = { ACPI_TYPE_INTEGER };
+       struct acpi_object_list arg_list = { 1, &arg };
+       acpi_status status = AE_OK;
+       int i;
+       int ret = 0;
 
        ACPI_FUNCTION_TRACE("acpi_disable_wakeup_device_power");
 
        if (!dev || !dev->wakeup.flags.valid)
                return_VALUE(-1);
 
-       arg.integer.value = 0;  
+       arg.integer.value = 0;
        /* Execute PSW */
        status = acpi_evaluate_object(dev->handle, "_PSW", &arg_list, NULL);
        if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
@@ -359,8 +341,8 @@ int acpi_disable_wakeup_device_power (struct acpi_device *dev)
        for (i = 0; i < dev->wakeup.resources.count; i++) {
                ret = acpi_power_off_device(dev->wakeup.resources.handles[i]);
                if (ret) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                               "Error transition power state\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Error transition power state\n"));
                        dev->wakeup.flags.valid = 0;
                        return_VALUE(-1);
                }
@@ -373,14 +355,12 @@ int acpi_disable_wakeup_device_power (struct acpi_device *dev)
                              Device Power Management
    -------------------------------------------------------------------------- */
 
-int
-acpi_power_get_inferred_state (
-       struct acpi_device      *device)
+int acpi_power_get_inferred_state(struct acpi_device *device)
 {
-       int                     result = 0;
-       struct acpi_handle_list *list = NULL;
-       int                     list_state = 0;
-       int                     i = 0;
+       int result = 0;
+       struct acpi_handle_list *list = NULL;
+       int list_state = 0;
+       int i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_power_get_inferred_state");
 
@@ -393,7 +373,7 @@ acpi_power_get_inferred_state (
         * We know a device's inferred power state when all the resources
         * required for a given D-state are 'on'.
         */
-       for (i=ACPI_STATE_D0; i<ACPI_STATE_D3; i++) {
+       for (i = ACPI_STATE_D0; i < ACPI_STATE_D3; i++) {
                list = &device->power.states[i].resources;
                if (list->count < 1)
                        continue;
@@ -413,23 +393,20 @@ acpi_power_get_inferred_state (
        return_VALUE(0);
 }
 
-
-int
-acpi_power_transition (
-       struct acpi_device      *device,
-       int                     state)
+int acpi_power_transition(struct acpi_device *device, int state)
 {
-       int                     result = 0;
-       struct acpi_handle_list *cl = NULL;     /* Current Resources */
-       struct acpi_handle_list *tl = NULL;     /* Target Resources */
-       int                     i = 0;
+       int result = 0;
+       struct acpi_handle_list *cl = NULL;     /* Current Resources */
+       struct acpi_handle_list *tl = NULL;     /* Target Resources */
+       int i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_power_transition");
 
        if (!device || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3))
                return_VALUE(-EINVAL);
 
-       if ((device->power.state < ACPI_STATE_D0) || (device->power.state > ACPI_STATE_D3))
+       if ((device->power.state < ACPI_STATE_D0)
+           || (device->power.state > ACPI_STATE_D3))
                return_VALUE(-ENODEV);
 
        cl = &device->power.states[device->power.state].resources;
@@ -448,7 +425,7 @@ acpi_power_transition (
         * First we reference all power resources required in the target list
         * (e.g. so the device doesn't lose power while transitioning).
         */
-       for (i=0; i<tl->count; i++) {
+       for (i = 0; i < tl->count; i++) {
                result = acpi_power_on(tl->handles[i]);
                if (result)
                        goto end;
@@ -457,7 +434,7 @@ acpi_power_transition (
        /*
         * Then we dereference all power resources used in the current list.
         */
-       for (i=0; i<cl->count; i++) {
+       for (i = 0; i < cl->count; i++) {
                result = acpi_power_off_device(cl->handles[i]);
                if (result)
                        goto end;
@@ -465,21 +442,20 @@ acpi_power_transition (
 
        /* We shouldn't change the state till all above operations succeed */
        device->power.state = state;
-end:
+      end:
        if (result)
-               ACPI_DEBUG_PRINT((ACPI_DB_WARN, 
-                       "Error transitioning device [%s] to D%d\n",
-                       device->pnp.bus_id, state));
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Error transitioning device [%s] to D%d\n",
+                                 device->pnp.bus_id, state));
 
        return_VALUE(result);
 }
 
-
 /* --------------------------------------------------------------------------
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-static struct proc_dir_entry   *acpi_power_dir;
+static struct proc_dir_entry *acpi_power_dir;
 
 static int acpi_power_seq_show(struct seq_file *seq, void *offset)
 {
@@ -506,13 +482,12 @@ static int acpi_power_seq_show(struct seq_file *seq, void *offset)
        }
 
        seq_printf(seq, "system level:            S%d\n"
-                       "order:                   %d\n"
-                       "reference count:         %d\n",
-                       resource->system_level,
-                       resource->order,
-                       resource->references);
+                  "order:                   %d\n"
+                  "reference count:         %d\n",
+                  resource->system_level,
+                  resource->order, resource->references);
 
-end:
+      end:
        return_VALUE(0);
 }
 
@@ -521,11 +496,9 @@ static int acpi_power_open_fs(struct inode *inode, struct file *file)
        return single_open(file, acpi_power_seq_show, PDE(inode)->data);
 }
 
-static int
-acpi_power_add_fs (
-       struct acpi_device      *device)
+static int acpi_power_add_fs(struct acpi_device *device)
 {
-       struct proc_dir_entry   *entry = NULL;
+       struct proc_dir_entry *entry = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_power_add_fs");
 
@@ -534,18 +507,18 @@ acpi_power_add_fs (
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
-                       acpi_power_dir);
+                                                    acpi_power_dir);
                if (!acpi_device_dir(device))
                        return_VALUE(-ENODEV);
        }
 
        /* 'status' [R] */
        entry = create_proc_entry(ACPI_POWER_FILE_STATUS,
-               S_IRUGO, acpi_device_dir(device));
+                                 S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_POWER_FILE_STATUS));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_POWER_FILE_STATUS));
        else {
                entry->proc_fops = &acpi_power_fops;
                entry->data = acpi_driver_data(device);
@@ -554,10 +527,7 @@ acpi_power_add_fs (
        return_VALUE(0);
 }
 
-
-static int
-acpi_power_remove_fs (
-       struct acpi_device      *device)
+static int acpi_power_remove_fs(struct acpi_device *device)
 {
        ACPI_FUNCTION_TRACE("acpi_power_remove_fs");
 
@@ -571,20 +541,17 @@ acpi_power_remove_fs (
        return_VALUE(0);
 }
 
-
 /* --------------------------------------------------------------------------
                                 Driver Interface
    -------------------------------------------------------------------------- */
 
-static int
-acpi_power_add (
-       struct acpi_device      *device)
+static int acpi_power_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
+       int result = 0;
+       acpi_status status = AE_OK;
        struct acpi_power_resource *resource = NULL;
-       union acpi_object       acpi_object;
-       struct acpi_buffer      buffer = {sizeof(acpi_object), &acpi_object};
+       union acpi_object acpi_object;
+       struct acpi_buffer buffer = { sizeof(acpi_object), &acpi_object };
 
        ACPI_FUNCTION_TRACE("acpi_power_add");
 
@@ -630,22 +597,18 @@ acpi_power_add (
        result = acpi_power_add_fs(device);
        if (result)
                goto end;
-       
+
        printk(KERN_INFO PREFIX "%s [%s] (%s)\n", acpi_device_name(device),
-               acpi_device_bid(device), resource->state?"on":"off");
+              acpi_device_bid(device), resource->state ? "on" : "off");
 
-end:
+      end:
        if (result)
                kfree(resource);
-       
+
        return_VALUE(result);
 }
 
-
-static int
-acpi_power_remove (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_power_remove(struct acpi_device *device, int type)
 {
        struct acpi_power_resource *resource = NULL;
 
@@ -654,7 +617,7 @@ acpi_power_remove (
        if (!device || !acpi_driver_data(device))
                return_VALUE(-EINVAL);
 
-       resource = (struct acpi_power_resource *) acpi_driver_data(device);
+       resource = (struct acpi_power_resource *)acpi_driver_data(device);
 
        acpi_power_remove_fs(device);
 
@@ -663,10 +626,9 @@ acpi_power_remove (
        return_VALUE(0);
 }
 
-
-static int __init acpi_power_init (void)
+static int __init acpi_power_init(void)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_power_init");
 
@@ -689,4 +651,3 @@ static int __init acpi_power_init (void)
 }
 
 subsys_initcall(acpi_power_init);
-
index d56a439ac614f4931c6b86fab438396bf72dc4c9..4217925626423db1f39cc76880e95f700fb5d279 100644 (file)
@@ -58,7 +58,6 @@
 #include <acpi/acpi_drivers.h>
 #include <acpi/processor.h>
 
-
 #define ACPI_PROCESSOR_COMPONENT       0x01000000
 #define ACPI_PROCESSOR_CLASS           "processor"
 #define ACPI_PROCESSOR_DRIVER_NAME     "ACPI Processor Driver"
 #define ACPI_STA_PRESENT 0x00000001
 
 #define _COMPONENT             ACPI_PROCESSOR_COMPONENT
-ACPI_MODULE_NAME               ("acpi_processor")
+ACPI_MODULE_NAME("acpi_processor")
 
-MODULE_AUTHOR("Paul Diefenbaugh");
+    MODULE_AUTHOR("Paul Diefenbaugh");
 MODULE_DESCRIPTION(ACPI_PROCESSOR_DRIVER_NAME);
 MODULE_LICENSE("GPL");
 
-
-static int acpi_processor_add (struct acpi_device *device);
-static int acpi_processor_start (struct acpi_device *device);
-static int acpi_processor_remove (struct acpi_device *device, int type);
+static int acpi_processor_add(struct acpi_device *device);
+static int acpi_processor_start(struct acpi_device *device);
+static int acpi_processor_remove(struct acpi_device *device, int type);
 static int acpi_processor_info_open_fs(struct inode *inode, struct file *file);
-static void acpi_processor_notify ( acpi_handle        handle, u32 event, void *data);
+static void acpi_processor_notify(acpi_handle handle, u32 event, void *data);
 static acpi_status acpi_processor_hotadd_init(acpi_handle handle, int *p_cpu);
 static int acpi_processor_handle_eject(struct acpi_processor *pr);
 
 static struct acpi_driver acpi_processor_driver = {
-       .name =         ACPI_PROCESSOR_DRIVER_NAME,
-       .class =        ACPI_PROCESSOR_CLASS,
-       .ids =          ACPI_PROCESSOR_HID,
-       .ops =          {
-                               .add =          acpi_processor_add,
-                               .remove =       acpi_processor_remove,
-                               .start  =       acpi_processor_start,
-                       },
+       .name = ACPI_PROCESSOR_DRIVER_NAME,
+       .class = ACPI_PROCESSOR_CLASS,
+       .ids = ACPI_PROCESSOR_HID,
+       .ops = {
+               .add = acpi_processor_add,
+               .remove = acpi_processor_remove,
+               .start = acpi_processor_start,
+               },
 };
 
 #define INSTALL_NOTIFY_HANDLER         1
 #define UNINSTALL_NOTIFY_HANDLER       2
 
-
 static struct file_operations acpi_processor_info_fops = {
-       .open           = acpi_processor_info_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_processor_info_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
-
-struct acpi_processor  *processors[NR_CPUS];
+struct acpi_processor *processors[NR_CPUS];
 struct acpi_processor_errata errata;
 
-
 /* --------------------------------------------------------------------------
                                 Errata Handling
    -------------------------------------------------------------------------- */
 
-static int
-acpi_processor_errata_piix4 (
-       struct pci_dev          *dev)
+static int acpi_processor_errata_piix4(struct pci_dev *dev)
 {
-       u8                      rev = 0;
-       u8                      value1 = 0;
-       u8                      value2 = 0;
+       u8 rev = 0;
+       u8 value1 = 0;
+       u8 value2 = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_errata_piix4");
 
@@ -188,8 +181,8 @@ acpi_processor_errata_piix4 (
                 * DMA activity.
                 */
                dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
-                          PCI_DEVICE_ID_INTEL_82371AB,
-                           PCI_ANY_ID, PCI_ANY_ID, NULL);
+                                    PCI_DEVICE_ID_INTEL_82371AB,
+                                    PCI_ANY_ID, PCI_ANY_ID, NULL);
                if (dev) {
                        errata.piix4.bmisx = pci_resource_start(dev, 4);
                        pci_dev_put(dev);
@@ -205,8 +198,8 @@ acpi_processor_errata_piix4 (
                 * devices won't operate well if fast DMA is disabled.
                 */
                dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
-                       PCI_DEVICE_ID_INTEL_82371AB_0,
-                       PCI_ANY_ID, PCI_ANY_ID, NULL);
+                                    PCI_DEVICE_ID_INTEL_82371AB_0,
+                                    PCI_ANY_ID, PCI_ANY_ID, NULL);
                if (dev) {
                        pci_read_config_byte(dev, 0x76, &value1);
                        pci_read_config_byte(dev, 0x77, &value2);
@@ -220,21 +213,18 @@ acpi_processor_errata_piix4 (
 
        if (errata.piix4.bmisx)
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Bus master activity detection (BM-IDE) erratum enabled\n"));
+                                 "Bus master activity detection (BM-IDE) erratum enabled\n"));
        if (errata.piix4.fdma)
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Type-F DMA livelock erratum (C3 disabled)\n"));
+                                 "Type-F DMA livelock erratum (C3 disabled)\n"));
 
        return_VALUE(0);
 }
 
-
-int
-acpi_processor_errata (
-       struct acpi_processor   *pr)
+static int acpi_processor_errata(struct acpi_processor *pr)
 {
-       int                     result = 0;
-       struct pci_dev          *dev = NULL;
+       int result = 0;
+       struct pci_dev *dev = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_processor_errata");
 
@@ -245,7 +235,8 @@ acpi_processor_errata (
         * PIIX4
         */
        dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
-               PCI_DEVICE_ID_INTEL_82371AB_3, PCI_ANY_ID, PCI_ANY_ID, NULL);
+                            PCI_DEVICE_ID_INTEL_82371AB_3, PCI_ANY_ID,
+                            PCI_ANY_ID, NULL);
        if (dev) {
                result = acpi_processor_errata_piix4(dev);
                pci_dev_put(dev);
@@ -254,7 +245,6 @@ acpi_processor_errata (
        return_VALUE(result);
 }
 
-
 /* --------------------------------------------------------------------------
                               Common ACPI processor fucntions
    -------------------------------------------------------------------------- */
@@ -265,13 +255,13 @@ acpi_processor_errata (
  */
 
 int acpi_processor_set_pdc(struct acpi_processor *pr,
-                               struct acpi_object_list *pdc_in)
+                          struct acpi_object_list *pdc_in)
 {
-       acpi_status             status = AE_OK;
-       u32                     arg0_buf[3];
-       union acpi_object       arg0 = {ACPI_TYPE_BUFFER};
-       struct acpi_object_list no_object = {1, &arg0};
-       struct acpi_object_list *pdc;
+       acpi_status status = AE_OK;
+       u32 arg0_buf[3];
+       union acpi_object arg0 = { ACPI_TYPE_BUFFER };
+       struct acpi_object_list no_object = { 1, &arg0 };
+       struct acpi_object_list *pdc;
 
        ACPI_FUNCTION_TRACE("acpi_processor_set_pdc");
 
@@ -286,21 +276,21 @@ int acpi_processor_set_pdc(struct acpi_processor *pr,
        status = acpi_evaluate_object(pr->handle, "_PDC", pdc, NULL);
 
        if ((ACPI_FAILURE(status)) && (pdc_in))
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Error evaluating _PDC, using legacy perf. control...\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Error evaluating _PDC, using legacy perf. control...\n"));
 
        return_VALUE(status);
 }
 
-
 /* --------------------------------------------------------------------------
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-static struct proc_dir_entry   *acpi_processor_dir = NULL;
+static struct proc_dir_entry *acpi_processor_dir = NULL;
 
 static int acpi_processor_info_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_processor   *pr = (struct acpi_processor *)seq->private;
+       struct acpi_processor *pr = (struct acpi_processor *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_processor_info_seq_show");
 
@@ -308,40 +298,37 @@ static int acpi_processor_info_seq_show(struct seq_file *seq, void *offset)
                goto end;
 
        seq_printf(seq, "processor id:            %d\n"
-                       "acpi id:                 %d\n"
-                       "bus mastering control:   %s\n"
-                       "power management:        %s\n"
-                       "throttling control:      %s\n"
-                       "limit interface:         %s\n",
-                       pr->id,
-                       pr->acpi_id,
-                       pr->flags.bm_control ? "yes" : "no",
-                       pr->flags.power ? "yes" : "no",
-                       pr->flags.throttling ? "yes" : "no",
-                       pr->flags.limit ? "yes" : "no");
-
-end:
+                  "acpi id:                 %d\n"
+                  "bus mastering control:   %s\n"
+                  "power management:        %s\n"
+                  "throttling control:      %s\n"
+                  "limit interface:         %s\n",
+                  pr->id,
+                  pr->acpi_id,
+                  pr->flags.bm_control ? "yes" : "no",
+                  pr->flags.power ? "yes" : "no",
+                  pr->flags.throttling ? "yes" : "no",
+                  pr->flags.limit ? "yes" : "no");
+
+      end:
        return_VALUE(0);
 }
 
 static int acpi_processor_info_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_processor_info_seq_show,
-                                               PDE(inode)->data);
+                          PDE(inode)->data);
 }
 
-
-static int
-acpi_processor_add_fs (
-       struct acpi_device      *device)
+static int acpi_processor_add_fs(struct acpi_device *device)
 {
-       struct proc_dir_entry   *entry = NULL;
+       struct proc_dir_entry *entry = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_processor_add_fs");
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
-                       acpi_processor_dir);
+                                                    acpi_processor_dir);
                if (!acpi_device_dir(device))
                        return_VALUE(-ENODEV);
        }
@@ -349,11 +336,11 @@ acpi_processor_add_fs (
 
        /* 'info' [R] */
        entry = create_proc_entry(ACPI_PROCESSOR_FILE_INFO,
-               S_IRUGO, acpi_device_dir(device));
+                                 S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_PROCESSOR_FILE_INFO));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_PROCESSOR_FILE_INFO));
        else {
                entry->proc_fops = &acpi_processor_info_fops;
                entry->data = acpi_driver_data(device);
@@ -362,11 +349,12 @@ acpi_processor_add_fs (
 
        /* 'throttling' [R/W] */
        entry = create_proc_entry(ACPI_PROCESSOR_FILE_THROTTLING,
-               S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+                                 S_IFREG | S_IRUGO | S_IWUSR,
+                                 acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_PROCESSOR_FILE_THROTTLING));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_PROCESSOR_FILE_THROTTLING));
        else {
                entry->proc_fops = &acpi_processor_throttling_fops;
                entry->proc_fops->write = acpi_processor_write_throttling;
@@ -376,11 +364,12 @@ acpi_processor_add_fs (
 
        /* 'limit' [R/W] */
        entry = create_proc_entry(ACPI_PROCESSOR_FILE_LIMIT,
-               S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+                                 S_IFREG | S_IRUGO | S_IWUSR,
+                                 acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_PROCESSOR_FILE_LIMIT));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_PROCESSOR_FILE_LIMIT));
        else {
                entry->proc_fops = &acpi_processor_limit_fops;
                entry->proc_fops->write = acpi_processor_write_limit;
@@ -391,18 +380,17 @@ acpi_processor_add_fs (
        return_VALUE(0);
 }
 
-
-static int
-acpi_processor_remove_fs (
-       struct acpi_device      *device)
+static int acpi_processor_remove_fs(struct acpi_device *device)
 {
        ACPI_FUNCTION_TRACE("acpi_processor_remove_fs");
 
        if (acpi_device_dir(device)) {
-               remove_proc_entry(ACPI_PROCESSOR_FILE_INFO,acpi_device_dir(device));
+               remove_proc_entry(ACPI_PROCESSOR_FILE_INFO,
+                                 acpi_device_dir(device));
                remove_proc_entry(ACPI_PROCESSOR_FILE_THROTTLING,
-                       acpi_device_dir(device));
-               remove_proc_entry(ACPI_PROCESSOR_FILE_LIMIT,acpi_device_dir(device));
+                                 acpi_device_dir(device));
+               remove_proc_entry(ACPI_PROCESSOR_FILE_LIMIT,
+                                 acpi_device_dir(device));
                remove_proc_entry(acpi_device_bid(device), acpi_processor_dir);
                acpi_device_dir(device) = NULL;
        }
@@ -446,15 +434,13 @@ static u8 convert_acpiid_to_cpu(u8 acpi_id)
                                  Driver Interface
    -------------------------------------------------------------------------- */
 
-static int
-acpi_processor_get_info (
-       struct acpi_processor   *pr)
+static int acpi_processor_get_info(struct acpi_processor *pr)
 {
-       acpi_status             status = 0;
-       union acpi_object       object = {0};
-       struct acpi_buffer      buffer = {sizeof(union acpi_object), &object};
-       u8                      cpu_index;
-       static int              cpu0_initialized;
+       acpi_status status = 0;
+       union acpi_object object = { 0 };
+       struct acpi_buffer buffer = { sizeof(union acpi_object), &object };
+       u8 cpu_index;
+       static int cpu0_initialized;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_info");
 
@@ -473,11 +459,10 @@ acpi_processor_get_info (
        if (acpi_fadt.V1_pm2_cnt_blk && acpi_fadt.pm2_cnt_len) {
                pr->flags.bm_control = 1;
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Bus mastering arbitration control present\n"));
-       }
-       else
+                                 "Bus mastering arbitration control present\n"));
+       } else
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "No bus mastering arbitration control\n"));
+                                 "No bus mastering arbitration control\n"));
 
        /*
         * Evalute the processor object.  Note that it is common on SMP to
@@ -487,50 +472,51 @@ acpi_processor_get_info (
        status = acpi_evaluate_object(pr->handle, NULL, NULL, &buffer);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error evaluating processor object\n"));
+                                 "Error evaluating processor object\n"));
                return_VALUE(-ENODEV);
        }
 
        /*
         * TBD: Synch processor ID (via LAPIC/LSAPIC structures) on SMP.
-        *      >>> 'acpi_get_processor_id(acpi_id, &id)' in arch/xxx/acpi.c
+        *      >>> 'acpi_get_processor_id(acpi_id, &id)' in arch/xxx/acpi.c
         */
        pr->acpi_id = object.processor.proc_id;
 
        cpu_index = convert_acpiid_to_cpu(pr->acpi_id);
 
-       /* Handle UP system running SMP kernel, with no LAPIC in MADT */
-       if ( !cpu0_initialized && (cpu_index == 0xff) &&
-                       (num_online_cpus() == 1)) {
-               cpu_index = 0;
-       }
-
-       cpu0_initialized = 1;
-
-       pr->id = cpu_index;
-
-       /*
-        *  Extra Processor objects may be enumerated on MP systems with
-        *  less than the max # of CPUs. They should be ignored _iff
-        *  they are physically not present.
-        */
-       if (cpu_index >=  NR_CPUS) {
-               if (ACPI_FAILURE(acpi_processor_hotadd_init(pr->handle, &pr->id))) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                               "Error getting cpuindex for acpiid 0x%x\n",
-                               pr->acpi_id));
-                       return_VALUE(-ENODEV);
-               }
-       }
+       /* Handle UP system running SMP kernel, with no LAPIC in MADT */
+       if (!cpu0_initialized && (cpu_index == 0xff) &&
+           (num_online_cpus() == 1)) {
+               cpu_index = 0;
+       }
+
+       cpu0_initialized = 1;
+
+       pr->id = cpu_index;
+
+       /*
+        *  Extra Processor objects may be enumerated on MP systems with
+        *  less than the max # of CPUs. They should be ignored _iff
+        *  they are physically not present.
+        */
+       if (cpu_index >= NR_CPUS) {
+               if (ACPI_FAILURE
+                   (acpi_processor_hotadd_init(pr->handle, &pr->id))) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Error getting cpuindex for acpiid 0x%x\n",
+                                         pr->acpi_id));
+                       return_VALUE(-ENODEV);
+               }
+       }
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Processor [%d:%d]\n", pr->id,
-               pr->acpi_id));
+                         pr->acpi_id));
 
        if (!object.processor.pblk_address)
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No PBLK (NULL address)\n"));
        else if (object.processor.pblk_length != 6)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid PBLK length [%d]\n",
-                       object.processor.pblk_length));
+                                 object.processor.pblk_length));
        else {
                pr->throttling.address = object.processor.pblk_address;
                pr->throttling.duty_offset = acpi_fadt.duty_offset;
@@ -557,13 +543,11 @@ acpi_processor_get_info (
        return_VALUE(0);
 }
 
-static int
-acpi_processor_start(
-       struct acpi_device      *device)
+static int acpi_processor_start(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_processor   *pr;
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_processor *pr;
 
        ACPI_FUNCTION_TRACE("acpi_processor_start");
 
@@ -584,36 +568,30 @@ acpi_processor_start(
                goto end;
 
        status = acpi_install_notify_handler(pr->handle, ACPI_DEVICE_NOTIFY,
-               acpi_processor_notify, pr);
+                                            acpi_processor_notify, pr);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error installing device notify handler\n"));
+                                 "Error installing device notify handler\n"));
        }
 
        acpi_processor_power_init(pr, device);
 
        if (pr->flags.throttling) {
                printk(KERN_INFO PREFIX "%s [%s] (supports",
-                       acpi_device_name(device), acpi_device_bid(device));
+                      acpi_device_name(device), acpi_device_bid(device));
                printk(" %d throttling states", pr->throttling.state_count);
                printk(")\n");
        }
 
-end:
+      end:
 
        return_VALUE(result);
 }
 
-
-
-static void
-acpi_processor_notify (
-       acpi_handle             handle,
-       u32                     event,
-       void                    *data)
+static void acpi_processor_notify(acpi_handle handle, u32 event, void *data)
 {
-       struct acpi_processor   *pr = (struct acpi_processor *) data;
-       struct acpi_device      *device = NULL;
+       struct acpi_processor *pr = (struct acpi_processor *)data;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_processor_notify");
 
@@ -627,7 +605,7 @@ acpi_processor_notify (
        case ACPI_PROCESSOR_NOTIFY_PERFORMANCE:
                acpi_processor_ppc_has_changed(pr);
                acpi_bus_generate_event(device, event,
-                       pr->performance_platform_limit);
+                                       pr->performance_platform_limit);
                break;
        case ACPI_PROCESSOR_NOTIFY_POWER:
                acpi_processor_cst_has_changed(pr);
@@ -635,19 +613,16 @@ acpi_processor_notify (
                break;
        default:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Unsupported event [0x%x]\n", event));
+                                 "Unsupported event [0x%x]\n", event));
                break;
        }
 
        return_VOID;
 }
 
-
-static int
-acpi_processor_add (
-       struct acpi_device      *device)
+static int acpi_processor_add(struct acpi_device *device)
 {
-       struct acpi_processor   *pr = NULL;
+       struct acpi_processor *pr = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_processor_add");
 
@@ -667,21 +642,17 @@ acpi_processor_add (
        return_VALUE(0);
 }
 
-
-static int
-acpi_processor_remove (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_processor_remove(struct acpi_device *device, int type)
 {
-       acpi_status             status = AE_OK;
-       struct acpi_processor   *pr = NULL;
+       acpi_status status = AE_OK;
+       struct acpi_processor *pr = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_processor_remove");
 
        if (!device || !acpi_driver_data(device))
                return_VALUE(-EINVAL);
 
-       pr = (struct acpi_processor *) acpi_driver_data(device);
+       pr = (struct acpi_processor *)acpi_driver_data(device);
 
        if (pr->id >= NR_CPUS) {
                kfree(pr);
@@ -696,10 +667,10 @@ acpi_processor_remove (
        acpi_processor_power_exit(pr, device);
 
        status = acpi_remove_notify_handler(pr->handle, ACPI_DEVICE_NOTIFY,
-               acpi_processor_notify);
+                                           acpi_processor_notify);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error removing notify handler\n"));
+                                 "Error removing notify handler\n"));
        }
 
        acpi_processor_remove_fs(device);
@@ -718,33 +689,28 @@ acpi_processor_remove (
 
 static int is_processor_present(acpi_handle handle);
 
-static int
-is_processor_present(
-       acpi_handle handle)
+static int is_processor_present(acpi_handle handle)
 {
-       acpi_status             status;
-       unsigned long           sta = 0;
+       acpi_status status;
+       unsigned long sta = 0;
 
        ACPI_FUNCTION_TRACE("is_processor_present");
 
        status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
        if (ACPI_FAILURE(status) || !(sta & ACPI_STA_PRESENT)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Processor Device is not present\n"));
+                                 "Processor Device is not present\n"));
                return_VALUE(0);
        }
        return_VALUE(1);
 }
 
-
 static
-int acpi_processor_device_add(
-       acpi_handle     handle,
-       struct acpi_device **device)
+int acpi_processor_device_add(acpi_handle handle, struct acpi_device **device)
 {
-       acpi_handle             phandle;
-       struct acpi_device      *pdev;
-       struct acpi_processor   *pr;
+       acpi_handle phandle;
+       struct acpi_device *pdev;
+       struct acpi_processor *pr;
 
        ACPI_FUNCTION_TRACE("acpi_processor_device_add");
 
@@ -766,21 +732,17 @@ int acpi_processor_device_add(
        if (!pr)
                return_VALUE(-ENODEV);
 
-       if ((pr->id >=0) && (pr->id < NR_CPUS)) {
+       if ((pr->id >= 0) && (pr->id < NR_CPUS)) {
                kobject_hotplug(&(*device)->kobj, KOBJ_ONLINE);
        }
        return_VALUE(0);
 }
 
-
 static void
-acpi_processor_hotplug_notify (
-       acpi_handle             handle,
-       u32                     event,
-       void                    *data)
+acpi_processor_hotplug_notify(acpi_handle handle, u32 event, void *data)
 {
-       struct acpi_processor   *pr;
-       struct acpi_device      *device = NULL;
+       struct acpi_processor *pr;
+       struct acpi_device *device = NULL;
        int result;
 
        ACPI_FUNCTION_TRACE("acpi_processor_hotplug_notify");
@@ -789,8 +751,8 @@ acpi_processor_hotplug_notify (
        case ACPI_NOTIFY_BUS_CHECK:
        case ACPI_NOTIFY_DEVICE_CHECK:
                printk("Processor driver received %s event\n",
-                       (event==ACPI_NOTIFY_BUS_CHECK)?
-                       "ACPI_NOTIFY_BUS_CHECK":"ACPI_NOTIFY_DEVICE_CHECK");
+                      (event == ACPI_NOTIFY_BUS_CHECK) ?
+                      "ACPI_NOTIFY_BUS_CHECK" : "ACPI_NOTIFY_DEVICE_CHECK");
 
                if (!is_processor_present(handle))
                        break;
@@ -799,14 +761,14 @@ acpi_processor_hotplug_notify (
                        result = acpi_processor_device_add(handle, &device);
                        if (result)
                                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                       "Unable to add the device\n"));
+                                                 "Unable to add the device\n"));
                        break;
                }
 
                pr = acpi_driver_data(device);
                if (!pr) {
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                               "Driver data is NULL\n"));
+                                         "Driver data is NULL\n"));
                        break;
                }
 
@@ -816,24 +778,27 @@ acpi_processor_hotplug_notify (
                }
 
                result = acpi_processor_start(device);
-               if ((!result) && ((pr->id >=0) && (pr->id < NR_CPUS))) {
+               if ((!result) && ((pr->id >= 0) && (pr->id < NR_CPUS))) {
                        kobject_hotplug(&device->kobj, KOBJ_ONLINE);
                } else {
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                               "Device [%s] failed to start\n",
-                               acpi_device_bid(device)));
+                                         "Device [%s] failed to start\n",
+                                         acpi_device_bid(device)));
                }
-       break;
+               break;
        case ACPI_NOTIFY_EJECT_REQUEST:
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO,"received ACPI_NOTIFY_EJECT_REQUEST\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "received ACPI_NOTIFY_EJECT_REQUEST\n"));
 
                if (acpi_bus_get_device(handle, &device)) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,"Device don't exist, dropping EJECT\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Device don't exist, dropping EJECT\n"));
                        break;
                }
                pr = acpi_driver_data(device);
                if (!pr) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,"Driver data is NULL, dropping EJECT\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Driver data is NULL, dropping EJECT\n"));
                        return_VOID;
                }
 
@@ -842,7 +807,7 @@ acpi_processor_hotplug_notify (
                break;
        default:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Unsupported event [0x%x]\n", event));
+                                 "Unsupported event [0x%x]\n", event));
                break;
        }
 
@@ -851,45 +816,39 @@ acpi_processor_hotplug_notify (
 
 static acpi_status
 processor_walk_namespace_cb(acpi_handle handle,
-       u32 lvl,
-       void *context,
-       void **rv)
+                           u32 lvl, void *context, void **rv)
 {
-       acpi_status                     status;
+       acpi_status status;
        int *action = context;
-       acpi_object_type        type = 0;
+       acpi_object_type type = 0;
 
        status = acpi_get_type(handle, &type);
        if (ACPI_FAILURE(status))
-               return(AE_OK);
+               return (AE_OK);
 
        if (type != ACPI_TYPE_PROCESSOR)
-               return(AE_OK);
+               return (AE_OK);
 
-       switch(*action) {
+       switch (*action) {
        case INSTALL_NOTIFY_HANDLER:
                acpi_install_notify_handler(handle,
-                       ACPI_SYSTEM_NOTIFY,
-                       acpi_processor_hotplug_notify,
-                       NULL);
+                                           ACPI_SYSTEM_NOTIFY,
+                                           acpi_processor_hotplug_notify,
+                                           NULL);
                break;
        case UNINSTALL_NOTIFY_HANDLER:
                acpi_remove_notify_handler(handle,
-                       ACPI_SYSTEM_NOTIFY,
-                       acpi_processor_hotplug_notify);
+                                          ACPI_SYSTEM_NOTIFY,
+                                          acpi_processor_hotplug_notify);
                break;
        default:
                break;
        }
 
-       return(AE_OK);
+       return (AE_OK);
 }
 
-
-static acpi_status
-acpi_processor_hotadd_init(
-       acpi_handle             handle,
-       int                     *p_cpu)
+static acpi_status acpi_processor_hotadd_init(acpi_handle handle, int *p_cpu)
 {
        ACPI_FUNCTION_TRACE("acpi_processor_hotadd_init");
 
@@ -908,57 +867,47 @@ acpi_processor_hotadd_init(
        return_VALUE(AE_OK);
 }
 
-
-static int
-acpi_processor_handle_eject(struct acpi_processor *pr)
+static int acpi_processor_handle_eject(struct acpi_processor *pr)
 {
        if (cpu_online(pr->id)) {
-               return(-EINVAL);
+               return (-EINVAL);
        }
        arch_unregister_cpu(pr->id);
        acpi_unmap_lsapic(pr->id);
-       return(0);
+       return (0);
 }
 #else
-static acpi_status
-acpi_processor_hotadd_init(
-       acpi_handle             handle,
-       int                     *p_cpu)
+static acpi_status acpi_processor_hotadd_init(acpi_handle handle, int *p_cpu)
 {
        return AE_ERROR;
 }
-static int
-acpi_processor_handle_eject(struct acpi_processor *pr)
+static int acpi_processor_handle_eject(struct acpi_processor *pr)
 {
-       return(-EINVAL);
+       return (-EINVAL);
 }
 #endif
 
-
 static
 void acpi_processor_install_hotplug_notify(void)
 {
 #ifdef CONFIG_ACPI_HOTPLUG_CPU
        int action = INSTALL_NOTIFY_HANDLER;
        acpi_walk_namespace(ACPI_TYPE_PROCESSOR,
-                                    ACPI_ROOT_OBJECT,
-                                    ACPI_UINT32_MAX,
-                                    processor_walk_namespace_cb,
-                                    &action, NULL);
+                           ACPI_ROOT_OBJECT,
+                           ACPI_UINT32_MAX,
+                           processor_walk_namespace_cb, &action, NULL);
 #endif
 }
 
-
 static
 void acpi_processor_uninstall_hotplug_notify(void)
 {
 #ifdef CONFIG_ACPI_HOTPLUG_CPU
        int action = UNINSTALL_NOTIFY_HANDLER;
        acpi_walk_namespace(ACPI_TYPE_PROCESSOR,
-                                    ACPI_ROOT_OBJECT,
-                                    ACPI_UINT32_MAX,
-                                    processor_walk_namespace_cb,
-                                    &action, NULL);
+                           ACPI_ROOT_OBJECT,
+                           ACPI_UINT32_MAX,
+                           processor_walk_namespace_cb, &action, NULL);
 #endif
 }
 
@@ -968,10 +917,9 @@ void acpi_processor_uninstall_hotplug_notify(void)
  * ACPI, but needs symbols from this driver
  */
 
-static int __init
-acpi_processor_init (void)
+static int __init acpi_processor_init(void)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_init");
 
@@ -998,9 +946,7 @@ acpi_processor_init (void)
        return_VALUE(0);
 }
 
-
-static void __exit
-acpi_processor_exit (void)
+static void __exit acpi_processor_exit(void)
 {
        ACPI_FUNCTION_TRACE("acpi_processor_exit");
 
@@ -1017,7 +963,6 @@ acpi_processor_exit (void)
        return_VOID;
 }
 
-
 module_init(acpi_processor_init);
 module_exit(acpi_processor_exit);
 
index 2c04740c6543f54ea6d0c35a51d00d11e479b76b..26a3a4016115364467b5feff71415c7e88f4d016 100644 (file)
 #define ACPI_PROCESSOR_CLASS            "processor"
 #define ACPI_PROCESSOR_DRIVER_NAME      "ACPI Processor Driver"
 #define _COMPONENT              ACPI_PROCESSOR_COMPONENT
-ACPI_MODULE_NAME                ("acpi_processor")
-
+ACPI_MODULE_NAME("acpi_processor")
 #define ACPI_PROCESSOR_FILE_POWER      "power"
-
 #define US_TO_PM_TIMER_TICKS(t)                ((t * (PM_TIMER_FREQUENCY/1000)) / 1000)
 #define C2_OVERHEAD                    4       /* 1us (3.579 ticks per us) */
 #define C3_OVERHEAD                    4       /* 1us (3.579 ticks per us) */
-
-static void (*pm_idle_save)(void);
+static void (*pm_idle_save) (void);
 module_param(max_cstate, uint, 0644);
 
 static unsigned int nocst = 0;
@@ -69,7 +66,8 @@ module_param(nocst, uint, 0000);
  * 100 HZ: 0x0000000F: 4 jiffies = 40ms
  * reduce history for more aggressive entry into C3
  */
-static unsigned int bm_history = (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1));
+static unsigned int bm_history =
+    (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1));
 module_param(bm_history, uint, 0644);
 /* --------------------------------------------------------------------------
                                 Power Management
@@ -87,34 +85,36 @@ static int set_max_cstate(struct dmi_system_id *id)
                return 0;
 
        printk(KERN_NOTICE PREFIX "%s detected - limiting to C%ld max_cstate."
-               " Override with \"processor.max_cstate=%d\"\n", id->ident,
-               (long)id->driver_data, ACPI_PROCESSOR_MAX_POWER + 1);
+              " Override with \"processor.max_cstate=%d\"\n", id->ident,
+              (long)id->driver_data, ACPI_PROCESSOR_MAX_POWER + 1);
 
        max_cstate = (long)id->driver_data;
 
        return 0;
 }
 
-
 static struct dmi_system_id __initdata processor_power_dmi_table[] = {
-       { set_max_cstate, "IBM ThinkPad R40e", {
-         DMI_MATCH(DMI_BIOS_VENDOR,"IBM"),
-         DMI_MATCH(DMI_BIOS_VERSION,"1SET60WW") }, (void*)1},
-       { set_max_cstate, "Medion 41700", {
-         DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"),
-         DMI_MATCH(DMI_BIOS_VERSION,"R01-A1J") }, (void*)1},
-       { set_max_cstate, "Clevo 5600D", {
-         DMI_MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"),
-         DMI_MATCH(DMI_BIOS_VERSION,"SHE845M0.86C.0013.D.0302131307") },
-         (void*)2},
+       {set_max_cstate, "IBM ThinkPad R40e", {
+                                              DMI_MATCH(DMI_BIOS_VENDOR,
+                                                        "IBM"),
+                                              DMI_MATCH(DMI_BIOS_VERSION,
+                                                        "1SET60WW")},
+        (void *)1},
+       {set_max_cstate, "Medion 41700", {
+                                         DMI_MATCH(DMI_BIOS_VENDOR,
+                                                   "Phoenix Technologies LTD"),
+                                         DMI_MATCH(DMI_BIOS_VERSION,
+                                                   "R01-A1J")}, (void *)1},
+       {set_max_cstate, "Clevo 5600D", {
+                                        DMI_MATCH(DMI_BIOS_VENDOR,
+                                                  "Phoenix Technologies LTD"),
+                                        DMI_MATCH(DMI_BIOS_VERSION,
+                                                  "SHE845M0.86C.0013.D.0302131307")},
+        (void *)2},
        {},
 };
 
-
-static inline u32
-ticks_elapsed (
-       u32                     t1,
-       u32                     t2)
+static inline u32 ticks_elapsed(u32 t1, u32 t2)
 {
        if (t2 >= t1)
                return (t2 - t1);
@@ -124,13 +124,11 @@ ticks_elapsed (
                return ((0xFFFFFFFF - t1) + t2);
 }
 
-
 static void
-acpi_processor_power_activate (
-       struct acpi_processor   *pr,
-       struct acpi_processor_cx  *new)
+acpi_processor_power_activate(struct acpi_processor *pr,
+                             struct acpi_processor_cx *new)
 {
-       struct acpi_processor_cx  *old;
+       struct acpi_processor_cx *old;
 
        if (!pr || !new)
                return;
@@ -139,7 +137,7 @@ acpi_processor_power_activate (
 
        if (old)
                old->promotion.count = 0;
-       new->demotion.count = 0;
+       new->demotion.count = 0;
 
        /* Cleanup from old state. */
        if (old) {
@@ -147,7 +145,8 @@ acpi_processor_power_activate (
                case ACPI_STATE_C3:
                        /* Disable bus master reload */
                        if (new->type != ACPI_STATE_C3 && pr->flags.bm_check)
-                               acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0, ACPI_MTX_DO_NOT_LOCK);
+                               acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0,
+                                                 ACPI_MTX_DO_NOT_LOCK);
                        break;
                }
        }
@@ -157,7 +156,8 @@ acpi_processor_power_activate (
        case ACPI_STATE_C3:
                /* Enable bus master reload */
                if (old->type != ACPI_STATE_C3 && pr->flags.bm_check)
-                       acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 1, ACPI_MTX_DO_NOT_LOCK);
+                       acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 1,
+                                         ACPI_MTX_DO_NOT_LOCK);
                break;
        }
 
@@ -166,17 +166,15 @@ acpi_processor_power_activate (
        return;
 }
 
+static atomic_t c3_cpu_count;
 
-static atomic_t        c3_cpu_count;
-
-
-static void acpi_processor_idle (void)
+static void acpi_processor_idle(void)
 {
-       struct acpi_processor   *pr = NULL;
+       struct acpi_processor *pr = NULL;
        struct acpi_processor_cx *cx = NULL;
        struct acpi_processor_cx *next_state = NULL;
-       int                     sleep_ticks = 0;
-       u32                     t1, t2 = 0;
+       int sleep_ticks = 0;
+       u32 t1, t2 = 0;
 
        pr = processors[raw_smp_processor_id()];
        if (!pr)
@@ -208,8 +206,8 @@ static void acpi_processor_idle (void)
         * for demotion.
         */
        if (pr->flags.bm_check) {
-               u32             bm_status = 0;
-               unsigned long   diff = jiffies - pr->power.bm_check_timestamp;
+               u32 bm_status = 0;
+               unsigned long diff = jiffies - pr->power.bm_check_timestamp;
 
                if (diff > 32)
                        diff = 32;
@@ -223,11 +221,11 @@ static void acpi_processor_idle (void)
                }
 
                acpi_get_register(ACPI_BITREG_BUS_MASTER_STATUS,
-                       &bm_status, ACPI_MTX_DO_NOT_LOCK);
+                                 &bm_status, ACPI_MTX_DO_NOT_LOCK);
                if (bm_status) {
                        pr->power.bm_activity++;
                        acpi_set_register(ACPI_BITREG_BUS_MASTER_STATUS,
-                               1, ACPI_MTX_DO_NOT_LOCK);
+                                         1, ACPI_MTX_DO_NOT_LOCK);
                }
                /*
                 * PIIX4 Erratum #18: Note that BM_STS doesn't always reflect
@@ -236,7 +234,7 @@ static void acpi_processor_idle (void)
                 */
                else if (errata.piix4.bmisx) {
                        if ((inb_p(errata.piix4.bmisx + 0x02) & 0x01)
-                               || (inb_p(errata.piix4.bmisx + 0x0A) & 0x01))
+                           || (inb_p(errata.piix4.bmisx + 0x0A) & 0x01))
                                pr->power.bm_activity++;
                }
 
@@ -281,7 +279,7 @@ static void acpi_processor_idle (void)
                else
                        safe_halt();
                /*
-                 * TBD: Can't get time duration while in C1, as resumes
+                * TBD: Can't get time duration while in C1, as resumes
                 *      go to an ISR rather than here.  Need to instrument
                 *      base interrupt handler.
                 */
@@ -300,26 +298,27 @@ static void acpi_processor_idle (void)
                /* Re-enable interrupts */
                local_irq_enable();
                /* Compute time (ticks) that we were actually asleep */
-               sleep_ticks = ticks_elapsed(t1, t2) - cx->latency_ticks - C2_OVERHEAD;
+               sleep_ticks =
+                   ticks_elapsed(t1, t2) - cx->latency_ticks - C2_OVERHEAD;
                break;
 
        case ACPI_STATE_C3:
-               
+
                if (pr->flags.bm_check) {
                        if (atomic_inc_return(&c3_cpu_count) ==
-                                       num_online_cpus()) {
+                           num_online_cpus()) {
                                /*
                                 * All CPUs are trying to go to C3
                                 * Disable bus master arbitration
                                 */
                                acpi_set_register(ACPI_BITREG_ARB_DISABLE, 1,
-                                       ACPI_MTX_DO_NOT_LOCK);
+                                                 ACPI_MTX_DO_NOT_LOCK);
                        }
                } else {
                        /* SMP with no shared cache... Invalidate cache  */
                        ACPI_FLUSH_CPU_CACHE();
                }
-               
+
                /* Get start time (ticks) */
                t1 = inl(acpi_fadt.xpm_tmr_blk.address);
                /* Invoke C3 */
@@ -331,13 +330,15 @@ static void acpi_processor_idle (void)
                if (pr->flags.bm_check) {
                        /* Enable bus master arbitration */
                        atomic_dec(&c3_cpu_count);
-                       acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0, ACPI_MTX_DO_NOT_LOCK);
+                       acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0,
+                                         ACPI_MTX_DO_NOT_LOCK);
                }
 
                /* Re-enable interrupts */
                local_irq_enable();
                /* Compute time (ticks) that we were actually asleep */
-               sleep_ticks = ticks_elapsed(t1, t2) - cx->latency_ticks - C3_OVERHEAD;
+               sleep_ticks =
+                   ticks_elapsed(t1, t2) - cx->latency_ticks - C3_OVERHEAD;
                break;
 
        default:
@@ -359,15 +360,18 @@ static void acpi_processor_idle (void)
            ((cx->promotion.state - pr->power.states) <= max_cstate)) {
                if (sleep_ticks > cx->promotion.threshold.ticks) {
                        cx->promotion.count++;
-                       cx->demotion.count = 0;
-                       if (cx->promotion.count >= cx->promotion.threshold.count) {
+                       cx->demotion.count = 0;
+                       if (cx->promotion.count >=
+                           cx->promotion.threshold.count) {
                                if (pr->flags.bm_check) {
-                                       if (!(pr->power.bm_activity & cx->promotion.threshold.bm)) {
-                                               next_state = cx->promotion.state;
+                                       if (!
+                                           (pr->power.bm_activity & cx->
+                                            promotion.threshold.bm)) {
+                                               next_state =
+                                                   cx->promotion.state;
                                                goto end;
                                        }
-                               }
-                               else {
+                               } else {
                                        next_state = cx->promotion.state;
                                        goto end;
                                }
@@ -392,7 +396,7 @@ static void acpi_processor_idle (void)
                }
        }
 
-end:
+      end:
        /*
         * Demote if current state exceeds max_cstate
         */
@@ -412,7 +416,7 @@ end:
 
        return;
 
- easy_out:
     easy_out:
        /* do C1 instead of busy loop */
        if (pm_idle_save)
                pm_idle_save();
@@ -421,10 +425,7 @@ end:
        return;
 }
 
-
-static int
-acpi_processor_set_power_policy (
-       struct acpi_processor   *pr)
+static int acpi_processor_set_power_policy(struct acpi_processor *pr)
 {
        unsigned int i;
        unsigned int state_is_set = 0;
@@ -432,7 +433,7 @@ acpi_processor_set_power_policy (
        struct acpi_processor_cx *higher = NULL;
        struct acpi_processor_cx *cx;
 
-       ACPI_FUNCTION_TRACE("acpi_processor_set_power_policy");
+       ACPI_FUNCTION_TRACE("acpi_processor_set_power_policy");
 
        if (!pr)
                return_VALUE(-EINVAL);
@@ -447,7 +448,7 @@ acpi_processor_set_power_policy (
         */
 
        /* startup state */
-       for (i=1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
+       for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
                cx = &pr->power.states[i];
                if (!cx->valid)
                        continue;
@@ -456,13 +457,13 @@ acpi_processor_set_power_policy (
                        pr->power.state = cx;
                state_is_set++;
                break;
-       }
+       }
 
        if (!state_is_set)
                return_VALUE(-ENODEV);
 
        /* demotion */
-       for (i=1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
+       for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
                cx = &pr->power.states[i];
                if (!cx->valid)
                        continue;
@@ -485,7 +486,7 @@ acpi_processor_set_power_policy (
                        continue;
 
                if (higher) {
-                       cx->promotion.state  = higher;
+                       cx->promotion.state = higher;
                        cx->promotion.threshold.ticks = cx->latency_ticks;
                        if (cx->type >= ACPI_STATE_C2)
                                cx->promotion.threshold.count = 4;
@@ -498,11 +499,10 @@ acpi_processor_set_power_policy (
                higher = cx;
        }
 
-       return_VALUE(0);
+       return_VALUE(0);
 }
 
-
-static int acpi_processor_get_power_info_fadt (struct acpi_processor *pr)
+static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
 {
        int i;
 
@@ -543,15 +543,14 @@ static int acpi_processor_get_power_info_fadt (struct acpi_processor *pr)
        return_VALUE(0);
 }
 
-
-static int acpi_processor_get_power_info_default_c1 (struct acpi_processor *pr)
+static int acpi_processor_get_power_info_default_c1(struct acpi_processor *pr)
 {
        int i;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_power_info_default_c1");
 
        for (i = 0; i < ACPI_PROCESSOR_MAX_POWER; i++)
-               memset(&(pr->power.states[i]), 0, 
+               memset(&(pr->power.states[i]), 0,
                       sizeof(struct acpi_processor_cx));
 
        /* if info is obtained from pblk/fadt, type equals state */
@@ -567,14 +566,13 @@ static int acpi_processor_get_power_info_default_c1 (struct acpi_processor *pr)
        return_VALUE(0);
 }
 
-
-static int acpi_processor_get_power_info_cst (struct acpi_processor *pr)
+static int acpi_processor_get_power_info_cst(struct acpi_processor *pr)
 {
-       acpi_status             status = 0;
-       acpi_integer            count;
-       int                     i;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       union acpi_object       *cst;
+       acpi_status status = 0;
+       acpi_integer count;
+       int i;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       union acpi_object *cst;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_power_info_cst");
 
@@ -583,20 +581,21 @@ static int acpi_processor_get_power_info_cst (struct acpi_processor *pr)
 
        pr->power.count = 0;
        for (i = 0; i < ACPI_PROCESSOR_MAX_POWER; i++)
-               memset(&(pr->power.states[i]), 0, 
+               memset(&(pr->power.states[i]), 0,
                       sizeof(struct acpi_processor_cx));
 
        status = acpi_evaluate_object(pr->handle, "_CST", NULL, &buffer);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No _CST, giving up\n"));
                return_VALUE(-ENODEV);
-       }
+       }
 
-       cst = (union acpi_object *) buffer.pointer;
+       cst = (union acpi_object *)buffer.pointer;
 
        /* There must be at least 2 elements */
        if (!cst || (cst->type != ACPI_TYPE_PACKAGE) || cst->package.count < 2) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "not enough elements in _CST\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "not enough elements in _CST\n"));
                status = -EFAULT;
                goto end;
        }
@@ -605,15 +604,19 @@ static int acpi_processor_get_power_info_cst (struct acpi_processor *pr)
 
        /* Validate number of power states. */
        if (count < 1 || count != cst->package.count - 1) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "count given by _CST is not valid\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "count given by _CST is not valid\n"));
                status = -EFAULT;
                goto end;
        }
 
        /* We support up to ACPI_PROCESSOR_MAX_POWER. */
        if (count > ACPI_PROCESSOR_MAX_POWER) {
-               printk(KERN_WARNING "Limiting number of power states to max (%d)\n", ACPI_PROCESSOR_MAX_POWER);
-               printk(KERN_WARNING "Please increase ACPI_PROCESSOR_MAX_POWER if needed.\n");
+               printk(KERN_WARNING
+                      "Limiting number of power states to max (%d)\n",
+                      ACPI_PROCESSOR_MAX_POWER);
+               printk(KERN_WARNING
+                      "Please increase ACPI_PROCESSOR_MAX_POWER if needed.\n");
                count = ACPI_PROCESSOR_MAX_POWER;
        }
 
@@ -628,29 +631,29 @@ static int acpi_processor_get_power_info_cst (struct acpi_processor *pr)
 
                memset(&cx, 0, sizeof(cx));
 
-               element = (union acpi_object *) &(cst->package.elements[i]);
+               element = (union acpi_object *)&(cst->package.elements[i]);
                if (element->type != ACPI_TYPE_PACKAGE)
                        continue;
 
                if (element->package.count != 4)
                        continue;
 
-               obj = (union acpi_object *) &(element->package.elements[0]);
+               obj = (union acpi_object *)&(element->package.elements[0]);
 
                if (obj->type != ACPI_TYPE_BUFFER)
                        continue;
 
-               reg = (struct acpi_power_register *) obj->buffer.pointer;
+               reg = (struct acpi_power_register *)obj->buffer.pointer;
 
                if (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO &&
-                       (reg->space_id != ACPI_ADR_SPACE_FIXED_HARDWARE))
+                   (reg->space_id != ACPI_ADR_SPACE_FIXED_HARDWARE))
                        continue;
 
                cx.address = (reg->space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) ?
-                       0 : reg->address;
+                   0 : reg->address;
 
                /* There should be an easy way to extract an integer... */
-               obj = (union acpi_object *) &(element->package.elements[1]);
+               obj = (union acpi_object *)&(element->package.elements[1]);
                if (obj->type != ACPI_TYPE_INTEGER)
                        continue;
 
@@ -660,17 +663,16 @@ static int acpi_processor_get_power_info_cst (struct acpi_processor *pr)
                    (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO))
                        continue;
 
-               if ((cx.type < ACPI_STATE_C1) ||
-                   (cx.type > ACPI_STATE_C3))
+               if ((cx.type < ACPI_STATE_C1) || (cx.type > ACPI_STATE_C3))
                        continue;
 
-               obj = (union acpi_object *) &(element->package.elements[2]);
+               obj = (union acpi_object *)&(element->package.elements[2]);
                if (obj->type != ACPI_TYPE_INTEGER)
                        continue;
 
                cx.latency = obj->integer.value;
 
-               obj = (union acpi_object *) &(element->package.elements[3]);
+               obj = (union acpi_object *)&(element->package.elements[3]);
                if (obj->type != ACPI_TYPE_INTEGER)
                        continue;
 
@@ -680,19 +682,19 @@ static int acpi_processor_get_power_info_cst (struct acpi_processor *pr)
                memcpy(&(pr->power.states[pr->power.count]), &cx, sizeof(cx));
        }
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d power states\n", pr->power.count));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d power states\n",
+                         pr->power.count));
 
        /* Validate number of power states discovered */
        if (pr->power.count < 2)
                status = -ENODEV;
 
-end:
+      end:
        acpi_os_free(buffer.pointer);
 
        return_VALUE(status);
 }
 
-
 static void acpi_processor_power_verify_c2(struct acpi_processor_cx *cx)
 {
        ACPI_FUNCTION_TRACE("acpi_processor_get_power_verify_c2");
@@ -706,8 +708,7 @@ static void acpi_processor_power_verify_c2(struct acpi_processor_cx *cx)
         */
        else if (cx->latency > ACPI_PROCESSOR_MAX_C2_LATENCY) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                                 "latency too large [%d]\n",
-                                 cx->latency));
+                                 "latency too large [%d]\n", cx->latency));
                return_VOID;
        }
 
@@ -721,10 +722,8 @@ static void acpi_processor_power_verify_c2(struct acpi_processor_cx *cx)
        return_VOID;
 }
 
-
-static void acpi_processor_power_verify_c3(
-       struct acpi_processor *pr,
-       struct acpi_processor_cx *cx)
+static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
+                                          struct acpi_processor_cx *cx)
 {
        static int bm_check_flag;
 
@@ -739,8 +738,7 @@ static void acpi_processor_power_verify_c3(
         */
        else if (cx->latency > ACPI_PROCESSOR_MAX_C3_LATENCY) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                                 "latency too large [%d]\n",
-                                 cx->latency));
+                                 "latency too large [%d]\n", cx->latency));
                return_VOID;
        }
 
@@ -753,7 +751,7 @@ static void acpi_processor_power_verify_c3(
         */
        else if (errata.piix4.fdma) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "C3 not supported on PIIX4 with Type-F DMA\n"));
+                                 "C3 not supported on PIIX4 with Type-F DMA\n"));
                return_VOID;
        }
 
@@ -770,7 +768,7 @@ static void acpi_processor_power_verify_c3(
                /* bus mastering control is necessary */
                if (!pr->flags.bm_control) {
                        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                         "C3 support requires bus mastering control\n"));
+                                         "C3 support requires bus mastering control\n"));
                        return_VOID;
                }
        } else {
@@ -780,12 +778,12 @@ static void acpi_processor_power_verify_c3(
                 */
                if (acpi_fadt.wb_invd != 1) {
                        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                         "Cache invalidation should work properly"
-                         " for C3 to be enabled on SMP systems\n"));
+                                         "Cache invalidation should work properly"
+                                         " for C3 to be enabled on SMP systems\n"));
                        return_VOID;
                }
                acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD,
-                               0, ACPI_MTX_DO_NOT_LOCK);
+                                 0, ACPI_MTX_DO_NOT_LOCK);
        }
 
        /*
@@ -800,13 +798,12 @@ static void acpi_processor_power_verify_c3(
        return_VOID;
 }
 
-
 static int acpi_processor_power_verify(struct acpi_processor *pr)
 {
        unsigned int i;
        unsigned int working = 0;
 
-       for (i=1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
+       for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
                struct acpi_processor_cx *cx = &pr->power.states[i];
 
                switch (cx->type) {
@@ -830,8 +827,7 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
        return (working);
 }
 
-static int acpi_processor_get_power_info (
-       struct acpi_processor   *pr)
+static int acpi_processor_get_power_info(struct acpi_processor *pr)
 {
        unsigned int i;
        int result;
@@ -874,16 +870,16 @@ static int acpi_processor_get_power_info (
        return_VALUE(0);
 }
 
-int acpi_processor_cst_has_changed (struct acpi_processor *pr)
+int acpi_processor_cst_has_changed(struct acpi_processor *pr)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_cst_has_changed");
 
        if (!pr)
-               return_VALUE(-EINVAL);
+               return_VALUE(-EINVAL);
 
-       if ( nocst) {
+       if (nocst) {
                return_VALUE(-ENODEV);
        }
 
@@ -892,7 +888,7 @@ int acpi_processor_cst_has_changed (struct acpi_processor *pr)
 
        /* Fall back to the default idle loop */
        pm_idle = pm_idle_save;
-       synchronize_sched();  /* Relies on interrupts forcing exit from idle. */
+       synchronize_sched();    /* Relies on interrupts forcing exit from idle. */
 
        pr->flags.power = 0;
        result = acpi_processor_get_power_info(pr);
@@ -906,8 +902,8 @@ int acpi_processor_cst_has_changed (struct acpi_processor *pr)
 
 static int acpi_processor_power_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_processor   *pr = (struct acpi_processor *)seq->private;
-       unsigned int            i;
+       struct acpi_processor *pr = (struct acpi_processor *)seq->private;
+       unsigned int i;
 
        ACPI_FUNCTION_TRACE("acpi_processor_power_seq_show");
 
@@ -915,17 +911,17 @@ static int acpi_processor_power_seq_show(struct seq_file *seq, void *offset)
                goto end;
 
        seq_printf(seq, "active state:            C%zd\n"
-                       "max_cstate:              C%d\n"
-                       "bus master activity:     %08x\n",
-                       pr->power.state ? pr->power.state - pr->power.states : 0,
-                       max_cstate,
-                       (unsigned)pr->power.bm_activity);
+                  "max_cstate:              C%d\n"
+                  "bus master activity:     %08x\n",
+                  pr->power.state ? pr->power.state - pr->power.states : 0,
+                  max_cstate, (unsigned)pr->power.bm_activity);
 
        seq_puts(seq, "states:\n");
 
        for (i = 1; i <= pr->power.count; i++) {
                seq_printf(seq, "   %cC%d:                  ",
-                       (&pr->power.states[i] == pr->power.state?'*':' '), i);
+                          (&pr->power.states[i] ==
+                           pr->power.state ? '*' : ' '), i);
 
                if (!pr->power.states[i].valid) {
                        seq_puts(seq, "<not supported>\n");
@@ -949,45 +945,46 @@ static int acpi_processor_power_seq_show(struct seq_file *seq, void *offset)
 
                if (pr->power.states[i].promotion.state)
                        seq_printf(seq, "promotion[C%zd] ",
-                               (pr->power.states[i].promotion.state -
-                                pr->power.states));
+                                  (pr->power.states[i].promotion.state -
+                                   pr->power.states));
                else
                        seq_puts(seq, "promotion[--] ");
 
                if (pr->power.states[i].demotion.state)
                        seq_printf(seq, "demotion[C%zd] ",
-                               (pr->power.states[i].demotion.state -
-                                pr->power.states));
+                                  (pr->power.states[i].demotion.state -
+                                   pr->power.states));
                else
                        seq_puts(seq, "demotion[--] ");
 
                seq_printf(seq, "latency[%03d] usage[%08d]\n",
-                       pr->power.states[i].latency,
-                       pr->power.states[i].usage);
+                          pr->power.states[i].latency,
+                          pr->power.states[i].usage);
        }
 
-end:
+      end:
        return_VALUE(0);
 }
 
 static int acpi_processor_power_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_processor_power_seq_show,
-                                               PDE(inode)->data);
+                          PDE(inode)->data);
 }
 
 static struct file_operations acpi_processor_power_fops = {
-       .open           = acpi_processor_power_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_processor_power_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
-int acpi_processor_power_init(struct acpi_processor *pr, struct acpi_device *device)
+int acpi_processor_power_init(struct acpi_processor *pr,
+                             struct acpi_device *device)
 {
-       acpi_status             status = 0;
-       static int              first_run = 0;
-       struct proc_dir_entry   *entry = NULL;
+       acpi_status status = 0;
+       static int first_run = 0;
+       struct proc_dir_entry *entry = NULL;
        unsigned int i;
 
        ACPI_FUNCTION_TRACE("acpi_processor_power_init");
@@ -995,7 +992,9 @@ int acpi_processor_power_init(struct acpi_processor *pr, struct acpi_device *dev
        if (!first_run) {
                dmi_check_system(processor_power_dmi_table);
                if (max_cstate < ACPI_C_STATES_MAX)
-                       printk(KERN_NOTICE "ACPI: processor limited to max C-state %d\n", max_cstate);
+                       printk(KERN_NOTICE
+                              "ACPI: processor limited to max C-state %d\n",
+                              max_cstate);
                first_run++;
        }
 
@@ -1003,7 +1002,8 @@ int acpi_processor_power_init(struct acpi_processor *pr, struct acpi_device *dev
                return_VALUE(-EINVAL);
 
        if (acpi_fadt.cst_cnt && !nocst) {
-               status = acpi_os_write_port(acpi_fadt.smi_cmd, acpi_fadt.cst_cnt, 8);
+               status =
+                   acpi_os_write_port(acpi_fadt.smi_cmd, acpi_fadt.cst_cnt, 8);
                if (ACPI_FAILURE(status)) {
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
                                          "Notifying BIOS of _CST ability failed\n"));
@@ -1023,7 +1023,8 @@ int acpi_processor_power_init(struct acpi_processor *pr, struct acpi_device *dev
                printk(KERN_INFO PREFIX "CPU%d (power states:", pr->id);
                for (i = 1; i <= pr->power.count; i++)
                        if (pr->power.states[i].valid)
-                               printk(" C%d[C%d]", i, pr->power.states[i].type);
+                               printk(" C%d[C%d]", i,
+                                      pr->power.states[i].type);
                printk(")\n");
 
                if (pr->id == 0) {
@@ -1034,11 +1035,11 @@ int acpi_processor_power_init(struct acpi_processor *pr, struct acpi_device *dev
 
        /* 'power' [R] */
        entry = create_proc_entry(ACPI_PROCESSOR_FILE_POWER,
-               S_IRUGO, acpi_device_dir(device));
+                                 S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_PROCESSOR_FILE_POWER));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_PROCESSOR_FILE_POWER));
        else {
                entry->proc_fops = &acpi_processor_power_fops;
                entry->data = acpi_driver_data(device);
@@ -1050,14 +1051,16 @@ int acpi_processor_power_init(struct acpi_processor *pr, struct acpi_device *dev
        return_VALUE(0);
 }
 
-int acpi_processor_power_exit(struct acpi_processor *pr, struct acpi_device *device)
+int acpi_processor_power_exit(struct acpi_processor *pr,
+                             struct acpi_device *device)
 {
        ACPI_FUNCTION_TRACE("acpi_processor_power_exit");
 
        pr->flags.power_setup_done = 0;
 
        if (acpi_device_dir(device))
-               remove_proc_entry(ACPI_PROCESSOR_FILE_POWER,acpi_device_dir(device));
+               remove_proc_entry(ACPI_PROCESSOR_FILE_POWER,
+                                 acpi_device_dir(device));
 
        /* Unregister the idle handler when processor #0 is removed. */
        if (pr->id == 0) {
index 1f0d6256302fc61afee4a9b631b710ab2a07d395..22c7bb66c2005c4956a241c7a31a566d9ae6b073 100644 (file)
@@ -26,7 +26,6 @@
  *
  */
 
-
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <acpi/acpi_bus.h>
 #include <acpi/processor.h>
 
-
 #define ACPI_PROCESSOR_COMPONENT       0x01000000
 #define ACPI_PROCESSOR_CLASS           "processor"
 #define ACPI_PROCESSOR_DRIVER_NAME     "ACPI Processor Driver"
 #define ACPI_PROCESSOR_FILE_PERFORMANCE        "performance"
 #define _COMPONENT             ACPI_PROCESSOR_COMPONENT
-ACPI_MODULE_NAME               ("acpi_processor")
-
+ACPI_MODULE_NAME("acpi_processor")
 
 static DECLARE_MUTEX(performance_sem);
 
@@ -69,8 +66,7 @@ static DECLARE_MUTEX(performance_sem);
 static int acpi_processor_ppc_status = 0;
 
 static int acpi_processor_ppc_notifier(struct notifier_block *nb,
-       unsigned long event,
-       void *data)
+                                      unsigned long event, void *data)
 {
        struct cpufreq_policy *policy = data;
        struct acpi_processor *pr;
@@ -85,7 +81,7 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
        if (!pr || !pr->performance)
                goto out;
 
-       ppc = (unsigned int) pr->performance_platform_limit;
+       ppc = (unsigned int)pr->performance_platform_limit;
        if (!ppc)
                goto out;
 
@@ -93,26 +89,23 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
                goto out;
 
        cpufreq_verify_within_limits(policy, 0,
-               pr->performance->states[ppc].core_frequency * 1000);
+                                    pr->performance->states[ppc].
+                                    core_frequency * 1000);
 
- out:
     out:
        up(&performance_sem);
 
        return 0;
 }
 
-
 static struct notifier_block acpi_ppc_notifier_block = {
        .notifier_call = acpi_processor_ppc_notifier,
 };
 
-
-static int
-acpi_processor_get_platform_limit (
-       struct acpi_processor*  pr)
+static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
 {
-       acpi_status             status = 0;
-       unsigned long           ppc = 0;
+       acpi_status status = 0;
+       unsigned long ppc = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_platform_limit");
 
@@ -128,19 +121,17 @@ acpi_processor_get_platform_limit (
        if (status != AE_NOT_FOUND)
                acpi_processor_ppc_status |= PPC_IN_USE;
 
-       if(ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+       if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PPC\n"));
                return_VALUE(-ENODEV);
        }
 
-       pr->performance_platform_limit = (int) ppc;
+       pr->performance_platform_limit = (int)ppc;
 
        return_VALUE(0);
 }
 
-
-int acpi_processor_ppc_has_changed(
-       struct acpi_processor *pr)
+int acpi_processor_ppc_has_changed(struct acpi_processor *pr)
 {
        int ret = acpi_processor_get_platform_limit(pr);
        if (ret < 0)
@@ -149,44 +140,44 @@ int acpi_processor_ppc_has_changed(
                return cpufreq_update_policy(pr->id);
 }
 
-
-void acpi_processor_ppc_init(void) {
-       if (!cpufreq_register_notifier(&acpi_ppc_notifier_block, CPUFREQ_POLICY_NOTIFIER))
+void acpi_processor_ppc_init(void)
+{
+       if (!cpufreq_register_notifier
+           (&acpi_ppc_notifier_block, CPUFREQ_POLICY_NOTIFIER))
                acpi_processor_ppc_status |= PPC_REGISTERED;
        else
-               printk(KERN_DEBUG "Warning: Processor Platform Limit not supported.\n");
+               printk(KERN_DEBUG
+                      "Warning: Processor Platform Limit not supported.\n");
 }
 
-
-void acpi_processor_ppc_exit(void) {
+void acpi_processor_ppc_exit(void)
+{
        if (acpi_processor_ppc_status & PPC_REGISTERED)
-               cpufreq_unregister_notifier(&acpi_ppc_notifier_block, CPUFREQ_POLICY_NOTIFIER);
+               cpufreq_unregister_notifier(&acpi_ppc_notifier_block,
+                                           CPUFREQ_POLICY_NOTIFIER);
 
        acpi_processor_ppc_status &= ~PPC_REGISTERED;
 }
 
-
-static int
-acpi_processor_get_performance_control (
-       struct acpi_processor *pr)
+static int acpi_processor_get_performance_control(struct acpi_processor *pr)
 {
-       int                     result = 0;
-       acpi_status             status = 0;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       union acpi_object       *pct = NULL;
-       union acpi_object       obj = {0};
+       int result = 0;
+       acpi_status status = 0;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       union acpi_object *pct = NULL;
+       union acpi_object obj = { 0 };
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_performance_control");
 
        status = acpi_evaluate_object(pr->handle, "_PCT", NULL, &buffer);
-       if(ACPI_FAILURE(status)) {
+       if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PCT\n"));
                return_VALUE(-ENODEV);
        }
 
-       pct = (union acpi_object *) buffer.pointer;
+       pct = (union acpi_object *)buffer.pointer;
        if (!pct || (pct->type != ACPI_TYPE_PACKAGE)
-               || (pct->package.count != 2)) {
+           || (pct->package.count != 2)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PCT data\n"));
                result = -EFAULT;
                goto end;
@@ -199,15 +190,15 @@ acpi_processor_get_performance_control (
        obj = pct->package.elements[0];
 
        if ((obj.type != ACPI_TYPE_BUFFER)
-               || (obj.buffer.length < sizeof(struct acpi_pct_register))
-               || (obj.buffer.pointer == NULL)) {
+           || (obj.buffer.length < sizeof(struct acpi_pct_register))
+           || (obj.buffer.pointer == NULL)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Invalid _PCT data (control_register)\n"));
+                                 "Invalid _PCT data (control_register)\n"));
                result = -EFAULT;
                goto end;
        }
-       memcpy(&pr->performance->control_register, obj.buffer.pointer, sizeof(struct acpi_pct_register));
-
+       memcpy(&pr->performance->control_register, obj.buffer.pointer,
+              sizeof(struct acpi_pct_register));
 
        /*
         * status_register
@@ -216,44 +207,42 @@ acpi_processor_get_performance_control (
        obj = pct->package.elements[1];
 
        if ((obj.type != ACPI_TYPE_BUFFER)
-               || (obj.buffer.length < sizeof(struct acpi_pct_register))
-               || (obj.buffer.pointer == NULL)) {
+           || (obj.buffer.length < sizeof(struct acpi_pct_register))
+           || (obj.buffer.pointer == NULL)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Invalid _PCT data (status_register)\n"));
+                                 "Invalid _PCT data (status_register)\n"));
                result = -EFAULT;
                goto end;
        }
 
-       memcpy(&pr->performance->status_register, obj.buffer.pointer, sizeof(struct acpi_pct_register));
+       memcpy(&pr->performance->status_register, obj.buffer.pointer,
+              sizeof(struct acpi_pct_register));
 
-end:
+      end:
        acpi_os_free(buffer.pointer);
 
        return_VALUE(result);
 }
 
-
-static int
-acpi_processor_get_performance_states (
-       struct acpi_processor   *pr)
+static int acpi_processor_get_performance_states(struct acpi_processor *pr)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       struct acpi_buffer      format = {sizeof("NNNNNN"), "NNNNNN"};
-       struct acpi_buffer      state = {0, NULL};
-       union acpi_object       *pss = NULL;
-       int                     i;
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       struct acpi_buffer format = { sizeof("NNNNNN"), "NNNNNN" };
+       struct acpi_buffer state = { 0, NULL };
+       union acpi_object *pss = NULL;
+       int i;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_performance_states");
 
        status = acpi_evaluate_object(pr->handle, "_PSS", NULL, &buffer);
-       if(ACPI_FAILURE(status)) {
+       if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error evaluating _PSS\n"));
                return_VALUE(-ENODEV);
        }
 
-       pss = (union acpi_object *) buffer.pointer;
+       pss = (union acpi_object *)buffer.pointer;
        if (!pss || (pss->type != ACPI_TYPE_PACKAGE)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PSS data\n"));
                result = -EFAULT;
@@ -261,10 +250,12 @@ acpi_processor_get_performance_states (
        }
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d performance states\n",
-               pss->package.count));
+                         pss->package.count));
 
        pr->performance->state_count = pss->package.count;
-       pr->performance->states = kmalloc(sizeof(struct acpi_processor_px) * pss->package.count, GFP_KERNEL);
+       pr->performance->states =
+           kmalloc(sizeof(struct acpi_processor_px) * pss->package.count,
+                   GFP_KERNEL);
        if (!pr->performance->states) {
                result = -ENOMEM;
                goto end;
@@ -280,46 +271,44 @@ acpi_processor_get_performance_states (
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Extracting state %d\n", i));
 
                status = acpi_extract_package(&(pss->package.elements[i]),
-                       &format, &state);
+                                             &format, &state);
                if (ACPI_FAILURE(status)) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PSS data\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid _PSS data\n"));
                        result = -EFAULT;
                        kfree(pr->performance->states);
                        goto end;
                }
 
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "State [%d]: core_frequency[%d] power[%d] transition_latency[%d] bus_master_latency[%d] control[0x%x] status[0x%x]\n",
-                       i,
-                       (u32) px->core_frequency,
-                       (u32) px->power,
-                       (u32) px->transition_latency,
-                       (u32) px->bus_master_latency,
-                       (u32) px->control,
-                       (u32) px->status));
+                                 "State [%d]: core_frequency[%d] power[%d] transition_latency[%d] bus_master_latency[%d] control[0x%x] status[0x%x]\n",
+                                 i,
+                                 (u32) px->core_frequency,
+                                 (u32) px->power,
+                                 (u32) px->transition_latency,
+                                 (u32) px->bus_master_latency,
+                                 (u32) px->control, (u32) px->status));
 
                if (!px->core_frequency) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _PSS data: freq is zero\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid _PSS data: freq is zero\n"));
                        result = -EFAULT;
                        kfree(pr->performance->states);
                        goto end;
                }
        }
 
-end:
+      end:
        acpi_os_free(buffer.pointer);
 
        return_VALUE(result);
 }
 
-
-static int
-acpi_processor_get_performance_info (
-       struct acpi_processor   *pr)
+static int acpi_processor_get_performance_info(struct acpi_processor *pr)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       acpi_handle             handle = NULL;
+       int result = 0;
+       acpi_status status = AE_OK;
+       acpi_handle handle = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_performance_info");
 
@@ -331,7 +320,7 @@ acpi_processor_get_performance_info (
        status = acpi_get_handle(pr->handle, "_PCT", &handle);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "ACPI-based processor performance control unavailable\n"));
+                                 "ACPI-based processor performance control unavailable\n"));
                return_VALUE(-ENODEV);
        }
 
@@ -350,10 +339,10 @@ acpi_processor_get_performance_info (
        return_VALUE(0);
 }
 
-
-int acpi_processor_notify_smm(struct module *calling_module) {
-       acpi_status             status;
-       static int              is_done = 0;
+int acpi_processor_notify_smm(struct module *calling_module)
+{
+       acpi_status status;
+       static int is_done = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_notify_smm");
 
@@ -371,8 +360,7 @@ int acpi_processor_notify_smm(struct module *calling_module) {
        if (is_done > 0) {
                module_put(calling_module);
                return_VALUE(0);
-       }
-       else if (is_done < 0) {
+       } else if (is_done < 0) {
                module_put(calling_module);
                return_VALUE(is_done);
        }
@@ -380,28 +368,30 @@ int acpi_processor_notify_smm(struct module *calling_module) {
        is_done = -EIO;
 
        /* Can't write pstate_cnt to smi_cmd if either value is zero */
-       if ((!acpi_fadt.smi_cmd) ||
-           (!acpi_fadt.pstate_cnt)) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "No SMI port or pstate_cnt\n"));
+       if ((!acpi_fadt.smi_cmd) || (!acpi_fadt.pstate_cnt)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No SMI port or pstate_cnt\n"));
                module_put(calling_module);
                return_VALUE(0);
        }
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Writing pstate_cnt [0x%x] to smi_cmd [0x%x]\n", acpi_fadt.pstate_cnt, acpi_fadt.smi_cmd));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Writing pstate_cnt [0x%x] to smi_cmd [0x%x]\n",
+                         acpi_fadt.pstate_cnt, acpi_fadt.smi_cmd));
 
        /* FADT v1 doesn't support pstate_cnt, many BIOS vendors use
         * it anyway, so we need to support it... */
        if (acpi_fadt_is_v1) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Using v1.0 FADT reserved value for pstate_cnt\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Using v1.0 FADT reserved value for pstate_cnt\n"));
        }
 
-       status = acpi_os_write_port (acpi_fadt.smi_cmd,
-                                    (u32) acpi_fadt.pstate_cnt, 8);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_os_write_port(acpi_fadt.smi_cmd,
+                                   (u32) acpi_fadt.pstate_cnt, 8);
+       if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
                                  "Failed to write pstate_cnt [0x%x] to "
-                                 "smi_cmd [0x%x]\n", acpi_fadt.pstate_cnt, acpi_fadt.smi_cmd));
+                                 "smi_cmd [0x%x]\n", acpi_fadt.pstate_cnt,
+                                 acpi_fadt.smi_cmd));
                module_put(calling_module);
                return_VALUE(status);
        }
@@ -415,24 +405,24 @@ int acpi_processor_notify_smm(struct module *calling_module) {
 
        return_VALUE(0);
 }
-EXPORT_SYMBOL(acpi_processor_notify_smm);
 
+EXPORT_SYMBOL(acpi_processor_notify_smm);
 
 #ifdef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF
 /* /proc/acpi/processor/../performance interface (DEPRECATED) */
 
 static int acpi_processor_perf_open_fs(struct inode *inode, struct file *file);
 static struct file_operations acpi_processor_perf_fops = {
-       .open           = acpi_processor_perf_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_processor_perf_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 static int acpi_processor_perf_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_processor   *pr = (struct acpi_processor *)seq->private;
-       int                     i;
+       struct acpi_processor *pr = (struct acpi_processor *)seq->private;
+       int i;
 
        ACPI_FUNCTION_TRACE("acpi_processor_perf_seq_show");
 
@@ -445,42 +435,40 @@ static int acpi_processor_perf_seq_show(struct seq_file *seq, void *offset)
        }
 
        seq_printf(seq, "state count:             %d\n"
-                       "active state:            P%d\n",
-                       pr->performance->state_count,
-                       pr->performance->state);
+                  "active state:            P%d\n",
+                  pr->performance->state_count, pr->performance->state);
 
        seq_puts(seq, "states:\n");
        for (i = 0; i < pr->performance->state_count; i++)
-               seq_printf(seq, "   %cP%d:                  %d MHz, %d mW, %d uS\n",
-                       (i == pr->performance->state?'*':' '), i,
-                       (u32) pr->performance->states[i].core_frequency,
-                       (u32) pr->performance->states[i].power,
-                       (u32) pr->performance->states[i].transition_latency);
-
-end:
+               seq_printf(seq,
+                          "   %cP%d:                  %d MHz, %d mW, %d uS\n",
+                          (i == pr->performance->state ? '*' : ' '), i,
+                          (u32) pr->performance->states[i].core_frequency,
+                          (u32) pr->performance->states[i].power,
+                          (u32) pr->performance->states[i].transition_latency);
+
+      end:
        return_VALUE(0);
 }
 
 static int acpi_processor_perf_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_processor_perf_seq_show,
-                                               PDE(inode)->data);
+                          PDE(inode)->data);
 }
 
 static ssize_t
-acpi_processor_write_performance (
-        struct file            *file,
-        const char             __user *buffer,
-        size_t                 count,
-        loff_t                 *data)
+acpi_processor_write_performance(struct file *file,
+                                const char __user * buffer,
+                                size_t count, loff_t * data)
 {
-       int                     result = 0;
-       struct seq_file         *m = (struct seq_file *) file->private_data;
-       struct acpi_processor   *pr = (struct acpi_processor *) m->private;
+       int result = 0;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_processor *pr = (struct acpi_processor *)m->private;
        struct acpi_processor_performance *perf;
-       char                    state_string[12] = {'\0'};
-       unsigned int            new_state = 0;
-       struct cpufreq_policy   policy;
+       char state_string[12] = { '\0' };
+       unsigned int new_state = 0;
+       struct cpufreq_policy policy;
 
        ACPI_FUNCTION_TRACE("acpi_processor_write_performance");
 
@@ -513,12 +501,10 @@ acpi_processor_write_performance (
        return_VALUE(count);
 }
 
-static void
-acpi_cpufreq_add_file (
-       struct acpi_processor *pr)
+static void acpi_cpufreq_add_file(struct acpi_processor *pr)
 {
-       struct proc_dir_entry   *entry = NULL;
-       struct acpi_device      *device = NULL;
+       struct proc_dir_entry *entry = NULL;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_cpufreq_addfile");
 
@@ -527,11 +513,12 @@ acpi_cpufreq_add_file (
 
        /* add file 'performance' [R/W] */
        entry = create_proc_entry(ACPI_PROCESSOR_FILE_PERFORMANCE,
-                 S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+                                 S_IFREG | S_IRUGO | S_IWUSR,
+                                 acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_PROCESSOR_FILE_PERFORMANCE));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_PROCESSOR_FILE_PERFORMANCE));
        else {
                entry->proc_fops = &acpi_processor_perf_fops;
                entry->proc_fops->write = acpi_processor_write_performance;
@@ -541,11 +528,9 @@ acpi_cpufreq_add_file (
        return_VOID;
 }
 
-static void
-acpi_cpufreq_remove_file (
-       struct acpi_processor *pr)
+static void acpi_cpufreq_remove_file(struct acpi_processor *pr)
 {
-       struct acpi_device      *device = NULL;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_cpufreq_addfile");
 
@@ -554,21 +539,25 @@ acpi_cpufreq_remove_file (
 
        /* remove file 'performance' */
        remove_proc_entry(ACPI_PROCESSOR_FILE_PERFORMANCE,
-                 acpi_device_dir(device));
+                         acpi_device_dir(device));
 
        return_VOID;
 }
 
 #else
-static void acpi_cpufreq_add_file (struct acpi_processor *pr) { return; }
-static void acpi_cpufreq_remove_file (struct acpi_processor *pr) { return; }
-#endif /* CONFIG_X86_ACPI_CPUFREQ_PROC_INTF */
-
+static void acpi_cpufreq_add_file(struct acpi_processor *pr)
+{
+       return;
+}
+static void acpi_cpufreq_remove_file(struct acpi_processor *pr)
+{
+       return;
+}
+#endif                         /* CONFIG_X86_ACPI_CPUFREQ_PROC_INTF */
 
 int
-acpi_processor_register_performance (
-       struct acpi_processor_performance * performance,
-       unsigned int cpu)
+acpi_processor_register_performance(struct acpi_processor_performance
+                                   *performance, unsigned int cpu)
 {
        struct acpi_processor *pr;
 
@@ -603,13 +592,12 @@ acpi_processor_register_performance (
        up(&performance_sem);
        return_VALUE(0);
 }
-EXPORT_SYMBOL(acpi_processor_register_performance);
 
+EXPORT_SYMBOL(acpi_processor_register_performance);
 
 void
-acpi_processor_unregister_performance (
-       struct acpi_processor_performance * performance,
-       unsigned int cpu)
+acpi_processor_unregister_performance(struct acpi_processor_performance
+                                     *performance, unsigned int cpu)
 {
        struct acpi_processor *pr;
 
@@ -632,4 +620,5 @@ acpi_processor_unregister_performance (
 
        return_VOID;
 }
+
 EXPORT_SYMBOL(acpi_processor_unregister_performance);
index 12bd980a12e940ea8f1d38fec8332dc6ab095015..37528c3b64b02baeb0aafbae96f2775495177453 100644 (file)
 #define ACPI_PROCESSOR_CLASS            "processor"
 #define ACPI_PROCESSOR_DRIVER_NAME      "ACPI Processor Driver"
 #define _COMPONENT              ACPI_PROCESSOR_COMPONENT
-ACPI_MODULE_NAME                ("acpi_processor")
-
+ACPI_MODULE_NAME("acpi_processor")
 
 /* --------------------------------------------------------------------------
                                  Limit Interface
    -------------------------------------------------------------------------- */
-
-static int
-acpi_processor_apply_limit (
-       struct acpi_processor*  pr)
+static int acpi_processor_apply_limit(struct acpi_processor *pr)
 {
-       int                     result = 0;
-       u16                     px = 0;
-       u16                     tx = 0;
+       int result = 0;
+       u16 px = 0;
+       u16 tx = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_apply_limit");
 
@@ -80,19 +76,17 @@ acpi_processor_apply_limit (
        pr->limit.state.px = px;
        pr->limit.state.tx = tx;
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Processor [%d] limit set to (P%d:T%d)\n",
-               pr->id,
-               pr->limit.state.px,
-               pr->limit.state.tx));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Processor [%d] limit set to (P%d:T%d)\n", pr->id,
+                         pr->limit.state.px, pr->limit.state.tx));
 
-end:
+      end:
        if (result)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unable to set limit\n"));
 
        return_VALUE(result);
 }
 
-
 #ifdef CONFIG_CPU_FREQ
 
 /* If a passive cooling situation is detected, primarily CPUfreq is used, as it
@@ -104,7 +98,6 @@ end:
 static unsigned int cpufreq_thermal_reduction_pctg[NR_CPUS];
 static unsigned int acpi_thermal_cpufreq_is_init = 0;
 
-
 static int cpu_has_cpufreq(unsigned int cpu)
 {
        struct cpufreq_policy policy;
@@ -115,7 +108,6 @@ static int cpu_has_cpufreq(unsigned int cpu)
        return 0;
 }
 
-
 static int acpi_thermal_cpufreq_increase(unsigned int cpu)
 {
        if (!cpu_has_cpufreq(cpu))
@@ -130,7 +122,6 @@ static int acpi_thermal_cpufreq_increase(unsigned int cpu)
        return -ERANGE;
 }
 
-
 static int acpi_thermal_cpufreq_decrease(unsigned int cpu)
 {
        if (!cpu_has_cpufreq(cpu))
@@ -145,11 +136,8 @@ static int acpi_thermal_cpufreq_decrease(unsigned int cpu)
        return -ERANGE;
 }
 
-
-static int acpi_thermal_cpufreq_notifier(
-       struct notifier_block *nb,
-       unsigned long event,
-       void *data)
+static int acpi_thermal_cpufreq_notifier(struct notifier_block *nb,
+                                        unsigned long event, void *data)
 {
        struct cpufreq_policy *policy = data;
        unsigned long max_freq = 0;
@@ -157,68 +145,74 @@ static int acpi_thermal_cpufreq_notifier(
        if (event != CPUFREQ_ADJUST)
                goto out;
 
-       max_freq = (policy->cpuinfo.max_freq * (100 - cpufreq_thermal_reduction_pctg[policy->cpu])) / 100;
+       max_freq =
+           (policy->cpuinfo.max_freq *
+            (100 - cpufreq_thermal_reduction_pctg[policy->cpu])) / 100;
 
        cpufreq_verify_within_limits(policy, 0, max_freq);
 
- out:
     out:
        return 0;
 }
 
-
 static struct notifier_block acpi_thermal_cpufreq_notifier_block = {
        .notifier_call = acpi_thermal_cpufreq_notifier,
 };
 
-
-void acpi_thermal_cpufreq_init(void) {
+void acpi_thermal_cpufreq_init(void)
+{
        int i;
 
-       for (i=0; i<NR_CPUS; i++)
+       for (i = 0; i < NR_CPUS; i++)
                cpufreq_thermal_reduction_pctg[i] = 0;
 
-       i = cpufreq_register_notifier(&acpi_thermal_cpufreq_notifier_block, CPUFREQ_POLICY_NOTIFIER);
+       i = cpufreq_register_notifier(&acpi_thermal_cpufreq_notifier_block,
+                                     CPUFREQ_POLICY_NOTIFIER);
        if (!i)
                acpi_thermal_cpufreq_is_init = 1;
 }
 
-void acpi_thermal_cpufreq_exit(void) {
+void acpi_thermal_cpufreq_exit(void)
+{
        if (acpi_thermal_cpufreq_is_init)
-               cpufreq_unregister_notifier(&acpi_thermal_cpufreq_notifier_block, CPUFREQ_POLICY_NOTIFIER);
+               cpufreq_unregister_notifier
+                   (&acpi_thermal_cpufreq_notifier_block,
+                    CPUFREQ_POLICY_NOTIFIER);
 
        acpi_thermal_cpufreq_is_init = 0;
 }
 
-#else /* ! CONFIG_CPU_FREQ */
-
-static int acpi_thermal_cpufreq_increase(unsigned int cpu) { return -ENODEV; }
-static int acpi_thermal_cpufreq_decrease(unsigned int cpu) { return -ENODEV; }
+#else                          /* ! CONFIG_CPU_FREQ */
 
+static int acpi_thermal_cpufreq_increase(unsigned int cpu)
+{
+       return -ENODEV;
+}
+static int acpi_thermal_cpufreq_decrease(unsigned int cpu)
+{
+       return -ENODEV;
+}
 
 #endif
 
-
-int
-acpi_processor_set_thermal_limit (
-       acpi_handle             handle,
-       int                     type)
+int acpi_processor_set_thermal_limit(acpi_handle handle, int type)
 {
-       int                     result = 0;
-       struct acpi_processor   *pr = NULL;
-       struct acpi_device      *device = NULL;
-       int                     tx = 0;
+       int result = 0;
+       struct acpi_processor *pr = NULL;
+       struct acpi_device *device = NULL;
+       int tx = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_set_thermal_limit");
 
        if ((type < ACPI_PROCESSOR_LIMIT_NONE)
-               || (type > ACPI_PROCESSOR_LIMIT_DECREMENT))
+           || (type > ACPI_PROCESSOR_LIMIT_DECREMENT))
                return_VALUE(-EINVAL);
 
        result = acpi_bus_get_device(handle, &device);
        if (result)
                return_VALUE(result);
 
-       pr = (struct acpi_processor *) acpi_driver_data(device);
+       pr = (struct acpi_processor *)acpi_driver_data(device);
        if (!pr)
                return_VALUE(-ENODEV);
 
@@ -250,12 +244,12 @@ acpi_processor_set_thermal_limit (
                        goto end;
                else if (result == -ERANGE)
                        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                                       "At maximum performance state\n"));
+                                         "At maximum performance state\n"));
 
                if (pr->flags.throttling) {
                        if (tx == (pr->throttling.state_count - 1))
                                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                                       "At maximum throttling state\n"));
+                                                 "At maximum throttling state\n"));
                        else
                                tx++;
                }
@@ -267,7 +261,7 @@ acpi_processor_set_thermal_limit (
                if (pr->flags.throttling) {
                        if (tx == 0)
                                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                                       "At minimum throttling state\n"));
+                                                 "At minimum throttling state\n"));
                        else {
                                tx--;
                                goto end;
@@ -277,12 +271,12 @@ acpi_processor_set_thermal_limit (
                result = acpi_thermal_cpufreq_decrease(pr->id);
                if (result == -ERANGE)
                        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                                       "At minimum performance state\n"));
+                                         "At minimum performance state\n"));
 
                break;
        }
 
-end:
+      end:
        if (pr->flags.throttling) {
                pr->limit.thermal.px = 0;
                pr->limit.thermal.tx = tx;
@@ -293,18 +287,14 @@ end:
                                          "Unable to set thermal limit\n"));
 
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Thermal limit now (P%d:T%d)\n",
-                                 pr->limit.thermal.px,
-                                 pr->limit.thermal.tx));
+                                 pr->limit.thermal.px, pr->limit.thermal.tx));
        } else
                result = 0;
 
        return_VALUE(result);
 }
 
-
-int
-acpi_processor_get_limit_info (
-       struct acpi_processor   *pr)
+int acpi_processor_get_limit_info(struct acpi_processor *pr)
 {
        ACPI_FUNCTION_TRACE("acpi_processor_get_limit_info");
 
@@ -317,12 +307,11 @@ acpi_processor_get_limit_info (
        return_VALUE(0);
 }
 
-
 /* /proc interface */
 
 static int acpi_processor_limit_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_processor   *pr = (struct acpi_processor *)seq->private;
+       struct acpi_processor *pr = (struct acpi_processor *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_processor_limit_seq_show");
 
@@ -335,34 +324,32 @@ static int acpi_processor_limit_seq_show(struct seq_file *seq, void *offset)
        }
 
        seq_printf(seq, "active limit:            P%d:T%d\n"
-                       "user limit:              P%d:T%d\n"
-                       "thermal limit:           P%d:T%d\n",
-                       pr->limit.state.px, pr->limit.state.tx,
-                       pr->limit.user.px, pr->limit.user.tx,
-                       pr->limit.thermal.px, pr->limit.thermal.tx);
+                  "user limit:              P%d:T%d\n"
+                  "thermal limit:           P%d:T%d\n",
+                  pr->limit.state.px, pr->limit.state.tx,
+                  pr->limit.user.px, pr->limit.user.tx,
+                  pr->limit.thermal.px, pr->limit.thermal.tx);
 
-end:
+      end:
        return_VALUE(0);
 }
 
 static int acpi_processor_limit_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_processor_limit_seq_show,
-                                               PDE(inode)->data);
+                          PDE(inode)->data);
 }
 
-ssize_t acpi_processor_write_limit (
-       struct file             *file,
-       const char              __user *buffer,
-       size_t                  count,
-       loff_t                  *data)
+ssize_t acpi_processor_write_limit(struct file * file,
+                                  const char __user * buffer,
+                                  size_t count, loff_t * data)
 {
-       int                     result = 0;
-        struct seq_file        *m = (struct seq_file *)file->private_data;
-       struct acpi_processor   *pr = (struct acpi_processor *)m->private;
-       char                    limit_string[25] = {'\0'};
-       int                     px = 0;
-       int                     tx = 0;
+       int result = 0;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_processor *pr = (struct acpi_processor *)m->private;
+       char limit_string[25] = { '\0' };
+       int px = 0;
+       int tx = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_write_limit");
 
@@ -396,11 +383,9 @@ ssize_t acpi_processor_write_limit (
        return_VALUE(count);
 }
 
-
 struct file_operations acpi_processor_limit_fops = {
-       .open           = acpi_processor_limit_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_processor_limit_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
-
index be9f569d39d33f73784e507322cffbed40c3e114..74a52d4e79ae936d8ee30aa19ae6e23279e45c4b 100644 (file)
 #define ACPI_PROCESSOR_CLASS            "processor"
 #define ACPI_PROCESSOR_DRIVER_NAME      "ACPI Processor Driver"
 #define _COMPONENT              ACPI_PROCESSOR_COMPONENT
-ACPI_MODULE_NAME                ("acpi_processor")
-
+ACPI_MODULE_NAME("acpi_processor")
 
 /* --------------------------------------------------------------------------
                               Throttling Control
    -------------------------------------------------------------------------- */
-
-static int
-acpi_processor_get_throttling (
-       struct acpi_processor   *pr)
+static int acpi_processor_get_throttling(struct acpi_processor *pr)
 {
-       int                     state = 0;
-       u32                     value = 0;
-       u32                     duty_mask = 0;
-       u32                     duty_value = 0;
+       int state = 0;
+       u32 value = 0;
+       u32 duty_mask = 0;
+       u32 duty_value = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_throttling");
 
@@ -86,7 +82,7 @@ acpi_processor_get_throttling (
                duty_value >>= pr->throttling.duty_offset;
 
                if (duty_value)
-                       state = pr->throttling.state_count-duty_value;
+                       state = pr->throttling.state_count - duty_value;
        }
 
        pr->throttling.state = state;
@@ -94,20 +90,17 @@ acpi_processor_get_throttling (
        local_irq_enable();
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-               "Throttling state is T%d (%d%% throttling applied)\n",
-               state, pr->throttling.states[state].performance));
+                         "Throttling state is T%d (%d%% throttling applied)\n",
+                         state, pr->throttling.states[state].performance));
 
        return_VALUE(0);
 }
 
-
-int acpi_processor_set_throttling (
-       struct acpi_processor   *pr,
-       int                     state)
+int acpi_processor_set_throttling(struct acpi_processor *pr, int state)
 {
-       u32                     value = 0;
-       u32                     duty_mask = 0;
-       u32                     duty_value = 0;
+       u32 value = 0;
+       u32 duty_mask = 0;
+       u32 duty_value = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_set_throttling");
 
@@ -168,28 +161,26 @@ int acpi_processor_set_throttling (
        local_irq_enable();
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-               "Throttling state set to T%d (%d%%)\n", state,
-               (pr->throttling.states[state].performance?pr->throttling.states[state].performance/10:0)));
+                         "Throttling state set to T%d (%d%%)\n", state,
+                         (pr->throttling.states[state].performance ? pr->
+                          throttling.states[state].performance / 10 : 0)));
 
        return_VALUE(0);
 }
 
-
-int
-acpi_processor_get_throttling_info (
-       struct acpi_processor   *pr)
+int acpi_processor_get_throttling_info(struct acpi_processor *pr)
 {
-       int                     result = 0;
-       int                     step = 0;
-       int                     i = 0;
+       int result = 0;
+       int step = 0;
+       int i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_get_throttling_info");
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-               "pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
-               pr->throttling.address,
-               pr->throttling.duty_offset,
-               pr->throttling.duty_width));
+                         "pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
+                         pr->throttling.address,
+                         pr->throttling.duty_offset,
+                         pr->throttling.duty_width));
 
        if (!pr)
                return_VALUE(-EINVAL);
@@ -199,14 +190,12 @@ acpi_processor_get_throttling_info (
        if (!pr->throttling.address) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling register\n"));
                return_VALUE(0);
-       }
-       else if (!pr->throttling.duty_width) {
+       } else if (!pr->throttling.duty_width) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling states\n"));
                return_VALUE(0);
        }
        /* TBD: Support duty_cycle values that span bit 4. */
-       else if ((pr->throttling.duty_offset
-               + pr->throttling.duty_width) > 4) {
+       else if ((pr->throttling.duty_offset + pr->throttling.duty_width) > 4) {
                ACPI_DEBUG_PRINT((ACPI_DB_WARN, "duty_cycle spans bit 4\n"));
                return_VALUE(0);
        }
@@ -218,7 +207,7 @@ acpi_processor_get_throttling_info (
         */
        if (errata.piix4.throttle) {
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Throttling not supported on PIIX4 A- or B-step\n"));
+                                 "Throttling not supported on PIIX4 A- or B-step\n"));
                return_VALUE(0);
        }
 
@@ -232,13 +221,13 @@ acpi_processor_get_throttling_info (
 
        step = (1000 / pr->throttling.state_count);
 
-       for (i=0; i<pr->throttling.state_count; i++) {
+       for (i = 0; i < pr->throttling.state_count; i++) {
                pr->throttling.states[i].performance = step * i;
                pr->throttling.states[i].power = step * i;
        }
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d throttling states\n",
-               pr->throttling.state_count));
+                         pr->throttling.state_count));
 
        pr->flags.throttling = 1;
 
@@ -253,28 +242,29 @@ acpi_processor_get_throttling_info (
                goto end;
 
        if (pr->throttling.state) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Disabling throttling (was T%d)\n",
-                       pr->throttling.state));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Disabling throttling (was T%d)\n",
+                                 pr->throttling.state));
                result = acpi_processor_set_throttling(pr, 0);
                if (result)
                        goto end;
        }
 
-end:
+      end:
        if (result)
                pr->flags.throttling = 0;
 
        return_VALUE(result);
 }
 
-
 /* proc interface */
 
-static int acpi_processor_throttling_seq_show(struct seq_file *seq, void *offset)
+static int acpi_processor_throttling_seq_show(struct seq_file *seq,
+                                             void *offset)
 {
-       struct acpi_processor   *pr = (struct acpi_processor *)seq->private;
-       int                     i = 0;
-       int                     result = 0;
+       struct acpi_processor *pr = (struct acpi_processor *)seq->private;
+       int i = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_processor_throttling_seq_show");
 
@@ -289,41 +279,41 @@ static int acpi_processor_throttling_seq_show(struct seq_file *seq, void *offset
        result = acpi_processor_get_throttling(pr);
 
        if (result) {
-               seq_puts(seq, "Could not determine current throttling state.\n");
+               seq_puts(seq,
+                        "Could not determine current throttling state.\n");
                goto end;
        }
 
        seq_printf(seq, "state count:             %d\n"
-                       "active state:            T%d\n",
-                       pr->throttling.state_count,
-                       pr->throttling.state);
+                  "active state:            T%d\n",
+                  pr->throttling.state_count, pr->throttling.state);
 
        seq_puts(seq, "states:\n");
        for (i = 0; i < pr->throttling.state_count; i++)
                seq_printf(seq, "   %cT%d:                  %02d%%\n",
-                       (i == pr->throttling.state?'*':' '), i,
-                       (pr->throttling.states[i].performance?pr->throttling.states[i].performance/10:0));
+                          (i == pr->throttling.state ? '*' : ' '), i,
+                          (pr->throttling.states[i].performance ? pr->
+                           throttling.states[i].performance / 10 : 0));
 
-end:
+      end:
        return_VALUE(0);
 }
 
-static int acpi_processor_throttling_open_fs(struct inode *inode, struct file *file)
+static int acpi_processor_throttling_open_fs(struct inode *inode,
+                                            struct file *file)
 {
        return single_open(file, acpi_processor_throttling_seq_show,
-                                               PDE(inode)->data);
+                          PDE(inode)->data);
 }
 
-ssize_t acpi_processor_write_throttling (
-        struct file            *file,
-        const char             __user *buffer,
-        size_t                 count,
-        loff_t                 *data)
+ssize_t acpi_processor_write_throttling(struct file * file,
+                                       const char __user * buffer,
+                                       size_t count, loff_t * data)
 {
-       int                     result = 0;
-        struct seq_file        *m = (struct seq_file *)file->private_data;
-       struct acpi_processor   *pr = (struct acpi_processor *)m->private;
-       char                    state_string[12] = {'\0'};
+       int result = 0;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_processor *pr = (struct acpi_processor *)m->private;
+       char state_string[12] = { '\0' };
 
        ACPI_FUNCTION_TRACE("acpi_processor_write_throttling");
 
@@ -336,7 +326,8 @@ ssize_t acpi_processor_write_throttling (
        state_string[count] = '\0';
 
        result = acpi_processor_set_throttling(pr,
-               simple_strtoul(state_string, NULL, 0));
+                                              simple_strtoul(state_string,
+                                                             NULL, 0));
        if (result)
                return_VALUE(result);
 
@@ -344,8 +335,8 @@ ssize_t acpi_processor_write_throttling (
 }
 
 struct file_operations acpi_processor_throttling_fops = {
-       .open           = acpi_processor_throttling_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_processor_throttling_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
index 55d264771c4805ac9e2b2da2acc18789f47ed04c..23b54baa0cb2ebd6e451fff26967ba79b2b00eba 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acresrc.h>
 
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rsaddr")
+ACPI_MODULE_NAME("rsaddr")
+
+/* Local prototypes */
+static void
+acpi_rs_decode_general_flags(union acpi_resource_data *resource, u8 flags);
+
+static u8 acpi_rs_encode_general_flags(union acpi_resource_data *resource);
+
+static void
+acpi_rs_decode_specific_flags(union acpi_resource_data *resource, u8 flags);
+
+static u8 acpi_rs_encode_specific_flags(union acpi_resource_data *resource);
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_rs_decode_general_flags
+ *
+ * PARAMETERS:  Resource            - Address resource data struct
+ *              Flags               - Actual flag byte
+ *
+ * RETURN:      Decoded flag bits in resource struct
+ *
+ * DESCRIPTION: Decode a general flag byte to an address resource struct
+ *
+ ******************************************************************************/
+
+static void
+acpi_rs_decode_general_flags(union acpi_resource_data *resource, u8 flags)
+{
+       ACPI_FUNCTION_ENTRY();
+
+       /* Producer / Consumer - flag bit[0] */
+
+       resource->address.producer_consumer = (u32) (flags & 0x01);
+
+       /* Decode (_DEC) - flag bit[1] */
 
+       resource->address.decode = (u32) ((flags >> 1) & 0x01);
+
+       /* Min Address Fixed (_MIF) - flag bit[2] */
+
+       resource->address.min_address_fixed = (u32) ((flags >> 2) & 0x01);
+
+       /* Max Address Fixed (_MAF) - flag bit[3] */
+
+       resource->address.max_address_fixed = (u32) ((flags >> 3) & 0x01);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_rs_encode_general_flags
+ *
+ * PARAMETERS:  Resource            - Address resource data struct
+ *
+ * RETURN:      Encoded general flag byte
+ *
+ * DESCRIPTION: Construct a general flag byte from an address resource struct
+ *
+ ******************************************************************************/
+
+static u8 acpi_rs_encode_general_flags(union acpi_resource_data *resource)
+{
+       u8 flags;
+
+       ACPI_FUNCTION_ENTRY();
+
+       /* Producer / Consumer - flag bit[0] */
+
+       flags = (u8) (resource->address.producer_consumer & 0x01);
+
+       /* Decode (_DEC) - flag bit[1] */
+
+       flags |= (u8) ((resource->address.decode & 0x01) << 1);
+
+       /* Min Address Fixed (_MIF) - flag bit[2] */
+
+       flags |= (u8) ((resource->address.min_address_fixed & 0x01) << 2);
+
+       /* Max Address Fixed (_MAF) - flag bit[3] */
+
+       flags |= (u8) ((resource->address.max_address_fixed & 0x01) << 3);
+
+       return (flags);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_rs_decode_specific_flags
+ *
+ * PARAMETERS:  Resource            - Address resource data struct
+ *              Flags               - Actual flag byte
+ *
+ * RETURN:      Decoded flag bits in attribute struct
+ *
+ * DESCRIPTION: Decode a type-specific flag byte to an attribute struct.
+ *              Type-specific flags are only defined for the Memory and IO
+ *              resource types.
+ *
+ ******************************************************************************/
+
+static void
+acpi_rs_decode_specific_flags(union acpi_resource_data *resource, u8 flags)
+{
+       ACPI_FUNCTION_ENTRY();
+
+       if (resource->address.resource_type == ACPI_MEMORY_RANGE) {
+               /* Write Status (_RW) - flag bit[0] */
+
+               resource->address.attribute.memory.read_write_attribute =
+                   (u16) (flags & 0x01);
+
+               /* Memory Attributes (_MEM) - flag bits[2:1] */
+
+               resource->address.attribute.memory.cache_attribute =
+                   (u16) ((flags >> 1) & 0x03);
+       } else if (resource->address.resource_type == ACPI_IO_RANGE) {
+               /* Ranges (_RNG) - flag bits[1:0] */
+
+               resource->address.attribute.io.range_attribute =
+                   (u16) (flags & 0x03);
+
+               /* Translations (_TTP and _TRS) - flag bits[5:4] */
+
+               resource->address.attribute.io.translation_attribute =
+                   (u16) ((flags >> 4) & 0x03);
+       }
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_rs_encode_specific_flags
+ *
+ * PARAMETERS:  Resource            - Address resource data struct
+ *
+ * RETURN:      Encoded type-specific flag byte
+ *
+ * DESCRIPTION: Construct a type-specific flag byte from an attribute struct.
+ *              Type-specific flags are only defined for the Memory and IO
+ *              resource types.
+ *
+ ******************************************************************************/
+
+static u8 acpi_rs_encode_specific_flags(union acpi_resource_data *resource)
+{
+       u8 flags = 0;
+
+       ACPI_FUNCTION_ENTRY();
+
+       if (resource->address.resource_type == ACPI_MEMORY_RANGE) {
+               /* Write Status (_RW) - flag bit[0] */
+
+               flags = (u8)
+                   (resource->address.attribute.memory.
+                    read_write_attribute & 0x01);
+
+               /* Memory Attributes (_MEM) - flag bits[2:1] */
+
+               flags |= (u8)
+                   ((resource->address.attribute.memory.
+                     cache_attribute & 0x03) << 1);
+       } else if (resource->address.resource_type == ACPI_IO_RANGE) {
+               /* Ranges (_RNG) - flag bits[1:0] */
+
+               flags = (u8)
+                   (resource->address.attribute.io.range_attribute & 0x03);
+
+               /* Translations (_TTP and _TRS) - flag bits[5:4] */
+
+               flags |= (u8)
+                   ((resource->address.attribute.io.
+                     translation_attribute & 0x03) << 4);
+       }
+
+       return (flags);
+}
 
 /*******************************************************************************
  *
  ******************************************************************************/
 
 acpi_status
-acpi_rs_address16_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_address16_resource(u8 * byte_stream_buffer,
+                          acpi_size * bytes_consumed,
+                          u8 ** output_buffer, acpi_size * structure_size)
 {
-       u32                             index;
-       u16                             temp16;
-       u8                              temp8;
-       u8                              *temp_ptr;
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_address16);
-
+       u32 index;
+       u16 temp16;
+       u8 temp8;
+       u8 *temp_ptr;
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       acpi_size struct_size =
+           ACPI_SIZEOF_RESOURCE(struct acpi_resource_address16);
 
-       ACPI_FUNCTION_TRACE ("rs_address16_resource");
+       ACPI_FUNCTION_TRACE("rs_address16_resource");
 
-
-       /* Point past the Descriptor to get the number of bytes consumed */
+       /* Get the Descriptor Length field */
 
        buffer += 1;
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
        /* Validate minimum descriptor length */
 
        if (temp16 < 13) {
-               return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);
+               return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH);
        }
 
        *bytes_consumed = temp16 + 3;
@@ -112,7 +280,7 @@ acpi_rs_address16_resource (
        /* Values 0-2 and 0xC0-0xFF are valid */
 
        if ((temp8 > 2) && (temp8 < 0xC0)) {
-               return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
+               return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE);
        }
 
        output_struct->data.address16.resource_type = temp8;
@@ -120,73 +288,41 @@ acpi_rs_address16_resource (
        /* Get the General Flags (Byte4) */
 
        buffer += 1;
-       temp8 = *buffer;
-
-       /* Producer / Consumer */
-
-       output_struct->data.address16.producer_consumer = temp8 & 0x01;
-
-       /* Decode */
-
-       output_struct->data.address16.decode = (temp8 >> 1) & 0x01;
-
-       /* Min Address Fixed */
-
-       output_struct->data.address16.min_address_fixed = (temp8 >> 2) & 0x01;
-
-       /* Max Address Fixed */
-
-       output_struct->data.address16.max_address_fixed = (temp8 >> 3) & 0x01;
+       acpi_rs_decode_general_flags(&output_struct->data, *buffer);
 
        /* Get the Type Specific Flags (Byte5) */
 
        buffer += 1;
-       temp8 = *buffer;
-
-       if (ACPI_MEMORY_RANGE == output_struct->data.address16.resource_type) {
-               output_struct->data.address16.attribute.memory.read_write_attribute =
-                               (u16) (temp8 & 0x01);
-               output_struct->data.address16.attribute.memory.cache_attribute =
-                               (u16) ((temp8 >> 1) & 0x03);
-       }
-       else {
-               if (ACPI_IO_RANGE == output_struct->data.address16.resource_type) {
-                       output_struct->data.address16.attribute.io.range_attribute =
-                               (u16) (temp8 & 0x03);
-                       output_struct->data.address16.attribute.io.translation_attribute =
-                               (u16) ((temp8 >> 4) & 0x03);
-               }
-               else {
-                       /* BUS_NUMBER_RANGE == Address16.Data->resource_type */
-                       /* Nothing needs to be filled in */
-               }
-       }
+       acpi_rs_decode_specific_flags(&output_struct->data, *buffer);
 
        /* Get Granularity (Bytes 6-7) */
 
        buffer += 1;
-       ACPI_MOVE_16_TO_32 (&output_struct->data.address16.granularity, buffer);
+       ACPI_MOVE_16_TO_32(&output_struct->data.address16.granularity, buffer);
 
        /* Get min_address_range (Bytes 8-9) */
 
        buffer += 2;
-       ACPI_MOVE_16_TO_32 (&output_struct->data.address16.min_address_range, buffer);
+       ACPI_MOVE_16_TO_32(&output_struct->data.address16.min_address_range,
+                          buffer);
 
        /* Get max_address_range (Bytes 10-11) */
 
        buffer += 2;
-       ACPI_MOVE_16_TO_32 (&output_struct->data.address16.max_address_range, buffer);
+       ACPI_MOVE_16_TO_32(&output_struct->data.address16.max_address_range,
+                          buffer);
 
        /* Get address_translation_offset (Bytes 12-13) */
 
        buffer += 2;
-       ACPI_MOVE_16_TO_32 (&output_struct->data.address16.address_translation_offset,
-               buffer);
+       ACPI_MOVE_16_TO_32(&output_struct->data.address16.
+                          address_translation_offset, buffer);
 
        /* Get address_length (Bytes 14-15) */
 
        buffer += 2;
-       ACPI_MOVE_16_TO_32 (&output_struct->data.address16.address_length, buffer);
+       ACPI_MOVE_16_TO_32(&output_struct->data.address16.address_length,
+                          buffer);
 
        /* Resource Source Index (if present) */
 
@@ -205,8 +341,8 @@ acpi_rs_address16_resource (
        if (*bytes_consumed > (16 + 1)) {
                /* Dereference the Index */
 
-               temp8 = *buffer;
-               output_struct->data.address16.resource_source.index = (u32) temp8;
+               output_struct->data.address16.resource_source.index =
+                   (u32) * buffer;
 
                /* Point to the String */
 
@@ -215,28 +351,27 @@ acpi_rs_address16_resource (
                /* Point the String pointer to the end of this structure */
 
                output_struct->data.address16.resource_source.string_ptr =
-                               (char *)((u8 * )output_struct + struct_size);
+                   (char *)((u8 *) output_struct + struct_size);
 
                temp_ptr = (u8 *)
-                       output_struct->data.address16.resource_source.string_ptr;
+                   output_struct->data.address16.resource_source.string_ptr;
 
-               /* Copy the string into the buffer */
+               /* Copy the resource_source string into the buffer */
 
                index = 0;
-
-               while (0x00 != *buffer) {
+               while (*buffer) {
                        *temp_ptr = *buffer;
 
-                       temp_ptr += 1;
-                       buffer += 1;
-                       index += 1;
+                       temp_ptr++;
+                       buffer++;
+                       index++;
                }
 
-               /* Add the terminating null */
-
-               *temp_ptr = 0x00;
+               /* Add the terminating null and set the string length */
 
-               output_struct->data.address16.resource_source.string_length = index + 1;
+               *temp_ptr = 0;
+               output_struct->data.address16.resource_source.string_length =
+                   index + 1;
 
                /*
                 * In order for the struct_size to fall on a 32-bit boundary,
@@ -244,10 +379,9 @@ acpi_rs_address16_resource (
                 * struct_size to the next 32-bit boundary.
                 */
                temp8 = (u8) (index + 1);
-               struct_size += ACPI_ROUND_UP_to_32_bITS (temp8);
-       }
-       else {
-               output_struct->data.address16.resource_source.index = 0x00;
+               struct_size += ACPI_ROUND_UP_to_32_bITS(temp8);
+       } else {
+               output_struct->data.address16.resource_source.index = 0;
                output_struct->data.address16.resource_source.string_length = 0;
                output_struct->data.address16.resource_source.string_ptr = NULL;
        }
@@ -259,10 +393,9 @@ acpi_rs_address16_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_address16_stream
@@ -280,24 +413,18 @@ acpi_rs_address16_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_address16_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_address16_stream(struct acpi_resource *linked_list,
+                        u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u8                              *length_field;
-       u8                              temp8;
-       char                            *temp_pointer = NULL;
-       acpi_size                       actual_bytes;
-
-
-       ACPI_FUNCTION_TRACE ("rs_address16_stream");
+       u8 *buffer = *output_buffer;
+       u8 *length_field;
+       acpi_size actual_bytes;
 
+       ACPI_FUNCTION_TRACE("rs_address16_stream");
 
-       /* The descriptor field is static */
+       /* Set the Descriptor Type field */
 
-       *buffer = 0x88;
+       *buffer = ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE;
        buffer += 1;
 
        /* Save a pointer to the Length field - to be filled in later */
@@ -307,98 +434,74 @@ acpi_rs_address16_stream (
 
        /* Set the Resource Type (Memory, Io, bus_number) */
 
-       temp8 = (u8) (linked_list->data.address16.resource_type & 0x03);
-       *buffer = temp8;
+       *buffer = (u8) (linked_list->data.address16.resource_type & 0x03);
        buffer += 1;
 
        /* Set the general flags */
 
-       temp8 = (u8) (linked_list->data.address16.producer_consumer & 0x01);
-
-       temp8 |= (linked_list->data.address16.decode & 0x01) << 1;
-       temp8 |= (linked_list->data.address16.min_address_fixed & 0x01) << 2;
-       temp8 |= (linked_list->data.address16.max_address_fixed & 0x01) << 3;
-
-       *buffer = temp8;
+       *buffer = acpi_rs_encode_general_flags(&linked_list->data);
        buffer += 1;
 
        /* Set the type specific flags */
 
-       temp8 = 0;
-
-       if (ACPI_MEMORY_RANGE == linked_list->data.address16.resource_type) {
-               temp8 = (u8)
-                       (linked_list->data.address16.attribute.memory.read_write_attribute &
-                        0x01);
-
-               temp8 |=
-                       (linked_list->data.address16.attribute.memory.cache_attribute &
-                        0x03) << 1;
-       }
-       else if (ACPI_IO_RANGE == linked_list->data.address16.resource_type) {
-               temp8 = (u8)
-                       (linked_list->data.address16.attribute.io.range_attribute &
-                        0x03);
-               temp8 |=
-                       (linked_list->data.address16.attribute.io.translation_attribute &
-                        0x03) << 4;
-       }
-
-       *buffer = temp8;
+       *buffer = acpi_rs_encode_specific_flags(&linked_list->data);
        buffer += 1;
 
        /* Set the address space granularity */
 
-       ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.address16.granularity);
+       ACPI_MOVE_32_TO_16(buffer, &linked_list->data.address16.granularity);
        buffer += 2;
 
        /* Set the address range minimum */
 
-       ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.address16.min_address_range);
+       ACPI_MOVE_32_TO_16(buffer,
+                          &linked_list->data.address16.min_address_range);
        buffer += 2;
 
        /* Set the address range maximum */
 
-       ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.address16.max_address_range);
+       ACPI_MOVE_32_TO_16(buffer,
+                          &linked_list->data.address16.max_address_range);
        buffer += 2;
 
        /* Set the address translation offset */
 
-       ACPI_MOVE_32_TO_16 (buffer,
-               &linked_list->data.address16.address_translation_offset);
+       ACPI_MOVE_32_TO_16(buffer,
+                          &linked_list->data.address16.
+                          address_translation_offset);
        buffer += 2;
 
        /* Set the address length */
 
-       ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.address16.address_length);
+       ACPI_MOVE_32_TO_16(buffer, &linked_list->data.address16.address_length);
        buffer += 2;
 
        /* Resource Source Index and Resource Source are optional */
 
-       if (0 != linked_list->data.address16.resource_source.string_length) {
-               temp8 = (u8) linked_list->data.address16.resource_source.index;
-
-               *buffer = temp8;
+       if (linked_list->data.address16.resource_source.string_length) {
+               *buffer =
+                   (u8) linked_list->data.address16.resource_source.index;
                buffer += 1;
 
-               temp_pointer = (char *) buffer;
-
-               /* Copy the string */
+               /* Copy the resource_source string */
 
-               ACPI_STRCPY (temp_pointer,
-                               linked_list->data.address16.resource_source.string_ptr);
+               ACPI_STRCPY((char *)buffer,
+                           linked_list->data.address16.resource_source.
+                           string_ptr);
 
                /*
-                * Buffer needs to be set to the length of the sting + one for the
+                * Buffer needs to be set to the length of the string + one for the
                 * terminating null
                 */
-               buffer += (acpi_size)(ACPI_STRLEN (
-                                linked_list->data.address16.resource_source.string_ptr) + 1);
+               buffer +=
+                   (acpi_size) (ACPI_STRLEN
+                                (linked_list->data.address16.resource_source.
+                                 string_ptr) + 1);
        }
 
        /* Return the number of bytes consumed in this operation */
 
-       actual_bytes = ACPI_PTR_DIFF (buffer, *output_buffer);
+       actual_bytes = ACPI_PTR_DIFF(buffer, *output_buffer);
        *bytes_consumed = actual_bytes;
 
        /*
@@ -406,11 +509,10 @@ acpi_rs_address16_stream (
         * minus the header size (3 bytes)
         */
        actual_bytes -= 3;
-       ACPI_MOVE_SIZE_TO_16 (length_field, &actual_bytes);
-       return_ACPI_STATUS (AE_OK);
+       ACPI_MOVE_SIZE_TO_16(length_field, &actual_bytes);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_address32_resource
@@ -433,36 +535,30 @@ acpi_rs_address16_stream (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_address32_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_address32_resource(u8 * byte_stream_buffer,
+                          acpi_size * bytes_consumed,
+                          u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer;
-       struct acpi_resource            *output_struct= (void *) *output_buffer;
-       u16                             temp16;
-       u8                              temp8;
-       u8                              *temp_ptr;
-       acpi_size                       struct_size;
-       u32                             index;
-
-
-       ACPI_FUNCTION_TRACE ("rs_address32_resource");
+       u16 temp16;
+       u8 temp8;
+       u8 *temp_ptr;
+       u32 index;
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       acpi_size struct_size =
+           ACPI_SIZEOF_RESOURCE(struct acpi_resource_address32);
 
+       ACPI_FUNCTION_TRACE("rs_address32_resource");
 
-       buffer = byte_stream_buffer;
-       struct_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_address32);
-
-       /* Point past the Descriptor to get the number of bytes consumed */
+       /* Get the Descriptor Length field */
 
        buffer += 1;
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
        /* Validate minimum descriptor length */
 
        if (temp16 < 23) {
-               return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);
+               return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH);
        }
 
        *bytes_consumed = temp16 + 3;
@@ -476,7 +572,7 @@ acpi_rs_address32_resource (
        /* Values 0-2 and 0xC0-0xFF are valid */
 
        if ((temp8 > 2) && (temp8 < 0xC0)) {
-               return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
+               return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE);
        }
 
        output_struct->data.address32.resource_type = temp8;
@@ -484,74 +580,41 @@ acpi_rs_address32_resource (
        /* Get the General Flags (Byte4) */
 
        buffer += 1;
-       temp8 = *buffer;
-
-       /* Producer / Consumer */
-
-       output_struct->data.address32.producer_consumer = temp8 & 0x01;
-
-       /* Decode */
-
-       output_struct->data.address32.decode = (temp8 >> 1) & 0x01;
-
-       /* Min Address Fixed */
-
-       output_struct->data.address32.min_address_fixed = (temp8 >> 2) & 0x01;
-
-       /* Max Address Fixed */
-
-       output_struct->data.address32.max_address_fixed = (temp8 >> 3) & 0x01;
+       acpi_rs_decode_general_flags(&output_struct->data, *buffer);
 
        /* Get the Type Specific Flags (Byte5) */
 
        buffer += 1;
-       temp8 = *buffer;
-
-       if (ACPI_MEMORY_RANGE == output_struct->data.address32.resource_type) {
-               output_struct->data.address32.attribute.memory.read_write_attribute =
-                               (u16) (temp8 & 0x01);
-
-               output_struct->data.address32.attribute.memory.cache_attribute =
-                               (u16) ((temp8 >> 1) & 0x03);
-       }
-       else {
-               if (ACPI_IO_RANGE == output_struct->data.address32.resource_type) {
-                       output_struct->data.address32.attribute.io.range_attribute =
-                               (u16) (temp8 & 0x03);
-                       output_struct->data.address32.attribute.io.translation_attribute =
-                               (u16) ((temp8 >> 4) & 0x03);
-               }
-               else {
-                       /* BUS_NUMBER_RANGE == output_struct->Data.Address32.resource_type */
-                       /* Nothing needs to be filled in */
-               }
-       }
+       acpi_rs_decode_specific_flags(&output_struct->data, *buffer);
 
        /* Get Granularity (Bytes 6-9) */
 
        buffer += 1;
-       ACPI_MOVE_32_TO_32 (&output_struct->data.address32.granularity, buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.address32.granularity, buffer);
 
        /* Get min_address_range (Bytes 10-13) */
 
        buffer += 4;
-       ACPI_MOVE_32_TO_32 (&output_struct->data.address32.min_address_range, buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.address32.min_address_range,
+                          buffer);
 
        /* Get max_address_range (Bytes 14-17) */
 
        buffer += 4;
-       ACPI_MOVE_32_TO_32 (&output_struct->data.address32.max_address_range, buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.address32.max_address_range,
+                          buffer);
 
        /* Get address_translation_offset (Bytes 18-21) */
 
        buffer += 4;
-       ACPI_MOVE_32_TO_32 (&output_struct->data.address32.address_translation_offset,
-               buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.address32.
+                          address_translation_offset, buffer);
 
        /* Get address_length (Bytes 22-25) */
 
        buffer += 4;
-       ACPI_MOVE_32_TO_32 (&output_struct->data.address32.address_length, buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.address32.address_length,
+                          buffer);
 
        /* Resource Source Index (if present) */
 
@@ -568,9 +631,8 @@ acpi_rs_address32_resource (
        if (*bytes_consumed > (26 + 1)) {
                /* Dereference the Index */
 
-               temp8 = *buffer;
                output_struct->data.address32.resource_source.index =
-                               (u32) temp8;
+                   (u32) * buffer;
 
                /* Point to the String */
 
@@ -579,26 +641,27 @@ acpi_rs_address32_resource (
                /* Point the String pointer to the end of this structure */
 
                output_struct->data.address32.resource_source.string_ptr =
-                               (char *)((u8 *)output_struct + struct_size);
+                   (char *)((u8 *) output_struct + struct_size);
 
                temp_ptr = (u8 *)
-                       output_struct->data.address32.resource_source.string_ptr;
+                   output_struct->data.address32.resource_source.string_ptr;
 
-               /* Copy the string into the buffer */
+               /* Copy the resource_source string into the buffer */
 
                index = 0;
-               while (0x00 != *buffer) {
+               while (*buffer) {
                        *temp_ptr = *buffer;
 
-                       temp_ptr += 1;
-                       buffer += 1;
-                       index += 1;
+                       temp_ptr++;
+                       buffer++;
+                       index++;
                }
 
-               /* Add the terminating null */
+               /* Add the terminating null and set the string length */
 
-               *temp_ptr = 0x00;
-               output_struct->data.address32.resource_source.string_length = index + 1;
+               *temp_ptr = 0;
+               output_struct->data.address32.resource_source.string_length =
+                   index + 1;
 
                /*
                 * In order for the struct_size to fall on a 32-bit boundary,
@@ -606,10 +669,9 @@ acpi_rs_address32_resource (
                 * struct_size to the next 32-bit boundary.
                 */
                temp8 = (u8) (index + 1);
-               struct_size += ACPI_ROUND_UP_to_32_bITS (temp8);
-       }
-       else {
-               output_struct->data.address32.resource_source.index = 0x00;
+               struct_size += ACPI_ROUND_UP_to_32_bITS(temp8);
+       } else {
+               output_struct->data.address32.resource_source.index = 0;
                output_struct->data.address32.resource_source.string_length = 0;
                output_struct->data.address32.resource_source.string_ptr = NULL;
        }
@@ -621,10 +683,9 @@ acpi_rs_address32_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_address32_stream
@@ -642,136 +703,105 @@ acpi_rs_address32_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_address32_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_address32_stream(struct acpi_resource *linked_list,
+                        u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer;
-       u16                             *length_field;
-       u8                              temp8;
-       char                            *temp_pointer;
-
-
-       ACPI_FUNCTION_TRACE ("rs_address32_stream");
+       u8 *buffer;
+       u16 *length_field;
 
+       ACPI_FUNCTION_TRACE("rs_address32_stream");
 
        buffer = *output_buffer;
 
-       /* The descriptor field is static */
+       /* Set the Descriptor Type field */
 
-       *buffer = 0x87;
+       *buffer = ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE;
        buffer += 1;
 
-       /* Set a pointer to the Length field - to be filled in later */
+       /* Save a pointer to the Length field - to be filled in later */
 
-       length_field = ACPI_CAST_PTR (u16, buffer);
+       length_field = ACPI_CAST_PTR(u16, buffer);
        buffer += 2;
 
        /* Set the Resource Type (Memory, Io, bus_number) */
 
-       temp8 = (u8) (linked_list->data.address32.resource_type & 0x03);
-
-       *buffer = temp8;
+       *buffer = (u8) (linked_list->data.address32.resource_type & 0x03);
        buffer += 1;
 
        /* Set the general flags */
 
-       temp8 = (u8) (linked_list->data.address32.producer_consumer & 0x01);
-       temp8 |= (linked_list->data.address32.decode & 0x01) << 1;
-       temp8 |= (linked_list->data.address32.min_address_fixed & 0x01) << 2;
-       temp8 |= (linked_list->data.address32.max_address_fixed & 0x01) << 3;
-
-       *buffer = temp8;
+       *buffer = acpi_rs_encode_general_flags(&linked_list->data);
        buffer += 1;
 
        /* Set the type specific flags */
 
-       temp8 = 0;
-
-       if (ACPI_MEMORY_RANGE == linked_list->data.address32.resource_type) {
-               temp8 = (u8)
-                       (linked_list->data.address32.attribute.memory.read_write_attribute &
-                       0x01);
-
-               temp8 |=
-                       (linked_list->data.address32.attribute.memory.cache_attribute &
-                        0x03) << 1;
-       }
-       else if (ACPI_IO_RANGE == linked_list->data.address32.resource_type) {
-               temp8 = (u8)
-                       (linked_list->data.address32.attribute.io.range_attribute &
-                        0x03);
-               temp8 |=
-                       (linked_list->data.address32.attribute.io.translation_attribute &
-                        0x03) << 4;
-       }
-
-       *buffer = temp8;
+       *buffer = acpi_rs_encode_specific_flags(&linked_list->data);
        buffer += 1;
 
        /* Set the address space granularity */
 
-       ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.address32.granularity);
+       ACPI_MOVE_32_TO_32(buffer, &linked_list->data.address32.granularity);
        buffer += 4;
 
        /* Set the address range minimum */
 
-       ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.address32.min_address_range);
+       ACPI_MOVE_32_TO_32(buffer,
+                          &linked_list->data.address32.min_address_range);
        buffer += 4;
 
        /* Set the address range maximum */
 
-       ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.address32.max_address_range);
+       ACPI_MOVE_32_TO_32(buffer,
+                          &linked_list->data.address32.max_address_range);
        buffer += 4;
 
        /* Set the address translation offset */
 
-       ACPI_MOVE_32_TO_32 (buffer,
-               &linked_list->data.address32.address_translation_offset);
+       ACPI_MOVE_32_TO_32(buffer,
+                          &linked_list->data.address32.
+                          address_translation_offset);
        buffer += 4;
 
        /* Set the address length */
 
-       ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.address32.address_length);
+       ACPI_MOVE_32_TO_32(buffer, &linked_list->data.address32.address_length);
        buffer += 4;
 
        /* Resource Source Index and Resource Source are optional */
 
-       if (0 != linked_list->data.address32.resource_source.string_length) {
-               temp8 = (u8) linked_list->data.address32.resource_source.index;
-
-               *buffer = temp8;
+       if (linked_list->data.address32.resource_source.string_length) {
+               *buffer =
+                   (u8) linked_list->data.address32.resource_source.index;
                buffer += 1;
 
-               temp_pointer = (char *) buffer;
-
-               /* Copy the string */
+               /* Copy the resource_source string */
 
-               ACPI_STRCPY (temp_pointer,
-                       linked_list->data.address32.resource_source.string_ptr);
+               ACPI_STRCPY((char *)buffer,
+                           linked_list->data.address32.resource_source.
+                           string_ptr);
 
                /*
-                * Buffer needs to be set to the length of the sting + one for the
+                * Buffer needs to be set to the length of the string + one for the
                 *  terminating null
                 */
-               buffer += (acpi_size)(ACPI_STRLEN (
-                                linked_list->data.address32.resource_source.string_ptr) + 1);
+               buffer +=
+                   (acpi_size) (ACPI_STRLEN
+                                (linked_list->data.address32.resource_source.
+                                 string_ptr) + 1);
        }
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
 
        /*
         * Set the length field to the number of bytes consumed
-        *  minus the header size (3 bytes)
+        * minus the header size (3 bytes)
         */
        *length_field = (u16) (*bytes_consumed - 3);
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_address64_resource
@@ -794,38 +824,35 @@ acpi_rs_address32_stream (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_address64_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_address64_resource(u8 * byte_stream_buffer,
+                          acpi_size * bytes_consumed,
+                          u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u16                             temp16;
-       u8                              temp8;
-       u8                              resource_type;
-       u8                              *temp_ptr;
-       acpi_size                       struct_size;
-       u32                             index;
-
+       u16 temp16;
+       u8 temp8;
+       u8 resource_type;
+       u8 *temp_ptr;
+       u32 index;
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       acpi_size struct_size =
+           ACPI_SIZEOF_RESOURCE(struct acpi_resource_address64);
 
-       ACPI_FUNCTION_TRACE ("rs_address64_resource");
+       ACPI_FUNCTION_TRACE("rs_address64_resource");
 
+       /* Get the Descriptor Type */
 
-       buffer = byte_stream_buffer;
-       struct_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_address64);
        resource_type = *buffer;
 
-       /* Point past the Descriptor to get the number of bytes consumed */
+       /* Get the Descriptor Length field */
 
        buffer += 1;
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
        /* Validate minimum descriptor length */
 
        if (temp16 < 43) {
-               return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);
+               return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH);
        }
 
        *bytes_consumed = temp16 + 3;
@@ -839,7 +866,7 @@ acpi_rs_address64_resource (
        /* Values 0-2 and 0xC0-0xFF are valid */
 
        if ((temp8 > 2) && (temp8 < 0xC0)) {
-               return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
+               return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE);
        }
 
        output_struct->data.address64.resource_type = temp8;
@@ -847,48 +874,12 @@ acpi_rs_address64_resource (
        /* Get the General Flags (Byte4) */
 
        buffer += 1;
-       temp8 = *buffer;
-
-       /* Producer / Consumer */
-
-       output_struct->data.address64.producer_consumer = temp8 & 0x01;
-
-       /* Decode */
-
-       output_struct->data.address64.decode = (temp8 >> 1) & 0x01;
-
-       /* Min Address Fixed */
-
-       output_struct->data.address64.min_address_fixed = (temp8 >> 2) & 0x01;
-
-       /* Max Address Fixed */
-
-       output_struct->data.address64.max_address_fixed = (temp8 >> 3) & 0x01;
+       acpi_rs_decode_general_flags(&output_struct->data, *buffer);
 
        /* Get the Type Specific Flags (Byte5) */
 
        buffer += 1;
-       temp8 = *buffer;
-
-       if (ACPI_MEMORY_RANGE == output_struct->data.address64.resource_type) {
-               output_struct->data.address64.attribute.memory.read_write_attribute =
-                               (u16) (temp8 & 0x01);
-
-               output_struct->data.address64.attribute.memory.cache_attribute =
-                               (u16) ((temp8 >> 1) & 0x03);
-       }
-       else {
-               if (ACPI_IO_RANGE == output_struct->data.address64.resource_type) {
-                       output_struct->data.address64.attribute.io.range_attribute =
-                               (u16) (temp8 & 0x03);
-                       output_struct->data.address64.attribute.io.translation_attribute =
-                               (u16) ((temp8 >> 4) & 0x03);
-               }
-               else {
-                       /* BUS_NUMBER_RANGE == output_struct->Data.Address64.resource_type */
-                       /* Nothing needs to be filled in */
-               }
-       }
+       acpi_rs_decode_specific_flags(&output_struct->data, *buffer);
 
        if (resource_type == ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE) {
                /* Move past revision_id and Reserved byte */
@@ -899,30 +890,33 @@ acpi_rs_address64_resource (
        /* Get Granularity (Bytes 6-13) or (Bytes 8-15) */
 
        buffer += 1;
-       ACPI_MOVE_64_TO_64 (&output_struct->data.address64.granularity, buffer);
+       ACPI_MOVE_64_TO_64(&output_struct->data.address64.granularity, buffer);
 
        /* Get min_address_range (Bytes 14-21) or (Bytes 16-23) */
 
        buffer += 8;
-       ACPI_MOVE_64_TO_64 (&output_struct->data.address64.min_address_range, buffer);
+       ACPI_MOVE_64_TO_64(&output_struct->data.address64.min_address_range,
+                          buffer);
 
        /* Get max_address_range (Bytes 22-29) or (Bytes 24-31) */
 
        buffer += 8;
-       ACPI_MOVE_64_TO_64 (&output_struct->data.address64.max_address_range, buffer);
+       ACPI_MOVE_64_TO_64(&output_struct->data.address64.max_address_range,
+                          buffer);
 
        /* Get address_translation_offset (Bytes 30-37) or (Bytes 32-39) */
 
        buffer += 8;
-       ACPI_MOVE_64_TO_64 (&output_struct->data.address64.address_translation_offset,
-               buffer);
+       ACPI_MOVE_64_TO_64(&output_struct->data.address64.
+                          address_translation_offset, buffer);
 
        /* Get address_length (Bytes 38-45) or (Bytes 40-47) */
 
        buffer += 8;
-       ACPI_MOVE_64_TO_64 (&output_struct->data.address64.address_length, buffer);
+       ACPI_MOVE_64_TO_64(&output_struct->data.address64.address_length,
+                          buffer);
 
-       output_struct->data.address64.resource_source.index = 0x00;
+       output_struct->data.address64.resource_source.index = 0;
        output_struct->data.address64.resource_source.string_length = 0;
        output_struct->data.address64.resource_source.string_ptr = NULL;
 
@@ -930,11 +924,9 @@ acpi_rs_address64_resource (
                /* Get type_specific_attribute (Bytes 48-55) */
 
                buffer += 8;
-               ACPI_MOVE_64_TO_64 (
-                       &output_struct->data.address64.type_specific_attributes,
-                       buffer);
-       }
-       else {
+               ACPI_MOVE_64_TO_64(&output_struct->data.address64.
+                                  type_specific_attributes, buffer);
+       } else {
                output_struct->data.address64.type_specific_attributes = 0;
 
                /* Resource Source Index (if present) */
@@ -954,9 +946,8 @@ acpi_rs_address64_resource (
                if (*bytes_consumed > (46 + 1)) {
                        /* Dereference the Index */
 
-                       temp8 = *buffer;
                        output_struct->data.address64.resource_source.index =
-                                       (u32) temp8;
+                           (u32) * buffer;
 
                        /* Point to the String */
 
@@ -964,29 +955,31 @@ acpi_rs_address64_resource (
 
                        /* Point the String pointer to the end of this structure */
 
-                       output_struct->data.address64.resource_source.string_ptr =
-                                       (char *)((u8 *)output_struct + struct_size);
+                       output_struct->data.address64.resource_source.
+                           string_ptr =
+                           (char *)((u8 *) output_struct + struct_size);
 
                        temp_ptr = (u8 *)
-                               output_struct->data.address64.resource_source.string_ptr;
+                           output_struct->data.address64.resource_source.
+                           string_ptr;
 
-                       /* Copy the string into the buffer */
+                       /* Copy the resource_source string into the buffer */
 
                        index = 0;
-                       while (0x00 != *buffer) {
+                       while (*buffer) {
                                *temp_ptr = *buffer;
 
-                               temp_ptr += 1;
-                               buffer += 1;
-                               index += 1;
+                               temp_ptr++;
+                               buffer++;
+                               index++;
                        }
 
                        /*
-                        * Add the terminating null
+                        * Add the terminating null and set the string length
                         */
-                       *temp_ptr = 0x00;
-                       output_struct->data.address64.resource_source.string_length =
-                               index + 1;
+                       *temp_ptr = 0;
+                       output_struct->data.address64.resource_source.
+                           string_length = index + 1;
 
                        /*
                         * In order for the struct_size to fall on a 32-bit boundary,
@@ -994,7 +987,7 @@ acpi_rs_address64_resource (
                         * struct_size to the next 32-bit boundary.
                         */
                        temp8 = (u8) (index + 1);
-                       struct_size += ACPI_ROUND_UP_to_32_bITS (temp8);
+                       struct_size += ACPI_ROUND_UP_to_32_bITS(temp8);
                }
        }
 
@@ -1005,10 +998,9 @@ acpi_rs_address64_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_address64_stream
@@ -1026,132 +1018,101 @@ acpi_rs_address64_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_address64_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_address64_stream(struct acpi_resource *linked_list,
+                        u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer;
-       u16                             *length_field;
-       u8                              temp8;
-       char                            *temp_pointer;
-
-
-       ACPI_FUNCTION_TRACE ("rs_address64_stream");
+       u8 *buffer;
+       u16 *length_field;
 
+       ACPI_FUNCTION_TRACE("rs_address64_stream");
 
        buffer = *output_buffer;
 
-       /* The descriptor field is static */
+       /* Set the Descriptor Type field */
 
-       *buffer = 0x8A;
+       *buffer = ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE;
        buffer += 1;
 
-       /* Set a pointer to the Length field - to be filled in later */
+       /* Save a pointer to the Length field - to be filled in later */
 
-       length_field = ACPI_CAST_PTR (u16, buffer);
+       length_field = ACPI_CAST_PTR(u16, buffer);
        buffer += 2;
 
        /* Set the Resource Type (Memory, Io, bus_number) */
 
-       temp8 = (u8) (linked_list->data.address64.resource_type & 0x03);
-
-       *buffer = temp8;
+       *buffer = (u8) (linked_list->data.address64.resource_type & 0x03);
        buffer += 1;
 
        /* Set the general flags */
 
-       temp8 = (u8) (linked_list->data.address64.producer_consumer & 0x01);
-       temp8 |= (linked_list->data.address64.decode & 0x01) << 1;
-       temp8 |= (linked_list->data.address64.min_address_fixed & 0x01) << 2;
-       temp8 |= (linked_list->data.address64.max_address_fixed & 0x01) << 3;
-
-       *buffer = temp8;
+       *buffer = acpi_rs_encode_general_flags(&linked_list->data);
        buffer += 1;
 
        /* Set the type specific flags */
 
-       temp8 = 0;
-
-       if (ACPI_MEMORY_RANGE == linked_list->data.address64.resource_type) {
-               temp8 = (u8)
-                       (linked_list->data.address64.attribute.memory.read_write_attribute &
-                       0x01);
-
-               temp8 |=
-                       (linked_list->data.address64.attribute.memory.cache_attribute &
-                        0x03) << 1;
-       }
-       else if (ACPI_IO_RANGE == linked_list->data.address64.resource_type) {
-               temp8 = (u8)
-                       (linked_list->data.address64.attribute.io.range_attribute &
-                        0x03);
-               temp8 |=
-                       (linked_list->data.address64.attribute.io.range_attribute &
-                        0x03) << 4;
-       }
-
-       *buffer = temp8;
+       *buffer = acpi_rs_encode_specific_flags(&linked_list->data);
        buffer += 1;
 
        /* Set the address space granularity */
 
-       ACPI_MOVE_64_TO_64 (buffer, &linked_list->data.address64.granularity);
+       ACPI_MOVE_64_TO_64(buffer, &linked_list->data.address64.granularity);
        buffer += 8;
 
        /* Set the address range minimum */
 
-       ACPI_MOVE_64_TO_64 (buffer, &linked_list->data.address64.min_address_range);
+       ACPI_MOVE_64_TO_64(buffer,
+                          &linked_list->data.address64.min_address_range);
        buffer += 8;
 
        /* Set the address range maximum */
 
-       ACPI_MOVE_64_TO_64 (buffer, &linked_list->data.address64.max_address_range);
+       ACPI_MOVE_64_TO_64(buffer,
+                          &linked_list->data.address64.max_address_range);
        buffer += 8;
 
        /* Set the address translation offset */
 
-       ACPI_MOVE_64_TO_64 (buffer,
-               &linked_list->data.address64.address_translation_offset);
+       ACPI_MOVE_64_TO_64(buffer,
+                          &linked_list->data.address64.
+                          address_translation_offset);
        buffer += 8;
 
        /* Set the address length */
 
-       ACPI_MOVE_64_TO_64 (buffer, &linked_list->data.address64.address_length);
+       ACPI_MOVE_64_TO_64(buffer, &linked_list->data.address64.address_length);
        buffer += 8;
 
        /* Resource Source Index and Resource Source are optional */
 
-       if (0 != linked_list->data.address64.resource_source.string_length) {
-               temp8 = (u8) linked_list->data.address64.resource_source.index;
-
-               *buffer = temp8;
+       if (linked_list->data.address64.resource_source.string_length) {
+               *buffer =
+                   (u8) linked_list->data.address64.resource_source.index;
                buffer += 1;
 
-               temp_pointer = (char *) buffer;
+               /* Copy the resource_source string */
 
-               /* Copy the string */
-
-               ACPI_STRCPY (temp_pointer,
-                       linked_list->data.address64.resource_source.string_ptr);
+               ACPI_STRCPY((char *)buffer,
+                           linked_list->data.address64.resource_source.
+                           string_ptr);
 
                /*
-                * Buffer needs to be set to the length of the sting + one for the
+                * Buffer needs to be set to the length of the string + one for the
                 * terminating null
                 */
-               buffer += (acpi_size)(ACPI_STRLEN (
-                                linked_list->data.address64.resource_source.string_ptr) + 1);
+               buffer +=
+                   (acpi_size) (ACPI_STRLEN
+                                (linked_list->data.address64.resource_source.
+                                 string_ptr) + 1);
        }
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
 
        /*
         * Set the length field to the number of bytes consumed
         * minus the header size (3 bytes)
         */
        *length_field = (u16) (*bytes_consumed - 3);
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
index 98176f2fcb5d878442808affed0d4486e8e97fe7..378f58390fc14935fff3f9fa4e519e6d2293e143 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acresrc.h>
 #include <acpi/amlcode.h>
 #include <acpi/acnamesp.h>
 
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rscalc")
-
+ACPI_MODULE_NAME("rscalc")
 
 /*******************************************************************************
  *
  *              the resource data.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_rs_get_byte_stream_length (
-       struct acpi_resource            *linked_list,
-       acpi_size                       *size_needed)
+acpi_rs_get_byte_stream_length(struct acpi_resource *linked_list,
+                              acpi_size * size_needed)
 {
-       acpi_size                       byte_stream_size_needed = 0;
-       acpi_size                       segment_size;
-       u8                              done = FALSE;
-
-
-       ACPI_FUNCTION_TRACE ("rs_get_byte_stream_length");
+       acpi_size byte_stream_size_needed = 0;
+       acpi_size segment_size;
+       u8 done = FALSE;
 
+       ACPI_FUNCTION_TRACE("rs_get_byte_stream_length");
 
        while (!done) {
                /* Init the variable that will hold the size to add to the total. */
@@ -145,11 +139,11 @@ acpi_rs_get_byte_stream_length (
                         */
                        if (linked_list->data.vendor_specific.length > 7) {
                                segment_size = 3;
-                       }
-                       else {
+                       } else {
                                segment_size = 1;
                        }
-                       segment_size += linked_list->data.vendor_specific.length;
+                       segment_size +=
+                           linked_list->data.vendor_specific.length;
                        break;
 
                case ACPI_RSTYPE_END_TAG:
@@ -194,9 +188,11 @@ acpi_rs_get_byte_stream_length (
                         */
                        segment_size = 16;
 
-                       if (linked_list->data.address16.resource_source.string_ptr) {
+                       if (linked_list->data.address16.resource_source.
+                           string_ptr) {
                                segment_size +=
-                                       linked_list->data.address16.resource_source.string_length;
+                                   linked_list->data.address16.resource_source.
+                                   string_length;
                                segment_size++;
                        }
                        break;
@@ -211,9 +207,11 @@ acpi_rs_get_byte_stream_length (
                         */
                        segment_size = 26;
 
-                       if (linked_list->data.address32.resource_source.string_ptr) {
+                       if (linked_list->data.address32.resource_source.
+                           string_ptr) {
                                segment_size +=
-                                       linked_list->data.address32.resource_source.string_length;
+                                   linked_list->data.address32.resource_source.
+                                   string_length;
                                segment_size++;
                        }
                        break;
@@ -227,9 +225,11 @@ acpi_rs_get_byte_stream_length (
                         */
                        segment_size = 46;
 
-                       if (linked_list->data.address64.resource_source.string_ptr) {
+                       if (linked_list->data.address64.resource_source.
+                           string_ptr) {
                                segment_size +=
-                                       linked_list->data.address64.resource_source.string_length;
+                                   linked_list->data.address64.resource_source.
+                                   string_length;
                                segment_size++;
                        }
                        break;
@@ -244,11 +244,14 @@ acpi_rs_get_byte_stream_length (
                         * Resource Source + 1 for the null.
                         */
                        segment_size = 9 + (((acpi_size)
-                               linked_list->data.extended_irq.number_of_interrupts - 1) * 4);
+                                            linked_list->data.extended_irq.
+                                            number_of_interrupts - 1) * 4);
 
-                       if (linked_list->data.extended_irq.resource_source.string_ptr) {
+                       if (linked_list->data.extended_irq.resource_source.
+                           string_ptr) {
                                segment_size +=
-                                       linked_list->data.extended_irq.resource_source.string_length;
+                                   linked_list->data.extended_irq.
+                                   resource_source.string_length;
                                segment_size++;
                        }
                        break;
@@ -257,9 +260,9 @@ acpi_rs_get_byte_stream_length (
 
                        /* If we get here, everything is out of sync, exit with error */
 
-                       return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
+                       return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE);
 
-               } /* switch (linked_list->Id) */
+               }               /* switch (linked_list->Id) */
 
                /* Update the total */
 
@@ -267,17 +270,16 @@ acpi_rs_get_byte_stream_length (
 
                /* Point to the next object */
 
-               linked_list = ACPI_PTR_ADD (struct acpi_resource,
-                                 linked_list, linked_list->length);
+               linked_list = ACPI_PTR_ADD(struct acpi_resource,
+                                          linked_list, linked_list->length);
        }
 
        /* This is the data the caller needs */
 
        *size_needed = byte_stream_size_needed;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_get_list_length
@@ -297,32 +299,28 @@ acpi_rs_get_byte_stream_length (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_get_list_length (
-       u8                              *byte_stream_buffer,
-       u32                             byte_stream_buffer_length,
-       acpi_size                       *size_needed)
+acpi_rs_get_list_length(u8 * byte_stream_buffer,
+                       u32 byte_stream_buffer_length, acpi_size * size_needed)
 {
-       u32                             buffer_size = 0;
-       u32                             bytes_parsed = 0;
-       u8                              number_of_interrupts = 0;
-       u8                              number_of_channels = 0;
-       u8                              resource_type;
-       u32                             structure_size;
-       u32                             bytes_consumed;
-       u8                              *buffer;
-       u8                              temp8;
-       u16                             temp16;
-       u8                              index;
-       u8                              additional_bytes;
-
-
-       ACPI_FUNCTION_TRACE ("rs_get_list_length");
-
+       u32 buffer_size = 0;
+       u32 bytes_parsed = 0;
+       u8 number_of_interrupts = 0;
+       u8 number_of_channels = 0;
+       u8 resource_type;
+       u32 structure_size;
+       u32 bytes_consumed;
+       u8 *buffer;
+       u8 temp8;
+       u16 temp16;
+       u8 index;
+       u8 additional_bytes;
+
+       ACPI_FUNCTION_TRACE("rs_get_list_length");
 
        while (bytes_parsed < byte_stream_buffer_length) {
                /* The next byte in the stream is the resource type */
 
-               resource_type = acpi_rs_get_resource_type (*byte_stream_buffer);
+               resource_type = acpi_rs_get_resource_type(*byte_stream_buffer);
 
                switch (resource_type) {
                case ACPI_RDESC_TYPE_MEMORY_24:
@@ -331,10 +329,10 @@ acpi_rs_get_list_length (
                         */
                        bytes_consumed = 12;
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_mem24);
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_mem24);
                        break;
 
-
                case ACPI_RDESC_TYPE_LARGE_VENDOR:
                        /*
                         * Vendor Defined Resource
@@ -342,38 +340,39 @@ acpi_rs_get_list_length (
                        buffer = byte_stream_buffer;
                        ++buffer;
 
-                       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+                       ACPI_MOVE_16_TO_16(&temp16, buffer);
                        bytes_consumed = temp16 + 3;
 
                        /* Ensure a 32-bit boundary for the structure */
 
-                       temp16 = (u16) ACPI_ROUND_UP_to_32_bITS (temp16);
+                       temp16 = (u16) ACPI_ROUND_UP_to_32_bITS(temp16);
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_vendor) +
-                                          (temp16 * sizeof (u8));
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_vendor) +
+                           (temp16 * sizeof(u8));
                        break;
 
-
                case ACPI_RDESC_TYPE_MEMORY_32:
                        /*
                         * 32-Bit Memory Range Resource
                         */
                        bytes_consumed = 20;
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_mem32);
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_mem32);
                        break;
 
-
                case ACPI_RDESC_TYPE_FIXED_MEMORY_32:
                        /*
                         * 32-Bit Fixed Memory Resource
                         */
                        bytes_consumed = 12;
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_fixed_mem32);
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct
+                                                acpi_resource_fixed_mem32);
                        break;
 
-
                case ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE:
                        /*
                         * 64-Bit Address Resource
@@ -381,13 +380,14 @@ acpi_rs_get_list_length (
                        buffer = byte_stream_buffer;
 
                        ++buffer;
-                       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+                       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
                        bytes_consumed = temp16 + 3;
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_address64);
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct
+                                                acpi_resource_address64);
                        break;
 
-
                case ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE:
                        /*
                         * 64-Bit Address Resource
@@ -395,7 +395,7 @@ acpi_rs_get_list_length (
                        buffer = byte_stream_buffer;
 
                        ++buffer;
-                       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+                       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
                        bytes_consumed = temp16 + 3;
 
@@ -409,20 +409,19 @@ acpi_rs_get_list_length (
                         */
                        if (43 < temp16) {
                                temp8 = (u8) (temp16 - 44);
-                       }
-                       else {
+                       } else {
                                temp8 = 0;
                        }
 
                        /* Ensure a 64-bit boundary for the structure */
 
-                       temp8 = (u8) ACPI_ROUND_UP_to_64_bITS (temp8);
+                       temp8 = (u8) ACPI_ROUND_UP_to_64_bITS(temp8);
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_address64) +
-                                          (temp8 * sizeof (u8));
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_address64)
+                           + (temp8 * sizeof(u8));
                        break;
 
-
                case ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE:
                        /*
                         * 32-Bit Address Resource
@@ -430,7 +429,7 @@ acpi_rs_get_list_length (
                        buffer = byte_stream_buffer;
 
                        ++buffer;
-                       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+                       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
                        bytes_consumed = temp16 + 3;
 
@@ -444,20 +443,19 @@ acpi_rs_get_list_length (
                         */
                        if (23 < temp16) {
                                temp8 = (u8) (temp16 - 24);
-                       }
-                       else {
+                       } else {
                                temp8 = 0;
                        }
 
                        /* Ensure a 32-bit boundary for the structure */
 
-                       temp8 = (u8) ACPI_ROUND_UP_to_32_bITS (temp8);
+                       temp8 = (u8) ACPI_ROUND_UP_to_32_bITS(temp8);
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_address32) +
-                                          (temp8 * sizeof (u8));
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_address32)
+                           + (temp8 * sizeof(u8));
                        break;
 
-
                case ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE:
                        /*
                         * 16-Bit Address Resource
@@ -465,7 +463,7 @@ acpi_rs_get_list_length (
                        buffer = byte_stream_buffer;
 
                        ++buffer;
-                       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+                       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
                        bytes_consumed = temp16 + 3;
 
@@ -479,20 +477,19 @@ acpi_rs_get_list_length (
                         */
                        if (13 < temp16) {
                                temp8 = (u8) (temp16 - 14);
-                       }
-                       else {
+                       } else {
                                temp8 = 0;
                        }
 
                        /* Ensure a 32-bit boundary for the structure */
 
-                       temp8 = (u8) ACPI_ROUND_UP_to_32_bITS (temp8);
+                       temp8 = (u8) ACPI_ROUND_UP_to_32_bITS(temp8);
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_address16) +
-                                          (temp8 * sizeof (u8));
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_address16)
+                           + (temp8 * sizeof(u8));
                        break;
 
-
                case ACPI_RDESC_TYPE_EXTENDED_XRUPT:
                        /*
                         * Extended IRQ
@@ -500,7 +497,7 @@ acpi_rs_get_list_length (
                        buffer = byte_stream_buffer;
 
                        ++buffer;
-                       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+                       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
                        bytes_consumed = temp16 + 3;
 
@@ -527,21 +524,20 @@ acpi_rs_get_list_length (
                         */
                        if (9 + additional_bytes < temp16) {
                                temp8 = (u8) (temp16 - (9 + additional_bytes));
-                       }
-                       else {
+                       } else {
                                temp8 = 0;
                        }
 
                        /* Ensure a 32-bit boundary for the structure */
 
-                       temp8 = (u8) ACPI_ROUND_UP_to_32_bITS (temp8);
+                       temp8 = (u8) ACPI_ROUND_UP_to_32_bITS(temp8);
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_ext_irq) +
-                                          (additional_bytes * sizeof (u8)) +
-                                          (temp8 * sizeof (u8));
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_ext_irq) +
+                           (additional_bytes * sizeof(u8)) +
+                           (temp8 * sizeof(u8));
                        break;
 
-
                case ACPI_RDESC_TYPE_IRQ_FORMAT:
                        /*
                         * IRQ Resource.
@@ -550,10 +546,9 @@ acpi_rs_get_list_length (
                        buffer = byte_stream_buffer;
                        temp8 = *buffer;
 
-                       if(temp8 & 0x01) {
+                       if (temp8 & 0x01) {
                                bytes_consumed = 4;
-                       }
-                       else {
+                       } else {
                                bytes_consumed = 3;
                        }
 
@@ -563,7 +558,7 @@ acpi_rs_get_list_length (
 
                        /* Look at the number of bits set */
 
-                       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+                       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
                        for (index = 0; index < 16; index++) {
                                if (temp16 & 0x1) {
@@ -573,11 +568,11 @@ acpi_rs_get_list_length (
                                temp16 >>= 1;
                        }
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_io) +
-                                          (number_of_interrupts * sizeof (u32));
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_io) +
+                           (number_of_interrupts * sizeof(u32));
                        break;
 
-
                case ACPI_RDESC_TYPE_DMA_FORMAT:
                        /*
                         * DMA Resource
@@ -593,19 +588,19 @@ acpi_rs_get_list_length (
 
                        temp8 = *buffer;
 
-                       for(index = 0; index < 8; index++) {
-                               if(temp8 & 0x1) {
+                       for (index = 0; index < 8; index++) {
+                               if (temp8 & 0x1) {
                                        ++number_of_channels;
                                }
 
                                temp8 >>= 1;
                        }
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_dma) +
-                                          (number_of_channels * sizeof (u32));
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_dma) +
+                           (number_of_channels * sizeof(u32));
                        break;
 
-
                case ACPI_RDESC_TYPE_START_DEPENDENT:
                        /*
                         * Start Dependent Functions Resource
@@ -614,17 +609,17 @@ acpi_rs_get_list_length (
                        buffer = byte_stream_buffer;
                        temp8 = *buffer;
 
-                       if(temp8 & 0x01) {
+                       if (temp8 & 0x01) {
                                bytes_consumed = 2;
-                       }
-                       else {
+                       } else {
                                bytes_consumed = 1;
                        }
 
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_start_dpf);
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct
+                                                acpi_resource_start_dpf);
                        break;
 
-
                case ACPI_RDESC_TYPE_END_DEPENDENT:
                        /*
                         * End Dependent Functions Resource
@@ -633,25 +628,24 @@ acpi_rs_get_list_length (
                        structure_size = ACPI_RESOURCE_LENGTH;
                        break;
 
-
                case ACPI_RDESC_TYPE_IO_PORT:
                        /*
                         * IO Port Resource
                         */
                        bytes_consumed = 8;
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_io);
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_io);
                        break;
 
-
                case ACPI_RDESC_TYPE_FIXED_IO_PORT:
                        /*
                         * Fixed IO Port Resource
                         */
                        bytes_consumed = 4;
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_fixed_io);
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_fixed_io);
                        break;
 
-
                case ACPI_RDESC_TYPE_SMALL_VENDOR:
                        /*
                         * Vendor Specific Resource
@@ -664,12 +658,12 @@ acpi_rs_get_list_length (
 
                        /* Ensure a 32-bit boundary for the structure */
 
-                       temp8 = (u8) ACPI_ROUND_UP_to_32_bITS (temp8);
-                       structure_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_vendor) +
-                                          (temp8 * sizeof (u8));
+                       temp8 = (u8) ACPI_ROUND_UP_to_32_bITS(temp8);
+                       structure_size =
+                           ACPI_SIZEOF_RESOURCE(struct acpi_resource_vendor) +
+                           (temp8 * sizeof(u8));
                        break;
 
-
                case ACPI_RDESC_TYPE_END_TAG:
                        /*
                         * End Tag
@@ -679,18 +673,17 @@ acpi_rs_get_list_length (
                        byte_stream_buffer_length = bytes_parsed;
                        break;
 
-
                default:
                        /*
                         * If we get here, everything is out of sync,
                         * exit with an error
                         */
-                       return_ACPI_STATUS (AE_AML_INVALID_RESOURCE_TYPE);
+                       return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE);
                }
 
                /* Update the return value and counter */
 
-               buffer_size += (u32) ACPI_ALIGN_RESOURCE_SIZE (structure_size);
+               buffer_size += (u32) ACPI_ALIGN_RESOURCE_SIZE(structure_size);
                bytes_parsed += bytes_consumed;
 
                /* Set the byte stream to point to the next resource */
@@ -701,10 +694,9 @@ acpi_rs_get_list_length (
        /* This is the data the caller needs */
 
        *size_needed = buffer_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_get_pci_routing_table_length
@@ -723,22 +715,19 @@ acpi_rs_get_list_length (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_get_pci_routing_table_length (
-       union acpi_operand_object       *package_object,
-       acpi_size                       *buffer_size_needed)
+acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
+                                    acpi_size * buffer_size_needed)
 {
-       u32                             number_of_elements;
-       acpi_size                       temp_size_needed = 0;
-       union acpi_operand_object       **top_object_list;
-       u32                             index;
-       union acpi_operand_object       *package_element;
-       union acpi_operand_object       **sub_object_list;
-       u8                              name_found;
-       u32                             table_index;
-
-
-       ACPI_FUNCTION_TRACE ("rs_get_pci_routing_table_length");
+       u32 number_of_elements;
+       acpi_size temp_size_needed = 0;
+       union acpi_operand_object **top_object_list;
+       u32 index;
+       union acpi_operand_object *package_element;
+       union acpi_operand_object **sub_object_list;
+       u8 name_found;
+       u32 table_index;
 
+       ACPI_FUNCTION_TRACE("rs_get_pci_routing_table_length");
 
        number_of_elements = package_object->package.count;
 
@@ -769,53 +758,51 @@ acpi_rs_get_pci_routing_table_length (
 
                name_found = FALSE;
 
-               for (table_index = 0; table_index < 4 && !name_found; table_index++) {
+               for (table_index = 0; table_index < 4 && !name_found;
+                    table_index++) {
                        if ((ACPI_TYPE_STRING ==
-                                       ACPI_GET_OBJECT_TYPE (*sub_object_list)) ||
-
-                               ((ACPI_TYPE_LOCAL_REFERENCE ==
-                                       ACPI_GET_OBJECT_TYPE (*sub_object_list)) &&
-
-                                       ((*sub_object_list)->reference.opcode ==
-                                               AML_INT_NAMEPATH_OP))) {
+                            ACPI_GET_OBJECT_TYPE(*sub_object_list))
+                           ||
+                           ((ACPI_TYPE_LOCAL_REFERENCE ==
+                             ACPI_GET_OBJECT_TYPE(*sub_object_list))
+                            && ((*sub_object_list)->reference.opcode ==
+                                AML_INT_NAMEPATH_OP))) {
                                name_found = TRUE;
-                       }
-                       else {
+                       } else {
                                /* Look at the next element */
 
                                sub_object_list++;
                        }
                }
 
-               temp_size_needed += (sizeof (struct acpi_pci_routing_table) - 4);
+               temp_size_needed += (sizeof(struct acpi_pci_routing_table) - 4);
 
                /* Was a String type found? */
 
                if (name_found) {
-                       if (ACPI_GET_OBJECT_TYPE (*sub_object_list) == ACPI_TYPE_STRING) {
+                       if (ACPI_GET_OBJECT_TYPE(*sub_object_list) ==
+                           ACPI_TYPE_STRING) {
                                /*
                                 * The length String.Length field does not include the
                                 * terminating NULL, add 1
                                 */
                                temp_size_needed += ((acpi_size)
-                                       (*sub_object_list)->string.length + 1);
+                                                    (*sub_object_list)->string.
+                                                    length + 1);
+                       } else {
+                               temp_size_needed += acpi_ns_get_pathname_length((*sub_object_list)->reference.node);
                        }
-                       else {
-                               temp_size_needed += acpi_ns_get_pathname_length (
-                                                  (*sub_object_list)->reference.node);
-                       }
-               }
-               else {
+               } else {
                        /*
                         * If no name was found, then this is a NULL, which is
                         * translated as a u32 zero.
                         */
-                       temp_size_needed += sizeof (u32);
+                       temp_size_needed += sizeof(u32);
                }
 
                /* Round up the size since each element must be aligned */
 
-               temp_size_needed = ACPI_ROUND_UP_to_64_bITS (temp_size_needed);
+               temp_size_needed = ACPI_ROUND_UP_to_64_bITS(temp_size_needed);
 
                /* Point to the next union acpi_operand_object */
 
@@ -826,6 +813,7 @@ acpi_rs_get_pci_routing_table_length (
         * Adding an extra element to the end of the list, essentially a
         * NULL terminator
         */
-       *buffer_size_needed = temp_size_needed + sizeof (struct acpi_pci_routing_table);
-       return_ACPI_STATUS (AE_OK);
+       *buffer_size_needed =
+           temp_size_needed + sizeof(struct acpi_pci_routing_table);
+       return_ACPI_STATUS(AE_OK);
 }
index 8e0eae0d50bb58eb71a9cf03890a1e79749038db..0911526b7ad883d1dda18fc1b545c0c3f847c166 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acresrc.h>
 #include <acpi/amlcode.h>
 #include <acpi/acnamesp.h>
 
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rscreate")
-
+ACPI_MODULE_NAME("rscreate")
 
 /*******************************************************************************
  *
  *              of device resources.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_rs_create_resource_list (
-       union acpi_operand_object       *byte_stream_buffer,
-       struct acpi_buffer              *output_buffer)
+acpi_rs_create_resource_list(union acpi_operand_object *byte_stream_buffer,
+                            struct acpi_buffer *output_buffer)
 {
 
-       acpi_status                     status;
-       u8                              *byte_stream_start;
-       acpi_size                       list_size_needed = 0;
-       u32                             byte_stream_buffer_length;
+       acpi_status status;
+       u8 *byte_stream_start;
+       acpi_size list_size_needed = 0;
+       u32 byte_stream_buffer_length;
 
+       ACPI_FUNCTION_TRACE("rs_create_resource_list");
 
-       ACPI_FUNCTION_TRACE ("rs_create_resource_list");
-
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "byte_stream_buffer = %p\n",
-               byte_stream_buffer));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "byte_stream_buffer = %p\n",
+                         byte_stream_buffer));
 
        /* Params already validated, so we don't re-validate here */
 
@@ -96,36 +90,39 @@ acpi_rs_create_resource_list (
         * Pass the byte_stream_buffer into a module that can calculate
         * the buffer size needed for the linked list
         */
-       status = acpi_rs_get_list_length (byte_stream_start, byte_stream_buffer_length,
-                        &list_size_needed);
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Status=%X list_size_needed=%X\n",
-               status, (u32) list_size_needed));
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_rs_get_list_length(byte_stream_start,
+                                   byte_stream_buffer_length,
+                                   &list_size_needed);
+
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Status=%X list_size_needed=%X\n",
+                         status, (u32) list_size_needed));
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Validate/Allocate/Clear caller buffer */
 
-       status = acpi_ut_initialize_buffer (output_buffer, list_size_needed);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_initialize_buffer(output_buffer, list_size_needed);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Do the conversion */
 
-       status = acpi_rs_byte_stream_to_list (byte_stream_start, byte_stream_buffer_length,
-                         output_buffer->pointer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_rs_byte_stream_to_list(byte_stream_start,
+                                       byte_stream_buffer_length,
+                                       output_buffer->pointer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "output_buffer %p Length %X\n",
-                       output_buffer->pointer, (u32) output_buffer->length));
-       return_ACPI_STATUS (AE_OK);
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "output_buffer %p Length %X\n",
+                         output_buffer->pointer, (u32) output_buffer->length));
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_create_pci_routing_table
@@ -148,44 +145,41 @@ acpi_rs_create_resource_list (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_create_pci_routing_table (
-       union acpi_operand_object       *package_object,
-       struct acpi_buffer              *output_buffer)
+acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
+                                struct acpi_buffer *output_buffer)
 {
-       u8                              *buffer;
-       union acpi_operand_object       **top_object_list;
-       union acpi_operand_object       **sub_object_list;
-       union acpi_operand_object       *obj_desc;
-       acpi_size                       buffer_size_needed = 0;
-       u32                             number_of_elements;
-       u32                             index;
-       struct acpi_pci_routing_table   *user_prt;
-       struct acpi_namespace_node      *node;
-       acpi_status                     status;
-       struct acpi_buffer              path_buffer;
-
-
-       ACPI_FUNCTION_TRACE ("rs_create_pci_routing_table");
-
+       u8 *buffer;
+       union acpi_operand_object **top_object_list;
+       union acpi_operand_object **sub_object_list;
+       union acpi_operand_object *obj_desc;
+       acpi_size buffer_size_needed = 0;
+       u32 number_of_elements;
+       u32 index;
+       struct acpi_pci_routing_table *user_prt;
+       struct acpi_namespace_node *node;
+       acpi_status status;
+       struct acpi_buffer path_buffer;
+
+       ACPI_FUNCTION_TRACE("rs_create_pci_routing_table");
 
        /* Params already validated, so we don't re-validate here */
 
        /* Get the required buffer length */
 
-       status = acpi_rs_get_pci_routing_table_length (package_object,
-                        &buffer_size_needed);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_rs_get_pci_routing_table_length(package_object,
+                                                     &buffer_size_needed);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "buffer_size_needed = %X\n",
-               (u32) buffer_size_needed));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "buffer_size_needed = %X\n",
+                         (u32) buffer_size_needed));
 
        /* Validate/Allocate/Clear caller buffer */
 
-       status = acpi_ut_initialize_buffer (output_buffer, buffer_size_needed);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_initialize_buffer(output_buffer, buffer_size_needed);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -193,10 +187,10 @@ acpi_rs_create_pci_routing_table (
         * should be a package that in turn contains an
         * acpi_integer Address, a u8 Pin, a Name and a u8 source_index.
         */
-       top_object_list  = package_object->package.elements;
+       top_object_list = package_object->package.elements;
        number_of_elements = package_object->package.count;
-       buffer           = output_buffer->pointer;
-       user_prt         = ACPI_CAST_PTR (struct acpi_pci_routing_table, buffer);
+       buffer = output_buffer->pointer;
+       user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer);
 
        for (index = 0; index < number_of_elements; index++) {
                /*
@@ -206,31 +200,34 @@ acpi_rs_create_pci_routing_table (
                 * be zero because we cleared the return buffer earlier
                 */
                buffer += user_prt->length;
-               user_prt = ACPI_CAST_PTR (struct acpi_pci_routing_table, buffer);
+               user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer);
 
                /*
                 * Fill in the Length field with the information we have at this point.
                 * The minus four is to subtract the size of the u8 Source[4] member
                 * because it is added below.
                 */
-               user_prt->length = (sizeof (struct acpi_pci_routing_table) - 4);
+               user_prt->length = (sizeof(struct acpi_pci_routing_table) - 4);
 
                /* Each element of the top-level package must also be a package */
 
-               if (ACPI_GET_OBJECT_TYPE (*top_object_list) != ACPI_TYPE_PACKAGE) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "(PRT[%X]) Need sub-package, found %s\n",
-                               index, acpi_ut_get_object_type_name (*top_object_list)));
-                       return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
+               if (ACPI_GET_OBJECT_TYPE(*top_object_list) != ACPI_TYPE_PACKAGE) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "(PRT[%X]) Need sub-package, found %s\n",
+                                         index,
+                                         acpi_ut_get_object_type_name
+                                         (*top_object_list)));
+                       return_ACPI_STATUS(AE_AML_OPERAND_TYPE);
                }
 
                /* Each sub-package must be of length 4 */
 
                if ((*top_object_list)->package.count != 4) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "(PRT[%X]) Need package of length 4, found length %d\n",
-                               index, (*top_object_list)->package.count));
-                       return_ACPI_STATUS (AE_AML_PACKAGE_LIMIT);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "(PRT[%X]) Need package of length 4, found length %d\n",
+                                         index,
+                                         (*top_object_list)->package.count));
+                       return_ACPI_STATUS(AE_AML_PACKAGE_LIMIT);
                }
 
                /*
@@ -243,40 +240,43 @@ acpi_rs_create_pci_routing_table (
                /* 1) First subobject: Dereference the PRT.Address */
 
                obj_desc = sub_object_list[0];
-               if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {
+               if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
                        user_prt->address = obj_desc->integer.value;
-               }
-               else {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "(PRT[%X].Address) Need Integer, found %s\n",
-                               index, acpi_ut_get_object_type_name (obj_desc)));
-                       return_ACPI_STATUS (AE_BAD_DATA);
+               } else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "(PRT[%X].Address) Need Integer, found %s\n",
+                                         index,
+                                         acpi_ut_get_object_type_name
+                                         (obj_desc)));
+                       return_ACPI_STATUS(AE_BAD_DATA);
                }
 
                /* 2) Second subobject: Dereference the PRT.Pin */
 
                obj_desc = sub_object_list[1];
-               if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {
+               if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
                        user_prt->pin = (u32) obj_desc->integer.value;
-               }
-               else {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "(PRT[%X].Pin) Need Integer, found %s\n",
-                               index, acpi_ut_get_object_type_name (obj_desc)));
-                       return_ACPI_STATUS (AE_BAD_DATA);
+               } else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "(PRT[%X].Pin) Need Integer, found %s\n",
+                                         index,
+                                         acpi_ut_get_object_type_name
+                                         (obj_desc)));
+                       return_ACPI_STATUS(AE_BAD_DATA);
                }
 
                /* 3) Third subobject: Dereference the PRT.source_name */
 
                obj_desc = sub_object_list[2];
-               switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+               switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
                case ACPI_TYPE_LOCAL_REFERENCE:
 
                        if (obj_desc->reference.opcode != AML_INT_NAMEPATH_OP) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "(PRT[%X].Source) Need name, found reference op %X\n",
-                                       index, obj_desc->reference.opcode));
-                               return_ACPI_STATUS (AE_BAD_DATA);
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "(PRT[%X].Source) Need name, found reference op %X\n",
+                                                 index,
+                                                 obj_desc->reference.opcode));
+                               return_ACPI_STATUS(AE_BAD_DATA);
                        }
 
                        node = obj_desc->reference.node;
@@ -284,21 +284,23 @@ acpi_rs_create_pci_routing_table (
                        /* Use *remaining* length of the buffer as max for pathname */
 
                        path_buffer.length = output_buffer->length -
-                                          (u32) ((u8 *) user_prt->source -
-                                          (u8 *) output_buffer->pointer);
+                           (u32) ((u8 *) user_prt->source -
+                                  (u8 *) output_buffer->pointer);
                        path_buffer.pointer = user_prt->source;
 
-                       status = acpi_ns_handle_to_pathname ((acpi_handle) node, &path_buffer);
+                       status =
+                           acpi_ns_handle_to_pathname((acpi_handle) node,
+                                                      &path_buffer);
 
                        /* +1 to include null terminator */
 
-                       user_prt->length += (u32) ACPI_STRLEN (user_prt->source) + 1;
+                       user_prt->length +=
+                           (u32) ACPI_STRLEN(user_prt->source) + 1;
                        break;
 
-
                case ACPI_TYPE_STRING:
 
-                       ACPI_STRCPY (user_prt->source, obj_desc->string.pointer);
+                       ACPI_STRCPY(user_prt->source, obj_desc->string.pointer);
 
                        /*
                         * Add to the Length field the length of the string
@@ -307,7 +309,6 @@ acpi_rs_create_pci_routing_table (
                        user_prt->length += obj_desc->string.length + 1;
                        break;
 
-
                case ACPI_TYPE_INTEGER:
                        /*
                         * If this is a number, then the Source Name is NULL, since the
@@ -315,33 +316,36 @@ acpi_rs_create_pci_routing_table (
                         *
                         * Add to the Length field the length of the u32 NULL
                         */
-                       user_prt->length += sizeof (u32);
+                       user_prt->length += sizeof(u32);
                        break;
 
-
                default:
 
-                  ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                          "(PRT[%X].Source) Need Ref/String/Integer, found %s\n",
-                               index, acpi_ut_get_object_type_name (obj_desc)));
-                  return_ACPI_STATUS (AE_BAD_DATA);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "(PRT[%X].Source) Need Ref/String/Integer, found %s\n",
+                                         index,
+                                         acpi_ut_get_object_type_name
+                                         (obj_desc)));
+                       return_ACPI_STATUS(AE_BAD_DATA);
                }
 
                /* Now align the current length */
 
-               user_prt->length = (u32) ACPI_ROUND_UP_to_64_bITS (user_prt->length);
+               user_prt->length =
+                   (u32) ACPI_ROUND_UP_to_64_bITS(user_prt->length);
 
                /* 4) Fourth subobject: Dereference the PRT.source_index */
 
                obj_desc = sub_object_list[3];
-               if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {
+               if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
                        user_prt->source_index = (u32) obj_desc->integer.value;
-               }
-               else {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "(PRT[%X].source_index) Need Integer, found %s\n",
-                               index, acpi_ut_get_object_type_name (obj_desc)));
-                       return_ACPI_STATUS (AE_BAD_DATA);
+               } else {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "(PRT[%X].source_index) Need Integer, found %s\n",
+                                         index,
+                                         acpi_ut_get_object_type_name
+                                         (obj_desc)));
+                       return_ACPI_STATUS(AE_BAD_DATA);
                }
 
                /* Point to the next union acpi_operand_object in the top level package */
@@ -349,12 +353,11 @@ acpi_rs_create_pci_routing_table (
                top_object_list++;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "output_buffer %p Length %X\n",
-                       output_buffer->pointer, (u32) output_buffer->length));
-       return_ACPI_STATUS (AE_OK);
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "output_buffer %p Length %X\n",
+                         output_buffer->pointer, (u32) output_buffer->length));
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_create_byte_stream
@@ -374,19 +377,16 @@ acpi_rs_create_pci_routing_table (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_create_byte_stream (
-       struct acpi_resource            *linked_list_buffer,
-       struct acpi_buffer              *output_buffer)
+acpi_rs_create_byte_stream(struct acpi_resource *linked_list_buffer,
+                          struct acpi_buffer *output_buffer)
 {
-       acpi_status                     status;
-       acpi_size                       byte_stream_size_needed = 0;
-
-
-       ACPI_FUNCTION_TRACE ("rs_create_byte_stream");
+       acpi_status status;
+       acpi_size byte_stream_size_needed = 0;
 
+       ACPI_FUNCTION_TRACE("rs_create_byte_stream");
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "linked_list_buffer = %p\n",
-               linked_list_buffer));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "linked_list_buffer = %p\n",
+                         linked_list_buffer));
 
        /*
         * Params already validated, so we don't re-validate here
@@ -394,32 +394,35 @@ acpi_rs_create_byte_stream (
         * Pass the linked_list_buffer into a module that calculates
         * the buffer size needed for the byte stream.
         */
-       status = acpi_rs_get_byte_stream_length (linked_list_buffer,
-                        &byte_stream_size_needed);
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "byte_stream_size_needed=%X, %s\n",
-               (u32) byte_stream_size_needed, acpi_format_exception (status)));
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_rs_get_byte_stream_length(linked_list_buffer,
+                                               &byte_stream_size_needed);
+
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "byte_stream_size_needed=%X, %s\n",
+                         (u32) byte_stream_size_needed,
+                         acpi_format_exception(status)));
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Validate/Allocate/Clear caller buffer */
 
-       status = acpi_ut_initialize_buffer (output_buffer, byte_stream_size_needed);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ut_initialize_buffer(output_buffer, byte_stream_size_needed);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Do the conversion */
 
-       status = acpi_rs_list_to_byte_stream (linked_list_buffer, byte_stream_size_needed,
-                         output_buffer->pointer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_rs_list_to_byte_stream(linked_list_buffer,
+                                       byte_stream_size_needed,
+                                       output_buffer->pointer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "output_buffer %p Length %X\n",
-                       output_buffer->pointer, (u32) output_buffer->length));
-       return_ACPI_STATUS (AE_OK);
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "output_buffer %p Length %X\n",
+                         output_buffer->pointer, (u32) output_buffer->length));
+       return_ACPI_STATUS(AE_OK);
 }
-
index 1935dab2ab5164b2bdf09ea1d26235eb0fb8d0f4..75bd34d1783f6495660d6d595c2ca2f24d6ead51 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acresrc.h>
 
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rsdump")
+ACPI_MODULE_NAME("rsdump")
 
+#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 /* Local prototypes */
+static void acpi_rs_dump_irq(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_irq (
-       union acpi_resource_data        *data);
-
-static void
-acpi_rs_dump_address16 (
-       union acpi_resource_data        *data);
-
-static void
-acpi_rs_dump_address32 (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_address16(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_address64 (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_address32(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_dma (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_address64(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_io (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_dma(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_extended_irq (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_io(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_fixed_io (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_extended_irq(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_fixed_memory32 (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_fixed_io(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_memory24 (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_fixed_memory32(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_memory32 (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_memory24(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_start_depend_fns (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_memory32(union acpi_resource_data *data);
 
-static void
-acpi_rs_dump_vendor_specific (
-       union acpi_resource_data        *data);
+static void acpi_rs_dump_start_depend_fns(union acpi_resource_data *data);
 
+static void acpi_rs_dump_vendor_specific(union acpi_resource_data *data);
 
-#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_irq
@@ -116,39 +87,37 @@ acpi_rs_dump_vendor_specific (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_irq (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_irq(union acpi_resource_data *data)
 {
-       struct acpi_resource_irq        *irq_data = (struct acpi_resource_irq *) data;
-       u8                              index = 0;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_resource_irq *irq_data = (struct acpi_resource_irq *)data;
+       u8 index = 0;
 
+       ACPI_FUNCTION_ENTRY();
 
-       acpi_os_printf ("IRQ Resource\n");
+       acpi_os_printf("IRQ Resource\n");
 
-       acpi_os_printf ("  %s Triggered\n",
-               ACPI_LEVEL_SENSITIVE == irq_data->edge_level ? "Level" : "Edge");
+       acpi_os_printf("  %s Triggered\n",
+                      ACPI_LEVEL_SENSITIVE ==
+                      irq_data->edge_level ? "Level" : "Edge");
 
-       acpi_os_printf ("  Active %s\n",
-               ACPI_ACTIVE_LOW == irq_data->active_high_low ? "Low" : "High");
+       acpi_os_printf("  Active %s\n",
+                      ACPI_ACTIVE_LOW ==
+                      irq_data->active_high_low ? "Low" : "High");
 
-       acpi_os_printf ("  %s\n",
-               ACPI_SHARED == irq_data->shared_exclusive ? "Shared" : "Exclusive");
+       acpi_os_printf("  %s\n",
+                      ACPI_SHARED ==
+                      irq_data->shared_exclusive ? "Shared" : "Exclusive");
 
-       acpi_os_printf ("  %X Interrupts ( ", irq_data->number_of_interrupts);
+       acpi_os_printf("  %X Interrupts ( ", irq_data->number_of_interrupts);
 
        for (index = 0; index < irq_data->number_of_interrupts; index++) {
-               acpi_os_printf ("%X ", irq_data->interrupts[index]);
+               acpi_os_printf("%X ", irq_data->interrupts[index]);
        }
 
-       acpi_os_printf (")\n");
+       acpi_os_printf(")\n");
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_dma
@@ -161,75 +130,69 @@ acpi_rs_dump_irq (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_dma (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_dma(union acpi_resource_data *data)
 {
-       struct acpi_resource_dma        *dma_data = (struct acpi_resource_dma *) data;
-       u8                              index = 0;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_resource_dma *dma_data = (struct acpi_resource_dma *)data;
+       u8 index = 0;
 
+       ACPI_FUNCTION_ENTRY();
 
-       acpi_os_printf ("DMA Resource\n");
+       acpi_os_printf("DMA Resource\n");
 
        switch (dma_data->type) {
        case ACPI_COMPATIBILITY:
-               acpi_os_printf ("  Compatibility mode\n");
+               acpi_os_printf("  Compatibility mode\n");
                break;
 
        case ACPI_TYPE_A:
-               acpi_os_printf ("  Type A\n");
+               acpi_os_printf("  Type A\n");
                break;
 
        case ACPI_TYPE_B:
-               acpi_os_printf ("  Type B\n");
+               acpi_os_printf("  Type B\n");
                break;
 
        case ACPI_TYPE_F:
-               acpi_os_printf ("  Type F\n");
+               acpi_os_printf("  Type F\n");
                break;
 
        default:
-               acpi_os_printf ("  Invalid DMA type\n");
+               acpi_os_printf("  Invalid DMA type\n");
                break;
        }
 
-       acpi_os_printf ("  %sBus Master\n",
-               ACPI_BUS_MASTER == dma_data->bus_master ? "" : "Not a ");
-
+       acpi_os_printf("  %sBus Master\n",
+                      ACPI_BUS_MASTER == dma_data->bus_master ? "" : "Not a ");
 
        switch (dma_data->transfer) {
        case ACPI_TRANSFER_8:
-               acpi_os_printf ("  8-bit only transfer\n");
+               acpi_os_printf("  8-bit only transfer\n");
                break;
 
        case ACPI_TRANSFER_8_16:
-               acpi_os_printf ("  8 and 16-bit transfer\n");
+               acpi_os_printf("  8 and 16-bit transfer\n");
                break;
 
        case ACPI_TRANSFER_16:
-               acpi_os_printf ("  16 bit only transfer\n");
+               acpi_os_printf("  16 bit only transfer\n");
                break;
 
        default:
-               acpi_os_printf ("  Invalid transfer preference\n");
+               acpi_os_printf("  Invalid transfer preference\n");
                break;
        }
 
-       acpi_os_printf ("  Number of Channels: %X ( ",
-               dma_data->number_of_channels);
+       acpi_os_printf("  Number of Channels: %X ( ",
+                      dma_data->number_of_channels);
 
        for (index = 0; index < dma_data->number_of_channels; index++) {
-               acpi_os_printf ("%X ", dma_data->channels[index]);
+               acpi_os_printf("%X ", dma_data->channels[index]);
        }
 
-       acpi_os_printf (")\n");
+       acpi_os_printf(")\n");
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_start_depend_fns
@@ -242,58 +205,54 @@ acpi_rs_dump_dma (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_start_depend_fns (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_start_depend_fns(union acpi_resource_data *data)
 {
-       struct acpi_resource_start_dpf *sdf_data = (struct acpi_resource_start_dpf *) data;
-
+       struct acpi_resource_start_dpf *sdf_data =
+           (struct acpi_resource_start_dpf *)data;
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
-
-       acpi_os_printf ("Start Dependent Functions Resource\n");
+       acpi_os_printf("Start Dependent Functions Resource\n");
 
        switch (sdf_data->compatibility_priority) {
        case ACPI_GOOD_CONFIGURATION:
-               acpi_os_printf ("  Good configuration\n");
+               acpi_os_printf("  Good configuration\n");
                break;
 
        case ACPI_ACCEPTABLE_CONFIGURATION:
-               acpi_os_printf ("  Acceptable configuration\n");
+               acpi_os_printf("  Acceptable configuration\n");
                break;
 
        case ACPI_SUB_OPTIMAL_CONFIGURATION:
-               acpi_os_printf ("  Sub-optimal configuration\n");
+               acpi_os_printf("  Sub-optimal configuration\n");
                break;
 
        default:
-               acpi_os_printf ("  Invalid compatibility priority\n");
+               acpi_os_printf("  Invalid compatibility priority\n");
                break;
        }
 
-       switch(sdf_data->performance_robustness) {
+       switch (sdf_data->performance_robustness) {
        case ACPI_GOOD_CONFIGURATION:
-               acpi_os_printf ("  Good configuration\n");
+               acpi_os_printf("  Good configuration\n");
                break;
 
        case ACPI_ACCEPTABLE_CONFIGURATION:
-               acpi_os_printf ("  Acceptable configuration\n");
+               acpi_os_printf("  Acceptable configuration\n");
                break;
 
        case ACPI_SUB_OPTIMAL_CONFIGURATION:
-               acpi_os_printf ("  Sub-optimal configuration\n");
+               acpi_os_printf("  Sub-optimal configuration\n");
                break;
 
        default:
-               acpi_os_printf ("  Invalid performance robustness preference\n");
+               acpi_os_printf("  Invalid performance robustness preference\n");
                break;
        }
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_io
@@ -306,33 +265,30 @@ acpi_rs_dump_start_depend_fns (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_io (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_io(union acpi_resource_data *data)
 {
-       struct acpi_resource_io         *io_data = (struct acpi_resource_io *) data;
-
+       struct acpi_resource_io *io_data = (struct acpi_resource_io *)data;
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
+       acpi_os_printf("Io Resource\n");
 
-       acpi_os_printf ("Io Resource\n");
+       acpi_os_printf("  %d bit decode\n",
+                      ACPI_DECODE_16 == io_data->io_decode ? 16 : 10);
 
-       acpi_os_printf ("  %d bit decode\n",
-               ACPI_DECODE_16 == io_data->io_decode ? 16 : 10);
+       acpi_os_printf("  Range minimum base: %08X\n",
+                      io_data->min_base_address);
 
-       acpi_os_printf ("  Range minimum base: %08X\n", io_data->min_base_address);
+       acpi_os_printf("  Range maximum base: %08X\n",
+                      io_data->max_base_address);
 
-       acpi_os_printf ("  Range maximum base: %08X\n", io_data->max_base_address);
+       acpi_os_printf("  Alignment: %08X\n", io_data->alignment);
 
-       acpi_os_printf ("  Alignment: %08X\n", io_data->alignment);
-
-       acpi_os_printf ("  Range Length: %08X\n", io_data->range_length);
+       acpi_os_printf("  Range Length: %08X\n", io_data->range_length);
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_fixed_io
@@ -345,25 +301,22 @@ acpi_rs_dump_io (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_fixed_io (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_fixed_io(union acpi_resource_data *data)
 {
-       struct acpi_resource_fixed_io   *fixed_io_data = (struct acpi_resource_fixed_io *) data;
-
+       struct acpi_resource_fixed_io *fixed_io_data =
+           (struct acpi_resource_fixed_io *)data;
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
+       acpi_os_printf("Fixed Io Resource\n");
+       acpi_os_printf("  Range base address: %08X",
+                      fixed_io_data->base_address);
 
-       acpi_os_printf ("Fixed Io Resource\n");
-       acpi_os_printf ("  Range base address: %08X", fixed_io_data->base_address);
-
-       acpi_os_printf ("  Range length: %08X", fixed_io_data->range_length);
+       acpi_os_printf("  Range length: %08X", fixed_io_data->range_length);
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_vendor_specific
@@ -376,30 +329,26 @@ acpi_rs_dump_fixed_io (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_vendor_specific (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_vendor_specific(union acpi_resource_data *data)
 {
-       struct acpi_resource_vendor     *vendor_data = (struct acpi_resource_vendor *) data;
-       u16                             index = 0;
-
+       struct acpi_resource_vendor *vendor_data =
+           (struct acpi_resource_vendor *)data;
+       u16 index = 0;
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
+       acpi_os_printf("Vendor Specific Resource\n");
 
-       acpi_os_printf ("Vendor Specific Resource\n");
-
-       acpi_os_printf ("  Length: %08X\n", vendor_data->length);
+       acpi_os_printf("  Length: %08X\n", vendor_data->length);
 
        for (index = 0; index < vendor_data->length; index++) {
-               acpi_os_printf ("  Byte %X: %08X\n",
-                       index, vendor_data->reserved[index]);
+               acpi_os_printf("  Byte %X: %08X\n",
+                              index, vendor_data->reserved[index]);
        }
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_memory24
@@ -412,37 +361,33 @@ acpi_rs_dump_vendor_specific (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_memory24 (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_memory24(union acpi_resource_data *data)
 {
-       struct acpi_resource_mem24      *memory24_data = (struct acpi_resource_mem24 *) data;
-
+       struct acpi_resource_mem24 *memory24_data =
+           (struct acpi_resource_mem24 *)data;
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
+       acpi_os_printf("24-Bit Memory Range Resource\n");
 
-       acpi_os_printf ("24-Bit Memory Range Resource\n");
+       acpi_os_printf("  Read%s\n",
+                      ACPI_READ_WRITE_MEMORY ==
+                      memory24_data->read_write_attribute ?
+                      "/Write" : " only");
 
-       acpi_os_printf ("  Read%s\n",
-               ACPI_READ_WRITE_MEMORY ==
-                       memory24_data->read_write_attribute ?
-                       "/Write" : " only");
+       acpi_os_printf("  Range minimum base: %08X\n",
+                      memory24_data->min_base_address);
 
-       acpi_os_printf ("  Range minimum base: %08X\n",
-               memory24_data->min_base_address);
+       acpi_os_printf("  Range maximum base: %08X\n",
+                      memory24_data->max_base_address);
 
-       acpi_os_printf ("  Range maximum base: %08X\n",
-               memory24_data->max_base_address);
+       acpi_os_printf("  Alignment: %08X\n", memory24_data->alignment);
 
-       acpi_os_printf ("  Alignment: %08X\n", memory24_data->alignment);
-
-       acpi_os_printf ("  Range length: %08X\n", memory24_data->range_length);
+       acpi_os_printf("  Range length: %08X\n", memory24_data->range_length);
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_memory32
@@ -455,37 +400,33 @@ acpi_rs_dump_memory24 (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_memory32 (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_memory32(union acpi_resource_data *data)
 {
-       struct acpi_resource_mem32      *memory32_data = (struct acpi_resource_mem32 *) data;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_resource_mem32 *memory32_data =
+           (struct acpi_resource_mem32 *)data;
 
+       ACPI_FUNCTION_ENTRY();
 
-       acpi_os_printf ("32-Bit Memory Range Resource\n");
+       acpi_os_printf("32-Bit Memory Range Resource\n");
 
-       acpi_os_printf ("  Read%s\n",
-               ACPI_READ_WRITE_MEMORY ==
-                       memory32_data->read_write_attribute ?
-                       "/Write" : " only");
+       acpi_os_printf("  Read%s\n",
+                      ACPI_READ_WRITE_MEMORY ==
+                      memory32_data->read_write_attribute ?
+                      "/Write" : " only");
 
-       acpi_os_printf ("  Range minimum base: %08X\n",
-               memory32_data->min_base_address);
+       acpi_os_printf("  Range minimum base: %08X\n",
+                      memory32_data->min_base_address);
 
-       acpi_os_printf ("  Range maximum base: %08X\n",
-               memory32_data->max_base_address);
+       acpi_os_printf("  Range maximum base: %08X\n",
+                      memory32_data->max_base_address);
 
-       acpi_os_printf ("  Alignment: %08X\n", memory32_data->alignment);
+       acpi_os_printf("  Alignment: %08X\n", memory32_data->alignment);
 
-       acpi_os_printf ("  Range length: %08X\n", memory32_data->range_length);
+       acpi_os_printf("  Range length: %08X\n", memory32_data->range_length);
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_fixed_memory32
@@ -498,33 +439,29 @@ acpi_rs_dump_memory32 (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_fixed_memory32 (
-       union acpi_resource_data            *data)
+static void acpi_rs_dump_fixed_memory32(union acpi_resource_data *data)
 {
-       struct acpi_resource_fixed_mem32    *fixed_memory32_data =
-                          (struct acpi_resource_fixed_mem32 *) data;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_resource_fixed_mem32 *fixed_memory32_data =
+           (struct acpi_resource_fixed_mem32 *)data;
 
+       ACPI_FUNCTION_ENTRY();
 
-       acpi_os_printf ("32-Bit Fixed Location Memory Range Resource\n");
+       acpi_os_printf("32-Bit Fixed Location Memory Range Resource\n");
 
-       acpi_os_printf ("  Read%s\n",
-               ACPI_READ_WRITE_MEMORY ==
-                       fixed_memory32_data->read_write_attribute ? "/Write" : " Only");
+       acpi_os_printf("  Read%s\n",
+                      ACPI_READ_WRITE_MEMORY ==
+                      fixed_memory32_data->
+                      read_write_attribute ? "/Write" : " Only");
 
-       acpi_os_printf ("  Range base address: %08X\n",
-               fixed_memory32_data->range_base_address);
+       acpi_os_printf("  Range base address: %08X\n",
+                      fixed_memory32_data->range_base_address);
 
-       acpi_os_printf ("  Range length: %08X\n",
-               fixed_memory32_data->range_length);
+       acpi_os_printf("  Range length: %08X\n",
+                      fixed_memory32_data->range_length);
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_address16
@@ -537,134 +474,136 @@ acpi_rs_dump_fixed_memory32 (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_address16 (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_address16(union acpi_resource_data *data)
 {
-       struct acpi_resource_address16 *address16_data = (struct acpi_resource_address16 *) data;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_resource_address16 *address16_data =
+           (struct acpi_resource_address16 *)data;
 
+       ACPI_FUNCTION_ENTRY();
 
-       acpi_os_printf ("16-Bit Address Space Resource\n");
-       acpi_os_printf ("  Resource Type: ");
+       acpi_os_printf("16-Bit Address Space Resource\n");
+       acpi_os_printf("  Resource Type: ");
 
        switch (address16_data->resource_type) {
        case ACPI_MEMORY_RANGE:
 
-               acpi_os_printf ("Memory Range\n");
+               acpi_os_printf("Memory Range\n");
 
                switch (address16_data->attribute.memory.cache_attribute) {
                case ACPI_NON_CACHEABLE_MEMORY:
-                       acpi_os_printf ("  Type Specific: Noncacheable memory\n");
+                       acpi_os_printf
+                           ("  Type Specific: Noncacheable memory\n");
                        break;
 
                case ACPI_CACHABLE_MEMORY:
-                       acpi_os_printf ("  Type Specific: Cacheable memory\n");
+                       acpi_os_printf("  Type Specific: Cacheable memory\n");
                        break;
 
                case ACPI_WRITE_COMBINING_MEMORY:
-                       acpi_os_printf ("  Type Specific: Write-combining memory\n");
+                       acpi_os_printf
+                           ("  Type Specific: Write-combining memory\n");
                        break;
 
                case ACPI_PREFETCHABLE_MEMORY:
-                       acpi_os_printf ("  Type Specific: Prefetchable memory\n");
+                       acpi_os_printf
+                           ("  Type Specific: Prefetchable memory\n");
                        break;
 
                default:
-                       acpi_os_printf ("  Type Specific: Invalid cache attribute\n");
+                       acpi_os_printf
+                           ("  Type Specific: Invalid cache attribute\n");
                        break;
                }
 
-               acpi_os_printf ("  Type Specific: Read%s\n",
-                       ACPI_READ_WRITE_MEMORY ==
-                               address16_data->attribute.memory.read_write_attribute ?
-                               "/Write" : " Only");
+               acpi_os_printf("  Type Specific: Read%s\n",
+                              ACPI_READ_WRITE_MEMORY ==
+                              address16_data->attribute.memory.
+                              read_write_attribute ? "/Write" : " Only");
                break;
 
        case ACPI_IO_RANGE:
 
-               acpi_os_printf ("I/O Range\n");
+               acpi_os_printf("I/O Range\n");
 
                switch (address16_data->attribute.io.range_attribute) {
                case ACPI_NON_ISA_ONLY_RANGES:
-                       acpi_os_printf ("  Type Specific: Non-ISA Io Addresses\n");
+                       acpi_os_printf
+                           ("  Type Specific: Non-ISA Io Addresses\n");
                        break;
 
                case ACPI_ISA_ONLY_RANGES:
-                       acpi_os_printf ("  Type Specific: ISA Io Addresses\n");
+                       acpi_os_printf("  Type Specific: ISA Io Addresses\n");
                        break;
 
                case ACPI_ENTIRE_RANGE:
-                       acpi_os_printf ("  Type Specific: ISA and non-ISA Io Addresses\n");
+                       acpi_os_printf
+                           ("  Type Specific: ISA and non-ISA Io Addresses\n");
                        break;
 
                default:
-                       acpi_os_printf ("  Type Specific: Invalid range attribute\n");
+                       acpi_os_printf
+                           ("  Type Specific: Invalid range attribute\n");
                        break;
                }
 
-               acpi_os_printf ("  Type Specific: %s Translation\n",
-                       ACPI_SPARSE_TRANSLATION ==
-                               address16_data->attribute.io.translation_attribute ?
-                               "Sparse" : "Dense");
+               acpi_os_printf("  Type Specific: %s Translation\n",
+                              ACPI_SPARSE_TRANSLATION ==
+                              address16_data->attribute.io.
+                              translation_attribute ? "Sparse" : "Dense");
                break;
 
        case ACPI_BUS_NUMBER_RANGE:
 
-               acpi_os_printf ("Bus Number Range\n");
+               acpi_os_printf("Bus Number Range\n");
                break;
 
        default:
 
-               acpi_os_printf ("0x%2.2X\n", address16_data->resource_type);
+               acpi_os_printf("0x%2.2X\n", address16_data->resource_type);
                break;
        }
 
-       acpi_os_printf ("  Resource %s\n",
-               ACPI_CONSUMER == address16_data->producer_consumer ?
-                       "Consumer" : "Producer");
+       acpi_os_printf("  Resource %s\n",
+                      ACPI_CONSUMER == address16_data->producer_consumer ?
+                      "Consumer" : "Producer");
 
-       acpi_os_printf ("  %s decode\n",
-               ACPI_SUB_DECODE == address16_data->decode ?
-                       "Subtractive" : "Positive");
+       acpi_os_printf("  %s decode\n",
+                      ACPI_SUB_DECODE == address16_data->decode ?
+                      "Subtractive" : "Positive");
 
-       acpi_os_printf ("  Min address is %s fixed\n",
-               ACPI_ADDRESS_FIXED == address16_data->min_address_fixed ?
-                       "" : "not");
+       acpi_os_printf("  Min address is %s fixed\n",
+                      ACPI_ADDRESS_FIXED == address16_data->min_address_fixed ?
+                      "" : "not");
 
-       acpi_os_printf ("  Max address is %s fixed\n",
-               ACPI_ADDRESS_FIXED == address16_data->max_address_fixed ?
-                       "" : "not");
+       acpi_os_printf("  Max address is %s fixed\n",
+                      ACPI_ADDRESS_FIXED == address16_data->max_address_fixed ?
+                      "" : "not");
 
-       acpi_os_printf ("  Granularity: %08X\n",
-               address16_data->granularity);
+       acpi_os_printf("  Granularity: %08X\n", address16_data->granularity);
 
-       acpi_os_printf ("  Address range min: %08X\n",
-               address16_data->min_address_range);
+       acpi_os_printf("  Address range min: %08X\n",
+                      address16_data->min_address_range);
 
-       acpi_os_printf ("  Address range max: %08X\n",
-               address16_data->max_address_range);
+       acpi_os_printf("  Address range max: %08X\n",
+                      address16_data->max_address_range);
 
-       acpi_os_printf ("  Address translation offset: %08X\n",
-               address16_data->address_translation_offset);
+       acpi_os_printf("  Address translation offset: %08X\n",
+                      address16_data->address_translation_offset);
 
-       acpi_os_printf ("  Address Length: %08X\n",
-               address16_data->address_length);
+       acpi_os_printf("  Address Length: %08X\n",
+                      address16_data->address_length);
 
        if (0xFF != address16_data->resource_source.index) {
-               acpi_os_printf ("  Resource Source Index: %X\n",
-                       address16_data->resource_source.index);
+               acpi_os_printf("  Resource Source Index: %X\n",
+                              address16_data->resource_source.index);
 
-               acpi_os_printf ("  Resource Source: %s\n",
-                       address16_data->resource_source.string_ptr);
+               acpi_os_printf("  Resource Source: %s\n",
+                              address16_data->resource_source.string_ptr);
        }
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_address32
@@ -677,134 +616,136 @@ acpi_rs_dump_address16 (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_address32 (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_address32(union acpi_resource_data *data)
 {
-       struct acpi_resource_address32 *address32_data = (struct acpi_resource_address32 *) data;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_resource_address32 *address32_data =
+           (struct acpi_resource_address32 *)data;
 
+       ACPI_FUNCTION_ENTRY();
 
-       acpi_os_printf ("32-Bit Address Space Resource\n");
+       acpi_os_printf("32-Bit Address Space Resource\n");
 
        switch (address32_data->resource_type) {
        case ACPI_MEMORY_RANGE:
 
-               acpi_os_printf ("  Resource Type: Memory Range\n");
+               acpi_os_printf("  Resource Type: Memory Range\n");
 
                switch (address32_data->attribute.memory.cache_attribute) {
                case ACPI_NON_CACHEABLE_MEMORY:
-                       acpi_os_printf ("  Type Specific: Noncacheable memory\n");
+                       acpi_os_printf
+                           ("  Type Specific: Noncacheable memory\n");
                        break;
 
                case ACPI_CACHABLE_MEMORY:
-                       acpi_os_printf ("  Type Specific: Cacheable memory\n");
+                       acpi_os_printf("  Type Specific: Cacheable memory\n");
                        break;
 
                case ACPI_WRITE_COMBINING_MEMORY:
-                       acpi_os_printf ("  Type Specific: Write-combining memory\n");
+                       acpi_os_printf
+                           ("  Type Specific: Write-combining memory\n");
                        break;
 
                case ACPI_PREFETCHABLE_MEMORY:
-                       acpi_os_printf ("  Type Specific: Prefetchable memory\n");
+                       acpi_os_printf
+                           ("  Type Specific: Prefetchable memory\n");
                        break;
 
                default:
-                       acpi_os_printf ("  Type Specific: Invalid cache attribute\n");
+                       acpi_os_printf
+                           ("  Type Specific: Invalid cache attribute\n");
                        break;
                }
 
-               acpi_os_printf ("  Type Specific: Read%s\n",
-                       ACPI_READ_WRITE_MEMORY ==
-                               address32_data->attribute.memory.read_write_attribute ?
-                               "/Write" : " Only");
+               acpi_os_printf("  Type Specific: Read%s\n",
+                              ACPI_READ_WRITE_MEMORY ==
+                              address32_data->attribute.memory.
+                              read_write_attribute ? "/Write" : " Only");
                break;
 
        case ACPI_IO_RANGE:
 
-               acpi_os_printf ("  Resource Type: Io Range\n");
+               acpi_os_printf("  Resource Type: Io Range\n");
 
                switch (address32_data->attribute.io.range_attribute) {
                case ACPI_NON_ISA_ONLY_RANGES:
-                       acpi_os_printf ("  Type Specific: Non-ISA Io Addresses\n");
+                       acpi_os_printf
+                           ("  Type Specific: Non-ISA Io Addresses\n");
                        break;
 
                case ACPI_ISA_ONLY_RANGES:
-                       acpi_os_printf ("  Type Specific: ISA Io Addresses\n");
+                       acpi_os_printf("  Type Specific: ISA Io Addresses\n");
                        break;
 
                case ACPI_ENTIRE_RANGE:
-                       acpi_os_printf ("  Type Specific: ISA and non-ISA Io Addresses\n");
+                       acpi_os_printf
+                           ("  Type Specific: ISA and non-ISA Io Addresses\n");
                        break;
 
                default:
-                       acpi_os_printf ("  Type Specific: Invalid Range attribute");
+                       acpi_os_printf
+                           ("  Type Specific: Invalid Range attribute");
                        break;
                }
 
-               acpi_os_printf ("  Type Specific: %s Translation\n",
-                       ACPI_SPARSE_TRANSLATION ==
-                               address32_data->attribute.io.translation_attribute ?
-                               "Sparse" : "Dense");
+               acpi_os_printf("  Type Specific: %s Translation\n",
+                              ACPI_SPARSE_TRANSLATION ==
+                              address32_data->attribute.io.
+                              translation_attribute ? "Sparse" : "Dense");
                break;
 
        case ACPI_BUS_NUMBER_RANGE:
 
-               acpi_os_printf ("  Resource Type: Bus Number Range\n");
+               acpi_os_printf("  Resource Type: Bus Number Range\n");
                break;
 
        default:
 
-               acpi_os_printf ("  Resource Type: 0x%2.2X\n",
-                       address32_data->resource_type);
+               acpi_os_printf("  Resource Type: 0x%2.2X\n",
+                              address32_data->resource_type);
                break;
        }
 
-       acpi_os_printf ("  Resource %s\n",
-               ACPI_CONSUMER == address32_data->producer_consumer ?
-                       "Consumer" : "Producer");
+       acpi_os_printf("  Resource %s\n",
+                      ACPI_CONSUMER == address32_data->producer_consumer ?
+                      "Consumer" : "Producer");
 
-       acpi_os_printf ("  %s decode\n",
-               ACPI_SUB_DECODE == address32_data->decode ?
-                       "Subtractive" : "Positive");
+       acpi_os_printf("  %s decode\n",
+                      ACPI_SUB_DECODE == address32_data->decode ?
+                      "Subtractive" : "Positive");
 
-       acpi_os_printf ("  Min address is %s fixed\n",
-               ACPI_ADDRESS_FIXED == address32_data->min_address_fixed ?
-                       "" : "not ");
+       acpi_os_printf("  Min address is %s fixed\n",
+                      ACPI_ADDRESS_FIXED == address32_data->min_address_fixed ?
+                      "" : "not ");
 
-       acpi_os_printf ("  Max address is %s fixed\n",
-               ACPI_ADDRESS_FIXED == address32_data->max_address_fixed ?
-                       "" : "not ");
+       acpi_os_printf("  Max address is %s fixed\n",
+                      ACPI_ADDRESS_FIXED == address32_data->max_address_fixed ?
+                      "" : "not ");
 
-       acpi_os_printf ("  Granularity: %08X\n",
-               address32_data->granularity);
+       acpi_os_printf("  Granularity: %08X\n", address32_data->granularity);
 
-       acpi_os_printf ("  Address range min: %08X\n",
-               address32_data->min_address_range);
+       acpi_os_printf("  Address range min: %08X\n",
+                      address32_data->min_address_range);
 
-       acpi_os_printf ("  Address range max: %08X\n",
-               address32_data->max_address_range);
+       acpi_os_printf("  Address range max: %08X\n",
+                      address32_data->max_address_range);
 
-       acpi_os_printf ("  Address translation offset: %08X\n",
-               address32_data->address_translation_offset);
+       acpi_os_printf("  Address translation offset: %08X\n",
+                      address32_data->address_translation_offset);
 
-       acpi_os_printf ("  Address Length: %08X\n",
-               address32_data->address_length);
+       acpi_os_printf("  Address Length: %08X\n",
+                      address32_data->address_length);
 
-       if(0xFF != address32_data->resource_source.index) {
-               acpi_os_printf ("  Resource Source Index: %X\n",
-                       address32_data->resource_source.index);
+       if (0xFF != address32_data->resource_source.index) {
+               acpi_os_printf("  Resource Source Index: %X\n",
+                              address32_data->resource_source.index);
 
-               acpi_os_printf ("  Resource Source: %s\n",
-                       address32_data->resource_source.string_ptr);
+               acpi_os_printf("  Resource Source: %s\n",
+                              address32_data->resource_source.string_ptr);
        }
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_address64
@@ -817,137 +758,142 @@ acpi_rs_dump_address32 (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_address64 (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_address64(union acpi_resource_data *data)
 {
-       struct acpi_resource_address64 *address64_data = (struct acpi_resource_address64 *) data;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_resource_address64 *address64_data =
+           (struct acpi_resource_address64 *)data;
 
+       ACPI_FUNCTION_ENTRY();
 
-       acpi_os_printf ("64-Bit Address Space Resource\n");
+       acpi_os_printf("64-Bit Address Space Resource\n");
 
        switch (address64_data->resource_type) {
        case ACPI_MEMORY_RANGE:
 
-               acpi_os_printf ("  Resource Type: Memory Range\n");
+               acpi_os_printf("  Resource Type: Memory Range\n");
 
                switch (address64_data->attribute.memory.cache_attribute) {
                case ACPI_NON_CACHEABLE_MEMORY:
-                       acpi_os_printf ("  Type Specific: Noncacheable memory\n");
+                       acpi_os_printf
+                           ("  Type Specific: Noncacheable memory\n");
                        break;
 
                case ACPI_CACHABLE_MEMORY:
-                       acpi_os_printf ("  Type Specific: Cacheable memory\n");
+                       acpi_os_printf("  Type Specific: Cacheable memory\n");
                        break;
 
                case ACPI_WRITE_COMBINING_MEMORY:
-                       acpi_os_printf ("  Type Specific: Write-combining memory\n");
+                       acpi_os_printf
+                           ("  Type Specific: Write-combining memory\n");
                        break;
 
                case ACPI_PREFETCHABLE_MEMORY:
-                       acpi_os_printf ("  Type Specific: Prefetchable memory\n");
+                       acpi_os_printf
+                           ("  Type Specific: Prefetchable memory\n");
                        break;
 
                default:
-                       acpi_os_printf ("  Type Specific: Invalid cache attribute\n");
+                       acpi_os_printf
+                           ("  Type Specific: Invalid cache attribute\n");
                        break;
                }
 
-               acpi_os_printf ("  Type Specific: Read%s\n",
-                       ACPI_READ_WRITE_MEMORY ==
-                               address64_data->attribute.memory.read_write_attribute ?
-                               "/Write" : " Only");
+               acpi_os_printf("  Type Specific: Read%s\n",
+                              ACPI_READ_WRITE_MEMORY ==
+                              address64_data->attribute.memory.
+                              read_write_attribute ? "/Write" : " Only");
                break;
 
        case ACPI_IO_RANGE:
 
-               acpi_os_printf ("  Resource Type: Io Range\n");
+               acpi_os_printf("  Resource Type: Io Range\n");
 
                switch (address64_data->attribute.io.range_attribute) {
                case ACPI_NON_ISA_ONLY_RANGES:
-                       acpi_os_printf ("  Type Specific: Non-ISA Io Addresses\n");
+                       acpi_os_printf
+                           ("  Type Specific: Non-ISA Io Addresses\n");
                        break;
 
                case ACPI_ISA_ONLY_RANGES:
-                       acpi_os_printf ("  Type Specific: ISA Io Addresses\n");
+                       acpi_os_printf("  Type Specific: ISA Io Addresses\n");
                        break;
 
                case ACPI_ENTIRE_RANGE:
-                       acpi_os_printf ("  Type Specific: ISA and non-ISA Io Addresses\n");
+                       acpi_os_printf
+                           ("  Type Specific: ISA and non-ISA Io Addresses\n");
                        break;
 
                default:
-                       acpi_os_printf ("  Type Specific: Invalid Range attribute");
+                       acpi_os_printf
+                           ("  Type Specific: Invalid Range attribute");
                        break;
                }
 
-               acpi_os_printf ("  Type Specific: %s Translation\n",
-                       ACPI_SPARSE_TRANSLATION ==
-                               address64_data->attribute.io.translation_attribute ?
-                               "Sparse" : "Dense");
+               acpi_os_printf("  Type Specific: %s Translation\n",
+                              ACPI_SPARSE_TRANSLATION ==
+                              address64_data->attribute.io.
+                              translation_attribute ? "Sparse" : "Dense");
                break;
 
        case ACPI_BUS_NUMBER_RANGE:
 
-               acpi_os_printf ("  Resource Type: Bus Number Range\n");
+               acpi_os_printf("  Resource Type: Bus Number Range\n");
                break;
 
        default:
 
-               acpi_os_printf ("  Resource Type: 0x%2.2X\n",
-                       address64_data->resource_type);
+               acpi_os_printf("  Resource Type: 0x%2.2X\n",
+                              address64_data->resource_type);
                break;
        }
 
-       acpi_os_printf ("  Resource %s\n",
-               ACPI_CONSUMER == address64_data->producer_consumer ?
-                       "Consumer" : "Producer");
+       acpi_os_printf("  Resource %s\n",
+                      ACPI_CONSUMER == address64_data->producer_consumer ?
+                      "Consumer" : "Producer");
 
-       acpi_os_printf ("  %s decode\n",
-               ACPI_SUB_DECODE == address64_data->decode ?
-                       "Subtractive" : "Positive");
+       acpi_os_printf("  %s decode\n",
+                      ACPI_SUB_DECODE == address64_data->decode ?
+                      "Subtractive" : "Positive");
 
-       acpi_os_printf ("  Min address is %s fixed\n",
-               ACPI_ADDRESS_FIXED == address64_data->min_address_fixed ?
-                       "" : "not ");
+       acpi_os_printf("  Min address is %s fixed\n",
+                      ACPI_ADDRESS_FIXED == address64_data->min_address_fixed ?
+                      "" : "not ");
 
-       acpi_os_printf ("  Max address is %s fixed\n",
-               ACPI_ADDRESS_FIXED == address64_data->max_address_fixed ?
-                       "" : "not ");
+       acpi_os_printf("  Max address is %s fixed\n",
+                      ACPI_ADDRESS_FIXED == address64_data->max_address_fixed ?
+                      "" : "not ");
 
-       acpi_os_printf ("  Granularity: %8.8X%8.8X\n",
-               ACPI_FORMAT_UINT64 (address64_data->granularity));
+       acpi_os_printf("  Granularity: %8.8X%8.8X\n",
+                      ACPI_FORMAT_UINT64(address64_data->granularity));
 
-       acpi_os_printf ("  Address range min: %8.8X%8.8X\n",
-               ACPI_FORMAT_UINT64 (address64_data->min_address_range));
+       acpi_os_printf("  Address range min: %8.8X%8.8X\n",
+                      ACPI_FORMAT_UINT64(address64_data->min_address_range));
 
-       acpi_os_printf ("  Address range max: %8.8X%8.8X\n",
-               ACPI_FORMAT_UINT64 (address64_data->max_address_range));
+       acpi_os_printf("  Address range max: %8.8X%8.8X\n",
+                      ACPI_FORMAT_UINT64(address64_data->max_address_range));
 
-       acpi_os_printf ("  Address translation offset: %8.8X%8.8X\n",
-               ACPI_FORMAT_UINT64 (address64_data->address_translation_offset));
+       acpi_os_printf("  Address translation offset: %8.8X%8.8X\n",
+                      ACPI_FORMAT_UINT64(address64_data->
+                                         address_translation_offset));
 
-       acpi_os_printf ("  Address Length: %8.8X%8.8X\n",
-               ACPI_FORMAT_UINT64 (address64_data->address_length));
+       acpi_os_printf("  Address Length: %8.8X%8.8X\n",
+                      ACPI_FORMAT_UINT64(address64_data->address_length));
 
-       acpi_os_printf ("  Type Specific Attributes: %8.8X%8.8X\n",
-               ACPI_FORMAT_UINT64 (address64_data->type_specific_attributes));
+       acpi_os_printf("  Type Specific Attributes: %8.8X%8.8X\n",
+                      ACPI_FORMAT_UINT64(address64_data->
+                                         type_specific_attributes));
 
        if (0xFF != address64_data->resource_source.index) {
-               acpi_os_printf ("  Resource Source Index: %X\n",
-                       address64_data->resource_source.index);
+               acpi_os_printf("  Resource Source Index: %X\n",
+                              address64_data->resource_source.index);
 
-               acpi_os_printf ("  Resource Source: %s\n",
-                       address64_data->resource_source.string_ptr);
+               acpi_os_printf("  Resource Source: %s\n",
+                              address64_data->resource_source.string_ptr);
        }
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_extended_irq
@@ -960,55 +906,52 @@ acpi_rs_dump_address64 (
  *
  ******************************************************************************/
 
-static void
-acpi_rs_dump_extended_irq (
-       union acpi_resource_data        *data)
+static void acpi_rs_dump_extended_irq(union acpi_resource_data *data)
 {
-       struct acpi_resource_ext_irq    *ext_irq_data = (struct acpi_resource_ext_irq *) data;
-       u8                              index = 0;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       struct acpi_resource_ext_irq *ext_irq_data =
+           (struct acpi_resource_ext_irq *)data;
+       u8 index = 0;
 
+       ACPI_FUNCTION_ENTRY();
 
-       acpi_os_printf ("Extended IRQ Resource\n");
+       acpi_os_printf("Extended IRQ Resource\n");
 
-       acpi_os_printf ("  Resource %s\n",
-               ACPI_CONSUMER == ext_irq_data->producer_consumer ?
-                       "Consumer" : "Producer");
+       acpi_os_printf("  Resource %s\n",
+                      ACPI_CONSUMER == ext_irq_data->producer_consumer ?
+                      "Consumer" : "Producer");
 
-       acpi_os_printf ("  %s\n",
-               ACPI_LEVEL_SENSITIVE == ext_irq_data->edge_level ?
-                       "Level" : "Edge");
+       acpi_os_printf("  %s\n",
+                      ACPI_LEVEL_SENSITIVE == ext_irq_data->edge_level ?
+                      "Level" : "Edge");
 
-       acpi_os_printf ("  Active %s\n",
-               ACPI_ACTIVE_LOW == ext_irq_data->active_high_low ?
-                       "low" : "high");
+       acpi_os_printf("  Active %s\n",
+                      ACPI_ACTIVE_LOW == ext_irq_data->active_high_low ?
+                      "low" : "high");
 
-       acpi_os_printf ("  %s\n",
-               ACPI_SHARED == ext_irq_data->shared_exclusive ?
-                       "Shared" : "Exclusive");
+       acpi_os_printf("  %s\n",
+                      ACPI_SHARED == ext_irq_data->shared_exclusive ?
+                      "Shared" : "Exclusive");
 
-       acpi_os_printf ("  Interrupts : %X ( ", ext_irq_data->number_of_interrupts);
+       acpi_os_printf("  Interrupts : %X ( ",
+                      ext_irq_data->number_of_interrupts);
 
        for (index = 0; index < ext_irq_data->number_of_interrupts; index++) {
-               acpi_os_printf ("%X ", ext_irq_data->interrupts[index]);
+               acpi_os_printf("%X ", ext_irq_data->interrupts[index]);
        }
 
-       acpi_os_printf (")\n");
+       acpi_os_printf(")\n");
 
-       if(0xFF != ext_irq_data->resource_source.index) {
-               acpi_os_printf ("  Resource Source Index: %X",
-                       ext_irq_data->resource_source.index);
+       if (0xFF != ext_irq_data->resource_source.index) {
+               acpi_os_printf("  Resource Source Index: %X",
+                              ext_irq_data->resource_source.index);
 
-               acpi_os_printf ("  Resource Source: %s",
-                       ext_irq_data->resource_source.string_ptr);
+               acpi_os_printf("  Resource Source: %s",
+                              ext_irq_data->resource_source.string_ptr);
        }
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dump_resource_list
@@ -1021,92 +964,91 @@ acpi_rs_dump_extended_irq (
  *
  ******************************************************************************/
 
-void
-acpi_rs_dump_resource_list (
-       struct acpi_resource        *resource)
+void acpi_rs_dump_resource_list(struct acpi_resource *resource)
 {
-       u8                          count = 0;
-       u8                          done = FALSE;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       u8 count = 0;
+       u8 done = FALSE;
 
+       ACPI_FUNCTION_ENTRY();
 
        if (acpi_dbg_level & ACPI_LV_RESOURCES && _COMPONENT & acpi_dbg_layer) {
                while (!done) {
-                       acpi_os_printf ("Resource structure %X.\n", count++);
+                       acpi_os_printf("Resource structure %X.\n", count++);
 
                        switch (resource->id) {
                        case ACPI_RSTYPE_IRQ:
-                               acpi_rs_dump_irq (&resource->data);
+                               acpi_rs_dump_irq(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_DMA:
-                               acpi_rs_dump_dma (&resource->data);
+                               acpi_rs_dump_dma(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_START_DPF:
-                               acpi_rs_dump_start_depend_fns (&resource->data);
+                               acpi_rs_dump_start_depend_fns(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_END_DPF:
-                               acpi_os_printf ("end_dependent_functions Resource\n");
-                               /* acpi_rs_dump_end_dependent_functions (Resource->Data);*/
+                               acpi_os_printf
+                                   ("end_dependent_functions Resource\n");
+                               /* acpi_rs_dump_end_dependent_functions (Resource->Data); */
                                break;
 
                        case ACPI_RSTYPE_IO:
-                               acpi_rs_dump_io (&resource->data);
+                               acpi_rs_dump_io(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_FIXED_IO:
-                               acpi_rs_dump_fixed_io (&resource->data);
+                               acpi_rs_dump_fixed_io(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_VENDOR:
-                               acpi_rs_dump_vendor_specific (&resource->data);
+                               acpi_rs_dump_vendor_specific(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_END_TAG:
-                               /*rs_dump_end_tag (Resource->Data);*/
-                               acpi_os_printf ("end_tag Resource\n");
+                               /*rs_dump_end_tag (Resource->Data); */
+                               acpi_os_printf("end_tag Resource\n");
                                done = TRUE;
                                break;
 
                        case ACPI_RSTYPE_MEM24:
-                               acpi_rs_dump_memory24 (&resource->data);
+                               acpi_rs_dump_memory24(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_MEM32:
-                               acpi_rs_dump_memory32 (&resource->data);
+                               acpi_rs_dump_memory32(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_FIXED_MEM32:
-                               acpi_rs_dump_fixed_memory32 (&resource->data);
+                               acpi_rs_dump_fixed_memory32(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_ADDRESS16:
-                               acpi_rs_dump_address16 (&resource->data);
+                               acpi_rs_dump_address16(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_ADDRESS32:
-                               acpi_rs_dump_address32 (&resource->data);
+                               acpi_rs_dump_address32(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_ADDRESS64:
-                               acpi_rs_dump_address64 (&resource->data);
+                               acpi_rs_dump_address64(&resource->data);
                                break;
 
                        case ACPI_RSTYPE_EXT_IRQ:
-                               acpi_rs_dump_extended_irq (&resource->data);
+                               acpi_rs_dump_extended_irq(&resource->data);
                                break;
 
                        default:
-                               acpi_os_printf ("Invalid resource type\n");
+                               acpi_os_printf("Invalid resource type\n");
                                break;
 
                        }
 
-                       resource = ACPI_PTR_ADD (struct acpi_resource, resource, resource->length);
+                       resource =
+                           ACPI_PTR_ADD(struct acpi_resource, resource,
+                                        resource->length);
                }
        }
 
@@ -1125,36 +1067,38 @@ acpi_rs_dump_resource_list (
  *
  ******************************************************************************/
 
-void
-acpi_rs_dump_irq_list (
-       u8                              *route_table)
+void acpi_rs_dump_irq_list(u8 * route_table)
 {
-       u8                              *buffer = route_table;
-       u8                              count = 0;
-       u8                              done = FALSE;
-       struct acpi_pci_routing_table   *prt_element;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       u8 *buffer = route_table;
+       u8 count = 0;
+       u8 done = FALSE;
+       struct acpi_pci_routing_table *prt_element;
 
+       ACPI_FUNCTION_ENTRY();
 
        if (acpi_dbg_level & ACPI_LV_RESOURCES && _COMPONENT & acpi_dbg_layer) {
-               prt_element = ACPI_CAST_PTR (struct acpi_pci_routing_table, buffer);
+               prt_element =
+                   ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer);
 
                while (!done) {
-                       acpi_os_printf ("PCI IRQ Routing Table structure %X.\n", count++);
+                       acpi_os_printf("PCI IRQ Routing Table structure %X.\n",
+                                      count++);
 
-                       acpi_os_printf ("  Address: %8.8X%8.8X\n",
-                               ACPI_FORMAT_UINT64 (prt_element->address));
+                       acpi_os_printf("  Address: %8.8X%8.8X\n",
+                                      ACPI_FORMAT_UINT64(prt_element->
+                                                         address));
 
-                       acpi_os_printf ("  Pin: %X\n", prt_element->pin);
+                       acpi_os_printf("  Pin: %X\n", prt_element->pin);
 
-                       acpi_os_printf ("  Source: %s\n", prt_element->source);
+                       acpi_os_printf("  Source: %s\n", prt_element->source);
 
-                       acpi_os_printf ("  source_index: %X\n", prt_element->source_index);
+                       acpi_os_printf("  source_index: %X\n",
+                                      prt_element->source_index);
 
                        buffer += prt_element->length;
-                       prt_element = ACPI_CAST_PTR (struct acpi_pci_routing_table, buffer);
+                       prt_element =
+                           ACPI_CAST_PTR(struct acpi_pci_routing_table,
+                                         buffer);
                        if (0 == prt_element->length) {
                                done = TRUE;
                        }
@@ -1165,4 +1109,3 @@ acpi_rs_dump_irq_list (
 }
 
 #endif
-
index 23a4d149fac88d4b62534636e64a439ce55f3a08..d53bbe89e8514dfd17ad6fe3fe8084366698e02c 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acresrc.h>
 
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rsio")
-
+ACPI_MODULE_NAME("rsio")
 
 /*******************************************************************************
  *
  *              number of bytes consumed from the byte stream.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_rs_io_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_io_resource(u8 * byte_stream_buffer,
+                   acpi_size * bytes_consumed,
+                   u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_io);
-
-
-       ACPI_FUNCTION_TRACE ("rs_io_resource");
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       acpi_size struct_size = ACPI_SIZEOF_RESOURCE(struct acpi_resource_io);
 
+       ACPI_FUNCTION_TRACE("rs_io_resource");
 
        /* The number of bytes consumed are Constant */
 
@@ -104,14 +96,14 @@ acpi_rs_io_resource (
        /* Check min_base Address */
 
        buffer += 1;
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
        output_struct->data.io.min_base_address = temp16;
 
        /* Check max_base Address */
 
        buffer += 2;
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
        output_struct->data.io.max_base_address = temp16;
 
@@ -136,10 +128,9 @@ acpi_rs_io_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_fixed_io_resource
@@ -162,22 +153,18 @@ acpi_rs_io_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_fixed_io_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_fixed_io_resource(u8 * byte_stream_buffer,
+                         acpi_size * bytes_consumed,
+                         u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_fixed_io);
-
-
-       ACPI_FUNCTION_TRACE ("rs_fixed_io_resource");
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       acpi_size struct_size =
+           ACPI_SIZEOF_RESOURCE(struct acpi_resource_fixed_io);
 
+       ACPI_FUNCTION_TRACE("rs_fixed_io_resource");
 
        /* The number of bytes consumed are Constant */
 
@@ -188,7 +175,7 @@ acpi_rs_fixed_io_resource (
        /* Check Range Base Address */
 
        buffer += 1;
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
        output_struct->data.fixed_io.base_address = temp16;
 
@@ -206,10 +193,9 @@ acpi_rs_fixed_io_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_io_stream
@@ -227,18 +213,14 @@ acpi_rs_fixed_io_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_io_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_io_stream(struct acpi_resource *linked_list,
+                 u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-
-
-       ACPI_FUNCTION_TRACE ("rs_io_stream");
+       u8 *buffer = *output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
 
+       ACPI_FUNCTION_TRACE("rs_io_stream");
 
        /* The descriptor field is static */
 
@@ -256,14 +238,14 @@ acpi_rs_io_stream (
 
        temp16 = (u16) linked_list->data.io.min_base_address;
 
-       ACPI_MOVE_16_TO_16 (buffer, &temp16);
+       ACPI_MOVE_16_TO_16(buffer, &temp16);
        buffer += 2;
 
        /* Set the Range maximum base address */
 
        temp16 = (u16) linked_list->data.io.max_base_address;
 
-       ACPI_MOVE_16_TO_16 (buffer, &temp16);
+       ACPI_MOVE_16_TO_16(buffer, &temp16);
        buffer += 2;
 
        /* Set the base alignment */
@@ -282,11 +264,10 @@ acpi_rs_io_stream (
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_fixed_io_stream
@@ -304,18 +285,14 @@ acpi_rs_io_stream (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_fixed_io_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_fixed_io_stream(struct acpi_resource *linked_list,
+                       u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-
-
-       ACPI_FUNCTION_TRACE ("rs_fixed_io_stream");
+       u8 *buffer = *output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
 
+       ACPI_FUNCTION_TRACE("rs_fixed_io_stream");
 
        /* The descriptor field is static */
 
@@ -327,7 +304,7 @@ acpi_rs_fixed_io_stream (
 
        temp16 = (u16) linked_list->data.fixed_io.base_address;
 
-       ACPI_MOVE_16_TO_16 (buffer, &temp16);
+       ACPI_MOVE_16_TO_16(buffer, &temp16);
        buffer += 2;
 
        /* Set the range length */
@@ -339,11 +316,10 @@ acpi_rs_fixed_io_stream (
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dma_resource
@@ -366,23 +342,18 @@ acpi_rs_fixed_io_stream (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_dma_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_dma_resource(u8 * byte_stream_buffer,
+                    acpi_size * bytes_consumed,
+                    u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u8                              temp8 = 0;
-       u8                              index;
-       u8                              i;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_dma);
-
-
-       ACPI_FUNCTION_TRACE ("rs_dma_resource");
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       u8 temp8 = 0;
+       u8 index;
+       u8 i;
+       acpi_size struct_size = ACPI_SIZEOF_RESOURCE(struct acpi_resource_dma);
 
+       ACPI_FUNCTION_TRACE("rs_dma_resource");
 
        /* The number of bytes consumed are Constant */
 
@@ -422,9 +393,9 @@ acpi_rs_dma_resource (
        output_struct->data.dma.transfer = temp8 & 0x03;
 
        if (0x03 == output_struct->data.dma.transfer) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Invalid DMA.Transfer preference (3)\n"));
-               return_ACPI_STATUS (AE_BAD_DATA);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Invalid DMA.Transfer preference (3)\n"));
+               return_ACPI_STATUS(AE_BAD_DATA);
        }
 
        /* Get bus master preference (Bit[2]) */
@@ -442,10 +413,9 @@ acpi_rs_dma_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_dma_stream
@@ -463,19 +433,15 @@ acpi_rs_dma_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_dma_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_dma_stream(struct acpi_resource *linked_list,
+                  u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       u8                              index;
-
-
-       ACPI_FUNCTION_TRACE ("rs_dma_stream");
+       u8 *buffer = *output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       u8 index;
 
+       ACPI_FUNCTION_TRACE("rs_dma_stream");
 
        /* The descriptor field is static */
 
@@ -486,8 +452,7 @@ acpi_rs_dma_stream (
        /* Loop through all of the Channels and set the mask bits */
 
        for (index = 0;
-                index < linked_list->data.dma.number_of_channels;
-                index++) {
+            index < linked_list->data.dma.number_of_channels; index++) {
                temp16 = (u16) linked_list->data.dma.channels[index];
                temp8 |= 0x1 << temp16;
        }
@@ -506,7 +471,6 @@ acpi_rs_dma_stream (
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
-
index 8a2b630be45bc5b7a3aca1b926bccd58e6ed5f91..56043fee96cb8885f3a6d25ebf96b55206481545 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acresrc.h>
 
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rsirq")
-
+ACPI_MODULE_NAME("rsirq")
 
 /*******************************************************************************
  *
  *              number of bytes consumed from the byte stream.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_rs_irq_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_irq_resource(u8 * byte_stream_buffer,
+                    acpi_size * bytes_consumed,
+                    u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       u8                              index;
-       u8                              i;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_irq);
-
-
-       ACPI_FUNCTION_TRACE ("rs_irq_resource");
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       u8 index;
+       u8 i;
+       acpi_size struct_size = ACPI_SIZEOF_RESOURCE(struct acpi_resource_irq);
 
+       ACPI_FUNCTION_TRACE("rs_irq_resource");
 
        /*
         * The number of bytes consumed are contained in the descriptor
@@ -101,7 +93,7 @@ acpi_rs_irq_resource (
        /* Point to the 16-bits of Bytes 1 and 2 */
 
        buffer += 1;
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
        output_struct->data.irq.number_of_interrupts = 0;
 
@@ -132,14 +124,18 @@ acpi_rs_irq_resource (
                /* Check for HE, LL interrupts */
 
                switch (temp8 & 0x09) {
-               case 0x01: /* HE */
-                       output_struct->data.irq.edge_level = ACPI_EDGE_SENSITIVE;
-                       output_struct->data.irq.active_high_low = ACPI_ACTIVE_HIGH;
+               case 0x01:      /* HE */
+                       output_struct->data.irq.edge_level =
+                           ACPI_EDGE_SENSITIVE;
+                       output_struct->data.irq.active_high_low =
+                           ACPI_ACTIVE_HIGH;
                        break;
 
-               case 0x08: /* LL */
-                       output_struct->data.irq.edge_level = ACPI_LEVEL_SENSITIVE;
-                       output_struct->data.irq.active_high_low = ACPI_ACTIVE_LOW;
+               case 0x08:      /* LL */
+                       output_struct->data.irq.edge_level =
+                           ACPI_LEVEL_SENSITIVE;
+                       output_struct->data.irq.active_high_low =
+                           ACPI_ACTIVE_LOW;
                        break;
 
                default:
@@ -148,17 +144,16 @@ acpi_rs_irq_resource (
                         * are allowed (ACPI spec, section "IRQ Format")
                         * so 0x00 and 0x09 are illegal.
                         */
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Invalid interrupt polarity/trigger in resource list, %X\n",
-                               temp8));
-                       return_ACPI_STATUS (AE_BAD_DATA);
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid interrupt polarity/trigger in resource list, %X\n",
+                                         temp8));
+                       return_ACPI_STATUS(AE_BAD_DATA);
                }
 
                /* Check for sharable */
 
                output_struct->data.irq.shared_exclusive = (temp8 >> 3) & 0x01;
-       }
-       else {
+       } else {
                /*
                 * Assume Edge Sensitive, Active High, Non-Sharable
                 * per ACPI Specification
@@ -175,10 +170,9 @@ acpi_rs_irq_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_irq_stream
@@ -196,32 +190,27 @@ acpi_rs_irq_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_irq_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_irq_stream(struct acpi_resource *linked_list,
+                  u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       u8                              index;
-       u8                              IRqinfo_byte_needed;
-
-
-       ACPI_FUNCTION_TRACE ("rs_irq_stream");
+       u8 *buffer = *output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       u8 index;
+       u8 IRqinfo_byte_needed;
 
+       ACPI_FUNCTION_TRACE("rs_irq_stream");
 
        /*
         * The descriptor field is set based upon whether a third byte is
         * needed to contain the IRQ Information.
         */
        if (ACPI_EDGE_SENSITIVE == linked_list->data.irq.edge_level &&
-               ACPI_ACTIVE_HIGH == linked_list->data.irq.active_high_low &&
-               ACPI_EXCLUSIVE == linked_list->data.irq.shared_exclusive) {
+           ACPI_ACTIVE_HIGH == linked_list->data.irq.active_high_low &&
+           ACPI_EXCLUSIVE == linked_list->data.irq.shared_exclusive) {
                *buffer = 0x22;
                IRqinfo_byte_needed = FALSE;
-       }
-       else {
+       } else {
                *buffer = 0x23;
                IRqinfo_byte_needed = TRUE;
        }
@@ -231,14 +220,13 @@ acpi_rs_irq_stream (
 
        /* Loop through all of the interrupts and set the mask bits */
 
-       for(index = 0;
-               index < linked_list->data.irq.number_of_interrupts;
-               index++) {
+       for (index = 0;
+            index < linked_list->data.irq.number_of_interrupts; index++) {
                temp8 = (u8) linked_list->data.irq.interrupts[index];
                temp16 |= 0x1 << temp8;
        }
 
-       ACPI_MOVE_16_TO_16 (buffer, &temp16);
+       ACPI_MOVE_16_TO_16(buffer, &temp16);
        buffer += 2;
 
        /* Set the IRQ Info byte if needed. */
@@ -246,13 +234,12 @@ acpi_rs_irq_stream (
        if (IRqinfo_byte_needed) {
                temp8 = 0;
                temp8 = (u8) ((linked_list->data.irq.shared_exclusive &
-                                0x01) << 4);
+                              0x01) << 4);
 
                if (ACPI_LEVEL_SENSITIVE == linked_list->data.irq.edge_level &&
-                       ACPI_ACTIVE_LOW == linked_list->data.irq.active_high_low) {
+                   ACPI_ACTIVE_LOW == linked_list->data.irq.active_high_low) {
                        temp8 |= 0x08;
-               }
-               else {
+               } else {
                        temp8 |= 0x01;
                }
 
@@ -262,11 +249,10 @@ acpi_rs_irq_stream (
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_extended_irq_resource
@@ -289,34 +275,30 @@ acpi_rs_irq_stream (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_extended_irq_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_extended_irq_resource(u8 * byte_stream_buffer,
+                             acpi_size * bytes_consumed,
+                             u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       u8                              *temp_ptr;
-       u8                              index;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_ext_irq);
-
-
-       ACPI_FUNCTION_TRACE ("rs_extended_irq_resource");
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       u8 *temp_ptr;
+       u8 index;
+       acpi_size struct_size =
+           ACPI_SIZEOF_RESOURCE(struct acpi_resource_ext_irq);
 
+       ACPI_FUNCTION_TRACE("rs_extended_irq_resource");
 
-       /* Point past the Descriptor to get the number of bytes consumed */
+       /* Get the Descriptor Length field */
 
        buffer += 1;
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
        /* Validate minimum descriptor length */
 
        if (temp16 < 6) {
-               return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);
+               return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH);
        }
 
        *bytes_consumed = temp16 + 3;
@@ -338,7 +320,7 @@ acpi_rs_extended_irq_resource (
         * - Edge/Level are defined opposite in the table vs the headers
         */
        output_struct->data.extended_irq.edge_level =
-               (temp8 & 0x2) ? ACPI_EDGE_SENSITIVE : ACPI_LEVEL_SENSITIVE;
+           (temp8 & 0x2) ? ACPI_EDGE_SENSITIVE : ACPI_LEVEL_SENSITIVE;
 
        /* Check Interrupt Polarity */
 
@@ -356,7 +338,7 @@ acpi_rs_extended_irq_resource (
        /* Must have at least one IRQ */
 
        if (temp8 < 1) {
-               return_ACPI_STATUS (AE_AML_BAD_RESOURCE_LENGTH);
+               return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH);
        }
 
        output_struct->data.extended_irq.number_of_interrupts = temp8;
@@ -374,8 +356,8 @@ acpi_rs_extended_irq_resource (
        /* Cycle through every IRQ in the table */
 
        for (index = 0; index < temp8; index++) {
-               ACPI_MOVE_32_TO_32 (
-                       &output_struct->data.extended_irq.interrupts[index], buffer);
+               ACPI_MOVE_32_TO_32(&output_struct->data.extended_irq.
+                                  interrupts[index], buffer);
 
                /* Point to the next IRQ */
 
@@ -393,12 +375,13 @@ acpi_rs_extended_irq_resource (
         * we add 1 to the length.
         */
        if (*bytes_consumed >
-               ((acpi_size) output_struct->data.extended_irq.number_of_interrupts * 4) +
-               (5 + 1)) {
+           ((acpi_size) output_struct->data.extended_irq.number_of_interrupts *
+            4) + (5 + 1)) {
                /* Dereference the Index */
 
                temp8 = *buffer;
-               output_struct->data.extended_irq.resource_source.index = (u32) temp8;
+               output_struct->data.extended_irq.resource_source.index =
+                   (u32) temp8;
 
                /* Point to the String */
 
@@ -407,15 +390,15 @@ acpi_rs_extended_irq_resource (
                /* Point the String pointer to the end of this structure. */
 
                output_struct->data.extended_irq.resource_source.string_ptr =
-                               (char *)((char *) output_struct + struct_size);
+                   (char *)((char *)output_struct + struct_size);
 
                temp_ptr = (u8 *)
-                       output_struct->data.extended_irq.resource_source.string_ptr;
+                   output_struct->data.extended_irq.resource_source.string_ptr;
 
                /* Copy the string into the buffer */
 
                index = 0;
-               while (0x00 != *buffer) {
+               while (*buffer) {
                        *temp_ptr = *buffer;
 
                        temp_ptr += 1;
@@ -425,8 +408,9 @@ acpi_rs_extended_irq_resource (
 
                /* Add the terminating null */
 
-               *temp_ptr = 0x00;
-               output_struct->data.extended_irq.resource_source.string_length = index + 1;
+               *temp_ptr = 0;
+               output_struct->data.extended_irq.resource_source.string_length =
+                   index + 1;
 
                /*
                 * In order for the struct_size to fall on a 32-bit boundary,
@@ -434,12 +418,13 @@ acpi_rs_extended_irq_resource (
                 * struct_size to the next 32-bit boundary.
                 */
                temp8 = (u8) (index + 1);
-               struct_size += ACPI_ROUND_UP_to_32_bITS (temp8);
-       }
-       else {
-               output_struct->data.extended_irq.resource_source.index = 0x00;
-               output_struct->data.extended_irq.resource_source.string_length = 0;
-               output_struct->data.extended_irq.resource_source.string_ptr = NULL;
+               struct_size += ACPI_ROUND_UP_to_32_bITS(temp8);
+       } else {
+               output_struct->data.extended_irq.resource_source.index = 0;
+               output_struct->data.extended_irq.resource_source.string_length =
+                   0;
+               output_struct->data.extended_irq.resource_source.string_ptr =
+                   NULL;
        }
 
        /* Set the Length parameter */
@@ -449,10 +434,9 @@ acpi_rs_extended_irq_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_extended_irq_stream
@@ -470,35 +454,31 @@ acpi_rs_extended_irq_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_extended_irq_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_extended_irq_stream(struct acpi_resource *linked_list,
+                           u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u16                             *length_field;
-       u8                              temp8 = 0;
-       u8                              index;
-       char                            *temp_pointer = NULL;
-
-
-       ACPI_FUNCTION_TRACE ("rs_extended_irq_stream");
+       u8 *buffer = *output_buffer;
+       u16 *length_field;
+       u8 temp8 = 0;
+       u8 index;
 
+       ACPI_FUNCTION_TRACE("rs_extended_irq_stream");
 
-       /* The descriptor field is static */
+       /* Set the Descriptor Type field */
 
-       *buffer = 0x89;
+       *buffer = ACPI_RDESC_TYPE_EXTENDED_XRUPT;
        buffer += 1;
 
-       /* Set a pointer to the Length field - to be filled in later */
+       /* Save a pointer to the Length field - to be filled in later */
 
-       length_field = ACPI_CAST_PTR (u16, buffer);
+       length_field = ACPI_CAST_PTR(u16, buffer);
        buffer += 2;
 
        /* Set the Interrupt vector flags */
 
-       temp8 = (u8)(linked_list->data.extended_irq.producer_consumer & 0x01);
-       temp8 |= ((linked_list->data.extended_irq.shared_exclusive & 0x01) << 3);
+       temp8 = (u8) (linked_list->data.extended_irq.producer_consumer & 0x01);
+       temp8 |=
+           ((linked_list->data.extended_irq.shared_exclusive & 0x01) << 3);
 
        /*
         * Set the Interrupt Mode
@@ -527,43 +507,46 @@ acpi_rs_extended_irq_stream (
        *buffer = temp8;
        buffer += 1;
 
-       for (index = 0; index < linked_list->data.extended_irq.number_of_interrupts;
-                index++) {
-               ACPI_MOVE_32_TO_32 (buffer,
-                                 &linked_list->data.extended_irq.interrupts[index]);
+       for (index = 0;
+            index < linked_list->data.extended_irq.number_of_interrupts;
+            index++) {
+               ACPI_MOVE_32_TO_32(buffer,
+                                  &linked_list->data.extended_irq.
+                                  interrupts[index]);
                buffer += 4;
        }
 
        /* Resource Source Index and Resource Source are optional */
 
        if (0 != linked_list->data.extended_irq.resource_source.string_length) {
-               *buffer = (u8) linked_list->data.extended_irq.resource_source.index;
+               *buffer =
+                   (u8) linked_list->data.extended_irq.resource_source.index;
                buffer += 1;
 
-               temp_pointer = (char *) buffer;
-
                /* Copy the string */
 
-               ACPI_STRCPY (temp_pointer,
-                       linked_list->data.extended_irq.resource_source.string_ptr);
+               ACPI_STRCPY((char *)buffer,
+                           linked_list->data.extended_irq.resource_source.
+                           string_ptr);
 
                /*
-                * Buffer needs to be set to the length of the sting + one for the
+                * Buffer needs to be set to the length of the string + one for the
                 * terminating null
                 */
-               buffer += (acpi_size) (ACPI_STRLEN (
-                       linked_list->data.extended_irq.resource_source.string_ptr) + 1);
+               buffer +=
+                   (acpi_size) (ACPI_STRLEN
+                                (linked_list->data.extended_irq.
+                                 resource_source.string_ptr) + 1);
        }
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
 
        /*
         * Set the length field to the number of bytes consumed
         * minus the header size (3 bytes)
         */
        *length_field = (u16) (*bytes_consumed - 3);
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
index db7bcb4e60e32f7e09a1c7625b25b5a387b80e6f..103eb31c284e5070d63fcc99bd111bf1e6c9b606 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acresrc.h>
 
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rslist")
-
+ACPI_MODULE_NAME("rslist")
 
 /*******************************************************************************
  *
  *              a resource descriptor.
  *
  ******************************************************************************/
-
-u8
-acpi_rs_get_resource_type (
-       u8                              resource_start_byte)
+u8 acpi_rs_get_resource_type(u8 resource_start_byte)
 {
 
-       ACPI_FUNCTION_ENTRY ();
-
+       ACPI_FUNCTION_ENTRY();
 
        /* Determine if this is a small or large resource */
 
@@ -79,14 +73,12 @@ acpi_rs_get_resource_type (
 
                return ((u8) (resource_start_byte & ACPI_RDESC_SMALL_MASK));
 
-
        case ACPI_RDESC_TYPE_LARGE:
 
                /* Large Resource Type -- All bits are valid */
 
                return (resource_start_byte);
 
-
        default:
                /* Invalid type */
                break;
@@ -95,7 +87,6 @@ acpi_rs_get_resource_type (
        return (0xFF);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_byte_stream_to_list
@@ -113,176 +104,189 @@ acpi_rs_get_resource_type (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_byte_stream_to_list (
-       u8                              *byte_stream_buffer,
-       u32                             byte_stream_buffer_length,
-       u8                              *output_buffer)
+acpi_rs_byte_stream_to_list(u8 * byte_stream_buffer,
+                           u32 byte_stream_buffer_length, u8 * output_buffer)
 {
-       acpi_status                     status;
-       acpi_size                       bytes_parsed = 0;
-       u8                              resource_type = 0;
-       acpi_size                       bytes_consumed = 0;
-       u8                              *buffer = output_buffer;
-       acpi_size                       structure_size = 0;
-       u8                              end_tag_processed = FALSE;
-       struct acpi_resource            *resource;
-
-       ACPI_FUNCTION_TRACE ("rs_byte_stream_to_list");
-
-
-       while (bytes_parsed < byte_stream_buffer_length &&
-                       !end_tag_processed) {
+       acpi_status status;
+       acpi_size bytes_parsed = 0;
+       u8 resource_type = 0;
+       acpi_size bytes_consumed = 0;
+       u8 *buffer = output_buffer;
+       acpi_size structure_size = 0;
+       u8 end_tag_processed = FALSE;
+       struct acpi_resource *resource;
+
+       ACPI_FUNCTION_TRACE("rs_byte_stream_to_list");
+
+       while (bytes_parsed < byte_stream_buffer_length && !end_tag_processed) {
                /* The next byte in the stream is the resource type */
 
-               resource_type = acpi_rs_get_resource_type (*byte_stream_buffer);
+               resource_type = acpi_rs_get_resource_type(*byte_stream_buffer);
 
                switch (resource_type) {
                case ACPI_RDESC_TYPE_MEMORY_24:
                        /*
                         * 24-Bit Memory Resource
                         */
-                       status = acpi_rs_memory24_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_memory24_resource(byte_stream_buffer,
+                                                          &bytes_consumed,
+                                                          &buffer,
+                                                          &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_LARGE_VENDOR:
                        /*
                         * Vendor Defined Resource
                         */
-                       status = acpi_rs_vendor_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_vendor_resource(byte_stream_buffer,
+                                                        &bytes_consumed,
+                                                        &buffer,
+                                                        &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_MEMORY_32:
                        /*
                         * 32-Bit Memory Range Resource
                         */
-                       status = acpi_rs_memory32_range_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status =
+                           acpi_rs_memory32_range_resource(byte_stream_buffer,
+                                                           &bytes_consumed,
+                                                           &buffer,
+                                                           &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_FIXED_MEMORY_32:
                        /*
                         * 32-Bit Fixed Memory Resource
                         */
-                       status = acpi_rs_fixed_memory32_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status =
+                           acpi_rs_fixed_memory32_resource(byte_stream_buffer,
+                                                           &bytes_consumed,
+                                                           &buffer,
+                                                           &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE:
                case ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE:
                        /*
                         * 64-Bit Address Resource
                         */
-                       status = acpi_rs_address64_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_address64_resource(byte_stream_buffer,
+                                                           &bytes_consumed,
+                                                           &buffer,
+                                                           &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE:
                        /*
                         * 32-Bit Address Resource
                         */
-                       status = acpi_rs_address32_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_address32_resource(byte_stream_buffer,
+                                                           &bytes_consumed,
+                                                           &buffer,
+                                                           &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE:
                        /*
                         * 16-Bit Address Resource
                         */
-                       status = acpi_rs_address16_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_address16_resource(byte_stream_buffer,
+                                                           &bytes_consumed,
+                                                           &buffer,
+                                                           &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_EXTENDED_XRUPT:
                        /*
                         * Extended IRQ
                         */
-                       status = acpi_rs_extended_irq_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status =
+                           acpi_rs_extended_irq_resource(byte_stream_buffer,
+                                                         &bytes_consumed,
+                                                         &buffer,
+                                                         &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_IRQ_FORMAT:
                        /*
                         * IRQ Resource
                         */
-                       status = acpi_rs_irq_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_irq_resource(byte_stream_buffer,
+                                                     &bytes_consumed, &buffer,
+                                                     &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_DMA_FORMAT:
                        /*
                         * DMA Resource
                         */
-                       status = acpi_rs_dma_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_dma_resource(byte_stream_buffer,
+                                                     &bytes_consumed, &buffer,
+                                                     &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_START_DEPENDENT:
                        /*
                         * Start Dependent Functions Resource
                         */
-                       status = acpi_rs_start_depend_fns_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status =
+                           acpi_rs_start_depend_fns_resource
+                           (byte_stream_buffer, &bytes_consumed, &buffer,
+                            &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_END_DEPENDENT:
                        /*
                         * End Dependent Functions Resource
                         */
-                       status = acpi_rs_end_depend_fns_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status =
+                           acpi_rs_end_depend_fns_resource(byte_stream_buffer,
+                                                           &bytes_consumed,
+                                                           &buffer,
+                                                           &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_IO_PORT:
                        /*
                         * IO Port Resource
                         */
-                       status = acpi_rs_io_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_io_resource(byte_stream_buffer,
+                                                    &bytes_consumed, &buffer,
+                                                    &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_FIXED_IO_PORT:
                        /*
                         * Fixed IO Port Resource
                         */
-                       status = acpi_rs_fixed_io_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_fixed_io_resource(byte_stream_buffer,
+                                                          &bytes_consumed,
+                                                          &buffer,
+                                                          &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_SMALL_VENDOR:
                        /*
                         * Vendor Specific Resource
                         */
-                       status = acpi_rs_vendor_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_vendor_resource(byte_stream_buffer,
+                                                        &bytes_consumed,
+                                                        &buffer,
+                                                        &structure_size);
                        break;
 
-
                case ACPI_RDESC_TYPE_END_TAG:
                        /*
                         * End Tag
                         */
                        end_tag_processed = TRUE;
-                       status = acpi_rs_end_tag_resource (byte_stream_buffer,
-                                        &bytes_consumed, &buffer, &structure_size);
+                       status = acpi_rs_end_tag_resource(byte_stream_buffer,
+                                                         &bytes_consumed,
+                                                         &buffer,
+                                                         &structure_size);
                        break;
 
-
                default:
                        /*
                         * Invalid/Unknown resource type
@@ -291,8 +295,8 @@ acpi_rs_byte_stream_to_list (
                        break;
                }
 
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /* Update the return value and counter */
@@ -305,21 +309,21 @@ acpi_rs_byte_stream_to_list (
 
                /* Set the Buffer to the next structure */
 
-               resource = ACPI_CAST_PTR (struct acpi_resource, buffer);
-               resource->length = (u32) ACPI_ALIGN_RESOURCE_SIZE (resource->length);
-               buffer += ACPI_ALIGN_RESOURCE_SIZE (structure_size);
+               resource = ACPI_CAST_PTR(struct acpi_resource, buffer);
+               resource->length =
+                   (u32) ACPI_ALIGN_RESOURCE_SIZE(resource->length);
+               buffer += ACPI_ALIGN_RESOURCE_SIZE(structure_size);
        }
 
        /* Check the reason for exiting the while loop */
 
        if (!end_tag_processed) {
-               return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG);
+               return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_list_to_byte_stream
@@ -342,19 +346,16 @@ acpi_rs_byte_stream_to_list (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_list_to_byte_stream (
-       struct acpi_resource            *linked_list,
-       acpi_size                       byte_stream_size_needed,
-       u8                              *output_buffer)
+acpi_rs_list_to_byte_stream(struct acpi_resource *linked_list,
+                           acpi_size byte_stream_size_needed,
+                           u8 * output_buffer)
 {
-       acpi_status                     status;
-       u8                              *buffer = output_buffer;
-       acpi_size                       bytes_consumed = 0;
-       u8                              done = FALSE;
-
-
-       ACPI_FUNCTION_TRACE ("rs_list_to_byte_stream");
+       acpi_status status;
+       u8 *buffer = output_buffer;
+       acpi_size bytes_consumed = 0;
+       u8 done = FALSE;
 
+       ACPI_FUNCTION_TRACE("rs_list_to_byte_stream");
 
        while (!done) {
                switch (linked_list->id) {
@@ -362,58 +363,72 @@ acpi_rs_list_to_byte_stream (
                        /*
                         * IRQ Resource
                         */
-                       status = acpi_rs_irq_stream (linked_list, &buffer, &bytes_consumed);
+                       status =
+                           acpi_rs_irq_stream(linked_list, &buffer,
+                                              &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_DMA:
                        /*
                         * DMA Resource
                         */
-                       status = acpi_rs_dma_stream (linked_list, &buffer, &bytes_consumed);
+                       status =
+                           acpi_rs_dma_stream(linked_list, &buffer,
+                                              &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_START_DPF:
                        /*
                         * Start Dependent Functions Resource
                         */
-                       status = acpi_rs_start_depend_fns_stream (linked_list,
-                                         &buffer, &bytes_consumed);
+                       status = acpi_rs_start_depend_fns_stream(linked_list,
+                                                                &buffer,
+                                                                &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_END_DPF:
                        /*
                         * End Dependent Functions Resource
                         */
-                       status = acpi_rs_end_depend_fns_stream (linked_list,
-                                         &buffer, &bytes_consumed);
+                       status = acpi_rs_end_depend_fns_stream(linked_list,
+                                                              &buffer,
+                                                              &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_IO:
                        /*
                         * IO Port Resource
                         */
-                       status = acpi_rs_io_stream (linked_list, &buffer, &bytes_consumed);
+                       status =
+                           acpi_rs_io_stream(linked_list, &buffer,
+                                             &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_FIXED_IO:
                        /*
                         * Fixed IO Port Resource
                         */
-                       status = acpi_rs_fixed_io_stream (linked_list, &buffer, &bytes_consumed);
+                       status =
+                           acpi_rs_fixed_io_stream(linked_list, &buffer,
+                                                   &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_VENDOR:
                        /*
                         * Vendor Defined Resource
                         */
-                       status = acpi_rs_vendor_stream (linked_list, &buffer, &bytes_consumed);
+                       status =
+                           acpi_rs_vendor_stream(linked_list, &buffer,
+                                                 &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_END_TAG:
                        /*
                         * End Tag
                         */
-                       status = acpi_rs_end_tag_stream (linked_list, &buffer, &bytes_consumed);
+                       status =
+                           acpi_rs_end_tag_stream(linked_list, &buffer,
+                                                  &bytes_consumed);
 
                        /* An End Tag indicates the end of the Resource Template */
 
@@ -424,55 +439,60 @@ acpi_rs_list_to_byte_stream (
                        /*
                         * 24-Bit Memory Resource
                         */
-                       status = acpi_rs_memory24_stream (linked_list, &buffer, &bytes_consumed);
+                       status =
+                           acpi_rs_memory24_stream(linked_list, &buffer,
+                                                   &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_MEM32:
                        /*
                         * 32-Bit Memory Range Resource
                         */
-                       status = acpi_rs_memory32_range_stream (linked_list, &buffer,
-                                        &bytes_consumed);
+                       status =
+                           acpi_rs_memory32_range_stream(linked_list, &buffer,
+                                                         &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_FIXED_MEM32:
                        /*
                         * 32-Bit Fixed Memory Resource
                         */
-                       status = acpi_rs_fixed_memory32_stream (linked_list, &buffer,
-                                        &bytes_consumed);
+                       status =
+                           acpi_rs_fixed_memory32_stream(linked_list, &buffer,
+                                                         &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_ADDRESS16:
                        /*
                         * 16-Bit Address Descriptor Resource
                         */
-                       status = acpi_rs_address16_stream (linked_list, &buffer,
-                                        &bytes_consumed);
+                       status = acpi_rs_address16_stream(linked_list, &buffer,
+                                                         &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_ADDRESS32:
                        /*
                         * 32-Bit Address Descriptor Resource
                         */
-                       status = acpi_rs_address32_stream (linked_list, &buffer,
-                                        &bytes_consumed);
+                       status = acpi_rs_address32_stream(linked_list, &buffer,
+                                                         &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_ADDRESS64:
                        /*
                         * 64-Bit Address Descriptor Resource
                         */
-                       status = acpi_rs_address64_stream (linked_list, &buffer,
-                                        &bytes_consumed);
+                       status = acpi_rs_address64_stream(linked_list, &buffer,
+                                                         &bytes_consumed);
                        break;
 
                case ACPI_RSTYPE_EXT_IRQ:
                        /*
                         * Extended IRQ Resource
                         */
-                       status = acpi_rs_extended_irq_stream (linked_list, &buffer,
-                                        &bytes_consumed);
+                       status =
+                           acpi_rs_extended_irq_stream(linked_list, &buffer,
+                                                       &bytes_consumed);
                        break;
 
                default:
@@ -480,15 +500,15 @@ acpi_rs_list_to_byte_stream (
                         * If we get here, everything is out of sync,
                         * so exit with an error
                         */
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Invalid descriptor type (%X) in resource list\n",
-                               linked_list->id));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid descriptor type (%X) in resource list\n",
+                                         linked_list->id));
                        status = AE_BAD_DATA;
                        break;
                }
 
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
 
                /* Set the Buffer to point to the open byte */
@@ -497,10 +517,9 @@ acpi_rs_list_to_byte_stream (
 
                /* Point to the next object */
 
-               linked_list = ACPI_PTR_ADD (struct acpi_resource,
-                                 linked_list, linked_list->length);
+               linked_list = ACPI_PTR_ADD(struct acpi_resource,
+                                          linked_list, linked_list->length);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
index 91d0207f01ac76dd204fa3f6efe38a1fdb272c86..daba1a1ed46db522d747241567db8685e385e497 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acresrc.h>
 
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rsmemory")
-
+ACPI_MODULE_NAME("rsmemory")
 
 /*******************************************************************************
  *
  *              number of bytes consumed from the byte stream.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_rs_memory24_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_memory24_resource(u8 * byte_stream_buffer,
+                         acpi_size * bytes_consumed,
+                         u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_mem24);
-
-
-       ACPI_FUNCTION_TRACE ("rs_memory24_resource");
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       acpi_size struct_size =
+           ACPI_SIZEOF_RESOURCE(struct acpi_resource_mem24);
 
+       ACPI_FUNCTION_TRACE("rs_memory24_resource");
 
        /* Point past the Descriptor to get the number of bytes consumed */
 
        buffer += 1;
 
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
        buffer += 2;
        *bytes_consumed = (acpi_size) temp16 + 3;
        output_struct->id = ACPI_RSTYPE_MEM24;
@@ -105,25 +98,25 @@ acpi_rs_memory24_resource (
 
        /* Get min_base_address (Bytes 4-5) */
 
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
        buffer += 2;
        output_struct->data.memory24.min_base_address = temp16;
 
        /* Get max_base_address (Bytes 6-7) */
 
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
        buffer += 2;
        output_struct->data.memory24.max_base_address = temp16;
 
        /* Get Alignment (Bytes 8-9) */
 
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
        buffer += 2;
        output_struct->data.memory24.alignment = temp16;
 
        /* Get range_length (Bytes 10-11) */
 
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
        output_struct->data.memory24.range_length = temp16;
 
        /* Set the Length parameter */
@@ -133,10 +126,9 @@ acpi_rs_memory24_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_memory24_stream
@@ -154,18 +146,14 @@ acpi_rs_memory24_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_memory24_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_memory24_stream(struct acpi_resource *linked_list,
+                       u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-
-
-       ACPI_FUNCTION_TRACE ("rs_memory24_stream");
+       u8 *buffer = *output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
 
+       ACPI_FUNCTION_TRACE("rs_memory24_stream");
 
        /* The descriptor field is static */
 
@@ -175,7 +163,7 @@ acpi_rs_memory24_stream (
        /* The length field is static */
 
        temp16 = 0x09;
-       ACPI_MOVE_16_TO_16 (buffer, &temp16);
+       ACPI_MOVE_16_TO_16(buffer, &temp16);
        buffer += 2;
 
        /* Set the Information Byte */
@@ -186,31 +174,32 @@ acpi_rs_memory24_stream (
 
        /* Set the Range minimum base address */
 
-       ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.memory24.min_base_address);
+       ACPI_MOVE_32_TO_16(buffer,
+                          &linked_list->data.memory24.min_base_address);
        buffer += 2;
 
        /* Set the Range maximum base address */
 
-       ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.memory24.max_base_address);
+       ACPI_MOVE_32_TO_16(buffer,
+                          &linked_list->data.memory24.max_base_address);
        buffer += 2;
 
        /* Set the base alignment */
 
-       ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.memory24.alignment);
+       ACPI_MOVE_32_TO_16(buffer, &linked_list->data.memory24.alignment);
        buffer += 2;
 
        /* Set the range length */
 
-       ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.memory24.range_length);
+       ACPI_MOVE_32_TO_16(buffer, &linked_list->data.memory24.range_length);
        buffer += 2;
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_memory32_range_resource
@@ -233,28 +222,24 @@ acpi_rs_memory24_stream (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_memory32_range_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_memory32_range_resource(u8 * byte_stream_buffer,
+                               acpi_size * bytes_consumed,
+                               u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_mem32);
-
-
-       ACPI_FUNCTION_TRACE ("rs_memory32_range_resource");
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       acpi_size struct_size =
+           ACPI_SIZEOF_RESOURCE(struct acpi_resource_mem32);
 
+       ACPI_FUNCTION_TRACE("rs_memory32_range_resource");
 
        /* Point past the Descriptor to get the number of bytes consumed */
 
        buffer += 1;
 
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
        buffer += 2;
        *bytes_consumed = (acpi_size) temp16 + 3;
 
@@ -279,22 +264,24 @@ acpi_rs_memory32_range_resource (
 
        /* Get min_base_address (Bytes 4-7) */
 
-       ACPI_MOVE_32_TO_32 (&output_struct->data.memory32.min_base_address, buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.memory32.min_base_address,
+                          buffer);
        buffer += 4;
 
        /* Get max_base_address (Bytes 8-11) */
 
-       ACPI_MOVE_32_TO_32 (&output_struct->data.memory32.max_base_address, buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.memory32.max_base_address,
+                          buffer);
        buffer += 4;
 
        /* Get Alignment (Bytes 12-15) */
 
-       ACPI_MOVE_32_TO_32 (&output_struct->data.memory32.alignment, buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.memory32.alignment, buffer);
        buffer += 4;
 
        /* Get range_length (Bytes 16-19) */
 
-       ACPI_MOVE_32_TO_32 (&output_struct->data.memory32.range_length, buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.memory32.range_length, buffer);
 
        /* Set the Length parameter */
 
@@ -303,10 +290,9 @@ acpi_rs_memory32_range_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_fixed_memory32_resource
@@ -329,27 +315,23 @@ acpi_rs_memory32_range_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_fixed_memory32_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_fixed_memory32_resource(u8 * byte_stream_buffer,
+                               acpi_size * bytes_consumed,
+                               u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_fixed_mem32);
-
-
-       ACPI_FUNCTION_TRACE ("rs_fixed_memory32_resource");
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       acpi_size struct_size =
+           ACPI_SIZEOF_RESOURCE(struct acpi_resource_fixed_mem32);
 
+       ACPI_FUNCTION_TRACE("rs_fixed_memory32_resource");
 
        /* Point past the Descriptor to get the number of bytes consumed */
 
        buffer += 1;
-       ACPI_MOVE_16_TO_16 (&temp16, buffer);
+       ACPI_MOVE_16_TO_16(&temp16, buffer);
 
        buffer += 2;
        *bytes_consumed = (acpi_size) temp16 + 3;
@@ -364,13 +346,14 @@ acpi_rs_fixed_memory32_resource (
 
        /* Get range_base_address (Bytes 4-7) */
 
-       ACPI_MOVE_32_TO_32 (&output_struct->data.fixed_memory32.range_base_address,
-               buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.fixed_memory32.
+                          range_base_address, buffer);
        buffer += 4;
 
        /* Get range_length (Bytes 8-11) */
 
-       ACPI_MOVE_32_TO_32 (&output_struct->data.fixed_memory32.range_length, buffer);
+       ACPI_MOVE_32_TO_32(&output_struct->data.fixed_memory32.range_length,
+                          buffer);
 
        /* Set the Length parameter */
 
@@ -379,10 +362,9 @@ acpi_rs_fixed_memory32_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_memory32_range_stream
@@ -400,18 +382,14 @@ acpi_rs_fixed_memory32_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_memory32_range_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_memory32_range_stream(struct acpi_resource *linked_list,
+                             u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-
-
-       ACPI_FUNCTION_TRACE ("rs_memory32_range_stream");
+       u8 *buffer = *output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
 
+       ACPI_FUNCTION_TRACE("rs_memory32_range_stream");
 
        /* The descriptor field is static */
 
@@ -422,7 +400,7 @@ acpi_rs_memory32_range_stream (
 
        temp16 = 0x11;
 
-       ACPI_MOVE_16_TO_16 (buffer, &temp16);
+       ACPI_MOVE_16_TO_16(buffer, &temp16);
        buffer += 2;
 
        /* Set the Information Byte */
@@ -433,31 +411,32 @@ acpi_rs_memory32_range_stream (
 
        /* Set the Range minimum base address */
 
-       ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.memory32.min_base_address);
+       ACPI_MOVE_32_TO_32(buffer,
+                          &linked_list->data.memory32.min_base_address);
        buffer += 4;
 
        /* Set the Range maximum base address */
 
-       ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.memory32.max_base_address);
+       ACPI_MOVE_32_TO_32(buffer,
+                          &linked_list->data.memory32.max_base_address);
        buffer += 4;
 
        /* Set the base alignment */
 
-       ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.memory32.alignment);
+       ACPI_MOVE_32_TO_32(buffer, &linked_list->data.memory32.alignment);
        buffer += 4;
 
        /* Set the range length */
 
-       ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.memory32.range_length);
+       ACPI_MOVE_32_TO_32(buffer, &linked_list->data.memory32.range_length);
        buffer += 4;
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_fixed_memory32_stream
@@ -475,18 +454,14 @@ acpi_rs_memory32_range_stream (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_fixed_memory32_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_fixed_memory32_stream(struct acpi_resource *linked_list,
+                             u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-
-
-       ACPI_FUNCTION_TRACE ("rs_fixed_memory32_stream");
+       u8 *buffer = *output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
 
+       ACPI_FUNCTION_TRACE("rs_fixed_memory32_stream");
 
        /* The descriptor field is static */
 
@@ -497,30 +472,31 @@ acpi_rs_fixed_memory32_stream (
 
        temp16 = 0x09;
 
-       ACPI_MOVE_16_TO_16 (buffer, &temp16);
+       ACPI_MOVE_16_TO_16(buffer, &temp16);
        buffer += 2;
 
        /* Set the Information Byte */
 
-       temp8 = (u8) (linked_list->data.fixed_memory32.read_write_attribute & 0x01);
+       temp8 =
+           (u8) (linked_list->data.fixed_memory32.read_write_attribute & 0x01);
        *buffer = temp8;
        buffer += 1;
 
        /* Set the Range base address */
 
-       ACPI_MOVE_32_TO_32 (buffer,
-               &linked_list->data.fixed_memory32.range_base_address);
+       ACPI_MOVE_32_TO_32(buffer,
+                          &linked_list->data.fixed_memory32.
+                          range_base_address);
        buffer += 4;
 
        /* Set the range length */
 
-       ACPI_MOVE_32_TO_32 (buffer,
-               &linked_list->data.fixed_memory32.range_length);
+       ACPI_MOVE_32_TO_32(buffer,
+                          &linked_list->data.fixed_memory32.range_length);
        buffer += 4;
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
-
index a1f1741f0d83cb336a38c331b451774153d1e8d8..7a8a34e757f506a2c4d758b206bec6458b7c54bc 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acresrc.h>
 
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rsmisc")
-
+ACPI_MODULE_NAME("rsmisc")
 
 /*******************************************************************************
  *
  *              number of bytes consumed from the byte stream.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_rs_end_tag_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_end_tag_resource(u8 * byte_stream_buffer,
+                        acpi_size * bytes_consumed,
+                        u8 ** output_buffer, acpi_size * structure_size)
 {
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       acpi_size                       struct_size = ACPI_RESOURCE_LENGTH;
-
-
-       ACPI_FUNCTION_TRACE ("rs_end_tag_resource");
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       acpi_size struct_size = ACPI_RESOURCE_LENGTH;
 
+       ACPI_FUNCTION_TRACE("rs_end_tag_resource");
 
        /* The number of bytes consumed is static */
 
@@ -99,10 +92,9 @@ acpi_rs_end_tag_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_end_tag_stream
@@ -120,17 +112,13 @@ acpi_rs_end_tag_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_end_tag_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_end_tag_stream(struct acpi_resource *linked_list,
+                      u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u8                              temp8 = 0;
-
-
-       ACPI_FUNCTION_TRACE ("rs_end_tag_stream");
+       u8 *buffer = *output_buffer;
+       u8 temp8 = 0;
 
+       ACPI_FUNCTION_TRACE("rs_end_tag_stream");
 
        /* The descriptor field is static */
 
@@ -148,11 +136,10 @@ acpi_rs_end_tag_stream (
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_vendor_resource
@@ -175,23 +162,19 @@ acpi_rs_end_tag_stream (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_vendor_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_vendor_resource(u8 * byte_stream_buffer,
+                       acpi_size * bytes_consumed,
+                       u8 ** output_buffer, acpi_size * structure_size)
 {
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       u8                              index;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_vendor);
-
-
-       ACPI_FUNCTION_TRACE ("rs_vendor_resource");
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       u8 index;
+       acpi_size struct_size =
+           ACPI_SIZEOF_RESOURCE(struct acpi_resource_vendor);
 
+       ACPI_FUNCTION_TRACE("rs_vendor_resource");
 
        /* Dereference the Descriptor to find if this is a large or small item. */
 
@@ -204,7 +187,7 @@ acpi_rs_vendor_resource (
 
                /* Dereference */
 
-               ACPI_MOVE_16_TO_16 (&temp16, buffer);
+               ACPI_MOVE_16_TO_16(&temp16, buffer);
 
                /* Calculate bytes consumed */
 
@@ -213,11 +196,10 @@ acpi_rs_vendor_resource (
                /* Point to the first vendor byte */
 
                buffer += 2;
-       }
-       else {
+       } else {
                /* Small Item, dereference the size */
 
-               temp16 = (u8)(*buffer & 0x07);
+               temp16 = (u8) (*buffer & 0x07);
 
                /* Calculate bytes consumed */
 
@@ -241,7 +223,7 @@ acpi_rs_vendor_resource (
         * calculate the length of the vendor string and expand the
         * struct_size to the next 32-bit boundary.
         */
-       struct_size += ACPI_ROUND_UP_to_32_bITS (temp16);
+       struct_size += ACPI_ROUND_UP_to_32_bITS(temp16);
 
        /* Set the Length parameter */
 
@@ -250,10 +232,9 @@ acpi_rs_vendor_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_vendor_stream
@@ -271,23 +252,19 @@ acpi_rs_vendor_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_vendor_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_vendor_stream(struct acpi_resource *linked_list,
+                     u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u16                             temp16 = 0;
-       u8                              temp8 = 0;
-       u8                              index;
-
-
-       ACPI_FUNCTION_TRACE ("rs_vendor_stream");
+       u8 *buffer = *output_buffer;
+       u16 temp16 = 0;
+       u8 temp8 = 0;
+       u8 index;
 
+       ACPI_FUNCTION_TRACE("rs_vendor_stream");
 
        /* Dereference the length to find if this is a large or small item. */
 
-       if(linked_list->data.vendor_specific.length > 7) {
+       if (linked_list->data.vendor_specific.length > 7) {
                /* Large Item, Set the descriptor field and length bytes */
 
                *buffer = 0x84;
@@ -295,10 +272,9 @@ acpi_rs_vendor_stream (
 
                temp16 = (u16) linked_list->data.vendor_specific.length;
 
-               ACPI_MOVE_16_TO_16 (buffer, &temp16);
+               ACPI_MOVE_16_TO_16(buffer, &temp16);
                buffer += 2;
-       }
-       else {
+       } else {
                /* Small Item, Set the descriptor field */
 
                temp8 = 0x70;
@@ -310,7 +286,8 @@ acpi_rs_vendor_stream (
 
        /* Loop through all of the Vendor Specific fields */
 
-       for (index = 0; index < linked_list->data.vendor_specific.length; index++) {
+       for (index = 0; index < linked_list->data.vendor_specific.length;
+            index++) {
                temp8 = linked_list->data.vendor_specific.reserved[index];
 
                *buffer = temp8;
@@ -319,11 +296,10 @@ acpi_rs_vendor_stream (
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_start_depend_fns_resource
@@ -346,21 +322,18 @@ acpi_rs_vendor_stream (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_start_depend_fns_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_start_depend_fns_resource(u8 * byte_stream_buffer,
+                                 acpi_size * bytes_consumed,
+                                 u8 ** output_buffer,
+                                 acpi_size * structure_size)
 {
-       u8                              *buffer = byte_stream_buffer;
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       u8                              temp8 = 0;
-       acpi_size                       struct_size = ACPI_SIZEOF_RESOURCE (
-                         struct acpi_resource_start_dpf);
-
-
-       ACPI_FUNCTION_TRACE ("rs_start_depend_fns_resource");
+       u8 *buffer = byte_stream_buffer;
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       u8 temp8 = 0;
+       acpi_size struct_size =
+           ACPI_SIZEOF_RESOURCE(struct acpi_resource_start_dpf);
 
+       ACPI_FUNCTION_TRACE("rs_start_depend_fns_resource");
 
        /* The number of bytes consumed are found in the descriptor (Bits:0-1) */
 
@@ -378,26 +351,27 @@ acpi_rs_start_depend_fns_resource (
 
                /* Check Compatibility priority */
 
-               output_struct->data.start_dpf.compatibility_priority = temp8 & 0x03;
+               output_struct->data.start_dpf.compatibility_priority =
+                   temp8 & 0x03;
 
                if (3 == output_struct->data.start_dpf.compatibility_priority) {
-                       return_ACPI_STATUS (AE_AML_BAD_RESOURCE_VALUE);
+                       return_ACPI_STATUS(AE_AML_BAD_RESOURCE_VALUE);
                }
 
                /* Check Performance/Robustness preference */
 
-               output_struct->data.start_dpf.performance_robustness = (temp8 >> 2) & 0x03;
+               output_struct->data.start_dpf.performance_robustness =
+                   (temp8 >> 2) & 0x03;
 
                if (3 == output_struct->data.start_dpf.performance_robustness) {
-                       return_ACPI_STATUS (AE_AML_BAD_RESOURCE_VALUE);
+                       return_ACPI_STATUS(AE_AML_BAD_RESOURCE_VALUE);
                }
-       }
-       else {
+       } else {
                output_struct->data.start_dpf.compatibility_priority =
-                       ACPI_ACCEPTABLE_CONFIGURATION;
+                   ACPI_ACCEPTABLE_CONFIGURATION;
 
                output_struct->data.start_dpf.performance_robustness =
-                       ACPI_ACCEPTABLE_CONFIGURATION;
+                   ACPI_ACCEPTABLE_CONFIGURATION;
        }
 
        /* Set the Length parameter */
@@ -407,10 +381,9 @@ acpi_rs_start_depend_fns_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_end_depend_fns_resource
@@ -433,18 +406,14 @@ acpi_rs_start_depend_fns_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_end_depend_fns_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size)
+acpi_rs_end_depend_fns_resource(u8 * byte_stream_buffer,
+                               acpi_size * bytes_consumed,
+                               u8 ** output_buffer, acpi_size * structure_size)
 {
-       struct acpi_resource            *output_struct = (void *) *output_buffer;
-       acpi_size                       struct_size = ACPI_RESOURCE_LENGTH;
-
-
-       ACPI_FUNCTION_TRACE ("rs_end_depend_fns_resource");
+       struct acpi_resource *output_struct = (void *)*output_buffer;
+       acpi_size struct_size = ACPI_RESOURCE_LENGTH;
 
+       ACPI_FUNCTION_TRACE("rs_end_depend_fns_resource");
 
        /* The number of bytes consumed is static */
 
@@ -461,10 +430,9 @@ acpi_rs_end_depend_fns_resource (
        /* Return the final size of the structure */
 
        *structure_size = struct_size;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_start_depend_fns_stream
@@ -483,39 +451,35 @@ acpi_rs_end_depend_fns_resource (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_start_depend_fns_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_start_depend_fns_stream(struct acpi_resource *linked_list,
+                               u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-       u8                              temp8 = 0;
-
-
-       ACPI_FUNCTION_TRACE ("rs_start_depend_fns_stream");
+       u8 *buffer = *output_buffer;
+       u8 temp8 = 0;
 
+       ACPI_FUNCTION_TRACE("rs_start_depend_fns_stream");
 
        /*
         * The descriptor field is set based upon whether a byte is needed
         * to contain Priority data.
         */
        if (ACPI_ACCEPTABLE_CONFIGURATION ==
-                       linked_list->data.start_dpf.compatibility_priority &&
-               ACPI_ACCEPTABLE_CONFIGURATION ==
-                       linked_list->data.start_dpf.performance_robustness) {
+           linked_list->data.start_dpf.compatibility_priority &&
+           ACPI_ACCEPTABLE_CONFIGURATION ==
+           linked_list->data.start_dpf.performance_robustness) {
                *buffer = 0x30;
-       }
-       else {
+       } else {
                *buffer = 0x31;
                buffer += 1;
 
                /* Set the Priority Byte Definition */
 
                temp8 = 0;
-               temp8 = (u8) ((linked_list->data.start_dpf.performance_robustness &
-                                  0x03) << 2);
-               temp8 |= (linked_list->data.start_dpf.compatibility_priority &
-                                  0x03);
+               temp8 =
+                   (u8) ((linked_list->data.start_dpf.
+                          performance_robustness & 0x03) << 2);
+               temp8 |=
+                   (linked_list->data.start_dpf.compatibility_priority & 0x03);
                *buffer = temp8;
        }
 
@@ -523,11 +487,10 @@ acpi_rs_start_depend_fns_stream (
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_end_depend_fns_stream
@@ -545,16 +508,12 @@ acpi_rs_start_depend_fns_stream (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_end_depend_fns_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed)
+acpi_rs_end_depend_fns_stream(struct acpi_resource *linked_list,
+                             u8 ** output_buffer, acpi_size * bytes_consumed)
 {
-       u8                              *buffer = *output_buffer;
-
-
-       ACPI_FUNCTION_TRACE ("rs_end_depend_fns_stream");
+       u8 *buffer = *output_buffer;
 
+       ACPI_FUNCTION_TRACE("rs_end_depend_fns_stream");
 
        /* The descriptor field is static */
 
@@ -563,7 +522,6 @@ acpi_rs_end_depend_fns_stream (
 
        /* Return the number of bytes consumed in this operation */
 
-       *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer);
-       return_ACPI_STATUS (AE_OK);
+       *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer);
+       return_ACPI_STATUS(AE_OK);
 }
-
index 700cf7d65d76f12b69dc8c6bc15585e8d993b38d..4446778eaf7927df16f9b29a49fb2a6395871086 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acresrc.h>
 
-
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rsutils")
-
+ACPI_MODULE_NAME("rsutils")
 
 /*******************************************************************************
  *
  *              and the contents of the callers buffer is undefined.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_rs_get_prt_method_data (
-       acpi_handle                     handle,
-       struct acpi_buffer              *ret_buffer)
+acpi_rs_get_prt_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("rs_get_prt_method_data");
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("rs_get_prt_method_data");
 
        /* Parameters guaranteed valid by caller */
 
        /* Execute the method, no parameters */
 
-       status = acpi_ut_evaluate_object (handle, METHOD_NAME__PRT,
-                        ACPI_BTYPE_PACKAGE, &obj_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_evaluate_object(handle, METHOD_NAME__PRT,
+                                        ACPI_BTYPE_PACKAGE, &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
         * Create a resource linked list from the byte stream buffer that comes
         * back from the _CRS method execution.
         */
-       status = acpi_rs_create_pci_routing_table (obj_desc, ret_buffer);
+       status = acpi_rs_create_pci_routing_table(obj_desc, ret_buffer);
 
        /* On exit, we must delete the object returned by evaluate_object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_get_crs_method_data
@@ -123,25 +114,21 @@ acpi_rs_get_prt_method_data (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_get_crs_method_data (
-       acpi_handle                     handle,
-       struct acpi_buffer              *ret_buffer)
+acpi_rs_get_crs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("rs_get_crs_method_data");
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("rs_get_crs_method_data");
 
        /* Parameters guaranteed valid by caller */
 
        /* Execute the method, no parameters */
 
-       status = acpi_ut_evaluate_object (handle, METHOD_NAME__CRS,
-                        ACPI_BTYPE_BUFFER, &obj_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_evaluate_object(handle, METHOD_NAME__CRS,
+                                        ACPI_BTYPE_BUFFER, &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -149,15 +136,14 @@ acpi_rs_get_crs_method_data (
         * byte stream buffer that comes back from the _CRS method
         * execution.
         */
-       status = acpi_rs_create_resource_list (obj_desc, ret_buffer);
+       status = acpi_rs_create_resource_list(obj_desc, ret_buffer);
 
        /* on exit, we must delete the object returned by evaluate_object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_rs_get_prs_method_data
@@ -178,25 +164,21 @@ acpi_rs_get_crs_method_data (
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_rs_get_prs_method_data (
-       acpi_handle                     handle,
-       struct acpi_buffer              *ret_buffer)
+acpi_rs_get_prs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("rs_get_prs_method_data");
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("rs_get_prs_method_data");
 
        /* Parameters guaranteed valid by caller */
 
        /* Execute the method, no parameters */
 
-       status = acpi_ut_evaluate_object (handle, METHOD_NAME__PRS,
-                        ACPI_BTYPE_BUFFER, &obj_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_evaluate_object(handle, METHOD_NAME__PRS,
+                                        ACPI_BTYPE_BUFFER, &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -204,15 +186,14 @@ acpi_rs_get_prs_method_data (
         * byte stream buffer that comes back from the _CRS method
         * execution.
         */
-       status = acpi_rs_create_resource_list (obj_desc, ret_buffer);
+       status = acpi_rs_create_resource_list(obj_desc, ret_buffer);
 
        /* on exit, we must delete the object returned by evaluate_object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
-#endif  /*  ACPI_FUTURE_USAGE  */
-
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*******************************************************************************
  *
@@ -234,25 +215,22 @@ acpi_rs_get_prs_method_data (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_get_method_data (
-       acpi_handle                     handle,
-       char                            *path,
-       struct acpi_buffer              *ret_buffer)
+acpi_rs_get_method_data(acpi_handle handle,
+                       char *path, struct acpi_buffer *ret_buffer)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("rs_get_method_data");
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("rs_get_method_data");
 
        /* Parameters guaranteed valid by caller */
 
        /* Execute the method, no parameters */
 
-       status = acpi_ut_evaluate_object (handle, path, ACPI_BTYPE_BUFFER, &obj_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ut_evaluate_object(handle, path, ACPI_BTYPE_BUFFER, &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -260,12 +238,12 @@ acpi_rs_get_method_data (
         * byte stream buffer that comes back from the method
         * execution.
         */
-       status = acpi_rs_create_resource_list (obj_desc, ret_buffer);
+       status = acpi_rs_create_resource_list(obj_desc, ret_buffer);
 
        /* On exit, we must delete the object returned by evaluate_object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
 /*******************************************************************************
@@ -287,18 +265,14 @@ acpi_rs_get_method_data (
  ******************************************************************************/
 
 acpi_status
-acpi_rs_set_srs_method_data (
-       acpi_handle                     handle,
-       struct acpi_buffer              *in_buffer)
+acpi_rs_set_srs_method_data(acpi_handle handle, struct acpi_buffer *in_buffer)
 {
-       struct acpi_parameter_info      info;
-       union acpi_operand_object       *params[2];
-       acpi_status                     status;
-       struct acpi_buffer              buffer;
-
-
-       ACPI_FUNCTION_TRACE ("rs_set_srs_method_data");
+       struct acpi_parameter_info info;
+       union acpi_operand_object *params[2];
+       acpi_status status;
+       struct acpi_buffer buffer;
 
+       ACPI_FUNCTION_TRACE("rs_set_srs_method_data");
 
        /* Parameters guaranteed valid by caller */
 
@@ -310,24 +284,24 @@ acpi_rs_set_srs_method_data (
         * Convert the linked list into a byte stream
         */
        buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
-       status = acpi_rs_create_byte_stream (in_buffer->pointer, &buffer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_rs_create_byte_stream(in_buffer->pointer, &buffer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Init the param object */
 
-       params[0] = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER);
+       params[0] = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER);
        if (!params[0]) {
-               acpi_os_free (buffer.pointer);
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               acpi_os_free(buffer.pointer);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Set up the parameter object */
 
-       params[0]->buffer.length  = (u32) buffer.length;
+       params[0]->buffer.length = (u32) buffer.length;
        params[0]->buffer.pointer = buffer.pointer;
-       params[0]->common.flags   = AOPOBJ_DATA_VALID;
+       params[0]->common.flags = AOPOBJ_DATA_VALID;
        params[1] = NULL;
 
        info.node = handle;
@@ -336,18 +310,17 @@ acpi_rs_set_srs_method_data (
 
        /* Execute the method, no return value */
 
-       status = acpi_ns_evaluate_relative (METHOD_NAME__SRS, &info);
-       if (ACPI_SUCCESS (status)) {
+       status = acpi_ns_evaluate_relative(METHOD_NAME__SRS, &info);
+       if (ACPI_SUCCESS(status)) {
                /* Delete any return object (especially if implicit_return is enabled) */
 
                if (info.return_object) {
-                       acpi_ut_remove_reference (info.return_object);
+                       acpi_ut_remove_reference(info.return_object);
                }
        }
 
        /* Clean up and return the status from acpi_ns_evaluate_relative */
 
-       acpi_ut_remove_reference (params[0]);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(params[0]);
+       return_ACPI_STATUS(status);
 }
-
index 83c944b8b097477a113356f2c8d02011fdb9ecc9..ee5a5c509199a59785b9ecb853f4eaf4eeb9b0dc 100644 (file)
 #include <acpi/acresrc.h>
 
 #define _COMPONENT          ACPI_RESOURCES
-        ACPI_MODULE_NAME    ("rsxface")
+ACPI_MODULE_NAME("rsxface")
 
 /* Local macros for 16,32-bit to 64-bit conversion */
-
 #define ACPI_COPY_FIELD(out, in, field)  ((out)->field = (in)->field)
 #define ACPI_COPY_ADDRESS(out, in)                      \
        ACPI_COPY_FIELD(out, in, resource_type);             \
@@ -65,8 +64,6 @@
        ACPI_COPY_FIELD(out, in, address_translation_offset); \
        ACPI_COPY_FIELD(out, in, address_length);            \
        ACPI_COPY_FIELD(out, in, resource_source);
-
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_irq_routing_table
  *              the object indicated by the passed device_handle.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_get_irq_routing_table (
-       acpi_handle                     device_handle,
-       struct acpi_buffer              *ret_buffer)
+acpi_get_irq_routing_table(acpi_handle device_handle,
+                          struct acpi_buffer *ret_buffer)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_irq_routing_table ");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_get_irq_routing_table ");
 
        /*
         * Must have a valid handle and buffer, So we have to have a handle
@@ -108,19 +101,18 @@ acpi_get_irq_routing_table (
         * we'll be returning the needed buffer size, so keep going.
         */
        if (!device_handle) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_validate_buffer (ret_buffer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_validate_buffer(ret_buffer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_rs_get_prt_method_data (device_handle, ret_buffer);
-       return_ACPI_STATUS (status);
+       status = acpi_rs_get_prt_method_data(device_handle, ret_buffer);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_current_resources
@@ -146,15 +138,12 @@ acpi_get_irq_routing_table (
  ******************************************************************************/
 
 acpi_status
-acpi_get_current_resources (
-       acpi_handle                     device_handle,
-       struct acpi_buffer              *ret_buffer)
+acpi_get_current_resources(acpi_handle device_handle,
+                          struct acpi_buffer *ret_buffer)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_current_resources");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_get_current_resources");
 
        /*
         * Must have a valid handle and buffer, So we have to have a handle
@@ -163,19 +152,19 @@ acpi_get_current_resources (
         * we'll be returning the needed buffer size, so keep going.
         */
        if (!device_handle) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_validate_buffer (ret_buffer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_validate_buffer(ret_buffer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_rs_get_crs_method_data (device_handle, ret_buffer);
-       return_ACPI_STATUS (status);
+       status = acpi_rs_get_crs_method_data(device_handle, ret_buffer);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_get_current_resources);
 
+EXPORT_SYMBOL(acpi_get_current_resources);
 
 /*******************************************************************************
  *
@@ -200,15 +189,12 @@ EXPORT_SYMBOL(acpi_get_current_resources);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_get_possible_resources (
-       acpi_handle                     device_handle,
-       struct acpi_buffer              *ret_buffer)
+acpi_get_possible_resources(acpi_handle device_handle,
+                           struct acpi_buffer *ret_buffer)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_possible_resources");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_get_possible_resources");
 
        /*
         * Must have a valid handle and buffer, So we have to have a handle
@@ -217,20 +203,20 @@ acpi_get_possible_resources (
         * we'll be returning the needed buffer size, so keep going.
         */
        if (!device_handle) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_validate_buffer (ret_buffer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_validate_buffer(ret_buffer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_rs_get_prs_method_data (device_handle, ret_buffer);
-       return_ACPI_STATUS (status);
+       status = acpi_rs_get_prs_method_data(device_handle, ret_buffer);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_get_possible_resources);
-#endif  /*  ACPI_FUTURE_USAGE  */
 
+EXPORT_SYMBOL(acpi_get_possible_resources);
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*******************************************************************************
  *
@@ -252,37 +238,33 @@ EXPORT_SYMBOL(acpi_get_possible_resources);
  ******************************************************************************/
 
 acpi_status
-acpi_walk_resources (
-       acpi_handle                             device_handle,
-       char                                    *path,
-       ACPI_WALK_RESOURCE_CALLBACK     user_function,
-       void                                    *context)
+acpi_walk_resources(acpi_handle device_handle,
+                   char *path,
+                   ACPI_WALK_RESOURCE_CALLBACK user_function, void *context)
 {
-       acpi_status                         status;
-       struct acpi_buffer                  buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       struct acpi_resource                *resource;
-       struct acpi_resource                *buffer_end;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_walk_resources");
+       acpi_status status;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       struct acpi_resource *resource;
+       struct acpi_resource *buffer_end;
 
+       ACPI_FUNCTION_TRACE("acpi_walk_resources");
 
        if (!device_handle ||
-               (ACPI_STRNCMP (path, METHOD_NAME__CRS, sizeof (METHOD_NAME__CRS)) &&
-                ACPI_STRNCMP (path, METHOD_NAME__PRS, sizeof (METHOD_NAME__PRS)))) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+           (ACPI_STRNCMP(path, METHOD_NAME__CRS, sizeof(METHOD_NAME__CRS)) &&
+            ACPI_STRNCMP(path, METHOD_NAME__PRS, sizeof(METHOD_NAME__PRS)))) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_rs_get_method_data (device_handle, path, &buffer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_rs_get_method_data(device_handle, path, &buffer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Setup pointers */
 
-       resource  = (struct acpi_resource *) buffer.pointer;
-       buffer_end = ACPI_CAST_PTR (struct acpi_resource,
-                         ((u8 *) buffer.pointer + buffer.length));
+       resource = (struct acpi_resource *)buffer.pointer;
+       buffer_end = ACPI_CAST_PTR(struct acpi_resource,
+                                  ((u8 *) buffer.pointer + buffer.length));
 
        /* Walk the resource list */
 
@@ -291,7 +273,7 @@ acpi_walk_resources (
                        break;
                }
 
-               status = user_function (resource, context);
+               status = user_function(resource, context);
 
                switch (status) {
                case AE_OK:
@@ -318,7 +300,7 @@ acpi_walk_resources (
 
                /* Get the next resource descriptor */
 
-               resource = ACPI_NEXT_RESOURCE (resource);
+               resource = ACPI_NEXT_RESOURCE(resource);
 
                /* Check for end-of-buffer */
 
@@ -327,13 +309,13 @@ acpi_walk_resources (
                }
        }
 
-cleanup:
+      cleanup:
 
-       acpi_os_free (buffer.pointer);
-       return_ACPI_STATUS (status);
+       acpi_os_free(buffer.pointer);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_walk_resources);
 
+EXPORT_SYMBOL(acpi_walk_resources);
 
 /*******************************************************************************
  *
@@ -354,30 +336,25 @@ EXPORT_SYMBOL(acpi_walk_resources);
  ******************************************************************************/
 
 acpi_status
-acpi_set_current_resources (
-       acpi_handle                     device_handle,
-       struct acpi_buffer              *in_buffer)
+acpi_set_current_resources(acpi_handle device_handle,
+                          struct acpi_buffer *in_buffer)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_set_current_resources");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_set_current_resources");
 
        /* Must have a valid handle and buffer */
 
-       if ((!device_handle)      ||
-               (!in_buffer)          ||
-               (!in_buffer->pointer) ||
-               (!in_buffer->length)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((!device_handle) ||
+           (!in_buffer) || (!in_buffer->pointer) || (!in_buffer->length)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_rs_set_srs_method_data (device_handle, in_buffer);
-       return_ACPI_STATUS (status);
+       status = acpi_rs_set_srs_method_data(device_handle, in_buffer);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_set_current_resources);
 
+EXPORT_SYMBOL(acpi_set_current_resources);
 
 /******************************************************************************
  *
@@ -398,41 +375,38 @@ EXPORT_SYMBOL(acpi_set_current_resources);
  ******************************************************************************/
 
 acpi_status
-acpi_resource_to_address64 (
-       struct acpi_resource                *resource,
-       struct acpi_resource_address64      *out)
+acpi_resource_to_address64(struct acpi_resource *resource,
+                          struct acpi_resource_address64 *out)
 {
-       struct acpi_resource_address16      *address16;
-       struct acpi_resource_address32      *address32;
-
+       struct acpi_resource_address16 *address16;
+       struct acpi_resource_address32 *address32;
 
        switch (resource->id) {
        case ACPI_RSTYPE_ADDRESS16:
 
-               address16 = (struct acpi_resource_address16 *) &resource->data;
-               ACPI_COPY_ADDRESS (out, address16);
+               address16 = (struct acpi_resource_address16 *)&resource->data;
+               ACPI_COPY_ADDRESS(out, address16);
                break;
 
-
        case ACPI_RSTYPE_ADDRESS32:
 
-               address32 = (struct acpi_resource_address32 *) &resource->data;
-               ACPI_COPY_ADDRESS (out, address32);
+               address32 = (struct acpi_resource_address32 *)&resource->data;
+               ACPI_COPY_ADDRESS(out, address32);
                break;
 
-
        case ACPI_RSTYPE_ADDRESS64:
 
                /* Simple copy for 64 bit source */
 
-               ACPI_MEMCPY (out, &resource->data, sizeof (struct acpi_resource_address64));
+               ACPI_MEMCPY(out, &resource->data,
+                           sizeof(struct acpi_resource_address64));
                break;
 
-
        default:
                return (AE_BAD_PARAMETER);
        }
 
        return (AE_OK);
 }
+
 EXPORT_SYMBOL(acpi_resource_to_address64);
index cbcda30c172dd1876b4f5928c59d20ae0c610132..c6db591479de3e02504d40ac8e0cee2d2bebdeab 100644 (file)
@@ -9,14 +9,10 @@
 #include <acpi/acpi_drivers.h>
 #include <acpi/acinterp.h>     /* for acpi_ex_eisa_id_to_string() */
 
-
 #define _COMPONENT             ACPI_BUS_COMPONENT
-ACPI_MODULE_NAME               ("scan")
-
+ACPI_MODULE_NAME("scan")
 #define STRUCT_TO_INT(s)       (*((int*)&s))
-
-extern struct acpi_device              *acpi_root;
-
+extern struct acpi_device *acpi_root;
 
 #define ACPI_BUS_CLASS                 "system_bus"
 #define ACPI_BUS_HID                   "ACPI_BUS"
@@ -27,13 +23,11 @@ static LIST_HEAD(acpi_device_list);
 DEFINE_SPINLOCK(acpi_device_lock);
 LIST_HEAD(acpi_wakeup_device_list);
 
-static int
-acpi_bus_trim(struct acpi_device       *start,
-               int rmdevice);
+static int acpi_bus_trim(struct acpi_device *start, int rmdevice);
 
-static void acpi_device_release(struct kobject * kobj)
+static void acpi_device_release(struct kobject *kobj)
 {
-       struct acpi_device * dev = container_of(kobj,struct acpi_device,kobj);
+       struct acpi_device *dev = container_of(kobj, struct acpi_device, kobj);
        if (dev->pnp.cid_list)
                kfree(dev->pnp.cid_list);
        kfree(dev);
@@ -41,34 +35,34 @@ static void acpi_device_release(struct kobject * kobj)
 
 struct acpi_device_attribute {
        struct attribute attr;
-       ssize_t (*show)(struct acpi_device *, char *);
-       ssize_t (*store)(struct acpi_device *, const char *, size_t);
+        ssize_t(*show) (struct acpi_device *, char *);
+        ssize_t(*store) (struct acpi_device *, const char *, size_t);
 };
 
 typedef void acpi_device_sysfs_files(struct kobject *,
-                               const struct attribute *);
+                                    const struct attribute *);
 
 static void setup_sys_fs_device_files(struct acpi_device *dev,
-               acpi_device_sysfs_files *func);
+                                     acpi_device_sysfs_files * func);
 
 #define create_sysfs_device_files(dev) \
        setup_sys_fs_device_files(dev, (acpi_device_sysfs_files *)&sysfs_create_file)
 #define remove_sysfs_device_files(dev) \
        setup_sys_fs_device_files(dev, (acpi_device_sysfs_files *)&sysfs_remove_file)
 
-
 #define to_acpi_device(n) container_of(n, struct acpi_device, kobj)
 #define to_handle_attr(n) container_of(n, struct acpi_device_attribute, attr);
 
 static ssize_t acpi_device_attr_show(struct kobject *kobj,
-               struct attribute *attr, char *buf)
+                                    struct attribute *attr, char *buf)
 {
        struct acpi_device *device = to_acpi_device(kobj);
        struct acpi_device_attribute *attribute = to_handle_attr(attr);
        return attribute->show ? attribute->show(device, buf) : -EIO;
 }
 static ssize_t acpi_device_attr_store(struct kobject *kobj,
-               struct attribute *attr, const char *buf, size_t len)
+                                     struct attribute *attr, const char *buf,
+                                     size_t len)
 {
        struct acpi_device *device = to_acpi_device(kobj);
        struct acpi_device_attribute *attribute = to_handle_attr(attr);
@@ -76,13 +70,13 @@ static ssize_t acpi_device_attr_store(struct kobject *kobj,
 }
 
 static struct sysfs_ops acpi_device_sysfs_ops = {
-       .show   = acpi_device_attr_show,
-       .store  = acpi_device_attr_store,
+       .show = acpi_device_attr_show,
+       .store = acpi_device_attr_store,
 };
 
 static struct kobj_type ktype_acpi_ns = {
-       .sysfs_ops      = &acpi_device_sysfs_ops,
-       .release        = acpi_device_release,
+       .sysfs_ops = &acpi_device_sysfs_ops,
+       .release = acpi_device_release,
 };
 
 static int namespace_hotplug(struct kset *kset, struct kobject *kobj,
@@ -110,16 +104,16 @@ static struct kset_hotplug_ops namespace_hotplug_ops = {
 };
 
 static struct kset acpi_namespace_kset = {
-       .kobj           = { 
-               .name = "namespace",
-       },
+       .kobj = {
+                .name = "namespace",
+                },
        .subsys = &acpi_subsys,
-       .ktype  = &ktype_acpi_ns,
+       .ktype = &ktype_acpi_ns,
        .hotplug_ops = &namespace_hotplug_ops,
 };
 
-
-static void acpi_device_register(struct acpi_device * device, struct acpi_device * parent)
+static void acpi_device_register(struct acpi_device *device,
+                                struct acpi_device *parent)
 {
        /*
         * Linkage
@@ -134,14 +128,14 @@ static void acpi_device_register(struct acpi_device * device, struct acpi_device
        spin_lock(&acpi_device_lock);
        if (device->parent) {
                list_add_tail(&device->node, &device->parent->children);
-               list_add_tail(&device->g_list,&device->parent->g_list);
+               list_add_tail(&device->g_list, &device->parent->g_list);
        } else
-               list_add_tail(&device->g_list,&acpi_device_list);
+               list_add_tail(&device->g_list, &acpi_device_list);
        if (device->wakeup.flags.valid)
-               list_add_tail(&device->wakeup_list,&acpi_wakeup_device_list);
+               list_add_tail(&device->wakeup_list, &acpi_wakeup_device_list);
        spin_unlock(&acpi_device_lock);
 
-       strlcpy(device->kobj.name,device->pnp.bus_id,KOBJ_NAME_LEN);
+       strlcpy(device->kobj.name, device->pnp.bus_id, KOBJ_NAME_LEN);
        if (parent)
                device->kobj.parent = &parent->kobj;
        device->kobj.ktype = &ktype_acpi_ns;
@@ -150,10 +144,7 @@ static void acpi_device_register(struct acpi_device * device, struct acpi_device
        create_sysfs_device_files(device);
 }
 
-static int
-acpi_device_unregister (
-       struct acpi_device      *device, 
-       int                     type)
+static int acpi_device_unregister(struct acpi_device *device, int type)
 {
        spin_lock(&acpi_device_lock);
        if (device->parent) {
@@ -172,11 +163,7 @@ acpi_device_unregister (
        return 0;
 }
 
-void
-acpi_bus_data_handler (
-       acpi_handle             handle,
-       u32                     function,
-       void                    *context)
+void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context)
 {
        ACPI_FUNCTION_TRACE("acpi_bus_data_handler");
 
@@ -185,13 +172,11 @@ acpi_bus_data_handler (
        return_VOID;
 }
 
-static int
-acpi_bus_get_power_flags (
-       struct acpi_device      *device)
+static int acpi_bus_get_power_flags(struct acpi_device *device)
 {
-       acpi_status             status = 0;
-       acpi_handle             handle = NULL;
-       u32                     i = 0;
+       acpi_status status = 0;
+       acpi_handle handle = NULL;
+       u32 i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_bus_get_power_flags");
 
@@ -210,11 +195,11 @@ acpi_bus_get_power_flags (
         */
        for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3; i++) {
                struct acpi_device_power_state *ps = &device->power.states[i];
-               char            object_name[5] = {'_','P','R','0'+i,'\0'};
+               char object_name[5] = { '_', 'P', 'R', '0' + i, '\0' };
 
                /* Evaluate "_PRx" to se if power resources are referenced */
                acpi_evaluate_reference(device->handle, object_name, NULL,
-                       &ps->resources);
+                                       &ps->resources);
                if (ps->resources.count) {
                        device->power.flags.power_resources = 1;
                        ps->flags.valid = 1;
@@ -232,7 +217,7 @@ acpi_bus_get_power_flags (
                if (ps->resources.count || ps->flags.explicit_set)
                        ps->flags.valid = 1;
 
-               ps->power = -1;         /* Unknown - driver assigned */
+               ps->power = -1; /* Unknown - driver assigned */
                ps->latency = -1;       /* Unknown - driver assigned */
        }
 
@@ -249,13 +234,10 @@ acpi_bus_get_power_flags (
        return_VALUE(0);
 }
 
-int
-acpi_match_ids (
-       struct acpi_device      *device,
-       char                    *ids)
+int acpi_match_ids(struct acpi_device *device, char *ids)
 {
        int error = 0;
-       struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
 
        if (device->flags.hardware_id)
                if (strstr(ids, device->pnp.hardware_id))
@@ -266,27 +248,25 @@ acpi_match_ids (
                int i;
 
                /* compare multiple _CID entries against driver ids */
-               for (i = 0; i < cid_list->count; i++)
-               {
+               for (i = 0; i < cid_list->count; i++) {
                        if (strstr(ids, cid_list->id[i].value))
                                goto Done;
                }
        }
        error = -ENOENT;
 
- Done:
     Done:
        if (buffer.pointer)
                acpi_os_free(buffer.pointer);
        return error;
 }
 
 static acpi_status
-acpi_bus_extract_wakeup_device_power_package (
-       struct acpi_device      *device,
-       union acpi_object       *package)
+acpi_bus_extract_wakeup_device_power_package(struct acpi_device *device,
+                                            union acpi_object *package)
 {
-       int      i = 0;
-       union acpi_object       *element = NULL;
+       int i = 0;
+       union acpi_object *element = NULL;
 
        if (!device || !package || (package->package.count < 2))
                return AE_BAD_PARAMETER;
@@ -296,14 +276,17 @@ acpi_bus_extract_wakeup_device_power_package (
                return AE_BAD_PARAMETER;
        if (element->type == ACPI_TYPE_PACKAGE) {
                if ((element->package.count < 2) ||
-                       (element->package.elements[0].type != ACPI_TYPE_LOCAL_REFERENCE) ||
-                       (element->package.elements[1].type != ACPI_TYPE_INTEGER))
+                   (element->package.elements[0].type !=
+                    ACPI_TYPE_LOCAL_REFERENCE)
+                   || (element->package.elements[1].type != ACPI_TYPE_INTEGER))
                        return AE_BAD_DATA;
-               device->wakeup.gpe_device = element->package.elements[0].reference.handle;
-               device->wakeup.gpe_number = (u32)element->package.elements[1].integer.value;
-       }else if (element->type == ACPI_TYPE_INTEGER) {
+               device->wakeup.gpe_device =
+                   element->package.elements[0].reference.handle;
+               device->wakeup.gpe_number =
+                   (u32) element->package.elements[1].integer.value;
+       } else if (element->type == ACPI_TYPE_INTEGER) {
                device->wakeup.gpe_number = element->integer.value;
-       }else
+       } else
                return AE_BAD_DATA;
 
        element = &(package->package.elements[1]);
@@ -316,9 +299,9 @@ acpi_bus_extract_wakeup_device_power_package (
                return AE_NO_MEMORY;
        }
        device->wakeup.resources.count = package->package.count - 2;
-       for (i=0; i < device->wakeup.resources.count; i++) {
+       for (i = 0; i < device->wakeup.resources.count; i++) {
                element = &(package->package.elements[i + 2]);
-               if (element->type != ACPI_TYPE_ANY ) {
+               if (element->type != ACPI_TYPE_ANY) {
                        return AE_BAD_DATA;
                }
 
@@ -328,13 +311,11 @@ acpi_bus_extract_wakeup_device_power_package (
        return AE_OK;
 }
 
-static int
-acpi_bus_get_wakeup_device_flags (
-       struct acpi_device      *device)
+static int acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
 {
-       acpi_status     status = 0;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       union acpi_object       *package = NULL;
+       acpi_status status = 0;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       union acpi_object *package = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_bus_get_wakeup_flags");
 
@@ -345,21 +326,22 @@ acpi_bus_get_wakeup_device_flags (
                goto end;
        }
 
-       package = (union acpi_object *) buffer.pointer;
+       package = (union acpi_object *)buffer.pointer;
        status = acpi_bus_extract_wakeup_device_power_package(device, package);
        if (ACPI_FAILURE(status)) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Error extracting _PRW package\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Error extracting _PRW package\n"));
                goto end;
        }
 
        acpi_os_free(buffer.pointer);
 
        device->wakeup.flags.valid = 1;
-       /* Power button, Lid switch always enable wakeup*/
+       /* Power button, Lid switch always enable wakeup */
        if (!acpi_match_ids(device, "PNP0C0D,PNP0C0C,PNP0C0E"))
                device->wakeup.flags.run_wake = 1;
 
-end:
+      end:
        if (ACPI_FAILURE(status))
                device->flags.wake_capable = 0;
        return_VALUE(0);
@@ -368,8 +350,8 @@ end:
 /* --------------------------------------------------------------------------
                ACPI hotplug sysfs device file support
    -------------------------------------------------------------------------- */
-static ssize_t acpi_eject_store(struct acpi_device *device, 
-               const char *buf, size_t count);
+static ssize_t acpi_eject_store(struct acpi_device *device,
+                               const char *buf, size_t count);
 
 #define ACPI_DEVICE_ATTR(_name,_mode,_show,_store) \
 static struct acpi_device_attribute acpi_device_attr_##_name = \
@@ -383,12 +365,11 @@ ACPI_DEVICE_ATTR(eject, 0200, NULL, acpi_eject_store);
  * @func:      function pointer to create or destroy the device file
  */
 static void
-setup_sys_fs_device_files (
-       struct acpi_device *dev,
-       acpi_device_sysfs_files *func)
+setup_sys_fs_device_files(struct acpi_device *dev,
+                         acpi_device_sysfs_files * func)
 {
-       acpi_status             status;
-       acpi_handle             temp = NULL;
+       acpi_status status;
+       acpi_handle temp = NULL;
 
        /*
         * If device has _EJ0, 'eject' file is created that is used to trigger
@@ -396,11 +377,10 @@ setup_sys_fs_device_files (
         */
        status = acpi_get_handle(dev->handle, "_EJ0", &temp);
        if (ACPI_SUCCESS(status))
-               (*(func))(&dev->kobj,&acpi_device_attr_eject.attr);
+               (*(func)) (&dev->kobj, &acpi_device_attr_eject.attr);
 }
 
-static int
-acpi_eject_operation(acpi_handle handle, int lockable)
+static int acpi_eject_operation(acpi_handle handle, int lockable)
 {
        struct acpi_object_list arg_list;
        union acpi_object arg;
@@ -429,27 +409,25 @@ acpi_eject_operation(acpi_handle handle, int lockable)
 
        status = acpi_evaluate_object(handle, "_EJ0", &arg_list, NULL);
        if (ACPI_FAILURE(status)) {
-               return(-ENODEV);
+               return (-ENODEV);
        }
 
-       return(0);
+       return (0);
 }
 
-
 static ssize_t
 acpi_eject_store(struct acpi_device *device, const char *buf, size_t count)
 {
-       int     result;
-       int     ret = count;
-       int     islockable;
-       acpi_status     status;
-       acpi_handle     handle;
-       acpi_object_type        type = 0;
+       int result;
+       int ret = count;
+       int islockable;
+       acpi_status status;
+       acpi_handle handle;
+       acpi_object_type type = 0;
 
        if ((!count) || (buf[0] != '1')) {
                return -EINVAL;
        }
-
 #ifndef FORCE_EJECT
        if (device->driver == NULL) {
                ret = -ENODEV;
@@ -457,7 +435,7 @@ acpi_eject_store(struct acpi_device *device, const char *buf, size_t count)
        }
 #endif
        status = acpi_get_type(device->handle, &type);
-       if (ACPI_FAILURE(status) || (!device->flags.ejectable) ) {
+       if (ACPI_FAILURE(status) || (!device->flags.ejectable)) {
                ret = -ENODEV;
                goto err;
        }
@@ -476,18 +454,15 @@ acpi_eject_store(struct acpi_device *device, const char *buf, size_t count)
        if (result) {
                ret = -EBUSY;
        }
-err:
+      err:
        return ret;
 }
 
-
 /* --------------------------------------------------------------------------
                               Performance Management
    -------------------------------------------------------------------------- */
 
-static int
-acpi_bus_get_perf_flags (
-       struct acpi_device      *device)
+static int acpi_bus_get_perf_flags(struct acpi_device *device)
 {
        device->performance.state = ACPI_STATE_UNKNOWN;
        return 0;
@@ -500,7 +475,6 @@ acpi_bus_get_perf_flags (
 static LIST_HEAD(acpi_bus_drivers);
 static DECLARE_MUTEX(acpi_bus_drivers_lock);
 
-
 /**
  * acpi_bus_match 
  * --------------
@@ -508,16 +482,13 @@ static DECLARE_MUTEX(acpi_bus_drivers_lock);
  * matches the specified driver's criteria.
  */
 static int
-acpi_bus_match (
-       struct acpi_device      *device,
-       struct acpi_driver      *driver)
+acpi_bus_match(struct acpi_device *device, struct acpi_driver *driver)
 {
        if (driver && driver->ops.match)
                return driver->ops.match(device, driver);
        return acpi_match_ids(device, driver->ids);
 }
 
-
 /**
  * acpi_bus_driver_init 
  * --------------------
@@ -525,11 +496,9 @@ acpi_bus_match (
  * driver is bound to a device.  Invokes the driver's add() and start() ops.
  */
 static int
-acpi_bus_driver_init (
-       struct acpi_device      *device, 
-       struct acpi_driver      *driver)
+acpi_bus_driver_init(struct acpi_device *device, struct acpi_driver *driver)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_bus_driver_init");
 
@@ -553,13 +522,12 @@ acpi_bus_driver_init (
         * upon possible configuration and currently allocated resources.
         */
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Driver successfully bound to device\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Driver successfully bound to device\n"));
        return_VALUE(0);
 }
 
-int
-acpi_start_single_object (
-               struct acpi_device *device)
+static int acpi_start_single_object(struct acpi_device *device)
 {
        int result = 0;
        struct acpi_driver *driver;
@@ -578,16 +546,17 @@ acpi_start_single_object (
        return_VALUE(result);
 }
 
-static int acpi_driver_attach(struct acpi_driver * drv)
+static int acpi_driver_attach(struct acpi_driver *drv)
 {
-       struct list_head * node, * next;
+       struct list_head *node, *next;
        int count = 0;
 
        ACPI_FUNCTION_TRACE("acpi_driver_attach");
 
        spin_lock(&acpi_device_lock);
        list_for_each_safe(node, next, &acpi_device_list) {
-               struct acpi_device * dev = container_of(node, struct acpi_device, g_list);
+               struct acpi_device *dev =
+                   container_of(node, struct acpi_device, g_list);
 
                if (dev->driver || !dev->status.present)
                        continue;
@@ -598,7 +567,8 @@ static int acpi_driver_attach(struct acpi_driver * drv)
                                acpi_start_single_object(dev);
                                atomic_inc(&drv->references);
                                count++;
-                               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found driver [%s] for device [%s]\n",
+                               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                                 "Found driver [%s] for device [%s]\n",
                                                  drv->name, dev->pnp.bus_id));
                        }
                }
@@ -608,20 +578,21 @@ static int acpi_driver_attach(struct acpi_driver * drv)
        return_VALUE(count);
 }
 
-static int acpi_driver_detach(struct acpi_driver * drv)
+static int acpi_driver_detach(struct acpi_driver *drv)
 {
-       struct list_head * node, * next;
+       struct list_head *node, *next;
 
        ACPI_FUNCTION_TRACE("acpi_driver_detach");
 
        spin_lock(&acpi_device_lock);
-       list_for_each_safe(node,next,&acpi_device_list) {
-               struct acpi_device * dev = container_of(node,struct acpi_device,g_list);
+       list_for_each_safe(node, next, &acpi_device_list) {
+               struct acpi_device *dev =
+                   container_of(node, struct acpi_device, g_list);
 
                if (dev->driver == drv) {
                        spin_unlock(&acpi_device_lock);
                        if (drv->ops.remove)
-                               drv->ops.remove(dev,ACPI_BUS_REMOVAL_NORMAL);
+                               drv->ops.remove(dev, ACPI_BUS_REMOVAL_NORMAL);
                        spin_lock(&acpi_device_lock);
                        dev->driver = NULL;
                        dev->driver_data = NULL;
@@ -640,9 +611,7 @@ static int acpi_driver_detach(struct acpi_driver * drv)
  * number of devices that were claimed by the driver, or a negative
  * error status for failure.
  */
-int
-acpi_bus_register_driver (
-       struct acpi_driver      *driver)
+int acpi_bus_register_driver(struct acpi_driver *driver)
 {
        int count;
 
@@ -661,8 +630,8 @@ acpi_bus_register_driver (
 
        return_VALUE(count);
 }
-EXPORT_SYMBOL(acpi_bus_register_driver);
 
+EXPORT_SYMBOL(acpi_bus_register_driver);
 
 /**
  * acpi_bus_unregister_driver 
@@ -670,9 +639,7 @@ EXPORT_SYMBOL(acpi_bus_register_driver);
  * Unregisters a driver with the ACPI bus.  Searches the namespace for all
  * devices that match the driver's criteria and unbinds.
  */
-int
-acpi_bus_unregister_driver (
-       struct acpi_driver      *driver)
+int acpi_bus_unregister_driver(struct acpi_driver *driver)
 {
        int error = 0;
 
@@ -685,11 +652,12 @@ acpi_bus_unregister_driver (
                        spin_lock(&acpi_device_lock);
                        list_del_init(&driver->node);
                        spin_unlock(&acpi_device_lock);
-               } 
-       } else 
+               }
+       } else
                error = -EINVAL;
        return_VALUE(error);
 }
+
 EXPORT_SYMBOL(acpi_bus_unregister_driver);
 
 /**
@@ -698,18 +666,17 @@ EXPORT_SYMBOL(acpi_bus_unregister_driver);
  * Parses the list of registered drivers looking for a driver applicable for
  * the specified device.
  */
-static int
-acpi_bus_find_driver (
-       struct acpi_device      *device)
+static int acpi_bus_find_driver(struct acpi_device *device)
 {
-       int                     result = 0;
-       struct list_head        * node, *next;
+       int result = 0;
+       struct list_head *node, *next;
 
        ACPI_FUNCTION_TRACE("acpi_bus_find_driver");
 
        spin_lock(&acpi_device_lock);
-       list_for_each_safe(node,next,&acpi_bus_drivers) {
-               struct acpi_driver * driver = container_of(node,struct acpi_driver,node);
+       list_for_each_safe(node, next, &acpi_bus_drivers) {
+               struct acpi_driver *driver =
+                   container_of(node, struct acpi_driver, node);
 
                atomic_inc(&driver->references);
                spin_unlock(&acpi_device_lock);
@@ -723,21 +690,18 @@ acpi_bus_find_driver (
        }
        spin_unlock(&acpi_device_lock);
 
- Done:
     Done:
        return_VALUE(result);
 }
 
-
 /* --------------------------------------------------------------------------
                                  Device Enumeration
    -------------------------------------------------------------------------- */
 
-static int 
-acpi_bus_get_flags (
-       struct acpi_device      *device)
+static int acpi_bus_get_flags(struct acpi_device *device)
 {
-       acpi_status             status = AE_OK;
-       acpi_handle             temp = NULL;
+       acpi_status status = AE_OK;
+       acpi_handle temp = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_bus_get_flags");
 
@@ -788,11 +752,12 @@ acpi_bus_get_flags (
        return_VALUE(0);
 }
 
-static void acpi_device_get_busid(struct acpi_device * device, acpi_handle handle, int type)
+static void acpi_device_get_busid(struct acpi_device *device,
+                                 acpi_handle handle, int type)
 {
-       char                    bus_id[5] = {'?',0};
-       struct acpi_buffer      buffer = {sizeof(bus_id), bus_id};
-       int                     i = 0;
+       char bus_id[5] = { '?', 0 };
+       struct acpi_buffer buffer = { sizeof(bus_id), bus_id };
+       int i = 0;
 
        /*
         * Bus ID
@@ -824,21 +789,22 @@ static void acpi_device_get_busid(struct acpi_device * device, acpi_handle handl
        }
 }
 
-static void acpi_device_set_id(struct acpi_device * device, struct acpi_device * parent,
-                              acpi_handle handle, int type)
+static void acpi_device_set_id(struct acpi_device *device,
+                              struct acpi_device *parent, acpi_handle handle,
+                              int type)
 {
-       struct acpi_device_info *info;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       char                    *hid = NULL;
-       char                    *uid = NULL;
+       struct acpi_device_info *info;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       char *hid = NULL;
+       char *uid = NULL;
        struct acpi_compatible_id_list *cid_list = NULL;
-       acpi_status             status;
+       acpi_status status;
 
        switch (type) {
        case ACPI_BUS_TYPE_DEVICE:
                status = acpi_get_object_info(handle, &buffer);
                if (ACPI_FAILURE(status)) {
-                       printk("%s: Error reading device info\n",__FUNCTION__);
+                       printk("%s: Error reading device info\n", __FUNCTION__);
                        return;
                }
 
@@ -904,7 +870,7 @@ static void acpi_device_set_id(struct acpi_device * device, struct acpi_device *
        acpi_os_free(buffer.pointer);
 }
 
-static int acpi_device_set_context(struct acpi_device * device, int type)
+static int acpi_device_set_context(struct acpi_device *device, int type)
 {
        acpi_status status = AE_OK;
        int result = 0;
@@ -916,10 +882,10 @@ static int acpi_device_set_context(struct acpi_device * device, int type)
         * to be careful with fixed-feature devices as they all attach to the
         * root object.
         */
-       if (type != ACPI_BUS_TYPE_POWER_BUTTON && 
+       if (type != ACPI_BUS_TYPE_POWER_BUTTON &&
            type != ACPI_BUS_TYPE_SLEEP_BUTTON) {
                status = acpi_attach_data(device->handle,
-                       acpi_bus_data_handler, device);
+                                         acpi_bus_data_handler, device);
 
                if (ACPI_FAILURE(status)) {
                        printk("Error attaching device data\n");
@@ -929,12 +895,13 @@ static int acpi_device_set_context(struct acpi_device * device, int type)
        return result;
 }
 
-static void acpi_device_get_debug_info(struct acpi_device * device, acpi_handle handle, int type)
+static void acpi_device_get_debug_info(struct acpi_device *device,
+                                      acpi_handle handle, int type)
 {
 #ifdef CONFIG_ACPI_DEBUG_OUTPUT
-       char            *type_string = NULL;
-       char            name[80] = {'?','\0'};
-       struct acpi_buffer      buffer = {sizeof(name), name};
+       char *type_string = NULL;
+       char name[80] = { '?', '\0' };
+       struct acpi_buffer buffer = { sizeof(name), name };
 
        switch (type) {
        case ACPI_BUS_TYPE_DEVICE:
@@ -968,18 +935,14 @@ static void acpi_device_get_debug_info(struct acpi_device * device, acpi_handle
        }
 
        printk(KERN_DEBUG "Found %s %s [%p]\n", type_string, name, handle);
-#endif /*CONFIG_ACPI_DEBUG_OUTPUT*/
+#endif                         /*CONFIG_ACPI_DEBUG_OUTPUT */
 }
 
-
-static int
-acpi_bus_remove (
-       struct acpi_device *dev,
-       int rmdevice)
+static int acpi_bus_remove(struct acpi_device *dev, int rmdevice)
 {
-       int                     result = 0;
-       struct acpi_driver      *driver;
-       
+       int result = 0;
+       struct acpi_driver *driver;
+
        ACPI_FUNCTION_TRACE("acpi_bus_remove");
 
        if (!dev)
@@ -1012,22 +975,18 @@ acpi_bus_remove (
                if ((dev->parent) && (dev->parent->ops.unbind))
                        dev->parent->ops.unbind(dev);
        }
-       
+
        acpi_device_unregister(dev, ACPI_BUS_REMOVAL_EJECT);
 
        return_VALUE(0);
 }
 
-
 static int
-acpi_add_single_object (
-       struct acpi_device      **child,
-       struct acpi_device      *parent,
-       acpi_handle             handle,
-       int                     type)
+acpi_add_single_object(struct acpi_device **child,
+                      struct acpi_device *parent, acpi_handle handle, int type)
 {
-       int                     result = 0;
-       struct acpi_device      *device = NULL;
+       int result = 0;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_add_single_object");
 
@@ -1044,7 +1003,7 @@ acpi_add_single_object (
        device->handle = handle;
        device->parent = parent;
 
-       acpi_device_get_busid(device,handle,type);
+       acpi_device_get_busid(device, handle, type);
 
        /*
         * Flags
@@ -1092,7 +1051,7 @@ acpi_add_single_object (
         * Hardware ID, Unique ID, & Bus Address
         * -------------------------------------
         */
-       acpi_device_set_id(device,parent,handle,type);
+       acpi_device_set_id(device, parent, handle, type);
 
        /*
         * Power Management
@@ -1104,7 +1063,7 @@ acpi_add_single_object (
                        goto end;
        }
 
-       /*
+       /*
         * Wakeup device management
         *-----------------------
         */
@@ -1124,12 +1083,12 @@ acpi_add_single_object (
                        goto end;
        }
 
-       if ((result = acpi_device_set_context(device,type)))
+       if ((result = acpi_device_set_context(device, type)))
                goto end;
 
-       acpi_device_get_debug_info(device,handle,type);
+       acpi_device_get_debug_info(device, handle, type);
 
-       acpi_device_register(device,parent);
+       acpi_device_register(device, parent);
 
        /*
         * Bind _ADR-Based Devices
@@ -1154,7 +1113,7 @@ acpi_add_single_object (
         */
        result = acpi_bus_find_driver(device);
 
-end:
+      end:
        if (!result)
                *child = device;
        else {
@@ -1166,17 +1125,15 @@ end:
        return_VALUE(result);
 }
 
-
-static int acpi_bus_scan (struct acpi_device   *start,
-               struct acpi_bus_ops *ops)
+static int acpi_bus_scan(struct acpi_device *start, struct acpi_bus_ops *ops)
 {
-       acpi_status             status = AE_OK;
-       struct acpi_device      *parent = NULL;
-       struct acpi_device      *child = NULL;
-       acpi_handle             phandle = NULL;
-       acpi_handle             chandle = NULL;
-       acpi_object_type        type = 0;
-       u32                     level = 1;
+       acpi_status status = AE_OK;
+       struct acpi_device *parent = NULL;
+       struct acpi_device *child = NULL;
+       acpi_handle phandle = NULL;
+       acpi_handle chandle = NULL;
+       acpi_object_type type = 0;
+       u32 level = 1;
 
        ACPI_FUNCTION_TRACE("acpi_bus_scan");
 
@@ -1185,7 +1142,7 @@ static int acpi_bus_scan (struct acpi_device      *start,
 
        parent = start;
        phandle = start->handle;
-       
+
        /*
         * Parse through the ACPI namespace, identify all 'devices', and
         * create a new 'struct acpi_device' for each.
@@ -1193,7 +1150,7 @@ static int acpi_bus_scan (struct acpi_device      *start,
        while ((level > 0) && parent) {
 
                status = acpi_get_next_object(ACPI_TYPE_ANY, phandle,
-                       chandle, &chandle);
+                                             chandle, &chandle);
 
                /*
                 * If this scope is exhausted then move our way back up.
@@ -1243,12 +1200,12 @@ static int acpi_bus_scan (struct acpi_device    *start,
 
                if (ops->acpi_op_add)
                        status = acpi_add_single_object(&child, parent,
-                                       chandle, type);
-                else
+                                                       chandle, type);
+               else
                        status = acpi_bus_get_device(chandle, &child);
 
-                if (ACPI_FAILURE(status))
-                        continue;
+               if (ACPI_FAILURE(status))
+                       continue;
 
                if (ops->acpi_op_start) {
                        status = acpi_start_single_object(child);
@@ -1264,7 +1221,7 @@ static int acpi_bus_scan (struct acpi_device      *start,
                 * which will be enumerated when the parent is inserted).
                 *
                 * TBD: Need notifications and other detection mechanisms
-                *      in place before we can fully implement this.
+                *      in place before we can fully implement this.
                 */
                if (child->status.present) {
                        status = acpi_get_next_object(ACPI_TYPE_ANY, chandle,
@@ -1282,11 +1239,8 @@ static int acpi_bus_scan (struct acpi_device     *start,
 }
 
 int
-acpi_bus_add (
-       struct acpi_device      **child,
-       struct acpi_device      *parent,
-       acpi_handle             handle,
-       int                     type)
+acpi_bus_add(struct acpi_device **child,
+            struct acpi_device *parent, acpi_handle handle, int type)
 {
        int result;
        struct acpi_bus_ops ops;
@@ -1301,11 +1255,10 @@ acpi_bus_add (
        }
        return_VALUE(result);
 }
+
 EXPORT_SYMBOL(acpi_bus_add);
 
-int
-acpi_bus_start (
-       struct acpi_device *device)
+int acpi_bus_start(struct acpi_device *device)
 {
        int result;
        struct acpi_bus_ops ops;
@@ -1323,26 +1276,25 @@ acpi_bus_start (
        }
        return_VALUE(result);
 }
+
 EXPORT_SYMBOL(acpi_bus_start);
 
-static int
-acpi_bus_trim(struct acpi_device       *start,
-               int rmdevice)
+static int acpi_bus_trim(struct acpi_device *start, int rmdevice)
 {
-       acpi_status             status;
-       struct acpi_device      *parent, *child;
-       acpi_handle             phandle, chandle;
-       acpi_object_type        type;
-       u32                     level = 1;
-       int                     err = 0;
-
-       parent  = start;
+       acpi_status status;
+       struct acpi_device *parent, *child;
+       acpi_handle phandle, chandle;
+       acpi_object_type type;
+       u32 level = 1;
+       int err = 0;
+
+       parent = start;
        phandle = start->handle;
        child = chandle = NULL;
 
        while ((level > 0) && parent && (!err)) {
                status = acpi_get_next_object(ACPI_TYPE_ANY, phandle,
-                       chandle, &chandle);
+                                             chandle, &chandle);
 
                /*
                 * If this scope is exhausted then move our way back up.
@@ -1381,12 +1333,10 @@ acpi_bus_trim(struct acpi_device        *start,
        return err;
 }
 
-static int
-acpi_bus_scan_fixed (
-       struct acpi_device      *root)
+static int acpi_bus_scan_fixed(struct acpi_device *root)
 {
-       int                     result = 0;
-       struct acpi_device      *device = NULL;
+       int result = 0;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_bus_scan_fixed");
 
@@ -1398,14 +1348,16 @@ acpi_bus_scan_fixed (
         */
        if (acpi_fadt.pwr_button == 0) {
                result = acpi_add_single_object(&device, acpi_root,
-                       NULL, ACPI_BUS_TYPE_POWER_BUTTON);
+                                               NULL,
+                                               ACPI_BUS_TYPE_POWER_BUTTON);
                if (!result)
                        result = acpi_start_single_object(device);
        }
 
        if (acpi_fadt.sleep_button == 0) {
                result = acpi_add_single_object(&device, acpi_root,
-                       NULL, ACPI_BUS_TYPE_SLEEP_BUTTON);
+                                               NULL,
+                                               ACPI_BUS_TYPE_SLEEP_BUTTON);
                if (!result)
                        result = acpi_start_single_object(device);
        }
@@ -1413,7 +1365,6 @@ acpi_bus_scan_fixed (
        return_VALUE(result);
 }
 
-
 static int __init acpi_scan_init(void)
 {
        int result;
@@ -1430,7 +1381,7 @@ static int __init acpi_scan_init(void)
         * Create the root device in the bus's device tree
         */
        result = acpi_add_single_object(&acpi_root, NULL, ACPI_ROOT_OBJECT,
-               ACPI_BUS_TYPE_SYSTEM);
+                                       ACPI_BUS_TYPE_SYSTEM);
        if (result)
                goto Done;
 
@@ -1450,7 +1401,7 @@ static int __init acpi_scan_init(void)
        if (result)
                acpi_device_unregister(acpi_root, ACPI_BUS_REMOVAL_NORMAL);
 
- Done:
     Done:
        return_VALUE(result);
 }
 
index f93d2ee54800517590d28f2d77767124962eb89f..a5f947de879bc62a52ade449c729cf5ffe5b69c5 100644 (file)
@@ -95,4 +95,4 @@ static int acpi_poweroff_init(void)
 
 late_initcall(acpi_poweroff_init);
 
-#endif /* CONFIG_PM */
+#endif                         /* CONFIG_PM */
index 1be99f0996d6b4515630ec8b4e2cedf62c006f07..09a603f3523ec148df72d54d629ef4712fdbe8c6 100644 (file)
 
 #include "sleep.h"
 
-#ifdef CONFIG_ACPI_SLEEP_PROC_SLEEP
-#define ACPI_SYSTEM_FILE_SLEEP         "sleep"
-#endif
-
-#define ACPI_SYSTEM_FILE_ALARM         "alarm"
-#define ACPI_SYSTEM_FILE_WAKEUP_DEVICE   "wakeup"
-
 #define _COMPONENT             ACPI_SYSTEM_COMPONENT
-ACPI_MODULE_NAME               ("sleep")
-
+ACPI_MODULE_NAME("sleep")
 #ifdef CONFIG_ACPI_SLEEP_PROC_SLEEP
-
 static int acpi_system_sleep_seq_show(struct seq_file *seq, void *offset)
 {
-       int                     i;
+       int i;
 
        ACPI_FUNCTION_TRACE("acpi_system_sleep_seq_show");
 
        for (i = 0; i <= ACPI_STATE_S5; i++) {
                if (sleep_states[i]) {
-                       seq_printf(seq,"S%d ", i);
+                       seq_printf(seq, "S%d ", i);
                        if (i == ACPI_STATE_S4 && acpi_gbl_FACS->S4bios_f)
                                seq_printf(seq, "S4bios ");
                }
@@ -50,24 +41,21 @@ static int acpi_system_sleep_open_fs(struct inode *inode, struct file *file)
 }
 
 static ssize_t
-acpi_system_write_sleep (
-       struct file             *file,
-       const char __user       *buffer,
-       size_t                  count,
-       loff_t                  *ppos)
+acpi_system_write_sleep(struct file *file,
+                       const char __user * buffer, size_t count, loff_t * ppos)
 {
-       char    str[12];
-       u32     state = 0;
-       int     error = 0;
+       char str[12];
+       u32 state = 0;
+       int error = 0;
 
        if (count > sizeof(str) - 1)
                goto Done;
-       memset(str,0,sizeof(str));
+       memset(str, 0, sizeof(str));
        if (copy_from_user(str, buffer, count))
                return -EFAULT;
 
        /* Check for S4 bios request */
-       if (!strcmp(str,"4b")) {
+       if (!strcmp(str, "4b")) {
                error = acpi_suspend(4);
                goto Done;
        }
@@ -79,17 +67,17 @@ acpi_system_write_sleep (
        }
 #endif
        error = acpi_suspend(state);
- Done:
     Done:
        return error ? error : count;
 }
-#endif /* CONFIG_ACPI_SLEEP_PROC_SLEEP */
+#endif                         /* CONFIG_ACPI_SLEEP_PROC_SLEEP */
 
 static int acpi_system_alarm_seq_show(struct seq_file *seq, void *offset)
 {
-       u32                     sec, min, hr;
-       u32                     day, mo, yr;
-       unsigned char           rtc_control = 0;
-       unsigned long           flags;
+       u32 sec, min, hr;
+       u32 day, mo, yr;
+       unsigned char rtc_control = 0;
+       unsigned long flags;
 
        ACPI_FUNCTION_TRACE("acpi_system_alarm_seq_show");
 
@@ -105,13 +93,14 @@ static int acpi_system_alarm_seq_show(struct seq_file *seq, void *offset)
                /* ACPI spec: only low 6 its should be cared */
                day = CMOS_READ(acpi_gbl_FADT->day_alrm) & 0x3F;
        else
-               day =  CMOS_READ(RTC_DAY_OF_MONTH);
+               day = CMOS_READ(RTC_DAY_OF_MONTH);
        if (acpi_gbl_FADT->mon_alrm)
                mo = CMOS_READ(acpi_gbl_FADT->mon_alrm);
        else
                mo = CMOS_READ(RTC_MONTH);
        if (acpi_gbl_FADT->century)
-               yr = CMOS_READ(acpi_gbl_FADT->century) * 100 + CMOS_READ(RTC_YEAR);
+               yr = CMOS_READ(acpi_gbl_FADT->century) * 100 +
+                   CMOS_READ(RTC_YEAR);
        else
                yr = CMOS_READ(RTC_YEAR);
 
@@ -126,33 +115,33 @@ static int acpi_system_alarm_seq_show(struct seq_file *seq, void *offset)
                BCD_TO_BIN(yr);
        }
 
-       /* we're trusting the FADT (see above)*/
+       /* we're trusting the FADT (see above) */
        if (!acpi_gbl_FADT->century)
-       /* If we're not trusting the FADT, we should at least make it
-        * right for _this_ century... ehm, what is _this_ century?
-        *
-        * TBD:
-        *  ASAP: find piece of code in the kernel, e.g. star tracker driver,
-        *        which we can trust to determine the century correctly. Atom
-        *        watch driver would be nice, too...
-        *
-        *  if that has not happened, change for first release in 2050:
-        *        if (yr<50)
-        *                yr += 2100;
-        *        else
-        *                yr += 2000;   // current line of code
-        *
-        *  if that has not happened either, please do on 2099/12/31:23:59:59
-        *        s/2000/2100
-        *
-        */
+               /* If we're not trusting the FADT, we should at least make it
+                * right for _this_ century... ehm, what is _this_ century?
+                *
+                * TBD:
+                *  ASAP: find piece of code in the kernel, e.g. star tracker driver,
+                *        which we can trust to determine the century correctly. Atom
+                *        watch driver would be nice, too...
+                *
+                *  if that has not happened, change for first release in 2050:
+                *        if (yr<50)
+                *                yr += 2100;
+                *        else
+                *                yr += 2000;   // current line of code
+                *
+                *  if that has not happened either, please do on 2099/12/31:23:59:59
+                *        s/2000/2100
+                *
+                */
                yr += 2000;
 
-       seq_printf(seq,"%4.4u-", yr);
-       (mo > 12)  ? seq_puts(seq, "**-")  : seq_printf(seq, "%2.2u-", mo);
-       (day > 31) ? seq_puts(seq, "** ")  : seq_printf(seq, "%2.2u ", day);
-       (hr > 23)  ? seq_puts(seq, "**:")  : seq_printf(seq, "%2.2u:", hr);
-       (min > 59) ? seq_puts(seq, "**:")  : seq_printf(seq, "%2.2u:", min);
+       seq_printf(seq, "%4.4u-", yr);
+       (mo > 12) ? seq_puts(seq, "**-") : seq_printf(seq, "%2.2u-", mo);
+       (day > 31) ? seq_puts(seq, "** ") : seq_printf(seq, "%2.2u ", day);
+       (hr > 23) ? seq_puts(seq, "**:") : seq_printf(seq, "%2.2u:", hr);
+       (min > 59) ? seq_puts(seq, "**:") : seq_printf(seq, "%2.2u:", min);
        (sec > 59) ? seq_puts(seq, "**\n") : seq_printf(seq, "%2.2u\n", sec);
 
        return 0;
@@ -163,15 +152,11 @@ static int acpi_system_alarm_open_fs(struct inode *inode, struct file *file)
        return single_open(file, acpi_system_alarm_seq_show, PDE(inode)->data);
 }
 
-
-static int
-get_date_field (
-       char                    **p,
-       u32                     *value)
+static int get_date_field(char **p, u32 * value)
 {
-       char                    *next = NULL;
-       char                    *string_end = NULL;
-       int                     result = -EINVAL;
+       char *next = NULL;
+       char *string_end = NULL;
+       int result = -EINVAL;
 
        /*
         * Try to find delimeter, only to insert null.  The end of the
@@ -193,26 +178,22 @@ get_date_field (
        return result;
 }
 
-
 static ssize_t
-acpi_system_write_alarm (
-       struct file             *file,
-       const char __user       *buffer,
-       size_t                  count,
-       loff_t                  *ppos)
+acpi_system_write_alarm(struct file *file,
+                       const char __user * buffer, size_t count, loff_t * ppos)
 {
-       int                     result = 0;
-       char                    alarm_string[30] = {'\0'};
-       char                    *p = alarm_string;
-       u32                     sec, min, hr, day, mo, yr;
-       int                     adjust = 0;
-       unsigned char           rtc_control = 0;
+       int result = 0;
+       char alarm_string[30] = { '\0' };
+       char *p = alarm_string;
+       u32 sec, min, hr, day, mo, yr;
+       int adjust = 0;
+       unsigned char rtc_control = 0;
 
        ACPI_FUNCTION_TRACE("acpi_system_write_alarm");
 
        if (count > sizeof(alarm_string) - 1)
                return_VALUE(-EINVAL);
-       
+
        if (copy_from_user(alarm_string, buffer, count))
                return_VALUE(-EFAULT);
 
@@ -271,10 +252,10 @@ acpi_system_write_alarm (
        }
 
        if (adjust) {
-               yr  += CMOS_READ(RTC_YEAR);
-               mo  += CMOS_READ(RTC_MONTH);
+               yr += CMOS_READ(RTC_YEAR);
+               mo += CMOS_READ(RTC_MONTH);
                day += CMOS_READ(RTC_DAY_OF_MONTH);
-               hr  += CMOS_READ(RTC_HOURS);
+               hr += CMOS_READ(RTC_HOURS);
                min += CMOS_READ(RTC_MINUTES);
                sec += CMOS_READ(RTC_SECONDS);
        }
@@ -343,7 +324,7 @@ acpi_system_write_alarm (
        if (acpi_gbl_FADT->mon_alrm)
                CMOS_WRITE(mo, acpi_gbl_FADT->mon_alrm);
        if (acpi_gbl_FADT->century)
-               CMOS_WRITE(yr/100, acpi_gbl_FADT->century);
+               CMOS_WRITE(yr / 100, acpi_gbl_FADT->century);
        /* enable the rtc alarm interrupt */
        rtc_control |= RTC_AIE;
        CMOS_WRITE(rtc_control, RTC_CONTROL);
@@ -357,35 +338,33 @@ acpi_system_write_alarm (
        *ppos += count;
 
        result = 0;
-end:
+      end:
        return_VALUE(result ? result : count);
 }
 
-extern struct list_head        acpi_wakeup_device_list;
+extern struct list_head acpi_wakeup_device_list;
 extern spinlock_t acpi_device_lock;
 
 static int
 acpi_system_wakeup_device_seq_show(struct seq_file *seq, void *offset)
 {
-       struct list_head * node, * next;
+       struct list_head *node, *next;
 
        seq_printf(seq, "Device Sleep state     Status\n");
 
        spin_lock(&acpi_device_lock);
        list_for_each_safe(node, next, &acpi_wakeup_device_list) {
-               struct acpi_device * dev = container_of(node, struct acpi_device, wakeup_list);
+               struct acpi_device *dev =
+                   container_of(node, struct acpi_device, wakeup_list);
 
                if (!dev->wakeup.flags.valid)
                        continue;
                spin_unlock(&acpi_device_lock);
-               if (dev->wakeup.flags.run_wake)
-                       seq_printf(seq, "%4s    %4d             %8s\n",
-                               dev->pnp.bus_id, (u32) dev->wakeup.sleep_state,
-                               dev->wakeup.state.enabled ? "*enabled" : "*disabled");
-               else
-                       seq_printf(seq, "%4s    %4d             %8s\n",
-                               dev->pnp.bus_id, (u32) dev->wakeup.sleep_state,
-                               dev->wakeup.state.enabled ? "enabled" : "disabled");
+               seq_printf(seq, "%4s    %4d             %s%8s\n",
+                          dev->pnp.bus_id,
+                          (u32) dev->wakeup.sleep_state,
+                          dev->wakeup.flags.run_wake ? "*" : "",
+                          dev->wakeup.state.enabled ? "enabled" : "disabled");
                spin_lock(&acpi_device_lock);
        }
        spin_unlock(&acpi_device_lock);
@@ -393,19 +372,18 @@ acpi_system_wakeup_device_seq_show(struct seq_file *seq, void *offset)
 }
 
 static ssize_t
-acpi_system_write_wakeup_device (
-       struct file             *file,
-       const char __user       *buffer,
-       size_t                  count,
-       loff_t                  *ppos)
+acpi_system_write_wakeup_device(struct file *file,
+                               const char __user * buffer,
+                               size_t count, loff_t * ppos)
 {
-       struct list_head * node, * next;
-       char            strbuf[5];
-       char            str[5] = "";
-       int             len = count;
+       struct list_head *node, *next;
+       char strbuf[5];
+       char str[5] = "";
+       int len = count;
        struct acpi_device *found_dev = NULL;
 
-       if (len > 4) len = 4;
+       if (len > 4)
+               len = 4;
 
        if (copy_from_user(strbuf, buffer, len))
                return -EFAULT;
@@ -414,28 +392,36 @@ acpi_system_write_wakeup_device (
 
        spin_lock(&acpi_device_lock);
        list_for_each_safe(node, next, &acpi_wakeup_device_list) {
-               struct acpi_device * dev = container_of(node, struct acpi_device, wakeup_list);
+               struct acpi_device *dev =
+                   container_of(node, struct acpi_device, wakeup_list);
                if (!dev->wakeup.flags.valid)
                        continue;
 
                if (!strncmp(dev->pnp.bus_id, str, 4)) {
-                       dev->wakeup.state.enabled = dev->wakeup.state.enabled ? 0:1;
+                       dev->wakeup.state.enabled =
+                           dev->wakeup.state.enabled ? 0 : 1;
                        found_dev = dev;
                        break;
                }
        }
        if (found_dev) {
                list_for_each_safe(node, next, &acpi_wakeup_device_list) {
-                       struct acpi_device * dev = container_of(node,
-                               struct acpi_device, wakeup_list);
+                       struct acpi_device *dev = container_of(node,
+                                                              struct
+                                                              acpi_device,
+                                                              wakeup_list);
 
                        if ((dev != found_dev) &&
-                               (dev->wakeup.gpe_number == found_dev->wakeup.gpe_number) &&
-                               (dev->wakeup.gpe_device == found_dev->wakeup.gpe_device)) {
-                               printk(KERN_WARNING "ACPI: '%s' and '%s' have the same GPE, "
-                                       "can't disable/enable one seperately\n",
-                                       dev->pnp.bus_id, found_dev->pnp.bus_id);
-                               dev->wakeup.state.enabled = found_dev->wakeup.state.enabled;
+                           (dev->wakeup.gpe_number ==
+                            found_dev->wakeup.gpe_number)
+                           && (dev->wakeup.gpe_device ==
+                               found_dev->wakeup.gpe_device)) {
+                               printk(KERN_WARNING
+                                      "ACPI: '%s' and '%s' have the same GPE, "
+                                      "can't disable/enable one seperately\n",
+                                      dev->pnp.bus_id, found_dev->pnp.bus_id);
+                               dev->wakeup.state.enabled =
+                                   found_dev->wakeup.state.enabled;
                        }
                }
        }
@@ -446,37 +432,37 @@ acpi_system_write_wakeup_device (
 static int
 acpi_system_wakeup_device_open_fs(struct inode *inode, struct file *file)
 {
-       return single_open(file, acpi_system_wakeup_device_seq_show, PDE(inode)->data);
+       return single_open(file, acpi_system_wakeup_device_seq_show,
+                          PDE(inode)->data);
 }
 
 static struct file_operations acpi_system_wakeup_device_fops = {
-       .open           = acpi_system_wakeup_device_open_fs,
-       .read           = seq_read,
-       .write          = acpi_system_write_wakeup_device,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_system_wakeup_device_open_fs,
+       .read = seq_read,
+       .write = acpi_system_write_wakeup_device,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 #ifdef CONFIG_ACPI_SLEEP_PROC_SLEEP
 static struct file_operations acpi_system_sleep_fops = {
-       .open           = acpi_system_sleep_open_fs,
-       .read           = seq_read,
-       .write          = acpi_system_write_sleep,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_system_sleep_open_fs,
+       .read = seq_read,
+       .write = acpi_system_write_sleep,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
-#endif /* CONFIG_ACPI_SLEEP_PROC_SLEEP */
+#endif                         /* CONFIG_ACPI_SLEEP_PROC_SLEEP */
 
 static struct file_operations acpi_system_alarm_fops = {
-       .open           = acpi_system_alarm_open_fs,
-       .read           = seq_read,
-       .write          = acpi_system_write_alarm,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_system_alarm_open_fs,
+       .read = seq_read,
+       .write = acpi_system_write_alarm,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
-
-static u32 rtc_handler(void * context)
+static u32 rtc_handler(void *context)
 {
        acpi_clear_event(ACPI_EVENT_RTC);
        acpi_disable_event(ACPI_EVENT_RTC, 0);
@@ -486,28 +472,31 @@ static u32 rtc_handler(void * context)
 
 static int acpi_sleep_proc_init(void)
 {
-       struct proc_dir_entry   *entry = NULL;
+       struct proc_dir_entry *entry = NULL;
 
        if (acpi_disabled)
                return 0;
+
 #ifdef CONFIG_ACPI_SLEEP_PROC_SLEEP
-       /* 'sleep' [R/W]*/
-       entry = create_proc_entry(ACPI_SYSTEM_FILE_SLEEP,
-                                 S_IFREG|S_IRUGO|S_IWUSR, acpi_root_dir);
+       /* 'sleep' [R/W] */
+       entry =
+           create_proc_entry("sleep", S_IFREG | S_IRUGO | S_IWUSR,
+                             acpi_root_dir);
        if (entry)
                entry->proc_fops = &acpi_system_sleep_fops;
 #endif
 
        /* 'alarm' [R/W] */
-       entry = create_proc_entry(ACPI_SYSTEM_FILE_ALARM,
-               S_IFREG|S_IRUGO|S_IWUSR, acpi_root_dir);
+       entry =
+           create_proc_entry("alarm", S_IFREG | S_IRUGO | S_IWUSR,
+                             acpi_root_dir);
        if (entry)
                entry->proc_fops = &acpi_system_alarm_fops;
 
-       /* 'wakeup device' [R/W]*/
-       entry = create_proc_entry(ACPI_SYSTEM_FILE_WAKEUP_DEVICE,
-                                 S_IFREG|S_IRUGO|S_IWUSR, acpi_root_dir);
+       /* 'wakeup device' [R/W] */
+       entry =
+           create_proc_entry("wakeup", S_IFREG | S_IRUGO | S_IWUSR,
+                             acpi_root_dir);
        if (entry)
                entry->proc_fops = &acpi_system_wakeup_device_fops;
 
index d9b199969d5d5f044277174fda48a1b8beceacad..4134ed43d026537e1886b288081ae33a09b046e6 100644 (file)
@@ -12,9 +12,9 @@
 #include "sleep.h"
 
 #define _COMPONENT             ACPI_SYSTEM_COMPONENT
-ACPI_MODULE_NAME               ("wakeup_devices")
+ACPI_MODULE_NAME("wakeup_devices")
 
-extern struct list_head        acpi_wakeup_device_list;
+extern struct list_head acpi_wakeup_device_list;
 extern spinlock_t acpi_device_lock;
 
 #ifdef CONFIG_ACPI_SLEEP
@@ -25,22 +25,21 @@ extern spinlock_t acpi_device_lock;
  * is higher than requested sleep level
  */
 
-void
-acpi_enable_wakeup_device_prep(
-       u8              sleep_state)
+void acpi_enable_wakeup_device_prep(u8 sleep_state)
 {
-       struct list_head * node, * next;
+       struct list_head *node, *next;
 
        ACPI_FUNCTION_TRACE("acpi_enable_wakeup_device_prep");
 
        spin_lock(&acpi_device_lock);
        list_for_each_safe(node, next, &acpi_wakeup_device_list) {
-               struct acpi_device * dev = container_of(node, 
-                       struct acpi_device, wakeup_list);
-               
-               if (!dev->wakeup.flags.valid || 
-                       !dev->wakeup.state.enabled ||
-                       (sleep_state > (u32) dev->wakeup.sleep_state))
+               struct acpi_device *dev = container_of(node,
+                                                      struct acpi_device,
+                                                      wakeup_list);
+
+               if (!dev->wakeup.flags.valid ||
+                   !dev->wakeup.state.enabled ||
+                   (sleep_state > (u32) dev->wakeup.sleep_state))
                        continue;
 
                spin_unlock(&acpi_device_lock);
@@ -55,11 +54,9 @@ acpi_enable_wakeup_device_prep(
  *     @sleep_state:   ACPI state
  * Enable all wakup devices's GPE
  */
-void
-acpi_enable_wakeup_device(
-       u8              sleep_state)
+void acpi_enable_wakeup_device(u8 sleep_state)
 {
-       struct list_head * node, * next;
+       struct list_head *node, *next;
 
        /* 
         * Caution: this routine must be invoked when interrupt is disabled 
@@ -68,33 +65,35 @@ acpi_enable_wakeup_device(
        ACPI_FUNCTION_TRACE("acpi_enable_wakeup_device");
        spin_lock(&acpi_device_lock);
        list_for_each_safe(node, next, &acpi_wakeup_device_list) {
-               struct acpi_device * dev = container_of(node, 
-                       struct acpi_device, wakeup_list);
+               struct acpi_device *dev = container_of(node,
+                                                      struct acpi_device,
+                                                      wakeup_list);
 
                /* If users want to disable run-wake GPE,
                 * we only disable it for wake and leave it for runtime
                 */
                if (dev->wakeup.flags.run_wake && !dev->wakeup.state.enabled) {
                        spin_unlock(&acpi_device_lock);
-                       acpi_set_gpe_type(dev->wakeup.gpe_device, 
-                               dev->wakeup.gpe_number, ACPI_GPE_TYPE_RUNTIME);
+                       acpi_set_gpe_type(dev->wakeup.gpe_device,
+                                         dev->wakeup.gpe_number,
+                                         ACPI_GPE_TYPE_RUNTIME);
                        /* Re-enable it, since set_gpe_type will disable it */
-                       acpi_enable_gpe(dev->wakeup.gpe_device, 
-                               dev->wakeup.gpe_number, ACPI_ISR);
+                       acpi_enable_gpe(dev->wakeup.gpe_device,
+                                       dev->wakeup.gpe_number, ACPI_ISR);
                        spin_lock(&acpi_device_lock);
                        continue;
                }
 
                if (!dev->wakeup.flags.valid ||
-                       !dev->wakeup.state.enabled ||
-                       (sleep_state > (u32) dev->wakeup.sleep_state))
+                   !dev->wakeup.state.enabled ||
+                   (sleep_state > (u32) dev->wakeup.sleep_state))
                        continue;
 
                spin_unlock(&acpi_device_lock);
                /* run-wake GPE has been enabled */
                if (!dev->wakeup.flags.run_wake)
-                       acpi_enable_gpe(dev->wakeup.gpe_device, 
-                               dev->wakeup.gpe_number, ACPI_ISR);
+                       acpi_enable_gpe(dev->wakeup.gpe_device,
+                                       dev->wakeup.gpe_number, ACPI_ISR);
                dev->wakeup.state.active = 1;
                spin_lock(&acpi_device_lock);
        }
@@ -106,43 +105,43 @@ acpi_enable_wakeup_device(
  *     @sleep_state:   ACPI state
  * Disable all wakup devices's GPE and wakeup capability
  */
-void
-acpi_disable_wakeup_device (
-       u8              sleep_state)
+void acpi_disable_wakeup_device(u8 sleep_state)
 {
-       struct list_head * node, * next;
+       struct list_head *node, *next;
 
        ACPI_FUNCTION_TRACE("acpi_disable_wakeup_device");
 
        spin_lock(&acpi_device_lock);
        list_for_each_safe(node, next, &acpi_wakeup_device_list) {
-               struct acpi_device * dev = container_of(node, 
-                       struct acpi_device, wakeup_list);
+               struct acpi_device *dev = container_of(node,
+                                                      struct acpi_device,
+                                                      wakeup_list);
 
                if (dev->wakeup.flags.run_wake && !dev->wakeup.state.enabled) {
                        spin_unlock(&acpi_device_lock);
-                       acpi_set_gpe_type(dev->wakeup.gpe_device, 
-                               dev->wakeup.gpe_number, ACPI_GPE_TYPE_WAKE_RUN);
+                       acpi_set_gpe_type(dev->wakeup.gpe_device,
+                                         dev->wakeup.gpe_number,
+                                         ACPI_GPE_TYPE_WAKE_RUN);
                        /* Re-enable it, since set_gpe_type will disable it */
-                       acpi_enable_gpe(dev->wakeup.gpe_device, 
-                               dev->wakeup.gpe_number, ACPI_NOT_ISR);
+                       acpi_enable_gpe(dev->wakeup.gpe_device,
+                                       dev->wakeup.gpe_number, ACPI_NOT_ISR);
                        spin_lock(&acpi_device_lock);
                        continue;
                }
 
-               if (!dev->wakeup.flags.valid || 
-                       !dev->wakeup.state.active ||
-                       (sleep_state > (u32) dev->wakeup.sleep_state))
+               if (!dev->wakeup.flags.valid ||
+                   !dev->wakeup.state.active ||
+                   (sleep_state > (u32) dev->wakeup.sleep_state))
                        continue;
 
                spin_unlock(&acpi_device_lock);
                acpi_disable_wakeup_device_power(dev);
                /* Never disable run-wake GPE */
                if (!dev->wakeup.flags.run_wake) {
-                       acpi_disable_gpe(dev->wakeup.gpe_device, 
-                               dev->wakeup.gpe_number, ACPI_NOT_ISR);
-                       acpi_clear_gpe(dev->wakeup.gpe_device, 
-                               dev->wakeup.gpe_number, ACPI_NOT_ISR);
+                       acpi_disable_gpe(dev->wakeup.gpe_device,
+                                        dev->wakeup.gpe_number, ACPI_NOT_ISR);
+                       acpi_clear_gpe(dev->wakeup.gpe_device,
+                                      dev->wakeup.gpe_number, ACPI_NOT_ISR);
                }
                dev->wakeup.state.active = 0;
                spin_lock(&acpi_device_lock);
@@ -152,7 +151,7 @@ acpi_disable_wakeup_device (
 
 static int __init acpi_wakeup_device_init(void)
 {
-       struct list_head * node, * next;
+       struct list_head *node, *next;
 
        if (acpi_disabled)
                return 0;
@@ -160,16 +159,18 @@ static int __init acpi_wakeup_device_init(void)
 
        spin_lock(&acpi_device_lock);
        list_for_each_safe(node, next, &acpi_wakeup_device_list) {
-               struct acpi_device * dev = container_of(node, 
-                       struct acpi_device, wakeup_list);
-               
+               struct acpi_device *dev = container_of(node,
+                                                      struct acpi_device,
+                                                      wakeup_list);
+
                /* In case user doesn't load button driver */
                if (dev->wakeup.flags.run_wake && !dev->wakeup.state.enabled) {
                        spin_unlock(&acpi_device_lock);
-                       acpi_set_gpe_type(dev->wakeup.gpe_device, 
-                               dev->wakeup.gpe_number, ACPI_GPE_TYPE_WAKE_RUN);
-                       acpi_enable_gpe(dev->wakeup.gpe_device, 
-                               dev->wakeup.gpe_number, ACPI_NOT_ISR);
+                       acpi_set_gpe_type(dev->wakeup.gpe_device,
+                                         dev->wakeup.gpe_number,
+                                         ACPI_GPE_TYPE_WAKE_RUN);
+                       acpi_enable_gpe(dev->wakeup.gpe_device,
+                                       dev->wakeup.gpe_number, ACPI_NOT_ISR);
                        dev->wakeup.state.enabled = 1;
                        spin_lock(&acpi_device_lock);
                }
@@ -193,17 +194,19 @@ late_initcall(acpi_wakeup_device_init);
  */
 void acpi_wakeup_gpe_poweroff_prepare(void)
 {
-       struct list_head * node, * next;
+       struct list_head *node, *next;
 
        list_for_each_safe(node, next, &acpi_wakeup_device_list) {
-               struct acpi_device * dev = container_of(node,
-                       struct acpi_device, wakeup_list);
+               struct acpi_device *dev = container_of(node,
+                                                      struct acpi_device,
+                                                      wakeup_list);
 
                /* The GPE can wakeup system from S5, don't touch it */
-               if ((u32)dev->wakeup.sleep_state == ACPI_STATE_S5)
+               if ((u32) dev->wakeup.sleep_state == ACPI_STATE_S5)
                        continue;
                /* acpi_set_gpe_type will automatically disable GPE */
                acpi_set_gpe_type(dev->wakeup.gpe_device,
-                       dev->wakeup.gpe_number, ACPI_GPE_TYPE_RUNTIME);
+                                 dev->wakeup.gpe_number,
+                                 ACPI_GPE_TYPE_RUNTIME);
        }
 }
index 8925a6ca5f87561707f00b7fd8d2219d1f317b71..e4308c7a6743ba54766cac05669db2e9fd2e8c64 100644 (file)
 
 #include <acpi/acpi_drivers.h>
 
-
 #define _COMPONENT             ACPI_SYSTEM_COMPONENT
-ACPI_MODULE_NAME               ("acpi_system")
-
+ACPI_MODULE_NAME("acpi_system")
 #define ACPI_SYSTEM_CLASS              "system"
 #define ACPI_SYSTEM_DRIVER_NAME                "ACPI System Driver"
 #define ACPI_SYSTEM_DEVICE_NAME                "System"
@@ -41,15 +39,13 @@ ACPI_MODULE_NAME            ("acpi_system")
 #define ACPI_SYSTEM_FILE_EVENT         "event"
 #define ACPI_SYSTEM_FILE_DSDT          "dsdt"
 #define ACPI_SYSTEM_FILE_FADT          "fadt"
-
-extern FADT_DESCRIPTOR         acpi_fadt;
+extern FADT_DESCRIPTOR acpi_fadt;
 
 /* --------------------------------------------------------------------------
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-static int
-acpi_system_read_info (struct seq_file *seq, void *offset)
+static int acpi_system_read_info(struct seq_file *seq, void *offset)
 {
        ACPI_FUNCTION_TRACE("acpi_system_read_info");
 
@@ -63,28 +59,26 @@ static int acpi_system_info_open_fs(struct inode *inode, struct file *file)
 }
 
 static struct file_operations acpi_system_info_ops = {
-       .open           = acpi_system_info_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_system_info_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
-static ssize_t acpi_system_read_dsdt (struct file*, char __user *, size_t, loff_t*);
+static ssize_t acpi_system_read_dsdt(struct file *, char __user *, size_t,
+                                    loff_t *);
 
 static struct file_operations acpi_system_dsdt_ops = {
-       .read =                 acpi_system_read_dsdt,
+       .read = acpi_system_read_dsdt,
 };
 
 static ssize_t
-acpi_system_read_dsdt (
-       struct file             *file,
-       char                    __user *buffer,
-       size_t                  count,
-       loff_t                  *ppos)
+acpi_system_read_dsdt(struct file *file,
+                     char __user * buffer, size_t count, loff_t * ppos)
 {
-       acpi_status             status = AE_OK;
-       struct acpi_buffer      dsdt = {ACPI_ALLOCATE_BUFFER, NULL};
-       ssize_t                 res;
+       acpi_status status = AE_OK;
+       struct acpi_buffer dsdt = { ACPI_ALLOCATE_BUFFER, NULL };
+       ssize_t res;
 
        ACPI_FUNCTION_TRACE("acpi_system_read_dsdt");
 
@@ -99,23 +93,20 @@ acpi_system_read_dsdt (
        return_VALUE(res);
 }
 
-
-static ssize_t acpi_system_read_fadt (struct file*, char __user *, size_t, loff_t*);
+static ssize_t acpi_system_read_fadt(struct file *, char __user *, size_t,
+                                    loff_t *);
 
 static struct file_operations acpi_system_fadt_ops = {
-       .read =                 acpi_system_read_fadt,
+       .read = acpi_system_read_fadt,
 };
 
 static ssize_t
-acpi_system_read_fadt (
-       struct file             *file,
-       char                    __user *buffer,
-       size_t                  count,
-       loff_t                  *ppos)
+acpi_system_read_fadt(struct file *file,
+                     char __user * buffer, size_t count, loff_t * ppos)
 {
-       acpi_status             status = AE_OK;
-       struct acpi_buffer      fadt = {ACPI_ALLOCATE_BUFFER, NULL};
-       ssize_t                 res;
+       acpi_status status = AE_OK;
+       struct acpi_buffer fadt = { ACPI_ALLOCATE_BUFFER, NULL };
+       ssize_t res;
 
        ACPI_FUNCTION_TRACE("acpi_system_read_fadt");
 
@@ -130,12 +121,11 @@ acpi_system_read_fadt (
        return_VALUE(res);
 }
 
-
-static int __init acpi_system_init (void)
+static int __init acpi_system_init(void)
 {
-       struct proc_dir_entry   *entry;
+       struct proc_dir_entry *entry;
        int error = 0;
-       char * name;
+       char *name;
 
        ACPI_FUNCTION_TRACE("acpi_system_init");
 
@@ -144,8 +134,7 @@ static int __init acpi_system_init (void)
 
        /* 'info' [R] */
        name = ACPI_SYSTEM_FILE_INFO;
-       entry = create_proc_entry(name,
-               S_IRUGO, acpi_root_dir);
+       entry = create_proc_entry(name, S_IRUGO, acpi_root_dir);
        if (!entry)
                goto Error;
        else {
@@ -157,7 +146,7 @@ static int __init acpi_system_init (void)
        entry = create_proc_entry(name, S_IRUSR, acpi_root_dir);
        if (entry)
                entry->proc_fops = &acpi_system_dsdt_ops;
-       else 
+       else
                goto Error;
 
        /* 'fadt' [R] */
@@ -168,12 +157,12 @@ static int __init acpi_system_init (void)
        else
                goto Error;
 
- Done:
     Done:
        return_VALUE(error);
 
- Error:
-       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                        "Unable to create '%s' proc fs entry\n", name));
     Error:
+       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                         "Unable to create '%s' proc fs entry\n", name));
 
        remove_proc_entry(ACPI_SYSTEM_FILE_FADT, acpi_root_dir);
        remove_proc_entry(ACPI_SYSTEM_FILE_DSDT, acpi_root_dir);
@@ -183,5 +172,4 @@ static int __init acpi_system_init (void)
        goto Done;
 }
 
-
 subsys_initcall(acpi_system_init);
index fb64bd5d2e18c9bc42c0cbb56c5739dbbca955b6..a2bf25b05e1c08156d77571505e162c51fbc7075 100644 (file)
 #define ACPI_MAX_TABLES                256
 
 static char *acpi_table_signatures[ACPI_TABLE_COUNT] = {
-       [ACPI_TABLE_UNKNOWN]    = "????",
-       [ACPI_APIC]             = "APIC",
-       [ACPI_BOOT]             = "BOOT",
-       [ACPI_DBGP]             = "DBGP",
-       [ACPI_DSDT]             = "DSDT",
-       [ACPI_ECDT]             = "ECDT",
-       [ACPI_ETDT]             = "ETDT",
-       [ACPI_FADT]             = "FACP",
-       [ACPI_FACS]             = "FACS",
-       [ACPI_OEMX]             = "OEM",
-       [ACPI_PSDT]             = "PSDT",
-       [ACPI_SBST]             = "SBST",
-       [ACPI_SLIT]             = "SLIT",
-       [ACPI_SPCR]             = "SPCR",
-       [ACPI_SRAT]             = "SRAT",
-       [ACPI_SSDT]             = "SSDT",
-       [ACPI_SPMI]             = "SPMI",
-       [ACPI_HPET]             = "HPET",
-       [ACPI_MCFG]             = "MCFG",
+       [ACPI_TABLE_UNKNOWN] = "????",
+       [ACPI_APIC] = "APIC",
+       [ACPI_BOOT] = "BOOT",
+       [ACPI_DBGP] = "DBGP",
+       [ACPI_DSDT] = "DSDT",
+       [ACPI_ECDT] = "ECDT",
+       [ACPI_ETDT] = "ETDT",
+       [ACPI_FADT] = "FACP",
+       [ACPI_FACS] = "FACS",
+       [ACPI_OEMX] = "OEM",
+       [ACPI_PSDT] = "PSDT",
+       [ACPI_SBST] = "SBST",
+       [ACPI_SLIT] = "SLIT",
+       [ACPI_SPCR] = "SPCR",
+       [ACPI_SRAT] = "SRAT",
+       [ACPI_SSDT] = "SSDT",
+       [ACPI_SPMI] = "SPMI",
+       [ACPI_HPET] = "HPET",
+       [ACPI_MCFG] = "MCFG",
 };
 
 static char *mps_inti_flags_polarity[] = { "dfl", "high", "res", "low" };
@@ -66,52 +66,44 @@ static char *mps_inti_flags_trigger[] = { "dfl", "edge", "res", "level" };
 
 /* System Description Table (RSDT/XSDT) */
 struct acpi_table_sdt {
-       unsigned long           pa;
-       enum acpi_table_id      id;
-       unsigned long           size;
+       unsigned long pa;
+       enum acpi_table_id id;
+       unsigned long size;
 } __attribute__ ((packed));
 
-static unsigned long           sdt_pa;         /* Physical Address */
-static unsigned long           sdt_count;      /* Table count */
+static unsigned long sdt_pa;   /* Physical Address */
+static unsigned long sdt_count;        /* Table count */
 
-static struct acpi_table_sdt   sdt_entry[ACPI_MAX_TABLES];
+static struct acpi_table_sdt sdt_entry[ACPI_MAX_TABLES];
 
-void
-acpi_table_print (
-       struct acpi_table_header *header,
-       unsigned long           phys_addr)
+void acpi_table_print(struct acpi_table_header *header, unsigned long phys_addr)
 {
-       char                    *name = NULL;
+       char *name = NULL;
 
        if (!header)
                return;
 
        /* Some table signatures aren't good table names */
 
-       if (!strncmp((char *) &header->signature,
-               acpi_table_signatures[ACPI_APIC],
-               sizeof(header->signature))) {
+       if (!strncmp((char *)&header->signature,
+                    acpi_table_signatures[ACPI_APIC],
+                    sizeof(header->signature))) {
                name = "MADT";
-       }
-       else if (!strncmp((char *) &header->signature,
-               acpi_table_signatures[ACPI_FADT],
-               sizeof(header->signature))) {
+       } else if (!strncmp((char *)&header->signature,
+                           acpi_table_signatures[ACPI_FADT],
+                           sizeof(header->signature))) {
                name = "FADT";
-       }
-       else
+       } else
                name = header->signature;
 
-       printk(KERN_DEBUG PREFIX "%.4s (v%3.3d %6.6s %8.8s 0x%08x %.4s 0x%08x) @ 0x%p\n",
-               name, header->revision, header->oem_id,
-               header->oem_table_id, header->oem_revision,
-               header->asl_compiler_id, header->asl_compiler_revision,
-               (void *) phys_addr);
+       printk(KERN_DEBUG PREFIX
+              "%.4s (v%3.3d %6.6s %8.8s 0x%08x %.4s 0x%08x) @ 0x%p\n", name,
+              header->revision, header->oem_id, header->oem_table_id,
+              header->oem_revision, header->asl_compiler_id,
+              header->asl_compiler_revision, (void *)phys_addr);
 }
 
-
-void
-acpi_table_print_madt_entry (
-       acpi_table_entry_header *header)
+void acpi_table_print_madt_entry(acpi_table_entry_header * header)
 {
        if (!header)
                return;
@@ -119,113 +111,127 @@ acpi_table_print_madt_entry (
        switch (header->type) {
 
        case ACPI_MADT_LAPIC:
-       {
-               struct acpi_table_lapic *p =
-                       (struct acpi_table_lapic*) header;
-               printk(KERN_INFO PREFIX "LAPIC (acpi_id[0x%02x] lapic_id[0x%02x] %s)\n",
-                       p->acpi_id, p->id, p->flags.enabled?"enabled":"disabled");
-       }
+               {
+                       struct acpi_table_lapic *p =
+                           (struct acpi_table_lapic *)header;
+                       printk(KERN_INFO PREFIX
+                              "LAPIC (acpi_id[0x%02x] lapic_id[0x%02x] %s)\n",
+                              p->acpi_id, p->id,
+                              p->flags.enabled ? "enabled" : "disabled");
+               }
                break;
 
        case ACPI_MADT_IOAPIC:
-       {
-               struct acpi_table_ioapic *p =
-                       (struct acpi_table_ioapic*) header;
-               printk(KERN_INFO PREFIX "IOAPIC (id[0x%02x] address[0x%08x] gsi_base[%d])\n",
-                       p->id, p->address, p->global_irq_base);
-       }
+               {
+                       struct acpi_table_ioapic *p =
+                           (struct acpi_table_ioapic *)header;
+                       printk(KERN_INFO PREFIX
+                              "IOAPIC (id[0x%02x] address[0x%08x] gsi_base[%d])\n",
+                              p->id, p->address, p->global_irq_base);
+               }
                break;
 
        case ACPI_MADT_INT_SRC_OVR:
-       {
-               struct acpi_table_int_src_ovr *p =
-                       (struct acpi_table_int_src_ovr*) header;
-               printk(KERN_INFO PREFIX "INT_SRC_OVR (bus %d bus_irq %d global_irq %d %s %s)\n",
-                       p->bus, p->bus_irq, p->global_irq,
-                       mps_inti_flags_polarity[p->flags.polarity],
-                       mps_inti_flags_trigger[p->flags.trigger]);
-               if(p->flags.reserved)
-                       printk(KERN_INFO PREFIX "INT_SRC_OVR unexpected reserved flags: 0x%x\n",
-                               p->flags.reserved);
+               {
+                       struct acpi_table_int_src_ovr *p =
+                           (struct acpi_table_int_src_ovr *)header;
+                       printk(KERN_INFO PREFIX
+                              "INT_SRC_OVR (bus %d bus_irq %d global_irq %d %s %s)\n",
+                              p->bus, p->bus_irq, p->global_irq,
+                              mps_inti_flags_polarity[p->flags.polarity],
+                              mps_inti_flags_trigger[p->flags.trigger]);
+                       if (p->flags.reserved)
+                               printk(KERN_INFO PREFIX
+                                      "INT_SRC_OVR unexpected reserved flags: 0x%x\n",
+                                      p->flags.reserved);
 
-       }
+               }
                break;
 
        case ACPI_MADT_NMI_SRC:
-       {
-               struct acpi_table_nmi_src *p =
-                       (struct acpi_table_nmi_src*) header;
-               printk(KERN_INFO PREFIX "NMI_SRC (%s %s global_irq %d)\n",
-                       mps_inti_flags_polarity[p->flags.polarity],
-                       mps_inti_flags_trigger[p->flags.trigger], p->global_irq);
-       }
+               {
+                       struct acpi_table_nmi_src *p =
+                           (struct acpi_table_nmi_src *)header;
+                       printk(KERN_INFO PREFIX
+                              "NMI_SRC (%s %s global_irq %d)\n",
+                              mps_inti_flags_polarity[p->flags.polarity],
+                              mps_inti_flags_trigger[p->flags.trigger],
+                              p->global_irq);
+               }
                break;
 
        case ACPI_MADT_LAPIC_NMI:
-       {
-               struct acpi_table_lapic_nmi *p =
-                       (struct acpi_table_lapic_nmi*) header;
-               printk(KERN_INFO PREFIX "LAPIC_NMI (acpi_id[0x%02x] %s %s lint[0x%x])\n",
-                       p->acpi_id,
-                       mps_inti_flags_polarity[p->flags.polarity],
-                       mps_inti_flags_trigger[p->flags.trigger], p->lint);
-       }
+               {
+                       struct acpi_table_lapic_nmi *p =
+                           (struct acpi_table_lapic_nmi *)header;
+                       printk(KERN_INFO PREFIX
+                              "LAPIC_NMI (acpi_id[0x%02x] %s %s lint[0x%x])\n",
+                              p->acpi_id,
+                              mps_inti_flags_polarity[p->flags.polarity],
+                              mps_inti_flags_trigger[p->flags.trigger],
+                              p->lint);
+               }
                break;
 
        case ACPI_MADT_LAPIC_ADDR_OVR:
-       {
-               struct acpi_table_lapic_addr_ovr *p =
-                       (struct acpi_table_lapic_addr_ovr*) header;
-               printk(KERN_INFO PREFIX "LAPIC_ADDR_OVR (address[%p])\n",
-                       (void *) (unsigned long) p->address);
-       }
+               {
+                       struct acpi_table_lapic_addr_ovr *p =
+                           (struct acpi_table_lapic_addr_ovr *)header;
+                       printk(KERN_INFO PREFIX
+                              "LAPIC_ADDR_OVR (address[%p])\n",
+                              (void *)(unsigned long)p->address);
+               }
                break;
 
        case ACPI_MADT_IOSAPIC:
-       {
-               struct acpi_table_iosapic *p =
-                       (struct acpi_table_iosapic*) header;
-               printk(KERN_INFO PREFIX "IOSAPIC (id[0x%x] address[%p] gsi_base[%d])\n",
-                       p->id, (void *) (unsigned long) p->address, p->global_irq_base);
-       }
+               {
+                       struct acpi_table_iosapic *p =
+                           (struct acpi_table_iosapic *)header;
+                       printk(KERN_INFO PREFIX
+                              "IOSAPIC (id[0x%x] address[%p] gsi_base[%d])\n",
+                              p->id, (void *)(unsigned long)p->address,
+                              p->global_irq_base);
+               }
                break;
 
        case ACPI_MADT_LSAPIC:
-       {
-               struct acpi_table_lsapic *p =
-                       (struct acpi_table_lsapic*) header;
-               printk(KERN_INFO PREFIX "LSAPIC (acpi_id[0x%02x] lsapic_id[0x%02x] lsapic_eid[0x%02x] %s)\n",
-                       p->acpi_id, p->id, p->eid, p->flags.enabled?"enabled":"disabled");
-       }
+               {
+                       struct acpi_table_lsapic *p =
+                           (struct acpi_table_lsapic *)header;
+                       printk(KERN_INFO PREFIX
+                              "LSAPIC (acpi_id[0x%02x] lsapic_id[0x%02x] lsapic_eid[0x%02x] %s)\n",
+                              p->acpi_id, p->id, p->eid,
+                              p->flags.enabled ? "enabled" : "disabled");
+               }
                break;
 
        case ACPI_MADT_PLAT_INT_SRC:
-       {
-               struct acpi_table_plat_int_src *p =
-                       (struct acpi_table_plat_int_src*) header;
-               printk(KERN_INFO PREFIX "PLAT_INT_SRC (%s %s type[0x%x] id[0x%04x] eid[0x%x] iosapic_vector[0x%x] global_irq[0x%x]\n",
-                       mps_inti_flags_polarity[p->flags.polarity],
-                       mps_inti_flags_trigger[p->flags.trigger],
-                       p->type, p->id, p->eid, p->iosapic_vector, p->global_irq);
-       }
+               {
+                       struct acpi_table_plat_int_src *p =
+                           (struct acpi_table_plat_int_src *)header;
+                       printk(KERN_INFO PREFIX
+                              "PLAT_INT_SRC (%s %s type[0x%x] id[0x%04x] eid[0x%x] iosapic_vector[0x%x] global_irq[0x%x]\n",
+                              mps_inti_flags_polarity[p->flags.polarity],
+                              mps_inti_flags_trigger[p->flags.trigger],
+                              p->type, p->id, p->eid, p->iosapic_vector,
+                              p->global_irq);
+               }
                break;
 
        default:
-               printk(KERN_WARNING PREFIX "Found unsupported MADT entry (type = 0x%x)\n",
-                       header->type);
+               printk(KERN_WARNING PREFIX
+                      "Found unsupported MADT entry (type = 0x%x)\n",
+                      header->type);
                break;
        }
 }
 
-
 static int
-acpi_table_compute_checksum (
-       void                    *table_pointer,
-       unsigned long           length)
+acpi_table_compute_checksum(void *table_pointer, unsigned long length)
 {
-       u8                      *p = (u8 *) table_pointer;
-       unsigned long           remains = length;
-       unsigned long           sum = 0;
+       u8 *p = (u8 *) table_pointer;
+       unsigned long remains = length;
+       unsigned long sum = 0;
 
        if (!p || !length)
                return -EINVAL;
@@ -241,9 +247,8 @@ acpi_table_compute_checksum (
  * for acpi_blacklisted(), acpi_table_get_sdt()
  */
 int __init
-acpi_get_table_header_early (
-       enum acpi_table_id      id,
-       struct acpi_table_header **header)
+acpi_get_table_header_early(enum acpi_table_id id,
+                           struct acpi_table_header **header)
 {
        unsigned int i;
        enum acpi_table_id temp_id;
@@ -260,7 +265,7 @@ acpi_get_table_header_early (
                if (sdt_entry[i].id != temp_id)
                        continue;
                *header = (void *)
-                       __acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
+                   __acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
                if (!*header) {
                        printk(KERN_WARNING PREFIX "Unable to map %s\n",
                               acpi_table_signatures[temp_id]);
@@ -277,14 +282,17 @@ acpi_get_table_header_early (
 
        /* Map the DSDT header via the pointer in the FADT */
        if (id == ACPI_DSDT) {
-               struct fadt_descriptor_rev2 *fadt = (struct fadt_descriptor_rev2 *) *header;
+               struct fadt_descriptor_rev2 *fadt =
+                   (struct fadt_descriptor_rev2 *)*header;
 
                if (fadt->revision == 3 && fadt->Xdsdt) {
-                       *header = (void *) __acpi_map_table(fadt->Xdsdt,
-                                       sizeof(struct acpi_table_header));
+                       *header = (void *)__acpi_map_table(fadt->Xdsdt,
+                                                          sizeof(struct
+                                                                 acpi_table_header));
                } else if (fadt->V1_dsdt) {
-                       *header = (void *) __acpi_map_table(fadt->V1_dsdt,
-                                       sizeof(struct acpi_table_header));
+                       *header = (void *)__acpi_map_table(fadt->V1_dsdt,
+                                                          sizeof(struct
+                                                                 acpi_table_header));
                } else
                        *header = NULL;
 
@@ -296,21 +304,19 @@ acpi_get_table_header_early (
 
        return 0;
 }
-        
 
 int __init
-acpi_table_parse_madt_family (
-       enum acpi_table_id      id,
-       unsigned long           madt_size,
-       int                     entry_id,
-       acpi_madt_entry_handler handler,
-       unsigned int            max_entries)
+acpi_table_parse_madt_family(enum acpi_table_id id,
+                            unsigned long madt_size,
+                            int entry_id,
+                            acpi_madt_entry_handler handler,
+                            unsigned int max_entries)
 {
-       void                    *madt = NULL;
-       acpi_table_entry_header *entry;
-       unsigned int            count = 0;
-       unsigned long           madt_end;
-       unsigned int            i;
+       void *madt = NULL;
+       acpi_table_entry_header *entry;
+       unsigned int count = 0;
+       unsigned long madt_end;
+       unsigned int i;
 
        if (!handler)
                return -EINVAL;
@@ -321,7 +327,7 @@ acpi_table_parse_madt_family (
                if (sdt_entry[i].id != id)
                        continue;
                madt = (void *)
-                       __acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
+                   __acpi_map_table(sdt_entry[i].pa, sdt_entry[i].size);
                if (!madt) {
                        printk(KERN_WARNING PREFIX "Unable to map %s\n",
                               acpi_table_signatures[id]);
@@ -336,21 +342,22 @@ acpi_table_parse_madt_family (
                return -ENODEV;
        }
 
-       madt_end = (unsigned long) madt + sdt_entry[i].size;
+       madt_end = (unsigned long)madt + sdt_entry[i].size;
 
        /* Parse all entries looking for a match. */
 
        entry = (acpi_table_entry_header *)
-               ((unsigned long) madt + madt_size);
+           ((unsigned long)madt + madt_size);
 
-       while (((unsigned long) entry) + sizeof(acpi_table_entry_header) < madt_end) {
-               if (entry->type == entry_id &&
-                   (!max_entries || count++ < max_entries))
+       while (((unsigned long)entry) + sizeof(acpi_table_entry_header) <
+              madt_end) {
+               if (entry->type == entry_id
+                   && (!max_entries || count++ < max_entries))
                        if (handler(entry, madt_end))
                                return -EINVAL;
 
                entry = (acpi_table_entry_header *)
-                       ((unsigned long) entry + entry->length);
+                   ((unsigned long)entry + entry->length);
        }
        if (max_entries && count > max_entries) {
                printk(KERN_WARNING PREFIX "[%s:0x%02x] ignored %i entries of "
@@ -361,25 +368,19 @@ acpi_table_parse_madt_family (
        return count;
 }
 
-
 int __init
-acpi_table_parse_madt (
-       enum acpi_madt_entry_id id,
-       acpi_madt_entry_handler handler,
-       unsigned int max_entries)
+acpi_table_parse_madt(enum acpi_madt_entry_id id,
+                     acpi_madt_entry_handler handler, unsigned int max_entries)
 {
-       return acpi_table_parse_madt_family(ACPI_APIC, sizeof(struct acpi_table_madt),
-                                           id, handler, max_entries);
+       return acpi_table_parse_madt_family(ACPI_APIC,
+                                           sizeof(struct acpi_table_madt), id,
+                                           handler, max_entries);
 }
 
-
-int __init
-acpi_table_parse (
-       enum acpi_table_id      id,
-       acpi_table_handler      handler)
+int __init acpi_table_parse(enum acpi_table_id id, acpi_table_handler handler)
 {
-       int                     count = 0;
-       unsigned int            i = 0;
+       int count = 0;
+       unsigned int i = 0;
 
        if (!handler)
                return -EINVAL;
@@ -392,20 +393,18 @@ acpi_table_parse (
                        handler(sdt_entry[i].pa, sdt_entry[i].size);
 
                else
-                       printk(KERN_WARNING PREFIX "%d duplicate %s table ignored.\n",
-                               count, acpi_table_signatures[id]);
+                       printk(KERN_WARNING PREFIX
+                              "%d duplicate %s table ignored.\n", count,
+                              acpi_table_signatures[id]);
        }
 
        return count;
 }
 
-
-static int __init
-acpi_table_get_sdt (
-       struct acpi_table_rsdp  *rsdp)
+static int __init acpi_table_get_sdt(struct acpi_table_rsdp *rsdp)
 {
        struct acpi_table_header *header = NULL;
-       unsigned int            i, id = 0;
+       unsigned int i, id = 0;
 
        if (!rsdp)
                return -EINVAL;
@@ -413,24 +412,25 @@ acpi_table_get_sdt (
        /* First check XSDT (but only on ACPI 2.0-compatible systems) */
 
        if ((rsdp->revision >= 2) &&
-               (((struct acpi20_table_rsdp*)rsdp)->xsdt_address)) {
-                       
-               struct acpi_table_xsdt  *mapped_xsdt = NULL;
+           (((struct acpi20_table_rsdp *)rsdp)->xsdt_address)) {
+
+               struct acpi_table_xsdt *mapped_xsdt = NULL;
 
-               sdt_pa = ((struct acpi20_table_rsdp*)rsdp)->xsdt_address;
+               sdt_pa = ((struct acpi20_table_rsdp *)rsdp)->xsdt_address;
 
                /* map in just the header */
                header = (struct acpi_table_header *)
-                       __acpi_map_table(sdt_pa, sizeof(struct acpi_table_header));
+                   __acpi_map_table(sdt_pa, sizeof(struct acpi_table_header));
 
                if (!header) {
-                       printk(KERN_WARNING PREFIX "Unable to map XSDT header\n");
+                       printk(KERN_WARNING PREFIX
+                              "Unable to map XSDT header\n");
                        return -ENODEV;
                }
 
                /* remap in the entire table before processing */
                mapped_xsdt = (struct acpi_table_xsdt *)
-                       __acpi_map_table(sdt_pa, header->length);
+                   __acpi_map_table(sdt_pa, header->length);
                if (!mapped_xsdt) {
                        printk(KERN_WARNING PREFIX "Unable to map XSDT\n");
                        return -ENODEV;
@@ -438,7 +438,8 @@ acpi_table_get_sdt (
                header = &mapped_xsdt->header;
 
                if (strncmp(header->signature, "XSDT", 4)) {
-                       printk(KERN_WARNING PREFIX "XSDT signature incorrect\n");
+                       printk(KERN_WARNING PREFIX
+                              "XSDT signature incorrect\n");
                        return -ENODEV;
                }
 
@@ -447,36 +448,39 @@ acpi_table_get_sdt (
                        return -ENODEV;
                }
 
-               sdt_count = (header->length - sizeof(struct acpi_table_header)) >> 3;
+               sdt_count =
+                   (header->length - sizeof(struct acpi_table_header)) >> 3;
                if (sdt_count > ACPI_MAX_TABLES) {
-                       printk(KERN_WARNING PREFIX "Truncated %lu XSDT entries\n",
-                               (sdt_count - ACPI_MAX_TABLES));
+                       printk(KERN_WARNING PREFIX
+                              "Truncated %lu XSDT entries\n",
+                              (sdt_count - ACPI_MAX_TABLES));
                        sdt_count = ACPI_MAX_TABLES;
                }
 
                for (i = 0; i < sdt_count; i++)
-                       sdt_entry[i].pa = (unsigned long) mapped_xsdt->entry[i];
+                       sdt_entry[i].pa = (unsigned long)mapped_xsdt->entry[i];
        }
 
        /* Then check RSDT */
 
        else if (rsdp->rsdt_address) {
 
-               struct acpi_table_rsdt  *mapped_rsdt = NULL;
+               struct acpi_table_rsdt *mapped_rsdt = NULL;
 
                sdt_pa = rsdp->rsdt_address;
 
                /* map in just the header */
                header = (struct acpi_table_header *)
-                       __acpi_map_table(sdt_pa, sizeof(struct acpi_table_header));
+                   __acpi_map_table(sdt_pa, sizeof(struct acpi_table_header));
                if (!header) {
-                       printk(KERN_WARNING PREFIX "Unable to map RSDT header\n");
+                       printk(KERN_WARNING PREFIX
+                              "Unable to map RSDT header\n");
                        return -ENODEV;
                }
 
                /* remap in the entire table before processing */
                mapped_rsdt = (struct acpi_table_rsdt *)
-                       __acpi_map_table(sdt_pa, header->length);
+                   __acpi_map_table(sdt_pa, header->length);
                if (!mapped_rsdt) {
                        printk(KERN_WARNING PREFIX "Unable to map RSDT\n");
                        return -ENODEV;
@@ -484,7 +488,8 @@ acpi_table_get_sdt (
                header = &mapped_rsdt->header;
 
                if (strncmp(header->signature, "RSDT", 4)) {
-                       printk(KERN_WARNING PREFIX "RSDT signature incorrect\n");
+                       printk(KERN_WARNING PREFIX
+                              "RSDT signature incorrect\n");
                        return -ENODEV;
                }
 
@@ -493,19 +498,22 @@ acpi_table_get_sdt (
                        return -ENODEV;
                }
 
-               sdt_count = (header->length - sizeof(struct acpi_table_header)) >> 2;
+               sdt_count =
+                   (header->length - sizeof(struct acpi_table_header)) >> 2;
                if (sdt_count > ACPI_MAX_TABLES) {
-                       printk(KERN_WARNING PREFIX "Truncated %lu RSDT entries\n",
-                               (sdt_count - ACPI_MAX_TABLES));
+                       printk(KERN_WARNING PREFIX
+                              "Truncated %lu RSDT entries\n",
+                              (sdt_count - ACPI_MAX_TABLES));
                        sdt_count = ACPI_MAX_TABLES;
                }
 
                for (i = 0; i < sdt_count; i++)
-                       sdt_entry[i].pa = (unsigned long) mapped_rsdt->entry[i];
+                       sdt_entry[i].pa = (unsigned long)mapped_rsdt->entry[i];
        }
 
        else {
-               printk(KERN_WARNING PREFIX "No System Description Table (RSDT/XSDT) specified in RSDP\n");
+               printk(KERN_WARNING PREFIX
+                      "No System Description Table (RSDT/XSDT) specified in RSDP\n");
                return -ENODEV;
        }
 
@@ -515,18 +523,17 @@ acpi_table_get_sdt (
 
                /* map in just the header */
                header = (struct acpi_table_header *)
-                       __acpi_map_table(sdt_entry[i].pa,
-                               sizeof(struct acpi_table_header));
+                   __acpi_map_table(sdt_entry[i].pa,
+                                    sizeof(struct acpi_table_header));
                if (!header)
                        continue;
 
                /* remap in the entire table before processing */
                header = (struct acpi_table_header *)
-                       __acpi_map_table(sdt_entry[i].pa,
-                               header->length);
+                   __acpi_map_table(sdt_entry[i].pa, header->length);
                if (!header)
                        continue;
-                      
+
                acpi_table_print(header, sdt_entry[i].pa);
 
                if (acpi_table_compute_checksum(header, header->length)) {
@@ -537,9 +544,9 @@ acpi_table_get_sdt (
                sdt_entry[i].size = header->length;
 
                for (id = 0; id < ACPI_TABLE_COUNT; id++) {
-                       if (!strncmp((char *) &header->signature,
-                               acpi_table_signatures[id],
-                               sizeof(header->signature))) {
+                       if (!strncmp((char *)&header->signature,
+                                    acpi_table_signatures[id],
+                                    sizeof(header->signature))) {
                                sdt_entry[i].id = id;
                        }
                }
@@ -551,7 +558,7 @@ acpi_table_get_sdt (
         * against. Unfortunately, we don't know the phys_addr, so just
         * print 0. Maybe no one will notice.
         */
-       if(!acpi_get_table_header_early(ACPI_DSDT, &header))
+       if (!acpi_get_table_header_early(ACPI_DSDT, &header))
                acpi_table_print(header, 0);
 
        return 0;
@@ -566,12 +573,11 @@ acpi_table_get_sdt (
  * result: sdt_entry[] is initialized
  */
 
-int __init
-acpi_table_init (void)
+int __init acpi_table_init(void)
 {
-       struct acpi_table_rsdp  *rsdp = NULL;
-       unsigned long           rsdp_phys = 0;
-       int                     result = 0;
+       struct acpi_table_rsdp *rsdp = NULL;
+       unsigned long rsdp_phys = 0;
+       int result = 0;
 
        /* Locate and map the Root System Description Table (RSDP) */
 
@@ -581,19 +587,25 @@ acpi_table_init (void)
                return -ENODEV;
        }
 
-       rsdp = (struct acpi_table_rsdp *) __va(rsdp_phys);
+       rsdp = (struct acpi_table_rsdp *)__va(rsdp_phys);
        if (!rsdp) {
                printk(KERN_WARNING PREFIX "Unable to map RSDP\n");
                return -ENODEV;
        }
 
-       printk(KERN_DEBUG PREFIX "RSDP (v%3.3d %6.6s                                ) @ 0x%p\n",
-               rsdp->revision, rsdp->oem_id, (void *) rsdp_phys);
+       printk(KERN_DEBUG PREFIX
+              "RSDP (v%3.3d %6.6s                                ) @ 0x%p\n",
+              rsdp->revision, rsdp->oem_id, (void *)rsdp_phys);
 
        if (rsdp->revision < 2)
-               result = acpi_table_compute_checksum(rsdp, sizeof(struct acpi_table_rsdp));
+               result =
+                   acpi_table_compute_checksum(rsdp,
+                                               sizeof(struct acpi_table_rsdp));
        else
-               result = acpi_table_compute_checksum(rsdp, ((struct acpi20_table_rsdp *)rsdp)->length);
+               result =
+                   acpi_table_compute_checksum(rsdp,
+                                               ((struct acpi20_table_rsdp *)
+                                                rsdp)->length);
 
        if (result) {
                printk(KERN_WARNING "  >>> ERROR: Invalid checksum\n");
index 92e0c31539bec52af192cc7ba940d5d5f99bcccf..a03939399fa9e309c7ef63ada9c01b90a0d4e2ad 100644 (file)
 #include <acpi/acpi.h>
 #include <acpi/actables.h>
 
-
 #define _COMPONENT          ACPI_TABLES
-        ACPI_MODULE_NAME    ("tbconvrt")
+ACPI_MODULE_NAME("tbconvrt")
 
 /* Local prototypes */
-
 static void
-acpi_tb_init_generic_address (
-       struct acpi_generic_address     *new_gas_struct,
-       u8                              register_bit_width,
-       acpi_physical_address           address);
+acpi_tb_init_generic_address(struct acpi_generic_address *new_gas_struct,
+                            u8 register_bit_width,
+                            acpi_physical_address address);
 
 static void
-acpi_tb_convert_fadt1 (
-       struct fadt_descriptor_rev2    *local_fadt,
-       struct fadt_descriptor_rev1    *original_fadt);
+acpi_tb_convert_fadt1(struct fadt_descriptor_rev2 *local_fadt,
+                     struct fadt_descriptor_rev1 *original_fadt);
 
 static void
-acpi_tb_convert_fadt2 (
-       struct fadt_descriptor_rev2    *local_fadt,
-       struct fadt_descriptor_rev2    *original_fadt);
-
+acpi_tb_convert_fadt2(struct fadt_descriptor_rev2 *local_fadt,
+                     struct fadt_descriptor_rev2 *original_fadt);
 
 u8 acpi_fadt_is_v1;
 EXPORT_SYMBOL(acpi_fadt_is_v1);
@@ -87,21 +81,19 @@ EXPORT_SYMBOL(acpi_fadt_is_v1);
  ******************************************************************************/
 
 u32
-acpi_tb_get_table_count (
-       struct rsdp_descriptor          *RSDP,
-       struct acpi_table_header        *RSDT)
+acpi_tb_get_table_count(struct rsdp_descriptor *RSDP,
+                       struct acpi_table_header *RSDT)
 {
-       u32                             pointer_size;
+       u32 pointer_size;
 
+       ACPI_FUNCTION_ENTRY();
 
-       ACPI_FUNCTION_ENTRY ();
+       /* RSDT pointers are 32 bits, XSDT pointers are 64 bits */
 
-
-       if (RSDP->revision < 2) {
-               pointer_size = sizeof (u32);
-       }
-       else {
-               pointer_size = sizeof (u64);
+       if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
+               pointer_size = sizeof(u32);
+       } else {
+               pointer_size = sizeof(u64);
        }
 
        /*
@@ -110,10 +102,10 @@ acpi_tb_get_table_count (
         * pointers contained within the RSDT/XSDT.  The size of the pointers
         * is architecture-dependent.
         */
-       return ((RSDT->length - sizeof (struct acpi_table_header)) / pointer_size);
+       return ((RSDT->length -
+                sizeof(struct acpi_table_header)) / pointer_size);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_convert_to_xsdt
@@ -126,64 +118,65 @@ acpi_tb_get_table_count (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_tb_convert_to_xsdt (
-       struct acpi_table_desc          *table_info)
+acpi_status acpi_tb_convert_to_xsdt(struct acpi_table_desc *table_info)
 {
-       acpi_size                       table_size;
-       u32                             i;
-       XSDT_DESCRIPTOR         *new_table;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       acpi_size table_size;
+       u32 i;
+       XSDT_DESCRIPTOR *new_table;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* Compute size of the converted XSDT */
 
-       table_size = ((acpi_size) acpi_gbl_rsdt_table_count * sizeof (u64)) +
-                         sizeof (struct acpi_table_header);
+       table_size = ((acpi_size) acpi_gbl_rsdt_table_count * sizeof(u64)) +
+           sizeof(struct acpi_table_header);
 
        /* Allocate an XSDT */
 
-       new_table = ACPI_MEM_CALLOCATE (table_size);
+       new_table = ACPI_MEM_CALLOCATE(table_size);
        if (!new_table) {
                return (AE_NO_MEMORY);
        }
 
        /* Copy the header and set the length */
 
-       ACPI_MEMCPY (new_table, table_info->pointer, sizeof (struct acpi_table_header));
+       ACPI_MEMCPY(new_table, table_info->pointer,
+                   sizeof(struct acpi_table_header));
        new_table->length = (u32) table_size;
 
        /* Copy the table pointers */
 
        for (i = 0; i < acpi_gbl_rsdt_table_count; i++) {
-               if (acpi_gbl_RSDP->revision < 2) {
-                       ACPI_STORE_ADDRESS (new_table->table_offset_entry[i],
-                               (ACPI_CAST_PTR (struct rsdt_descriptor_rev1,
-                                       table_info->pointer))->table_offset_entry[i]);
-               }
-               else {
+               /* RSDT pointers are 32 bits, XSDT pointers are 64 bits */
+
+               if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
+                       ACPI_STORE_ADDRESS(new_table->table_offset_entry[i],
+                                          (ACPI_CAST_PTR
+                                           (struct rsdt_descriptor_rev1,
+                                            table_info->pointer))->
+                                          table_offset_entry[i]);
+               } else {
                        new_table->table_offset_entry[i] =
-                               (ACPI_CAST_PTR (XSDT_DESCRIPTOR,
-                                       table_info->pointer))->table_offset_entry[i];
+                           (ACPI_CAST_PTR(XSDT_DESCRIPTOR,
+                                          table_info->pointer))->
+                           table_offset_entry[i];
                }
        }
 
        /* Delete the original table (either mapped or in a buffer) */
 
-       acpi_tb_delete_single_table (table_info);
+       acpi_tb_delete_single_table(table_info);
 
        /* Point the table descriptor to the new table */
 
-       table_info->pointer     = ACPI_CAST_PTR (struct acpi_table_header, new_table);
-       table_info->length      = table_size;
-       table_info->allocation  = ACPI_MEM_ALLOCATED;
+       table_info->pointer =
+           ACPI_CAST_PTR(struct acpi_table_header, new_table);
+       table_info->length = table_size;
+       table_info->allocation = ACPI_MEM_ALLOCATED;
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_init_generic_address
@@ -199,21 +192,19 @@ acpi_tb_convert_to_xsdt (
  ******************************************************************************/
 
 static void
-acpi_tb_init_generic_address (
-       struct acpi_generic_address     *new_gas_struct,
-       u8                              register_bit_width,
-       acpi_physical_address           address)
+acpi_tb_init_generic_address(struct acpi_generic_address *new_gas_struct,
+                            u8 register_bit_width,
+                            acpi_physical_address address)
 {
 
-       ACPI_STORE_ADDRESS (new_gas_struct->address, address);
+       ACPI_STORE_ADDRESS(new_gas_struct->address, address);
 
        new_gas_struct->address_space_id = ACPI_ADR_SPACE_SYSTEM_IO;
        new_gas_struct->register_bit_width = register_bit_width;
        new_gas_struct->register_bit_offset = 0;
-       new_gas_struct->access_width    = 0;
+       new_gas_struct->access_width = 0;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_convert_fadt1
@@ -228,9 +219,8 @@ acpi_tb_init_generic_address (
  ******************************************************************************/
 
 static void
-acpi_tb_convert_fadt1 (
-       struct fadt_descriptor_rev2    *local_fadt,
-       struct fadt_descriptor_rev1    *original_fadt)
+acpi_tb_convert_fadt1(struct fadt_descriptor_rev2 *local_fadt,
+                     struct fadt_descriptor_rev1 *original_fadt)
 {
 
        /* ACPI 1.0 FACS */
@@ -243,12 +233,14 @@ acpi_tb_convert_fadt1 (
         * The 2.0 table is an extension of the 1.0 table, so the entire 1.0
         * table can be copied first, then expand some fields to 64 bits.
         */
-       ACPI_MEMCPY (local_fadt, original_fadt, sizeof (struct fadt_descriptor_rev1));
+       ACPI_MEMCPY(local_fadt, original_fadt,
+                   sizeof(struct fadt_descriptor_rev1));
 
        /* Convert table pointers to 64-bit fields */
 
-       ACPI_STORE_ADDRESS (local_fadt->xfirmware_ctrl, local_fadt->V1_firmware_ctrl);
-       ACPI_STORE_ADDRESS (local_fadt->Xdsdt, local_fadt->V1_dsdt);
+       ACPI_STORE_ADDRESS(local_fadt->xfirmware_ctrl,
+                          local_fadt->V1_firmware_ctrl);
+       ACPI_STORE_ADDRESS(local_fadt->Xdsdt, local_fadt->V1_dsdt);
 
        /*
         * System Interrupt Model isn't used in ACPI 2.0
@@ -283,17 +275,17 @@ acpi_tb_convert_fadt1 (
         * It primarily adds the FADT reset mechanism.
         */
        if ((original_fadt->revision == 2) &&
-               (original_fadt->length == sizeof (struct fadt_descriptor_rev2_minus))) {
+           (original_fadt->length ==
+            sizeof(struct fadt_descriptor_rev2_minus))) {
                /*
                 * Grab the entire generic address struct, plus the 1-byte reset value
                 * that immediately follows.
                 */
-               ACPI_MEMCPY (&local_fadt->reset_register,
-                       &(ACPI_CAST_PTR (struct fadt_descriptor_rev2_minus,
-                               original_fadt))->reset_register,
-                       sizeof (struct acpi_generic_address) + 1);
-       }
-       else {
+               ACPI_MEMCPY(&local_fadt->reset_register,
+                           &(ACPI_CAST_PTR(struct fadt_descriptor_rev2_minus,
+                                           original_fadt))->reset_register,
+                           sizeof(struct acpi_generic_address) + 1);
+       } else {
                /*
                 * Since there isn't any equivalence in 1.0 and since it is highly
                 * likely that a 1.0 system has legacy support.
@@ -304,43 +296,60 @@ acpi_tb_convert_fadt1 (
        /*
         * Convert the V1.0 block addresses to V2.0 GAS structures
         */
-       acpi_tb_init_generic_address (&local_fadt->xpm1a_evt_blk, local_fadt->pm1_evt_len,
-                         (acpi_physical_address)   local_fadt->V1_pm1a_evt_blk);
-       acpi_tb_init_generic_address (&local_fadt->xpm1b_evt_blk, local_fadt->pm1_evt_len,
-                         (acpi_physical_address)   local_fadt->V1_pm1b_evt_blk);
-       acpi_tb_init_generic_address (&local_fadt->xpm1a_cnt_blk, local_fadt->pm1_cnt_len,
-                         (acpi_physical_address)   local_fadt->V1_pm1a_cnt_blk);
-       acpi_tb_init_generic_address (&local_fadt->xpm1b_cnt_blk, local_fadt->pm1_cnt_len,
-                         (acpi_physical_address)   local_fadt->V1_pm1b_cnt_blk);
-       acpi_tb_init_generic_address (&local_fadt->xpm2_cnt_blk, local_fadt->pm2_cnt_len,
-                         (acpi_physical_address)   local_fadt->V1_pm2_cnt_blk);
-       acpi_tb_init_generic_address (&local_fadt->xpm_tmr_blk, local_fadt->pm_tm_len,
-                         (acpi_physical_address)   local_fadt->V1_pm_tmr_blk);
-       acpi_tb_init_generic_address (&local_fadt->xgpe0_blk, 0,
-                         (acpi_physical_address)   local_fadt->V1_gpe0_blk);
-       acpi_tb_init_generic_address (&local_fadt->xgpe1_blk, 0,
-                         (acpi_physical_address)   local_fadt->V1_gpe1_blk);
+       acpi_tb_init_generic_address(&local_fadt->xpm1a_evt_blk,
+                                    local_fadt->pm1_evt_len,
+                                    (acpi_physical_address) local_fadt->
+                                    V1_pm1a_evt_blk);
+       acpi_tb_init_generic_address(&local_fadt->xpm1b_evt_blk,
+                                    local_fadt->pm1_evt_len,
+                                    (acpi_physical_address) local_fadt->
+                                    V1_pm1b_evt_blk);
+       acpi_tb_init_generic_address(&local_fadt->xpm1a_cnt_blk,
+                                    local_fadt->pm1_cnt_len,
+                                    (acpi_physical_address) local_fadt->
+                                    V1_pm1a_cnt_blk);
+       acpi_tb_init_generic_address(&local_fadt->xpm1b_cnt_blk,
+                                    local_fadt->pm1_cnt_len,
+                                    (acpi_physical_address) local_fadt->
+                                    V1_pm1b_cnt_blk);
+       acpi_tb_init_generic_address(&local_fadt->xpm2_cnt_blk,
+                                    local_fadt->pm2_cnt_len,
+                                    (acpi_physical_address) local_fadt->
+                                    V1_pm2_cnt_blk);
+       acpi_tb_init_generic_address(&local_fadt->xpm_tmr_blk,
+                                    local_fadt->pm_tm_len,
+                                    (acpi_physical_address) local_fadt->
+                                    V1_pm_tmr_blk);
+       acpi_tb_init_generic_address(&local_fadt->xgpe0_blk, 0,
+                                    (acpi_physical_address) local_fadt->
+                                    V1_gpe0_blk);
+       acpi_tb_init_generic_address(&local_fadt->xgpe1_blk, 0,
+                                    (acpi_physical_address) local_fadt->
+                                    V1_gpe1_blk);
 
        /* Create separate GAS structs for the PM1 Enable registers */
 
-       acpi_tb_init_generic_address (&acpi_gbl_xpm1a_enable,
-                (u8) ACPI_DIV_2 (acpi_gbl_FADT->pm1_evt_len),
-                (acpi_physical_address)
-                       (local_fadt->xpm1a_evt_blk.address +
-                       ACPI_DIV_2 (acpi_gbl_FADT->pm1_evt_len)));
+       acpi_tb_init_generic_address(&acpi_gbl_xpm1a_enable,
+                                    (u8) ACPI_DIV_2(acpi_gbl_FADT->
+                                                    pm1_evt_len),
+                                    (acpi_physical_address)
+                                    (local_fadt->xpm1a_evt_blk.address +
+                                     ACPI_DIV_2(acpi_gbl_FADT->pm1_evt_len)));
 
        /* PM1B is optional; leave null if not present */
 
        if (local_fadt->xpm1b_evt_blk.address) {
-               acpi_tb_init_generic_address (&acpi_gbl_xpm1b_enable,
-                        (u8) ACPI_DIV_2 (acpi_gbl_FADT->pm1_evt_len),
-                        (acpi_physical_address)
-                               (local_fadt->xpm1b_evt_blk.address +
-                               ACPI_DIV_2 (acpi_gbl_FADT->pm1_evt_len)));
+               acpi_tb_init_generic_address(&acpi_gbl_xpm1b_enable,
+                                            (u8) ACPI_DIV_2(acpi_gbl_FADT->
+                                                            pm1_evt_len),
+                                            (acpi_physical_address)
+                                            (local_fadt->xpm1b_evt_blk.
+                                             address +
+                                             ACPI_DIV_2(acpi_gbl_FADT->
+                                                        pm1_evt_len)));
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_convert_fadt2
@@ -356,14 +365,14 @@ acpi_tb_convert_fadt1 (
  ******************************************************************************/
 
 static void
-acpi_tb_convert_fadt2 (
-       struct fadt_descriptor_rev2    *local_fadt,
-       struct fadt_descriptor_rev2    *original_fadt)
+acpi_tb_convert_fadt2(struct fadt_descriptor_rev2 *local_fadt,
+                     struct fadt_descriptor_rev2 *original_fadt)
 {
 
        /* We have an ACPI 2.0 FADT but we must copy it to our local buffer */
 
-       ACPI_MEMCPY (local_fadt, original_fadt, sizeof (struct fadt_descriptor_rev2));
+       ACPI_MEMCPY(local_fadt, original_fadt,
+                   sizeof(struct fadt_descriptor_rev2));
 
        /*
         * "X" fields are optional extensions to the original V1.0 fields, so
@@ -371,86 +380,99 @@ acpi_tb_convert_fadt2 (
         * is zero.
         */
        if (!(local_fadt->xfirmware_ctrl)) {
-               ACPI_STORE_ADDRESS (local_fadt->xfirmware_ctrl,
-                       local_fadt->V1_firmware_ctrl);
+               ACPI_STORE_ADDRESS(local_fadt->xfirmware_ctrl,
+                                  local_fadt->V1_firmware_ctrl);
        }
 
        if (!(local_fadt->Xdsdt)) {
-               ACPI_STORE_ADDRESS (local_fadt->Xdsdt, local_fadt->V1_dsdt);
+               ACPI_STORE_ADDRESS(local_fadt->Xdsdt, local_fadt->V1_dsdt);
        }
 
        if (!(local_fadt->xpm1a_evt_blk.address)) {
-               acpi_tb_init_generic_address (&local_fadt->xpm1a_evt_blk,
-                       local_fadt->pm1_evt_len,
-                       (acpi_physical_address) local_fadt->V1_pm1a_evt_blk);
+               acpi_tb_init_generic_address(&local_fadt->xpm1a_evt_blk,
+                                            local_fadt->pm1_evt_len,
+                                            (acpi_physical_address)
+                                            local_fadt->V1_pm1a_evt_blk);
        }
 
        if (!(local_fadt->xpm1b_evt_blk.address)) {
-               acpi_tb_init_generic_address (&local_fadt->xpm1b_evt_blk,
-                       local_fadt->pm1_evt_len,
-                       (acpi_physical_address) local_fadt->V1_pm1b_evt_blk);
+               acpi_tb_init_generic_address(&local_fadt->xpm1b_evt_blk,
+                                            local_fadt->pm1_evt_len,
+                                            (acpi_physical_address)
+                                            local_fadt->V1_pm1b_evt_blk);
        }
 
        if (!(local_fadt->xpm1a_cnt_blk.address)) {
-               acpi_tb_init_generic_address (&local_fadt->xpm1a_cnt_blk,
-                       local_fadt->pm1_cnt_len,
-                       (acpi_physical_address) local_fadt->V1_pm1a_cnt_blk);
+               acpi_tb_init_generic_address(&local_fadt->xpm1a_cnt_blk,
+                                            local_fadt->pm1_cnt_len,
+                                            (acpi_physical_address)
+                                            local_fadt->V1_pm1a_cnt_blk);
        }
 
        if (!(local_fadt->xpm1b_cnt_blk.address)) {
-               acpi_tb_init_generic_address (&local_fadt->xpm1b_cnt_blk,
-                       local_fadt->pm1_cnt_len,
-                       (acpi_physical_address) local_fadt->V1_pm1b_cnt_blk);
+               acpi_tb_init_generic_address(&local_fadt->xpm1b_cnt_blk,
+                                            local_fadt->pm1_cnt_len,
+                                            (acpi_physical_address)
+                                            local_fadt->V1_pm1b_cnt_blk);
        }
 
        if (!(local_fadt->xpm2_cnt_blk.address)) {
-               acpi_tb_init_generic_address (&local_fadt->xpm2_cnt_blk,
-                       local_fadt->pm2_cnt_len,
-                       (acpi_physical_address) local_fadt->V1_pm2_cnt_blk);
+               acpi_tb_init_generic_address(&local_fadt->xpm2_cnt_blk,
+                                            local_fadt->pm2_cnt_len,
+                                            (acpi_physical_address)
+                                            local_fadt->V1_pm2_cnt_blk);
        }
 
        if (!(local_fadt->xpm_tmr_blk.address)) {
-               acpi_tb_init_generic_address (&local_fadt->xpm_tmr_blk,
-                       local_fadt->pm_tm_len,
-                       (acpi_physical_address) local_fadt->V1_pm_tmr_blk);
+               acpi_tb_init_generic_address(&local_fadt->xpm_tmr_blk,
+                                            local_fadt->pm_tm_len,
+                                            (acpi_physical_address)
+                                            local_fadt->V1_pm_tmr_blk);
        }
 
        if (!(local_fadt->xgpe0_blk.address)) {
-               acpi_tb_init_generic_address (&local_fadt->xgpe0_blk,
-                       0, (acpi_physical_address) local_fadt->V1_gpe0_blk);
+               acpi_tb_init_generic_address(&local_fadt->xgpe0_blk,
+                                            0,
+                                            (acpi_physical_address)
+                                            local_fadt->V1_gpe0_blk);
        }
 
        if (!(local_fadt->xgpe1_blk.address)) {
-               acpi_tb_init_generic_address (&local_fadt->xgpe1_blk,
-                       0, (acpi_physical_address) local_fadt->V1_gpe1_blk);
+               acpi_tb_init_generic_address(&local_fadt->xgpe1_blk,
+                                            0,
+                                            (acpi_physical_address)
+                                            local_fadt->V1_gpe1_blk);
        }
 
        /* Create separate GAS structs for the PM1 Enable registers */
 
-       acpi_tb_init_generic_address (&acpi_gbl_xpm1a_enable,
-               (u8) ACPI_DIV_2 (acpi_gbl_FADT->pm1_evt_len),
-               (acpi_physical_address)
-                       (local_fadt->xpm1a_evt_blk.address +
-                       ACPI_DIV_2 (acpi_gbl_FADT->pm1_evt_len)));
+       acpi_tb_init_generic_address(&acpi_gbl_xpm1a_enable,
+                                    (u8) ACPI_DIV_2(acpi_gbl_FADT->
+                                                    pm1_evt_len),
+                                    (acpi_physical_address)
+                                    (local_fadt->xpm1a_evt_blk.address +
+                                     ACPI_DIV_2(acpi_gbl_FADT->pm1_evt_len)));
 
        acpi_gbl_xpm1a_enable.address_space_id =
-               local_fadt->xpm1a_evt_blk.address_space_id;
+           local_fadt->xpm1a_evt_blk.address_space_id;
 
        /* PM1B is optional; leave null if not present */
 
        if (local_fadt->xpm1b_evt_blk.address) {
-               acpi_tb_init_generic_address (&acpi_gbl_xpm1b_enable,
-                       (u8) ACPI_DIV_2 (acpi_gbl_FADT->pm1_evt_len),
-                       (acpi_physical_address)
-                               (local_fadt->xpm1b_evt_blk.address +
-                               ACPI_DIV_2 (acpi_gbl_FADT->pm1_evt_len)));
+               acpi_tb_init_generic_address(&acpi_gbl_xpm1b_enable,
+                                            (u8) ACPI_DIV_2(acpi_gbl_FADT->
+                                                            pm1_evt_len),
+                                            (acpi_physical_address)
+                                            (local_fadt->xpm1b_evt_blk.
+                                             address +
+                                             ACPI_DIV_2(acpi_gbl_FADT->
+                                                        pm1_evt_len)));
 
                acpi_gbl_xpm1b_enable.address_space_id =
-                       local_fadt->xpm1b_evt_blk.address_space_id;
+                   local_fadt->xpm1b_evt_blk.address_space_id;
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_convert_table_fadt
@@ -467,83 +489,76 @@ acpi_tb_convert_fadt2 (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_tb_convert_table_fadt (
-       void)
+acpi_status acpi_tb_convert_table_fadt(void)
 {
-       struct fadt_descriptor_rev2    *local_fadt;
-       struct acpi_table_desc         *table_desc;
-
-
-       ACPI_FUNCTION_TRACE ("tb_convert_table_fadt");
+       struct fadt_descriptor_rev2 *local_fadt;
+       struct acpi_table_desc *table_desc;
 
+       ACPI_FUNCTION_TRACE("tb_convert_table_fadt");
 
        /*
         * acpi_gbl_FADT is valid. Validate the FADT length. The table must be
         * at least as long as the version 1.0 FADT
         */
-       if (acpi_gbl_FADT->length < sizeof (struct fadt_descriptor_rev1)) {
-               ACPI_REPORT_ERROR (("FADT is invalid, too short: 0x%X\n",
-                       acpi_gbl_FADT->length));
-               return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH);
+       if (acpi_gbl_FADT->length < sizeof(struct fadt_descriptor_rev1)) {
+               ACPI_REPORT_ERROR(("FADT is invalid, too short: 0x%X\n",
+                                  acpi_gbl_FADT->length));
+               return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH);
        }
 
        /* Allocate buffer for the ACPI 2.0(+) FADT */
 
-       local_fadt = ACPI_MEM_CALLOCATE (sizeof (struct fadt_descriptor_rev2));
+       local_fadt = ACPI_MEM_CALLOCATE(sizeof(struct fadt_descriptor_rev2));
        if (!local_fadt) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        if (acpi_gbl_FADT->revision >= FADT2_REVISION_ID) {
-               if (acpi_gbl_FADT->length < sizeof (struct fadt_descriptor_rev2)) {
+               if (acpi_gbl_FADT->length < sizeof(struct fadt_descriptor_rev2)) {
                        /* Length is too short to be a V2.0 table */
 
-                       ACPI_REPORT_WARNING ((
-                               "Inconsistent FADT length (0x%X) and revision (0x%X), using FADT V1.0 portion of table\n",
-                               acpi_gbl_FADT->length, acpi_gbl_FADT->revision));
+                       ACPI_REPORT_WARNING(("Inconsistent FADT length (0x%X) and revision (0x%X), using FADT V1.0 portion of table\n", acpi_gbl_FADT->length, acpi_gbl_FADT->revision));
 
-                       acpi_tb_convert_fadt1 (local_fadt, (void *) acpi_gbl_FADT);
-               }
-               else {
+                       acpi_tb_convert_fadt1(local_fadt,
+                                             (void *)acpi_gbl_FADT);
+               else {
                        /* Valid V2.0 table */
 
-                       acpi_tb_convert_fadt2 (local_fadt, acpi_gbl_FADT);
+                       acpi_tb_convert_fadt2(local_fadt, acpi_gbl_FADT);
                }
-       }
-       else {
+       } else {
                /* Valid V1.0 table */
 
-               acpi_tb_convert_fadt1 (local_fadt, (void *) acpi_gbl_FADT);
+               acpi_tb_convert_fadt1(local_fadt, (void *)acpi_gbl_FADT);
        }
 
        /* Global FADT pointer will point to the new common V2.0 FADT */
 
        acpi_gbl_FADT = local_fadt;
-       acpi_gbl_FADT->length = sizeof (FADT_DESCRIPTOR);
+       acpi_gbl_FADT->length = sizeof(FADT_DESCRIPTOR);
 
        /* Free the original table */
 
        table_desc = acpi_gbl_table_lists[ACPI_TABLE_FADT].next;
-       acpi_tb_delete_single_table (table_desc);
+       acpi_tb_delete_single_table(table_desc);
 
        /* Install the new table */
 
-       table_desc->pointer     = ACPI_CAST_PTR (struct acpi_table_header, acpi_gbl_FADT);
-       table_desc->allocation  = ACPI_MEM_ALLOCATED;
-       table_desc->length      = sizeof (struct fadt_descriptor_rev2);
+       table_desc->pointer =
+           ACPI_CAST_PTR(struct acpi_table_header, acpi_gbl_FADT);
+       table_desc->allocation = ACPI_MEM_ALLOCATED;
+       table_desc->length = sizeof(struct fadt_descriptor_rev2);
 
        /* Dump the entire FADT */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_TABLES,
-               "Hex dump of common internal FADT, size %d (%X)\n",
-               acpi_gbl_FADT->length, acpi_gbl_FADT->length));
-       ACPI_DUMP_BUFFER ((u8 *) (acpi_gbl_FADT), acpi_gbl_FADT->length);
+       ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
+                         "Hex dump of common internal FADT, size %d (%X)\n",
+                         acpi_gbl_FADT->length, acpi_gbl_FADT->length));
+       ACPI_DUMP_BUFFER((u8 *) (acpi_gbl_FADT), acpi_gbl_FADT->length);
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_build_common_facs
@@ -557,26 +572,21 @@ acpi_tb_convert_table_fadt (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_tb_build_common_facs (
-       struct acpi_table_desc          *table_info)
+acpi_status acpi_tb_build_common_facs(struct acpi_table_desc *table_info)
 {
 
-       ACPI_FUNCTION_TRACE ("tb_build_common_facs");
-
+       ACPI_FUNCTION_TRACE("tb_build_common_facs");
 
        /* Absolute minimum length is 24, but the ACPI spec says 64 */
 
        if (acpi_gbl_FACS->length < 24) {
-               ACPI_REPORT_ERROR (("Invalid FACS table length: 0x%X\n",
-                       acpi_gbl_FACS->length));
-               return_ACPI_STATUS (AE_INVALID_TABLE_LENGTH);
+               ACPI_REPORT_ERROR(("Invalid FACS table length: 0x%X\n",
+                                  acpi_gbl_FACS->length));
+               return_ACPI_STATUS(AE_INVALID_TABLE_LENGTH);
        }
 
        if (acpi_gbl_FACS->length < 64) {
-               ACPI_REPORT_WARNING ((
-                       "FACS is shorter than the ACPI specification allows: 0x%X, using anyway\n",
-                       acpi_gbl_FACS->length));
+               ACPI_REPORT_WARNING(("FACS is shorter than the ACPI specification allows: 0x%X, using anyway\n", acpi_gbl_FACS->length));
        }
 
        /* Copy fields to the new FACS */
@@ -584,22 +594,22 @@ acpi_tb_build_common_facs (
        acpi_gbl_common_fACS.global_lock = &(acpi_gbl_FACS->global_lock);
 
        if ((acpi_gbl_RSDP->revision < 2) ||
-               (acpi_gbl_FACS->length < 32) ||
-               (!(acpi_gbl_FACS->xfirmware_waking_vector))) {
+           (acpi_gbl_FACS->length < 32) ||
+           (!(acpi_gbl_FACS->xfirmware_waking_vector))) {
                /* ACPI 1.0 FACS or short table or optional X_ field is zero */
 
-               acpi_gbl_common_fACS.firmware_waking_vector = ACPI_CAST_PTR (u64,
-                               &(acpi_gbl_FACS->firmware_waking_vector));
+               acpi_gbl_common_fACS.firmware_waking_vector = ACPI_CAST_PTR(u64,
+                                                                           &
+                                                                           (acpi_gbl_FACS->
+                                                                            firmware_waking_vector));
                acpi_gbl_common_fACS.vector_width = 32;
-       }
-       else {
+       } else {
                /* ACPI 2.0 FACS with valid X_ field */
 
-               acpi_gbl_common_fACS.firmware_waking_vector = &acpi_gbl_FACS->xfirmware_waking_vector;
+               acpi_gbl_common_fACS.firmware_waking_vector =
+                   &acpi_gbl_FACS->xfirmware_waking_vector;
                acpi_gbl_common_fACS.vector_width = 64;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
-
index 4ab2aadc6133c3a18b58574c458c8fced517085b..6acd5aeb093efe9ebf7f31fdc71bf998a75493bc 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/actables.h>
 
-
 #define _COMPONENT          ACPI_TABLES
-        ACPI_MODULE_NAME    ("tbget")
+ACPI_MODULE_NAME("tbget")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_tb_get_this_table (
-       struct acpi_pointer             *address,
-       struct acpi_table_header        *header,
-       struct acpi_table_desc          *table_info);
+acpi_tb_get_this_table(struct acpi_pointer *address,
+                      struct acpi_table_header *header,
+                      struct acpi_table_desc *table_info);
 
 static acpi_status
-acpi_tb_table_override (
-       struct acpi_table_header        *header,
-       struct acpi_table_desc          *table_info);
-
+acpi_tb_table_override(struct acpi_table_header *header,
+                      struct acpi_table_desc *table_info);
 
 /*******************************************************************************
  *
@@ -78,37 +72,34 @@ acpi_tb_table_override (
  ******************************************************************************/
 
 acpi_status
-acpi_tb_get_table (
-       struct acpi_pointer             *address,
-       struct acpi_table_desc          *table_info)
+acpi_tb_get_table(struct acpi_pointer *address,
+                 struct acpi_table_desc *table_info)
 {
-       acpi_status                     status;
-       struct acpi_table_header        header;
-
-
-       ACPI_FUNCTION_TRACE ("tb_get_table");
+       acpi_status status;
+       struct acpi_table_header header;
 
+       ACPI_FUNCTION_TRACE("tb_get_table");
 
        /* Get the header in order to get signature and table size */
 
-       status = acpi_tb_get_table_header (address, &header);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_table_header(address, &header);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Get the entire table */
 
-       status = acpi_tb_get_table_body (address, &header, table_info);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Could not get ACPI table (size %X), %s\n",
-                       header.length, acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_table_body(address, &header, table_info);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Could not get ACPI table (size %X), %s\n",
+                                  header.length,
+                                  acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_get_table_header
@@ -127,16 +118,13 @@ acpi_tb_get_table (
  ******************************************************************************/
 
 acpi_status
-acpi_tb_get_table_header (
-       struct acpi_pointer             *address,
-       struct acpi_table_header        *return_header)
+acpi_tb_get_table_header(struct acpi_pointer *address,
+                        struct acpi_table_header *return_header)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_table_header        *header = NULL;
-
-
-       ACPI_FUNCTION_TRACE ("tb_get_table_header");
+       acpi_status status = AE_OK;
+       struct acpi_table_header *header = NULL;
 
+       ACPI_FUNCTION_TRACE("tb_get_table_header");
 
        /*
         * Flags contains the current processor mode (Virtual or Physical
@@ -148,46 +136,42 @@ acpi_tb_get_table_header (
 
                /* Pointer matches processor mode, copy the header */
 
-               ACPI_MEMCPY (return_header, address->pointer.logical,
-                       sizeof (struct acpi_table_header));
+               ACPI_MEMCPY(return_header, address->pointer.logical,
+                           sizeof(struct acpi_table_header));
                break;
 
-
        case ACPI_LOGMODE_PHYSPTR:
 
-               /* Create a logical address for the physical pointer*/
+               /* Create a logical address for the physical pointer */
 
-               status = acpi_os_map_memory (address->pointer.physical,
-                                sizeof (struct acpi_table_header), (void *) &header);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR ((
-                               "Could not map memory at %8.8X%8.8X for length %X\n",
-                               ACPI_FORMAT_UINT64 (address->pointer.physical),
-                               sizeof (struct acpi_table_header)));
-                       return_ACPI_STATUS (status);
+               status = acpi_os_map_memory(address->pointer.physical,
+                                           sizeof(struct acpi_table_header),
+                                           (void *)&header);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("Could not map memory at %8.8X%8.8X for length %X\n", ACPI_FORMAT_UINT64(address->pointer.physical), sizeof(struct acpi_table_header)));
+                       return_ACPI_STATUS(status);
                }
 
                /* Copy header and delete mapping */
 
-               ACPI_MEMCPY (return_header, header, sizeof (struct acpi_table_header));
-               acpi_os_unmap_memory (header, sizeof (struct acpi_table_header));
+               ACPI_MEMCPY(return_header, header,
+                           sizeof(struct acpi_table_header));
+               acpi_os_unmap_memory(header, sizeof(struct acpi_table_header));
                break;
 
-
        default:
 
-               ACPI_REPORT_ERROR (("Invalid address flags %X\n",
-                       address->pointer_type));
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               ACPI_REPORT_ERROR(("Invalid address flags %X\n",
+                                  address->pointer_type));
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Table Signature: [%4.4s]\n",
-               return_header->signature));
+       ACPI_DEBUG_PRINT((ACPI_DB_TABLES, "Table Signature: [%4.4s]\n",
+                         return_header->signature));
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_get_table_body
@@ -209,37 +193,33 @@ acpi_tb_get_table_header (
  ******************************************************************************/
 
 acpi_status
-acpi_tb_get_table_body (
-       struct acpi_pointer             *address,
-       struct acpi_table_header        *header,
-       struct acpi_table_desc          *table_info)
+acpi_tb_get_table_body(struct acpi_pointer *address,
+                      struct acpi_table_header *header,
+                      struct acpi_table_desc *table_info)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("tb_get_table_body");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("tb_get_table_body");
 
        if (!table_info || !address) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Attempt table override. */
 
-       status = acpi_tb_table_override (header, table_info);
-       if (ACPI_SUCCESS (status)) {
+       status = acpi_tb_table_override(header, table_info);
+       if (ACPI_SUCCESS(status)) {
                /* Table was overridden by the host OS */
 
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
        /* No override, get the original table */
 
-       status = acpi_tb_get_this_table (address, header, table_info);
-       return_ACPI_STATUS (status);
+       status = acpi_tb_get_this_table(address, header, table_info);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_table_override
@@ -255,61 +235,57 @@ acpi_tb_get_table_body (
  ******************************************************************************/
 
 static acpi_status
-acpi_tb_table_override (
-       struct acpi_table_header        *header,
-       struct acpi_table_desc          *table_info)
+acpi_tb_table_override(struct acpi_table_header *header,
+                      struct acpi_table_desc *table_info)
 {
-       struct acpi_table_header        *new_table;
-       acpi_status                     status;
-       struct acpi_pointer             address;
-
-
-       ACPI_FUNCTION_TRACE ("tb_table_override");
+       struct acpi_table_header *new_table;
+       acpi_status status;
+       struct acpi_pointer address;
 
+       ACPI_FUNCTION_TRACE("tb_table_override");
 
        /*
         * The OSL will examine the header and decide whether to override this
         * table.  If it decides to override, a table will be returned in new_table,
         * which we will then copy.
         */
-       status = acpi_os_table_override (header, &new_table);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_os_table_override(header, &new_table);
+       if (ACPI_FAILURE(status)) {
                /* Some severe error from the OSL, but we basically ignore it */
 
-               ACPI_REPORT_ERROR (("Could not override ACPI table, %s\n",
-                       acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+               ACPI_REPORT_ERROR(("Could not override ACPI table, %s\n",
+                                  acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
        if (!new_table) {
                /* No table override */
 
-               return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+               return_ACPI_STATUS(AE_NO_ACPI_TABLES);
        }
 
        /*
         * We have a new table to override the old one.  Get a copy of
         * the new one.  We know that the new table has a logical pointer.
         */
-       address.pointer_type    = ACPI_LOGICAL_POINTER | ACPI_LOGICAL_ADDRESSING;
+       address.pointer_type = ACPI_LOGICAL_POINTER | ACPI_LOGICAL_ADDRESSING;
        address.pointer.logical = new_table;
 
-       status = acpi_tb_get_this_table (&address, new_table, table_info);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Could not copy override ACPI table, %s\n",
-                       acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_this_table(&address, new_table, table_info);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Could not copy override ACPI table, %s\n",
+                                  acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
        /* Copy the table info */
 
-       ACPI_REPORT_INFO (("Table [%4.4s] replaced by host OS\n",
-               table_info->pointer->signature));
+       ACPI_REPORT_INFO(("Table [%4.4s] replaced by host OS\n",
+                         table_info->pointer->signature));
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_get_this_table
@@ -329,18 +305,15 @@ acpi_tb_table_override (
  ******************************************************************************/
 
 static acpi_status
-acpi_tb_get_this_table (
-       struct acpi_pointer             *address,
-       struct acpi_table_header        *header,
-       struct acpi_table_desc          *table_info)
+acpi_tb_get_this_table(struct acpi_pointer *address,
+                      struct acpi_table_header *header,
+                      struct acpi_table_desc *table_info)
 {
-       struct acpi_table_header        *full_table = NULL;
-       u8                              allocation;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("tb_get_this_table");
+       struct acpi_table_header *full_table = NULL;
+       u8 allocation;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("tb_get_this_table");
 
        /*
         * Flags contains the current processor mode (Virtual or Physical
@@ -352,38 +325,33 @@ acpi_tb_get_this_table (
 
                /* Pointer matches processor mode, copy the table to a new buffer */
 
-               full_table = ACPI_MEM_ALLOCATE (header->length);
+               full_table = ACPI_MEM_ALLOCATE(header->length);
                if (!full_table) {
-                       ACPI_REPORT_ERROR ((
-                               "Could not allocate table memory for [%4.4s] length %X\n",
-                               header->signature, header->length));
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       ACPI_REPORT_ERROR(("Could not allocate table memory for [%4.4s] length %X\n", header->signature, header->length));
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
                /* Copy the entire table (including header) to the local buffer */
 
-               ACPI_MEMCPY (full_table, address->pointer.logical, header->length);
+               ACPI_MEMCPY(full_table, address->pointer.logical,
+                           header->length);
 
                /* Save allocation type */
 
                allocation = ACPI_MEM_ALLOCATED;
                break;
 
-
        case ACPI_LOGMODE_PHYSPTR:
 
                /*
                 * Just map the table's physical memory
                 * into our address space.
                 */
-               status = acpi_os_map_memory (address->pointer.physical,
-                                (acpi_size) header->length, (void *) &full_table);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_REPORT_ERROR ((
-                               "Could not map memory for table [%4.4s] at %8.8X%8.8X for length %X\n",
-                               header->signature,
-                               ACPI_FORMAT_UINT64 (address->pointer.physical),
-                               header->length));
+               status = acpi_os_map_memory(address->pointer.physical,
+                                           (acpi_size) header->length,
+                                           (void *)&full_table);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_REPORT_ERROR(("Could not map memory for table [%4.4s] at %8.8X%8.8X for length %X\n", header->signature, ACPI_FORMAT_UINT64(address->pointer.physical), header->length));
                        return (status);
                }
 
@@ -392,12 +360,11 @@ acpi_tb_get_this_table (
                allocation = ACPI_MEM_MAPPED;
                break;
 
-
        default:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Invalid address flags %X\n",
-                       address->pointer_type));
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid address flags %X\n",
+                                 address->pointer_type));
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
@@ -405,10 +372,10 @@ acpi_tb_get_this_table (
         * even the ones whose signature we don't recognize
         */
        if (table_info->type != ACPI_TABLE_FACS) {
-               status = acpi_tb_verify_table_checksum (full_table);
+               status = acpi_tb_verify_table_checksum(full_table);
 
 #if (!ACPI_CHECKSUM_ABORT)
-               if (ACPI_FAILURE (status)) {
+               if (ACPI_FAILURE(status)) {
                        /* Ignore the error if configuration says so */
 
                        status = AE_OK;
@@ -418,19 +385,19 @@ acpi_tb_get_this_table (
 
        /* Return values */
 
-       table_info->pointer     = full_table;
-       table_info->length      = (acpi_size) header->length;
-       table_info->allocation  = allocation;
+       table_info->pointer = full_table;
+       table_info->length = (acpi_size) header->length;
+       table_info->allocation = allocation;
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "Found table [%4.4s] at %8.8X%8.8X, mapped/copied to %p\n",
-               full_table->signature,
-               ACPI_FORMAT_UINT64 (address->pointer.physical), full_table));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Found table [%4.4s] at %8.8X%8.8X, mapped/copied to %p\n",
+                         full_table->signature,
+                         ACPI_FORMAT_UINT64(address->pointer.physical),
+                         full_table));
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_get_table_ptr
@@ -447,24 +414,20 @@ acpi_tb_get_this_table (
  ******************************************************************************/
 
 acpi_status
-acpi_tb_get_table_ptr (
-       acpi_table_type                 table_type,
-       u32                             instance,
-       struct acpi_table_header        **table_ptr_loc)
+acpi_tb_get_table_ptr(acpi_table_type table_type,
+                     u32 instance, struct acpi_table_header **table_ptr_loc)
 {
-       struct acpi_table_desc          *table_desc;
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("tb_get_table_ptr");
+       struct acpi_table_desc *table_desc;
+       u32 i;
 
+       ACPI_FUNCTION_TRACE("tb_get_table_ptr");
 
        if (!acpi_gbl_DSDT) {
-               return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+               return_ACPI_STATUS(AE_NO_ACPI_TABLES);
        }
 
        if (table_type > ACPI_TABLE_MAX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
@@ -476,15 +439,16 @@ acpi_tb_get_table_ptr (
 
                *table_ptr_loc = NULL;
                if (acpi_gbl_table_lists[table_type].next) {
-                       *table_ptr_loc = acpi_gbl_table_lists[table_type].next->pointer;
+                       *table_ptr_loc =
+                           acpi_gbl_table_lists[table_type].next->pointer;
                }
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Check for instance out of range */
 
        if (instance > acpi_gbl_table_lists[table_type].count) {
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
        /* Walk the list to get the desired table
@@ -503,6 +467,5 @@ acpi_tb_get_table_ptr (
 
        *table_ptr_loc = table_desc->pointer;
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-
index eea5b8cb5ebb1a7d1c0fe72106110548c0217cf4..8d72343537e74719e3592a66db22a27212b9245c 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/actables.h>
 
-
 #define _COMPONENT          ACPI_TABLES
-        ACPI_MODULE_NAME    ("tbgetall")
+ACPI_MODULE_NAME("tbgetall")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_tb_get_primary_table (
-       struct acpi_pointer             *address,
-       struct acpi_table_desc          *table_info);
+acpi_tb_get_primary_table(struct acpi_pointer *address,
+                         struct acpi_table_desc *table_info);
 
 static acpi_status
-acpi_tb_get_secondary_table (
-       struct acpi_pointer             *address,
-       acpi_string                     signature,
-       struct acpi_table_desc          *table_info);
-
+acpi_tb_get_secondary_table(struct acpi_pointer *address,
+                           acpi_string signature,
+                           struct acpi_table_desc *table_info);
 
 /*******************************************************************************
  *
@@ -77,58 +71,54 @@ acpi_tb_get_secondary_table (
  ******************************************************************************/
 
 static acpi_status
-acpi_tb_get_primary_table (
-       struct acpi_pointer             *address,
-       struct acpi_table_desc          *table_info)
+acpi_tb_get_primary_table(struct acpi_pointer *address,
+                         struct acpi_table_desc *table_info)
 {
-       acpi_status                     status;
-       struct acpi_table_header        header;
-
-
-       ACPI_FUNCTION_TRACE ("tb_get_primary_table");
+       acpi_status status;
+       struct acpi_table_header header;
 
+       ACPI_FUNCTION_TRACE("tb_get_primary_table");
 
        /* Ignore a NULL address in the RSDT */
 
        if (!address->pointer.value) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Get the header in order to get signature and table size */
 
-       status = acpi_tb_get_table_header (address, &header);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_table_header(address, &header);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Clear the table_info */
 
-       ACPI_MEMSET (table_info, 0, sizeof (struct acpi_table_desc));
+       ACPI_MEMSET(table_info, 0, sizeof(struct acpi_table_desc));
 
        /*
         * Check the table signature and make sure it is recognized.
         * Also checks the header checksum
         */
        table_info->pointer = &header;
-       status = acpi_tb_recognize_table (table_info, ACPI_TABLE_PRIMARY);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_recognize_table(table_info, ACPI_TABLE_PRIMARY);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Get the entire table */
 
-       status = acpi_tb_get_table_body (address, &header, table_info);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_table_body(address, &header, table_info);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Install the table */
 
-       status = acpi_tb_install_table (table_info);
-       return_ACPI_STATUS (status);
+       status = acpi_tb_install_table(table_info);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_get_secondary_table
@@ -143,32 +133,27 @@ acpi_tb_get_primary_table (
  ******************************************************************************/
 
 static acpi_status
-acpi_tb_get_secondary_table (
-       struct acpi_pointer             *address,
-       acpi_string                     signature,
-       struct acpi_table_desc          *table_info)
+acpi_tb_get_secondary_table(struct acpi_pointer *address,
+                           acpi_string signature,
+                           struct acpi_table_desc *table_info)
 {
-       acpi_status                     status;
-       struct acpi_table_header        header;
-
-
-       ACPI_FUNCTION_TRACE_STR ("tb_get_secondary_table", signature);
+       acpi_status status;
+       struct acpi_table_header header;
 
+       ACPI_FUNCTION_TRACE_STR("tb_get_secondary_table", signature);
 
        /* Get the header in order to match the signature */
 
-       status = acpi_tb_get_table_header (address, &header);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_table_header(address, &header);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Signature must match request */
 
-       if (ACPI_STRNCMP (header.signature, signature, ACPI_NAME_SIZE)) {
-               ACPI_REPORT_ERROR ((
-                       "Incorrect table signature - wanted [%s] found [%4.4s]\n",
-                       signature, header.signature));
-               return_ACPI_STATUS (AE_BAD_SIGNATURE);
+       if (ACPI_STRNCMP(header.signature, signature, ACPI_NAME_SIZE)) {
+               ACPI_REPORT_ERROR(("Incorrect table signature - wanted [%s] found [%4.4s]\n", signature, header.signature));
+               return_ACPI_STATUS(AE_BAD_SIGNATURE);
        }
 
        /*
@@ -176,25 +161,24 @@ acpi_tb_get_secondary_table (
         * Also checks the header checksum
         */
        table_info->pointer = &header;
-       status = acpi_tb_recognize_table (table_info, ACPI_TABLE_SECONDARY);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_recognize_table(table_info, ACPI_TABLE_SECONDARY);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Get the entire table */
 
-       status = acpi_tb_get_table_body (address, &header, table_info);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_table_body(address, &header, table_info);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Install the table */
 
-       status = acpi_tb_install_table (table_info);
-       return_ACPI_STATUS (status);
+       status = acpi_tb_install_table(table_info);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_get_required_tables
@@ -214,23 +198,19 @@ acpi_tb_get_secondary_table (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_tb_get_required_tables (
-       void)
+acpi_status acpi_tb_get_required_tables(void)
 {
-       acpi_status                     status = AE_OK;
-       u32                             i;
-       struct acpi_table_desc          table_info;
-       struct acpi_pointer             address;
-
+       acpi_status status = AE_OK;
+       u32 i;
+       struct acpi_table_desc table_info;
+       struct acpi_pointer address;
 
-       ACPI_FUNCTION_TRACE ("tb_get_required_tables");
+       ACPI_FUNCTION_TRACE("tb_get_required_tables");
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%d ACPI tables in RSDT\n",
-               acpi_gbl_rsdt_table_count));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%d ACPI tables in RSDT\n",
+                         acpi_gbl_rsdt_table_count));
 
-
-       address.pointer_type  = acpi_gbl_table_flags | ACPI_LOGICAL_ADDRESSING;
+       address.pointer_type = acpi_gbl_table_flags | ACPI_LOGICAL_ADDRESSING;
 
        /*
         * Loop through all table pointers found in RSDT.
@@ -243,84 +223,79 @@ acpi_tb_get_required_tables (
        for (i = 0; i < acpi_gbl_rsdt_table_count; i++) {
                /* Get the table address from the common internal XSDT */
 
-               address.pointer.value =
-                                 acpi_gbl_XSDT->table_offset_entry[i];
+               address.pointer.value = acpi_gbl_XSDT->table_offset_entry[i];
 
                /*
                 * Get the tables needed by this subsystem (FADT and any SSDTs).
                 * NOTE: All other tables are completely ignored at this time.
                 */
-               status = acpi_tb_get_primary_table (&address, &table_info);
+               status = acpi_tb_get_primary_table(&address, &table_info);
                if ((status != AE_OK) && (status != AE_TABLE_NOT_SUPPORTED)) {
-                       ACPI_REPORT_WARNING (("%s, while getting table at %8.8X%8.8X\n",
-                               acpi_format_exception (status),
-                               ACPI_FORMAT_UINT64 (address.pointer.value)));
+                       ACPI_REPORT_WARNING(("%s, while getting table at %8.8X%8.8X\n", acpi_format_exception(status), ACPI_FORMAT_UINT64(address.pointer.value)));
                }
        }
 
        /* We must have a FADT to continue */
 
        if (!acpi_gbl_FADT) {
-               ACPI_REPORT_ERROR (("No FADT present in RSDT/XSDT\n"));
-               return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+               ACPI_REPORT_ERROR(("No FADT present in RSDT/XSDT\n"));
+               return_ACPI_STATUS(AE_NO_ACPI_TABLES);
        }
 
        /*
         * Convert the FADT to a common format.  This allows earlier revisions of
         * the table to coexist with newer versions, using common access code.
         */
-       status = acpi_tb_convert_table_fadt ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR ((
-                       "Could not convert FADT to internal common format\n"));
-               return_ACPI_STATUS (status);
+       status = acpi_tb_convert_table_fadt();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Could not convert FADT to internal common format\n"));
+               return_ACPI_STATUS(status);
        }
 
        /* Get the FACS (Pointed to by the FADT) */
 
        address.pointer.value = acpi_gbl_FADT->xfirmware_ctrl;
 
-       status = acpi_tb_get_secondary_table (&address, FACS_SIG, &table_info);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Could not get/install the FACS, %s\n",
-                       acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_secondary_table(&address, FACS_SIG, &table_info);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Could not get/install the FACS, %s\n",
+                                  acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
        /*
         * Create the common FACS pointer table
         * (Contains pointers to the original table)
         */
-       status = acpi_tb_build_common_facs (&table_info);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_build_common_facs(&table_info);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Get/install the DSDT (Pointed to by the FADT) */
 
        address.pointer.value = acpi_gbl_FADT->Xdsdt;
 
-       status = acpi_tb_get_secondary_table (&address, DSDT_SIG, &table_info);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Could not get/install the DSDT\n"));
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_secondary_table(&address, DSDT_SIG, &table_info);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Could not get/install the DSDT\n"));
+               return_ACPI_STATUS(status);
        }
 
        /* Set Integer Width (32/64) based upon DSDT revision */
 
-       acpi_ut_set_integer_width (acpi_gbl_DSDT->revision);
+       acpi_ut_set_integer_width(acpi_gbl_DSDT->revision);
 
        /* Dump the entire DSDT */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_TABLES,
-               "Hex dump of entire DSDT, size %d (0x%X), Integer width = %d\n",
-               acpi_gbl_DSDT->length, acpi_gbl_DSDT->length, acpi_gbl_integer_bit_width));
-       ACPI_DUMP_BUFFER ((u8 *) acpi_gbl_DSDT, acpi_gbl_DSDT->length);
+       ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
+                         "Hex dump of entire DSDT, size %d (0x%X), Integer width = %d\n",
+                         acpi_gbl_DSDT->length, acpi_gbl_DSDT->length,
+                         acpi_gbl_integer_bit_width));
+       ACPI_DUMP_BUFFER((u8 *) acpi_gbl_DSDT, acpi_gbl_DSDT->length);
 
        /* Always delete the RSDP mapping, we are done with it */
 
-       acpi_tb_delete_tables_by_type (ACPI_TABLE_RSDP);
-       return_ACPI_STATUS (status);
+       acpi_tb_delete_tables_by_type(ACPI_TABLE_RSDP);
+       return_ACPI_STATUS(status);
 }
-
-
index 629b64c8193da1858a69b54f68a64f07f22ab528..10db8484e462ce269f1d4c2f11820000f4318cad 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/actables.h>
 
-
 #define _COMPONENT          ACPI_TABLES
-        ACPI_MODULE_NAME    ("tbinstal")
+ACPI_MODULE_NAME("tbinstal")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_tb_match_signature (
-       char                            *signature,
-       struct acpi_table_desc          *table_info,
-       u8                              search_type);
-
+acpi_tb_match_signature(char *signature,
+                       struct acpi_table_desc *table_info, u8 search_type);
 
 /*******************************************************************************
  *
@@ -74,16 +68,12 @@ acpi_tb_match_signature (
  ******************************************************************************/
 
 static acpi_status
-acpi_tb_match_signature (
-       char                            *signature,
-       struct acpi_table_desc          *table_info,
-       u8                              search_type)
+acpi_tb_match_signature(char *signature,
+                       struct acpi_table_desc *table_info, u8 search_type)
 {
-       acpi_native_uint                i;
-
-
-       ACPI_FUNCTION_TRACE ("tb_match_signature");
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_TRACE("tb_match_signature");
 
        /* Search for a signature match among the known table types */
 
@@ -92,30 +82,30 @@ acpi_tb_match_signature (
                        continue;
                }
 
-               if (!ACPI_STRNCMP (signature, acpi_gbl_table_data[i].signature,
-                                  acpi_gbl_table_data[i].sig_length)) {
+               if (!ACPI_STRNCMP(signature, acpi_gbl_table_data[i].signature,
+                                 acpi_gbl_table_data[i].sig_length)) {
                        /* Found a signature match, return index if requested */
 
                        if (table_info) {
                                table_info->type = (u8) i;
                        }
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                               "Table [%4.4s] is an ACPI table consumed by the core subsystem\n",
-                               (char *) acpi_gbl_table_data[i].signature));
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "Table [%4.4s] is an ACPI table consumed by the core subsystem\n",
+                                         (char *)acpi_gbl_table_data[i].
+                                         signature));
 
-                       return_ACPI_STATUS (AE_OK);
+                       return_ACPI_STATUS(AE_OK);
                }
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "Table [%4.4s] is not an ACPI table consumed by the core subsystem - ignored\n",
-               (char *) signature));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Table [%4.4s] is not an ACPI table consumed by the core subsystem - ignored\n",
+                         (char *)signature));
 
-       return_ACPI_STATUS (AE_TABLE_NOT_SUPPORTED);
+       return_ACPI_STATUS(AE_TABLE_NOT_SUPPORTED);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_install_table
@@ -124,46 +114,52 @@ acpi_tb_match_signature (
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Load and validate all tables other than the RSDT.  The RSDT must
- *              already be loaded and validated.
- *              Install the table into the global data structs.
+ * DESCRIPTION: Install the table into the global data structures.
  *
  ******************************************************************************/
 
-acpi_status
-acpi_tb_install_table (
-       struct acpi_table_desc          *table_info)
+acpi_status acpi_tb_install_table(struct acpi_table_desc *table_info)
 {
-       acpi_status                     status;
-
-       ACPI_FUNCTION_TRACE ("tb_install_table");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("tb_install_table");
 
        /* Lock tables while installing */
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_TABLES);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Could not acquire table mutex for [%4.4s], %s\n",
-                       table_info->pointer->signature, acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Could not acquire table mutex, %s\n",
+                                  acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
+       }
+
+       /*
+        * Ignore a table that is already installed. For example, some BIOS
+        * ASL code will repeatedly attempt to load the same SSDT.
+        */
+       status = acpi_tb_is_table_installed(table_info);
+       if (ACPI_FAILURE(status)) {
+               goto unlock_and_exit;
        }
 
        /* Install the table into the global data structure */
 
-       status = acpi_tb_init_table_descriptor (table_info->type, table_info);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Could not install ACPI table [%4.4s], %s\n",
-                       table_info->pointer->signature, acpi_format_exception (status)));
+       status = acpi_tb_init_table_descriptor(table_info->type, table_info);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Could not install table [%4.4s], %s\n",
+                                  table_info->pointer->signature,
+                                  acpi_format_exception(status)));
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s located at %p\n",
-               acpi_gbl_table_data[table_info->type].name, table_info->pointer));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s located at %p\n",
+                         acpi_gbl_table_data[table_info->type].name,
+                         table_info->pointer));
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_TABLES);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_recognize_table
@@ -186,22 +182,18 @@ acpi_tb_install_table (
  ******************************************************************************/
 
 acpi_status
-acpi_tb_recognize_table (
-       struct acpi_table_desc          *table_info,
-       u8                              search_type)
+acpi_tb_recognize_table(struct acpi_table_desc *table_info, u8 search_type)
 {
-       struct acpi_table_header        *table_header;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("tb_recognize_table");
+       struct acpi_table_header *table_header;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("tb_recognize_table");
 
        /* Ensure that we have a valid table pointer */
 
-       table_header = (struct acpi_table_header *) table_info->pointer;
+       table_header = (struct acpi_table_header *)table_info->pointer;
        if (!table_header) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
@@ -212,25 +204,24 @@ acpi_tb_recognize_table (
         * This can be any one of many valid ACPI tables, it just isn't one of
         * the tables that is consumed by the core subsystem
         */
-       status = acpi_tb_match_signature (table_header->signature,
-                        table_info, search_type);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_match_signature(table_header->signature,
+                                        table_info, search_type);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       status = acpi_tb_validate_table_header (table_header);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_validate_table_header(table_header);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Return the table type and length via the info struct */
 
        table_info->length = (acpi_size) table_header->length;
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_init_table_descriptor
@@ -245,22 +236,27 @@ acpi_tb_recognize_table (
  ******************************************************************************/
 
 acpi_status
-acpi_tb_init_table_descriptor (
-       acpi_table_type                 table_type,
-       struct acpi_table_desc          *table_info)
+acpi_tb_init_table_descriptor(acpi_table_type table_type,
+                             struct acpi_table_desc *table_info)
 {
-       struct acpi_table_list          *list_head;
-       struct acpi_table_desc          *table_desc;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("tb_init_table_descriptor", table_type);
+       struct acpi_table_list *list_head;
+       struct acpi_table_desc *table_desc;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_U32("tb_init_table_descriptor", table_type);
 
        /* Allocate a descriptor for this table */
 
-       table_desc = ACPI_MEM_CALLOCATE (sizeof (struct acpi_table_desc));
+       table_desc = ACPI_MEM_CALLOCATE(sizeof(struct acpi_table_desc));
        if (!table_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
+       }
+
+       /* Get a new owner ID for the table */
+
+       status = acpi_ut_allocate_owner_id(&table_desc->owner_id);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Install the table into the global data structure */
@@ -272,14 +268,14 @@ acpi_tb_init_table_descriptor (
         * includes most ACPI tables such as the DSDT.  2) Multiple instances of
         * the table are allowed.  This includes SSDT and PSDTs.
         */
-       if (ACPI_IS_SINGLE_TABLE (acpi_gbl_table_data[table_type].flags)) {
+       if (ACPI_IS_SINGLE_TABLE(acpi_gbl_table_data[table_type].flags)) {
                /*
                 * Only one table allowed, and a table has alread been installed
                 * at this location, so return an error.
                 */
                if (list_head->next) {
-                       ACPI_MEM_FREE (table_desc);
-                       return_ACPI_STATUS (AE_ALREADY_EXISTS);
+                       ACPI_MEM_FREE(table_desc);
+                       return_ACPI_STATUS(AE_ALREADY_EXISTS);
                }
 
                table_desc->next = list_head->next;
@@ -290,8 +286,7 @@ acpi_tb_init_table_descriptor (
                }
 
                list_head->count++;
-       }
-       else {
+       } else {
                /*
                 * Link the new table in to the list of tables of this type.
                 * Insert at the end of the list, order IS IMPORTANT.
@@ -302,8 +297,7 @@ acpi_tb_init_table_descriptor (
 
                if (!list_head->next) {
                        list_head->next = table_desc;
-               }
-               else {
+               } else {
                        table_desc->next = list_head->next;
 
                        while (table_desc->next->next) {
@@ -318,15 +312,14 @@ acpi_tb_init_table_descriptor (
 
        /* Finish initialization of the table descriptor */
 
-       table_desc->type                = (u8) table_type;
-       table_desc->pointer             = table_info->pointer;
-       table_desc->length              = table_info->length;
-       table_desc->allocation          = table_info->allocation;
-       table_desc->aml_start           = (u8 *) (table_desc->pointer + 1),
-       table_desc->aml_length          = (u32) (table_desc->length -
-                        (u32) sizeof (struct acpi_table_header));
-       table_desc->table_id            = acpi_ut_allocate_owner_id (
-                        ACPI_OWNER_TYPE_TABLE);
+       table_desc->type = (u8) table_type;
+       table_desc->pointer = table_info->pointer;
+       table_desc->length = table_info->length;
+       table_desc->allocation = table_info->allocation;
+       table_desc->aml_start = (u8 *) (table_desc->pointer + 1),
+           table_desc->aml_length = (u32) (table_desc->length -
+                                           (u32) sizeof(struct
+                                                        acpi_table_header));
        table_desc->loaded_into_namespace = FALSE;
 
        /*
@@ -334,18 +327,18 @@ acpi_tb_init_table_descriptor (
         * newly installed table
         */
        if (acpi_gbl_table_data[table_type].global_ptr) {
-               *(acpi_gbl_table_data[table_type].global_ptr) = table_info->pointer;
+               *(acpi_gbl_table_data[table_type].global_ptr) =
+                   table_info->pointer;
        }
 
        /* Return Data */
 
-       table_info->table_id        = table_desc->table_id;
-       table_info->installed_desc  = table_desc;
+       table_info->owner_id = table_desc->owner_id;
+       table_info->installed_desc = table_desc;
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_delete_all_tables
@@ -358,23 +351,19 @@ acpi_tb_init_table_descriptor (
  *
  ******************************************************************************/
 
-void
-acpi_tb_delete_all_tables (
-       void)
+void acpi_tb_delete_all_tables(void)
 {
-       acpi_table_type                 type;
-
+       acpi_table_type type;
 
        /*
         * Free memory allocated for ACPI tables
         * Memory can either be mapped or allocated
         */
        for (type = 0; type < NUM_ACPI_TABLE_TYPES; type++) {
-               acpi_tb_delete_tables_by_type (type);
+               acpi_tb_delete_tables_by_type(type);
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_delete_tables_by_type
@@ -388,23 +377,19 @@ acpi_tb_delete_all_tables (
  *
  ******************************************************************************/
 
-void
-acpi_tb_delete_tables_by_type (
-       acpi_table_type                 type)
+void acpi_tb_delete_tables_by_type(acpi_table_type type)
 {
-       struct acpi_table_desc          *table_desc;
-       u32                             count;
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("tb_delete_tables_by_type", type);
+       struct acpi_table_desc *table_desc;
+       u32 count;
+       u32 i;
 
+       ACPI_FUNCTION_TRACE_U32("tb_delete_tables_by_type", type);
 
        if (type > ACPI_TABLE_MAX) {
                return_VOID;
        }
 
-       if (ACPI_FAILURE (acpi_ut_acquire_mutex (ACPI_MTX_TABLES))) {
+       if (ACPI_FAILURE(acpi_ut_acquire_mutex(ACPI_MTX_TABLES))) {
                return;
        }
 
@@ -442,21 +427,20 @@ acpi_tb_delete_tables_by_type (
         * 1) Get the head of the list
         */
        table_desc = acpi_gbl_table_lists[type].next;
-       count     = acpi_gbl_table_lists[type].count;
+       count = acpi_gbl_table_lists[type].count;
 
        /*
         * 2) Walk the entire list, deleting both the allocated tables
         *    and the table descriptors
         */
        for (i = 0; i < count; i++) {
-               table_desc = acpi_tb_uninstall_table (table_desc);
+               table_desc = acpi_tb_uninstall_table(table_desc);
        }
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_TABLES);
+       (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_delete_single_table
@@ -470,15 +454,12 @@ acpi_tb_delete_tables_by_type (
  *
  ******************************************************************************/
 
-void
-acpi_tb_delete_single_table (
-       struct acpi_table_desc          *table_desc)
+void acpi_tb_delete_single_table(struct acpi_table_desc *table_desc)
 {
 
        /* Must have a valid table descriptor and pointer */
 
-       if ((!table_desc) ||
-                (!table_desc->pointer)) {
+       if ((!table_desc) || (!table_desc->pointer)) {
                return;
        }
 
@@ -490,12 +471,12 @@ acpi_tb_delete_single_table (
 
        case ACPI_MEM_ALLOCATED:
 
-               ACPI_MEM_FREE (table_desc->pointer);
+               ACPI_MEM_FREE(table_desc->pointer);
                break;
 
        case ACPI_MEM_MAPPED:
 
-               acpi_os_unmap_memory (table_desc->pointer, table_desc->length);
+               acpi_os_unmap_memory(table_desc->pointer, table_desc->length);
                break;
 
        default:
@@ -503,7 +484,6 @@ acpi_tb_delete_single_table (
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_uninstall_table
@@ -518,26 +498,22 @@ acpi_tb_delete_single_table (
  *
  ******************************************************************************/
 
-struct acpi_table_desc *
-acpi_tb_uninstall_table (
-       struct acpi_table_desc          *table_desc)
+struct acpi_table_desc *acpi_tb_uninstall_table(struct acpi_table_desc
+                                               *table_desc)
 {
-       struct acpi_table_desc          *next_desc;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("tb_uninstall_table", table_desc);
+       struct acpi_table_desc *next_desc;
 
+       ACPI_FUNCTION_TRACE_PTR("tb_uninstall_table", table_desc);
 
        if (!table_desc) {
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
        /* Unlink the descriptor from the doubly linked list */
 
        if (table_desc->prev) {
                table_desc->prev->next = table_desc->next;
-       }
-       else {
+       } else {
                /* Is first on list, update list head */
 
                acpi_gbl_table_lists[table_desc->type].next = table_desc->next;
@@ -549,16 +525,14 @@ acpi_tb_uninstall_table (
 
        /* Free the memory allocated for the table itself */
 
-       acpi_tb_delete_single_table (table_desc);
+       acpi_tb_delete_single_table(table_desc);
 
        /* Free the table descriptor */
 
        next_desc = table_desc->next;
-       ACPI_MEM_FREE (table_desc);
+       ACPI_MEM_FREE(table_desc);
 
        /* Return pointer to the next descriptor */
 
-       return_PTR (next_desc);
+       return_PTR(next_desc);
 }
-
-
index b7ffe39c3626197d81d8baa515d07555910ec45d..ad0252c2f7dbd34d8a242f4bdf882a1c9203ce8d 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/actables.h>
 
-
 #define _COMPONENT          ACPI_TABLES
-        ACPI_MODULE_NAME    ("tbrsdt")
-
+ACPI_MODULE_NAME("tbrsdt")
 
 /*******************************************************************************
  *
  * DESCRIPTION: Load and validate the RSDP (ptr) and RSDT (table)
  *
  ******************************************************************************/
-
-acpi_status
-acpi_tb_verify_rsdp (
-       struct acpi_pointer             *address)
+acpi_status acpi_tb_verify_rsdp(struct acpi_pointer *address)
 {
-       struct acpi_table_desc          table_info;
-       acpi_status                     status;
-       struct rsdp_descriptor          *rsdp;
-
-
-       ACPI_FUNCTION_TRACE ("tb_verify_rsdp");
+       struct acpi_table_desc table_info;
+       acpi_status status;
+       struct rsdp_descriptor *rsdp;
 
+       ACPI_FUNCTION_TRACE("tb_verify_rsdp");
 
        switch (address->pointer_type) {
        case ACPI_LOGICAL_POINTER:
@@ -84,73 +76,53 @@ acpi_tb_verify_rsdp (
                /*
                 * Obtain access to the RSDP structure
                 */
-               status = acpi_os_map_memory (address->pointer.physical,
-                                sizeof (struct rsdp_descriptor),
-                                                  (void *) &rsdp);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_os_map_memory(address->pointer.physical,
+                                           sizeof(struct rsdp_descriptor),
+                                           (void *)&rsdp);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
                break;
 
        default:
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       /*
-        *  The signature and checksum must both be correct
-        */
-       if (ACPI_STRNCMP ((char *) rsdp, RSDP_SIG, sizeof (RSDP_SIG)-1) != 0) {
-               /* Nope, BAD Signature */
+       /* Verify RSDP signature and checksum */
 
-               status = AE_BAD_SIGNATURE;
+       status = acpi_tb_validate_rsdp(rsdp);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
-       /* Check the standard checksum */
-
-       if (acpi_tb_checksum (rsdp, ACPI_RSDP_CHECKSUM_LENGTH) != 0) {
-               status = AE_BAD_CHECKSUM;
-               goto cleanup;
-       }
-
-       /* Check extended checksum if table version >= 2 */
-
-       if (rsdp->revision >= 2) {
-               if (acpi_tb_checksum (rsdp, ACPI_RSDP_XCHECKSUM_LENGTH) != 0) {
-                       status = AE_BAD_CHECKSUM;
-                       goto cleanup;
-               }
-       }
-
        /* The RSDP supplied is OK */
 
-       table_info.pointer     = ACPI_CAST_PTR (struct acpi_table_header, rsdp);
-       table_info.length      = sizeof (struct rsdp_descriptor);
-       table_info.allocation  = ACPI_MEM_MAPPED;
+       table_info.pointer = ACPI_CAST_PTR(struct acpi_table_header, rsdp);
+       table_info.length = sizeof(struct rsdp_descriptor);
+       table_info.allocation = ACPI_MEM_MAPPED;
 
        /* Save the table pointers and allocation info */
 
-       status = acpi_tb_init_table_descriptor (ACPI_TABLE_RSDP, &table_info);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_tb_init_table_descriptor(ACPI_TABLE_RSDP, &table_info);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
        /* Save the RSDP in a global for easy access */
 
-       acpi_gbl_RSDP = ACPI_CAST_PTR (struct rsdp_descriptor, table_info.pointer);
-       return_ACPI_STATUS (status);
-
+       acpi_gbl_RSDP =
+           ACPI_CAST_PTR(struct rsdp_descriptor, table_info.pointer);
+       return_ACPI_STATUS(status);
 
        /* Error exit */
-cleanup:
+      cleanup:
 
        if (acpi_gbl_table_flags & ACPI_PHYSICAL_POINTER) {
-               acpi_os_unmap_memory (rsdp, sizeof (struct rsdp_descriptor));
+               acpi_os_unmap_memory(rsdp, sizeof(struct rsdp_descriptor));
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_get_rsdt_address
@@ -159,35 +131,35 @@ cleanup:
  *
  * RETURN:      None, Address
  *
- * DESCRIPTION: Extract the address of the RSDT or XSDT, depending on the
- *              version of the RSDP
+ * DESCRIPTION: Extract the address of either the RSDT or XSDT, depending on the
+ *              version of the RSDP and whether the XSDT pointer is valid
  *
  ******************************************************************************/
 
-void
-acpi_tb_get_rsdt_address (
-       struct acpi_pointer             *out_address)
+void acpi_tb_get_rsdt_address(struct acpi_pointer *out_address)
 {
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
+       out_address->pointer_type =
+           acpi_gbl_table_flags | ACPI_LOGICAL_ADDRESSING;
 
-       out_address->pointer_type = acpi_gbl_table_flags | ACPI_LOGICAL_ADDRESSING;
+       /* Use XSDT if it is present */
 
-       /*
-        * For RSDP revision 0 or 1, we use the RSDT.
-        * For RSDP revision 2 (and above), we use the XSDT
-        */
-       if (acpi_gbl_RSDP->revision < 2) {
-               out_address->pointer.value = acpi_gbl_RSDP->rsdt_physical_address;
-       }
-       else {
+       if ((acpi_gbl_RSDP->revision >= 2) &&
+           acpi_gbl_RSDP->xsdt_physical_address) {
                out_address->pointer.value =
-                       acpi_gbl_RSDP->xsdt_physical_address;
+                   acpi_gbl_RSDP->xsdt_physical_address;
+               acpi_gbl_root_table_type = ACPI_TABLE_TYPE_XSDT;
+       } else {
+               /* No XSDT, use the RSDT */
+
+               out_address->pointer.value =
+                   acpi_gbl_RSDP->rsdt_physical_address;
+               acpi_gbl_root_table_type = ACPI_TABLE_TYPE_RSDT;
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_validate_rsdt
@@ -200,50 +172,43 @@ acpi_tb_get_rsdt_address (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_tb_validate_rsdt (
-       struct acpi_table_header        *table_ptr)
+acpi_status acpi_tb_validate_rsdt(struct acpi_table_header *table_ptr)
 {
-       int                             no_match;
-
-
-       ACPI_FUNCTION_NAME ("tb_validate_rsdt");
+       int no_match;
 
+       ACPI_FUNCTION_NAME("tb_validate_rsdt");
 
        /*
-        * For RSDP revision 0 or 1, we use the RSDT.
-        * For RSDP revision 2 and above, we use the XSDT
+        * Search for appropriate signature, RSDT or XSDT
         */
-       if (acpi_gbl_RSDP->revision < 2) {
-               no_match = ACPI_STRNCMP ((char *) table_ptr, RSDT_SIG,
-                                 sizeof (RSDT_SIG) -1);
-       }
-       else {
-               no_match = ACPI_STRNCMP ((char *) table_ptr, XSDT_SIG,
-                                 sizeof (XSDT_SIG) -1);
+       if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
+               no_match = ACPI_STRNCMP((char *)table_ptr, RSDT_SIG,
+                                       sizeof(RSDT_SIG) - 1);
+       } else {
+               no_match = ACPI_STRNCMP((char *)table_ptr, XSDT_SIG,
+                                       sizeof(XSDT_SIG) - 1);
        }
 
        if (no_match) {
                /* Invalid RSDT or XSDT signature */
 
-               ACPI_REPORT_ERROR ((
-                       "Invalid signature where RSDP indicates RSDT/XSDT should be located\n"));
+               ACPI_REPORT_ERROR(("Invalid signature where RSDP indicates RSDT/XSDT should be located\n"));
 
-               ACPI_DUMP_BUFFER (acpi_gbl_RSDP, 20);
+               ACPI_DUMP_BUFFER(acpi_gbl_RSDP, 20);
 
-               ACPI_DEBUG_PRINT_RAW ((ACPI_DB_ERROR,
-                       "RSDT/XSDT signature at %X (%p) is invalid\n",
-                       acpi_gbl_RSDP->rsdt_physical_address,
-                       (void *) (acpi_native_uint) acpi_gbl_RSDP->rsdt_physical_address));
+               ACPI_DEBUG_PRINT_RAW((ACPI_DB_ERROR,
+                                     "RSDT/XSDT signature at %X (%p) is invalid\n",
+                                     acpi_gbl_RSDP->rsdt_physical_address,
+                                     (void *)(acpi_native_uint) acpi_gbl_RSDP->
+                                     rsdt_physical_address));
 
-               if (acpi_gbl_RSDP->revision < 2) {
-                       ACPI_REPORT_ERROR (("Looking for RSDT (RSDP->Rev < 2)\n"))
-               }
-               else {
-                       ACPI_REPORT_ERROR (("Looking for XSDT (RSDP->Rev >= 2)\n"))
+               if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
+                       ACPI_REPORT_ERROR(("Looking for RSDT\n"))
+               } else {
+                       ACPI_REPORT_ERROR(("Looking for XSDT\n"))
                }
 
-               ACPI_DUMP_BUFFER ((char *) table_ptr, 48);
+               ACPI_DUMP_BUFFER((char *)table_ptr, 48);
 
                return (AE_BAD_SIGNATURE);
        }
@@ -251,7 +216,6 @@ acpi_tb_validate_rsdt (
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_get_table_rsdt
@@ -264,66 +228,61 @@ acpi_tb_validate_rsdt (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_tb_get_table_rsdt (
-       void)
+acpi_status acpi_tb_get_table_rsdt(void)
 {
-       struct acpi_table_desc          table_info;
-       acpi_status                     status;
-       struct acpi_pointer             address;
-
-
-       ACPI_FUNCTION_TRACE ("tb_get_table_rsdt");
+       struct acpi_table_desc table_info;
+       acpi_status status;
+       struct acpi_pointer address;
 
+       ACPI_FUNCTION_TRACE("tb_get_table_rsdt");
 
        /* Get the RSDT/XSDT via the RSDP */
 
-       acpi_tb_get_rsdt_address (&address);
+       acpi_tb_get_rsdt_address(&address);
 
        table_info.type = ACPI_TABLE_XSDT;
-       status = acpi_tb_get_table (&address, &table_info);
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not get the RSDT/XSDT, %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_tb_get_table(&address, &table_info);
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Could not get the RSDT/XSDT, %s\n",
+                                 acpi_format_exception(status)));
 
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "RSDP located at %p, points to RSDT physical=%8.8X%8.8X \n",
-               acpi_gbl_RSDP,
-               ACPI_FORMAT_UINT64 (address.pointer.value)));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "RSDP located at %p, points to RSDT physical=%8.8X%8.8X \n",
+                         acpi_gbl_RSDP,
+                         ACPI_FORMAT_UINT64(address.pointer.value)));
 
        /* Check the RSDT or XSDT signature */
 
-       status = acpi_tb_validate_rsdt (table_info.pointer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_validate_rsdt(table_info.pointer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Get the number of tables defined in the RSDT or XSDT */
 
-       acpi_gbl_rsdt_table_count = acpi_tb_get_table_count (acpi_gbl_RSDP,
-                         table_info.pointer);
+       acpi_gbl_rsdt_table_count = acpi_tb_get_table_count(acpi_gbl_RSDP,
+                                                           table_info.pointer);
 
        /* Convert and/or copy to an XSDT structure */
 
-       status = acpi_tb_convert_to_xsdt (&table_info);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_convert_to_xsdt(&table_info);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Save the table pointers and allocation info */
 
-       status = acpi_tb_init_table_descriptor (ACPI_TABLE_XSDT, &table_info);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_init_table_descriptor(ACPI_TABLE_XSDT, &table_info);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       acpi_gbl_XSDT = ACPI_CAST_PTR (XSDT_DESCRIPTOR, table_info.pointer);
+       acpi_gbl_XSDT = ACPI_CAST_PTR(XSDT_DESCRIPTOR, table_info.pointer);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "XSDT located at %p\n", acpi_gbl_XSDT));
-       return_ACPI_STATUS (status);
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "XSDT located at %p\n", acpi_gbl_XSDT));
+       return_ACPI_STATUS(status);
 }
-
-
index e69d01d443d22773e84ce75965619cc45598fff0..4b2fbb592f4933cf8b8138efe64f558c194a96fe 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/actables.h>
 
-
 #define _COMPONENT          ACPI_TABLES
-        ACPI_MODULE_NAME    ("tbutils")
+ACPI_MODULE_NAME("tbutils")
 
 /* Local prototypes */
-
 #ifdef ACPI_OBSOLETE_FUNCTIONS
 acpi_status
-acpi_tb_handle_to_object (
-       u16                             table_id,
-       struct acpi_table_desc          **table_desc);
+acpi_tb_handle_to_object(u16 table_id, struct acpi_table_desc **table_desc);
 #endif
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_tb_is_table_installed
+ *
+ * PARAMETERS:  new_table_desc      - Descriptor for new table being installed
+ *
+ * RETURN:      Status - AE_ALREADY_EXISTS if the table is already installed
+ *
+ * DESCRIPTION: Determine if an ACPI table is already installed
+ *
+ * MUTEX:       Table data structures should be locked
+ *
+ ******************************************************************************/
+
+acpi_status acpi_tb_is_table_installed(struct acpi_table_desc *new_table_desc)
+{
+       struct acpi_table_desc *table_desc;
+
+       ACPI_FUNCTION_TRACE("tb_is_table_installed");
+
+       /* Get the list descriptor and first table descriptor */
+
+       table_desc = acpi_gbl_table_lists[new_table_desc->type].next;
+
+       /* Examine all installed tables of this type */
+
+       while (table_desc) {
+               /*
+                * If the table lengths match, perform a full bytewise compare. This
+                * means that we will allow tables with duplicate oem_table_id(s), as
+                * long as the tables are different in some way.
+                *
+                * Checking if the table has been loaded into the namespace means that
+                * we don't check for duplicate tables during the initial installation
+                * of tables within the RSDT/XSDT.
+                */
+               if ((table_desc->loaded_into_namespace) &&
+                   (table_desc->pointer->length ==
+                    new_table_desc->pointer->length)
+                   &&
+                   (!ACPI_MEMCMP
+                    ((const char *)table_desc->pointer,
+                     (const char *)new_table_desc->pointer,
+                     (acpi_size) new_table_desc->pointer->length))) {
+                       /* Match: this table is already installed */
+
+                       ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
+                                         "Table [%4.4s] already installed: Rev %X oem_table_id [%8.8s]\n",
+                                         new_table_desc->pointer->signature,
+                                         new_table_desc->pointer->revision,
+                                         new_table_desc->pointer->
+                                         oem_table_id));
+
+                       new_table_desc->owner_id = table_desc->owner_id;
+                       new_table_desc->installed_desc = table_desc;
+
+                       return_ACPI_STATUS(AE_ALREADY_EXISTS);
+               }
+
+               /* Get next table on the list */
+
+               table_desc = table_desc->next;
+       }
+
+       return_ACPI_STATUS(AE_OK);
+}
 
 /*******************************************************************************
  *
@@ -80,57 +141,55 @@ acpi_tb_handle_to_object (
  ******************************************************************************/
 
 acpi_status
-acpi_tb_validate_table_header (
-       struct acpi_table_header        *table_header)
+acpi_tb_validate_table_header(struct acpi_table_header *table_header)
 {
-       acpi_name                       signature;
-
-
-       ACPI_FUNCTION_NAME ("tb_validate_table_header");
+       acpi_name signature;
 
+       ACPI_FUNCTION_NAME("tb_validate_table_header");
 
        /* Verify that this is a valid address */
 
-       if (!acpi_os_readable (table_header, sizeof (struct acpi_table_header))) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Cannot read table header at %p\n", table_header));
+       if (!acpi_os_readable(table_header, sizeof(struct acpi_table_header))) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Cannot read table header at %p\n",
+                                 table_header));
 
                return (AE_BAD_ADDRESS);
        }
 
        /* Ensure that the signature is 4 ASCII characters */
 
-       ACPI_MOVE_32_TO_32 (&signature, table_header->signature);
-       if (!acpi_ut_valid_acpi_name (signature)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Table signature at %p [%p] has invalid characters\n",
-                       table_header, &signature));
+       ACPI_MOVE_32_TO_32(&signature, table_header->signature);
+       if (!acpi_ut_valid_acpi_name(signature)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Table signature at %p [%p] has invalid characters\n",
+                                 table_header, &signature));
 
-               ACPI_REPORT_WARNING (("Invalid table signature found: [%4.4s]\n",
-                       (char *) &signature));
+               ACPI_REPORT_WARNING(("Invalid table signature found: [%4.4s]\n",
+                                    (char *)&signature));
 
-               ACPI_DUMP_BUFFER (table_header, sizeof (struct acpi_table_header));
+               ACPI_DUMP_BUFFER(table_header,
+                                sizeof(struct acpi_table_header));
                return (AE_BAD_SIGNATURE);
        }
 
        /* Validate the table length */
 
-       if (table_header->length < sizeof (struct acpi_table_header)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Invalid length in table header %p name %4.4s\n",
-                       table_header, (char *) &signature));
+       if (table_header->length < sizeof(struct acpi_table_header)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Invalid length in table header %p name %4.4s\n",
+                                 table_header, (char *)&signature));
 
-               ACPI_REPORT_WARNING (("Invalid table header length (0x%X) found\n",
-                       (u32) table_header->length));
+               ACPI_REPORT_WARNING(("Invalid table header length (0x%X) found\n", (u32) table_header->length));
 
-               ACPI_DUMP_BUFFER (table_header, sizeof (struct acpi_table_header));
+               ACPI_DUMP_BUFFER(table_header,
+                                sizeof(struct acpi_table_header));
                return (AE_BAD_HEADER);
        }
 
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_verify_table_checksum
@@ -145,37 +204,31 @@ acpi_tb_validate_table_header (
  ******************************************************************************/
 
 acpi_status
-acpi_tb_verify_table_checksum (
-       struct acpi_table_header        *table_header)
+acpi_tb_verify_table_checksum(struct acpi_table_header * table_header)
 {
-       u8                              checksum;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("tb_verify_table_checksum");
+       u8 checksum;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("tb_verify_table_checksum");
 
        /* Compute the checksum on the table */
 
-       checksum = acpi_tb_checksum (table_header, table_header->length);
+       checksum =
+           acpi_tb_generate_checksum(table_header, table_header->length);
 
        /* Return the appropriate exception */
 
        if (checksum) {
-               ACPI_REPORT_WARNING ((
-                       "Invalid checksum in table [%4.4s] (%02X, sum %02X is not zero)\n",
-                       table_header->signature, (u32) table_header->checksum,
-                       (u32) checksum));
+               ACPI_REPORT_WARNING(("Invalid checksum in table [%4.4s] (%02X, sum %02X is not zero)\n", table_header->signature, (u32) table_header->checksum, (u32) checksum));
 
                status = AE_BAD_CHECKSUM;
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
- * FUNCTION:    acpi_tb_checksum
+ * FUNCTION:    acpi_tb_generate_checksum
  *
  * PARAMETERS:  Buffer              - Buffer to checksum
  *              Length              - Size of the buffer
@@ -186,15 +239,11 @@ acpi_tb_verify_table_checksum (
  *
  ******************************************************************************/
 
-u8
-acpi_tb_checksum (
-       void                            *buffer,
-       u32                             length)
+u8 acpi_tb_generate_checksum(void *buffer, u32 length)
 {
-       const u8                        *limit;
-       const u8                        *rover;
-       u8                              sum = 0;
-
+       const u8 *limit;
+       const u8 *rover;
+       u8 sum = 0;
 
        if (buffer && length) {
                /*  Buffer and Length are valid   */
@@ -208,7 +257,6 @@ acpi_tb_checksum (
        return (sum);
 }
 
-
 #ifdef ACPI_OBSOLETE_FUNCTIONS
 /*******************************************************************************
  *
@@ -224,16 +272,13 @@ acpi_tb_checksum (
  ******************************************************************************/
 
 acpi_status
-acpi_tb_handle_to_object (
-       u16                             table_id,
-       struct acpi_table_desc          **return_table_desc)
+acpi_tb_handle_to_object(u16 table_id,
+                        struct acpi_table_desc ** return_table_desc)
 {
-       u32                             i;
-       struct acpi_table_desc          *table_desc;
-
-
-       ACPI_FUNCTION_NAME ("tb_handle_to_object");
+       u32 i;
+       struct acpi_table_desc *table_desc;
 
+       ACPI_FUNCTION_NAME("tb_handle_to_object");
 
        for (i = 0; i < ACPI_TABLE_MAX; i++) {
                table_desc = acpi_gbl_table_lists[i].next;
@@ -247,9 +292,8 @@ acpi_tb_handle_to_object (
                }
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "table_id=%X does not exist\n", table_id));
+       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "table_id=%X does not exist\n",
+                         table_id));
        return (AE_BAD_PARAMETER);
 }
 #endif
-
-
index 0c0b9085dbeb954843881f6bd865f85118191585..3f96a4909aadfb5683942c0a9b0ac661d3bc9eaa 100644 (file)
 #include <acpi/acnamesp.h>
 #include <acpi/actables.h>
 
-
 #define _COMPONENT          ACPI_TABLES
-        ACPI_MODULE_NAME    ("tbxface")
-
+ACPI_MODULE_NAME("tbxface")
 
 /*******************************************************************************
  *
  *              provided RSDT
  *
  ******************************************************************************/
-
-acpi_status
-acpi_load_tables (
-       void)
+acpi_status acpi_load_tables(void)
 {
-       struct acpi_pointer             rsdp_address;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_load_tables");
+       struct acpi_pointer rsdp_address;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_load_tables");
 
        /* Get the RSDP */
 
-       status = acpi_os_get_root_pointer (ACPI_LOGICAL_ADDRESSING,
-                         &rsdp_address);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("acpi_load_tables: Could not get RSDP, %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_os_get_root_pointer(ACPI_LOGICAL_ADDRESSING,
+                                         &rsdp_address);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("acpi_load_tables: Could not get RSDP, %s\n",
+                                  acpi_format_exception(status)));
                goto error_exit;
        }
 
@@ -91,54 +84,47 @@ acpi_load_tables (
 
        acpi_gbl_table_flags = rsdp_address.pointer_type;
 
-       status = acpi_tb_verify_rsdp (&rsdp_address);
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("acpi_load_tables: RSDP Failed validation: %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_tb_verify_rsdp(&rsdp_address);
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("acpi_load_tables: RSDP Failed validation: %s\n", acpi_format_exception(status)));
                goto error_exit;
        }
 
        /* Get the RSDT via the RSDP */
 
-       status = acpi_tb_get_table_rsdt ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("acpi_load_tables: Could not load RSDT: %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_tb_get_table_rsdt();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("acpi_load_tables: Could not load RSDT: %s\n", acpi_format_exception(status)));
                goto error_exit;
        }
 
        /* Now get the tables needed by this subsystem (FADT, DSDT, etc.) */
 
-       status = acpi_tb_get_required_tables ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR ((
-                       "acpi_load_tables: Error getting required tables (DSDT/FADT/FACS): %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_tb_get_required_tables();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("acpi_load_tables: Error getting required tables (DSDT/FADT/FACS): %s\n", acpi_format_exception(status)));
                goto error_exit;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "ACPI Tables successfully acquired\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_INIT, "ACPI Tables successfully acquired\n"));
 
        /* Load the namespace from the tables */
 
-       status = acpi_ns_load_namespace ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("acpi_load_tables: Could not load namespace: %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_ns_load_namespace();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("acpi_load_tables: Could not load namespace: %s\n", acpi_format_exception(status)));
                goto error_exit;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 
+      error_exit:
+       ACPI_REPORT_ERROR(("acpi_load_tables: Could not load tables: %s\n",
+                          acpi_format_exception(status)));
 
-error_exit:
-       ACPI_REPORT_ERROR (("acpi_load_tables: Could not load tables: %s\n",
-                         acpi_format_exception (status)));
-
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 #ifdef ACPI_FUTURE_USAGE
 /*******************************************************************************
  *
@@ -156,40 +142,49 @@ error_exit:
  *
  ******************************************************************************/
 
-acpi_status
-acpi_load_table (
-       struct acpi_table_header        *table_ptr)
+acpi_status acpi_load_table(struct acpi_table_header *table_ptr)
 {
-       acpi_status                     status;
-       struct acpi_table_desc          table_info;
-       struct acpi_pointer             address;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_load_table");
+       acpi_status status;
+       struct acpi_table_desc table_info;
+       struct acpi_pointer address;
 
+       ACPI_FUNCTION_TRACE("acpi_load_table");
 
        if (!table_ptr) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Copy the table to a local buffer */
 
-       address.pointer_type    = ACPI_LOGICAL_POINTER | ACPI_LOGICAL_ADDRESSING;
+       address.pointer_type = ACPI_LOGICAL_POINTER | ACPI_LOGICAL_ADDRESSING;
        address.pointer.logical = table_ptr;
 
-       status = acpi_tb_get_table_body (&address, table_ptr, &table_info);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_table_body(&address, table_ptr, &table_info);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
+       }
+
+       /* Check signature for a valid table type */
+
+       status = acpi_tb_recognize_table(&table_info, ACPI_TABLE_ALL);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Install the new table into the local data structures */
 
-       status = acpi_tb_install_table (&table_info);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_tb_install_table(&table_info);
+       if (ACPI_FAILURE(status)) {
+               if (status == AE_ALREADY_EXISTS) {
+                       /* Table already exists, no error */
+
+                       status = AE_OK;
+               }
+
                /* Free table allocated by acpi_tb_get_table_body */
 
-               acpi_tb_delete_single_table (&table_info);
-               return_ACPI_STATUS (status);
+               acpi_tb_delete_single_table(&table_info);
+               return_ACPI_STATUS(status);
        }
 
        /* Convert the table to common format if necessary */
@@ -197,31 +192,32 @@ acpi_load_table (
        switch (table_info.type) {
        case ACPI_TABLE_FADT:
 
-               status = acpi_tb_convert_table_fadt ();
+               status = acpi_tb_convert_table_fadt();
                break;
 
        case ACPI_TABLE_FACS:
 
-               status = acpi_tb_build_common_facs (&table_info);
+               status = acpi_tb_build_common_facs(&table_info);
                break;
 
        default:
                /* Load table into namespace if it contains executable AML */
 
-               status = acpi_ns_load_table (table_info.installed_desc, acpi_gbl_root_node);
+               status =
+                   acpi_ns_load_table(table_info.installed_desc,
+                                      acpi_gbl_root_node);
                break;
        }
 
-       if (ACPI_FAILURE (status)) {
+       if (ACPI_FAILURE(status)) {
                /* Uninstall table and free the buffer */
 
-               (void) acpi_tb_uninstall_table (table_info.installed_desc);
+               (void)acpi_tb_uninstall_table(table_info.installed_desc);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_unload_table
@@ -234,20 +230,16 @@ acpi_load_table (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_unload_table (
-       acpi_table_type                 table_type)
+acpi_status acpi_unload_table(acpi_table_type table_type)
 {
-       struct acpi_table_desc          *table_desc;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_unload_table");
+       struct acpi_table_desc *table_desc;
 
+       ACPI_FUNCTION_TRACE("acpi_unload_table");
 
        /* Parameter validation */
 
        if (table_type > ACPI_TABLE_MAX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Find all tables of the requested type */
@@ -260,18 +252,17 @@ acpi_unload_table (
                 * "Scope" operator.  Thus, we need to track ownership by an ID, not
                 * simply a position within the hierarchy
                 */
-               acpi_ns_delete_namespace_by_owner (table_desc->table_id);
-
+               acpi_ns_delete_namespace_by_owner(table_desc->owner_id);
+               acpi_ut_release_owner_id(&table_desc->owner_id);
                table_desc = table_desc->next;
        }
 
        /* Delete (or unmap) all tables of this type */
 
-       acpi_tb_delete_tables_by_type (table_type);
-       return_ACPI_STATUS (AE_OK);
+       acpi_tb_delete_tables_by_type(table_type);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_table_header
@@ -294,54 +285,49 @@ acpi_unload_table (
  ******************************************************************************/
 
 acpi_status
-acpi_get_table_header (
-       acpi_table_type                 table_type,
-       u32                             instance,
-       struct acpi_table_header        *out_table_header)
+acpi_get_table_header(acpi_table_type table_type,
+                     u32 instance, struct acpi_table_header *out_table_header)
 {
-       struct acpi_table_header        *tbl_ptr;
-       acpi_status                     status;
+       struct acpi_table_header *tbl_ptr;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_get_table_header");
 
-       ACPI_FUNCTION_TRACE ("acpi_get_table_header");
-
-
-       if ((instance == 0)                 ||
-               (table_type == ACPI_TABLE_RSDP) ||
-               (!out_table_header)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((instance == 0) ||
+           (table_type == ACPI_TABLE_RSDP) || (!out_table_header)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Check the table type and instance */
 
-       if ((table_type > ACPI_TABLE_MAX)   ||
-               (ACPI_IS_SINGLE_TABLE (acpi_gbl_table_data[table_type].flags) &&
-                instance > 1)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((table_type > ACPI_TABLE_MAX) ||
+           (ACPI_IS_SINGLE_TABLE(acpi_gbl_table_data[table_type].flags) &&
+            instance > 1)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Get a pointer to the entire table */
 
-       status = acpi_tb_get_table_ptr (table_type, instance, &tbl_ptr);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_table_ptr(table_type, instance, &tbl_ptr);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* The function will return a NULL pointer if the table is not loaded */
 
        if (tbl_ptr == NULL) {
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
        /* Copy the header to the caller's buffer */
 
-       ACPI_MEMCPY ((void *) out_table_header, (void *) tbl_ptr,
-               sizeof (struct acpi_table_header));
+       ACPI_MEMCPY((void *)out_table_header, (void *)tbl_ptr,
+                   sizeof(struct acpi_table_header));
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-#endif  /*  ACPI_FUTURE_USAGE  */
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*******************************************************************************
  *
@@ -367,43 +353,39 @@ acpi_get_table_header (
  ******************************************************************************/
 
 acpi_status
-acpi_get_table (
-       acpi_table_type                 table_type,
-       u32                             instance,
-       struct acpi_buffer              *ret_buffer)
+acpi_get_table(acpi_table_type table_type,
+              u32 instance, struct acpi_buffer *ret_buffer)
 {
-       struct acpi_table_header        *tbl_ptr;
-       acpi_status                     status;
-       acpi_size                       table_length;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_table");
+       struct acpi_table_header *tbl_ptr;
+       acpi_status status;
+       acpi_size table_length;
 
+       ACPI_FUNCTION_TRACE("acpi_get_table");
 
        /* Parameter validation */
 
        if (instance == 0) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_ut_validate_buffer (ret_buffer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_validate_buffer(ret_buffer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Check the table type and instance */
 
-       if ((table_type > ACPI_TABLE_MAX)   ||
-               (ACPI_IS_SINGLE_TABLE (acpi_gbl_table_data[table_type].flags) &&
-                instance > 1)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((table_type > ACPI_TABLE_MAX) ||
+           (ACPI_IS_SINGLE_TABLE(acpi_gbl_table_data[table_type].flags) &&
+            instance > 1)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Get a pointer to the entire table */
 
-       status = acpi_tb_get_table_ptr (table_type, instance, &tbl_ptr);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_tb_get_table_ptr(table_type, instance, &tbl_ptr);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -411,7 +393,7 @@ acpi_get_table (
         * table is not loaded.
         */
        if (tbl_ptr == NULL) {
-               return_ACPI_STATUS (AE_NOT_EXIST);
+               return_ACPI_STATUS(AE_NOT_EXIST);
        }
 
        /* Get the table length */
@@ -419,23 +401,22 @@ acpi_get_table (
        if (table_type == ACPI_TABLE_RSDP) {
                /* RSD PTR is the only "table" without a header */
 
-               table_length = sizeof (struct rsdp_descriptor);
-       }
-       else {
+               table_length = sizeof(struct rsdp_descriptor);
+       } else {
                table_length = (acpi_size) tbl_ptr->length;
        }
 
        /* Validate/Allocate/Clear caller buffer */
 
-       status = acpi_ut_initialize_buffer (ret_buffer, table_length);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_initialize_buffer(ret_buffer, table_length);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Copy the table to the buffer */
 
-       ACPI_MEMCPY ((void *) ret_buffer->pointer, (void *) tbl_ptr, table_length);
-       return_ACPI_STATUS (AE_OK);
+       ACPI_MEMCPY((void *)ret_buffer->pointer, (void *)tbl_ptr, table_length);
+       return_ACPI_STATUS(AE_OK);
 }
-EXPORT_SYMBOL(acpi_get_table);
 
+EXPORT_SYMBOL(acpi_get_table);
index dc3c3f6a9f621d5c93cf39bfa39ae6c4ee101399..3b8a7e063e8a14c5d5122d306dfcef19d61d8c94 100644 (file)
 #include <acpi/acpi.h>
 #include <acpi/actables.h>
 
-
 #define _COMPONENT          ACPI_TABLES
-        ACPI_MODULE_NAME    ("tbxfroot")
+ACPI_MODULE_NAME("tbxfroot")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_tb_find_rsdp (
-       struct acpi_table_desc          *table_info,
-       u32                             flags);
+acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags);
 
-static u8 *
-acpi_tb_scan_memory_for_rsdp (
-       u8                              *start_address,
-       u32                             length);
+static u8 *acpi_tb_scan_memory_for_rsdp(u8 * start_address, u32 length);
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_tb_validate_rsdp
+ *
+ * PARAMETERS:  Rsdp        - Pointer to unvalidated RSDP
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Validate the RSDP (ptr)
+ *
+ ******************************************************************************/
+
+acpi_status acpi_tb_validate_rsdp(struct rsdp_descriptor *rsdp)
+{
+       ACPI_FUNCTION_ENTRY();
+
+       /*
+        *  The signature and checksum must both be correct
+        */
+       if (ACPI_STRNCMP((char *)rsdp, RSDP_SIG, sizeof(RSDP_SIG) - 1) != 0) {
+               /* Nope, BAD Signature */
+
+               return (AE_BAD_SIGNATURE);
+       }
+
+       /* Check the standard checksum */
+
+       if (acpi_tb_generate_checksum(rsdp, ACPI_RSDP_CHECKSUM_LENGTH) != 0) {
+               return (AE_BAD_CHECKSUM);
+       }
+
+       /* Check extended checksum if table version >= 2 */
+
+       if ((rsdp->revision >= 2) &&
+           (acpi_tb_generate_checksum(rsdp, ACPI_RSDP_XCHECKSUM_LENGTH) !=
+            0)) {
+               return (AE_BAD_CHECKSUM);
+       }
+
+       return (AE_OK);
+}
 
 /*******************************************************************************
  *
@@ -80,28 +114,24 @@ acpi_tb_scan_memory_for_rsdp (
  ******************************************************************************/
 
 acpi_status
-acpi_tb_find_table (
-       char                            *signature,
-       char                            *oem_id,
-       char                            *oem_table_id,
-       struct acpi_table_header        **table_ptr)
+acpi_tb_find_table(char *signature,
+                  char *oem_id,
+                  char *oem_table_id, struct acpi_table_header ** table_ptr)
 {
-       acpi_status                     status;
-       struct acpi_table_header        *table;
-
-
-       ACPI_FUNCTION_TRACE ("tb_find_table");
+       acpi_status status;
+       struct acpi_table_header *table;
 
+       ACPI_FUNCTION_TRACE("tb_find_table");
 
        /* Validate string lengths */
 
-       if ((ACPI_STRLEN (signature)  > ACPI_NAME_SIZE) ||
-               (ACPI_STRLEN (oem_id)     > sizeof (table->oem_id)) ||
-               (ACPI_STRLEN (oem_table_id) > sizeof (table->oem_table_id))) {
-               return_ACPI_STATUS (AE_AML_STRING_LIMIT);
+       if ((ACPI_STRLEN(signature) > ACPI_NAME_SIZE) ||
+           (ACPI_STRLEN(oem_id) > sizeof(table->oem_id)) ||
+           (ACPI_STRLEN(oem_table_id) > sizeof(table->oem_table_id))) {
+               return_ACPI_STATUS(AE_AML_STRING_LIMIT);
        }
 
-       if (!ACPI_STRNCMP (signature, DSDT_SIG, ACPI_NAME_SIZE)) {
+       if (!ACPI_STRNCMP(signature, DSDT_SIG, ACPI_NAME_SIZE)) {
                /*
                 * The DSDT pointer is contained in the FADT, not the RSDT.
                 * This code should suffice, because the only code that would perform
@@ -110,40 +140,36 @@ acpi_tb_find_table (
                 * If this becomes insufficient, the FADT will have to be found first.
                 */
                if (!acpi_gbl_DSDT) {
-                       return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+                       return_ACPI_STATUS(AE_NO_ACPI_TABLES);
                }
                table = acpi_gbl_DSDT;
-       }
-       else {
+       } else {
                /* Find the table */
 
-               status = acpi_get_firmware_table (signature, 1,
-                                ACPI_LOGICAL_ADDRESSING, &table);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_get_firmware_table(signature, 1,
+                                                ACPI_LOGICAL_ADDRESSING,
+                                                &table);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Check oem_id and oem_table_id */
 
-       if ((oem_id[0] && ACPI_STRNCMP (
-                          oem_id, table->oem_id,
-                          sizeof (table->oem_id))) ||
-
-               (oem_table_id[0] && ACPI_STRNCMP (
-                                  oem_table_id, table->oem_table_id,
-                                  sizeof (table->oem_table_id)))) {
-               return_ACPI_STATUS (AE_AML_NAME_NOT_FOUND);
+       if ((oem_id[0] && ACPI_STRNCMP(oem_id, table->oem_id,
+                                      sizeof(table->oem_id))) ||
+           (oem_table_id[0] && ACPI_STRNCMP(oem_table_id, table->oem_table_id,
+                                            sizeof(table->oem_table_id)))) {
+               return_ACPI_STATUS(AE_AML_NAME_NOT_FOUND);
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "Found table [%4.4s]\n",
-               table->signature));
+       ACPI_DEBUG_PRINT((ACPI_DB_TABLES, "Found table [%4.4s]\n",
+                         table->signature));
 
        *table_ptr = table;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_firmware_table
@@ -164,34 +190,28 @@ acpi_tb_find_table (
  ******************************************************************************/
 
 acpi_status
-acpi_get_firmware_table (
-       acpi_string                     signature,
-       u32                             instance,
-       u32                             flags,
-       struct acpi_table_header        **table_pointer)
+acpi_get_firmware_table(acpi_string signature,
+                       u32 instance,
+                       u32 flags, struct acpi_table_header **table_pointer)
 {
-       acpi_status                     status;
-       struct acpi_pointer             address;
-       struct acpi_table_header        *header = NULL;
-       struct acpi_table_desc          *table_info = NULL;
-       struct acpi_table_desc          *rsdt_info;
-       u32                             table_count;
-       u32                             i;
-       u32                             j;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_firmware_table");
+       acpi_status status;
+       struct acpi_pointer address;
+       struct acpi_table_header *header = NULL;
+       struct acpi_table_desc *table_info = NULL;
+       struct acpi_table_desc *rsdt_info;
+       u32 table_count;
+       u32 i;
+       u32 j;
 
+       ACPI_FUNCTION_TRACE("acpi_get_firmware_table");
 
        /*
         * Ensure that at least the table manager is initialized.  We don't
         * require that the entire ACPI subsystem is up for this interface.
         * If we have a buffer, we must have a length too
         */
-       if ((instance == 0)     ||
-               (!signature)        ||
-               (!table_pointer)) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+       if ((instance == 0) || (!signature) || (!table_pointer)) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Ensure that we have a RSDP */
@@ -199,48 +219,41 @@ acpi_get_firmware_table (
        if (!acpi_gbl_RSDP) {
                /* Get the RSDP */
 
-               status = acpi_os_get_root_pointer (flags, &address);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "RSDP not found\n"));
-                       return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+               status = acpi_os_get_root_pointer(flags, &address);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "RSDP not found\n"));
+                       return_ACPI_STATUS(AE_NO_ACPI_TABLES);
                }
 
                /* Map and validate the RSDP */
 
                if ((flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING) {
-                       status = acpi_os_map_memory (address.pointer.physical,
-                                        sizeof (struct rsdp_descriptor), (void *) &acpi_gbl_RSDP);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status = acpi_os_map_memory(address.pointer.physical,
+                                                   sizeof(struct
+                                                          rsdp_descriptor),
+                                                   (void *)&acpi_gbl_RSDP);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
-               }
-               else {
+               } else {
                        acpi_gbl_RSDP = address.pointer.logical;
                }
 
-               /* The signature and checksum must both be correct */
-
-               if (ACPI_STRNCMP ((char *) acpi_gbl_RSDP, RSDP_SIG,
-                               sizeof (RSDP_SIG)-1) != 0) {
-                       /* Nope, BAD Signature */
+               /* The RDSP signature and checksum must both be correct */
 
-                       return_ACPI_STATUS (AE_BAD_SIGNATURE);
-               }
-
-               if (acpi_tb_checksum (acpi_gbl_RSDP, ACPI_RSDP_CHECKSUM_LENGTH) != 0) {
-                       /* Nope, BAD Checksum */
-
-                       return_ACPI_STATUS (AE_BAD_CHECKSUM);
+               status = acpi_tb_validate_rsdp(acpi_gbl_RSDP);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Get the RSDT address via the RSDP */
 
-       acpi_tb_get_rsdt_address (&address);
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "RSDP located at %p, RSDT physical=%8.8X%8.8X \n",
-               acpi_gbl_RSDP,
-               ACPI_FORMAT_UINT64 (address.pointer.value)));
+       acpi_tb_get_rsdt_address(&address);
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "RSDP located at %p, RSDT physical=%8.8X%8.8X \n",
+                         acpi_gbl_RSDP,
+                         ACPI_FORMAT_UINT64(address.pointer.value)));
 
        /* Insert processor_mode flags */
 
@@ -248,30 +261,30 @@ acpi_get_firmware_table (
 
        /* Get and validate the RSDT */
 
-       rsdt_info = ACPI_MEM_CALLOCATE (sizeof (struct acpi_table_desc));
+       rsdt_info = ACPI_MEM_CALLOCATE(sizeof(struct acpi_table_desc));
        if (!rsdt_info) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
-       status = acpi_tb_get_table (&address, rsdt_info);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_tb_get_table(&address, rsdt_info);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
-       status = acpi_tb_validate_rsdt (rsdt_info->pointer);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_tb_validate_rsdt(rsdt_info->pointer);
+       if (ACPI_FAILURE(status)) {
                goto cleanup;
        }
 
        /* Allocate a scratch table header and table descriptor */
 
-       header = ACPI_MEM_ALLOCATE (sizeof (struct acpi_table_header));
+       header = ACPI_MEM_ALLOCATE(sizeof(struct acpi_table_header));
        if (!header) {
                status = AE_NO_MEMORY;
                goto cleanup;
        }
 
-       table_info = ACPI_MEM_ALLOCATE (sizeof (struct acpi_table_desc));
+       table_info = ACPI_MEM_ALLOCATE(sizeof(struct acpi_table_desc));
        if (!table_info) {
                status = AE_NO_MEMORY;
                goto cleanup;
@@ -279,7 +292,8 @@ acpi_get_firmware_table (
 
        /* Get the number of table pointers within the RSDT */
 
-       table_count = acpi_tb_get_table_count (acpi_gbl_RSDP, rsdt_info->pointer);
+       table_count =
+           acpi_tb_get_table_count(acpi_gbl_RSDP, rsdt_info->pointer);
        address.pointer_type = acpi_gbl_table_flags | flags;
 
        /*
@@ -287,35 +301,42 @@ acpi_get_firmware_table (
         * requested table
         */
        for (i = 0, j = 0; i < table_count; i++) {
-               /* Get the next table pointer, handle RSDT vs. XSDT */
-
-               if (acpi_gbl_RSDP->revision < 2) {
-                       address.pointer.value = (ACPI_CAST_PTR (
-                               RSDT_DESCRIPTOR, rsdt_info->pointer))->table_offset_entry[i];
-               }
-               else {
-                       address.pointer.value = (ACPI_CAST_PTR (
-                               XSDT_DESCRIPTOR, rsdt_info->pointer))->table_offset_entry[i];
+               /*
+                * Get the next table pointer, handle RSDT vs. XSDT
+                * RSDT pointers are 32 bits, XSDT pointers are 64 bits
+                */
+               if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
+                       address.pointer.value =
+                           (ACPI_CAST_PTR
+                            (RSDT_DESCRIPTOR,
+                             rsdt_info->pointer))->table_offset_entry[i];
+               } else {
+                       address.pointer.value =
+                           (ACPI_CAST_PTR
+                            (XSDT_DESCRIPTOR,
+                             rsdt_info->pointer))->table_offset_entry[i];
                }
 
                /* Get the table header */
 
-               status = acpi_tb_get_table_header (&address, header);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_tb_get_table_header(&address, header);
+               if (ACPI_FAILURE(status)) {
                        goto cleanup;
                }
 
                /* Compare table signatures and table instance */
 
-               if (!ACPI_STRNCMP (header->signature, signature, ACPI_NAME_SIZE)) {
+               if (!ACPI_STRNCMP(header->signature, signature, ACPI_NAME_SIZE)) {
                        /* An instance of the table was found */
 
                        j++;
                        if (j >= instance) {
                                /* Found the correct instance, get the entire table */
 
-                               status = acpi_tb_get_table_body (&address, header, table_info);
-                               if (ACPI_FAILURE (status)) {
+                               status =
+                                   acpi_tb_get_table_body(&address, header,
+                                                          table_info);
+                               if (ACPI_FAILURE(status)) {
                                        goto cleanup;
                                }
 
@@ -329,22 +350,23 @@ acpi_get_firmware_table (
 
        status = AE_NOT_EXIST;
 
-
-cleanup:
-       acpi_os_unmap_memory (rsdt_info->pointer,
-               (acpi_size) rsdt_info->pointer->length);
-       ACPI_MEM_FREE (rsdt_info);
+      cleanup:
+       if (rsdt_info->pointer) {
+               acpi_os_unmap_memory(rsdt_info->pointer,
+                                    (acpi_size) rsdt_info->pointer->length);
+       }
+       ACPI_MEM_FREE(rsdt_info);
 
        if (header) {
-               ACPI_MEM_FREE (header);
+               ACPI_MEM_FREE(header);
        }
        if (table_info) {
-               ACPI_MEM_FREE (table_info);
+               ACPI_MEM_FREE(table_info);
        }
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_get_firmware_table);
 
+EXPORT_SYMBOL(acpi_get_firmware_table);
 
 /* TBD: Move to a new file */
 
@@ -363,35 +385,29 @@ EXPORT_SYMBOL(acpi_get_firmware_table);
  *
  ******************************************************************************/
 
-acpi_status
-acpi_find_root_pointer (
-       u32                             flags,
-       struct acpi_pointer             *rsdp_address)
+acpi_status acpi_find_root_pointer(u32 flags, struct acpi_pointer *rsdp_address)
 {
-       struct acpi_table_desc          table_info;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_find_root_pointer");
+       struct acpi_table_desc table_info;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_find_root_pointer");
 
        /* Get the RSDP */
 
-       status = acpi_tb_find_rsdp (&table_info, flags);
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "RSDP structure not found, %s Flags=%X\n",
-                       acpi_format_exception (status), flags));
+       status = acpi_tb_find_rsdp(&table_info, flags);
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "RSDP structure not found, %s Flags=%X\n",
+                                 acpi_format_exception(status), flags));
 
-               return_ACPI_STATUS (AE_NO_ACPI_TABLES);
+               return_ACPI_STATUS(AE_NO_ACPI_TABLES);
        }
 
        rsdp_address->pointer_type = ACPI_PHYSICAL_POINTER;
        rsdp_address->pointer.physical = table_info.physical_address;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_scan_memory_for_rsdp
@@ -405,68 +421,45 @@ acpi_find_root_pointer (
  *
  ******************************************************************************/
 
-static u8 *
-acpi_tb_scan_memory_for_rsdp (
-       u8                              *start_address,
-       u32                             length)
+static u8 *acpi_tb_scan_memory_for_rsdp(u8 * start_address, u32 length)
 {
-       u8                              *mem_rover;
-       u8                              *end_address;
-       u8                              checksum;
-
-
-       ACPI_FUNCTION_TRACE ("tb_scan_memory_for_rsdp");
+       acpi_status status;
+       u8 *mem_rover;
+       u8 *end_address;
 
+       ACPI_FUNCTION_TRACE("tb_scan_memory_for_rsdp");
 
        end_address = start_address + length;
 
        /* Search from given start address for the requested length */
 
        for (mem_rover = start_address; mem_rover < end_address;
-                mem_rover += ACPI_RSDP_SCAN_STEP) {
-               /* The signature and checksum must both be correct */
-
-               if (ACPI_STRNCMP ((char *) mem_rover,
-                               RSDP_SIG, sizeof (RSDP_SIG) - 1) != 0) {
-                       /* No signature match, keep looking */
-
-                       continue;
-               }
-
-               /* Signature matches, check the appropriate checksum */
-
-               if ((ACPI_CAST_PTR (struct rsdp_descriptor, mem_rover))->revision < 2) {
-                       /* ACPI version 1.0 */
-
-                       checksum = acpi_tb_checksum (mem_rover, ACPI_RSDP_CHECKSUM_LENGTH);
-               }
-               else {
-                       /* Post ACPI 1.0, use extended_checksum */
-
-                       checksum = acpi_tb_checksum (mem_rover, ACPI_RSDP_XCHECKSUM_LENGTH);
+            mem_rover += ACPI_RSDP_SCAN_STEP) {
+               /* The RSDP signature and checksum must both be correct */
+
+               status =
+                   acpi_tb_validate_rsdp(ACPI_CAST_PTR
+                                         (struct rsdp_descriptor, mem_rover));
+               if (ACPI_SUCCESS(status)) {
+                       /* Sig and checksum valid, we have found a real RSDP */
+
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "RSDP located at physical address %p\n",
+                                         mem_rover));
+                       return_PTR(mem_rover);
                }
 
-               if (checksum == 0) {
-                       /* Checksum valid, we have found a valid RSDP */
-
-                       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                               "RSDP located at physical address %p\n", mem_rover));
-                       return_PTR (mem_rover);
-               }
-
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                       "Found an RSDP at physical address %p, but it has a bad checksum\n",
-                       mem_rover));
+               /* No sig match or bad checksum, keep searching */
        }
 
        /* Searched entire block, no RSDP was found */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "Searched entire block, no valid RSDP was found.\n"));
-       return_PTR (NULL);
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Searched entire block from %p, valid RSDP was not found\n",
+                         start_address));
+       return_PTR(NULL);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_tb_find_rsdp
@@ -490,18 +483,14 @@ acpi_tb_scan_memory_for_rsdp (
  ******************************************************************************/
 
 static acpi_status
-acpi_tb_find_rsdp (
-       struct acpi_table_desc          *table_info,
-       u32                             flags)
+acpi_tb_find_rsdp(struct acpi_table_desc *table_info, u32 flags)
 {
-       u8                              *table_ptr;
-       u8                              *mem_rover;
-       u32                             physical_address;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("tb_find_rsdp");
+       u8 *table_ptr;
+       u8 *mem_rover;
+       u32 physical_address;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("tb_find_rsdp");
 
        /*
         * Scan supports either logical addressing or physical addressing
@@ -509,23 +498,25 @@ acpi_tb_find_rsdp (
        if ((flags & ACPI_MEMORY_MODE) == ACPI_LOGICAL_ADDRESSING) {
                /* 1a) Get the location of the Extended BIOS Data Area (EBDA) */
 
-               status = acpi_os_map_memory (
-                                (acpi_physical_address) ACPI_EBDA_PTR_LOCATION,
-                                ACPI_EBDA_PTR_LENGTH, (void *) &table_ptr);
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Could not map memory at %8.8X for length %X\n",
-                               ACPI_EBDA_PTR_LOCATION, ACPI_EBDA_PTR_LENGTH));
-
-                       return_ACPI_STATUS (status);
+               status = acpi_os_map_memory((acpi_physical_address)
+                                           ACPI_EBDA_PTR_LOCATION,
+                                           ACPI_EBDA_PTR_LENGTH,
+                                           (void *)&table_ptr);
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Could not map memory at %8.8X for length %X\n",
+                                         ACPI_EBDA_PTR_LOCATION,
+                                         ACPI_EBDA_PTR_LENGTH));
+
+                       return_ACPI_STATUS(status);
                }
 
-               ACPI_MOVE_16_TO_32 (&physical_address, table_ptr);
+               ACPI_MOVE_16_TO_32(&physical_address, table_ptr);
 
                /* Convert segment part to physical address */
 
                physical_address <<= 4;
-               acpi_os_unmap_memory (table_ptr, ACPI_EBDA_PTR_LENGTH);
+               acpi_os_unmap_memory(table_ptr, ACPI_EBDA_PTR_LENGTH);
 
                /* EBDA present? */
 
@@ -534,59 +525,67 @@ acpi_tb_find_rsdp (
                         * 1b) Search EBDA paragraphs (EBDa is required to be a
                         *     minimum of 1_k length)
                         */
-                       status = acpi_os_map_memory (
-                                        (acpi_physical_address) physical_address,
-                                        ACPI_EBDA_WINDOW_SIZE, (void *) &table_ptr);
-                       if (ACPI_FAILURE (status)) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Could not map memory at %8.8X for length %X\n",
-                                       physical_address, ACPI_EBDA_WINDOW_SIZE));
-
-                               return_ACPI_STATUS (status);
+                       status = acpi_os_map_memory((acpi_physical_address)
+                                                   physical_address,
+                                                   ACPI_EBDA_WINDOW_SIZE,
+                                                   (void *)&table_ptr);
+                       if (ACPI_FAILURE(status)) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Could not map memory at %8.8X for length %X\n",
+                                                 physical_address,
+                                                 ACPI_EBDA_WINDOW_SIZE));
+
+                               return_ACPI_STATUS(status);
                        }
 
-                       mem_rover = acpi_tb_scan_memory_for_rsdp (table_ptr,
-                                         ACPI_EBDA_WINDOW_SIZE);
-                       acpi_os_unmap_memory (table_ptr, ACPI_EBDA_WINDOW_SIZE);
+                       mem_rover = acpi_tb_scan_memory_for_rsdp(table_ptr,
+                                                                ACPI_EBDA_WINDOW_SIZE);
+                       acpi_os_unmap_memory(table_ptr, ACPI_EBDA_WINDOW_SIZE);
 
                        if (mem_rover) {
-                               /* Found it, return the physical address */
+                               /* Return the physical address */
 
-                               physical_address += ACPI_PTR_DIFF (mem_rover, table_ptr);
+                               physical_address +=
+                                   ACPI_PTR_DIFF(mem_rover, table_ptr);
 
                                table_info->physical_address =
-                                       (acpi_physical_address) physical_address;
-                               return_ACPI_STATUS (AE_OK);
+                                   (acpi_physical_address) physical_address;
+                               return_ACPI_STATUS(AE_OK);
                        }
                }
 
                /*
                 * 2) Search upper memory: 16-byte boundaries in E0000h-FFFFFh
                 */
-               status = acpi_os_map_memory (
-                                (acpi_physical_address) ACPI_HI_RSDP_WINDOW_BASE,
-                                ACPI_HI_RSDP_WINDOW_SIZE, (void *) &table_ptr);
-
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Could not map memory at %8.8X for length %X\n",
-                               ACPI_HI_RSDP_WINDOW_BASE, ACPI_HI_RSDP_WINDOW_SIZE));
-
-                       return_ACPI_STATUS (status);
+               status = acpi_os_map_memory((acpi_physical_address)
+                                           ACPI_HI_RSDP_WINDOW_BASE,
+                                           ACPI_HI_RSDP_WINDOW_SIZE,
+                                           (void *)&table_ptr);
+
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Could not map memory at %8.8X for length %X\n",
+                                         ACPI_HI_RSDP_WINDOW_BASE,
+                                         ACPI_HI_RSDP_WINDOW_SIZE));
+
+                       return_ACPI_STATUS(status);
                }
 
-               mem_rover = acpi_tb_scan_memory_for_rsdp (table_ptr, ACPI_HI_RSDP_WINDOW_SIZE);
-               acpi_os_unmap_memory (table_ptr, ACPI_HI_RSDP_WINDOW_SIZE);
+               mem_rover =
+                   acpi_tb_scan_memory_for_rsdp(table_ptr,
+                                                ACPI_HI_RSDP_WINDOW_SIZE);
+               acpi_os_unmap_memory(table_ptr, ACPI_HI_RSDP_WINDOW_SIZE);
 
                if (mem_rover) {
-                       /* Found it, return the physical address */
+                       /* Return the physical address */
 
                        physical_address =
-                               ACPI_HI_RSDP_WINDOW_BASE + ACPI_PTR_DIFF (mem_rover, table_ptr);
+                           ACPI_HI_RSDP_WINDOW_BASE + ACPI_PTR_DIFF(mem_rover,
+                                                                    table_ptr);
 
                        table_info->physical_address =
-                               (acpi_physical_address) physical_address;
-                       return_ACPI_STATUS (AE_OK);
+                           (acpi_physical_address) physical_address;
+                       return_ACPI_STATUS(AE_OK);
                }
        }
 
@@ -596,8 +595,8 @@ acpi_tb_find_rsdp (
        else {
                /* 1a) Get the location of the EBDA */
 
-               ACPI_MOVE_16_TO_32 (&physical_address, ACPI_EBDA_PTR_LOCATION);
-               physical_address <<= 4;     /* Convert segment to physical address */
+               ACPI_MOVE_16_TO_32(&physical_address, ACPI_EBDA_PTR_LOCATION);
+               physical_address <<= 4; /* Convert segment to physical address */
 
                /* EBDA present? */
 
@@ -606,34 +605,38 @@ acpi_tb_find_rsdp (
                         * 1b) Search EBDA paragraphs (EBDa is required to be a minimum of
                         *     1_k length)
                         */
-                       mem_rover = acpi_tb_scan_memory_for_rsdp (
-                                         ACPI_PHYSADDR_TO_PTR (physical_address),
-                                         ACPI_EBDA_WINDOW_SIZE);
+                       mem_rover =
+                           acpi_tb_scan_memory_for_rsdp(ACPI_PHYSADDR_TO_PTR
+                                                        (physical_address),
+                                                        ACPI_EBDA_WINDOW_SIZE);
                        if (mem_rover) {
-                               /* Found it, return the physical address */
+                               /* Return the physical address */
 
-                               table_info->physical_address = ACPI_TO_INTEGER (mem_rover);
-                               return_ACPI_STATUS (AE_OK);
+                               table_info->physical_address =
+                                   ACPI_TO_INTEGER(mem_rover);
+                               return_ACPI_STATUS(AE_OK);
                        }
                }
 
                /* 2) Search upper memory: 16-byte boundaries in E0000h-FFFFFh */
 
-               mem_rover = acpi_tb_scan_memory_for_rsdp (
-                                 ACPI_PHYSADDR_TO_PTR (ACPI_HI_RSDP_WINDOW_BASE),
-                                 ACPI_HI_RSDP_WINDOW_SIZE);
+               mem_rover =
+                   acpi_tb_scan_memory_for_rsdp(ACPI_PHYSADDR_TO_PTR
+                                                (ACPI_HI_RSDP_WINDOW_BASE),
+                                                ACPI_HI_RSDP_WINDOW_SIZE);
                if (mem_rover) {
                        /* Found it, return the physical address */
 
-                       table_info->physical_address = ACPI_TO_INTEGER (mem_rover);
-                       return_ACPI_STATUS (AE_OK);
+                       table_info->physical_address =
+                           ACPI_TO_INTEGER(mem_rover);
+                       return_ACPI_STATUS(AE_OK);
                }
        }
 
-       /* RSDP signature was not found */
+       /* A valid RSDP was not found */
 
-       return_ACPI_STATUS (AE_NOT_FOUND);
+       ACPI_REPORT_ERROR(("No valid RSDP was found\n"));
+       return_ACPI_STATUS(AE_NOT_FOUND);
 }
 
 #endif
-
index 79c3a686bc44217d2b9cd078bff1a89444659e2d..a24847c08f7f43d47cc28b33440e5d8d1bd04268 100644 (file)
@@ -70,9 +70,9 @@
 #define CELSIUS_TO_KELVIN(t)   ((t+273)*10)
 
 #define _COMPONENT             ACPI_THERMAL_COMPONENT
-ACPI_MODULE_NAME               ("acpi_thermal")
+ACPI_MODULE_NAME("acpi_thermal")
 
-MODULE_AUTHOR("Paul Diefenbaugh");
+    MODULE_AUTHOR("Paul Diefenbaugh");
 MODULE_DESCRIPTION(ACPI_THERMAL_DRIVER_NAME);
 MODULE_LICENSE("GPL");
 
@@ -80,143 +80,145 @@ static int tzp;
 module_param(tzp, int, 0);
 MODULE_PARM_DESC(tzp, "Thermal zone polling frequency, in 1/10 seconds.\n");
 
-
-static int acpi_thermal_add (struct acpi_device *device);
-static int acpi_thermal_remove (struct acpi_device *device, int type);
+static int acpi_thermal_add(struct acpi_device *device);
+static int acpi_thermal_remove(struct acpi_device *device, int type);
 static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file);
 static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file);
 static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file);
-static ssize_t acpi_thermal_write_trip_points (struct file*,const char __user *,size_t,loff_t *);
+static ssize_t acpi_thermal_write_trip_points(struct file *,
+                                             const char __user *, size_t,
+                                             loff_t *);
 static int acpi_thermal_cooling_open_fs(struct inode *inode, struct file *file);
-static ssize_t acpi_thermal_write_cooling_mode (struct file*,const char __user *,size_t,loff_t *);
+static ssize_t acpi_thermal_write_cooling_mode(struct file *,
+                                              const char __user *, size_t,
+                                              loff_t *);
 static int acpi_thermal_polling_open_fs(struct inode *inode, struct file *file);
-static ssize_t acpi_thermal_write_polling(struct file*,const char __user *,size_t,loff_t *);
+static ssize_t acpi_thermal_write_polling(struct file *, const char __user *,
+                                         size_t, loff_t *);
 
 static struct acpi_driver acpi_thermal_driver = {
-       .name =         ACPI_THERMAL_DRIVER_NAME,
-       .class =        ACPI_THERMAL_CLASS,
-       .ids =          ACPI_THERMAL_HID,
-       .ops =          {
-                               .add =          acpi_thermal_add,
-                               .remove =       acpi_thermal_remove,
-                       },
+       .name = ACPI_THERMAL_DRIVER_NAME,
+       .class = ACPI_THERMAL_CLASS,
+       .ids = ACPI_THERMAL_HID,
+       .ops = {
+               .add = acpi_thermal_add,
+               .remove = acpi_thermal_remove,
+               },
 };
 
 struct acpi_thermal_state {
-       u8                      critical:1;
-       u8                      hot:1;
-       u8                      passive:1;
-       u8                      active:1;
-       u8                      reserved:4;
-       int                     active_index;
+       u8 critical:1;
+       u8 hot:1;
+       u8 passive:1;
+       u8 active:1;
+       u8 reserved:4;
+       int active_index;
 };
 
 struct acpi_thermal_state_flags {
-       u8                      valid:1;
-       u8                      enabled:1;
-       u8                      reserved:6;
+       u8 valid:1;
+       u8 enabled:1;
+       u8 reserved:6;
 };
 
 struct acpi_thermal_critical {
        struct acpi_thermal_state_flags flags;
-       unsigned long           temperature;
+       unsigned long temperature;
 };
 
 struct acpi_thermal_hot {
        struct acpi_thermal_state_flags flags;
-       unsigned long           temperature;
+       unsigned long temperature;
 };
 
 struct acpi_thermal_passive {
        struct acpi_thermal_state_flags flags;
-       unsigned long           temperature;
-       unsigned long           tc1;
-       unsigned long           tc2;
-       unsigned long           tsp;
-       struct acpi_handle_list devices;
+       unsigned long temperature;
+       unsigned long tc1;
+       unsigned long tc2;
+       unsigned long tsp;
+       struct acpi_handle_list devices;
 };
 
 struct acpi_thermal_active {
        struct acpi_thermal_state_flags flags;
-       unsigned long           temperature;
-       struct acpi_handle_list devices;
+       unsigned long temperature;
+       struct acpi_handle_list devices;
 };
 
 struct acpi_thermal_trips {
        struct acpi_thermal_critical critical;
-       struct acpi_thermal_hot hot;
+       struct acpi_thermal_hot hot;
        struct acpi_thermal_passive passive;
        struct acpi_thermal_active active[ACPI_THERMAL_MAX_ACTIVE];
 };
 
 struct acpi_thermal_flags {
-       u8                      cooling_mode:1;         /* _SCP */
-       u8                      devices:1;              /* _TZD */
-       u8                      reserved:6;
+       u8 cooling_mode:1;      /* _SCP */
+       u8 devices:1;           /* _TZD */
+       u8 reserved:6;
 };
 
 struct acpi_thermal {
-       acpi_handle             handle;
-       acpi_bus_id             name;
-       unsigned long           temperature;
-       unsigned long           last_temperature;
-       unsigned long           polling_frequency;
-       u8                      cooling_mode;
-       volatile u8             zombie;
+       acpi_handle handle;
+       acpi_bus_id name;
+       unsigned long temperature;
+       unsigned long last_temperature;
+       unsigned long polling_frequency;
+       u8 cooling_mode;
+       volatile u8 zombie;
        struct acpi_thermal_flags flags;
        struct acpi_thermal_state state;
        struct acpi_thermal_trips trips;
-       struct acpi_handle_list devices;
-       struct timer_list       timer;
+       struct acpi_handle_list devices;
+       struct timer_list timer;
 };
 
 static struct file_operations acpi_thermal_state_fops = {
-       .open           = acpi_thermal_state_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_thermal_state_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 static struct file_operations acpi_thermal_temp_fops = {
-       .open           = acpi_thermal_temp_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_thermal_temp_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 static struct file_operations acpi_thermal_trip_fops = {
-       .open           = acpi_thermal_trip_open_fs,
-       .read           = seq_read,
-       .write          = acpi_thermal_write_trip_points,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_thermal_trip_open_fs,
+       .read = seq_read,
+       .write = acpi_thermal_write_trip_points,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 static struct file_operations acpi_thermal_cooling_fops = {
-       .open           = acpi_thermal_cooling_open_fs,
-       .read           = seq_read,
-       .write          = acpi_thermal_write_cooling_mode,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_thermal_cooling_open_fs,
+       .read = seq_read,
+       .write = acpi_thermal_write_cooling_mode,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 static struct file_operations acpi_thermal_polling_fops = {
-       .open           = acpi_thermal_polling_open_fs,
-       .read           = seq_read,
-       .write          = acpi_thermal_write_polling,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_thermal_polling_open_fs,
+       .read = seq_read,
+       .write = acpi_thermal_write_polling,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 /* --------------------------------------------------------------------------
                              Thermal Zone Management
    -------------------------------------------------------------------------- */
 
-static int
-acpi_thermal_get_temperature (
-       struct acpi_thermal *tz)
+static int acpi_thermal_get_temperature(struct acpi_thermal *tz)
 {
-       acpi_status             status = AE_OK;
+       acpi_status status = AE_OK;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_get_temperature");
 
@@ -225,41 +227,39 @@ acpi_thermal_get_temperature (
 
        tz->last_temperature = tz->temperature;
 
-       status = acpi_evaluate_integer(tz->handle, "_TMP", NULL, &tz->temperature);
+       status =
+           acpi_evaluate_integer(tz->handle, "_TMP", NULL, &tz->temperature);
        if (ACPI_FAILURE(status))
                return_VALUE(-ENODEV);
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Temperature is %lu dK\n", tz->temperature));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Temperature is %lu dK\n",
+                         tz->temperature));
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_get_polling_frequency (
-       struct acpi_thermal     *tz)
+static int acpi_thermal_get_polling_frequency(struct acpi_thermal *tz)
 {
-       acpi_status             status = AE_OK;
+       acpi_status status = AE_OK;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_get_polling_frequency");
 
        if (!tz)
                return_VALUE(-EINVAL);
 
-       status = acpi_evaluate_integer(tz->handle, "_TZP", NULL, &tz->polling_frequency);
+       status =
+           acpi_evaluate_integer(tz->handle, "_TZP", NULL,
+                                 &tz->polling_frequency);
        if (ACPI_FAILURE(status))
                return_VALUE(-ENODEV);
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Polling frequency is %lu dS\n", tz->polling_frequency));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Polling frequency is %lu dS\n",
+                         tz->polling_frequency));
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_set_polling (
-       struct acpi_thermal     *tz,
-       int                     seconds)
+static int acpi_thermal_set_polling(struct acpi_thermal *tz, int seconds)
 {
        ACPI_FUNCTION_TRACE("acpi_thermal_set_polling");
 
@@ -268,21 +268,19 @@ acpi_thermal_set_polling (
 
        tz->polling_frequency = seconds * 10;   /* Convert value to deci-seconds */
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Polling frequency set to %lu seconds\n", tz->polling_frequency));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                         "Polling frequency set to %lu seconds\n",
+                         tz->polling_frequency));
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_set_cooling_mode (
-       struct acpi_thermal     *tz,
-       int                     mode)
+static int acpi_thermal_set_cooling_mode(struct acpi_thermal *tz, int mode)
 {
-       acpi_status             status = AE_OK;
-       union acpi_object       arg0 = {ACPI_TYPE_INTEGER};
-       struct acpi_object_list arg_list = {1, &arg0};
-       acpi_handle             handle = NULL;
+       acpi_status status = AE_OK;
+       union acpi_object arg0 = { ACPI_TYPE_INTEGER };
+       struct acpi_object_list arg_list = { 1, &arg0 };
+       acpi_handle handle = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_set_cooling_mode");
 
@@ -303,19 +301,16 @@ acpi_thermal_set_cooling_mode (
 
        tz->cooling_mode = mode;
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Cooling mode [%s]\n", 
-               mode?"passive":"active"));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Cooling mode [%s]\n",
+                         mode ? "passive" : "active"));
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_get_trip_points (
-       struct acpi_thermal *tz)
+static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
 {
-       acpi_status             status = AE_OK;
-       int                     i = 0;
+       acpi_status status = AE_OK;
+       int i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_get_trip_points");
 
@@ -324,111 +319,128 @@ acpi_thermal_get_trip_points (
 
        /* Critical Shutdown (required) */
 
-       status = acpi_evaluate_integer(tz->handle, "_CRT", NULL, 
-               &tz->trips.critical.temperature);
+       status = acpi_evaluate_integer(tz->handle, "_CRT", NULL,
+                                      &tz->trips.critical.temperature);
        if (ACPI_FAILURE(status)) {
                tz->trips.critical.flags.valid = 0;
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "No critical threshold\n"));
                return_VALUE(-ENODEV);
-       }
-       else {
+       } else {
                tz->trips.critical.flags.valid = 1;
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found critical threshold [%lu]\n", tz->trips.critical.temperature));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Found critical threshold [%lu]\n",
+                                 tz->trips.critical.temperature));
        }
 
        /* Critical Sleep (optional) */
 
-       status = acpi_evaluate_integer(tz->handle, "_HOT", NULL, &tz->trips.hot.temperature);
+       status =
+           acpi_evaluate_integer(tz->handle, "_HOT", NULL,
+                                 &tz->trips.hot.temperature);
        if (ACPI_FAILURE(status)) {
                tz->trips.hot.flags.valid = 0;
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No hot threshold\n"));
-       }
-       else {
+       } else {
                tz->trips.hot.flags.valid = 1;
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found hot threshold [%lu]\n", tz->trips.hot.temperature));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found hot threshold [%lu]\n",
+                                 tz->trips.hot.temperature));
        }
 
        /* Passive: Processors (optional) */
 
-       status = acpi_evaluate_integer(tz->handle, "_PSV", NULL, &tz->trips.passive.temperature);
+       status =
+           acpi_evaluate_integer(tz->handle, "_PSV", NULL,
+                                 &tz->trips.passive.temperature);
        if (ACPI_FAILURE(status)) {
                tz->trips.passive.flags.valid = 0;
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No passive threshold\n"));
-       }
-       else {
+       } else {
                tz->trips.passive.flags.valid = 1;
 
-               status = acpi_evaluate_integer(tz->handle, "_TC1", NULL, &tz->trips.passive.tc1);
+               status =
+                   acpi_evaluate_integer(tz->handle, "_TC1", NULL,
+                                         &tz->trips.passive.tc1);
                if (ACPI_FAILURE(status))
                        tz->trips.passive.flags.valid = 0;
 
-               status = acpi_evaluate_integer(tz->handle, "_TC2", NULL, &tz->trips.passive.tc2);
+               status =
+                   acpi_evaluate_integer(tz->handle, "_TC2", NULL,
+                                         &tz->trips.passive.tc2);
                if (ACPI_FAILURE(status))
                        tz->trips.passive.flags.valid = 0;
 
-               status = acpi_evaluate_integer(tz->handle, "_TSP", NULL, &tz->trips.passive.tsp);
+               status =
+                   acpi_evaluate_integer(tz->handle, "_TSP", NULL,
+                                         &tz->trips.passive.tsp);
                if (ACPI_FAILURE(status))
                        tz->trips.passive.flags.valid = 0;
 
-               status = acpi_evaluate_reference(tz->handle, "_PSL", NULL, &tz->trips.passive.devices);
+               status =
+                   acpi_evaluate_reference(tz->handle, "_PSL", NULL,
+                                           &tz->trips.passive.devices);
                if (ACPI_FAILURE(status))
                        tz->trips.passive.flags.valid = 0;
 
                if (!tz->trips.passive.flags.valid)
-                       ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid passive threshold\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                         "Invalid passive threshold\n"));
                else
-                       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found passive threshold [%lu]\n", tz->trips.passive.temperature));
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "Found passive threshold [%lu]\n",
+                                         tz->trips.passive.temperature));
        }
 
        /* Active: Fans, etc. (optional) */
 
-       for (i=0; i<ACPI_THERMAL_MAX_ACTIVE; i++) {
+       for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
 
-               char name[5] = {'_','A','C',('0'+i),'\0'};
+               char name[5] = { '_', 'A', 'C', ('0' + i), '\0' };
 
-               status = acpi_evaluate_integer(tz->handle, name, NULL, &tz->trips.active[i].temperature);
+               status =
+                   acpi_evaluate_integer(tz->handle, name, NULL,
+                                         &tz->trips.active[i].temperature);
                if (ACPI_FAILURE(status))
                        break;
 
                name[2] = 'L';
-               status = acpi_evaluate_reference(tz->handle, name, NULL, &tz->trips.active[i].devices);
+               status =
+                   acpi_evaluate_reference(tz->handle, name, NULL,
+                                           &tz->trips.active[i].devices);
                if (ACPI_SUCCESS(status)) {
                        tz->trips.active[i].flags.valid = 1;
-                       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found active threshold [%d]:[%lu]\n", i, tz->trips.active[i].temperature));
-               }
-               else
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid active threshold [%d]\n", i));
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "Found active threshold [%d]:[%lu]\n",
+                                         i, tz->trips.active[i].temperature));
+               } else
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid active threshold [%d]\n",
+                                         i));
        }
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_get_devices (
-       struct acpi_thermal     *tz)
+static int acpi_thermal_get_devices(struct acpi_thermal *tz)
 {
-       acpi_status             status = AE_OK;
+       acpi_status status = AE_OK;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_get_devices");
 
        if (!tz)
                return_VALUE(-EINVAL);
 
-       status = acpi_evaluate_reference(tz->handle, "_TZD", NULL, &tz->devices);
+       status =
+           acpi_evaluate_reference(tz->handle, "_TZD", NULL, &tz->devices);
        if (ACPI_FAILURE(status))
                return_VALUE(-ENODEV);
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_call_usermode (
-       char                    *path)
+static int acpi_thermal_call_usermode(char *path)
 {
-       char                    *argv[2] = {NULL, NULL};
-       char                    *envp[3] = {NULL, NULL, NULL};
+       char *argv[2] = { NULL, NULL };
+       char *envp[3] = { NULL, NULL, NULL };
 
        ACPI_FUNCTION_TRACE("acpi_thermal_call_usermode");
 
@@ -440,19 +452,16 @@ acpi_thermal_call_usermode (
        /* minimal command environment */
        envp[0] = "HOME=/";
        envp[1] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
-       
+
        call_usermodehelper(argv[0], argv, envp, 0);
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_critical (
-       struct acpi_thermal     *tz)
+static int acpi_thermal_critical(struct acpi_thermal *tz)
 {
-       int                     result = 0;
-       struct acpi_device      *device = NULL;
+       int result = 0;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_critical");
 
@@ -462,29 +471,28 @@ acpi_thermal_critical (
        if (tz->temperature >= tz->trips.critical.temperature) {
                ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Critical trip point\n"));
                tz->trips.critical.flags.enabled = 1;
-       }
-       else if (tz->trips.critical.flags.enabled)
+       } else if (tz->trips.critical.flags.enabled)
                tz->trips.critical.flags.enabled = 0;
 
        result = acpi_bus_get_device(tz->handle, &device);
        if (result)
                return_VALUE(result);
 
-       printk(KERN_EMERG "Critical temperature reached (%ld C), shutting down.\n", KELVIN_TO_CELSIUS(tz->temperature));
-       acpi_bus_generate_event(device, ACPI_THERMAL_NOTIFY_CRITICAL, tz->trips.critical.flags.enabled);
+       printk(KERN_EMERG
+              "Critical temperature reached (%ld C), shutting down.\n",
+              KELVIN_TO_CELSIUS(tz->temperature));
+       acpi_bus_generate_event(device, ACPI_THERMAL_NOTIFY_CRITICAL,
+                               tz->trips.critical.flags.enabled);
 
        acpi_thermal_call_usermode(ACPI_THERMAL_PATH_POWEROFF);
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_hot (
-       struct acpi_thermal     *tz)
+static int acpi_thermal_hot(struct acpi_thermal *tz)
 {
-       int                     result = 0;
-       struct acpi_device      *device = NULL;
+       int result = 0;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_hot");
 
@@ -494,30 +502,27 @@ acpi_thermal_hot (
        if (tz->temperature >= tz->trips.hot.temperature) {
                ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Hot trip point\n"));
                tz->trips.hot.flags.enabled = 1;
-       }
-       else if (tz->trips.hot.flags.enabled)
+       } else if (tz->trips.hot.flags.enabled)
                tz->trips.hot.flags.enabled = 0;
 
        result = acpi_bus_get_device(tz->handle, &device);
        if (result)
                return_VALUE(result);
 
-       acpi_bus_generate_event(device, ACPI_THERMAL_NOTIFY_HOT, tz->trips.hot.flags.enabled);
+       acpi_bus_generate_event(device, ACPI_THERMAL_NOTIFY_HOT,
+                               tz->trips.hot.flags.enabled);
 
        /* TBD: Call user-mode "sleep(S4)" function */
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_passive (
-       struct acpi_thermal     *tz)
+static int acpi_thermal_passive(struct acpi_thermal *tz)
 {
-       int                     result = 0;
+       int result = 0;
        struct acpi_thermal_passive *passive = NULL;
-       int                     trend = 0;
-       int                     i = 0;
+       int trend = 0;
+       int i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_passive");
 
@@ -534,25 +539,29 @@ acpi_thermal_passive (
         * accordingly.  Note that we assume symmetry.
         */
        if (tz->temperature >= passive->temperature) {
-               trend = (passive->tc1 * (tz->temperature - tz->last_temperature)) + (passive->tc2 * (tz->temperature - passive->temperature));
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, 
-                       "trend[%d]=(tc1[%lu]*(tmp[%lu]-last[%lu]))+(tc2[%lu]*(tmp[%lu]-psv[%lu]))\n", 
-                       trend, passive->tc1, tz->temperature, 
-                       tz->last_temperature, passive->tc2, 
-                       tz->temperature, passive->temperature));
+               trend =
+                   (passive->tc1 * (tz->temperature - tz->last_temperature)) +
+                   (passive->tc2 * (tz->temperature - passive->temperature));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "trend[%d]=(tc1[%lu]*(tmp[%lu]-last[%lu]))+(tc2[%lu]*(tmp[%lu]-psv[%lu]))\n",
+                                 trend, passive->tc1, tz->temperature,
+                                 tz->last_temperature, passive->tc2,
+                                 tz->temperature, passive->temperature));
                tz->trips.passive.flags.enabled = 1;
                /* Heating up? */
                if (trend > 0)
-                       for (i=0; i<passive->devices.count; i++)
-                               acpi_processor_set_thermal_limit(
-                                       passive->devices.handles[i], 
-                                       ACPI_PROCESSOR_LIMIT_INCREMENT);
+                       for (i = 0; i < passive->devices.count; i++)
+                               acpi_processor_set_thermal_limit(passive->
+                                                                devices.
+                                                                handles[i],
+                                                                ACPI_PROCESSOR_LIMIT_INCREMENT);
                /* Cooling off? */
                else if (trend < 0)
-                       for (i=0; i<passive->devices.count; i++)
-                               acpi_processor_set_thermal_limit(
-                                       passive->devices.handles[i], 
-                                       ACPI_PROCESSOR_LIMIT_DECREMENT);
+                       for (i = 0; i < passive->devices.count; i++)
+                               acpi_processor_set_thermal_limit(passive->
+                                                                devices.
+                                                                handles[i],
+                                                                ACPI_PROCESSOR_LIMIT_DECREMENT);
        }
 
        /*
@@ -563,37 +572,35 @@ acpi_thermal_passive (
         * assume symmetry.
         */
        else if (tz->trips.passive.flags.enabled) {
-               for (i=0; i<passive->devices.count; i++)
-                       result = acpi_processor_set_thermal_limit(
-                               passive->devices.handles[i], 
-                               ACPI_PROCESSOR_LIMIT_DECREMENT);
+               for (i = 0; i < passive->devices.count; i++)
+                       result =
+                           acpi_processor_set_thermal_limit(passive->devices.
+                                                            handles[i],
+                                                            ACPI_PROCESSOR_LIMIT_DECREMENT);
                if (result == 1) {
                        tz->trips.passive.flags.enabled = 0;
-                       ACPI_DEBUG_PRINT((ACPI_DB_INFO, 
-                               "Disabling passive cooling (zone is cool)\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "Disabling passive cooling (zone is cool)\n"));
                }
        }
 
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_active (
-       struct acpi_thermal     *tz)
+static int acpi_thermal_active(struct acpi_thermal *tz)
 {
-       int                     result = 0;
+       int result = 0;
        struct acpi_thermal_active *active = NULL;
-       int                     i = 0;
-       int                     j = 0;
-       unsigned long           maxtemp = 0;
+       int i = 0;
+       int j = 0;
+       unsigned long maxtemp = 0;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_active");
 
        if (!tz)
                return_VALUE(-EINVAL);
 
-       for (i=0; i<ACPI_THERMAL_MAX_ACTIVE; i++) {
+       for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
 
                active = &(tz->trips.active[i]);
                if (!active || !active->flags.valid)
@@ -607,16 +614,27 @@ acpi_thermal_active (
                 */
                if (tz->temperature >= active->temperature) {
                        if (active->temperature > maxtemp)
-                               tz->state.active_index = i, maxtemp = active->temperature;
+                               tz->state.active_index = i, maxtemp =
+                                   active->temperature;
                        if (!active->flags.enabled) {
                                for (j = 0; j < active->devices.count; j++) {
-                                       result = acpi_bus_set_power(active->devices.handles[j], ACPI_STATE_D0);
+                                       result =
+                                           acpi_bus_set_power(active->devices.
+                                                              handles[j],
+                                                              ACPI_STATE_D0);
                                        if (result) {
-                                               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Unable to turn cooling device [%p] 'on'\n", active->devices.handles[j]));
+                                               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                                 "Unable to turn cooling device [%p] 'on'\n",
+                                                                 active->
+                                                                 devices.
+                                                                 handles[j]));
                                                continue;
                                        }
                                        active->flags.enabled = 1;
-                                       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Cooling device [%p] now 'on'\n", active->devices.handles[j]));
+                                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                                         "Cooling device [%p] now 'on'\n",
+                                                         active->devices.
+                                                         handles[j]));
                                }
                        }
                }
@@ -628,13 +646,21 @@ acpi_thermal_active (
                 */
                else if (active->flags.enabled) {
                        for (j = 0; j < active->devices.count; j++) {
-                               result = acpi_bus_set_power(active->devices.handles[j], ACPI_STATE_D3);
+                               result =
+                                   acpi_bus_set_power(active->devices.
+                                                      handles[j],
+                                                      ACPI_STATE_D3);
                                if (result) {
-                                       ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Unable to turn cooling device [%p] 'off'\n", active->devices.handles[j]));
+                                       ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                         "Unable to turn cooling device [%p] 'off'\n",
+                                                         active->devices.
+                                                         handles[j]));
                                        continue;
                                }
                                active->flags.enabled = 0;
-                               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Cooling device [%p] now 'off'\n", active->devices.handles[j]));
+                               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                                 "Cooling device [%p] now 'off'\n",
+                                                 active->devices.handles[j]));
                        }
                }
        }
@@ -642,28 +668,22 @@ acpi_thermal_active (
        return_VALUE(0);
 }
 
+static void acpi_thermal_check(void *context);
 
-static void acpi_thermal_check (void *context);
-
-static void
-acpi_thermal_run (
-       unsigned long           data)
+static void acpi_thermal_run(unsigned long data)
 {
        struct acpi_thermal *tz = (struct acpi_thermal *)data;
        if (!tz->zombie)
-               acpi_os_queue_for_execution(OSD_PRIORITY_GPE,  
-                       acpi_thermal_check, (void *) data);
+               acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
+                                           acpi_thermal_check, (void *)data);
 }
 
-
-static void
-acpi_thermal_check (
-       void                    *data)
+static void acpi_thermal_check(void *data)
 {
-       int                     result = 0;
-       struct acpi_thermal     *tz = (struct acpi_thermal *) data;
-       unsigned long           sleep_time = 0;
-       int                     i = 0;
+       int result = 0;
+       struct acpi_thermal *tz = (struct acpi_thermal *)data;
+       unsigned long sleep_time = 0;
+       int i = 0;
        struct acpi_thermal_state state;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_check");
@@ -678,9 +698,9 @@ acpi_thermal_check (
        result = acpi_thermal_get_temperature(tz);
        if (result)
                return_VOID;
-       
+
        memset(&tz->state, 0, sizeof(tz->state));
-       
+
        /*
         * Check Trip Points
         * -----------------
@@ -690,14 +710,18 @@ acpi_thermal_check (
         * individual policy decides when it is exited (e.g. hysteresis).
         */
        if (tz->trips.critical.flags.valid)
-               state.critical |= (tz->temperature >= tz->trips.critical.temperature);
+               state.critical |=
+                   (tz->temperature >= tz->trips.critical.temperature);
        if (tz->trips.hot.flags.valid)
                state.hot |= (tz->temperature >= tz->trips.hot.temperature);
        if (tz->trips.passive.flags.valid)
-               state.passive |= (tz->temperature >= tz->trips.passive.temperature);
-       for (i=0; i<ACPI_THERMAL_MAX_ACTIVE; i++)
+               state.passive |=
+                   (tz->temperature >= tz->trips.passive.temperature);
+       for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++)
                if (tz->trips.active[i].flags.valid)
-                       state.active |= (tz->temperature >= tz->trips.active[i].temperature);
+                       state.active |=
+                           (tz->temperature >=
+                            tz->trips.active[i].temperature);
 
        /*
         * Invoke Policy
@@ -726,7 +750,7 @@ acpi_thermal_check (
                tz->state.hot = 1;
        if (tz->trips.passive.flags.enabled)
                tz->state.passive = 1;
-       for (i=0; i<ACPI_THERMAL_MAX_ACTIVE; i++)
+       for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++)
                if (tz->trips.active[i].flags.enabled)
                        tz->state.active = 1;
 
@@ -744,8 +768,8 @@ acpi_thermal_check (
        else if (tz->polling_frequency > 0)
                sleep_time = tz->polling_frequency * 100;
 
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s: temperature[%lu] sleep[%lu]\n", 
-               tz->name, tz->temperature, sleep_time));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s: temperature[%lu] sleep[%lu]\n",
+                         tz->name, tz->temperature, sleep_time));
 
        /*
         * Schedule Next Poll
@@ -754,12 +778,11 @@ acpi_thermal_check (
        if (!sleep_time) {
                if (timer_pending(&(tz->timer)))
                        del_timer(&(tz->timer));
-       }
-       else {
+       } else {
                if (timer_pending(&(tz->timer)))
                        mod_timer(&(tz->timer), (HZ * sleep_time) / 1000);
                else {
-                       tz->timer.data = (unsigned long) tz;
+                       tz->timer.data = (unsigned long)tz;
                        tz->timer.function = acpi_thermal_run;
                        tz->timer.expires = jiffies + (HZ * sleep_time) / 1000;
                        add_timer(&(tz->timer));
@@ -769,16 +792,15 @@ acpi_thermal_check (
        return_VOID;
 }
 
-
 /* --------------------------------------------------------------------------
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-static struct proc_dir_entry   *acpi_thermal_dir;
+static struct proc_dir_entry *acpi_thermal_dir;
 
 static int acpi_thermal_state_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_thermal     *tz = (struct acpi_thermal *)seq->private;
+       struct acpi_thermal *tz = (struct acpi_thermal *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_state_seq_show");
 
@@ -787,7 +809,8 @@ static int acpi_thermal_state_seq_show(struct seq_file *seq, void *offset)
 
        seq_puts(seq, "state:                   ");
 
-       if (!tz->state.critical && !tz->state.hot && !tz->state.passive && !tz->state.active)
+       if (!tz->state.critical && !tz->state.hot && !tz->state.passive
+           && !tz->state.active)
                seq_puts(seq, "ok\n");
        else {
                if (tz->state.critical)
@@ -801,7 +824,7 @@ static int acpi_thermal_state_seq_show(struct seq_file *seq, void *offset)
                seq_puts(seq, "\n");
        }
 
-end:
+      end:
        return_VALUE(0);
 }
 
@@ -810,11 +833,10 @@ static int acpi_thermal_state_open_fs(struct inode *inode, struct file *file)
        return single_open(file, acpi_thermal_state_seq_show, PDE(inode)->data);
 }
 
-
 static int acpi_thermal_temp_seq_show(struct seq_file *seq, void *offset)
 {
-       int                     result = 0;
-       struct acpi_thermal     *tz = (struct acpi_thermal *)seq->private;
+       int result = 0;
+       struct acpi_thermal *tz = (struct acpi_thermal *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_temp_seq_show");
 
@@ -825,10 +847,10 @@ static int acpi_thermal_temp_seq_show(struct seq_file *seq, void *offset)
        if (result)
                goto end;
 
-       seq_printf(seq, "temperature:             %ld C\n", 
-               KELVIN_TO_CELSIUS(tz->temperature));
+       seq_printf(seq, "temperature:             %ld C\n",
+                  KELVIN_TO_CELSIUS(tz->temperature));
 
-end:
+      end:
        return_VALUE(0);
 }
 
@@ -837,12 +859,11 @@ static int acpi_thermal_temp_open_fs(struct inode *inode, struct file *file)
        return single_open(file, acpi_thermal_temp_seq_show, PDE(inode)->data);
 }
 
-
 static int acpi_thermal_trip_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_thermal     *tz = (struct acpi_thermal *)seq->private;
-       int                     i = 0;
-       int                     j = 0;
+       struct acpi_thermal *tz = (struct acpi_thermal *)seq->private;
+       int i = 0;
+       int j = 0;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_trip_seq_show");
 
@@ -851,21 +872,22 @@ static int acpi_thermal_trip_seq_show(struct seq_file *seq, void *offset)
 
        if (tz->trips.critical.flags.valid)
                seq_printf(seq, "critical (S5):           %ld C\n",
-                       KELVIN_TO_CELSIUS(tz->trips.critical.temperature));
+                          KELVIN_TO_CELSIUS(tz->trips.critical.temperature));
 
        if (tz->trips.hot.flags.valid)
                seq_printf(seq, "hot (S4):                %ld C\n",
-                       KELVIN_TO_CELSIUS(tz->trips.hot.temperature));
+                          KELVIN_TO_CELSIUS(tz->trips.hot.temperature));
 
        if (tz->trips.passive.flags.valid) {
-               seq_printf(seq, "passive:                 %ld C: tc1=%lu tc2=%lu tsp=%lu devices=",
-                       KELVIN_TO_CELSIUS(tz->trips.passive.temperature),
-                       tz->trips.passive.tc1,
-                       tz->trips.passive.tc2, 
-                       tz->trips.passive.tsp);
-               for (j=0; j<tz->trips.passive.devices.count; j++) {
-
-                       seq_printf(seq, "0x%p ", tz->trips.passive.devices.handles[j]);
+               seq_printf(seq,
+                          "passive:                 %ld C: tc1=%lu tc2=%lu tsp=%lu devices=",
+                          KELVIN_TO_CELSIUS(tz->trips.passive.temperature),
+                          tz->trips.passive.tc1, tz->trips.passive.tc2,
+                          tz->trips.passive.tsp);
+               for (j = 0; j < tz->trips.passive.devices.count; j++) {
+
+                       seq_printf(seq, "0x%p ",
+                                  tz->trips.passive.devices.handles[j]);
                }
                seq_puts(seq, "\n");
        }
@@ -874,14 +896,15 @@ static int acpi_thermal_trip_seq_show(struct seq_file *seq, void *offset)
                if (!(tz->trips.active[i].flags.valid))
                        break;
                seq_printf(seq, "active[%d]:               %ld C: devices=",
-                       i, KELVIN_TO_CELSIUS(tz->trips.active[i].temperature));
-               for (j = 0; j < tz->trips.active[i].devices.count; j++) 
+                          i,
+                          KELVIN_TO_CELSIUS(tz->trips.active[i].temperature));
+               for (j = 0; j < tz->trips.active[i].devices.count; j++)
                        seq_printf(seq, "0x%p ",
-                               tz->trips.active[i].devices.handles[j]);
+                                  tz->trips.active[i].devices.handles[j]);
                seq_puts(seq, "\n");
        }
 
-end:
+      end:
        return_VALUE(0);
 }
 
@@ -891,30 +914,28 @@ static int acpi_thermal_trip_open_fs(struct inode *inode, struct file *file)
 }
 
 static ssize_t
-acpi_thermal_write_trip_points (
-        struct file            *file,
-        const char             __user *buffer,
-        size_t                 count,
-        loff_t                 *ppos)
+acpi_thermal_write_trip_points(struct file *file,
+                              const char __user * buffer,
+                              size_t count, loff_t * ppos)
 {
-       struct seq_file         *m = (struct seq_file *)file->private_data;
-       struct acpi_thermal     *tz = (struct acpi_thermal *)m->private;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_thermal *tz = (struct acpi_thermal *)m->private;
 
-       char                    *limit_string; 
-       int                     num, critical, hot, passive;
-       int                     *active; 
-       int                     i = 0;
+       char *limit_string;
+       int num, critical, hot, passive;
+       int *active;
+       int i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_write_trip_points");
 
        limit_string = kmalloc(ACPI_THERMAL_MAX_LIMIT_STR_LEN, GFP_KERNEL);
-       if(!limit_string)
+       if (!limit_string)
                return_VALUE(-ENOMEM);
 
        memset(limit_string, 0, ACPI_THERMAL_MAX_LIMIT_STR_LEN);
 
-       active = kmalloc(ACPI_THERMAL_MAX_ACTIVE *sizeof(int), GFP_KERNEL);
-       if(!active)
+       active = kmalloc(ACPI_THERMAL_MAX_ACTIVE * sizeof(int), GFP_KERNEL);
+       if (!active)
                return_VALUE(-ENOMEM);
 
        if (!tz || (count > ACPI_THERMAL_MAX_LIMIT_STR_LEN - 1)) {
@@ -922,20 +943,21 @@ acpi_thermal_write_trip_points (
                count = -EINVAL;
                goto end;
        }
-       
+
        if (copy_from_user(limit_string, buffer, count)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid data\n"));
                count = -EFAULT;
                goto end;
        }
-       
+
        limit_string[count] = '\0';
 
        num = sscanf(limit_string, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d",
-                               &critical, &hot, &passive,
-                               &active[0], &active[1], &active[2], &active[3], &active[4],
-                               &active[5], &active[6], &active[7], &active[8], &active[9]);
-       if(!(num >=5 && num < (ACPI_THERMAL_MAX_ACTIVE + 3))) {
+                    &critical, &hot, &passive,
+                    &active[0], &active[1], &active[2], &active[3], &active[4],
+                    &active[5], &active[6], &active[7], &active[8],
+                    &active[9]);
+       if (!(num >= 5 && num < (ACPI_THERMAL_MAX_ACTIVE + 3))) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid data format\n"));
                count = -EINVAL;
                goto end;
@@ -949,17 +971,16 @@ acpi_thermal_write_trip_points (
                        break;
                tz->trips.active[i].temperature = CELSIUS_TO_KELVIN(active[i]);
        }
-       
-end:
+
+      end:
        kfree(active);
        kfree(limit_string);
        return_VALUE(count);
 }
 
-
 static int acpi_thermal_cooling_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_thermal     *tz = (struct acpi_thermal *)seq->private;
+       struct acpi_thermal *tz = (struct acpi_thermal *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_cooling_seq_show");
 
@@ -970,33 +991,31 @@ static int acpi_thermal_cooling_seq_show(struct seq_file *seq, void *offset)
                seq_puts(seq, "<setting not supported>\n");
        }
 
-       if ( tz->cooling_mode == ACPI_THERMAL_MODE_CRITICAL )
+       if (tz->cooling_mode == ACPI_THERMAL_MODE_CRITICAL)
                seq_printf(seq, "cooling mode:  critical\n");
        else
                seq_printf(seq, "cooling mode:  %s\n",
-                       tz->cooling_mode?"passive":"active");
+                          tz->cooling_mode ? "passive" : "active");
 
-end:
+      end:
        return_VALUE(0);
 }
 
 static int acpi_thermal_cooling_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_thermal_cooling_seq_show,
-                                                       PDE(inode)->data);
+                          PDE(inode)->data);
 }
 
 static ssize_t
-acpi_thermal_write_cooling_mode (
-       struct file             *file,
-       const char              __user *buffer,
-       size_t                  count,
-       loff_t                  *ppos)
+acpi_thermal_write_cooling_mode(struct file *file,
+                               const char __user * buffer,
+                               size_t count, loff_t * ppos)
 {
-       struct seq_file         *m = (struct seq_file *)file->private_data;
-       struct acpi_thermal     *tz = (struct acpi_thermal *)m->private;
-       int                     result = 0;
-       char                    mode_string[12] = {'\0'};
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_thermal *tz = (struct acpi_thermal *)m->private;
+       int result = 0;
+       char mode_string[12] = { '\0' };
 
        ACPI_FUNCTION_TRACE("acpi_thermal_write_cooling_mode");
 
@@ -1008,11 +1027,12 @@ acpi_thermal_write_cooling_mode (
 
        if (copy_from_user(mode_string, buffer, count))
                return_VALUE(-EFAULT);
-       
+
        mode_string[count] = '\0';
-       
-       result = acpi_thermal_set_cooling_mode(tz, 
-               simple_strtoul(mode_string, NULL, 0));
+
+       result = acpi_thermal_set_cooling_mode(tz,
+                                              simple_strtoul(mode_string, NULL,
+                                                             0));
        if (result)
                return_VALUE(result);
 
@@ -1021,10 +1041,9 @@ acpi_thermal_write_cooling_mode (
        return_VALUE(count);
 }
 
-
 static int acpi_thermal_polling_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_thermal     *tz = (struct acpi_thermal *)seq->private;
+       struct acpi_thermal *tz = (struct acpi_thermal *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_polling_seq_show");
 
@@ -1037,43 +1056,41 @@ static int acpi_thermal_polling_seq_show(struct seq_file *seq, void *offset)
        }
 
        seq_printf(seq, "polling frequency:       %lu seconds\n",
-               (tz->polling_frequency / 10));
+                  (tz->polling_frequency / 10));
 
-end:
+      end:
        return_VALUE(0);
 }
 
 static int acpi_thermal_polling_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_thermal_polling_seq_show,
-                                                       PDE(inode)->data);
+                          PDE(inode)->data);
 }
 
 static ssize_t
-acpi_thermal_write_polling (
-       struct file             *file,
-       const char              __user *buffer,
-       size_t                  count,
-       loff_t                  *ppos)
+acpi_thermal_write_polling(struct file *file,
+                          const char __user * buffer,
+                          size_t count, loff_t * ppos)
 {
-       struct seq_file         *m = (struct seq_file *)file->private_data;
-       struct acpi_thermal     *tz = (struct acpi_thermal *)m->private;
-       int                     result = 0;
-       char                    polling_string[12] = {'\0'};
-       int                     seconds = 0;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_thermal *tz = (struct acpi_thermal *)m->private;
+       int result = 0;
+       char polling_string[12] = { '\0' };
+       int seconds = 0;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_write_polling");
 
        if (!tz || (count > sizeof(polling_string) - 1))
                return_VALUE(-EINVAL);
-       
+
        if (copy_from_user(polling_string, buffer, count))
                return_VALUE(-EFAULT);
-       
+
        polling_string[count] = '\0';
 
        seconds = simple_strtoul(polling_string, NULL, 0);
-       
+
        result = acpi_thermal_set_polling(tz, seconds);
        if (result)
                return_VALUE(result);
@@ -1083,18 +1100,15 @@ acpi_thermal_write_polling (
        return_VALUE(count);
 }
 
-
-static int
-acpi_thermal_add_fs (
-       struct acpi_device      *device)
+static int acpi_thermal_add_fs(struct acpi_device *device)
 {
-       struct proc_dir_entry   *entry = NULL;
+       struct proc_dir_entry *entry = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_add_fs");
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
-                       acpi_thermal_dir);
+                                                    acpi_thermal_dir);
                if (!acpi_device_dir(device))
                        return_VALUE(-ENODEV);
                acpi_device_dir(device)->owner = THIS_MODULE;
@@ -1102,11 +1116,11 @@ acpi_thermal_add_fs (
 
        /* 'state' [R] */
        entry = create_proc_entry(ACPI_THERMAL_FILE_STATE,
-               S_IRUGO, acpi_device_dir(device));
+                                 S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_THERMAL_FILE_STATE));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_THERMAL_FILE_STATE));
        else {
                entry->proc_fops = &acpi_thermal_state_fops;
                entry->data = acpi_driver_data(device);
@@ -1115,11 +1129,11 @@ acpi_thermal_add_fs (
 
        /* 'temperature' [R] */
        entry = create_proc_entry(ACPI_THERMAL_FILE_TEMPERATURE,
-               S_IRUGO, acpi_device_dir(device));
+                                 S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_THERMAL_FILE_TEMPERATURE));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_THERMAL_FILE_TEMPERATURE));
        else {
                entry->proc_fops = &acpi_thermal_temp_fops;
                entry->data = acpi_driver_data(device);
@@ -1128,11 +1142,12 @@ acpi_thermal_add_fs (
 
        /* 'trip_points' [R/W] */
        entry = create_proc_entry(ACPI_THERMAL_FILE_TRIP_POINTS,
-               S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+                                 S_IFREG | S_IRUGO | S_IWUSR,
+                                 acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_THERMAL_FILE_TRIP_POINTS));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_THERMAL_FILE_TRIP_POINTS));
        else {
                entry->proc_fops = &acpi_thermal_trip_fops;
                entry->data = acpi_driver_data(device);
@@ -1141,11 +1156,12 @@ acpi_thermal_add_fs (
 
        /* 'cooling_mode' [R/W] */
        entry = create_proc_entry(ACPI_THERMAL_FILE_COOLING_MODE,
-               S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+                                 S_IFREG | S_IRUGO | S_IWUSR,
+                                 acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_THERMAL_FILE_COOLING_MODE));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_THERMAL_FILE_COOLING_MODE));
        else {
                entry->proc_fops = &acpi_thermal_cooling_fops;
                entry->data = acpi_driver_data(device);
@@ -1154,11 +1170,12 @@ acpi_thermal_add_fs (
 
        /* 'polling_frequency' [R/W] */
        entry = create_proc_entry(ACPI_THERMAL_FILE_POLLING_FREQ,
-               S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+                                 S_IFREG | S_IRUGO | S_IWUSR,
+                                 acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create '%s' fs entry\n",
-                       ACPI_THERMAL_FILE_POLLING_FREQ));
+                                 "Unable to create '%s' fs entry\n",
+                                 ACPI_THERMAL_FILE_POLLING_FREQ));
        else {
                entry->proc_fops = &acpi_thermal_polling_fops;
                entry->data = acpi_driver_data(device);
@@ -1168,10 +1185,7 @@ acpi_thermal_add_fs (
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_remove_fs (
-       struct acpi_device      *device)
+static int acpi_thermal_remove_fs(struct acpi_device *device)
 {
        ACPI_FUNCTION_TRACE("acpi_thermal_remove_fs");
 
@@ -1193,19 +1207,14 @@ acpi_thermal_remove_fs (
        return_VALUE(0);
 }
 
-
 /* --------------------------------------------------------------------------
                                  Driver Interface
    -------------------------------------------------------------------------- */
 
-static void
-acpi_thermal_notify (
-       acpi_handle             handle,
-       u32                     event,
-       void                    *data)
+static void acpi_thermal_notify(acpi_handle handle, u32 event, void *data)
 {
-       struct acpi_thermal     *tz = (struct acpi_thermal *) data;
-       struct acpi_device      *device = NULL;
+       struct acpi_thermal *tz = (struct acpi_thermal *)data;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_notify");
 
@@ -1231,19 +1240,16 @@ acpi_thermal_notify (
                break;
        default:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Unsupported event [0x%x]\n", event));
+                                 "Unsupported event [0x%x]\n", event));
                break;
        }
 
        return_VOID;
 }
 
-
-static int
-acpi_thermal_get_info (
-       struct acpi_thermal     *tz)
+static int acpi_thermal_get_info(struct acpi_thermal *tz)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_get_info");
 
@@ -1262,20 +1268,24 @@ acpi_thermal_get_info (
 
        /* Set the cooling mode [_SCP] to active cooling (default) */
        result = acpi_thermal_set_cooling_mode(tz, ACPI_THERMAL_MODE_ACTIVE);
-       if (!result) 
+       if (!result)
                tz->flags.cooling_mode = 1;
-       else { 
+       else {
                /* Oh,we have not _SCP method.
-                  Generally show cooling_mode by _ACx, _PSV,spec 12.2*/
+                  Generally show cooling_mode by _ACx, _PSV,spec 12.2 */
                tz->flags.cooling_mode = 0;
-               if ( tz->trips.active[0].flags.valid && tz->trips.passive.flags.valid ) {
-                       if ( tz->trips.passive.temperature > tz->trips.active[0].temperature )
+               if (tz->trips.active[0].flags.valid
+                   && tz->trips.passive.flags.valid) {
+                       if (tz->trips.passive.temperature >
+                           tz->trips.active[0].temperature)
                                tz->cooling_mode = ACPI_THERMAL_MODE_ACTIVE;
-                       else 
+                       else
                                tz->cooling_mode = ACPI_THERMAL_MODE_PASSIVE;
-               } else if ( !tz->trips.active[0].flags.valid && tz->trips.passive.flags.valid ) {
+               } else if (!tz->trips.active[0].flags.valid
+                          && tz->trips.passive.flags.valid) {
                        tz->cooling_mode = ACPI_THERMAL_MODE_PASSIVE;
-               } else if ( tz->trips.active[0].flags.valid && !tz->trips.passive.flags.valid ) {
+               } else if (tz->trips.active[0].flags.valid
+                          && !tz->trips.passive.flags.valid) {
                        tz->cooling_mode = ACPI_THERMAL_MODE_ACTIVE;
                } else {
                        /* _ACx and _PSV are optional, but _CRT is required */
@@ -1297,14 +1307,11 @@ acpi_thermal_get_info (
        return_VALUE(0);
 }
 
-
-static int
-acpi_thermal_add (
-       struct acpi_device              *device)
+static int acpi_thermal_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = AE_OK;
-       struct acpi_thermal     *tz = NULL;
+       int result = 0;
+       acpi_status status = AE_OK;
+       struct acpi_thermal *tz = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_add");
 
@@ -1335,19 +1342,20 @@ acpi_thermal_add (
        acpi_thermal_check(tz);
 
        status = acpi_install_notify_handler(tz->handle,
-               ACPI_DEVICE_NOTIFY, acpi_thermal_notify, tz);
+                                            ACPI_DEVICE_NOTIFY,
+                                            acpi_thermal_notify, tz);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error installing notify handler\n"));
+                                 "Error installing notify handler\n"));
                result = -ENODEV;
                goto end;
        }
 
        printk(KERN_INFO PREFIX "%s [%s] (%ld C)\n",
-               acpi_device_name(device), acpi_device_bid(device),
-               KELVIN_TO_CELSIUS(tz->temperature));
+              acpi_device_name(device), acpi_device_bid(device),
+              KELVIN_TO_CELSIUS(tz->temperature));
 
-end:
+      end:
        if (result) {
                acpi_thermal_remove_fs(device);
                kfree(tz);
@@ -1356,21 +1364,17 @@ end:
        return_VALUE(result);
 }
 
-
-static int
-acpi_thermal_remove (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_thermal_remove(struct acpi_device *device, int type)
 {
-       acpi_status             status = AE_OK;
-       struct acpi_thermal     *tz = NULL;
+       acpi_status status = AE_OK;
+       struct acpi_thermal *tz = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_remove");
 
        if (!device || !acpi_driver_data(device))
                return_VALUE(-EINVAL);
 
-       tz = (struct acpi_thermal *) acpi_driver_data(device);
+       tz = (struct acpi_thermal *)acpi_driver_data(device);
 
        /* avoid timer adding new defer task */
        tz->zombie = 1;
@@ -1382,19 +1386,19 @@ acpi_thermal_remove (
        del_timer_sync(&(tz->timer));
 
        status = acpi_remove_notify_handler(tz->handle,
-               ACPI_DEVICE_NOTIFY, acpi_thermal_notify);
+                                           ACPI_DEVICE_NOTIFY,
+                                           acpi_thermal_notify);
        if (ACPI_FAILURE(status))
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error removing notify handler\n"));
+                                 "Error removing notify handler\n"));
 
        /* Terminate policy */
-       if (tz->trips.passive.flags.valid
-               && tz->trips.passive.flags.enabled) {
+       if (tz->trips.passive.flags.valid && tz->trips.passive.flags.enabled) {
                tz->trips.passive.flags.enabled = 0;
                acpi_thermal_passive(tz);
        }
        if (tz->trips.active[0].flags.valid
-               && tz->trips.active[0].flags.enabled) {
+           && tz->trips.active[0].flags.enabled) {
                tz->trips.active[0].flags.enabled = 0;
                acpi_thermal_active(tz);
        }
@@ -1405,11 +1409,9 @@ acpi_thermal_remove (
        return_VALUE(0);
 }
 
-
-static int __init
-acpi_thermal_init (void)
+static int __init acpi_thermal_init(void)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_thermal_init");
 
@@ -1427,9 +1429,7 @@ acpi_thermal_init (void)
        return_VALUE(0);
 }
 
-
-static void __exit
-acpi_thermal_exit (void)
+static void __exit acpi_thermal_exit(void)
 {
        ACPI_FUNCTION_TRACE("acpi_thermal_exit");
 
@@ -1440,6 +1440,5 @@ acpi_thermal_exit (void)
        return_VOID;
 }
 
-
 module_init(acpi_thermal_init);
 module_exit(acpi_thermal_exit);
index 73b1d8aeae9d33ca1a69b82f6483d4cf39049a0f..7fe0b7ae973397b8920b624887dce1462f7e6b4b 100644 (file)
@@ -100,8 +100,7 @@ MODULE_LICENSE("GPL");
 /* utility
  */
 
-static __inline__ void
-_set_bit(u32* word, u32 mask, int value)
+static __inline__ void _set_bit(u32 * word, u32 mask, int value)
 {
        *word = (*word & ~mask) | (mask * value);
 }
@@ -109,35 +108,32 @@ _set_bit(u32* word, u32 mask, int value)
 /* acpi interface wrappers
  */
 
-static int
-is_valid_acpi_path(const char* methodName)
+static int is_valid_acpi_path(const char *methodName)
 {
        acpi_handle handle;
        acpi_status status;
 
-       status = acpi_get_handle(NULL, (char*)methodName, &handle);
+       status = acpi_get_handle(NULL, (char *)methodName, &handle);
        return !ACPI_FAILURE(status);
 }
 
-static int
-write_acpi_int(const char* methodName, int val)
+static int write_acpi_int(const char *methodName, int val)
 {
        struct acpi_object_list params;
        union acpi_object in_objs[1];
        acpi_status status;
 
-       params.count = sizeof(in_objs)/sizeof(in_objs[0]);
+       params.count = sizeof(in_objs) / sizeof(in_objs[0]);
        params.pointer = in_objs;
        in_objs[0].type = ACPI_TYPE_INTEGER;
        in_objs[0].integer.value = val;
 
-       status = acpi_evaluate_object(NULL, (char*)methodName, &params, NULL);
+       status = acpi_evaluate_object(NULL, (char *)methodName, &params, NULL);
        return (status == AE_OK);
 }
 
 #if 0
-static int
-read_acpi_int(const char* methodName, int* pVal)
+static int read_acpi_int(const char *methodName, int *pVal)
 {
        struct acpi_buffer results;
        union acpi_object out_objs[1];
@@ -146,25 +142,24 @@ read_acpi_int(const char* methodName, int* pVal)
        results.length = sizeof(out_objs);
        results.pointer = out_objs;
 
-       status = acpi_evaluate_object(0, (char*)methodName, 0, &results);
+       status = acpi_evaluate_object(0, (char *)methodName, 0, &results);
        *pVal = out_objs[0].integer.value;
 
        return (status == AE_OK) && (out_objs[0].type == ACPI_TYPE_INTEGER);
 }
 #endif
 
-static const char*             method_hci /*= 0*/;
+static const char *method_hci /*= 0*/ ;
 
 /* Perform a raw HCI call.  Here we don't care about input or output buffer
  * format.
  */
-static acpi_status
-hci_raw(const u32 in[HCI_WORDS], u32 out[HCI_WORDS])
+static acpi_status hci_raw(const u32 in[HCI_WORDS], u32 out[HCI_WORDS])
 {
        struct acpi_object_list params;
        union acpi_object in_objs[HCI_WORDS];
        struct acpi_buffer results;
-       union acpi_object out_objs[HCI_WORDS+1];
+       union acpi_object out_objs[HCI_WORDS + 1];
        acpi_status status;
        int i;
 
@@ -178,8 +173,8 @@ hci_raw(const u32 in[HCI_WORDS], u32 out[HCI_WORDS])
        results.length = sizeof(out_objs);
        results.pointer = out_objs;
 
-       status = acpi_evaluate_object(NULL, (char*)method_hci, &params,
-               &results);
+       status = acpi_evaluate_object(NULL, (char *)method_hci, &params,
+                                     &results);
        if ((status == AE_OK) && (out_objs->package.count <= HCI_WORDS)) {
                for (i = 0; i < out_objs->package.count; ++i) {
                        out[i] = out_objs->package.elements[i].integer.value;
@@ -195,8 +190,7 @@ hci_raw(const u32 in[HCI_WORDS], u32 out[HCI_WORDS])
  * may be useful (such as "not supported").
  */
 
-static acpi_status
-hci_write1(u32 reg, u32 in1, u32* result)
+static acpi_status hci_write1(u32 reg, u32 in1, u32 * result)
 {
        u32 in[HCI_WORDS] = { HCI_SET, reg, in1, 0, 0, 0 };
        u32 out[HCI_WORDS];
@@ -205,8 +199,7 @@ hci_write1(u32 reg, u32 in1, u32* result)
        return status;
 }
 
-static acpi_status
-hci_read1(u32 reg, u32* out1, u32* result)
+static acpi_status hci_read1(u32 reg, u32 * out1, u32 * result)
 {
        u32 in[HCI_WORDS] = { HCI_GET, reg, 0, 0, 0, 0 };
        u32 out[HCI_WORDS];
@@ -216,26 +209,25 @@ hci_read1(u32 reg, u32* out1, u32* result)
        return status;
 }
 
-static struct proc_dir_entry*  toshiba_proc_dir /*= 0*/;
-static int                     force_fan;
-static int                     last_key_event;
-static int                     key_event_valid;
+static struct proc_dir_entry *toshiba_proc_dir /*= 0*/ ;
+static int force_fan;
+static int last_key_event;
+static int key_event_valid;
 
-typedef struct _ProcItem
-{
-       const char* name;
-       char* (*read_func)(char*);
-       unsigned long (*write_func)(const char*, unsigned long);
+typedef struct _ProcItem {
+       const char *name;
+       char *(*read_func) (char *);
+       unsigned long (*write_func) (const char *, unsigned long);
 } ProcItem;
 
 /* proc file handlers
  */
 
 static int
-dispatch_read(char* page, char** start, off_t off, int count, int* eof,
-       ProcItem* item)
+dispatch_read(char *page, char **start, off_t off, int count, int *eof,
+             ProcItem * item)
 {
-       charp = page;
+       char *p = page;
        int len;
 
        if (off == 0)
@@ -243,33 +235,35 @@ dispatch_read(char* page, char** start, off_t off, int count, int* eof,
 
        /* ISSUE: I don't understand this code */
        len = (p - page);
-       if (len <= off+count) *eof = 1;
+       if (len <= off + count)
+               *eof = 1;
        *start = page + off;
        len -= off;
-       if (len>count) len = count;
-       if (len<0) len = 0;
+       if (len > count)
+               len = count;
+       if (len < 0)
+               len = 0;
        return len;
 }
 
 static int
-dispatch_write(struct filefile, const char __user * buffer,
-       unsigned long count, ProcItem* item)
+dispatch_write(struct file *file, const char __user * buffer,
+              unsigned long count, ProcItem * item)
 {
        int result;
-       chartmp_buffer;
+       char *tmp_buffer;
 
        /* Arg buffer points to userspace memory, which can't be accessed
         * directly.  Since we're making a copy, zero-terminate the
         * destination so that sscanf can be used on it safely.
         */
        tmp_buffer = kmalloc(count + 1, GFP_KERNEL);
-       if(!tmp_buffer)
+       if (!tmp_buffer)
                return -ENOMEM;
 
        if (copy_from_user(tmp_buffer, buffer, count)) {
                result = -EFAULT;
-       }
-       else {
+       } else {
                tmp_buffer[count] = 0;
                result = item->write_func(tmp_buffer, count);
        }
@@ -277,8 +271,7 @@ dispatch_write(struct file* file, const char __user * buffer,
        return result;
 }
 
-static char*
-read_lcd(char* p)
+static char *read_lcd(char *p)
 {
        u32 hci_result;
        u32 value;
@@ -288,7 +281,7 @@ read_lcd(char* p)
                value = value >> HCI_LCD_BRIGHTNESS_SHIFT;
                p += sprintf(p, "brightness:              %d\n", value);
                p += sprintf(p, "brightness_levels:       %d\n",
-                       HCI_LCD_BRIGHTNESS_LEVELS);
+                            HCI_LCD_BRIGHTNESS_LEVELS);
        } else {
                printk(MY_ERR "Error reading LCD brightness\n");
        }
@@ -296,14 +289,13 @@ read_lcd(char* p)
        return p;
 }
 
-static unsigned long
-write_lcd(const char* buffer, unsigned long count)
+static unsigned long write_lcd(const char *buffer, unsigned long count)
 {
        int value;
        u32 hci_result;
 
        if (sscanf(buffer, " brightness : %i", &value) == 1 &&
-                       value >= 0 && value < HCI_LCD_BRIGHTNESS_LEVELS) {
+           value >= 0 && value < HCI_LCD_BRIGHTNESS_LEVELS) {
                value = value << HCI_LCD_BRIGHTNESS_SHIFT;
                hci_write1(HCI_LCD_BRIGHTNESS, value, &hci_result);
                if (hci_result != HCI_SUCCESS)
@@ -315,8 +307,7 @@ write_lcd(const char* buffer, unsigned long count)
        return count;
 }
 
-static char*
-read_video(char* p)
+static char *read_video(char *p)
 {
        u32 hci_result;
        u32 value;
@@ -325,7 +316,7 @@ read_video(char* p)
        if (hci_result == HCI_SUCCESS) {
                int is_lcd = (value & HCI_VIDEO_OUT_LCD) ? 1 : 0;
                int is_crt = (value & HCI_VIDEO_OUT_CRT) ? 1 : 0;
-               int is_tv  = (value & HCI_VIDEO_OUT_TV ) ? 1 : 0;
+               int is_tv = (value & HCI_VIDEO_OUT_TV) ? 1 : 0;
                p += sprintf(p, "lcd_out:                 %d\n", is_lcd);
                p += sprintf(p, "crt_out:                 %d\n", is_crt);
                p += sprintf(p, "tv_out:                  %d\n", is_tv);
@@ -336,8 +327,7 @@ read_video(char* p)
        return p;
 }
 
-static unsigned long
-write_video(const char* buffer, unsigned long count)
+static unsigned long write_video(const char *buffer, unsigned long count)
 {
        int value;
        int remain = count;
@@ -363,7 +353,7 @@ write_video(const char* buffer, unsigned long count)
                        ++buffer;
                        --remain;
                }
-               while (remain && *(buffer-1) != ';');
+               while (remain && *(buffer - 1) != ';');
        }
 
        hci_read1(HCI_VIDEO_OUT, &video_out, &hci_result);
@@ -386,8 +376,7 @@ write_video(const char* buffer, unsigned long count)
        return count;
 }
 
-static char*
-read_fan(char* p)
+static char *read_fan(char *p)
 {
        u32 hci_result;
        u32 value;
@@ -403,14 +392,13 @@ read_fan(char* p)
        return p;
 }
 
-static unsigned long
-write_fan(const char* buffer, unsigned long count)
+static unsigned long write_fan(const char *buffer, unsigned long count)
 {
        int value;
        u32 hci_result;
 
        if (sscanf(buffer, " force_on : %i", &value) == 1 &&
-                       value >= 0 && value <= 1) {
+           value >= 0 && value <= 1) {
                hci_write1(HCI_FAN, value, &hci_result);
                if (hci_result != HCI_SUCCESS)
                        return -EFAULT;
@@ -423,8 +411,7 @@ write_fan(const char* buffer, unsigned long count)
        return count;
 }
 
-static char*
-read_keys(char* p)
+static char *read_keys(char *p)
 {
        u32 hci_result;
        u32 value;
@@ -451,17 +438,15 @@ read_keys(char* p)
        p += sprintf(p, "hotkey_ready:            %d\n", key_event_valid);
        p += sprintf(p, "hotkey:                  0x%04x\n", last_key_event);
 
-end:
+      end:
        return p;
 }
 
-static unsigned long
-write_keys(const char* buffer, unsigned long count)
+static unsigned long write_keys(const char *buffer, unsigned long count)
 {
        int value;
 
-       if (sscanf(buffer, " hotkey_ready : %i", &value) == 1 &&
-                       value == 0) {
+       if (sscanf(buffer, " hotkey_ready : %i", &value) == 1 && value == 0) {
                key_event_valid = 0;
        } else {
                return -EINVAL;
@@ -470,12 +455,11 @@ write_keys(const char* buffer, unsigned long count)
        return count;
 }
 
-static char*
-read_version(char* p)
+static char *read_version(char *p)
 {
        p += sprintf(p, "driver:                  %s\n", TOSHIBA_ACPI_VERSION);
        p += sprintf(p, "proc_interface:          %d\n",
-               PROC_INTERFACE_VERSION);
+                    PROC_INTERFACE_VERSION);
        return p;
 }
 
@@ -484,48 +468,45 @@ read_version(char* p)
 
 #define PROC_TOSHIBA           "toshiba"
 
-static ProcItem proc_items[] =
-{
-       { "lcd"         , read_lcd      , write_lcd     },
-       { "video"       , read_video    , write_video   },
-       { "fan"         , read_fan      , write_fan     },
-       { "keys"        , read_keys     , write_keys    },
-       { "version"     , read_version  , NULL          },
-       { NULL }
+static ProcItem proc_items[] = {
+       {"lcd", read_lcd, write_lcd},
+       {"video", read_video, write_video},
+       {"fan", read_fan, write_fan},
+       {"keys", read_keys, write_keys},
+       {"version", read_version, NULL},
+       {NULL}
 };
 
-static acpi_status __init
-add_device(void)
+static acpi_status __init add_device(void)
 {
-       struct proc_dir_entryproc;
-       ProcItemitem;
+       struct proc_dir_entry *proc;
+       ProcItem *item;
 
-       for (item = proc_items; item->name; ++item)
-       {
+       for (item = proc_items; item->name; ++item) {
                proc = create_proc_read_entry(item->name,
-                       S_IFREG | S_IRUGO | S_IWUSR,
-                       toshiba_proc_dir, (read_proc_t*)dispatch_read, item);
+                                             S_IFREG | S_IRUGO | S_IWUSR,
+                                             toshiba_proc_dir,
+                                             (read_proc_t *) dispatch_read,
+                                             item);
                if (proc)
                        proc->owner = THIS_MODULE;
                if (proc && item->write_func)
-                       proc->write_proc = (write_proc_t*)dispatch_write;
+                       proc->write_proc = (write_proc_t *) dispatch_write;
        }
 
        return AE_OK;
 }
 
-static acpi_status __exit
-remove_device(void)
+static acpi_status __exit remove_device(void)
 {
-       ProcItemitem;
+       ProcItem *item;
 
        for (item = proc_items; item->name; ++item)
                remove_proc_entry(item->name, toshiba_proc_dir);
        return AE_OK;
 }
 
-static int __init
-toshiba_acpi_init(void)
+static int __init toshiba_acpi_init(void)
 {
        acpi_status status = AE_OK;
        u32 hci_result;
@@ -533,9 +514,9 @@ toshiba_acpi_init(void)
        if (acpi_disabled)
                return -ENODEV;
 
-       if (!acpi_specific_hotkey_enabled){
+       if (!acpi_specific_hotkey_enabled) {
                printk(MY_INFO "Using generic hotkey driver\n");
-               return -ENODEV; 
+               return -ENODEV;
        }
        /* simple device detection: look for HCI method */
        if (is_valid_acpi_path(METHOD_HCI_1))
@@ -546,7 +527,7 @@ toshiba_acpi_init(void)
                return -ENODEV;
 
        printk(MY_INFO "Toshiba Laptop ACPI Extras version %s\n",
-               TOSHIBA_ACPI_VERSION);
+              TOSHIBA_ACPI_VERSION);
        printk(MY_INFO "    HCI method: %s\n", method_hci);
 
        force_fan = 0;
@@ -568,8 +549,7 @@ toshiba_acpi_init(void)
        return (ACPI_SUCCESS(status)) ? 0 : -ENODEV;
 }
 
-static void __exit
-toshiba_acpi_exit(void)
+static void __exit toshiba_acpi_exit(void)
 {
        remove_device();
 
index 939c447dd52a9d8f4f8842d481f67e98c99f9c40..e87108b7338ade83486c66bf142a90a487b5f825 100644 (file)
@@ -3,6 +3,6 @@
 #
 
 obj-y := utalloc.o  utdebug.o   uteval.o    utinit.o  utmisc.o    utxface.o \
-        utcopy.o   utdelete.o  utglobal.o  utmath.o  utobject.o
+        utcopy.o   utdelete.o  utglobal.o  utmath.o  utobject.o utstate.o utmutex.o utobject.o utcache.o
 
 EXTRA_CFLAGS += $(ACPI_CFLAGS)
index c4e7f989a2bdce3762faa502d4f5887bf492d9d4..068450b36475a8b9b3552594bfcfbbf1409f87b0 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- * Module Name: utalloc - local cache and memory allocation routines
+ * Module Name: utalloc - local memory allocation routines
  *
  *****************************************************************************/
 
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utalloc")
+ACPI_MODULE_NAME("utalloc")
 
 /* Local prototypes */
-
 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
-static struct acpi_debug_mem_block *
-acpi_ut_find_allocation (
-       u32                             list_id,
-       void                            *allocation);
+static struct acpi_debug_mem_block *acpi_ut_find_allocation(void *allocation);
 
 static acpi_status
-acpi_ut_track_allocation (
-       u32                             list_id,
-       struct acpi_debug_mem_block     *address,
-       acpi_size                       size,
-       u8                              alloc_type,
-       u32                             component,
-       char                            *module,
-       u32                             line);
+acpi_ut_track_allocation(struct acpi_debug_mem_block *address,
+                        acpi_size size,
+                        u8 alloc_type, u32 component, char *module, u32 line);
 
 static acpi_status
-acpi_ut_remove_allocation (
-       u32                             list_id,
-       struct acpi_debug_mem_block     *address,
-       u32                             component,
-       char                            *module,
-       u32                             line);
-#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
+acpi_ut_remove_allocation(struct acpi_debug_mem_block *address,
+                         u32 component, char *module, u32 line);
+#endif                         /* ACPI_DBG_TRACK_ALLOCATIONS */
 
+#ifdef ACPI_DBG_TRACK_ALLOCATIONS
+static acpi_status
+acpi_ut_create_list(char *list_name,
+                   u16 object_size, struct acpi_memory_list **return_cache);
+#endif
 
 /*******************************************************************************
  *
- * FUNCTION:    acpi_ut_release_to_cache
+ * FUNCTION:    acpi_ut_create_caches
  *
- * PARAMETERS:  list_id             - Memory list/cache ID
- *              Object              - The object to be released
+ * PARAMETERS:  None
  *
- * RETURN:      None
+ * RETURN:      Status
  *
- * DESCRIPTION: Release an object to the specified cache.  If cache is full,
- *              the object is deleted.
+ * DESCRIPTION: Create all local caches
  *
  ******************************************************************************/
 
-void
-acpi_ut_release_to_cache (
-       u32                             list_id,
-       void                            *object)
+acpi_status acpi_ut_create_caches(void)
 {
-       struct acpi_memory_list         *cache_info;
-
+       acpi_status status;
 
-       ACPI_FUNCTION_ENTRY ();
-
-
-       cache_info = &acpi_gbl_memory_lists[list_id];
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
+#ifdef ACPI_DBG_TRACK_ALLOCATIONS
 
-       /* If walk cache is full, just free this wallkstate object */
+       /* Memory allocation lists */
 
-       if (cache_info->cache_depth >= cache_info->max_cache_depth) {
-               ACPI_MEM_FREE (object);
-               ACPI_MEM_TRACKING (cache_info->total_freed++);
+       status = acpi_ut_create_list("Acpi-Global", 0, &acpi_gbl_global_list);
+       if (ACPI_FAILURE(status)) {
+               return (status);
        }
 
-       /* Otherwise put this object back into the cache */
-
-       else {
-               if (ACPI_FAILURE (acpi_ut_acquire_mutex (ACPI_MTX_CACHES))) {
-                       return;
-               }
-
-               /* Mark the object as cached */
-
-               ACPI_MEMSET (object, 0xCA, cache_info->object_size);
-               ACPI_SET_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_CACHED);
-
-               /* Put the object at the head of the cache list */
-
-               * (ACPI_CAST_INDIRECT_PTR (char,
-                       &(((char *) object)[cache_info->link_offset]))) = cache_info->list_head;
-               cache_info->list_head = object;
-               cache_info->cache_depth++;
-
-               (void) acpi_ut_release_mutex (ACPI_MTX_CACHES);
+       status =
+           acpi_ut_create_list("Acpi-Namespace",
+                               sizeof(struct acpi_namespace_node),
+                               &acpi_gbl_ns_node_list);
+       if (ACPI_FAILURE(status)) {
+               return (status);
        }
-
-#else
-
-       /* Object cache is disabled; just free the object */
-
-       ACPI_MEM_FREE (object);
-       ACPI_MEM_TRACKING (cache_info->total_freed++);
 #endif
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_acquire_from_cache
- *
- * PARAMETERS:  list_id             - Memory list ID
- *
- * RETURN:      A requested object.  NULL if the object could not be
- *              allocated.
- *
- * DESCRIPTION: Get an object from the specified cache.  If cache is empty,
- *              the object is allocated.
- *
- ******************************************************************************/
-
-void *
-acpi_ut_acquire_from_cache (
-       u32                             list_id)
-{
-       struct acpi_memory_list         *cache_info;
-       void                            *object;
 
+       /* Object Caches, for frequently used objects */
 
-       ACPI_FUNCTION_NAME ("ut_acquire_from_cache");
-
-
-       cache_info = &acpi_gbl_memory_lists[list_id];
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
-
-       if (ACPI_FAILURE (acpi_ut_acquire_mutex (ACPI_MTX_CACHES))) {
-               return (NULL);
+       status =
+           acpi_os_create_cache("acpi_state", sizeof(union acpi_generic_state),
+                                ACPI_MAX_STATE_CACHE_DEPTH,
+                                &acpi_gbl_state_cache);
+       if (ACPI_FAILURE(status)) {
+               return (status);
        }
 
-       ACPI_MEM_TRACKING (cache_info->cache_requests++);
-
-       /* Check the cache first */
-
-       if (cache_info->list_head) {
-               /* There is an object available, use it */
-
-               object = cache_info->list_head;
-               cache_info->list_head = *(ACPI_CAST_INDIRECT_PTR (char,
-                                &(((char *) object)[cache_info->link_offset])));
-
-               ACPI_MEM_TRACKING (cache_info->cache_hits++);
-               cache_info->cache_depth--;
-
-#ifdef ACPI_DBG_TRACK_ALLOCATIONS
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Object %p from %s\n",
-                       object, acpi_gbl_memory_lists[list_id].list_name));
-#endif
-
-               if (ACPI_FAILURE (acpi_ut_release_mutex (ACPI_MTX_CACHES))) {
-                       return (NULL);
-               }
-
-               /* Clear (zero) the previously used Object */
-
-               ACPI_MEMSET (object, 0, cache_info->object_size);
+       status =
+           acpi_os_create_cache("acpi_parse",
+                                sizeof(struct acpi_parse_obj_common),
+                                ACPI_MAX_PARSE_CACHE_DEPTH,
+                                &acpi_gbl_ps_node_cache);
+       if (ACPI_FAILURE(status)) {
+               return (status);
        }
 
-       else {
-               /* The cache is empty, create a new object */
-
-               /* Avoid deadlock with ACPI_MEM_CALLOCATE */
-
-               if (ACPI_FAILURE (acpi_ut_release_mutex (ACPI_MTX_CACHES))) {
-                       return (NULL);
-               }
-
-               object = ACPI_MEM_CALLOCATE (cache_info->object_size);
-               ACPI_MEM_TRACKING (cache_info->total_allocated++);
+       status =
+           acpi_os_create_cache("acpi_parse_ext",
+                                sizeof(struct acpi_parse_obj_named),
+                                ACPI_MAX_EXTPARSE_CACHE_DEPTH,
+                                &acpi_gbl_ps_node_ext_cache);
+       if (ACPI_FAILURE(status)) {
+               return (status);
        }
 
-#else
-
-       /* Object cache is disabled; just allocate the object */
-
-       object = ACPI_MEM_CALLOCATE (cache_info->object_size);
-       ACPI_MEM_TRACKING (cache_info->total_allocated++);
-#endif
+       status =
+           acpi_os_create_cache("acpi_operand",
+                                sizeof(union acpi_operand_object),
+                                ACPI_MAX_OBJECT_CACHE_DEPTH,
+                                &acpi_gbl_operand_cache);
+       if (ACPI_FAILURE(status)) {
+               return (status);
+       }
 
-       return (object);
+       return (AE_OK);
 }
 
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
 /*******************************************************************************
  *
- * FUNCTION:    acpi_ut_delete_generic_cache
+ * FUNCTION:    acpi_ut_delete_caches
  *
- * PARAMETERS:  list_id         - Memory list ID
+ * PARAMETERS:  None
  *
- * RETURN:      None
+ * RETURN:      Status
  *
- * DESCRIPTION: Free all objects within the requested cache.
+ * DESCRIPTION: Purge and delete all local caches
  *
  ******************************************************************************/
 
-void
-acpi_ut_delete_generic_cache (
-       u32                             list_id)
+acpi_status acpi_ut_delete_caches(void)
 {
-       struct acpi_memory_list         *cache_info;
-       char                            *next;
-
 
-       ACPI_FUNCTION_ENTRY ();
+       (void)acpi_os_delete_cache(acpi_gbl_state_cache);
+       acpi_gbl_state_cache = NULL;
 
+       (void)acpi_os_delete_cache(acpi_gbl_operand_cache);
+       acpi_gbl_operand_cache = NULL;
 
-       cache_info = &acpi_gbl_memory_lists[list_id];
-       while (cache_info->list_head) {
-               /* Delete one cached state object */
+       (void)acpi_os_delete_cache(acpi_gbl_ps_node_cache);
+       acpi_gbl_ps_node_cache = NULL;
 
-               next = *(ACPI_CAST_INDIRECT_PTR (char,
-                                &(((char *) cache_info->list_head)[cache_info->link_offset])));
-               ACPI_MEM_FREE (cache_info->list_head);
+       (void)acpi_os_delete_cache(acpi_gbl_ps_node_ext_cache);
+       acpi_gbl_ps_node_ext_cache = NULL;
 
-               cache_info->list_head = next;
-               cache_info->cache_depth--;
-       }
+       return (AE_OK);
 }
-#endif
-
 
 /*******************************************************************************
  *
@@ -280,9 +182,7 @@ acpi_ut_delete_generic_cache (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ut_validate_buffer (
-       struct acpi_buffer              *buffer)
+acpi_status acpi_ut_validate_buffer(struct acpi_buffer * buffer)
 {
 
        /* Obviously, the structure pointer must be valid */
@@ -293,9 +193,9 @@ acpi_ut_validate_buffer (
 
        /* Special semantics for the length */
 
-       if ((buffer->length == ACPI_NO_BUFFER)              ||
-               (buffer->length == ACPI_ALLOCATE_BUFFER)        ||
-               (buffer->length == ACPI_ALLOCATE_LOCAL_BUFFER)) {
+       if ((buffer->length == ACPI_NO_BUFFER) ||
+           (buffer->length == ACPI_ALLOCATE_BUFFER) ||
+           (buffer->length == ACPI_ALLOCATE_LOCAL_BUFFER)) {
                return (AE_OK);
        }
 
@@ -308,7 +208,6 @@ acpi_ut_validate_buffer (
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_initialize_buffer
@@ -324,12 +223,10 @@ acpi_ut_validate_buffer (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_initialize_buffer (
-       struct acpi_buffer              *buffer,
-       acpi_size                       required_length)
+acpi_ut_initialize_buffer(struct acpi_buffer * buffer,
+                         acpi_size required_length)
 {
-       acpi_status                     status = AE_OK;
-
+       acpi_status status = AE_OK;
 
        switch (buffer->length) {
        case ACPI_NO_BUFFER:
@@ -339,33 +236,30 @@ acpi_ut_initialize_buffer (
                status = AE_BUFFER_OVERFLOW;
                break;
 
-
        case ACPI_ALLOCATE_BUFFER:
 
                /* Allocate a new buffer */
 
-               buffer->pointer = acpi_os_allocate (required_length);
+               buffer->pointer = acpi_os_allocate(required_length);
                if (!buffer->pointer) {
                        return (AE_NO_MEMORY);
                }
 
                /* Clear the buffer */
 
-               ACPI_MEMSET (buffer->pointer, 0, required_length);
+               ACPI_MEMSET(buffer->pointer, 0, required_length);
                break;
 
-
        case ACPI_ALLOCATE_LOCAL_BUFFER:
 
                /* Allocate a new buffer with local interface to allow tracking */
 
-               buffer->pointer = ACPI_MEM_CALLOCATE (required_length);
+               buffer->pointer = ACPI_MEM_CALLOCATE(required_length);
                if (!buffer->pointer) {
                        return (AE_NO_MEMORY);
                }
                break;
 
-
        default:
 
                /* Existing buffer: Validate the size of the buffer */
@@ -377,7 +271,7 @@ acpi_ut_initialize_buffer (
 
                /* Clear the buffer */
 
-               ACPI_MEMSET (buffer->pointer, 0, required_length);
+               ACPI_MEMSET(buffer->pointer, 0, required_length);
                break;
        }
 
@@ -385,7 +279,6 @@ acpi_ut_initialize_buffer (
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_allocate
@@ -401,41 +294,34 @@ acpi_ut_initialize_buffer (
  *
  ******************************************************************************/
 
-void *
-acpi_ut_allocate (
-       acpi_size                       size,
-       u32                             component,
-       char                            *module,
-       u32                             line)
+void *acpi_ut_allocate(acpi_size size, u32 component, char *module, u32 line)
 {
-       void                            *allocation;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ut_allocate", size);
+       void *allocation;
 
+       ACPI_FUNCTION_TRACE_U32("ut_allocate", size);
 
        /* Check for an inadvertent size of zero bytes */
 
        if (!size) {
-               _ACPI_REPORT_ERROR (module, line, component,
-                               ("ut_allocate: Attempt to allocate zero bytes\n"));
+               _ACPI_REPORT_ERROR(module, line, component,
+                                  ("ut_allocate: Attempt to allocate zero bytes\n"));
                size = 1;
        }
 
-       allocation = acpi_os_allocate (size);
+       allocation = acpi_os_allocate(size);
        if (!allocation) {
                /* Report allocation error */
 
-               _ACPI_REPORT_ERROR (module, line, component,
-                               ("ut_allocate: Could not allocate size %X\n", (u32) size));
+               _ACPI_REPORT_ERROR(module, line, component,
+                                  ("ut_allocate: Could not allocate size %X\n",
+                                   (u32) size));
 
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
-       return_PTR (allocation);
+       return_PTR(allocation);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_callocate
@@ -451,43 +337,36 @@ acpi_ut_allocate (
  *
  ******************************************************************************/
 
-void *
-acpi_ut_callocate (
-       acpi_size                       size,
-       u32                             component,
-       char                            *module,
-       u32                             line)
+void *acpi_ut_callocate(acpi_size size, u32 component, char *module, u32 line)
 {
-       void                            *allocation;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ut_callocate", size);
+       void *allocation;
 
+       ACPI_FUNCTION_TRACE_U32("ut_callocate", size);
 
        /* Check for an inadvertent size of zero bytes */
 
        if (!size) {
-               _ACPI_REPORT_ERROR (module, line, component,
-                               ("ut_callocate: Attempt to allocate zero bytes\n"));
-               return_PTR (NULL);
+               _ACPI_REPORT_ERROR(module, line, component,
+                                  ("ut_callocate: Attempt to allocate zero bytes\n"));
+               return_PTR(NULL);
        }
 
-       allocation = acpi_os_allocate (size);
+       allocation = acpi_os_allocate(size);
        if (!allocation) {
                /* Report allocation error */
 
-               _ACPI_REPORT_ERROR (module, line, component,
-                               ("ut_callocate: Could not allocate size %X\n", (u32) size));
-               return_PTR (NULL);
+               _ACPI_REPORT_ERROR(module, line, component,
+                                  ("ut_callocate: Could not allocate size %X\n",
+                                   (u32) size));
+               return_PTR(NULL);
        }
 
        /* Clear the memory block */
 
-       ACPI_MEMSET (allocation, 0, size);
-       return_PTR (allocation);
+       ACPI_MEMSET(allocation, 0, size);
+       return_PTR(allocation);
 }
 
-
 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
 /*
  * These procedures are used for tracking memory leaks in the subsystem, and
@@ -500,6 +379,39 @@ acpi_ut_callocate (
  * occurs in the body of acpi_ut_free.
  */
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_create_list
+ *
+ * PARAMETERS:  cache_name      - Ascii name for the cache
+ *              object_size     - Size of each cached object
+ *              return_cache    - Where the new cache object is returned
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Create a local memory list for tracking purposed
+ *
+ ******************************************************************************/
+
+static acpi_status
+acpi_ut_create_list(char *list_name,
+                   u16 object_size, struct acpi_memory_list **return_cache)
+{
+       struct acpi_memory_list *cache;
+
+       cache = acpi_os_allocate(sizeof(struct acpi_memory_list));
+       if (!cache) {
+               return (AE_NO_MEMORY);
+       }
+
+       ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list));
+
+       cache->list_name = list_name;
+       cache->object_size = object_size;
+
+       *return_cache = cache;
+       return (AE_OK);
+}
 
 /*******************************************************************************
  *
@@ -516,37 +428,33 @@ acpi_ut_callocate (
  *
  ******************************************************************************/
 
-void *
-acpi_ut_allocate_and_track (
-       acpi_size                       size,
-       u32                             component,
-       char                            *module,
-       u32                             line)
+void *acpi_ut_allocate_and_track(acpi_size size,
+                                u32 component, char *module, u32 line)
 {
-       struct acpi_debug_mem_block     *allocation;
-       acpi_status                     status;
-
+       struct acpi_debug_mem_block *allocation;
+       acpi_status status;
 
-       allocation = acpi_ut_allocate (size + sizeof (struct acpi_debug_mem_header),
-                         component, module, line);
+       allocation =
+           acpi_ut_allocate(size + sizeof(struct acpi_debug_mem_header),
+                            component, module, line);
        if (!allocation) {
                return (NULL);
        }
 
-       status = acpi_ut_track_allocation (ACPI_MEM_LIST_GLOBAL, allocation, size,
-                         ACPI_MEM_MALLOC, component, module, line);
-       if (ACPI_FAILURE (status)) {
-               acpi_os_free (allocation);
+       status = acpi_ut_track_allocation(allocation, size,
+                                         ACPI_MEM_MALLOC, component, module,
+                                         line);
+       if (ACPI_FAILURE(status)) {
+               acpi_os_free(allocation);
                return (NULL);
        }
 
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].total_allocated++;
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].current_total_size += (u32) size;
+       acpi_gbl_global_list->total_allocated++;
+       acpi_gbl_global_list->current_total_size += (u32) size;
 
-       return ((void *) &allocation->user_space);
+       return ((void *)&allocation->user_space);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_callocate_and_track
@@ -562,41 +470,38 @@ acpi_ut_allocate_and_track (
  *
  ******************************************************************************/
 
-void *
-acpi_ut_callocate_and_track (
-       acpi_size                       size,
-       u32                             component,
-       char                            *module,
-       u32                             line)
+void *acpi_ut_callocate_and_track(acpi_size size,
+                                 u32 component, char *module, u32 line)
 {
-       struct acpi_debug_mem_block     *allocation;
-       acpi_status                     status;
-
+       struct acpi_debug_mem_block *allocation;
+       acpi_status status;
 
-       allocation = acpi_ut_callocate (size + sizeof (struct acpi_debug_mem_header),
-                         component, module, line);
+       allocation =
+           acpi_ut_callocate(size + sizeof(struct acpi_debug_mem_header),
+                             component, module, line);
        if (!allocation) {
                /* Report allocation error */
 
-               _ACPI_REPORT_ERROR (module, line, component,
-                               ("ut_callocate: Could not allocate size %X\n", (u32) size));
+               _ACPI_REPORT_ERROR(module, line, component,
+                                  ("ut_callocate: Could not allocate size %X\n",
+                                   (u32) size));
                return (NULL);
        }
 
-       status = acpi_ut_track_allocation (ACPI_MEM_LIST_GLOBAL, allocation, size,
-                          ACPI_MEM_CALLOC, component, module, line);
-       if (ACPI_FAILURE (status)) {
-               acpi_os_free (allocation);
+       status = acpi_ut_track_allocation(allocation, size,
+                                         ACPI_MEM_CALLOC, component, module,
+                                         line);
+       if (ACPI_FAILURE(status)) {
+               acpi_os_free(allocation);
                return (NULL);
        }
 
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].total_allocated++;
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].current_total_size += (u32) size;
+       acpi_gbl_global_list->total_allocated++;
+       acpi_gbl_global_list->current_total_size += (u32) size;
 
-       return ((void *) &allocation->user_space);
+       return ((void *)&allocation->user_space);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_free_and_track
@@ -613,53 +518,46 @@ acpi_ut_callocate_and_track (
  ******************************************************************************/
 
 void
-acpi_ut_free_and_track (
-       void                            *allocation,
-       u32                             component,
-       char                            *module,
-       u32                             line)
+acpi_ut_free_and_track(void *allocation, u32 component, char *module, u32 line)
 {
-       struct acpi_debug_mem_block     *debug_block;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ut_free", allocation);
+       struct acpi_debug_mem_block *debug_block;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE_PTR("ut_free", allocation);
 
        if (NULL == allocation) {
-               _ACPI_REPORT_ERROR (module, line, component,
-                       ("acpi_ut_free: Attempt to delete a NULL address\n"));
+               _ACPI_REPORT_ERROR(module, line, component,
+                                  ("acpi_ut_free: Attempt to delete a NULL address\n"));
 
                return_VOID;
        }
 
-       debug_block = ACPI_CAST_PTR (struct acpi_debug_mem_block,
-                         (((char *) allocation) - sizeof (struct acpi_debug_mem_header)));
+       debug_block = ACPI_CAST_PTR(struct acpi_debug_mem_block,
+                                   (((char *)allocation) -
+                                    sizeof(struct acpi_debug_mem_header)));
 
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].total_freed++;
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].current_total_size -= debug_block->size;
+       acpi_gbl_global_list->total_freed++;
+       acpi_gbl_global_list->current_total_size -= debug_block->size;
 
-       status = acpi_ut_remove_allocation (ACPI_MEM_LIST_GLOBAL, debug_block,
-                         component, module, line);
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Could not free memory, %s\n",
-                       acpi_format_exception (status)));
+       status = acpi_ut_remove_allocation(debug_block,
+                                          component, module, line);
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Could not free memory, %s\n",
+                                 acpi_format_exception(status)));
        }
 
-       acpi_os_free (debug_block);
+       acpi_os_free(debug_block);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "%p freed\n", allocation));
+       ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "%p freed\n", allocation));
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_find_allocation
  *
- * PARAMETERS:  list_id                 - Memory list to search
- *              Allocation              - Address of allocated memory
+ * PARAMETERS:  Allocation              - Address of allocated memory
  *
  * RETURN:      A list element if found; NULL otherwise.
  *
@@ -667,22 +565,13 @@ acpi_ut_free_and_track (
  *
  ******************************************************************************/
 
-static struct acpi_debug_mem_block *
-acpi_ut_find_allocation (
-       u32                             list_id,
-       void                            *allocation)
+static struct acpi_debug_mem_block *acpi_ut_find_allocation(void *allocation)
 {
-       struct acpi_debug_mem_block     *element;
-
+       struct acpi_debug_mem_block *element;
 
-       ACPI_FUNCTION_ENTRY ();
-
-
-       if (list_id > ACPI_MEM_LIST_MAX) {
-               return (NULL);
-       }
+       ACPI_FUNCTION_ENTRY();
 
-       element = acpi_gbl_memory_lists[list_id].list_head;
+       element = acpi_gbl_global_list->list_head;
 
        /* Search for the address. */
 
@@ -697,13 +586,11 @@ acpi_ut_find_allocation (
        return (NULL);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_track_allocation
  *
- * PARAMETERS:  list_id             - Memory list to search
- *              Allocation          - Address of allocated memory
+ * PARAMETERS:  Allocation          - Address of allocated memory
  *              Size                - Size of the allocation
  *              alloc_type          - MEM_MALLOC or MEM_CALLOC
  *              Component           - Component type of caller
@@ -717,64 +604,51 @@ acpi_ut_find_allocation (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_track_allocation (
-       u32                             list_id,
-       struct acpi_debug_mem_block     *allocation,
-       acpi_size                       size,
-       u8                              alloc_type,
-       u32                             component,
-       char                            *module,
-       u32                             line)
+acpi_ut_track_allocation(struct acpi_debug_mem_block *allocation,
+                        acpi_size size,
+                        u8 alloc_type, u32 component, char *module, u32 line)
 {
-       struct acpi_memory_list         *mem_list;
-       struct acpi_debug_mem_block     *element;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ut_track_allocation", allocation);
+       struct acpi_memory_list *mem_list;
+       struct acpi_debug_mem_block *element;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE_PTR("ut_track_allocation", allocation);
 
-       if (list_id > ACPI_MEM_LIST_MAX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
-       }
-
-       mem_list = &acpi_gbl_memory_lists[list_id];
-       status = acpi_ut_acquire_mutex (ACPI_MTX_MEMORY);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       mem_list = acpi_gbl_global_list;
+       status = acpi_ut_acquire_mutex(ACPI_MTX_MEMORY);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
         * Search list for this address to make sure it is not already on the list.
         * This will catch several kinds of problems.
         */
-
-       element = acpi_ut_find_allocation (list_id, allocation);
+       element = acpi_ut_find_allocation(allocation);
        if (element) {
-               ACPI_REPORT_ERROR ((
-                       "ut_track_allocation: Allocation already present in list! (%p)\n",
-                       allocation));
+               ACPI_REPORT_ERROR(("ut_track_allocation: Allocation already present in list! (%p)\n", allocation));
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Element %p Address %p\n",
-                       element, allocation));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Element %p Address %p\n",
+                                 element, allocation));
 
                goto unlock_and_exit;
        }
 
        /* Fill in the instance data. */
 
-       allocation->size      = (u32) size;
+       allocation->size = (u32) size;
        allocation->alloc_type = alloc_type;
        allocation->component = component;
-       allocation->line      = line;
+       allocation->line = line;
 
-       ACPI_STRNCPY (allocation->module, module, ACPI_MAX_MODULE_NAME);
-       allocation->module[ACPI_MAX_MODULE_NAME-1] = 0;
+       ACPI_STRNCPY(allocation->module, module, ACPI_MAX_MODULE_NAME);
+       allocation->module[ACPI_MAX_MODULE_NAME - 1] = 0;
 
        /* Insert at list head */
 
        if (mem_list->list_head) {
-               ((struct acpi_debug_mem_block *)(mem_list->list_head))->previous = allocation;
+               ((struct acpi_debug_mem_block *)(mem_list->list_head))->
+                   previous = allocation;
        }
 
        allocation->next = mem_list->list_head;
@@ -782,19 +656,16 @@ acpi_ut_track_allocation (
 
        mem_list->list_head = allocation;
 
-
-unlock_and_exit:
-       status = acpi_ut_release_mutex (ACPI_MTX_MEMORY);
-       return_ACPI_STATUS (status);
+      unlock_and_exit:
+       status = acpi_ut_release_mutex(ACPI_MTX_MEMORY);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_remove_allocation
  *
- * PARAMETERS:  list_id             - Memory list to search
- *              Allocation          - Address of allocated memory
+ * PARAMETERS:  Allocation          - Address of allocated memory
  *              Component           - Component type of caller
  *              Module              - Source file name of caller
  *              Line                - Line number of caller
@@ -806,45 +677,34 @@ unlock_and_exit:
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_remove_allocation (
-       u32                             list_id,
-       struct acpi_debug_mem_block     *allocation,
-       u32                             component,
-       char                            *module,
-       u32                             line)
+acpi_ut_remove_allocation(struct acpi_debug_mem_block *allocation,
+                         u32 component, char *module, u32 line)
 {
-       struct acpi_memory_list         *mem_list;
-       acpi_status                     status;
-
+       struct acpi_memory_list *mem_list;
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("ut_remove_allocation");
+       ACPI_FUNCTION_TRACE("ut_remove_allocation");
 
-
-       if (list_id > ACPI_MEM_LIST_MAX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
-       }
-
-       mem_list = &acpi_gbl_memory_lists[list_id];
+       mem_list = acpi_gbl_global_list;
        if (NULL == mem_list->list_head) {
                /* No allocations! */
 
-               _ACPI_REPORT_ERROR (module, line, component,
-                       ("ut_remove_allocation: Empty allocation list, nothing to free!\n"));
+               _ACPI_REPORT_ERROR(module, line, component,
+                                  ("ut_remove_allocation: Empty allocation list, nothing to free!\n"));
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
-       status = acpi_ut_acquire_mutex (ACPI_MTX_MEMORY);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_acquire_mutex(ACPI_MTX_MEMORY);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Unlink */
 
        if (allocation->previous) {
                (allocation->previous)->next = allocation->next;
-       }
-       else {
+       } else {
                mem_list->list_head = allocation->next;
        }
 
@@ -854,16 +714,15 @@ acpi_ut_remove_allocation (
 
        /* Mark the segment as deleted */
 
-       ACPI_MEMSET (&allocation->user_space, 0xEA, allocation->size);
+       ACPI_MEMSET(&allocation->user_space, 0xEA, allocation->size);
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Freeing size 0%X\n",
-               allocation->size));
+       ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "Freeing size 0%X\n",
+                         allocation->size));
 
-       status = acpi_ut_release_mutex (ACPI_MTX_MEMORY);
-       return_ACPI_STATUS (status);
+       status = acpi_ut_release_mutex(ACPI_MTX_MEMORY);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_dump_allocation_info
@@ -877,15 +736,13 @@ acpi_ut_remove_allocation (
  ******************************************************************************/
 
 #ifdef ACPI_FUTURE_USAGE
-void
-acpi_ut_dump_allocation_info (
-       void)
+void acpi_ut_dump_allocation_info(void)
 {
 /*
        struct acpi_memory_list         *mem_list;
 */
 
-       ACPI_FUNCTION_TRACE ("ut_dump_allocation_info");
+       ACPI_FUNCTION_TRACE("ut_dump_allocation_info");
 
 /*
        ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,
@@ -898,7 +755,6 @@ acpi_ut_dump_allocation_info (
                          mem_list->max_concurrent_count,
                          ROUND_UP_TO_1K (mem_list->max_concurrent_size)));
 
-
        ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,
                          ("%30s: %4d (%3d Kb)\n", "Total (all) internal objects",
                          running_object_count,
@@ -909,7 +765,6 @@ acpi_ut_dump_allocation_info (
                          running_alloc_count,
                          ROUND_UP_TO_1K (running_alloc_size)));
 
-
        ACPI_DEBUG_PRINT (TRACE_ALLOCATIONS | TRACE_TABLES,
                          ("%30s: %4d (%3d Kb)\n", "Current Nodes",
                          acpi_gbl_current_node_count,
@@ -923,8 +778,7 @@ acpi_ut_dump_allocation_info (
 */
        return_VOID;
 }
-#endif  /*  ACPI_FUTURE_USAGE  */
-
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*******************************************************************************
  *
@@ -939,84 +793,87 @@ acpi_ut_dump_allocation_info (
  *
  ******************************************************************************/
 
-void
-acpi_ut_dump_allocations (
-       u32                             component,
-       char                            *module)
+void acpi_ut_dump_allocations(u32 component, char *module)
 {
-       struct acpi_debug_mem_block     *element;
-       union acpi_descriptor           *descriptor;
-       u32                             num_outstanding = 0;
-
-
-       ACPI_FUNCTION_TRACE ("ut_dump_allocations");
+       struct acpi_debug_mem_block *element;
+       union acpi_descriptor *descriptor;
+       u32 num_outstanding = 0;
 
+       ACPI_FUNCTION_TRACE("ut_dump_allocations");
 
        /*
         * Walk the allocation list.
         */
-       if (ACPI_FAILURE (acpi_ut_acquire_mutex (ACPI_MTX_MEMORY))) {
+       if (ACPI_FAILURE(acpi_ut_acquire_mutex(ACPI_MTX_MEMORY))) {
                return;
        }
 
-       element = acpi_gbl_memory_lists[0].list_head;
+       element = acpi_gbl_global_list->list_head;
        while (element) {
                if ((element->component & component) &&
-                       ((module == NULL) || (0 == ACPI_STRCMP (module, element->module)))) {
+                   ((module == NULL)
+                    || (0 == ACPI_STRCMP(module, element->module)))) {
                        /* Ignore allocated objects that are in a cache */
 
-                       descriptor = ACPI_CAST_PTR (union acpi_descriptor, &element->user_space);
+                       descriptor =
+                           ACPI_CAST_PTR(union acpi_descriptor,
+                                         &element->user_space);
                        if (descriptor->descriptor_id != ACPI_DESC_TYPE_CACHED) {
-                               acpi_os_printf ("%p Len %04X %9.9s-%d [%s] ",
-                                       descriptor, element->size, element->module,
-                                       element->line, acpi_ut_get_descriptor_name (descriptor));
+                               acpi_os_printf("%p Len %04X %9.9s-%d [%s] ",
+                                              descriptor, element->size,
+                                              element->module, element->line,
+                                              acpi_ut_get_descriptor_name
+                                              (descriptor));
 
                                /* Most of the elements will be Operand objects. */
 
-                               switch (ACPI_GET_DESCRIPTOR_TYPE (descriptor)) {
+                               switch (ACPI_GET_DESCRIPTOR_TYPE(descriptor)) {
                                case ACPI_DESC_TYPE_OPERAND:
-                                       acpi_os_printf ("%12.12s R%hd",
-                                               acpi_ut_get_type_name (descriptor->object.common.type),
-                                               descriptor->object.common.reference_count);
+                                       acpi_os_printf("%12.12s R%hd",
+                                                      acpi_ut_get_type_name
+                                                      (descriptor->object.
+                                                       common.type),
+                                                      descriptor->object.
+                                                      common.reference_count);
                                        break;
 
                                case ACPI_DESC_TYPE_PARSER:
-                                       acpi_os_printf ("aml_opcode %04hX",
-                                               descriptor->op.asl.aml_opcode);
+                                       acpi_os_printf("aml_opcode %04hX",
+                                                      descriptor->op.asl.
+                                                      aml_opcode);
                                        break;
 
                                case ACPI_DESC_TYPE_NAMED:
-                                       acpi_os_printf ("%4.4s",
-                                               acpi_ut_get_node_name (&descriptor->node));
+                                       acpi_os_printf("%4.4s",
+                                                      acpi_ut_get_node_name
+                                                      (&descriptor->node));
                                        break;
 
                                default:
                                        break;
                                }
 
-                               acpi_os_printf ( "\n");
+                               acpi_os_printf("\n");
                                num_outstanding++;
                        }
                }
                element = element->next;
        }
 
-       (void) acpi_ut_release_mutex (ACPI_MTX_MEMORY);
+       (void)acpi_ut_release_mutex(ACPI_MTX_MEMORY);
 
        /* Print summary */
 
        if (!num_outstanding) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "No outstanding allocations.\n"));
-       }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "%d(%X) Outstanding allocations\n",
-                       num_outstanding, num_outstanding));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "No outstanding allocations.\n"));
+       } else {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "%d(%X) Outstanding allocations\n",
+                                 num_outstanding, num_outstanding));
        }
 
        return_VOID;
 }
 
-#endif  /* #ifdef ACPI_DBG_TRACK_ALLOCATIONS */
-
+#endif                         /* #ifdef ACPI_DBG_TRACK_ALLOCATIONS */
diff --git a/drivers/acpi/utilities/utcache.c b/drivers/acpi/utilities/utcache.c
new file mode 100644 (file)
index 0000000..93d4868
--- /dev/null
@@ -0,0 +1,305 @@
+/******************************************************************************
+ *
+ * Module Name: utcache - local cache allocation routines
+ *
+ *****************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2005, R. Byron Moore
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#include <acpi/acpi.h>
+
+#define _COMPONENT          ACPI_UTILITIES
+ACPI_MODULE_NAME("utcache")
+
+#ifdef ACPI_USE_LOCAL_CACHE
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_os_create_cache
+ *
+ * PARAMETERS:  cache_name      - Ascii name for the cache
+ *              object_size     - Size of each cached object
+ *              max_depth       - Maximum depth of the cache (in objects)
+ *              return_cache    - Where the new cache object is returned
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Create a cache object
+ *
+ ******************************************************************************/
+acpi_status
+acpi_os_create_cache(char *cache_name,
+                    u16 object_size,
+                    u16 max_depth, struct acpi_memory_list **return_cache)
+{
+       struct acpi_memory_list *cache;
+
+       ACPI_FUNCTION_ENTRY();
+
+       if (!cache_name || !return_cache || (object_size < 16)) {
+               return (AE_BAD_PARAMETER);
+       }
+
+       /* Create the cache object */
+
+       cache = acpi_os_allocate(sizeof(struct acpi_memory_list));
+       if (!cache) {
+               return (AE_NO_MEMORY);
+       }
+
+       /* Populate the cache object and return it */
+
+       ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list));
+       cache->link_offset = 8;
+       cache->list_name = cache_name;
+       cache->object_size = object_size;
+       cache->max_depth = max_depth;
+
+       *return_cache = cache;
+       return (AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_os_purge_cache
+ *
+ * PARAMETERS:  Cache           - Handle to cache object
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Free all objects within the requested cache.
+ *
+ ******************************************************************************/
+
+acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache)
+{
+       char *next;
+
+       ACPI_FUNCTION_ENTRY();
+
+       if (!cache) {
+               return (AE_BAD_PARAMETER);
+       }
+
+       /* Walk the list of objects in this cache */
+
+       while (cache->list_head) {
+               /* Delete and unlink one cached state object */
+
+               next = *(ACPI_CAST_INDIRECT_PTR(char,
+                                               &(((char *)cache->
+                                                  list_head)[cache->
+                                                             link_offset])));
+               ACPI_MEM_FREE(cache->list_head);
+
+               cache->list_head = next;
+               cache->current_depth--;
+       }
+
+       return (AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_os_delete_cache
+ *
+ * PARAMETERS:  Cache           - Handle to cache object
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Free all objects within the requested cache and delete the
+ *              cache object.
+ *
+ ******************************************************************************/
+
+acpi_status acpi_os_delete_cache(struct acpi_memory_list * cache)
+{
+       acpi_status status;
+
+       ACPI_FUNCTION_ENTRY();
+
+       /* Purge all objects in the cache */
+
+       status = acpi_os_purge_cache(cache);
+       if (ACPI_FAILURE(status)) {
+               return (status);
+       }
+
+       /* Now we can delete the cache object */
+
+       acpi_os_free(cache);
+       return (AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_os_release_object
+ *
+ * PARAMETERS:  Cache       - Handle to cache object
+ *              Object      - The object to be released
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Release an object to the specified cache.  If cache is full,
+ *              the object is deleted.
+ *
+ ******************************************************************************/
+
+acpi_status
+acpi_os_release_object(struct acpi_memory_list * cache, void *object)
+{
+       acpi_status status;
+
+       ACPI_FUNCTION_ENTRY();
+
+       if (!cache || !object) {
+               return (AE_BAD_PARAMETER);
+       }
+
+       /* If cache is full, just free this object */
+
+       if (cache->current_depth >= cache->max_depth) {
+               ACPI_MEM_FREE(object);
+               ACPI_MEM_TRACKING(cache->total_freed++);
+       }
+
+       /* Otherwise put this object back into the cache */
+
+       else {
+               status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES);
+               if (ACPI_FAILURE(status)) {
+                       return (status);
+               }
+
+               /* Mark the object as cached */
+
+               ACPI_MEMSET(object, 0xCA, cache->object_size);
+               ACPI_SET_DESCRIPTOR_TYPE(object, ACPI_DESC_TYPE_CACHED);
+
+               /* Put the object at the head of the cache list */
+
+               *(ACPI_CAST_INDIRECT_PTR(char,
+                                        &(((char *)object)[cache->
+                                                           link_offset]))) =
+                   cache->list_head;
+               cache->list_head = object;
+               cache->current_depth++;
+
+               (void)acpi_ut_release_mutex(ACPI_MTX_CACHES);
+       }
+
+       return (AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_os_acquire_object
+ *
+ * PARAMETERS:  Cache           - Handle to cache object
+ *
+ * RETURN:      the acquired object.  NULL on error
+ *
+ * DESCRIPTION: Get an object from the specified cache.  If cache is empty,
+ *              the object is allocated.
+ *
+ ******************************************************************************/
+
+void *acpi_os_acquire_object(struct acpi_memory_list *cache)
+{
+       acpi_status status;
+       void *object;
+
+       ACPI_FUNCTION_NAME("os_acquire_object");
+
+       if (!cache) {
+               return (NULL);
+       }
+
+       status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES);
+       if (ACPI_FAILURE(status)) {
+               return (NULL);
+       }
+
+       ACPI_MEM_TRACKING(cache->requests++);
+
+       /* Check the cache first */
+
+       if (cache->list_head) {
+               /* There is an object available, use it */
+
+               object = cache->list_head;
+               cache->list_head = *(ACPI_CAST_INDIRECT_PTR(char,
+                                                           &(((char *)
+                                                              object)[cache->
+                                                                      link_offset])));
+
+               cache->current_depth--;
+
+               ACPI_MEM_TRACKING(cache->hits++);
+               ACPI_MEM_TRACKING(ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                                   "Object %p from %s cache\n",
+                                                   object, cache->list_name)));
+
+               status = acpi_ut_release_mutex(ACPI_MTX_CACHES);
+               if (ACPI_FAILURE(status)) {
+                       return (NULL);
+               }
+
+               /* Clear (zero) the previously used Object */
+
+               ACPI_MEMSET(object, 0, cache->object_size);
+       } else {
+               /* The cache is empty, create a new object */
+
+               ACPI_MEM_TRACKING(cache->total_allocated++);
+
+               /* Avoid deadlock with ACPI_MEM_CALLOCATE */
+
+               status = acpi_ut_release_mutex(ACPI_MTX_CACHES);
+               if (ACPI_FAILURE(status)) {
+                       return (NULL);
+               }
+
+               object = ACPI_MEM_CALLOCATE(cache->object_size);
+               if (!object) {
+                       return (NULL);
+               }
+       }
+
+       return (object);
+}
+#endif                         /* ACPI_USE_LOCAL_CACHE */
index 11e88495716255ab203daf17c72e29b9d96a40b4..5442b32de61156a70a852e7a31d67360746d6b57 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/amlcode.h>
 
-
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utcopy")
+ACPI_MODULE_NAME("utcopy")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ut_copy_isimple_to_esimple (
-       union acpi_operand_object       *internal_object,
-       union acpi_object               *external_object,
-       u8                              *data_space,
-       acpi_size                       *buffer_space_used);
+acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object,
+                               union acpi_object *external_object,
+                               u8 * data_space, acpi_size * buffer_space_used);
 
 static acpi_status
-acpi_ut_copy_ielement_to_ielement (
-       u8                              object_type,
-       union acpi_operand_object       *source_object,
-       union acpi_generic_state        *state,
-       void                            *context);
+acpi_ut_copy_ielement_to_ielement(u8 object_type,
+                                 union acpi_operand_object *source_object,
+                                 union acpi_generic_state *state,
+                                 void *context);
 
 static acpi_status
-acpi_ut_copy_ipackage_to_epackage (
-       union acpi_operand_object       *internal_object,
-       u8                              *buffer,
-       acpi_size                       *space_used);
+acpi_ut_copy_ipackage_to_epackage(union acpi_operand_object *internal_object,
+                                 u8 * buffer, acpi_size * space_used);
 
 static acpi_status
-acpi_ut_copy_esimple_to_isimple(
-       union acpi_object               *user_obj,
-       union acpi_operand_object       **return_obj);
+acpi_ut_copy_esimple_to_isimple(union acpi_object *user_obj,
+                               union acpi_operand_object **return_obj);
 
 static acpi_status
-acpi_ut_copy_simple_object (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *dest_desc);
+acpi_ut_copy_simple_object(union acpi_operand_object *source_desc,
+                          union acpi_operand_object *dest_desc);
 
 static acpi_status
-acpi_ut_copy_ielement_to_eelement (
-       u8                              object_type,
-       union acpi_operand_object       *source_object,
-       union acpi_generic_state        *state,
-       void                            *context);
+acpi_ut_copy_ielement_to_eelement(u8 object_type,
+                                 union acpi_operand_object *source_object,
+                                 union acpi_generic_state *state,
+                                 void *context);
 
 static acpi_status
-acpi_ut_copy_ipackage_to_ipackage (
-       union acpi_operand_object       *source_obj,
-       union acpi_operand_object       *dest_obj,
-       struct acpi_walk_state          *walk_state);
-
+acpi_ut_copy_ipackage_to_ipackage(union acpi_operand_object *source_obj,
+                                 union acpi_operand_object *dest_obj,
+                                 struct acpi_walk_state *walk_state);
 
 /*******************************************************************************
  *
@@ -116,17 +103,13 @@ acpi_ut_copy_ipackage_to_ipackage (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_copy_isimple_to_esimple (
-       union acpi_operand_object       *internal_object,
-       union acpi_object               *external_object,
-       u8                              *data_space,
-       acpi_size                       *buffer_space_used)
+acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object,
+                               union acpi_object *external_object,
+                               u8 * data_space, acpi_size * buffer_space_used)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("ut_copy_isimple_to_esimple");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("ut_copy_isimple_to_esimple");
 
        *buffer_space_used = 0;
 
@@ -135,54 +118,54 @@ acpi_ut_copy_isimple_to_esimple (
         * package element)
         */
        if (!internal_object) {
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Always clear the external object */
 
-       ACPI_MEMSET (external_object, 0, sizeof (union acpi_object));
+       ACPI_MEMSET(external_object, 0, sizeof(union acpi_object));
 
        /*
         * In general, the external object will be the same type as
         * the internal object
         */
-       external_object->type = ACPI_GET_OBJECT_TYPE (internal_object);
+       external_object->type = ACPI_GET_OBJECT_TYPE(internal_object);
 
        /* However, only a limited number of external types are supported */
 
-       switch (ACPI_GET_OBJECT_TYPE (internal_object)) {
+       switch (ACPI_GET_OBJECT_TYPE(internal_object)) {
        case ACPI_TYPE_STRING:
 
-               external_object->string.pointer = (char *) data_space;
+               external_object->string.pointer = (char *)data_space;
                external_object->string.length = internal_object->string.length;
-               *buffer_space_used = ACPI_ROUND_UP_TO_NATIVE_WORD (
-                                  (acpi_size) internal_object->string.length + 1);
-
-               ACPI_MEMCPY ((void *) data_space,
-                       (void *) internal_object->string.pointer,
-                       (acpi_size) internal_object->string.length + 1);
+               *buffer_space_used = ACPI_ROUND_UP_TO_NATIVE_WORD((acpi_size)
+                                                                 internal_object->
+                                                                 string.
+                                                                 length + 1);
+
+               ACPI_MEMCPY((void *)data_space,
+                           (void *)internal_object->string.pointer,
+                           (acpi_size) internal_object->string.length + 1);
                break;
 
-
        case ACPI_TYPE_BUFFER:
 
                external_object->buffer.pointer = data_space;
                external_object->buffer.length = internal_object->buffer.length;
-               *buffer_space_used = ACPI_ROUND_UP_TO_NATIVE_WORD (
-                                  internal_object->string.length);
+               *buffer_space_used =
+                   ACPI_ROUND_UP_TO_NATIVE_WORD(internal_object->string.
+                                                length);
 
-               ACPI_MEMCPY ((void *) data_space,
-                       (void *) internal_object->buffer.pointer,
-                       internal_object->buffer.length);
+               ACPI_MEMCPY((void *)data_space,
+                           (void *)internal_object->buffer.pointer,
+                           internal_object->buffer.length);
                break;
 
-
        case ACPI_TYPE_INTEGER:
 
                external_object->integer.value = internal_object->integer.value;
                break;
 
-
        case ACPI_TYPE_LOCAL_REFERENCE:
 
                /*
@@ -199,41 +182,41 @@ acpi_ut_copy_isimple_to_esimple (
                         * to object containing a handle to an ACPI named object.
                         */
                        external_object->type = ACPI_TYPE_ANY;
-                       external_object->reference.handle = internal_object->reference.node;
+                       external_object->reference.handle =
+                           internal_object->reference.node;
                        break;
                }
                break;
 
-
        case ACPI_TYPE_PROCESSOR:
 
-               external_object->processor.proc_id    = internal_object->processor.proc_id;
-               external_object->processor.pblk_address = internal_object->processor.address;
-               external_object->processor.pblk_length = internal_object->processor.length;
+               external_object->processor.proc_id =
+                   internal_object->processor.proc_id;
+               external_object->processor.pblk_address =
+                   internal_object->processor.address;
+               external_object->processor.pblk_length =
+                   internal_object->processor.length;
                break;
 
-
        case ACPI_TYPE_POWER:
 
                external_object->power_resource.system_level =
-                                  internal_object->power_resource.system_level;
+                   internal_object->power_resource.system_level;
 
                external_object->power_resource.resource_order =
-                                  internal_object->power_resource.resource_order;
+                   internal_object->power_resource.resource_order;
                break;
 
-
        default:
                /*
                 * There is no corresponding external object type
                 */
-               return_ACPI_STATUS (AE_SUPPORT);
+               return_ACPI_STATUS(AE_SUPPORT);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_copy_ielement_to_eelement
@@ -247,25 +230,23 @@ acpi_ut_copy_isimple_to_esimple (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_copy_ielement_to_eelement (
-       u8                              object_type,
-       union acpi_operand_object       *source_object,
-       union acpi_generic_state        *state,
-       void                            *context)
+acpi_ut_copy_ielement_to_eelement(u8 object_type,
+                                 union acpi_operand_object *source_object,
+                                 union acpi_generic_state *state,
+                                 void *context)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_pkg_info            *info = (struct acpi_pkg_info *) context;
-       acpi_size                       object_space;
-       u32                             this_index;
-       union acpi_object               *target_object;
+       acpi_status status = AE_OK;
+       struct acpi_pkg_info *info = (struct acpi_pkg_info *)context;
+       acpi_size object_space;
+       u32 this_index;
+       union acpi_object *target_object;
 
+       ACPI_FUNCTION_ENTRY();
 
-       ACPI_FUNCTION_ENTRY ();
-
-
-       this_index   = state->pkg.index;
+       this_index = state->pkg.index;
        target_object = (union acpi_object *)
-               &((union acpi_object *)(state->pkg.dest_object))->package.elements[this_index];
+           &((union acpi_object *)(state->pkg.dest_object))->package.
+           elements[this_index];
 
        switch (object_type) {
        case ACPI_COPY_TYPE_SIMPLE:
@@ -273,23 +254,24 @@ acpi_ut_copy_ielement_to_eelement (
                /*
                 * This is a simple or null object
                 */
-               status = acpi_ut_copy_isimple_to_esimple (source_object,
-                                 target_object, info->free_space, &object_space);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ut_copy_isimple_to_esimple(source_object,
+                                                        target_object,
+                                                        info->free_space,
+                                                        &object_space);
+               if (ACPI_FAILURE(status)) {
                        return (status);
                }
                break;
 
-
        case ACPI_COPY_TYPE_PACKAGE:
 
                /*
                 * Build the package object
                 */
-               target_object->type             = ACPI_TYPE_PACKAGE;
-               target_object->package.count    = source_object->package.count;
+               target_object->type = ACPI_TYPE_PACKAGE;
+               target_object->package.count = source_object->package.count;
                target_object->package.elements =
-                       ACPI_CAST_PTR (union acpi_object, info->free_space);
+                   ACPI_CAST_PTR(union acpi_object, info->free_space);
 
                /*
                 * Pass the new package object back to the package walk routine
@@ -300,22 +282,22 @@ acpi_ut_copy_ielement_to_eelement (
                 * Save space for the array of objects (Package elements)
                 * update the buffer length counter
                 */
-               object_space = ACPI_ROUND_UP_TO_NATIVE_WORD (
-                                  (acpi_size) target_object->package.count *
-                                  sizeof (union acpi_object));
+               object_space = ACPI_ROUND_UP_TO_NATIVE_WORD((acpi_size)
+                                                           target_object->
+                                                           package.count *
+                                                           sizeof(union
+                                                                  acpi_object));
                break;
 
-
        default:
                return (AE_BAD_PARAMETER);
        }
 
-       info->free_space  += object_space;
-       info->length      += object_space;
+       info->free_space += object_space;
+       info->length += object_space;
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_copy_ipackage_to_epackage
@@ -336,55 +318,51 @@ acpi_ut_copy_ielement_to_eelement (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_copy_ipackage_to_epackage (
-       union acpi_operand_object       *internal_object,
-       u8                              *buffer,
-       acpi_size                       *space_used)
+acpi_ut_copy_ipackage_to_epackage(union acpi_operand_object *internal_object,
+                                 u8 * buffer, acpi_size * space_used)
 {
-       union acpi_object               *external_object;
-       acpi_status                     status;
-       struct acpi_pkg_info            info;
-
-
-       ACPI_FUNCTION_TRACE ("ut_copy_ipackage_to_epackage");
+       union acpi_object *external_object;
+       acpi_status status;
+       struct acpi_pkg_info info;
 
+       ACPI_FUNCTION_TRACE("ut_copy_ipackage_to_epackage");
 
        /*
         * First package at head of the buffer
         */
-       external_object = ACPI_CAST_PTR (union acpi_object, buffer);
+       external_object = ACPI_CAST_PTR(union acpi_object, buffer);
 
        /*
         * Free space begins right after the first package
         */
-       info.length      = ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (union acpi_object));
-       info.free_space  = buffer + ACPI_ROUND_UP_TO_NATIVE_WORD (
-                          sizeof (union acpi_object));
+       info.length = ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof(union acpi_object));
+       info.free_space =
+           buffer + ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof(union acpi_object));
        info.object_space = 0;
        info.num_packages = 1;
 
-       external_object->type            = ACPI_GET_OBJECT_TYPE (internal_object);
-       external_object->package.count   = internal_object->package.count;
-       external_object->package.elements = ACPI_CAST_PTR (union acpi_object,
-                         info.free_space);
+       external_object->type = ACPI_GET_OBJECT_TYPE(internal_object);
+       external_object->package.count = internal_object->package.count;
+       external_object->package.elements = ACPI_CAST_PTR(union acpi_object,
+                                                         info.free_space);
 
        /*
         * Leave room for an array of ACPI_OBJECTS in the buffer
         * and move the free space past it
         */
-       info.length    += (acpi_size) external_object->package.count *
-                        ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (union acpi_object));
+       info.length += (acpi_size) external_object->package.count *
+           ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof(union acpi_object));
        info.free_space += external_object->package.count *
-                        ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (union acpi_object));
+           ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof(union acpi_object));
 
-       status = acpi_ut_walk_package_tree (internal_object, external_object,
-                        acpi_ut_copy_ielement_to_eelement, &info);
+       status = acpi_ut_walk_package_tree(internal_object, external_object,
+                                          acpi_ut_copy_ielement_to_eelement,
+                                          &info);
 
        *space_used = info.length;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_copy_iobject_to_eobject
@@ -400,44 +378,45 @@ acpi_ut_copy_ipackage_to_epackage (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_copy_iobject_to_eobject (
-       union acpi_operand_object       *internal_object,
-       struct acpi_buffer              *ret_buffer)
+acpi_ut_copy_iobject_to_eobject(union acpi_operand_object *internal_object,
+                               struct acpi_buffer *ret_buffer)
 {
-       acpi_status                     status;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ut_copy_iobject_to_eobject");
 
-       ACPI_FUNCTION_TRACE ("ut_copy_iobject_to_eobject");
-
-
-       if (ACPI_GET_OBJECT_TYPE (internal_object) == ACPI_TYPE_PACKAGE) {
+       if (ACPI_GET_OBJECT_TYPE(internal_object) == ACPI_TYPE_PACKAGE) {
                /*
                 * Package object:  Copy all subobjects (including
                 * nested packages)
                 */
-               status = acpi_ut_copy_ipackage_to_epackage (internal_object,
-                                 ret_buffer->pointer, &ret_buffer->length);
-       }
-       else {
+               status = acpi_ut_copy_ipackage_to_epackage(internal_object,
+                                                          ret_buffer->pointer,
+                                                          &ret_buffer->length);
+       else {
                /*
                 * Build a simple object (no nested objects)
                 */
-               status = acpi_ut_copy_isimple_to_esimple (internal_object,
-                                (union acpi_object *) ret_buffer->pointer,
-                                ((u8 *) ret_buffer->pointer +
-                                ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (union acpi_object))),
-                                &ret_buffer->length);
+               status = acpi_ut_copy_isimple_to_esimple(internal_object,
+                                                        (union acpi_object *)
+                                                        ret_buffer->pointer,
+                                                        ((u8 *) ret_buffer->
+                                                         pointer +
+                                                         ACPI_ROUND_UP_TO_NATIVE_WORD
+                                                         (sizeof
+                                                          (union
+                                                           acpi_object))),
+                                                        &ret_buffer->length);
                /*
                 * build simple does not include the object size in the length
                 * so we add it in here
                 */
-               ret_buffer->length += sizeof (union acpi_object);
+               ret_buffer->length += sizeof(union acpi_object);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_copy_esimple_to_isimple
@@ -455,15 +434,12 @@ acpi_ut_copy_iobject_to_eobject (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_copy_esimple_to_isimple (
-       union acpi_object               *external_object,
-       union acpi_operand_object       **ret_internal_object)
+acpi_ut_copy_esimple_to_isimple(union acpi_object *external_object,
+                               union acpi_operand_object **ret_internal_object)
 {
-       union acpi_operand_object       *internal_object;
-
-
-       ACPI_FUNCTION_TRACE ("ut_copy_esimple_to_isimple");
+       union acpi_operand_object *internal_object;
 
+       ACPI_FUNCTION_TRACE("ut_copy_esimple_to_isimple");
 
        /*
         * Simple types supported are: String, Buffer, Integer
@@ -473,58 +449,57 @@ acpi_ut_copy_esimple_to_isimple (
        case ACPI_TYPE_BUFFER:
        case ACPI_TYPE_INTEGER:
 
-               internal_object = acpi_ut_create_internal_object (
-                                  (u8) external_object->type);
+               internal_object = acpi_ut_create_internal_object((u8)
+                                                                external_object->
+                                                                type);
                if (!internal_object) {
-                       return_ACPI_STATUS (AE_NO_MEMORY);
+                       return_ACPI_STATUS(AE_NO_MEMORY);
                }
                break;
 
        default:
                /* All other types are not supported */
 
-               return_ACPI_STATUS (AE_SUPPORT);
+               return_ACPI_STATUS(AE_SUPPORT);
        }
 
-
        /* Must COPY string and buffer contents */
 
        switch (external_object->type) {
        case ACPI_TYPE_STRING:
 
                internal_object->string.pointer =
-                       ACPI_MEM_CALLOCATE ((acpi_size) external_object->string.length + 1);
+                   ACPI_MEM_CALLOCATE((acpi_size) external_object->string.
+                                      length + 1);
                if (!internal_object->string.pointer) {
                        goto error_exit;
                }
 
-               ACPI_MEMCPY (internal_object->string.pointer,
-                                 external_object->string.pointer,
-                                 external_object->string.length);
+               ACPI_MEMCPY(internal_object->string.pointer,
+                           external_object->string.pointer,
+                           external_object->string.length);
 
                internal_object->string.length = external_object->string.length;
                break;
 
-
        case ACPI_TYPE_BUFFER:
 
                internal_object->buffer.pointer =
-                       ACPI_MEM_CALLOCATE (external_object->buffer.length);
+                   ACPI_MEM_CALLOCATE(external_object->buffer.length);
                if (!internal_object->buffer.pointer) {
                        goto error_exit;
                }
 
-               ACPI_MEMCPY (internal_object->buffer.pointer,
-                                 external_object->buffer.pointer,
-                                 external_object->buffer.length);
+               ACPI_MEMCPY(internal_object->buffer.pointer,
+                           external_object->buffer.pointer,
+                           external_object->buffer.length);
 
                internal_object->buffer.length = external_object->buffer.length;
                break;
 
-
        case ACPI_TYPE_INTEGER:
 
-               internal_object->integer.value  = external_object->integer.value;
+               internal_object->integer.value = external_object->integer.value;
                break;
 
        default:
@@ -533,15 +508,13 @@ acpi_ut_copy_esimple_to_isimple (
        }
 
        *ret_internal_object = internal_object;
-       return_ACPI_STATUS (AE_OK);
-
+       return_ACPI_STATUS(AE_OK);
 
-error_exit:
-       acpi_ut_remove_reference (internal_object);
-       return_ACPI_STATUS (AE_NO_MEMORY);
+      error_exit:
+       acpi_ut_remove_reference(internal_object);
+       return_ACPI_STATUS(AE_NO_MEMORY);
 }
 
-
 #ifdef ACPI_FUTURE_IMPLEMENTATION
 /* Code to convert packages that are parameters to control methods */
 
@@ -565,22 +538,18 @@ error_exit:
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_copy_epackage_to_ipackage (
-       union acpi_operand_object       *internal_object,
-       u8                              *buffer,
-       u32                             *space_used)
+acpi_ut_copy_epackage_to_ipackage(union acpi_operand_object *internal_object,
+                                 u8 * buffer, u32 * space_used)
 {
-       u8                              *free_space;
-       union acpi_object               *external_object;
-       u32                             length = 0;
-       u32                             this_index;
-       u32                             object_space = 0;
-       union acpi_operand_object       *this_internal_obj;
-       union acpi_object               *this_external_obj;
-
-
-       ACPI_FUNCTION_TRACE ("ut_copy_epackage_to_ipackage");
+       u8 *free_space;
+       union acpi_object *external_object;
+       u32 length = 0;
+       u32 this_index;
+       u32 object_space = 0;
+       union acpi_operand_object *this_internal_obj;
+       union acpi_object *this_external_obj;
 
+       ACPI_FUNCTION_TRACE("ut_copy_epackage_to_ipackage");
 
        /*
         * First package at head of the buffer
@@ -592,24 +561,22 @@ acpi_ut_copy_epackage_to_ipackage (
         */
        free_space = buffer + sizeof(union acpi_object);
 
-
-       external_object->type              = ACPI_GET_OBJECT_TYPE (internal_object);
-       external_object->package.count     = internal_object->package.count;
-       external_object->package.elements  = (union acpi_object *)free_space;
+       external_object->type = ACPI_GET_OBJECT_TYPE(internal_object);
+       external_object->package.count = internal_object->package.count;
+       external_object->package.elements = (union acpi_object *)free_space;
 
        /*
         * Build an array of ACPI_OBJECTS in the buffer
         * and move the free space past it
         */
-       free_space += external_object->package.count * sizeof(union acpi_object);
-
+       free_space +=
+           external_object->package.count * sizeof(union acpi_object);
 
        /* Call walk_package */
 
 }
 
-#endif /* Future implementation */
-
+#endif                         /* Future implementation */
 
 /*******************************************************************************
  *
@@ -625,37 +592,35 @@ acpi_ut_copy_epackage_to_ipackage (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_copy_eobject_to_iobject (
-       union acpi_object               *external_object,
-       union acpi_operand_object       **internal_object)
+acpi_ut_copy_eobject_to_iobject(union acpi_object *external_object,
+                               union acpi_operand_object **internal_object)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ut_copy_eobject_to_iobject");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ut_copy_eobject_to_iobject");
 
        if (external_object->type == ACPI_TYPE_PACKAGE) {
                /*
                 * Packages as external input to control methods are not supported,
                 */
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Packages as parameters not implemented!\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Packages as parameters not implemented!\n"));
 
-               return_ACPI_STATUS (AE_NOT_IMPLEMENTED);
+               return_ACPI_STATUS(AE_NOT_IMPLEMENTED);
        }
 
        else {
                /*
                 * Build a simple object (no nested objects)
                 */
-               status = acpi_ut_copy_esimple_to_isimple (external_object, internal_object);
+               status =
+                   acpi_ut_copy_esimple_to_isimple(external_object,
+                                                   internal_object);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_copy_simple_object
@@ -671,83 +636,75 @@ acpi_ut_copy_eobject_to_iobject (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_copy_simple_object (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *dest_desc)
+acpi_ut_copy_simple_object(union acpi_operand_object *source_desc,
+                          union acpi_operand_object *dest_desc)
 {
-       u16                             reference_count;
-       union acpi_operand_object       *next_object;
-
+       u16 reference_count;
+       union acpi_operand_object *next_object;
 
        /* Save fields from destination that we don't want to overwrite */
 
        reference_count = dest_desc->common.reference_count;
        next_object = dest_desc->common.next_object;
 
-       /* Copy the entire source object over the destination object*/
+       /* Copy the entire source object over the destination object */
 
-       ACPI_MEMCPY ((char *) dest_desc, (char *) source_desc,
-                         sizeof (union acpi_operand_object));
+       ACPI_MEMCPY((char *)dest_desc, (char *)source_desc,
+                   sizeof(union acpi_operand_object));
 
        /* Restore the saved fields */
 
        dest_desc->common.reference_count = reference_count;
        dest_desc->common.next_object = next_object;
 
-       /* Handle the objects with extra data */
+       /* New object is not static, regardless of source */
 
-       switch (ACPI_GET_OBJECT_TYPE (dest_desc)) {
-       case ACPI_TYPE_BUFFER:
+       dest_desc->common.flags &= ~AOPOBJ_STATIC_POINTER;
 
-               dest_desc->buffer.node = NULL;
-               dest_desc->common.flags = source_desc->common.flags;
+       /* Handle the objects with extra data */
 
+       switch (ACPI_GET_OBJECT_TYPE(dest_desc)) {
+       case ACPI_TYPE_BUFFER:
                /*
                 * Allocate and copy the actual buffer if and only if:
                 * 1) There is a valid buffer pointer
-                * 2) The buffer is not static (not in an ACPI table) (in this case,
-                *    the actual pointer was already copied above)
+                * 2) The buffer has a length > 0
                 */
                if ((source_desc->buffer.pointer) &&
-                       (!(source_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
-                       dest_desc->buffer.pointer = NULL;
-
-                       /* Create an actual buffer only if length > 0 */
-
-                       if (source_desc->buffer.length) {
-                               dest_desc->buffer.pointer =
-                                       ACPI_MEM_ALLOCATE (source_desc->buffer.length);
-                               if (!dest_desc->buffer.pointer) {
-                                       return (AE_NO_MEMORY);
-                               }
+                   (source_desc->buffer.length)) {
+                       dest_desc->buffer.pointer =
+                           ACPI_MEM_ALLOCATE(source_desc->buffer.length);
+                       if (!dest_desc->buffer.pointer) {
+                               return (AE_NO_MEMORY);
+                       }
 
-                               /* Copy the actual buffer data */
+                       /* Copy the actual buffer data */
 
-                               ACPI_MEMCPY (dest_desc->buffer.pointer,
-                                               source_desc->buffer.pointer,
-                                               source_desc->buffer.length);
-                       }
+                       ACPI_MEMCPY(dest_desc->buffer.pointer,
+                                   source_desc->buffer.pointer,
+                                   source_desc->buffer.length);
                }
                break;
 
        case ACPI_TYPE_STRING:
-
                /*
                 * Allocate and copy the actual string if and only if:
                 * 1) There is a valid string pointer
-                * 2) The string is not static (not in an ACPI table) (in this case,
-                *    the actual pointer was already copied above)
+                * (Pointer to a NULL string is allowed)
                 */
-               if ((source_desc->string.pointer) &&
-                       (!(source_desc->common.flags & AOPOBJ_STATIC_POINTER))) {
+               if (source_desc->string.pointer) {
                        dest_desc->string.pointer =
-                               ACPI_MEM_ALLOCATE ((acpi_size) source_desc->string.length + 1);
+                           ACPI_MEM_ALLOCATE((acpi_size) source_desc->string.
+                                             length + 1);
                        if (!dest_desc->string.pointer) {
                                return (AE_NO_MEMORY);
                        }
 
-                       ACPI_MEMCPY (dest_desc->string.pointer, source_desc->string.pointer,
-                                         (acpi_size) source_desc->string.length + 1);
+                       /* Copy the actual string data */
+
+                       ACPI_MEMCPY(dest_desc->string.pointer,
+                                   source_desc->string.pointer,
+                                   (acpi_size) source_desc->string.length + 1);
                }
                break;
 
@@ -756,7 +713,7 @@ acpi_ut_copy_simple_object (
                 * We copied the reference object, so we now must add a reference
                 * to the object pointed to by the reference
                 */
-               acpi_ut_add_reference (source_desc->reference.object);
+               acpi_ut_add_reference(source_desc->reference.object);
                break;
 
        default:
@@ -767,7 +724,6 @@ acpi_ut_copy_simple_object (
        return (AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_copy_ielement_to_ielement
@@ -781,24 +737,21 @@ acpi_ut_copy_simple_object (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_copy_ielement_to_ielement (
-       u8                              object_type,
-       union acpi_operand_object       *source_object,
-       union acpi_generic_state        *state,
-       void                            *context)
+acpi_ut_copy_ielement_to_ielement(u8 object_type,
+                                 union acpi_operand_object *source_object,
+                                 union acpi_generic_state *state,
+                                 void *context)
 {
-       acpi_status                     status = AE_OK;
-       u32                             this_index;
-       union acpi_operand_object       **this_target_ptr;
-       union acpi_operand_object       *target_object;
-
+       acpi_status status = AE_OK;
+       u32 this_index;
+       union acpi_operand_object **this_target_ptr;
+       union acpi_operand_object *target_object;
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
-
-       this_index    = state->pkg.index;
+       this_index = state->pkg.index;
        this_target_ptr = (union acpi_operand_object **)
-                          &state->pkg.dest_object->package.elements[this_index];
+           &state->pkg.dest_object->package.elements[this_index];
 
        switch (object_type) {
        case ACPI_COPY_TYPE_SIMPLE:
@@ -809,34 +762,36 @@ acpi_ut_copy_ielement_to_ielement (
                        /*
                         * This is a simple object, just copy it
                         */
-                       target_object = acpi_ut_create_internal_object (
-                                          ACPI_GET_OBJECT_TYPE (source_object));
+                       target_object =
+                           acpi_ut_create_internal_object(ACPI_GET_OBJECT_TYPE
+                                                          (source_object));
                        if (!target_object) {
                                return (AE_NO_MEMORY);
                        }
 
-                       status = acpi_ut_copy_simple_object (source_object, target_object);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_ut_copy_simple_object(source_object,
+                                                      target_object);
+                       if (ACPI_FAILURE(status)) {
                                goto error_exit;
                        }
 
                        *this_target_ptr = target_object;
-               }
-               else {
+               } else {
                        /* Pass through a null element */
 
                        *this_target_ptr = NULL;
                }
                break;
 
-
        case ACPI_COPY_TYPE_PACKAGE:
 
                /*
                 * This object is a package - go down another nesting level
                 * Create and build the package object
                 */
-               target_object = acpi_ut_create_internal_object (ACPI_TYPE_PACKAGE);
+               target_object =
+                   acpi_ut_create_internal_object(ACPI_TYPE_PACKAGE);
                if (!target_object) {
                        return (AE_NO_MEMORY);
                }
@@ -848,8 +803,8 @@ acpi_ut_copy_ielement_to_ielement (
                 * Create the object array
                 */
                target_object->package.elements =
-                       ACPI_MEM_CALLOCATE (((acpi_size) source_object->package.count + 1) *
-                                        sizeof (void *));
+                   ACPI_MEM_CALLOCATE(((acpi_size) source_object->package.
+                                       count + 1) * sizeof(void *));
                if (!target_object->package.elements) {
                        status = AE_NO_MEMORY;
                        goto error_exit;
@@ -866,19 +821,17 @@ acpi_ut_copy_ielement_to_ielement (
                *this_target_ptr = target_object;
                break;
 
-
        default:
                return (AE_BAD_PARAMETER);
        }
 
        return (status);
 
-error_exit:
-       acpi_ut_remove_reference (target_object);
+      error_exit:
+       acpi_ut_remove_reference(target_object);
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_copy_ipackage_to_ipackage
@@ -894,49 +847,46 @@ error_exit:
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_copy_ipackage_to_ipackage (
-       union acpi_operand_object       *source_obj,
-       union acpi_operand_object       *dest_obj,
-       struct acpi_walk_state          *walk_state)
+acpi_ut_copy_ipackage_to_ipackage(union acpi_operand_object *source_obj,
+                                 union acpi_operand_object *dest_obj,
+                                 struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-
+       acpi_status status = AE_OK;
 
-       ACPI_FUNCTION_TRACE ("ut_copy_ipackage_to_ipackage");
+       ACPI_FUNCTION_TRACE("ut_copy_ipackage_to_ipackage");
 
-
-       dest_obj->common.type   = ACPI_GET_OBJECT_TYPE (source_obj);
-       dest_obj->common.flags  = source_obj->common.flags;
+       dest_obj->common.type = ACPI_GET_OBJECT_TYPE(source_obj);
+       dest_obj->common.flags = source_obj->common.flags;
        dest_obj->package.count = source_obj->package.count;
 
        /*
         * Create the object array and walk the source package tree
         */
-       dest_obj->package.elements = ACPI_MEM_CALLOCATE (
-                          ((acpi_size) source_obj->package.count + 1) *
-                          sizeof (void *));
+       dest_obj->package.elements = ACPI_MEM_CALLOCATE(((acpi_size)
+                                                        source_obj->package.
+                                                        count +
+                                                        1) * sizeof(void *));
        if (!dest_obj->package.elements) {
-               ACPI_REPORT_ERROR (
-                       ("aml_build_copy_internal_package_object: Package allocation failure\n"));
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               ACPI_REPORT_ERROR(("aml_build_copy_internal_package_object: Package allocation failure\n"));
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /*
         * Copy the package element-by-element by walking the package "tree".
         * This handles nested packages of arbitrary depth.
         */
-       status = acpi_ut_walk_package_tree (source_obj, dest_obj,
-                        acpi_ut_copy_ielement_to_ielement, walk_state);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_walk_package_tree(source_obj, dest_obj,
+                                          acpi_ut_copy_ielement_to_ielement,
+                                          walk_state);
+       if (ACPI_FAILURE(status)) {
                /* On failure, delete the destination package object */
 
-               acpi_ut_remove_reference (dest_obj);
+               acpi_ut_remove_reference(dest_obj);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_copy_iobject_to_iobject
@@ -952,35 +902,31 @@ acpi_ut_copy_ipackage_to_ipackage (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_copy_iobject_to_iobject (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       **dest_desc,
-       struct acpi_walk_state          *walk_state)
+acpi_ut_copy_iobject_to_iobject(union acpi_operand_object *source_desc,
+                               union acpi_operand_object **dest_desc,
+                               struct acpi_walk_state *walk_state)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("ut_copy_iobject_to_iobject");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("ut_copy_iobject_to_iobject");
 
        /* Create the top level object */
 
-       *dest_desc = acpi_ut_create_internal_object (ACPI_GET_OBJECT_TYPE (source_desc));
+       *dest_desc =
+           acpi_ut_create_internal_object(ACPI_GET_OBJECT_TYPE(source_desc));
        if (!*dest_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Copy the object and possible subobjects */
 
-       if (ACPI_GET_OBJECT_TYPE (source_desc) == ACPI_TYPE_PACKAGE) {
-               status = acpi_ut_copy_ipackage_to_ipackage (source_desc, *dest_desc,
-                                 walk_state);
-       }
-       else {
-               status = acpi_ut_copy_simple_object (source_desc, *dest_desc);
+       if (ACPI_GET_OBJECT_TYPE(source_desc) == ACPI_TYPE_PACKAGE) {
+               status =
+                   acpi_ut_copy_ipackage_to_ipackage(source_desc, *dest_desc,
+                                                     walk_state);
+       else {
+               status = acpi_ut_copy_simple_object(source_desc, *dest_desc);
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
-
-
index 794c7df3f2ad3e833582dd7dbdb9c41425b498e2..d80e9263993251fc00202730df5ea941551530c0 100644 (file)
 #include <acpi/acpi.h>
 
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utdebug")
-
+ACPI_MODULE_NAME("utdebug")
 
 #ifdef ACPI_DEBUG_OUTPUT
+static u32 acpi_gbl_prev_thread_id = 0xFFFFFFFF;
+static char *acpi_gbl_fn_entry_str = "----Entry";
+static char *acpi_gbl_fn_exit_str = "----Exit-";
 
-static u32   acpi_gbl_prev_thread_id = 0xFFFFFFFF;
-static char     *acpi_gbl_fn_entry_str = "----Entry";
-static char     *acpi_gbl_fn_exit_str = "----Exit-";
+/* Local prototypes */
 
+static const char *acpi_ut_trim_function_name(const char *function_name);
 
 /*******************************************************************************
  *
@@ -68,17 +69,13 @@ static char     *acpi_gbl_fn_exit_str = "----Exit-";
  *
  ******************************************************************************/
 
-void
-acpi_ut_init_stack_ptr_trace (
-       void)
+void acpi_ut_init_stack_ptr_trace(void)
 {
-       u32                         current_sp;
-
+       u32 current_sp;
 
-       acpi_gbl_entry_stack_pointer = ACPI_PTR_DIFF (&current_sp, NULL);
+       acpi_gbl_entry_stack_pointer = ACPI_PTR_DIFF(&current_sp, NULL);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_track_stack_ptr
@@ -91,14 +88,11 @@ acpi_ut_init_stack_ptr_trace (
  *
  ******************************************************************************/
 
-void
-acpi_ut_track_stack_ptr (
-       void)
+void acpi_ut_track_stack_ptr(void)
 {
-       acpi_size                   current_sp;
-
+       acpi_size current_sp;
 
-       current_sp = ACPI_PTR_DIFF (&current_sp, NULL);
+       current_sp = ACPI_PTR_DIFF(&current_sp, NULL);
 
        if (current_sp < acpi_gbl_lowest_stack_pointer) {
                acpi_gbl_lowest_stack_pointer = current_sp;
@@ -109,6 +103,39 @@ acpi_ut_track_stack_ptr (
        }
 }
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_trim_function_name
+ *
+ * PARAMETERS:  function_name       - Ascii string containing a procedure name
+ *
+ * RETURN:      Updated pointer to the function name
+ *
+ * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present.
+ *              This allows compiler macros such as __FUNCTION__ to be used
+ *              with no change to the debug output.
+ *
+ ******************************************************************************/
+
+static const char *acpi_ut_trim_function_name(const char *function_name)
+{
+
+       /* All Function names are longer than 4 chars, check is safe */
+
+       if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) {
+               /* This is the case where the original source has not been modified */
+
+               return (function_name + 4);
+       }
+
+       if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) {
+               /* This is the case where the source has been 'linuxized' */
+
+               return (function_name + 5);
+       }
+
+       return (function_name);
+}
 
 /*******************************************************************************
  *
@@ -116,10 +143,9 @@ acpi_ut_track_stack_ptr (
  *
  * PARAMETERS:  requested_debug_level - Requested debug print level
  *              line_number         - Caller's line number (for error output)
- *              dbg_info            - Contains:
- *                  proc_name           - Caller's procedure name
- *                  module_name         - Caller's module name
- *                  component_id        - Caller's component ID
+ *              function_name       - Caller's procedure name
+ *              module_name         - Caller's module name
+ *              component_id        - Caller's component ID
  *              Format              - Printf format field
  *              ...                 - Optional printf arguments
  *
@@ -130,36 +156,33 @@ acpi_ut_track_stack_ptr (
  *
  ******************************************************************************/
 
-void  ACPI_INTERNAL_VAR_XFACE
-acpi_ut_debug_print (
-       u32                             requested_debug_level,
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       char                            *format,
-       ...)
+void ACPI_INTERNAL_VAR_XFACE
+acpi_ut_debug_print(u32 requested_debug_level,
+                   u32 line_number,
+                   const char *function_name,
+                   char *module_name, u32 component_id, char *format, ...)
 {
-       u32                             thread_id;
-       va_list                 args;
-
+       u32 thread_id;
+       va_list args;
 
        /*
         * Stay silent if the debug level or component ID is disabled
         */
        if (!(requested_debug_level & acpi_dbg_level) ||
-               !(dbg_info->component_id & acpi_dbg_layer)) {
+           !(component_id & acpi_dbg_layer)) {
                return;
        }
 
        /*
         * Thread tracking and context switch notification
         */
-       thread_id = acpi_os_get_thread_id ();
+       thread_id = acpi_os_get_thread_id();
 
        if (thread_id != acpi_gbl_prev_thread_id) {
                if (ACPI_LV_THREADS & acpi_dbg_level) {
-                       acpi_os_printf (
-                               "\n**** Context Switch from TID %X to TID %X ****\n\n",
-                               acpi_gbl_prev_thread_id, thread_id);
+                       acpi_os_printf
+                           ("\n**** Context Switch from TID %X to TID %X ****\n\n",
+                            acpi_gbl_prev_thread_id, thread_id);
                }
 
                acpi_gbl_prev_thread_id = thread_id;
@@ -169,17 +192,18 @@ acpi_ut_debug_print (
         * Display the module name, current line number, thread ID (if requested),
         * current procedure nesting level, and the current procedure name
         */
-       acpi_os_printf ("%8s-%04ld ", dbg_info->module_name, line_number);
+       acpi_os_printf("%8s-%04ld ", module_name, line_number);
 
        if (ACPI_LV_THREADS & acpi_dbg_level) {
-               acpi_os_printf ("[%04lX] ", thread_id);
+               acpi_os_printf("[%04lX] ", thread_id);
        }
 
-       acpi_os_printf ("[%02ld] %-22.22s: ",
-               acpi_gbl_nesting_level, dbg_info->proc_name);
+       acpi_os_printf("[%02ld] %-22.22s: ",
+                      acpi_gbl_nesting_level,
+                      acpi_ut_trim_function_name(function_name));
 
-       va_start (args, format);
-       acpi_os_vprintf (format, args);
+       va_start(args, format);
+       acpi_os_vprintf(format, args);
 }
 
 EXPORT_SYMBOL(acpi_ut_debug_print);
@@ -190,10 +214,9 @@ EXPORT_SYMBOL(acpi_ut_debug_print);
  *
  * PARAMETERS:  requested_debug_level - Requested debug print level
  *              line_number         - Caller's line number
- *              dbg_info            - Contains:
- *                  proc_name           - Caller's procedure name
- *                  module_name         - Caller's module name
- *                  component_id        - Caller's component ID
+ *              function_name       - Caller's procedure name
+ *              module_name         - Caller's module name
+ *              component_id        - Caller's component ID
  *              Format              - Printf format field
  *              ...                 - Optional printf arguments
  *
@@ -204,37 +227,33 @@ EXPORT_SYMBOL(acpi_ut_debug_print);
  *
  ******************************************************************************/
 
-void  ACPI_INTERNAL_VAR_XFACE
-acpi_ut_debug_print_raw (
-       u32                             requested_debug_level,
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       char                            *format,
-       ...)
+void ACPI_INTERNAL_VAR_XFACE
+acpi_ut_debug_print_raw(u32 requested_debug_level,
+                       u32 line_number,
+                       const char *function_name,
+                       char *module_name, u32 component_id, char *format, ...)
 {
-       va_list                 args;
-
+       va_list args;
 
        if (!(requested_debug_level & acpi_dbg_level) ||
-               !(dbg_info->component_id & acpi_dbg_layer)) {
+           !(component_id & acpi_dbg_layer)) {
                return;
        }
 
-       va_start (args, format);
-       acpi_os_vprintf (format, args);
+       va_start(args, format);
+       acpi_os_vprintf(format, args);
 }
-EXPORT_SYMBOL(acpi_ut_debug_print_raw);
 
+EXPORT_SYMBOL(acpi_ut_debug_print_raw);
 
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_trace
  *
  * PARAMETERS:  line_number         - Caller's line number
- *              dbg_info            - Contains:
- *                  proc_name           - Caller's procedure name
- *                  module_name         - Caller's module name
- *                  component_id        - Caller's component ID
+ *              function_name       - Caller's procedure name
+ *              module_name         - Caller's module name
+ *              component_id        - Caller's component ID
  *
  * RETURN:      None
  *
@@ -244,29 +263,28 @@ EXPORT_SYMBOL(acpi_ut_debug_print_raw);
  ******************************************************************************/
 
 void
-acpi_ut_trace (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info)
+acpi_ut_trace(u32 line_number,
+             const char *function_name, char *module_name, u32 component_id)
 {
 
        acpi_gbl_nesting_level++;
-       acpi_ut_track_stack_ptr ();
+       acpi_ut_track_stack_ptr();
 
-       acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info,
-                       "%s\n", acpi_gbl_fn_entry_str);
+       acpi_ut_debug_print(ACPI_LV_FUNCTIONS,
+                           line_number, function_name, module_name,
+                           component_id, "%s\n", acpi_gbl_fn_entry_str);
 }
-EXPORT_SYMBOL(acpi_ut_trace);
 
+EXPORT_SYMBOL(acpi_ut_trace);
 
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_trace_ptr
  *
  * PARAMETERS:  line_number         - Caller's line number
- *              dbg_info            - Contains:
- *                  proc_name           - Caller's procedure name
- *                  module_name         - Caller's module name
- *                  component_id        - Caller's component ID
+ *              function_name       - Caller's procedure name
+ *              module_name         - Caller's module name
+ *              component_id        - Caller's component ID
  *              Pointer             - Pointer to display
  *
  * RETURN:      None
@@ -277,28 +295,27 @@ EXPORT_SYMBOL(acpi_ut_trace);
  ******************************************************************************/
 
 void
-acpi_ut_trace_ptr (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       void                            *pointer)
+acpi_ut_trace_ptr(u32 line_number,
+                 const char *function_name,
+                 char *module_name, u32 component_id, void *pointer)
 {
        acpi_gbl_nesting_level++;
-       acpi_ut_track_stack_ptr ();
+       acpi_ut_track_stack_ptr();
 
-       acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info,
-                       "%s %p\n", acpi_gbl_fn_entry_str, pointer);
+       acpi_ut_debug_print(ACPI_LV_FUNCTIONS,
+                           line_number, function_name, module_name,
+                           component_id, "%s %p\n", acpi_gbl_fn_entry_str,
+                           pointer);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_trace_str
  *
  * PARAMETERS:  line_number         - Caller's line number
- *              dbg_info            - Contains:
- *                  proc_name           - Caller's procedure name
- *                  module_name         - Caller's module name
- *                  component_id        - Caller's component ID
+ *              function_name       - Caller's procedure name
+ *              module_name         - Caller's module name
+ *              component_id        - Caller's component ID
  *              String              - Additional string to display
  *
  * RETURN:      None
@@ -309,29 +326,28 @@ acpi_ut_trace_ptr (
  ******************************************************************************/
 
 void
-acpi_ut_trace_str (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       char                            *string)
+acpi_ut_trace_str(u32 line_number,
+                 const char *function_name,
+                 char *module_name, u32 component_id, char *string)
 {
 
        acpi_gbl_nesting_level++;
-       acpi_ut_track_stack_ptr ();
+       acpi_ut_track_stack_ptr();
 
-       acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info,
-                       "%s %s\n", acpi_gbl_fn_entry_str, string);
+       acpi_ut_debug_print(ACPI_LV_FUNCTIONS,
+                           line_number, function_name, module_name,
+                           component_id, "%s %s\n", acpi_gbl_fn_entry_str,
+                           string);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_trace_u32
  *
  * PARAMETERS:  line_number         - Caller's line number
- *              dbg_info            - Contains:
- *                  proc_name           - Caller's procedure name
- *                  module_name         - Caller's module name
- *                  component_id        - Caller's component ID
+ *              function_name       - Caller's procedure name
+ *              module_name         - Caller's module name
+ *              component_id        - Caller's component ID
  *              Integer             - Integer to display
  *
  * RETURN:      None
@@ -342,29 +358,28 @@ acpi_ut_trace_str (
  ******************************************************************************/
 
 void
-acpi_ut_trace_u32 (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       u32                             integer)
+acpi_ut_trace_u32(u32 line_number,
+                 const char *function_name,
+                 char *module_name, u32 component_id, u32 integer)
 {
 
        acpi_gbl_nesting_level++;
-       acpi_ut_track_stack_ptr ();
+       acpi_ut_track_stack_ptr();
 
-       acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info,
-                       "%s %08X\n", acpi_gbl_fn_entry_str, integer);
+       acpi_ut_debug_print(ACPI_LV_FUNCTIONS,
+                           line_number, function_name, module_name,
+                           component_id, "%s %08X\n", acpi_gbl_fn_entry_str,
+                           integer);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_exit
  *
  * PARAMETERS:  line_number         - Caller's line number
- *              dbg_info            - Contains:
- *                  proc_name           - Caller's procedure name
- *                  module_name         - Caller's module name
- *                  component_id        - Caller's component ID
+ *              function_name       - Caller's procedure name
+ *              module_name         - Caller's module name
+ *              component_id        - Caller's component ID
  *
  * RETURN:      None
  *
@@ -374,28 +389,27 @@ acpi_ut_trace_u32 (
  ******************************************************************************/
 
 void
-acpi_ut_exit (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info)
+acpi_ut_exit(u32 line_number,
+            const char *function_name, char *module_name, u32 component_id)
 {
 
-       acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info,
-                       "%s\n", acpi_gbl_fn_exit_str);
+       acpi_ut_debug_print(ACPI_LV_FUNCTIONS,
+                           line_number, function_name, module_name,
+                           component_id, "%s\n", acpi_gbl_fn_exit_str);
 
        acpi_gbl_nesting_level--;
 }
-EXPORT_SYMBOL(acpi_ut_exit);
 
+EXPORT_SYMBOL(acpi_ut_exit);
 
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_status_exit
  *
  * PARAMETERS:  line_number         - Caller's line number
- *              dbg_info            - Contains:
- *                  proc_name           - Caller's procedure name
- *                  module_name         - Caller's module name
- *                  component_id        - Caller's component ID
+ *              function_name       - Caller's procedure name
+ *              module_name         - Caller's module name
+ *              component_id        - Caller's component ID
  *              Status              - Exit status code
  *
  * RETURN:      None
@@ -406,37 +420,38 @@ EXPORT_SYMBOL(acpi_ut_exit);
  ******************************************************************************/
 
 void
-acpi_ut_status_exit (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       acpi_status                     status)
+acpi_ut_status_exit(u32 line_number,
+                   const char *function_name,
+                   char *module_name, u32 component_id, acpi_status status)
 {
 
-       if (ACPI_SUCCESS (status)) {
-               acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info,
-                               "%s %s\n", acpi_gbl_fn_exit_str,
-                               acpi_format_exception (status));
-       }
-       else {
-               acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info,
-                               "%s ****Exception****: %s\n", acpi_gbl_fn_exit_str,
-                               acpi_format_exception (status));
+       if (ACPI_SUCCESS(status)) {
+               acpi_ut_debug_print(ACPI_LV_FUNCTIONS,
+                                   line_number, function_name, module_name,
+                                   component_id, "%s %s\n",
+                                   acpi_gbl_fn_exit_str,
+                                   acpi_format_exception(status));
+       } else {
+               acpi_ut_debug_print(ACPI_LV_FUNCTIONS,
+                                   line_number, function_name, module_name,
+                                   component_id, "%s ****Exception****: %s\n",
+                                   acpi_gbl_fn_exit_str,
+                                   acpi_format_exception(status));
        }
 
        acpi_gbl_nesting_level--;
 }
-EXPORT_SYMBOL(acpi_ut_status_exit);
 
+EXPORT_SYMBOL(acpi_ut_status_exit);
 
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_value_exit
  *
  * PARAMETERS:  line_number         - Caller's line number
- *              dbg_info            - Contains:
- *                  proc_name           - Caller's procedure name
- *                  module_name         - Caller's module name
- *                  component_id        - Caller's component ID
+ *              function_name       - Caller's procedure name
+ *              module_name         - Caller's module name
+ *              component_id        - Caller's component ID
  *              Value               - Value to be printed with exit msg
  *
  * RETURN:      None
@@ -447,30 +462,29 @@ EXPORT_SYMBOL(acpi_ut_status_exit);
  ******************************************************************************/
 
 void
-acpi_ut_value_exit (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       acpi_integer                    value)
+acpi_ut_value_exit(u32 line_number,
+                  const char *function_name,
+                  char *module_name, u32 component_id, acpi_integer value)
 {
 
-       acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info,
-                       "%s %8.8X%8.8X\n", acpi_gbl_fn_exit_str,
-                       ACPI_FORMAT_UINT64 (value));
+       acpi_ut_debug_print(ACPI_LV_FUNCTIONS,
+                           line_number, function_name, module_name,
+                           component_id, "%s %8.8X%8.8X\n",
+                           acpi_gbl_fn_exit_str, ACPI_FORMAT_UINT64(value));
 
        acpi_gbl_nesting_level--;
 }
-EXPORT_SYMBOL(acpi_ut_value_exit);
 
+EXPORT_SYMBOL(acpi_ut_value_exit);
 
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_ptr_exit
  *
  * PARAMETERS:  line_number         - Caller's line number
- *              dbg_info            - Contains:
- *                  proc_name           - Caller's procedure name
- *                  module_name         - Caller's module name
- *                  component_id        - Caller's component ID
+ *              function_name       - Caller's procedure name
+ *              module_name         - Caller's module name
+ *              component_id        - Caller's component ID
  *              Ptr                 - Pointer to display
  *
  * RETURN:      None
@@ -481,21 +495,20 @@ EXPORT_SYMBOL(acpi_ut_value_exit);
  ******************************************************************************/
 
 void
-acpi_ut_ptr_exit (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       u8                              *ptr)
+acpi_ut_ptr_exit(u32 line_number,
+                const char *function_name,
+                char *module_name, u32 component_id, u8 * ptr)
 {
 
-       acpi_ut_debug_print (ACPI_LV_FUNCTIONS, line_number, dbg_info,
-                       "%s %p\n", acpi_gbl_fn_exit_str, ptr);
+       acpi_ut_debug_print(ACPI_LV_FUNCTIONS,
+                           line_number, function_name, module_name,
+                           component_id, "%s %p\n", acpi_gbl_fn_exit_str, ptr);
 
        acpi_gbl_nesting_level--;
 }
 
 #endif
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_dump_buffer
@@ -511,23 +524,17 @@ acpi_ut_ptr_exit (
  *
  ******************************************************************************/
 
-void
-acpi_ut_dump_buffer (
-       u8                              *buffer,
-       u32                             count,
-       u32                             display,
-       u32                             component_id)
+void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id)
 {
-       acpi_native_uint                i = 0;
-       acpi_native_uint                j;
-       u32                             temp32;
-       u8                              buf_char;
-
+       acpi_native_uint i = 0;
+       acpi_native_uint j;
+       u32 temp32;
+       u8 buf_char;
 
        /* Only dump the buffer if tracing is enabled */
 
        if (!((ACPI_LV_TABLES & acpi_dbg_level) &&
-               (component_id & acpi_dbg_layer))) {
+             (component_id & acpi_dbg_layer))) {
                return;
        }
 
@@ -540,7 +547,7 @@ acpi_ut_dump_buffer (
        while (i < count) {
                /* Print current offset */
 
-               acpi_os_printf ("%6.4X: ", (u32) i);
+               acpi_os_printf("%6.4X: ", (u32) i);
 
                /* Print 16 hex chars */
 
@@ -548,73 +555,66 @@ acpi_ut_dump_buffer (
                        if (i + j >= count) {
                                /* Dump fill spaces */
 
-                               acpi_os_printf ("%*s", ((display * 2) + 1), " ");
-                               j += display;
+                               acpi_os_printf("%*s", ((display * 2) + 1), " ");
+                               j += (acpi_native_uint) display;
                                continue;
                        }
 
                        switch (display) {
-                       default:    /* Default is BYTE display */
+                       default:        /* Default is BYTE display */
 
-                               acpi_os_printf ("%02X ", buffer[i + j]);
+                               acpi_os_printf("%02X ", buffer[i + j]);
                                break;
 
-
                        case DB_WORD_DISPLAY:
 
-                               ACPI_MOVE_16_TO_32 (&temp32, &buffer[i + j]);
-                               acpi_os_printf ("%04X ", temp32);
+                               ACPI_MOVE_16_TO_32(&temp32, &buffer[i + j]);
+                               acpi_os_printf("%04X ", temp32);
                                break;
 
-
                        case DB_DWORD_DISPLAY:
 
-                               ACPI_MOVE_32_TO_32 (&temp32, &buffer[i + j]);
-                               acpi_os_printf ("%08X ", temp32);
+                               ACPI_MOVE_32_TO_32(&temp32, &buffer[i + j]);
+                               acpi_os_printf("%08X ", temp32);
                                break;
 
-
                        case DB_QWORD_DISPLAY:
 
-                               ACPI_MOVE_32_TO_32 (&temp32, &buffer[i + j]);
-                               acpi_os_printf ("%08X", temp32);
+                               ACPI_MOVE_32_TO_32(&temp32, &buffer[i + j]);
+                               acpi_os_printf("%08X", temp32);
 
-                               ACPI_MOVE_32_TO_32 (&temp32, &buffer[i + j + 4]);
-                               acpi_os_printf ("%08X ", temp32);
+                               ACPI_MOVE_32_TO_32(&temp32, &buffer[i + j + 4]);
+                               acpi_os_printf("%08X ", temp32);
                                break;
                        }
 
-                       j += display;
+                       j += (acpi_native_uint) display;
                }
 
                /*
-                * Print the ASCII equivalent characters
-                * But watch out for the bad unprintable ones...
+                * Print the ASCII equivalent characters but watch out for the bad
+                * unprintable ones (printable chars are 0x20 through 0x7E)
                 */
-               acpi_os_printf (" ");
+               acpi_os_printf(" ");
                for (j = 0; j < 16; j++) {
                        if (i + j >= count) {
-                               acpi_os_printf ("\n");
+                               acpi_os_printf("\n");
                                return;
                        }
 
                        buf_char = buffer[i + j];
-                       if ((buf_char > 0x1F && buf_char < 0x2E) ||
-                               (buf_char > 0x2F && buf_char < 0x61) ||
-                               (buf_char > 0x60 && buf_char < 0x7F)) {
-                               acpi_os_printf ("%c", buf_char);
-                       }
-                       else {
-                               acpi_os_printf (".");
+                       if (ACPI_IS_PRINT(buf_char)) {
+                               acpi_os_printf("%c", buf_char);
+                       } else {
+                               acpi_os_printf(".");
                        }
                }
 
                /* Done with that line. */
 
-               acpi_os_printf ("\n");
+               acpi_os_printf("\n");
                i += 16;
        }
 
        return;
 }
-
index bc54030226819f47ad48ccb82e4e2dbbc0d8ea9a..2bc878f7a12739952a1217be0d90a6ff356e3bcd 100644 (file)
@@ -41,7 +41,6 @@
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acinterp.h>
 #include <acpi/acnamesp.h>
 #include <acpi/amlcode.h>
 
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utdelete")
+ACPI_MODULE_NAME("utdelete")
 
 /* Local prototypes */
+static void acpi_ut_delete_internal_obj(union acpi_operand_object *object);
 
 static void
-acpi_ut_delete_internal_obj (
-       union acpi_operand_object       *object);
-
-static void
-acpi_ut_update_ref_count (
-       union acpi_operand_object       *object,
-       u32                             action);
-
+acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action);
 
 /*******************************************************************************
  *
@@ -76,18 +69,14 @@ acpi_ut_update_ref_count (
  *
  ******************************************************************************/
 
-static void
-acpi_ut_delete_internal_obj (
-       union acpi_operand_object       *object)
+static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
 {
-       void                            *obj_pointer = NULL;
-       union acpi_operand_object       *handler_desc;
-       union acpi_operand_object       *second_desc;
-       union acpi_operand_object       *next_desc;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ut_delete_internal_obj", object);
+       void *obj_pointer = NULL;
+       union acpi_operand_object *handler_desc;
+       union acpi_operand_object *second_desc;
+       union acpi_operand_object *next_desc;
 
+       ACPI_FUNCTION_TRACE_PTR("ut_delete_internal_obj", object);
 
        if (!object) {
                return_VOID;
@@ -97,11 +86,12 @@ acpi_ut_delete_internal_obj (
         * Must delete or free any pointers within the object that are not
         * actual ACPI objects (for example, a raw buffer pointer).
         */
-       switch (ACPI_GET_OBJECT_TYPE (object)) {
+       switch (ACPI_GET_OBJECT_TYPE(object)) {
        case ACPI_TYPE_STRING:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "**** String %p, ptr %p\n",
-                       object, object->string.pointer));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "**** String %p, ptr %p\n", object,
+                                 object->string.pointer));
 
                /* Free the actual string buffer */
 
@@ -112,11 +102,11 @@ acpi_ut_delete_internal_obj (
                }
                break;
 
-
        case ACPI_TYPE_BUFFER:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "**** Buffer %p, ptr %p\n",
-                       object, object->buffer.pointer));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "**** Buffer %p, ptr %p\n", object,
+                                 object->buffer.pointer));
 
                /* Free the actual buffer */
 
@@ -127,11 +117,11 @@ acpi_ut_delete_internal_obj (
                }
                break;
 
-
        case ACPI_TYPE_PACKAGE:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, " **** Package of count %X\n",
-                       object->package.count));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 " **** Package of count %X\n",
+                                 object->package.count));
 
                /*
                 * Elements of the package are not handled here, they are deleted
@@ -143,11 +133,11 @@ acpi_ut_delete_internal_obj (
                obj_pointer = object->package.elements;
                break;
 
-
        case ACPI_TYPE_DEVICE:
 
                if (object->device.gpe_block) {
-                       (void) acpi_ev_delete_gpe_block (object->device.gpe_block);
+                       (void)acpi_ev_delete_gpe_block(object->device.
+                                                      gpe_block);
                }
 
                /* Walk the handler list for this device */
@@ -155,54 +145,51 @@ acpi_ut_delete_internal_obj (
                handler_desc = object->device.handler;
                while (handler_desc) {
                        next_desc = handler_desc->address_space.next;
-                       acpi_ut_remove_reference (handler_desc);
+                       acpi_ut_remove_reference(handler_desc);
                        handler_desc = next_desc;
                }
                break;
 
-
        case ACPI_TYPE_MUTEX:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                       "***** Mutex %p, Semaphore %p\n",
-                       object, object->mutex.semaphore));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "***** Mutex %p, Semaphore %p\n",
+                                 object, object->mutex.semaphore));
 
-               acpi_ex_unlink_mutex (object);
-               (void) acpi_os_delete_semaphore (object->mutex.semaphore);
+               acpi_ex_unlink_mutex(object);
+               (void)acpi_os_delete_semaphore(object->mutex.semaphore);
                break;
 
-
        case ACPI_TYPE_EVENT:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                       "***** Event %p, Semaphore %p\n",
-                       object, object->event.semaphore));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "***** Event %p, Semaphore %p\n",
+                                 object, object->event.semaphore));
 
-               (void) acpi_os_delete_semaphore (object->event.semaphore);
+               (void)acpi_os_delete_semaphore(object->event.semaphore);
                object->event.semaphore = NULL;
                break;
 
-
        case ACPI_TYPE_METHOD:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                       "***** Method %p\n", object));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "***** Method %p\n", object));
 
                /* Delete the method semaphore if it exists */
 
                if (object->method.semaphore) {
-                       (void) acpi_os_delete_semaphore (object->method.semaphore);
+                       (void)acpi_os_delete_semaphore(object->method.
+                                                      semaphore);
                        object->method.semaphore = NULL;
                }
                break;
 
-
        case ACPI_TYPE_REGION:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                       "***** Region %p\n", object));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "***** Region %p\n", object));
 
-               second_desc = acpi_ns_get_secondary_object (object);
+               second_desc = acpi_ns_get_secondary_object(object);
                if (second_desc) {
                        /*
                         * Free the region_context if and only if the handler is one of the
@@ -211,32 +198,33 @@ acpi_ut_delete_internal_obj (
                         */
                        handler_desc = object->region.handler;
                        if (handler_desc) {
-                               if (handler_desc->address_space.hflags & ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) {
-                                       obj_pointer = second_desc->extra.region_context;
+                               if (handler_desc->address_space.
+                                   hflags &
+                                   ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) {
+                                       obj_pointer =
+                                           second_desc->extra.region_context;
                                }
 
-                               acpi_ut_remove_reference (handler_desc);
+                               acpi_ut_remove_reference(handler_desc);
                        }
 
                        /* Now we can free the Extra object */
 
-                       acpi_ut_delete_object_desc (second_desc);
+                       acpi_ut_delete_object_desc(second_desc);
                }
                break;
 
-
        case ACPI_TYPE_BUFFER_FIELD:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                       "***** Buffer Field %p\n", object));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "***** Buffer Field %p\n", object));
 
-               second_desc = acpi_ns_get_secondary_object (object);
+               second_desc = acpi_ns_get_secondary_object(object);
                if (second_desc) {
-                       acpi_ut_delete_object_desc (second_desc);
+                       acpi_ut_delete_object_desc(second_desc);
                }
                break;
 
-
        default:
                break;
        }
@@ -244,21 +232,20 @@ acpi_ut_delete_internal_obj (
        /* Free any allocated memory (pointer within the object) found above */
 
        if (obj_pointer) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object Subptr %p\n",
-                               obj_pointer));
-               ACPI_MEM_FREE (obj_pointer);
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "Deleting Object Subptr %p\n", obj_pointer));
+               ACPI_MEM_FREE(obj_pointer);
        }
 
        /* Now the object can be safely deleted */
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Deleting Object %p [%s]\n",
-                       object, acpi_ut_get_object_type_name (object)));
+       ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "Deleting Object %p [%s]\n",
+                         object, acpi_ut_get_object_type_name(object)));
 
-       acpi_ut_delete_object_desc (object);
+       acpi_ut_delete_object_desc(object);
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_delete_internal_object_list
@@ -272,29 +259,24 @@ acpi_ut_delete_internal_obj (
  *
  ******************************************************************************/
 
-void
-acpi_ut_delete_internal_object_list (
-       union acpi_operand_object       **obj_list)
+void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list)
 {
-       union acpi_operand_object       **internal_obj;
-
-
-       ACPI_FUNCTION_TRACE ("ut_delete_internal_object_list");
+       union acpi_operand_object **internal_obj;
 
+       ACPI_FUNCTION_TRACE("ut_delete_internal_object_list");
 
        /* Walk the null-terminated internal list */
 
        for (internal_obj = obj_list; *internal_obj; internal_obj++) {
-               acpi_ut_remove_reference (*internal_obj);
+               acpi_ut_remove_reference(*internal_obj);
        }
 
        /* Free the combined parameter pointer list and object array */
 
-       ACPI_MEM_FREE (obj_list);
+       ACPI_MEM_FREE(obj_list);
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_update_ref_count
@@ -309,16 +291,12 @@ acpi_ut_delete_internal_object_list (
  ******************************************************************************/
 
 static void
-acpi_ut_update_ref_count (
-       union acpi_operand_object       *object,
-       u32                             action)
+acpi_ut_update_ref_count(union acpi_operand_object *object, u32 action)
 {
-       u16                             count;
-       u16                             new_count;
-
-
-       ACPI_FUNCTION_NAME ("ut_update_ref_count");
+       u16 count;
+       u16 new_count;
 
+       ACPI_FUNCTION_NAME("ut_update_ref_count");
 
        if (!object) {
                return;
@@ -338,58 +316,55 @@ acpi_ut_update_ref_count (
                new_count++;
                object->common.reference_count = new_count;
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                       "Obj %p Refs=%X, [Incremented]\n",
-                       object, new_count));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "Obj %p Refs=%X, [Incremented]\n",
+                                 object, new_count));
                break;
 
-
        case REF_DECREMENT:
 
                if (count < 1) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                               "Obj %p Refs=%X, can't decrement! (Set to 0)\n",
-                               object, new_count));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                         "Obj %p Refs=%X, can't decrement! (Set to 0)\n",
+                                         object, new_count));
 
                        new_count = 0;
-               }
-               else {
+               } else {
                        new_count--;
 
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                               "Obj %p Refs=%X, [Decremented]\n",
-                               object, new_count));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                         "Obj %p Refs=%X, [Decremented]\n",
+                                         object, new_count));
                }
 
-               if (ACPI_GET_OBJECT_TYPE (object) == ACPI_TYPE_METHOD) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                               "Method Obj %p Refs=%X, [Decremented]\n",
-                               object, new_count));
+               if (ACPI_GET_OBJECT_TYPE(object) == ACPI_TYPE_METHOD) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                         "Method Obj %p Refs=%X, [Decremented]\n",
+                                         object, new_count));
                }
 
                object->common.reference_count = new_count;
                if (new_count == 0) {
-                       acpi_ut_delete_internal_obj (object);
+                       acpi_ut_delete_internal_obj(object);
                }
 
                break;
 
-
        case REF_FORCE_DELETE:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                       "Obj %p Refs=%X, Force delete! (Set to 0)\n",
-                       object, count));
+               ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                 "Obj %p Refs=%X, Force delete! (Set to 0)\n",
+                                 object, count));
 
                new_count = 0;
                object->common.reference_count = new_count;
-               acpi_ut_delete_internal_obj (object);
+               acpi_ut_delete_internal_obj(object);
                break;
 
-
        default:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unknown action (%X)\n", action));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unknown action (%X)\n",
+                                 action));
                break;
        }
 
@@ -399,15 +374,14 @@ acpi_ut_update_ref_count (
         */
        if (count > ACPI_MAX_REFERENCE_COUNT) {
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_WARN,
-                       "**** Warning **** Large Reference Count (%X) in object %p\n\n",
-                       count, object));
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "**** Warning **** Large Reference Count (%X) in object %p\n\n",
+                                 count, object));
        }
 
        return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_update_object_reference
@@ -431,65 +405,42 @@ acpi_ut_update_ref_count (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_update_object_reference (
-       union acpi_operand_object       *object,
-       u16                             action)
+acpi_ut_update_object_reference(union acpi_operand_object * object, u16 action)
 {
-       acpi_status                     status;
-       u32                             i;
-       union acpi_generic_state         *state_list = NULL;
-       union acpi_generic_state         *state;
-       union acpi_operand_object        *tmp;
-
-       ACPI_FUNCTION_TRACE_PTR ("ut_update_object_reference", object);
+       acpi_status status = AE_OK;
+       union acpi_generic_state *state_list = NULL;
+       union acpi_operand_object *next_object = NULL;
+       union acpi_generic_state *state;
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_TRACE_PTR("ut_update_object_reference", object);
 
-       /* Ignore a null object ptr */
+       while (object) {
+               /* Make sure that this isn't a namespace handle */
 
-       if (!object) {
-               return_ACPI_STATUS (AE_OK);
-       }
-
-       /* Make sure that this isn't a namespace handle */
-
-       if (ACPI_GET_DESCRIPTOR_TYPE (object) == ACPI_DESC_TYPE_NAMED) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-                       "Object %p is NS handle\n", object));
-               return_ACPI_STATUS (AE_OK);
-       }
-
-       state = acpi_ut_create_update_state (object, action);
-
-       while (state) {
-               object = state->update.object;
-               action = state->update.value;
-               acpi_ut_delete_generic_state (state);
+               if (ACPI_GET_DESCRIPTOR_TYPE(object) == ACPI_DESC_TYPE_NAMED) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                                         "Object %p is NS handle\n", object));
+                       return_ACPI_STATUS(AE_OK);
+               }
 
                /*
                 * All sub-objects must have their reference count incremented also.
                 * Different object types have different subobjects.
                 */
-               switch (ACPI_GET_OBJECT_TYPE (object)) {
+               switch (ACPI_GET_OBJECT_TYPE(object)) {
                case ACPI_TYPE_DEVICE:
 
-                       tmp = object->device.system_notify;
-                       if (tmp && (tmp->common.reference_count <= 1) && action == REF_DECREMENT)
-                               object->device.system_notify = NULL;
-                       acpi_ut_update_ref_count (tmp, action);
-
-                       tmp = object->device.device_notify;
-                       if (tmp && (tmp->common.reference_count <= 1) && action == REF_DECREMENT)
-                               object->device.device_notify = NULL;
-                       acpi_ut_update_ref_count (tmp, action);
-
+                       acpi_ut_update_ref_count(object->device.system_notify,
+                                                action);
+                       acpi_ut_update_ref_count(object->device.device_notify,
+                                                action);
                        break;
 
-
                case ACPI_TYPE_PACKAGE:
-
                        /*
-                        * We must update all the sub-objects of the package
-                        * (Each of whom may have their own sub-objects, etc.
+                        * We must update all the sub-objects of the package,
+                        * each of whom may have their own sub-objects.
                         */
                        for (i = 0; i < object->package.count; i++) {
                                /*
@@ -497,116 +448,67 @@ acpi_ut_update_object_reference (
                                 * Note: There can be null elements within the package,
                                 * these are simply ignored
                                 */
-                               status = acpi_ut_create_update_state_and_push (
-                                                object->package.elements[i], action, &state_list);
-                               if (ACPI_FAILURE (status)) {
+                               status =
+                                   acpi_ut_create_update_state_and_push
+                                   (object->package.elements[i], action,
+                                    &state_list);
+                               if (ACPI_FAILURE(status)) {
                                        goto error_exit;
                                }
-
-                               tmp = object->package.elements[i];
-                               if (tmp && (tmp->common.reference_count <= 1)  && action == REF_DECREMENT)
-                                       object->package.elements[i] = NULL;
                        }
                        break;
 
-
                case ACPI_TYPE_BUFFER_FIELD:
 
-                       status = acpi_ut_create_update_state_and_push (
-                                        object->buffer_field.buffer_obj, action, &state_list);
-                       if (ACPI_FAILURE (status)) {
-                               goto error_exit;
-                       }
-
-                       tmp = object->buffer_field.buffer_obj;
-                       if ( tmp && (tmp->common.reference_count <= 1)  && action == REF_DECREMENT)
-                               object->buffer_field.buffer_obj = NULL;
+                       next_object = object->buffer_field.buffer_obj;
                        break;
 
-
                case ACPI_TYPE_LOCAL_REGION_FIELD:
 
-                       status = acpi_ut_create_update_state_and_push (
-                                        object->field.region_obj, action, &state_list);
-                       if (ACPI_FAILURE (status)) {
-                               goto error_exit;
-                       }
-
-                       tmp = object->field.region_obj;
-                       if ( tmp && (tmp->common.reference_count <= 1)  && action == REF_DECREMENT)
-                               object->field.region_obj = NULL;
-                  break;
-
+                       next_object = object->field.region_obj;
+                       break;
 
                case ACPI_TYPE_LOCAL_BANK_FIELD:
 
-                       status = acpi_ut_create_update_state_and_push (
-                                        object->bank_field.bank_obj, action, &state_list);
-                       if (ACPI_FAILURE (status)) {
+                       next_object = object->bank_field.bank_obj;
+                       status =
+                           acpi_ut_create_update_state_and_push(object->
+                                                                bank_field.
+                                                                region_obj,
+                                                                action,
+                                                                &state_list);
+                       if (ACPI_FAILURE(status)) {
                                goto error_exit;
                        }
-
-                       tmp = object->bank_field.bank_obj;
-                       if ( tmp && (tmp->common.reference_count <= 1)  && action == REF_DECREMENT)
-                               object->bank_field.bank_obj = NULL;
-
-                       status = acpi_ut_create_update_state_and_push (
-                                        object->bank_field.region_obj, action, &state_list);
-                       if (ACPI_FAILURE (status)) {
-                               goto error_exit;
-                       }
-
-                       tmp = object->bank_field.region_obj;
-                       if ( tmp && (tmp->common.reference_count <= 1)  && action == REF_DECREMENT)
-                               object->bank_field.region_obj = NULL;
                        break;
 
-
                case ACPI_TYPE_LOCAL_INDEX_FIELD:
 
-                       status = acpi_ut_create_update_state_and_push (
-                                        object->index_field.index_obj, action, &state_list);
-                       if (ACPI_FAILURE (status)) {
-                               goto error_exit;
-                       }
-
-                       tmp = object->index_field.index_obj;
-                       if ( tmp && (tmp->common.reference_count <= 1)  && action == REF_DECREMENT)
-                               object->index_field.index_obj = NULL;
-
-                       status = acpi_ut_create_update_state_and_push (
-                                        object->index_field.data_obj, action, &state_list);
-                       if (ACPI_FAILURE (status)) {
+                       next_object = object->index_field.index_obj;
+                       status =
+                           acpi_ut_create_update_state_and_push(object->
+                                                                index_field.
+                                                                data_obj,
+                                                                action,
+                                                                &state_list);
+                       if (ACPI_FAILURE(status)) {
                                goto error_exit;
                        }
-
-                       tmp = object->index_field.data_obj;
-                       if ( tmp && (tmp->common.reference_count <= 1)  && action == REF_DECREMENT)
-                               object->index_field.data_obj = NULL;
                        break;
 
-
                case ACPI_TYPE_LOCAL_REFERENCE:
-
                        /*
                         * The target of an Index (a package, string, or buffer) must track
                         * changes to the ref count of the index.
                         */
                        if (object->reference.opcode == AML_INDEX_OP) {
-                               status = acpi_ut_create_update_state_and_push (
-                                                object->reference.object, action, &state_list);
-                               if (ACPI_FAILURE (status)) {
-                                       goto error_exit;
-                               }
+                               next_object = object->reference.object;
                        }
                        break;
 
-
                case ACPI_TYPE_REGION:
                default:
-
-                       /* No subobjects */
-                       break;
+                       break;  /* No subobjects */
                }
 
                /*
@@ -614,25 +516,31 @@ acpi_ut_update_object_reference (
                 * happen after we update the sub-objects in case this causes the
                 * main object to be deleted.
                 */
-               acpi_ut_update_ref_count (object, action);
+               acpi_ut_update_ref_count(object, action);
+               object = NULL;
 
                /* Move on to the next object to be updated */
 
-               state = acpi_ut_pop_generic_state (&state_list);
+               if (next_object) {
+                       object = next_object;
+                       next_object = NULL;
+               } else if (state_list) {
+                       state = acpi_ut_pop_generic_state(&state_list);
+                       object = state->update.object;
+                       acpi_ut_delete_generic_state(state);
+               }
        }
 
-       return_ACPI_STATUS (AE_OK);
-
+       return_ACPI_STATUS(AE_OK);
 
-error_exit:
+      error_exit:
 
-       ACPI_REPORT_ERROR (("Could not update object reference count, %s\n",
-               acpi_format_exception (status)));
+       ACPI_REPORT_ERROR(("Could not update object reference count, %s\n",
+                          acpi_format_exception(status)));
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_add_reference
@@ -646,31 +554,27 @@ error_exit:
  *
  ******************************************************************************/
 
-void
-acpi_ut_add_reference (
-       union acpi_operand_object       *object)
+void acpi_ut_add_reference(union acpi_operand_object *object)
 {
 
-       ACPI_FUNCTION_TRACE_PTR ("ut_add_reference", object);
-
+       ACPI_FUNCTION_TRACE_PTR("ut_add_reference", object);
 
        /* Ensure that we have a valid object */
 
-       if (!acpi_ut_valid_internal_object (object)) {
+       if (!acpi_ut_valid_internal_object(object)) {
                return_VOID;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-               "Obj %p Current Refs=%X [To Be Incremented]\n",
-               object, object->common.reference_count));
+       ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                         "Obj %p Current Refs=%X [To Be Incremented]\n",
+                         object, object->common.reference_count));
 
        /* Increment the reference count */
 
-       (void) acpi_ut_update_object_reference (object, REF_INCREMENT);
+       (void)acpi_ut_update_object_reference(object, REF_INCREMENT);
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_remove_reference
@@ -683,13 +587,10 @@ acpi_ut_add_reference (
  *
  ******************************************************************************/
 
-void
-acpi_ut_remove_reference (
-       union acpi_operand_object       *object)
+void acpi_ut_remove_reference(union acpi_operand_object *object)
 {
 
-       ACPI_FUNCTION_TRACE_PTR ("ut_remove_reference", object);
-
+       ACPI_FUNCTION_TRACE_PTR("ut_remove_reference", object);
 
        /*
         * Allow a NULL pointer to be passed in, just ignore it.  This saves
@@ -697,27 +598,25 @@ acpi_ut_remove_reference (
         *
         */
        if (!object ||
-               (ACPI_GET_DESCRIPTOR_TYPE (object) == ACPI_DESC_TYPE_NAMED)) {
+           (ACPI_GET_DESCRIPTOR_TYPE(object) == ACPI_DESC_TYPE_NAMED)) {
                return_VOID;
        }
 
        /* Ensure that we have a valid object */
 
-       if (!acpi_ut_valid_internal_object (object)) {
+       if (!acpi_ut_valid_internal_object(object)) {
                return_VOID;
        }
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
-               "Obj %p Current Refs=%X [To Be Decremented]\n",
-               object, object->common.reference_count));
+       ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS,
+                         "Obj %p Current Refs=%X [To Be Decremented]\n",
+                         object, object->common.reference_count));
 
        /*
         * Decrement the reference count, and only actually delete the object
         * if the reference count becomes 0.  (Must also decrement the ref count
         * of all subobjects!)
         */
-       (void) acpi_ut_update_object_reference (object, REF_DECREMENT);
+       (void)acpi_ut_update_object_reference(object, REF_DECREMENT);
        return_VOID;
 }
-
-
index 00046dd5d925850004e3fd6b3f179b10a2bad209..7b81d5ef3c32e4b90e79f63d2c89a7863c813d00 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acinterp.h>
 
-
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("uteval")
+ACPI_MODULE_NAME("uteval")
 
 /* Local prototypes */
-
 static void
-acpi_ut_copy_id_string (
-       char                            *destination,
-       char                            *source,
-       acpi_size                       max_length);
+acpi_ut_copy_id_string(char *destination, char *source, acpi_size max_length);
 
 static acpi_status
-acpi_ut_translate_one_cid (
-       union acpi_operand_object       *obj_desc,
-       struct acpi_compatible_id       *one_cid);
-
+acpi_ut_translate_one_cid(union acpi_operand_object *obj_desc,
+                         struct acpi_compatible_id *one_cid);
 
 /*******************************************************************************
  *
@@ -77,37 +69,33 @@ acpi_ut_translate_one_cid (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ut_osi_implementation (
-       struct acpi_walk_state          *walk_state)
+acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state)
 {
-       union acpi_operand_object       *string_desc;
-       union acpi_operand_object       *return_desc;
-       acpi_native_uint                i;
-
-
-       ACPI_FUNCTION_TRACE ("ut_osi_implementation");
+       union acpi_operand_object *string_desc;
+       union acpi_operand_object *return_desc;
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_TRACE("ut_osi_implementation");
 
        /* Validate the string input argument */
 
        string_desc = walk_state->arguments[0].object;
        if (!string_desc || (string_desc->common.type != ACPI_TYPE_STRING)) {
-               return_ACPI_STATUS (AE_TYPE);
+               return_ACPI_STATUS(AE_TYPE);
        }
 
        /* Create a return object (Default value = 0) */
 
-       return_desc = acpi_ut_create_internal_object (ACPI_TYPE_INTEGER);
+       return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
        if (!return_desc) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Compare input string to table of supported strings */
 
        for (i = 0; i < ACPI_NUM_OSI_STRINGS; i++) {
-               if (!ACPI_STRCMP (string_desc->string.pointer,
-                                  (char *) acpi_gbl_valid_osi_strings[i])) {
+               if (!ACPI_STRCMP(string_desc->string.pointer,
+                                (char *)acpi_gbl_valid_osi_strings[i])) {
                        /* This string is supported */
 
                        return_desc->integer.value = 0xFFFFFFFF;
@@ -116,10 +104,9 @@ acpi_ut_osi_implementation (
        }
 
        walk_state->return_desc = return_desc;
-       return_ACPI_STATUS (AE_CTRL_TERMINATE);
+       return_ACPI_STATUS(AE_CTRL_TERMINATE);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_evaluate_object
@@ -140,19 +127,16 @@ acpi_ut_osi_implementation (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_evaluate_object (
-       struct acpi_namespace_node      *prefix_node,
-       char                            *path,
-       u32                             expected_return_btypes,
-       union acpi_operand_object       **return_desc)
+acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
+                       char *path,
+                       u32 expected_return_btypes,
+                       union acpi_operand_object **return_desc)
 {
-       struct acpi_parameter_info      info;
-       acpi_status                     status;
-       u32                             return_btype;
-
-
-       ACPI_FUNCTION_TRACE ("ut_evaluate_object");
+       struct acpi_parameter_info info;
+       acpi_status status;
+       u32 return_btype;
 
+       ACPI_FUNCTION_TRACE("ut_evaluate_object");
 
        info.node = prefix_node;
        info.parameters = NULL;
@@ -160,36 +144,38 @@ acpi_ut_evaluate_object (
 
        /* Evaluate the object/method */
 
-       status = acpi_ns_evaluate_relative (path, &info);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ns_evaluate_relative(path, &info);
+       if (ACPI_FAILURE(status)) {
                if (status == AE_NOT_FOUND) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[%4.4s.%s] was not found\n",
-                               acpi_ut_get_node_name (prefix_node), path));
-               }
-               else {
-                       ACPI_REPORT_METHOD_ERROR ("Method execution failed",
-                               prefix_node, path, status);
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                         "[%4.4s.%s] was not found\n",
+                                         acpi_ut_get_node_name(prefix_node),
+                                         path));
+               } else {
+                       ACPI_REPORT_METHOD_ERROR("Method execution failed",
+                                                prefix_node, path, status);
                }
 
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
        /* Did we get a return object? */
 
        if (!info.return_object) {
                if (expected_return_btypes) {
-                       ACPI_REPORT_METHOD_ERROR ("No object was returned from",
-                               prefix_node, path, AE_NOT_EXIST);
+                       ACPI_REPORT_METHOD_ERROR("No object was returned from",
+                                                prefix_node, path,
+                                                AE_NOT_EXIST);
 
-                       return_ACPI_STATUS (AE_NOT_EXIST);
+                       return_ACPI_STATUS(AE_NOT_EXIST);
                }
 
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Map the return object type to the bitmapped type */
 
-       switch (ACPI_GET_OBJECT_TYPE (info.return_object)) {
+       switch (ACPI_GET_OBJECT_TYPE(info.return_object)) {
        case ACPI_TYPE_INTEGER:
                return_btype = ACPI_BTYPE_INTEGER;
                break;
@@ -211,41 +197,41 @@ acpi_ut_evaluate_object (
                break;
        }
 
-       if ((acpi_gbl_enable_interpreter_slack) &&
-               (!expected_return_btypes)) {
+       if ((acpi_gbl_enable_interpreter_slack) && (!expected_return_btypes)) {
                /*
                 * We received a return object, but one was not expected.  This can
                 * happen frequently if the "implicit return" feature is enabled.
                 * Just delete the return object and return AE_OK.
                 */
-               acpi_ut_remove_reference (info.return_object);
-               return_ACPI_STATUS (AE_OK);
+               acpi_ut_remove_reference(info.return_object);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Is the return object one of the expected types? */
 
        if (!(expected_return_btypes & return_btype)) {
-               ACPI_REPORT_METHOD_ERROR ("Return object type is incorrect",
-                       prefix_node, path, AE_TYPE);
+               ACPI_REPORT_METHOD_ERROR("Return object type is incorrect",
+                                        prefix_node, path, AE_TYPE);
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Type returned from %s was incorrect: %s, expected Btypes: %X\n",
-                       path, acpi_ut_get_object_type_name (info.return_object),
-                       expected_return_btypes));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Type returned from %s was incorrect: %s, expected Btypes: %X\n",
+                                 path,
+                                 acpi_ut_get_object_type_name(info.
+                                                              return_object),
+                                 expected_return_btypes));
 
                /* On error exit, we must delete the return object */
 
-               acpi_ut_remove_reference (info.return_object);
-               return_ACPI_STATUS (AE_TYPE);
+               acpi_ut_remove_reference(info.return_object);
+               return_ACPI_STATUS(AE_TYPE);
        }
 
        /* Object type is OK, return it */
 
        *return_desc = info.return_object;
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_evaluate_numeric_object
@@ -264,22 +250,19 @@ acpi_ut_evaluate_object (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_evaluate_numeric_object (
-       char                            *object_name,
-       struct acpi_namespace_node      *device_node,
-       acpi_integer                    *address)
+acpi_ut_evaluate_numeric_object(char *object_name,
+                               struct acpi_namespace_node *device_node,
+                               acpi_integer * address)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("ut_evaluate_numeric_object");
+       ACPI_FUNCTION_TRACE("ut_evaluate_numeric_object");
 
-
-       status = acpi_ut_evaluate_object (device_node, object_name,
-                        ACPI_BTYPE_INTEGER, &obj_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_evaluate_object(device_node, object_name,
+                                        ACPI_BTYPE_INTEGER, &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Get the returned Integer */
@@ -288,11 +271,10 @@ acpi_ut_evaluate_numeric_object (
 
        /* On exit, we must delete the return object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_copy_id_string
@@ -310,10 +292,7 @@ acpi_ut_evaluate_numeric_object (
  ******************************************************************************/
 
 static void
-acpi_ut_copy_id_string (
-       char                            *destination,
-       char                            *source,
-       acpi_size                       max_length)
+acpi_ut_copy_id_string(char *destination, char *source, acpi_size max_length)
 {
 
        /*
@@ -328,10 +307,9 @@ acpi_ut_copy_id_string (
 
        /* Do the actual copy */
 
-       ACPI_STRNCPY (destination, source, max_length);
+       ACPI_STRNCPY(destination, source, max_length);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_execute_HID
@@ -349,42 +327,39 @@ acpi_ut_copy_id_string (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_execute_HID (
-       struct acpi_namespace_node      *device_node,
-       struct acpi_device_id           *hid)
+acpi_ut_execute_HID(struct acpi_namespace_node *device_node,
+                   struct acpi_device_id *hid)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("ut_execute_HID");
+       ACPI_FUNCTION_TRACE("ut_execute_HID");
 
-
-       status = acpi_ut_evaluate_object (device_node, METHOD_NAME__HID,
-                        ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, &obj_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_evaluate_object(device_node, METHOD_NAME__HID,
+                                        ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING,
+                                        &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {
+       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
                /* Convert the Numeric HID to string */
 
-               acpi_ex_eisa_id_to_string ((u32) obj_desc->integer.value, hid->value);
-       }
-       else {
+               acpi_ex_eisa_id_to_string((u32) obj_desc->integer.value,
+                                         hid->value);
+       else {
                /* Copy the String HID from the returned object */
 
-               acpi_ut_copy_id_string (hid->value, obj_desc->string.pointer,
-                               sizeof (hid->value));
+               acpi_ut_copy_id_string(hid->value, obj_desc->string.pointer,
+                                      sizeof(hid->value));
        }
 
        /* On exit, we must delete the return object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_translate_one_cid
@@ -403,18 +378,17 @@ acpi_ut_execute_HID (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_translate_one_cid (
-       union acpi_operand_object       *obj_desc,
-       struct acpi_compatible_id       *one_cid)
+acpi_ut_translate_one_cid(union acpi_operand_object *obj_desc,
+                         struct acpi_compatible_id *one_cid)
 {
 
-
-       switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
+       switch (ACPI_GET_OBJECT_TYPE(obj_desc)) {
        case ACPI_TYPE_INTEGER:
 
                /* Convert the Numeric CID to string */
 
-               acpi_ex_eisa_id_to_string ((u32) obj_desc->integer.value, one_cid->value);
+               acpi_ex_eisa_id_to_string((u32) obj_desc->integer.value,
+                                         one_cid->value);
                return (AE_OK);
 
        case ACPI_TYPE_STRING:
@@ -425,8 +399,8 @@ acpi_ut_translate_one_cid (
 
                /* Copy the String CID from the returned object */
 
-               acpi_ut_copy_id_string (one_cid->value, obj_desc->string.pointer,
-                               ACPI_MAX_CID_LENGTH);
+               acpi_ut_copy_id_string(one_cid->value, obj_desc->string.pointer,
+                                      ACPI_MAX_CID_LENGTH);
                return (AE_OK);
 
        default:
@@ -435,7 +409,6 @@ acpi_ut_translate_one_cid (
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_execute_CID
@@ -453,45 +426,42 @@ acpi_ut_translate_one_cid (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_execute_CID (
-       struct acpi_namespace_node      *device_node,
-       struct acpi_compatible_id_list **return_cid_list)
+acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
+                   struct acpi_compatible_id_list ** return_cid_list)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-       u32                             count;
-       u32                             size;
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
+       u32 count;
+       u32 size;
        struct acpi_compatible_id_list *cid_list;
-       acpi_native_uint                i;
-
-
-       ACPI_FUNCTION_TRACE ("ut_execute_CID");
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_TRACE("ut_execute_CID");
 
        /* Evaluate the _CID method for this device */
 
-       status = acpi_ut_evaluate_object (device_node, METHOD_NAME__CID,
-                        ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_PACKAGE,
-                        &obj_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_evaluate_object(device_node, METHOD_NAME__CID,
+                                        ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING
+                                        | ACPI_BTYPE_PACKAGE, &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Get the number of _CIDs returned */
 
        count = 1;
-       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_PACKAGE) {
+       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) {
                count = obj_desc->package.count;
        }
 
        /* Allocate a worst-case buffer for the _CIDs */
 
-       size = (((count - 1) * sizeof (struct acpi_compatible_id)) +
-                          sizeof (struct acpi_compatible_id_list));
+       size = (((count - 1) * sizeof(struct acpi_compatible_id)) +
+               sizeof(struct acpi_compatible_id_list));
 
-       cid_list = ACPI_MEM_CALLOCATE ((acpi_size) size);
+       cid_list = ACPI_MEM_CALLOCATE((acpi_size) size);
        if (!cid_list) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        /* Init CID list */
@@ -508,39 +478,38 @@ acpi_ut_execute_CID (
 
        /* The _CID object can be either a single CID or a package (list) of CIDs */
 
-       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_PACKAGE) {
+       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) {
                /* Translate each package element */
 
                for (i = 0; i < count; i++) {
-                       status = acpi_ut_translate_one_cid (obj_desc->package.elements[i],
-                                         &cid_list->id[i]);
-                       if (ACPI_FAILURE (status)) {
+                       status =
+                           acpi_ut_translate_one_cid(obj_desc->package.
+                                                     elements[i],
+                                                     &cid_list->id[i]);
+                       if (ACPI_FAILURE(status)) {
                                break;
                        }
                }
-       }
-       else {
+       } else {
                /* Only one CID, translate to a string */
 
-               status = acpi_ut_translate_one_cid (obj_desc, cid_list->id);
+               status = acpi_ut_translate_one_cid(obj_desc, cid_list->id);
        }
 
        /* Cleanup on error */
 
-       if (ACPI_FAILURE (status)) {
-               ACPI_MEM_FREE (cid_list);
-       }
-       else {
+       if (ACPI_FAILURE(status)) {
+               ACPI_MEM_FREE(cid_list);
+       } else {
                *return_cid_list = cid_list;
        }
 
        /* On exit, we must delete the _CID return object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_execute_UID
@@ -558,42 +527,39 @@ acpi_ut_execute_CID (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_execute_UID (
-       struct acpi_namespace_node      *device_node,
-       struct acpi_device_id           *uid)
+acpi_ut_execute_UID(struct acpi_namespace_node *device_node,
+                   struct acpi_device_id *uid)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ut_execute_UID");
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("ut_execute_UID");
 
-       status = acpi_ut_evaluate_object (device_node, METHOD_NAME__UID,
-                        ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING, &obj_desc);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_evaluate_object(device_node, METHOD_NAME__UID,
+                                        ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING,
+                                        &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
-       if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {
+       if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
                /* Convert the Numeric UID to string */
 
-               acpi_ex_unsigned_integer_to_string (obj_desc->integer.value, uid->value);
-       }
-       else {
+               acpi_ex_unsigned_integer_to_string(obj_desc->integer.value,
+                                                  uid->value);
+       else {
                /* Copy the String UID from the returned object */
 
-               acpi_ut_copy_id_string (uid->value, obj_desc->string.pointer,
-                               sizeof (uid->value));
+               acpi_ut_copy_id_string(uid->value, obj_desc->string.pointer,
+                                      sizeof(uid->value));
        }
 
        /* On exit, we must delete the return object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_execute_STA
@@ -611,30 +577,26 @@ acpi_ut_execute_UID (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_execute_STA (
-       struct acpi_namespace_node      *device_node,
-       u32                             *flags)
+acpi_ut_execute_STA(struct acpi_namespace_node *device_node, u32 * flags)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
 
-       ACPI_FUNCTION_TRACE ("ut_execute_STA");
+       ACPI_FUNCTION_TRACE("ut_execute_STA");
 
-
-       status = acpi_ut_evaluate_object (device_node, METHOD_NAME__STA,
-                        ACPI_BTYPE_INTEGER, &obj_desc);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ut_evaluate_object(device_node, METHOD_NAME__STA,
+                                        ACPI_BTYPE_INTEGER, &obj_desc);
+       if (ACPI_FAILURE(status)) {
                if (AE_NOT_FOUND == status) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                               "_STA on %4.4s was not found, assuming device is present\n",
-                               acpi_ut_get_node_name (device_node)));
+                       ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                         "_STA on %4.4s was not found, assuming device is present\n",
+                                         acpi_ut_get_node_name(device_node)));
 
                        *flags = 0x0F;
                        status = AE_OK;
                }
 
-               return_ACPI_STATUS (status);
+               return_ACPI_STATUS(status);
        }
 
        /* Extract the status flags */
@@ -643,11 +605,10 @@ acpi_ut_execute_STA (
 
        /* On exit, we must delete the return object */
 
-       acpi_ut_remove_reference (obj_desc);
-       return_ACPI_STATUS (status);
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_execute_Sxds
@@ -665,44 +626,45 @@ acpi_ut_execute_STA (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_execute_sxds (
-       struct acpi_namespace_node      *device_node,
-       u8                              *highest)
+acpi_ut_execute_sxds(struct acpi_namespace_node *device_node, u8 * highest)
 {
-       union acpi_operand_object       *obj_desc;
-       acpi_status                     status;
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("ut_execute_Sxds");
+       union acpi_operand_object *obj_desc;
+       acpi_status status;
+       u32 i;
 
+       ACPI_FUNCTION_TRACE("ut_execute_Sxds");
 
        for (i = 0; i < 4; i++) {
                highest[i] = 0xFF;
-               status = acpi_ut_evaluate_object (device_node,
-                                (char *) acpi_gbl_highest_dstate_names[i],
-                                ACPI_BTYPE_INTEGER, &obj_desc);
-               if (ACPI_FAILURE (status)) {
+               status = acpi_ut_evaluate_object(device_node,
+                                                (char *)
+                                                acpi_gbl_highest_dstate_names
+                                                [i], ACPI_BTYPE_INTEGER,
+                                                &obj_desc);
+               if (ACPI_FAILURE(status)) {
                        if (status != AE_NOT_FOUND) {
-                               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                                       "%s on Device %4.4s, %s\n",
-                                       (char *) acpi_gbl_highest_dstate_names[i],
-                                       acpi_ut_get_node_name (device_node),
-                                       acpi_format_exception (status)));
-
-                               return_ACPI_STATUS (status);
+                               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                                 "%s on Device %4.4s, %s\n",
+                                                 (char *)
+                                                 acpi_gbl_highest_dstate_names
+                                                 [i],
+                                                 acpi_ut_get_node_name
+                                                 (device_node),
+                                                 acpi_format_exception
+                                                 (status)));
+
+                               return_ACPI_STATUS(status);
                        }
-               }
-               else {
+               } else {
                        /* Extract the Dstate value */
 
                        highest[i] = (u8) obj_desc->integer.value;
 
                        /* Delete the return object */
 
-                       acpi_ut_remove_reference (obj_desc);
+                       acpi_ut_remove_reference(obj_desc);
                }
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
index 4146019b543fd8a9fe6cf776449c925eee6874b6..399e64b5188673c41eb0b7bef4bae0ece4259a64 100644 (file)
@@ -48,8 +48,7 @@
 #include <acpi/acnamesp.h>
 
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utglobal")
-
+ACPI_MODULE_NAME("utglobal")
 
 /*******************************************************************************
  *
  * DESCRIPTION: This function translates an ACPI exception into an ASCII string.
  *
  ******************************************************************************/
-
-const char *
-acpi_format_exception (
-       acpi_status                     status)
+const char *acpi_format_exception(acpi_status status)
 {
-       acpi_status                     sub_status;
-       const char                      *exception = NULL;
-
-
-       ACPI_FUNCTION_NAME ("format_exception");
+       acpi_status sub_status;
+       const char *exception = NULL;
 
+       ACPI_FUNCTION_NAME("format_exception");
 
        sub_status = (status & ~AE_CODE_MASK);
 
@@ -81,35 +75,39 @@ acpi_format_exception (
        case AE_CODE_ENVIRONMENTAL:
 
                if (sub_status <= AE_CODE_ENV_MAX) {
-                       exception = acpi_gbl_exception_names_env [sub_status];
+                       exception = acpi_gbl_exception_names_env[sub_status];
                }
                break;
 
        case AE_CODE_PROGRAMMER:
 
                if (sub_status <= AE_CODE_PGM_MAX) {
-                       exception = acpi_gbl_exception_names_pgm [sub_status -1];
+                       exception =
+                           acpi_gbl_exception_names_pgm[sub_status - 1];
                }
                break;
 
        case AE_CODE_ACPI_TABLES:
 
                if (sub_status <= AE_CODE_TBL_MAX) {
-                       exception = acpi_gbl_exception_names_tbl [sub_status -1];
+                       exception =
+                           acpi_gbl_exception_names_tbl[sub_status - 1];
                }
                break;
 
        case AE_CODE_AML:
 
                if (sub_status <= AE_CODE_AML_MAX) {
-                       exception = acpi_gbl_exception_names_aml [sub_status -1];
+                       exception =
+                           acpi_gbl_exception_names_aml[sub_status - 1];
                }
                break;
 
        case AE_CODE_CONTROL:
 
                if (sub_status <= AE_CODE_CTRL_MAX) {
-                       exception = acpi_gbl_exception_names_ctrl [sub_status -1];
+                       exception =
+                           acpi_gbl_exception_names_ctrl[sub_status - 1];
                }
                break;
 
@@ -120,16 +118,15 @@ acpi_format_exception (
        if (!exception) {
                /* Exception code was not recognized */
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Unknown exception code: 0x%8.8X\n", status));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unknown exception code: 0x%8.8X\n", status));
 
-               return ((const char *) "UNKNOWN_STATUS_CODE");
+               return ((const char *)"UNKNOWN_STATUS_CODE");
        }
 
-       return ((const char *) exception);
+       return ((const char *)exception);
 }
 
-
 /*******************************************************************************
  *
  * Static global variable initialization.
@@ -142,34 +139,32 @@ acpi_format_exception (
  */
 
 /* Debug switch - level and trace mask */
-u32                                 acpi_dbg_level = ACPI_DEBUG_DEFAULT;
+u32 acpi_dbg_level = ACPI_DEBUG_DEFAULT;
 EXPORT_SYMBOL(acpi_dbg_level);
 
 /* Debug switch - layer (component) mask */
 
-u32                                 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS;
+u32 acpi_dbg_layer = ACPI_COMPONENT_DEFAULT | ACPI_ALL_DRIVERS;
 EXPORT_SYMBOL(acpi_dbg_layer);
-u32                                 acpi_gbl_nesting_level = 0;
-
+u32 acpi_gbl_nesting_level = 0;
 
 /* Debugger globals */
 
-u8                                  acpi_gbl_db_terminate_threads = FALSE;
-u8                                  acpi_gbl_abort_method = FALSE;
-u8                                  acpi_gbl_method_executing = FALSE;
+u8 acpi_gbl_db_terminate_threads = FALSE;
+u8 acpi_gbl_abort_method = FALSE;
+u8 acpi_gbl_method_executing = FALSE;
 
 /* System flags */
 
-u32                                 acpi_gbl_startup_flags = 0;
+u32 acpi_gbl_startup_flags = 0;
 
 /* System starts uninitialized */
 
-u8                                  acpi_gbl_shutdown = TRUE;
+u8 acpi_gbl_shutdown = TRUE;
 
-const u8                            acpi_gbl_decode_to8bit [8] = {1,2,4,8,16,32,64,128};
+const u8 acpi_gbl_decode_to8bit[8] = { 1, 2, 4, 8, 16, 32, 64, 128 };
 
-const char                          *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT] =
-{
+const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT] = {
        "\\_S0_",
        "\\_S1_",
        "\\_S2_",
@@ -178,8 +173,7 @@ const char                          *acpi_gbl_sleep_state_names[ACPI_S_STATE_COU
        "\\_S5_"
 };
 
-const char                          *acpi_gbl_highest_dstate_names[4] =
-{
+const char *acpi_gbl_highest_dstate_names[4] = {
        "_S1D",
        "_S2D",
        "_S3D",
@@ -190,8 +184,7 @@ const char                          *acpi_gbl_highest_dstate_names[4] =
  * Strings supported by the _OSI predefined (internal) method.
  * When adding strings, be sure to update ACPI_NUM_OSI_STRINGS.
  */
-const char                          *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS] =
-{
+const char *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS] = {
        /* Operating System Vendor Strings */
 
        "Linux",
@@ -209,7 +202,6 @@ const char                          *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STR
        "Extended Address Space Descriptor"
 };
 
-
 /*******************************************************************************
  *
  * Namespace globals
@@ -225,74 +217,70 @@ const char                          *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STR
  * 2) _TZ_ is defined to be a thermal zone in order to allow ASL code to
  *    perform a Notify() operation on it.
  */
-const struct acpi_predefined_names      acpi_gbl_pre_defined_names[] =
-{ {"_GPE",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
-       {"_PR_",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
-       {"_SB_",    ACPI_TYPE_DEVICE,           NULL},
-       {"_SI_",    ACPI_TYPE_LOCAL_SCOPE,      NULL},
-       {"_TZ_",    ACPI_TYPE_THERMAL,          NULL},
-       {"_REV",    ACPI_TYPE_INTEGER,          (char *) ACPI_CA_SUPPORT_LEVEL},
-       {"_OS_",    ACPI_TYPE_STRING,           ACPI_OS_NAME},
-       {"_GL_",    ACPI_TYPE_MUTEX,            (char *) 1},
+const struct acpi_predefined_names acpi_gbl_pre_defined_names[] =
+    { {"_GPE", ACPI_TYPE_LOCAL_SCOPE, NULL},
+{"_PR_", ACPI_TYPE_LOCAL_SCOPE, NULL},
+{"_SB_", ACPI_TYPE_DEVICE, NULL},
+{"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
+{"_TZ_", ACPI_TYPE_THERMAL, NULL},
+{"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
+{"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
+{"_GL_", ACPI_TYPE_MUTEX, (char *)1},
 
 #if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
-       {"_OSI",    ACPI_TYPE_METHOD,           (char *) 1},
+{"_OSI", ACPI_TYPE_METHOD, (char *)1},
 #endif
 
        /* Table terminator */
 
-       {NULL,      ACPI_TYPE_ANY,              NULL}
+{NULL, ACPI_TYPE_ANY, NULL}
 };
 
 /*
  * Properties of the ACPI Object Types, both internal and external.
  * The table is indexed by values of acpi_object_type
  */
-const u8                                acpi_gbl_ns_properties[] =
-{
-       ACPI_NS_NORMAL,                     /* 00 Any              */
-       ACPI_NS_NORMAL,                     /* 01 Number           */
-       ACPI_NS_NORMAL,                     /* 02 String           */
-       ACPI_NS_NORMAL,                     /* 03 Buffer           */
-       ACPI_NS_NORMAL,                     /* 04 Package          */
-       ACPI_NS_NORMAL,                     /* 05 field_unit       */
-       ACPI_NS_NEWSCOPE,                   /* 06 Device           */
-       ACPI_NS_NORMAL,                     /* 07 Event            */
-       ACPI_NS_NEWSCOPE,                   /* 08 Method           */
-       ACPI_NS_NORMAL,                     /* 09 Mutex            */
-       ACPI_NS_NORMAL,                     /* 10 Region           */
-       ACPI_NS_NEWSCOPE,                   /* 11 Power            */
-       ACPI_NS_NEWSCOPE,                   /* 12 Processor        */
-       ACPI_NS_NEWSCOPE,                   /* 13 Thermal          */
-       ACPI_NS_NORMAL,                     /* 14 buffer_field     */
-       ACPI_NS_NORMAL,                     /* 15 ddb_handle       */
-       ACPI_NS_NORMAL,                     /* 16 Debug Object     */
-       ACPI_NS_NORMAL,                     /* 17 def_field        */
-       ACPI_NS_NORMAL,                     /* 18 bank_field       */
-       ACPI_NS_NORMAL,                     /* 19 index_field      */
-       ACPI_NS_NORMAL,                     /* 20 Reference        */
-       ACPI_NS_NORMAL,                     /* 21 Alias            */
-       ACPI_NS_NORMAL,                     /* 22 method_alias     */
-       ACPI_NS_NORMAL,                     /* 23 Notify           */
-       ACPI_NS_NORMAL,                     /* 24 Address Handler  */
-       ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 25 Resource Desc    */
-       ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,   /* 26 Resource Field   */
-       ACPI_NS_NEWSCOPE,                   /* 27 Scope            */
-       ACPI_NS_NORMAL,                     /* 28 Extra            */
-       ACPI_NS_NORMAL,                     /* 29 Data             */
-       ACPI_NS_NORMAL                      /* 30 Invalid          */
+const u8 acpi_gbl_ns_properties[] = {
+       ACPI_NS_NORMAL,         /* 00 Any              */
+       ACPI_NS_NORMAL,         /* 01 Number           */
+       ACPI_NS_NORMAL,         /* 02 String           */
+       ACPI_NS_NORMAL,         /* 03 Buffer           */
+       ACPI_NS_NORMAL,         /* 04 Package          */
+       ACPI_NS_NORMAL,         /* 05 field_unit       */
+       ACPI_NS_NEWSCOPE,       /* 06 Device           */
+       ACPI_NS_NORMAL,         /* 07 Event            */
+       ACPI_NS_NEWSCOPE,       /* 08 Method           */
+       ACPI_NS_NORMAL,         /* 09 Mutex            */
+       ACPI_NS_NORMAL,         /* 10 Region           */
+       ACPI_NS_NEWSCOPE,       /* 11 Power            */
+       ACPI_NS_NEWSCOPE,       /* 12 Processor        */
+       ACPI_NS_NEWSCOPE,       /* 13 Thermal          */
+       ACPI_NS_NORMAL,         /* 14 buffer_field     */
+       ACPI_NS_NORMAL,         /* 15 ddb_handle       */
+       ACPI_NS_NORMAL,         /* 16 Debug Object     */
+       ACPI_NS_NORMAL,         /* 17 def_field        */
+       ACPI_NS_NORMAL,         /* 18 bank_field       */
+       ACPI_NS_NORMAL,         /* 19 index_field      */
+       ACPI_NS_NORMAL,         /* 20 Reference        */
+       ACPI_NS_NORMAL,         /* 21 Alias            */
+       ACPI_NS_NORMAL,         /* 22 method_alias     */
+       ACPI_NS_NORMAL,         /* 23 Notify           */
+       ACPI_NS_NORMAL,         /* 24 Address Handler  */
+       ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,       /* 25 Resource Desc    */
+       ACPI_NS_NEWSCOPE | ACPI_NS_LOCAL,       /* 26 Resource Field   */
+       ACPI_NS_NEWSCOPE,       /* 27 Scope            */
+       ACPI_NS_NORMAL,         /* 28 Extra            */
+       ACPI_NS_NORMAL,         /* 29 Data             */
+       ACPI_NS_NORMAL          /* 30 Invalid          */
 };
 
-
 /* Hex to ASCII conversion table */
 
-static const char                   acpi_gbl_hex_to_ascii[] =
-{
-       '0','1','2','3','4','5','6','7',
-       '8','9','A','B','C','D','E','F'
+static const char acpi_gbl_hex_to_ascii[] = {
+       '0', '1', '2', '3', '4', '5', '6', '7',
+       '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
 };
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_hex_to_ascii_char
@@ -307,16 +295,12 @@ static const char                   acpi_gbl_hex_to_ascii[] =
  *
  ******************************************************************************/
 
-char
-acpi_ut_hex_to_ascii_char (
-       acpi_integer                    integer,
-       u32                             position)
+char acpi_ut_hex_to_ascii_char(acpi_integer integer, u32 position)
 {
 
        return (acpi_gbl_hex_to_ascii[(integer >> position) & 0xF]);
 }
 
-
 /*******************************************************************************
  *
  * Table name globals
@@ -330,67 +314,139 @@ acpi_ut_hex_to_ascii_char (
  *
  ******************************************************************************/
 
-struct acpi_table_list              acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES];
+struct acpi_table_list acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES];
 
-struct acpi_table_support           acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES] =
-{
+struct acpi_table_support acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES] = {
        /***********    Name,   Signature, Global typed pointer     Signature size,      Type                  How many allowed?,    Contains valid AML? */
 
-       /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL,                    sizeof (RSDP_SIG)-1, ACPI_TABLE_ROOT     | ACPI_TABLE_SINGLE},
-       /* DSDT 1 */ {DSDT_SIG,  DSDT_SIG, (void *) &acpi_gbl_DSDT, sizeof (DSDT_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE   | ACPI_TABLE_EXECUTABLE},
-       /* FADT 2 */ {FADT_SIG,  FADT_SIG, (void *) &acpi_gbl_FADT, sizeof (FADT_SIG)-1, ACPI_TABLE_PRIMARY  | ACPI_TABLE_SINGLE},
-       /* FACS 3 */ {FACS_SIG,  FACS_SIG, (void *) &acpi_gbl_FACS, sizeof (FACS_SIG)-1, ACPI_TABLE_SECONDARY| ACPI_TABLE_SINGLE},
-       /* PSDT 4 */ {PSDT_SIG,  PSDT_SIG, NULL,                    sizeof (PSDT_SIG)-1, ACPI_TABLE_PRIMARY  | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
-       /* SSDT 5 */ {SSDT_SIG,  SSDT_SIG, NULL,                    sizeof (SSDT_SIG)-1, ACPI_TABLE_PRIMARY  | ACPI_TABLE_MULTIPLE | ACPI_TABLE_EXECUTABLE},
-       /* XSDT 6 */ {XSDT_SIG,  XSDT_SIG, NULL,                    sizeof (RSDT_SIG)-1, ACPI_TABLE_ROOT     | ACPI_TABLE_SINGLE},
+       /* RSDP 0 */ {RSDP_NAME, RSDP_SIG, NULL, sizeof(RSDP_SIG) - 1,
+                     ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE}
+       ,
+       /* DSDT 1 */ {DSDT_SIG, DSDT_SIG, (void *)&acpi_gbl_DSDT,
+                     sizeof(DSDT_SIG) - 1,
+                     ACPI_TABLE_SECONDARY | ACPI_TABLE_SINGLE |
+                     ACPI_TABLE_EXECUTABLE}
+       ,
+       /* FADT 2 */ {FADT_SIG, FADT_SIG, (void *)&acpi_gbl_FADT,
+                     sizeof(FADT_SIG) - 1,
+                     ACPI_TABLE_PRIMARY | ACPI_TABLE_SINGLE}
+       ,
+       /* FACS 3 */ {FACS_SIG, FACS_SIG, (void *)&acpi_gbl_FACS,
+                     sizeof(FACS_SIG) - 1,
+                     ACPI_TABLE_SECONDARY | ACPI_TABLE_SINGLE}
+       ,
+       /* PSDT 4 */ {PSDT_SIG, PSDT_SIG, NULL, sizeof(PSDT_SIG) - 1,
+                     ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE |
+                     ACPI_TABLE_EXECUTABLE}
+       ,
+       /* SSDT 5 */ {SSDT_SIG, SSDT_SIG, NULL, sizeof(SSDT_SIG) - 1,
+                     ACPI_TABLE_PRIMARY | ACPI_TABLE_MULTIPLE |
+                     ACPI_TABLE_EXECUTABLE}
+       ,
+       /* XSDT 6 */ {XSDT_SIG, XSDT_SIG, NULL, sizeof(RSDT_SIG) - 1,
+                     ACPI_TABLE_ROOT | ACPI_TABLE_SINGLE}
+       ,
 };
 
-
 /******************************************************************************
  *
  * Event and Hardware globals
  *
  ******************************************************************************/
 
-struct acpi_bit_register_info       acpi_gbl_bit_register_info[ACPI_NUM_BITREG] =
-{
+struct acpi_bit_register_info acpi_gbl_bit_register_info[ACPI_NUM_BITREG] = {
        /* Name                                     Parent Register             Register Bit Position                   Register Bit Mask       */
 
-       /* ACPI_BITREG_TIMER_STATUS         */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_TIMER_STATUS,          ACPI_BITMASK_TIMER_STATUS},
-       /* ACPI_BITREG_BUS_MASTER_STATUS    */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_BUS_MASTER_STATUS,     ACPI_BITMASK_BUS_MASTER_STATUS},
-       /* ACPI_BITREG_GLOBAL_LOCK_STATUS   */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_GLOBAL_LOCK_STATUS,    ACPI_BITMASK_GLOBAL_LOCK_STATUS},
-       /* ACPI_BITREG_POWER_BUTTON_STATUS  */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_POWER_BUTTON_STATUS,   ACPI_BITMASK_POWER_BUTTON_STATUS},
-       /* ACPI_BITREG_SLEEP_BUTTON_STATUS  */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_SLEEP_BUTTON_STATUS,   ACPI_BITMASK_SLEEP_BUTTON_STATUS},
-       /* ACPI_BITREG_RT_CLOCK_STATUS      */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_RT_CLOCK_STATUS,       ACPI_BITMASK_RT_CLOCK_STATUS},
-       /* ACPI_BITREG_WAKE_STATUS          */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_WAKE_STATUS,           ACPI_BITMASK_WAKE_STATUS},
-       /* ACPI_BITREG_PCIEXP_WAKE_STATUS   */   {ACPI_REGISTER_PM1_STATUS,   ACPI_BITPOSITION_PCIEXP_WAKE_STATUS,    ACPI_BITMASK_PCIEXP_WAKE_STATUS},
-
-       /* ACPI_BITREG_TIMER_ENABLE         */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_TIMER_ENABLE,          ACPI_BITMASK_TIMER_ENABLE},
-       /* ACPI_BITREG_GLOBAL_LOCK_ENABLE   */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE,    ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
-       /* ACPI_BITREG_POWER_BUTTON_ENABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_POWER_BUTTON_ENABLE,   ACPI_BITMASK_POWER_BUTTON_ENABLE},
-       /* ACPI_BITREG_SLEEP_BUTTON_ENABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE,   ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
-       /* ACPI_BITREG_RT_CLOCK_ENABLE      */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_RT_CLOCK_ENABLE,       ACPI_BITMASK_RT_CLOCK_ENABLE},
-       /* ACPI_BITREG_WAKE_ENABLE          */   {ACPI_REGISTER_PM1_ENABLE,   0,                                      0},
-       /* ACPI_BITREG_PCIEXP_WAKE_DISABLE  */   {ACPI_REGISTER_PM1_ENABLE,   ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE,   ACPI_BITMASK_PCIEXP_WAKE_DISABLE},
-
-       /* ACPI_BITREG_SCI_ENABLE           */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SCI_ENABLE,            ACPI_BITMASK_SCI_ENABLE},
-       /* ACPI_BITREG_BUS_MASTER_RLD       */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_BUS_MASTER_RLD,        ACPI_BITMASK_BUS_MASTER_RLD},
-       /* ACPI_BITREG_GLOBAL_LOCK_RELEASE  */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE,   ACPI_BITMASK_GLOBAL_LOCK_RELEASE},
-       /* ACPI_BITREG_SLEEP_TYPE_A         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_TYPE_X,          ACPI_BITMASK_SLEEP_TYPE_X},
-       /* ACPI_BITREG_SLEEP_TYPE_B         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_TYPE_X,          ACPI_BITMASK_SLEEP_TYPE_X},
-       /* ACPI_BITREG_SLEEP_ENABLE         */   {ACPI_REGISTER_PM1_CONTROL,  ACPI_BITPOSITION_SLEEP_ENABLE,          ACPI_BITMASK_SLEEP_ENABLE},
-
-       /* ACPI_BITREG_ARB_DIS              */   {ACPI_REGISTER_PM2_CONTROL,  ACPI_BITPOSITION_ARB_DISABLE,           ACPI_BITMASK_ARB_DISABLE}
+       /* ACPI_BITREG_TIMER_STATUS         */ {ACPI_REGISTER_PM1_STATUS,
+                                               ACPI_BITPOSITION_TIMER_STATUS,
+                                               ACPI_BITMASK_TIMER_STATUS},
+       /* ACPI_BITREG_BUS_MASTER_STATUS    */ {ACPI_REGISTER_PM1_STATUS,
+                                               ACPI_BITPOSITION_BUS_MASTER_STATUS,
+                                               ACPI_BITMASK_BUS_MASTER_STATUS},
+       /* ACPI_BITREG_GLOBAL_LOCK_STATUS   */ {ACPI_REGISTER_PM1_STATUS,
+                                               ACPI_BITPOSITION_GLOBAL_LOCK_STATUS,
+                                               ACPI_BITMASK_GLOBAL_LOCK_STATUS},
+       /* ACPI_BITREG_POWER_BUTTON_STATUS  */ {ACPI_REGISTER_PM1_STATUS,
+                                               ACPI_BITPOSITION_POWER_BUTTON_STATUS,
+                                               ACPI_BITMASK_POWER_BUTTON_STATUS},
+       /* ACPI_BITREG_SLEEP_BUTTON_STATUS  */ {ACPI_REGISTER_PM1_STATUS,
+                                               ACPI_BITPOSITION_SLEEP_BUTTON_STATUS,
+                                               ACPI_BITMASK_SLEEP_BUTTON_STATUS},
+       /* ACPI_BITREG_RT_CLOCK_STATUS      */ {ACPI_REGISTER_PM1_STATUS,
+                                               ACPI_BITPOSITION_RT_CLOCK_STATUS,
+                                               ACPI_BITMASK_RT_CLOCK_STATUS},
+       /* ACPI_BITREG_WAKE_STATUS          */ {ACPI_REGISTER_PM1_STATUS,
+                                               ACPI_BITPOSITION_WAKE_STATUS,
+                                               ACPI_BITMASK_WAKE_STATUS},
+       /* ACPI_BITREG_PCIEXP_WAKE_STATUS   */ {ACPI_REGISTER_PM1_STATUS,
+                                               ACPI_BITPOSITION_PCIEXP_WAKE_STATUS,
+                                               ACPI_BITMASK_PCIEXP_WAKE_STATUS},
+
+       /* ACPI_BITREG_TIMER_ENABLE         */ {ACPI_REGISTER_PM1_ENABLE,
+                                               ACPI_BITPOSITION_TIMER_ENABLE,
+                                               ACPI_BITMASK_TIMER_ENABLE},
+       /* ACPI_BITREG_GLOBAL_LOCK_ENABLE   */ {ACPI_REGISTER_PM1_ENABLE,
+                                               ACPI_BITPOSITION_GLOBAL_LOCK_ENABLE,
+                                               ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
+       /* ACPI_BITREG_POWER_BUTTON_ENABLE  */ {ACPI_REGISTER_PM1_ENABLE,
+                                               ACPI_BITPOSITION_POWER_BUTTON_ENABLE,
+                                               ACPI_BITMASK_POWER_BUTTON_ENABLE},
+       /* ACPI_BITREG_SLEEP_BUTTON_ENABLE  */ {ACPI_REGISTER_PM1_ENABLE,
+                                               ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE,
+                                               ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
+       /* ACPI_BITREG_RT_CLOCK_ENABLE      */ {ACPI_REGISTER_PM1_ENABLE,
+                                               ACPI_BITPOSITION_RT_CLOCK_ENABLE,
+                                               ACPI_BITMASK_RT_CLOCK_ENABLE},
+       /* ACPI_BITREG_WAKE_ENABLE          */ {ACPI_REGISTER_PM1_ENABLE, 0, 0},
+       /* ACPI_BITREG_PCIEXP_WAKE_DISABLE  */ {ACPI_REGISTER_PM1_ENABLE,
+                                               ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE,
+                                               ACPI_BITMASK_PCIEXP_WAKE_DISABLE},
+
+       /* ACPI_BITREG_SCI_ENABLE           */ {ACPI_REGISTER_PM1_CONTROL,
+                                               ACPI_BITPOSITION_SCI_ENABLE,
+                                               ACPI_BITMASK_SCI_ENABLE},
+       /* ACPI_BITREG_BUS_MASTER_RLD       */ {ACPI_REGISTER_PM1_CONTROL,
+                                               ACPI_BITPOSITION_BUS_MASTER_RLD,
+                                               ACPI_BITMASK_BUS_MASTER_RLD},
+       /* ACPI_BITREG_GLOBAL_LOCK_RELEASE  */ {ACPI_REGISTER_PM1_CONTROL,
+                                               ACPI_BITPOSITION_GLOBAL_LOCK_RELEASE,
+                                               ACPI_BITMASK_GLOBAL_LOCK_RELEASE},
+       /* ACPI_BITREG_SLEEP_TYPE_A         */ {ACPI_REGISTER_PM1_CONTROL,
+                                               ACPI_BITPOSITION_SLEEP_TYPE_X,
+                                               ACPI_BITMASK_SLEEP_TYPE_X},
+       /* ACPI_BITREG_SLEEP_TYPE_B         */ {ACPI_REGISTER_PM1_CONTROL,
+                                               ACPI_BITPOSITION_SLEEP_TYPE_X,
+                                               ACPI_BITMASK_SLEEP_TYPE_X},
+       /* ACPI_BITREG_SLEEP_ENABLE         */ {ACPI_REGISTER_PM1_CONTROL,
+                                               ACPI_BITPOSITION_SLEEP_ENABLE,
+                                               ACPI_BITMASK_SLEEP_ENABLE},
+
+       /* ACPI_BITREG_ARB_DIS              */ {ACPI_REGISTER_PM2_CONTROL,
+                                               ACPI_BITPOSITION_ARB_DISABLE,
+                                               ACPI_BITMASK_ARB_DISABLE}
 };
 
-
-struct acpi_fixed_event_info        acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] =
-{
-       /* ACPI_EVENT_PMTIMER       */  {ACPI_BITREG_TIMER_STATUS,          ACPI_BITREG_TIMER_ENABLE,        ACPI_BITMASK_TIMER_STATUS,          ACPI_BITMASK_TIMER_ENABLE},
-       /* ACPI_EVENT_GLOBAL        */  {ACPI_BITREG_GLOBAL_LOCK_STATUS,    ACPI_BITREG_GLOBAL_LOCK_ENABLE,  ACPI_BITMASK_GLOBAL_LOCK_STATUS,    ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
-       /* ACPI_EVENT_POWER_BUTTON  */  {ACPI_BITREG_POWER_BUTTON_STATUS,   ACPI_BITREG_POWER_BUTTON_ENABLE, ACPI_BITMASK_POWER_BUTTON_STATUS,   ACPI_BITMASK_POWER_BUTTON_ENABLE},
-       /* ACPI_EVENT_SLEEP_BUTTON  */  {ACPI_BITREG_SLEEP_BUTTON_STATUS,   ACPI_BITREG_SLEEP_BUTTON_ENABLE, ACPI_BITMASK_SLEEP_BUTTON_STATUS,   ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
-       /* ACPI_EVENT_RTC           */  {ACPI_BITREG_RT_CLOCK_STATUS,       ACPI_BITREG_RT_CLOCK_ENABLE,     ACPI_BITMASK_RT_CLOCK_STATUS,       ACPI_BITMASK_RT_CLOCK_ENABLE},
+struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS] = {
+       /* ACPI_EVENT_PMTIMER       */ {ACPI_BITREG_TIMER_STATUS,
+                                       ACPI_BITREG_TIMER_ENABLE,
+                                       ACPI_BITMASK_TIMER_STATUS,
+                                       ACPI_BITMASK_TIMER_ENABLE},
+       /* ACPI_EVENT_GLOBAL        */ {ACPI_BITREG_GLOBAL_LOCK_STATUS,
+                                       ACPI_BITREG_GLOBAL_LOCK_ENABLE,
+                                       ACPI_BITMASK_GLOBAL_LOCK_STATUS,
+                                       ACPI_BITMASK_GLOBAL_LOCK_ENABLE},
+       /* ACPI_EVENT_POWER_BUTTON  */ {ACPI_BITREG_POWER_BUTTON_STATUS,
+                                       ACPI_BITREG_POWER_BUTTON_ENABLE,
+                                       ACPI_BITMASK_POWER_BUTTON_STATUS,
+                                       ACPI_BITMASK_POWER_BUTTON_ENABLE},
+       /* ACPI_EVENT_SLEEP_BUTTON  */ {ACPI_BITREG_SLEEP_BUTTON_STATUS,
+                                       ACPI_BITREG_SLEEP_BUTTON_ENABLE,
+                                       ACPI_BITMASK_SLEEP_BUTTON_STATUS,
+                                       ACPI_BITMASK_SLEEP_BUTTON_ENABLE},
+       /* ACPI_EVENT_RTC           */ {ACPI_BITREG_RT_CLOCK_STATUS,
+                                       ACPI_BITREG_RT_CLOCK_ENABLE,
+                                       ACPI_BITMASK_RT_CLOCK_STATUS,
+                                       ACPI_BITMASK_RT_CLOCK_ENABLE},
 };
 
 /*******************************************************************************
@@ -407,8 +463,7 @@ struct acpi_fixed_event_info        acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVE
 
 /* Region type decoding */
 
-const char                *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] =
-{
+const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] = {
 /*! [Begin] no source code translation (keep these ASL Keywords as-is) */
        "SystemMemory",
        "SystemIO",
@@ -421,25 +476,18 @@ const char                *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS] =
 /*! [End] no source code translation !*/
 };
 
-
-char *
-acpi_ut_get_region_name (
-       u8                              space_id)
+char *acpi_ut_get_region_name(u8 space_id)
 {
 
-       if (space_id >= ACPI_USER_REGION_BEGIN)
-       {
+       if (space_id >= ACPI_USER_REGION_BEGIN) {
                return ("user_defined_region");
-       }
-       else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS)
-       {
+       } else if (space_id >= ACPI_NUM_PREDEFINED_REGIONS) {
                return ("invalid_space_id");
        }
 
-       return ((char *) acpi_gbl_region_types[space_id]);
+       return ((char *)acpi_gbl_region_types[space_id]);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_get_event_name
@@ -454,8 +502,7 @@ acpi_ut_get_region_name (
 
 /* Event type decoding */
 
-static const char                *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] =
-{
+static const char *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] = {
        "PM_Timer",
        "global_lock",
        "power_button",
@@ -463,21 +510,16 @@ static const char                *acpi_gbl_event_types[ACPI_NUM_FIXED_EVENTS] =
        "real_time_clock",
 };
 
-
-char *
-acpi_ut_get_event_name (
-       u32                             event_id)
+char *acpi_ut_get_event_name(u32 event_id)
 {
 
-       if (event_id > ACPI_EVENT_MAX)
-       {
+       if (event_id > ACPI_EVENT_MAX) {
                return ("invalid_event_iD");
        }
 
-       return ((char *) acpi_gbl_event_types[event_id]);
+       return ((char *)acpi_gbl_event_types[event_id]);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_get_type_name
@@ -498,12 +540,11 @@ acpi_ut_get_event_name (
  * when stored in a table it really means that we have thus far seen no
  * evidence to indicate what type is actually going to be stored for this entry.
  */
-static const char                   acpi_gbl_bad_type[] = "UNDEFINED";
+static const char acpi_gbl_bad_type[] = "UNDEFINED";
 
 /* Printable names of the ACPI object types */
 
-static const char                   *acpi_gbl_ns_type_names[] =
-{
+static const char *acpi_gbl_ns_type_names[] = {
        /* 00 */ "Untyped",
        /* 01 */ "Integer",
        /* 02 */ "String",
@@ -537,35 +578,26 @@ static const char                   *acpi_gbl_ns_type_names[] =
        /* 30 */ "Invalid"
 };
 
-
-char *
-acpi_ut_get_type_name (
-       acpi_object_type                type)
+char *acpi_ut_get_type_name(acpi_object_type type)
 {
 
-       if (type > ACPI_TYPE_INVALID)
-       {
-               return ((char *) acpi_gbl_bad_type);
+       if (type > ACPI_TYPE_INVALID) {
+               return ((char *)acpi_gbl_bad_type);
        }
 
-       return ((char *) acpi_gbl_ns_type_names[type]);
+       return ((char *)acpi_gbl_ns_type_names[type]);
 }
 
-
-char *
-acpi_ut_get_object_type_name (
-       union acpi_operand_object       *obj_desc)
+char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc)
 {
 
-       if (!obj_desc)
-       {
+       if (!obj_desc) {
                return ("[NULL Object Descriptor]");
        }
 
-       return (acpi_ut_get_type_name (ACPI_GET_OBJECT_TYPE (obj_desc)));
+       return (acpi_ut_get_type_name(ACPI_GET_OBJECT_TYPE(obj_desc)));
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_get_node_name
@@ -578,39 +610,31 @@ acpi_ut_get_object_type_name (
  *
  ******************************************************************************/
 
-char *
-acpi_ut_get_node_name (
-       void                            *object)
+char *acpi_ut_get_node_name(void *object)
 {
-       struct acpi_namespace_node      *node = (struct acpi_namespace_node *) object;
-
+       struct acpi_namespace_node *node = (struct acpi_namespace_node *)object;
 
        /* Must return a string of exactly 4 characters == ACPI_NAME_SIZE */
 
-       if (!object)
-       {
+       if (!object) {
                return ("NULL");
        }
 
        /* Check for Root node */
 
-       if ((object == ACPI_ROOT_OBJECT) ||
-               (object == acpi_gbl_root_node))
-       {
+       if ((object == ACPI_ROOT_OBJECT) || (object == acpi_gbl_root_node)) {
                return ("\"\\\" ");
        }
 
        /* Descriptor must be a namespace node */
 
-       if (node->descriptor != ACPI_DESC_TYPE_NAMED)
-       {
+       if (node->descriptor != ACPI_DESC_TYPE_NAMED) {
                return ("####");
        }
 
        /* Name must be a valid ACPI name */
 
-       if (!acpi_ut_valid_acpi_name (* (u32 *) node->name.ascii))
-       {
+       if (!acpi_ut_valid_acpi_name(*(u32 *) node->name.ascii)) {
                return ("????");
        }
 
@@ -619,7 +643,6 @@ acpi_ut_get_node_name (
        return (node->name.ascii);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_get_descriptor_name
@@ -634,8 +657,7 @@ acpi_ut_get_node_name (
 
 /* Printable names of object descriptor types */
 
-static const char                   *acpi_gbl_desc_type_names[] =
-{
+static const char *acpi_gbl_desc_type_names[] = {
        /* 00 */ "Invalid",
        /* 01 */ "Cached",
        /* 02 */ "State-Generic",
@@ -654,27 +676,22 @@ static const char                   *acpi_gbl_desc_type_names[] =
        /* 15 */ "Node"
 };
 
-
-char *
-acpi_ut_get_descriptor_name (
-       void                            *object)
+char *acpi_ut_get_descriptor_name(void *object)
 {
 
-       if (!object)
-       {
+       if (!object) {
                return ("NULL OBJECT");
        }
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (object) > ACPI_DESC_TYPE_MAX)
-       {
-               return ((char *) acpi_gbl_bad_type);
+       if (ACPI_GET_DESCRIPTOR_TYPE(object) > ACPI_DESC_TYPE_MAX) {
+               return ((char *)acpi_gbl_bad_type);
        }
 
-       return ((char *) acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE (object)]);
+       return ((char *)
+               acpi_gbl_desc_type_names[ACPI_GET_DESCRIPTOR_TYPE(object)]);
 
 }
 
-
 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 /*
  * Strings and procedures used for debug only
@@ -693,13 +710,10 @@ acpi_ut_get_descriptor_name (
  *
  ******************************************************************************/
 
-char *
-acpi_ut_get_mutex_name (
-       u32                             mutex_id)
+char *acpi_ut_get_mutex_name(u32 mutex_id)
 {
 
-       if (mutex_id > MAX_MUTEX)
-       {
+       if (mutex_id > MAX_MUTEX) {
                return ("Invalid Mutex ID");
        }
 
@@ -707,7 +721,6 @@ acpi_ut_get_mutex_name (
 }
 #endif
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_valid_object_type
@@ -720,13 +733,10 @@ acpi_ut_get_mutex_name (
  *
  ******************************************************************************/
 
-u8
-acpi_ut_valid_object_type (
-       acpi_object_type                type)
+u8 acpi_ut_valid_object_type(acpi_object_type type)
 {
 
-       if (type > ACPI_TYPE_LOCAL_MAX)
-       {
+       if (type > ACPI_TYPE_LOCAL_MAX) {
                /* Note: Assumes all TYPEs are contiguous (external/local) */
 
                return (FALSE);
@@ -735,74 +745,6 @@ acpi_ut_valid_object_type (
        return (TRUE);
 }
 
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_allocate_owner_id
- *
- * PARAMETERS:  id_type         - Type of ID (method or table)
- *
- * DESCRIPTION: Allocate a table or method owner id
- *
- * NOTE: this algorithm has a wraparound problem at 64_k method invocations, and
- *       should be revisited (TBD)
- *
- ******************************************************************************/
-
-acpi_owner_id
-acpi_ut_allocate_owner_id (
-       u32                             id_type)
-{
-       acpi_owner_id                   owner_id = 0xFFFF;
-
-
-       ACPI_FUNCTION_TRACE ("ut_allocate_owner_id");
-
-
-       if (ACPI_FAILURE (acpi_ut_acquire_mutex (ACPI_MTX_CACHES)))
-       {
-               return (0);
-       }
-
-       switch (id_type)
-       {
-       case ACPI_OWNER_TYPE_TABLE:
-
-               owner_id = acpi_gbl_next_table_owner_id;
-               acpi_gbl_next_table_owner_id++;
-
-               /* Check for wraparound */
-
-               if (acpi_gbl_next_table_owner_id == ACPI_FIRST_METHOD_ID)
-               {
-                       acpi_gbl_next_table_owner_id = ACPI_FIRST_TABLE_ID;
-                       ACPI_REPORT_WARNING (("Table owner ID wraparound\n"));
-               }
-               break;
-
-
-       case ACPI_OWNER_TYPE_METHOD:
-
-               owner_id = acpi_gbl_next_method_owner_id;
-               acpi_gbl_next_method_owner_id++;
-
-               if (acpi_gbl_next_method_owner_id == ACPI_FIRST_TABLE_ID)
-               {
-                       /* Check for wraparound */
-
-                       acpi_gbl_next_method_owner_id = ACPI_FIRST_METHOD_ID;
-               }
-               break;
-
-       default:
-               break;
-       }
-
-       (void) acpi_ut_release_mutex (ACPI_MTX_CACHES);
-       return_VALUE (owner_id);
-}
-
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_init_globals
@@ -816,129 +758,96 @@ acpi_ut_allocate_owner_id (
  *
  ******************************************************************************/
 
-void
-acpi_ut_init_globals (
-       void)
+void acpi_ut_init_globals(void)
 {
-       u32                             i;
+       acpi_status status;
+       u32 i;
 
+       ACPI_FUNCTION_TRACE("ut_init_globals");
 
-       ACPI_FUNCTION_TRACE ("ut_init_globals");
+       /* Create all memory caches */
 
-
-       /* Memory allocation and cache lists */
-
-       ACPI_MEMSET (acpi_gbl_memory_lists, 0, sizeof (struct acpi_memory_list) * ACPI_NUM_MEM_LISTS);
-
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_STATE].link_offset      = (u16) ACPI_PTR_DIFF (&(((union acpi_generic_state *) NULL)->common.next), NULL);
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE].link_offset     = (u16) ACPI_PTR_DIFF (&(((union acpi_parse_object *) NULL)->common.next), NULL);
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE_EXT].link_offset = (u16) ACPI_PTR_DIFF (&(((union acpi_parse_object *) NULL)->common.next), NULL);
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_OPERAND].link_offset    = (u16) ACPI_PTR_DIFF (&(((union acpi_operand_object *) NULL)->cache.next), NULL);
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_WALK].link_offset       = (u16) ACPI_PTR_DIFF (&(((struct acpi_walk_state *) NULL)->next), NULL);
-
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_NSNODE].object_size     = sizeof (struct acpi_namespace_node);
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_STATE].object_size      = sizeof (union acpi_generic_state);
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE].object_size     = sizeof (struct acpi_parse_obj_common);
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE_EXT].object_size = sizeof (struct acpi_parse_obj_named);
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_OPERAND].object_size    = sizeof (union acpi_operand_object);
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_WALK].object_size       = sizeof (struct acpi_walk_state);
-
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_STATE].max_cache_depth  = ACPI_MAX_STATE_CACHE_DEPTH;
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE].max_cache_depth = ACPI_MAX_PARSE_CACHE_DEPTH;
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE_EXT].max_cache_depth = ACPI_MAX_EXTPARSE_CACHE_DEPTH;
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_OPERAND].max_cache_depth = ACPI_MAX_OBJECT_CACHE_DEPTH;
-       acpi_gbl_memory_lists[ACPI_MEM_LIST_WALK].max_cache_depth   = ACPI_MAX_WALK_CACHE_DEPTH;
-
-       ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_GLOBAL].list_name    = "Global Memory Allocation");
-       ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_NSNODE].list_name    = "Namespace Nodes");
-       ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_STATE].list_name     = "State Object Cache");
-       ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE].list_name    = "Parse Node Cache");
-       ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_PSNODE_EXT].list_name = "Extended Parse Node Cache");
-       ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_OPERAND].list_name   = "Operand Object Cache");
-       ACPI_MEM_TRACKING (acpi_gbl_memory_lists[ACPI_MEM_LIST_WALK].list_name      = "Tree Walk Node Cache");
+       status = acpi_ut_create_caches();
+       if (ACPI_FAILURE(status)) {
+               return;
+       }
 
        /* ACPI table structure */
 
-       for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++)
-       {
-               acpi_gbl_table_lists[i].next        = NULL;
-               acpi_gbl_table_lists[i].count       = 0;
+       for (i = 0; i < NUM_ACPI_TABLE_TYPES; i++) {
+               acpi_gbl_table_lists[i].next = NULL;
+               acpi_gbl_table_lists[i].count = 0;
        }
 
        /* Mutex locked flags */
 
-       for (i = 0; i < NUM_MUTEX; i++)
-       {
-               acpi_gbl_mutex_info[i].mutex        = NULL;
-               acpi_gbl_mutex_info[i].owner_id     = ACPI_MUTEX_NOT_ACQUIRED;
-               acpi_gbl_mutex_info[i].use_count    = 0;
+       for (i = 0; i < NUM_MUTEX; i++) {
+               acpi_gbl_mutex_info[i].mutex = NULL;
+               acpi_gbl_mutex_info[i].thread_id = ACPI_MUTEX_NOT_ACQUIRED;
+               acpi_gbl_mutex_info[i].use_count = 0;
        }
 
        /* GPE support */
 
-       acpi_gbl_gpe_xrupt_list_head        = NULL;
-       acpi_gbl_gpe_fadt_blocks[0]         = NULL;
-       acpi_gbl_gpe_fadt_blocks[1]         = NULL;
+       acpi_gbl_gpe_xrupt_list_head = NULL;
+       acpi_gbl_gpe_fadt_blocks[0] = NULL;
+       acpi_gbl_gpe_fadt_blocks[1] = NULL;
 
        /* Global notify handlers */
 
-       acpi_gbl_system_notify.handler      = NULL;
-       acpi_gbl_device_notify.handler      = NULL;
-       acpi_gbl_exception_handler          = NULL;
-       acpi_gbl_init_handler               = NULL;
+       acpi_gbl_system_notify.handler = NULL;
+       acpi_gbl_device_notify.handler = NULL;
+       acpi_gbl_exception_handler = NULL;
+       acpi_gbl_init_handler = NULL;
 
        /* Global "typed" ACPI table pointers */
 
-       acpi_gbl_RSDP                       = NULL;
-       acpi_gbl_XSDT                       = NULL;
-       acpi_gbl_FACS                       = NULL;
-       acpi_gbl_FADT                       = NULL;
-       acpi_gbl_DSDT                       = NULL;
+       acpi_gbl_RSDP = NULL;
+       acpi_gbl_XSDT = NULL;
+       acpi_gbl_FACS = NULL;
+       acpi_gbl_FADT = NULL;
+       acpi_gbl_DSDT = NULL;
 
        /* Global Lock support */
 
-       acpi_gbl_global_lock_acquired       = FALSE;
-       acpi_gbl_global_lock_thread_count   = 0;
-       acpi_gbl_global_lock_handle         = 0;
+       acpi_gbl_global_lock_acquired = FALSE;
+       acpi_gbl_global_lock_thread_count = 0;
+       acpi_gbl_global_lock_handle = 0;
 
        /* Miscellaneous variables */
 
-       acpi_gbl_table_flags                = ACPI_PHYSICAL_POINTER;
-       acpi_gbl_rsdp_original_location     = 0;
-       acpi_gbl_cm_single_step             = FALSE;
-       acpi_gbl_db_terminate_threads       = FALSE;
-       acpi_gbl_shutdown                   = FALSE;
-       acpi_gbl_ns_lookup_count            = 0;
-       acpi_gbl_ps_find_count              = 0;
-       acpi_gbl_acpi_hardware_present      = TRUE;
-       acpi_gbl_next_table_owner_id        = ACPI_FIRST_TABLE_ID;
-       acpi_gbl_next_method_owner_id       = ACPI_FIRST_METHOD_ID;
-       acpi_gbl_debugger_configuration     = DEBUGGER_THREADING;
-       acpi_gbl_db_output_flags            = ACPI_DB_CONSOLE_OUTPUT;
+       acpi_gbl_table_flags = ACPI_PHYSICAL_POINTER;
+       acpi_gbl_rsdp_original_location = 0;
+       acpi_gbl_cm_single_step = FALSE;
+       acpi_gbl_db_terminate_threads = FALSE;
+       acpi_gbl_shutdown = FALSE;
+       acpi_gbl_ns_lookup_count = 0;
+       acpi_gbl_ps_find_count = 0;
+       acpi_gbl_acpi_hardware_present = TRUE;
+       acpi_gbl_owner_id_mask = 0;
+       acpi_gbl_debugger_configuration = DEBUGGER_THREADING;
+       acpi_gbl_db_output_flags = ACPI_DB_CONSOLE_OUTPUT;
 
        /* Hardware oriented */
 
-       acpi_gbl_events_initialized         = FALSE;
-       acpi_gbl_system_awake_and_running   = TRUE;
+       acpi_gbl_events_initialized = FALSE;
+       acpi_gbl_system_awake_and_running = TRUE;
 
        /* Namespace */
 
-       acpi_gbl_root_node                  = NULL;
+       acpi_gbl_root_node = NULL;
 
        acpi_gbl_root_node_struct.name.integer = ACPI_ROOT_NAME;
        acpi_gbl_root_node_struct.descriptor = ACPI_DESC_TYPE_NAMED;
-       acpi_gbl_root_node_struct.type      = ACPI_TYPE_DEVICE;
-       acpi_gbl_root_node_struct.child     = NULL;
-       acpi_gbl_root_node_struct.peer      = NULL;
-       acpi_gbl_root_node_struct.object    = NULL;
-       acpi_gbl_root_node_struct.flags     = ANOBJ_END_OF_PEER_LIST;
-
+       acpi_gbl_root_node_struct.type = ACPI_TYPE_DEVICE;
+       acpi_gbl_root_node_struct.child = NULL;
+       acpi_gbl_root_node_struct.peer = NULL;
+       acpi_gbl_root_node_struct.object = NULL;
+       acpi_gbl_root_node_struct.flags = ANOBJ_END_OF_PEER_LIST;
 
 #ifdef ACPI_DEBUG_OUTPUT
-       acpi_gbl_lowest_stack_pointer       = ACPI_SIZE_MAX;
+       acpi_gbl_lowest_stack_pointer = ACPI_SIZE_MAX;
 #endif
 
        return_VOID;
 }
-
-
index 7f3713889ff02eae471ec94d1c59097728345f75..9dde82b0beaf537f33a9d6a5612234b157d646ca 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acevents.h>
 
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utinit")
+ACPI_MODULE_NAME("utinit")
 
 /* Local prototypes */
-
 static void
-acpi_ut_fadt_register_error (
-       char                            *register_name,
-       u32                             value,
-       acpi_size                       offset);
-
-static void acpi_ut_terminate (
-       void);
+acpi_ut_fadt_register_error(char *register_name, u32 value, acpi_size offset);
 
+static void acpi_ut_terminate(void);
 
 /*******************************************************************************
  *
@@ -76,18 +69,14 @@ static void acpi_ut_terminate (
  ******************************************************************************/
 
 static void
-acpi_ut_fadt_register_error (
-       char                            *register_name,
-       u32                             value,
-       acpi_size                       offset)
+acpi_ut_fadt_register_error(char *register_name, u32 value, acpi_size offset)
 {
 
-       ACPI_REPORT_WARNING (
-               ("Invalid FADT value %s=%X at offset %X FADT=%p\n",
-               register_name, value, (u32) offset, acpi_gbl_FADT));
+       ACPI_REPORT_WARNING(("Invalid FADT value %s=%X at offset %X FADT=%p\n",
+                            register_name, value, (u32) offset,
+                            acpi_gbl_FADT));
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_ut_validate_fadt
@@ -100,9 +89,7 @@ acpi_ut_fadt_register_error (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_ut_validate_fadt (
-       void)
+acpi_status acpi_ut_validate_fadt(void)
 {
 
        /*
@@ -110,64 +97,66 @@ acpi_ut_validate_fadt (
         * but don't abort on any problems, just display error
         */
        if (acpi_gbl_FADT->pm1_evt_len < 4) {
-               acpi_ut_fadt_register_error ("PM1_EVT_LEN",
-                                 (u32) acpi_gbl_FADT->pm1_evt_len,
-                                 ACPI_FADT_OFFSET (pm1_evt_len));
+               acpi_ut_fadt_register_error("PM1_EVT_LEN",
+                                           (u32) acpi_gbl_FADT->pm1_evt_len,
+                                           ACPI_FADT_OFFSET(pm1_evt_len));
        }
 
        if (!acpi_gbl_FADT->pm1_cnt_len) {
-               acpi_ut_fadt_register_error ("PM1_CNT_LEN", 0,
-                                 ACPI_FADT_OFFSET (pm1_cnt_len));
+               acpi_ut_fadt_register_error("PM1_CNT_LEN", 0,
+                                           ACPI_FADT_OFFSET(pm1_cnt_len));
        }
 
        if (!acpi_gbl_FADT->xpm1a_evt_blk.address) {
-               acpi_ut_fadt_register_error ("X_PM1a_EVT_BLK", 0,
-                                 ACPI_FADT_OFFSET (xpm1a_evt_blk.address));
+               acpi_ut_fadt_register_error("X_PM1a_EVT_BLK", 0,
+                                           ACPI_FADT_OFFSET(xpm1a_evt_blk.
+                                                            address));
        }
 
        if (!acpi_gbl_FADT->xpm1a_cnt_blk.address) {
-               acpi_ut_fadt_register_error ("X_PM1a_CNT_BLK", 0,
-                                 ACPI_FADT_OFFSET (xpm1a_cnt_blk.address));
+               acpi_ut_fadt_register_error("X_PM1a_CNT_BLK", 0,
+                                           ACPI_FADT_OFFSET(xpm1a_cnt_blk.
+                                                            address));
        }
 
        if (!acpi_gbl_FADT->xpm_tmr_blk.address) {
-               acpi_ut_fadt_register_error ("X_PM_TMR_BLK", 0,
-                                 ACPI_FADT_OFFSET (xpm_tmr_blk.address));
+               acpi_ut_fadt_register_error("X_PM_TMR_BLK", 0,
+                                           ACPI_FADT_OFFSET(xpm_tmr_blk.
+                                                            address));
        }
 
        if ((acpi_gbl_FADT->xpm2_cnt_blk.address &&
-               !acpi_gbl_FADT->pm2_cnt_len)) {
-               acpi_ut_fadt_register_error ("PM2_CNT_LEN",
-                                 (u32) acpi_gbl_FADT->pm2_cnt_len,
-                                 ACPI_FADT_OFFSET (pm2_cnt_len));
+            !acpi_gbl_FADT->pm2_cnt_len)) {
+               acpi_ut_fadt_register_error("PM2_CNT_LEN",
+                                           (u32) acpi_gbl_FADT->pm2_cnt_len,
+                                           ACPI_FADT_OFFSET(pm2_cnt_len));
        }
 
        if (acpi_gbl_FADT->pm_tm_len < 4) {
-               acpi_ut_fadt_register_error ("PM_TM_LEN",
-                                 (u32) acpi_gbl_FADT->pm_tm_len,
-                                 ACPI_FADT_OFFSET (pm_tm_len));
+               acpi_ut_fadt_register_error("PM_TM_LEN",
+                                           (u32) acpi_gbl_FADT->pm_tm_len,
+                                           ACPI_FADT_OFFSET(pm_tm_len));
        }
 
        /* Length of GPE blocks must be a multiple of 2 */
 
        if (acpi_gbl_FADT->xgpe0_blk.address &&
-               (acpi_gbl_FADT->gpe0_blk_len & 1)) {
-               acpi_ut_fadt_register_error ("(x)GPE0_BLK_LEN",
-                                 (u32) acpi_gbl_FADT->gpe0_blk_len,
-                                 ACPI_FADT_OFFSET (gpe0_blk_len));
+           (acpi_gbl_FADT->gpe0_blk_len & 1)) {
+               acpi_ut_fadt_register_error("(x)GPE0_BLK_LEN",
+                                           (u32) acpi_gbl_FADT->gpe0_blk_len,
+                                           ACPI_FADT_OFFSET(gpe0_blk_len));
        }
 
        if (acpi_gbl_FADT->xgpe1_blk.address &&
-               (acpi_gbl_FADT->gpe1_blk_len & 1)) {
-               acpi_ut_fadt_register_error ("(x)GPE1_BLK_LEN",
-                                 (u32) acpi_gbl_FADT->gpe1_blk_len,
-                                 ACPI_FADT_OFFSET (gpe1_blk_len));
+           (acpi_gbl_FADT->gpe1_blk_len & 1)) {
+               acpi_ut_fadt_register_error("(x)GPE1_BLK_LEN",
+                                           (u32) acpi_gbl_FADT->gpe1_blk_len,
+                                           ACPI_FADT_OFFSET(gpe1_blk_len));
        }
 
        return (AE_OK);
 }
 
-
 /******************************************************************************
  *
  * FUNCTION:    acpi_ut_terminate
@@ -180,18 +169,14 @@ acpi_ut_validate_fadt (
  *
  ******************************************************************************/
 
-static void
-acpi_ut_terminate (
-       void)
+static void acpi_ut_terminate(void)
 {
-       struct acpi_gpe_block_info      *gpe_block;
-       struct acpi_gpe_block_info      *next_gpe_block;
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info;
-       struct acpi_gpe_xrupt_info      *next_gpe_xrupt_info;
-
-
-       ACPI_FUNCTION_TRACE ("ut_terminate");
+       struct acpi_gpe_block_info *gpe_block;
+       struct acpi_gpe_block_info *next_gpe_block;
+       struct acpi_gpe_xrupt_info *gpe_xrupt_info;
+       struct acpi_gpe_xrupt_info *next_gpe_xrupt_info;
 
+       ACPI_FUNCTION_TRACE("ut_terminate");
 
        /* Free global tables, etc. */
        /* Free global GPE blocks and related info structures */
@@ -201,21 +186,20 @@ acpi_ut_terminate (
                gpe_block = gpe_xrupt_info->gpe_block_list_head;
                while (gpe_block) {
                        next_gpe_block = gpe_block->next;
-                       ACPI_MEM_FREE (gpe_block->event_info);
-                       ACPI_MEM_FREE (gpe_block->register_info);
-                       ACPI_MEM_FREE (gpe_block);
+                       ACPI_MEM_FREE(gpe_block->event_info);
+                       ACPI_MEM_FREE(gpe_block->register_info);
+                       ACPI_MEM_FREE(gpe_block);
 
                        gpe_block = next_gpe_block;
                }
                next_gpe_xrupt_info = gpe_xrupt_info->next;
-               ACPI_MEM_FREE (gpe_xrupt_info);
+               ACPI_MEM_FREE(gpe_xrupt_info);
                gpe_xrupt_info = next_gpe_xrupt_info;
        }
 
        return_VOID;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_subsystem_shutdown
@@ -229,50 +213,45 @@ acpi_ut_terminate (
  *
  ******************************************************************************/
 
-void
-acpi_ut_subsystem_shutdown (
-       void)
+void acpi_ut_subsystem_shutdown(void)
 {
 
-       ACPI_FUNCTION_TRACE ("ut_subsystem_shutdown");
+       ACPI_FUNCTION_TRACE("ut_subsystem_shutdown");
 
        /* Just exit if subsystem is already shutdown */
 
        if (acpi_gbl_shutdown) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "ACPI Subsystem is already terminated\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "ACPI Subsystem is already terminated\n"));
                return_VOID;
        }
 
        /* Subsystem appears active, go ahead and shut it down */
 
        acpi_gbl_shutdown = TRUE;
-       ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-               "Shutting down ACPI Subsystem...\n"));
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Shutting down ACPI Subsystem...\n"));
 
        /* Close the acpi_event Handling */
 
-       acpi_ev_terminate ();
+       acpi_ev_terminate();
 
        /* Close the Namespace */
 
-       acpi_ns_terminate ();
+       acpi_ns_terminate();
 
        /* Close the globals */
 
-       acpi_ut_terminate ();
+       acpi_ut_terminate();
 
        /* Purge the local caches */
 
-       (void) acpi_purge_cached_objects ();
+       (void)acpi_ut_delete_caches();
 
        /* Debug only - display leftover memory allocation, if any */
 
 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
-       acpi_ut_dump_allocations (ACPI_UINT32_MAX, NULL);
+       acpi_ut_dump_allocations(ACPI_UINT32_MAX, NULL);
 #endif
 
        return_VOID;
 }
-
-
index 0d527c91543cbcbb3d202d1e92e8cf9d28f8aed9..68a0a6f94129845e401e43557326b04d524b7178 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 
-
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utmath")
+ACPI_MODULE_NAME("utmath")
 
 /*
  * Support for double-precision integer divide.  This code is included here
  * in order to support kernel environments where the double-precision math
  * library is not available.
  */
-
 #ifndef ACPI_USE_NATIVE_DIVIDE
 /*******************************************************************************
  *
  *              32-bit remainder.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ut_short_divide (
-       acpi_integer                    dividend,
-       u32                             divisor,
-       acpi_integer                    *out_quotient,
-       u32                             *out_remainder)
+acpi_ut_short_divide(acpi_integer dividend,
+                    u32 divisor,
+                    acpi_integer * out_quotient, u32 * out_remainder)
 {
-       union uint64_overlay            dividend_ovl;
-       union uint64_overlay            quotient;
-       u32                             remainder32;
-
-
-       ACPI_FUNCTION_TRACE ("ut_short_divide");
+       union uint64_overlay dividend_ovl;
+       union uint64_overlay quotient;
+       u32 remainder32;
 
+       ACPI_FUNCTION_TRACE("ut_short_divide");
 
        /* Always check for a zero divisor */
 
        if (divisor == 0) {
-               ACPI_REPORT_ERROR (("acpi_ut_short_divide: Divide by zero\n"));
-               return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO);
+               ACPI_REPORT_ERROR(("acpi_ut_short_divide: Divide by zero\n"));
+               return_ACPI_STATUS(AE_AML_DIVIDE_BY_ZERO);
        }
 
        dividend_ovl.full = dividend;
@@ -100,9 +92,9 @@ acpi_ut_short_divide (
         * The quotient is 64 bits, the remainder is always 32 bits,
         * and is generated by the second divide.
         */
-       ACPI_DIV_64_BY_32 (0, dividend_ovl.part.hi, divisor,
+       ACPI_DIV_64_BY_32(0, dividend_ovl.part.hi, divisor,
                          quotient.part.hi, remainder32);
-       ACPI_DIV_64_BY_32 (remainder32, dividend_ovl.part.lo, divisor,
+       ACPI_DIV_64_BY_32(remainder32, dividend_ovl.part.lo, divisor,
                          quotient.part.lo, remainder32);
 
        /* Return only what was requested */
@@ -114,10 +106,9 @@ acpi_ut_short_divide (
                *out_remainder = remainder32;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_divide
@@ -134,34 +125,30 @@ acpi_ut_short_divide (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_divide (
-       acpi_integer                    in_dividend,
-       acpi_integer                    in_divisor,
-       acpi_integer                    *out_quotient,
-       acpi_integer                    *out_remainder)
+acpi_ut_divide(acpi_integer in_dividend,
+              acpi_integer in_divisor,
+              acpi_integer * out_quotient, acpi_integer * out_remainder)
 {
-       union uint64_overlay            dividend;
-       union uint64_overlay            divisor;
-       union uint64_overlay            quotient;
-       union uint64_overlay            remainder;
-       union uint64_overlay            normalized_dividend;
-       union uint64_overlay            normalized_divisor;
-       u32                             partial1;
-       union uint64_overlay            partial2;
-       union uint64_overlay            partial3;
-
-
-       ACPI_FUNCTION_TRACE ("ut_divide");
-
+       union uint64_overlay dividend;
+       union uint64_overlay divisor;
+       union uint64_overlay quotient;
+       union uint64_overlay remainder;
+       union uint64_overlay normalized_dividend;
+       union uint64_overlay normalized_divisor;
+       u32 partial1;
+       union uint64_overlay partial2;
+       union uint64_overlay partial3;
+
+       ACPI_FUNCTION_TRACE("ut_divide");
 
        /* Always check for a zero divisor */
 
        if (in_divisor == 0) {
-               ACPI_REPORT_ERROR (("acpi_ut_divide: Divide by zero\n"));
-               return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO);
+               ACPI_REPORT_ERROR(("acpi_ut_divide: Divide by zero\n"));
+               return_ACPI_STATUS(AE_AML_DIVIDE_BY_ZERO);
        }
 
-       divisor.full  = in_divisor;
+       divisor.full = in_divisor;
        dividend.full = in_dividend;
        if (divisor.part.hi == 0) {
                /*
@@ -174,9 +161,9 @@ acpi_ut_divide (
                 * The quotient is 64 bits, the remainder is always 32 bits,
                 * and is generated by the second divide.
                 */
-               ACPI_DIV_64_BY_32 (0, dividend.part.hi, divisor.part.lo,
+               ACPI_DIV_64_BY_32(0, dividend.part.hi, divisor.part.lo,
                                  quotient.part.hi, partial1);
-               ACPI_DIV_64_BY_32 (partial1, dividend.part.lo, divisor.part.lo,
+               ACPI_DIV_64_BY_32(partial1, dividend.part.lo, divisor.part.lo,
                                  quotient.part.lo, remainder.part.lo);
        }
 
@@ -185,23 +172,23 @@ acpi_ut_divide (
                 * 2) The general case where the divisor is a full 64 bits
                 * is more difficult
                 */
-               quotient.part.hi   = 0;
+               quotient.part.hi = 0;
                normalized_dividend = dividend;
                normalized_divisor = divisor;
 
                /* Normalize the operands (shift until the divisor is < 32 bits) */
 
                do {
-                       ACPI_SHIFT_RIGHT_64 (normalized_divisor.part.hi,
-                                        normalized_divisor.part.lo);
-                       ACPI_SHIFT_RIGHT_64 (normalized_dividend.part.hi,
-                                        normalized_dividend.part.lo);
+                       ACPI_SHIFT_RIGHT_64(normalized_divisor.part.hi,
+                                           normalized_divisor.part.lo);
+                       ACPI_SHIFT_RIGHT_64(normalized_dividend.part.hi,
+                                           normalized_dividend.part.lo);
 
                } while (normalized_divisor.part.hi != 0);
 
                /* Partial divide */
 
-               ACPI_DIV_64_BY_32 (normalized_dividend.part.hi,
+               ACPI_DIV_64_BY_32(normalized_dividend.part.hi,
                                  normalized_dividend.part.lo,
                                  normalized_divisor.part.lo,
                                  quotient.part.lo, partial1);
@@ -210,8 +197,9 @@ acpi_ut_divide (
                 * The quotient is always 32 bits, and simply requires adjustment.
                 * The 64-bit remainder must be generated.
                 */
-               partial1      = quotient.part.lo * divisor.part.hi;
-               partial2.full = (acpi_integer) quotient.part.lo * divisor.part.lo;
+               partial1 = quotient.part.lo * divisor.part.hi;
+               partial2.full =
+                   (acpi_integer) quotient.part.lo * divisor.part.lo;
                partial3.full = (acpi_integer) partial2.part.hi + partial1;
 
                remainder.part.hi = partial3.part.lo;
@@ -224,16 +212,15 @@ acpi_ut_divide (
                                                quotient.part.lo--;
                                                remainder.full -= divisor.full;
                                        }
-                               }
-                               else {
+                               } else {
                                        quotient.part.lo--;
                                        remainder.full -= divisor.full;
                                }
                        }
 
-                       remainder.full    = remainder.full - dividend.full;
-                       remainder.part.hi = (u32) -((s32) remainder.part.hi);
-                       remainder.part.lo = (u32) -((s32) remainder.part.lo);
+                       remainder.full = remainder.full - dividend.full;
+                       remainder.part.hi = (u32) - ((s32) remainder.part.hi);
+                       remainder.part.lo = (u32) - ((s32) remainder.part.lo);
 
                        if (remainder.part.lo) {
                                remainder.part.hi--;
@@ -250,11 +237,10 @@ acpi_ut_divide (
                *out_remainder = remainder.full;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
 #else
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_short_divide, acpi_ut_divide
@@ -269,23 +255,19 @@ acpi_ut_divide (
  *                 perform the divide.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ut_short_divide (
-       acpi_integer                    in_dividend,
-       u32                             divisor,
-       acpi_integer                    *out_quotient,
-       u32                             *out_remainder)
+acpi_ut_short_divide(acpi_integer in_dividend,
+                    u32 divisor,
+                    acpi_integer * out_quotient, u32 * out_remainder)
 {
 
-       ACPI_FUNCTION_TRACE ("ut_short_divide");
-
+       ACPI_FUNCTION_TRACE("ut_short_divide");
 
        /* Always check for a zero divisor */
 
        if (divisor == 0) {
-               ACPI_REPORT_ERROR (("acpi_ut_short_divide: Divide by zero\n"));
-               return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO);
+               ACPI_REPORT_ERROR(("acpi_ut_short_divide: Divide by zero\n"));
+               return_ACPI_STATUS(AE_AML_DIVIDE_BY_ZERO);
        }
 
        /* Return only what was requested */
@@ -297,27 +279,23 @@ acpi_ut_short_divide (
                *out_remainder = (u32) in_dividend % divisor;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
 acpi_status
-acpi_ut_divide (
-       acpi_integer                    in_dividend,
-       acpi_integer                    in_divisor,
-       acpi_integer                    *out_quotient,
-       acpi_integer                    *out_remainder)
+acpi_ut_divide(acpi_integer in_dividend,
+              acpi_integer in_divisor,
+              acpi_integer * out_quotient, acpi_integer * out_remainder)
 {
-       ACPI_FUNCTION_TRACE ("ut_divide");
-
+       ACPI_FUNCTION_TRACE("ut_divide");
 
        /* Always check for a zero divisor */
 
        if (in_divisor == 0) {
-               ACPI_REPORT_ERROR (("acpi_ut_divide: Divide by zero\n"));
-               return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO);
+               ACPI_REPORT_ERROR(("acpi_ut_divide: Divide by zero\n"));
+               return_ACPI_STATUS(AE_AML_DIVIDE_BY_ZERO);
        }
 
-
        /* Return only what was requested */
 
        if (out_quotient) {
@@ -327,9 +305,7 @@ acpi_ut_divide (
                *out_remainder = in_dividend % in_divisor;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
 #endif
-
-
index f6de4ed3d527b713146369096ca59f06f342726b..0c5abc536c7ad1deb1f7db7e55c410ccf289a591 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 
-
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utmisc")
+ACPI_MODULE_NAME("utmisc")
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_allocate_owner_id
+ *
+ * PARAMETERS:  owner_id        - Where the new owner ID is returned
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Allocate a table or method owner ID. The owner ID is used to
+ *              track objects created by the table or method, to be deleted
+ *              when the method exits or the table is unloaded.
+ *
+ ******************************************************************************/
+acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id)
+{
+       acpi_native_uint i;
+       acpi_status status;
+
+       ACPI_FUNCTION_TRACE("ut_allocate_owner_id");
+
+       /* Guard against multiple allocations of ID to the same location */
+
+       if (*owner_id) {
+               ACPI_REPORT_ERROR(("Owner ID [%2.2X] already exists\n",
+                                  *owner_id));
+               return_ACPI_STATUS(AE_ALREADY_EXISTS);
+       }
+
+       /* Mutex for the global ID mask */
+
+       status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
+       }
 
-/* Local prototypes */
+       /* Find a free owner ID */
 
-static acpi_status
-acpi_ut_create_mutex (
-       acpi_mutex_handle               mutex_id);
+       for (i = 0; i < 32; i++) {
+               if (!(acpi_gbl_owner_id_mask & (1 << i))) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_VALUES,
+                                         "Current owner_id mask: %8.8X New ID: %2.2X\n",
+                                         acpi_gbl_owner_id_mask,
+                                         (unsigned int)(i + 1)));
 
-static acpi_status
-acpi_ut_delete_mutex (
-       acpi_mutex_handle               mutex_id);
+                       acpi_gbl_owner_id_mask |= (1 << i);
+                       *owner_id = (acpi_owner_id) (i + 1);
+                       goto exit;
+               }
+       }
 
+       /*
+        * If we are here, all owner_ids have been allocated. This probably should
+        * not happen since the IDs are reused after deallocation. The IDs are
+        * allocated upon table load (one per table) and method execution, and
+        * they are released when a table is unloaded or a method completes
+        * execution.
+        */
+       *owner_id = 0;
+       status = AE_OWNER_ID_LIMIT;
+       ACPI_REPORT_ERROR(("Could not allocate new owner_id (32 max), AE_OWNER_ID_LIMIT\n"));
+
+      exit:
+       (void)acpi_ut_release_mutex(ACPI_MTX_CACHES);
+       return_ACPI_STATUS(status);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_release_owner_id
+ *
+ * PARAMETERS:  owner_id_ptr        - Pointer to a previously allocated owner_iD
+ *
+ * RETURN:      None. No error is returned because we are either exiting a
+ *              control method or unloading a table. Either way, we would
+ *              ignore any error anyway.
+ *
+ * DESCRIPTION: Release a table or method owner ID.  Valid IDs are 1 - 32
+ *
+ ******************************************************************************/
+
+void acpi_ut_release_owner_id(acpi_owner_id * owner_id_ptr)
+{
+       acpi_owner_id owner_id = *owner_id_ptr;
+       acpi_status status;
+
+       ACPI_FUNCTION_TRACE_U32("ut_release_owner_id", owner_id);
+
+       /* Always clear the input owner_id (zero is an invalid ID) */
+
+       *owner_id_ptr = 0;
+
+       /* Zero is not a valid owner_iD */
+
+       if ((owner_id == 0) || (owner_id > 32)) {
+               ACPI_REPORT_ERROR(("Invalid owner_id: %2.2X\n", owner_id));
+               return_VOID;
+       }
+
+       /* Mutex for the global ID mask */
+
+       status = acpi_ut_acquire_mutex(ACPI_MTX_CACHES);
+       if (ACPI_FAILURE(status)) {
+               return_VOID;
+       }
+
+       /* Normalize the ID to zero */
+
+       owner_id--;
+
+       /* Free the owner ID only if it is valid */
+
+       if (acpi_gbl_owner_id_mask & (1 << owner_id)) {
+               acpi_gbl_owner_id_mask ^= (1 << owner_id);
+       }
+
+       (void)acpi_ut_release_mutex(ACPI_MTX_CACHES);
+       return_VOID;
+}
 
 /*******************************************************************************
  *
@@ -66,7 +172,7 @@ acpi_ut_delete_mutex (
  *
  * PARAMETERS:  src_string      - The source string to convert
  *
- * RETURN:      Converted src_string (same as input pointer)
+ * RETURN:      None
  *
  * DESCRIPTION: Convert string to uppercase
  *
@@ -74,26 +180,25 @@ acpi_ut_delete_mutex (
  *
  ******************************************************************************/
 
-char *
-acpi_ut_strupr (
-       char                            *src_string)
+void acpi_ut_strupr(char *src_string)
 {
-       char                            *string;
-
+       char *string;
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
+       if (!src_string) {
+               return;
+       }
 
        /* Walk entire string, uppercasing the letters */
 
        for (string = src_string; *string; string++) {
-               *string = (char) ACPI_TOUPPER (*string);
+               *string = (char)ACPI_TOUPPER(*string);
        }
 
-       return (src_string);
+       return;
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_print_string
@@ -108,85 +213,77 @@ acpi_ut_strupr (
  *
  ******************************************************************************/
 
-void
-acpi_ut_print_string (
-       char                            *string,
-       u8                              max_length)
+void acpi_ut_print_string(char *string, u8 max_length)
 {
-       u32                             i;
-
+       u32 i;
 
        if (!string) {
-               acpi_os_printf ("<\"NULL STRING PTR\">");
+               acpi_os_printf("<\"NULL STRING PTR\">");
                return;
        }
 
-       acpi_os_printf ("\"");
+       acpi_os_printf("\"");
        for (i = 0; string[i] && (i < max_length); i++) {
                /* Escape sequences */
 
                switch (string[i]) {
                case 0x07:
-                       acpi_os_printf ("\\a");      /* BELL */
+                       acpi_os_printf("\\a");  /* BELL */
                        break;
 
                case 0x08:
-                       acpi_os_printf ("\\b");     /* BACKSPACE */
+                       acpi_os_printf("\\b");  /* BACKSPACE */
                        break;
 
                case 0x0C:
-                       acpi_os_printf ("\\f");     /* FORMFEED */
+                       acpi_os_printf("\\f");  /* FORMFEED */
                        break;
 
                case 0x0A:
-                       acpi_os_printf ("\\n");     /* LINEFEED */
+                       acpi_os_printf("\\n");  /* LINEFEED */
                        break;
 
                case 0x0D:
-                       acpi_os_printf ("\\r");     /* CARRIAGE RETURN*/
+                       acpi_os_printf("\\r");  /* CARRIAGE RETURN */
                        break;
 
                case 0x09:
-                       acpi_os_printf ("\\t");     /* HORIZONTAL TAB */
+                       acpi_os_printf("\\t");  /* HORIZONTAL TAB */
                        break;
 
                case 0x0B:
-                       acpi_os_printf ("\\v");     /* VERTICAL TAB */
+                       acpi_os_printf("\\v");  /* VERTICAL TAB */
                        break;
 
-               case '\'':                      /* Single Quote */
-               case '\"':                      /* Double Quote */
-               case '\\':                      /* Backslash */
-                       acpi_os_printf ("\\%c", (int) string[i]);
+               case '\'':      /* Single Quote */
+               case '\"':      /* Double Quote */
+               case '\\':      /* Backslash */
+                       acpi_os_printf("\\%c", (int)string[i]);
                        break;
 
                default:
 
                        /* Check for printable character or hex escape */
 
-                       if (ACPI_IS_PRINT (string[i]))
-                       {
+                       if (ACPI_IS_PRINT(string[i])) {
                                /* This is a normal character */
 
-                               acpi_os_printf ("%c", (int) string[i]);
-                       }
-                       else
-                       {
+                               acpi_os_printf("%c", (int)string[i]);
+                       } else {
                                /* All others will be Hex escapes */
 
-                               acpi_os_printf ("\\x%2.2X", (s32) string[i]);
+                               acpi_os_printf("\\x%2.2X", (s32) string[i]);
                        }
                        break;
                }
        }
-       acpi_os_printf ("\"");
+       acpi_os_printf("\"");
 
        if (i == max_length && string[i]) {
-               acpi_os_printf ("...");
+               acpi_os_printf("...");
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_dword_byte_swap
@@ -199,22 +296,18 @@ acpi_ut_print_string (
  *
  ******************************************************************************/
 
-u32
-acpi_ut_dword_byte_swap (
-       u32                             value)
+u32 acpi_ut_dword_byte_swap(u32 value)
 {
        union {
-               u32                         value;
-               u8                          bytes[4];
+               u32 value;
+               u8 bytes[4];
        } out;
        union {
-               u32                         value;
-               u8                          bytes[4];
+               u32 value;
+               u8 bytes[4];
        } in;
 
-
-       ACPI_FUNCTION_ENTRY ();
-
+       ACPI_FUNCTION_ENTRY();
 
        in.value = value;
 
@@ -226,7 +319,6 @@ acpi_ut_dword_byte_swap (
        return (out.value);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_set_integer_width
@@ -242,24 +334,20 @@ acpi_ut_dword_byte_swap (
  *
  ******************************************************************************/
 
-void
-acpi_ut_set_integer_width (
-       u8                              revision)
+void acpi_ut_set_integer_width(u8 revision)
 {
 
        if (revision <= 1) {
                acpi_gbl_integer_bit_width = 32;
                acpi_gbl_integer_nybble_width = 8;
                acpi_gbl_integer_byte_width = 4;
-       }
-       else {
+       } else {
                acpi_gbl_integer_bit_width = 64;
                acpi_gbl_integer_nybble_width = 16;
                acpi_gbl_integer_byte_width = 8;
        }
 }
 
-
 #ifdef ACPI_DEBUG_OUTPUT
 /*******************************************************************************
  *
@@ -277,17 +365,14 @@ acpi_ut_set_integer_width (
  ******************************************************************************/
 
 void
-acpi_ut_display_init_pathname (
-       u8                              type,
-       struct acpi_namespace_node      *obj_handle,
-       char                            *path)
+acpi_ut_display_init_pathname(u8 type,
+                             struct acpi_namespace_node *obj_handle,
+                             char *path)
 {
-       acpi_status                     status;
-       struct acpi_buffer              buffer;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       acpi_status status;
+       struct acpi_buffer buffer;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* Only print the path if the appropriate debug level is enabled */
 
@@ -298,8 +383,8 @@ acpi_ut_display_init_pathname (
        /* Get the full pathname to the node */
 
        buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
-       status = acpi_ns_handle_to_pathname (obj_handle, &buffer);
-       if (ACPI_FAILURE (status)) {
+       status = acpi_ns_handle_to_pathname(obj_handle, &buffer);
+       if (ACPI_FAILURE(status)) {
                return;
        }
 
@@ -307,31 +392,30 @@ acpi_ut_display_init_pathname (
 
        switch (type) {
        case ACPI_TYPE_METHOD:
-               acpi_os_printf ("Executing  ");
+               acpi_os_printf("Executing  ");
                break;
 
        default:
-               acpi_os_printf ("Initializing ");
+               acpi_os_printf("Initializing ");
                break;
        }
 
        /* Print the object type and pathname */
 
-       acpi_os_printf ("%-12s %s",
-               acpi_ut_get_type_name (type), (char *) buffer.pointer);
+       acpi_os_printf("%-12s %s",
+                      acpi_ut_get_type_name(type), (char *)buffer.pointer);
 
        /* Extra path is used to append names like _STA, _INI, etc. */
 
        if (path) {
-               acpi_os_printf (".%s", path);
+               acpi_os_printf(".%s", path);
        }
-       acpi_os_printf ("\n");
+       acpi_os_printf("\n");
 
-       ACPI_MEM_FREE (buffer.pointer);
+       ACPI_MEM_FREE(buffer.pointer);
 }
 #endif
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_valid_acpi_name
@@ -347,25 +431,21 @@ acpi_ut_display_init_pathname (
  *
  ******************************************************************************/
 
-u8
-acpi_ut_valid_acpi_name (
-       u32                             name)
+u8 acpi_ut_valid_acpi_name(u32 name)
 {
-       char                            *name_ptr = (char *) &name;
-       char                            character;
-       acpi_native_uint                i;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       char *name_ptr = (char *)&name;
+       char character;
+       acpi_native_uint i;
 
+       ACPI_FUNCTION_ENTRY();
 
        for (i = 0; i < ACPI_NAME_SIZE; i++) {
                character = *name_ptr;
                name_ptr++;
 
                if (!((character == '_') ||
-                         (character >= 'A' && character <= 'Z') ||
-                         (character >= '0' && character <= '9'))) {
+                     (character >= 'A' && character <= 'Z') ||
+                     (character >= '0' && character <= '9'))) {
                        return (FALSE);
                }
        }
@@ -373,7 +453,6 @@ acpi_ut_valid_acpi_name (
        return (TRUE);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_valid_acpi_character
@@ -386,19 +465,16 @@ acpi_ut_valid_acpi_name (
  *
  ******************************************************************************/
 
-u8
-acpi_ut_valid_acpi_character (
-       char                            character)
+u8 acpi_ut_valid_acpi_character(char character)
 {
 
-       ACPI_FUNCTION_ENTRY ();
+       ACPI_FUNCTION_ENTRY();
 
-       return ((u8)   ((character == '_') ||
-                          (character >= 'A' && character <= 'Z') ||
-                          (character >= '0' && character <= '9')));
+       return ((u8) ((character == '_') ||
+                     (character >= 'A' && character <= 'Z') ||
+                     (character >= '0' && character <= '9')));
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_strtoul64
@@ -415,18 +491,13 @@ acpi_ut_valid_acpi_character (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_strtoul64 (
-       char                            *string,
-       u32                             base,
-       acpi_integer                    *ret_integer)
+acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer)
 {
-       u32                             this_digit = 0;
-       acpi_integer                    return_value = 0;
-       acpi_integer                    quotient;
-
-
-       ACPI_FUNCTION_TRACE ("ut_stroul64");
+       u32 this_digit = 0;
+       acpi_integer return_value = 0;
+       acpi_integer quotient;
 
+       ACPI_FUNCTION_TRACE("ut_stroul64");
 
        if ((!string) || !(*string)) {
                goto error_exit;
@@ -440,12 +511,12 @@ acpi_ut_strtoul64 (
 
        default:
                /* Invalid Base */
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /* Skip over any white space in the buffer */
 
-       while (ACPI_IS_SPACE (*string) || *string == '\t') {
+       while (ACPI_IS_SPACE(*string) || *string == '\t') {
                string++;
        }
 
@@ -454,12 +525,10 @@ acpi_ut_strtoul64 (
         * determine if it is decimal or hexadecimal:
         */
        if (base == 0) {
-               if ((*string == '0') &&
-                       (ACPI_TOLOWER (*(string + 1)) == 'x')) {
+               if ((*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) {
                        base = 16;
                        string += 2;
-               }
-               else {
+               } else {
                        base = 10;
                }
        }
@@ -469,8 +538,7 @@ acpi_ut_strtoul64 (
         * 0 or 0x, if they are present.
         */
        if ((base == 16) &&
-               (*string == '0') &&
-               (ACPI_TOLOWER (*(string + 1)) == 'x')) {
+           (*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) {
                string += 2;
        }
 
@@ -483,25 +551,23 @@ acpi_ut_strtoul64 (
        /* Main loop: convert the string to a 64-bit integer */
 
        while (*string) {
-               if (ACPI_IS_DIGIT (*string)) {
+               if (ACPI_IS_DIGIT(*string)) {
                        /* Convert ASCII 0-9 to Decimal value */
 
-                       this_digit = ((u8) *string) - '0';
-               }
-               else {
+                       this_digit = ((u8) * string) - '0';
+               } else {
                        if (base == 10) {
                                /* Digit is out of range */
 
                                goto error_exit;
                        }
 
-                       this_digit = (u8) ACPI_TOUPPER (*string);
-                       if (ACPI_IS_XDIGIT ((char) this_digit)) {
+                       this_digit = (u8) ACPI_TOUPPER(*string);
+                       if (ACPI_IS_XDIGIT((char)this_digit)) {
                                /* Convert ASCII Hex char to value */
 
                                this_digit = this_digit - 'A' + 10;
-                       }
-                       else {
+                       } else {
                                /*
                                 * We allow non-hex chars, just stop now, same as end-of-string.
                                 * See ACPI spec, string-to-integer conversion.
@@ -512,8 +578,10 @@ acpi_ut_strtoul64 (
 
                /* Divide the digit into the correct position */
 
-               (void) acpi_ut_short_divide ((ACPI_INTEGER_MAX - (acpi_integer) this_digit),
-                                base, &quotient, NULL);
+               (void)
+                   acpi_ut_short_divide((ACPI_INTEGER_MAX -
+                                         (acpi_integer) this_digit), base,
+                                        &quotient, NULL);
                if (return_value > quotient) {
                        goto error_exit;
                }
@@ -526,335 +594,18 @@ acpi_ut_strtoul64 (
        /* All done, normal exit */
 
        *ret_integer = return_value;
-       return_ACPI_STATUS (AE_OK);
-
+       return_ACPI_STATUS(AE_OK);
 
-error_exit:
+      error_exit:
        /* Base was set/validated above */
 
        if (base == 10) {
-               return_ACPI_STATUS (AE_BAD_DECIMAL_CONSTANT);
-       }
-       else {
-               return_ACPI_STATUS (AE_BAD_HEX_CONSTANT);
-       }
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_mutex_initialize
- *
- * PARAMETERS:  None.
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Create the system mutex objects.
- *
- ******************************************************************************/
-
-acpi_status
-acpi_ut_mutex_initialize (
-       void)
-{
-       u32                             i;
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("ut_mutex_initialize");
-
-
-       /*
-        * Create each of the predefined mutex objects
-        */
-       for (i = 0; i < NUM_MUTEX; i++) {
-               status = acpi_ut_create_mutex (i);
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
-               }
-       }
-
-       status = acpi_os_create_lock (&acpi_gbl_gpe_lock);
-       return_ACPI_STATUS (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_mutex_terminate
- *
- * PARAMETERS:  None.
- *
- * RETURN:      None.
- *
- * DESCRIPTION: Delete all of the system mutex objects.
- *
- ******************************************************************************/
-
-void
-acpi_ut_mutex_terminate (
-       void)
-{
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("ut_mutex_terminate");
-
-
-       /*
-        * Delete each predefined mutex object
-        */
-       for (i = 0; i < NUM_MUTEX; i++) {
-               (void) acpi_ut_delete_mutex (i);
-       }
-
-       acpi_os_delete_lock (acpi_gbl_gpe_lock);
-       return_VOID;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_create_mutex
- *
- * PARAMETERS:  mutex_iD        - ID of the mutex to be created
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Create a mutex object.
- *
- ******************************************************************************/
-
-static acpi_status
-acpi_ut_create_mutex (
-       acpi_mutex_handle               mutex_id)
-{
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ut_create_mutex", mutex_id);
-
-
-       if (mutex_id > MAX_MUTEX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
-       }
-
-       if (!acpi_gbl_mutex_info[mutex_id].mutex) {
-               status = acpi_os_create_semaphore (1, 1,
-                                 &acpi_gbl_mutex_info[mutex_id].mutex);
-               acpi_gbl_mutex_info[mutex_id].owner_id = ACPI_MUTEX_NOT_ACQUIRED;
-               acpi_gbl_mutex_info[mutex_id].use_count = 0;
-       }
-
-       return_ACPI_STATUS (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_delete_mutex
- *
- * PARAMETERS:  mutex_iD        - ID of the mutex to be deleted
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Delete a mutex object.
- *
- ******************************************************************************/
-
-static acpi_status
-acpi_ut_delete_mutex (
-       acpi_mutex_handle               mutex_id)
-{
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ut_delete_mutex", mutex_id);
-
-
-       if (mutex_id > MAX_MUTEX) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
-       }
-
-       status = acpi_os_delete_semaphore (acpi_gbl_mutex_info[mutex_id].mutex);
-
-       acpi_gbl_mutex_info[mutex_id].mutex = NULL;
-       acpi_gbl_mutex_info[mutex_id].owner_id = ACPI_MUTEX_NOT_ACQUIRED;
-
-       return_ACPI_STATUS (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_acquire_mutex
- *
- * PARAMETERS:  mutex_iD        - ID of the mutex to be acquired
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Acquire a mutex object.
- *
- ******************************************************************************/
-
-acpi_status
-acpi_ut_acquire_mutex (
-       acpi_mutex_handle               mutex_id)
-{
-       acpi_status                     status;
-       u32                             this_thread_id;
-
-
-       ACPI_FUNCTION_NAME ("ut_acquire_mutex");
-
-
-       if (mutex_id > MAX_MUTEX) {
-               return (AE_BAD_PARAMETER);
-       }
-
-       this_thread_id = acpi_os_get_thread_id ();
-
-#ifdef ACPI_MUTEX_DEBUG
-       {
-               u32                             i;
-               /*
-                * Mutex debug code, for internal debugging only.
-                *
-                * Deadlock prevention.  Check if this thread owns any mutexes of value
-                * greater than or equal to this one.  If so, the thread has violated
-                * the mutex ordering rule.  This indicates a coding error somewhere in
-                * the ACPI subsystem code.
-                */
-               for (i = mutex_id; i < MAX_MUTEX; i++) {
-                       if (acpi_gbl_mutex_info[i].owner_id == this_thread_id) {
-                               if (i == mutex_id) {
-                                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                               "Mutex [%s] already acquired by this thread [%X]\n",
-                                               acpi_ut_get_mutex_name (mutex_id), this_thread_id));
-
-                                       return (AE_ALREADY_ACQUIRED);
-                               }
-
-                               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                                       "Invalid acquire order: Thread %X owns [%s], wants [%s]\n",
-                                       this_thread_id, acpi_ut_get_mutex_name (i),
-                                       acpi_ut_get_mutex_name (mutex_id)));
-
-                               return (AE_ACQUIRE_DEADLOCK);
-                       }
-               }
-       }
-#endif
-
-       ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX,
-               "Thread %X attempting to acquire Mutex [%s]\n",
-               this_thread_id, acpi_ut_get_mutex_name (mutex_id)));
-
-       status = acpi_os_wait_semaphore (acpi_gbl_mutex_info[mutex_id].mutex,
-                          1, ACPI_WAIT_FOREVER);
-       if (ACPI_SUCCESS (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %X acquired Mutex [%s]\n",
-                       this_thread_id, acpi_ut_get_mutex_name (mutex_id)));
-
-               acpi_gbl_mutex_info[mutex_id].use_count++;
-               acpi_gbl_mutex_info[mutex_id].owner_id = this_thread_id;
-       }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Thread %X could not acquire Mutex [%s] %s\n",
-                               this_thread_id, acpi_ut_get_mutex_name (mutex_id),
-                               acpi_format_exception (status)));
-       }
-
-       return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_release_mutex
- *
- * PARAMETERS:  mutex_iD        - ID of the mutex to be released
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Release a mutex object.
- *
- ******************************************************************************/
-
-acpi_status
-acpi_ut_release_mutex (
-       acpi_mutex_handle               mutex_id)
-{
-       acpi_status                     status;
-       u32                             i;
-       u32                             this_thread_id;
-
-
-       ACPI_FUNCTION_NAME ("ut_release_mutex");
-
-
-       this_thread_id = acpi_os_get_thread_id ();
-       ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX,
-               "Thread %X releasing Mutex [%s]\n", this_thread_id,
-               acpi_ut_get_mutex_name (mutex_id)));
-
-       if (mutex_id > MAX_MUTEX) {
-               return (AE_BAD_PARAMETER);
-       }
-
-       /*
-        * Mutex must be acquired in order to release it!
-        */
-       if (acpi_gbl_mutex_info[mutex_id].owner_id == ACPI_MUTEX_NOT_ACQUIRED) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Mutex [%s] is not acquired, cannot release\n",
-                       acpi_ut_get_mutex_name (mutex_id)));
-
-               return (AE_NOT_ACQUIRED);
-       }
-
-       /*
-        * Deadlock prevention.  Check if this thread owns any mutexes of value
-        * greater than this one.  If so, the thread has violated the mutex
-        * ordering rule.  This indicates a coding error somewhere in
-        * the ACPI subsystem code.
-        */
-       for (i = mutex_id; i < MAX_MUTEX; i++) {
-               if (acpi_gbl_mutex_info[i].owner_id == this_thread_id) {
-                       if (i == mutex_id) {
-                               continue;
-                       }
-
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Invalid release order: owns [%s], releasing [%s]\n",
-                               acpi_ut_get_mutex_name (i), acpi_ut_get_mutex_name (mutex_id)));
-
-                       return (AE_RELEASE_DEADLOCK);
-               }
-       }
-
-       /* Mark unlocked FIRST */
-
-       acpi_gbl_mutex_info[mutex_id].owner_id = ACPI_MUTEX_NOT_ACQUIRED;
-
-       status = acpi_os_signal_semaphore (acpi_gbl_mutex_info[mutex_id].mutex, 1);
-
-       if (ACPI_FAILURE (status)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                       "Thread %X could not release Mutex [%s] %s\n",
-                       this_thread_id, acpi_ut_get_mutex_name (mutex_id),
-                       acpi_format_exception (status)));
+               return_ACPI_STATUS(AE_BAD_DECIMAL_CONSTANT);
+       } else {
+               return_ACPI_STATUS(AE_BAD_HEX_CONSTANT);
        }
-       else {
-               ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %X released Mutex [%s]\n",
-                       this_thread_id, acpi_ut_get_mutex_name (mutex_id)));
-       }
-
-       return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_create_update_state_and_push
@@ -870,16 +621,13 @@ acpi_ut_release_mutex (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_create_update_state_and_push (
-       union acpi_operand_object       *object,
-       u16                             action,
-       union acpi_generic_state        **state_list)
+acpi_ut_create_update_state_and_push(union acpi_operand_object *object,
+                                    u16 action,
+                                    union acpi_generic_state **state_list)
 {
-       union acpi_generic_state         *state;
-
-
-       ACPI_FUNCTION_ENTRY ();
+       union acpi_generic_state *state;
 
+       ACPI_FUNCTION_ENTRY();
 
        /* Ignore null objects; these are expected */
 
@@ -887,371 +635,15 @@ acpi_ut_create_update_state_and_push (
                return (AE_OK);
        }
 
-       state = acpi_ut_create_update_state (object, action);
+       state = acpi_ut_create_update_state(object, action);
        if (!state) {
                return (AE_NO_MEMORY);
        }
 
-       acpi_ut_push_generic_state (state_list, state);
+       acpi_ut_push_generic_state(state_list, state);
        return (AE_OK);
 }
 
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_create_pkg_state_and_push
- *
- * PARAMETERS:  Object          - Object to be added to the new state
- *              Action          - Increment/Decrement
- *              state_list      - List the state will be added to
- *
- * RETURN:      Status
- *
- * DESCRIPTION: Create a new state and push it
- *
- ******************************************************************************/
-
-#ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_ut_create_pkg_state_and_push (
-       void                            *internal_object,
-       void                            *external_object,
-       u16                             index,
-       union acpi_generic_state        **state_list)
-{
-       union acpi_generic_state         *state;
-
-
-       ACPI_FUNCTION_ENTRY ();
-
-
-       state = acpi_ut_create_pkg_state (internal_object, external_object, index);
-       if (!state) {
-               return (AE_NO_MEMORY);
-       }
-
-       acpi_ut_push_generic_state (state_list, state);
-       return (AE_OK);
-}
-#endif  /*  ACPI_FUTURE_USAGE  */
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_push_generic_state
- *
- * PARAMETERS:  list_head           - Head of the state stack
- *              State               - State object to push
- *
- * RETURN:      None
- *
- * DESCRIPTION: Push a state object onto a state stack
- *
- ******************************************************************************/
-
-void
-acpi_ut_push_generic_state (
-       union acpi_generic_state        **list_head,
-       union acpi_generic_state        *state)
-{
-       ACPI_FUNCTION_TRACE ("ut_push_generic_state");
-
-
-       /* Push the state object onto the front of the list (stack) */
-
-       state->common.next = *list_head;
-       *list_head = state;
-
-       return_VOID;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_pop_generic_state
- *
- * PARAMETERS:  list_head           - Head of the state stack
- *
- * RETURN:      The popped state object
- *
- * DESCRIPTION: Pop a state object from a state stack
- *
- ******************************************************************************/
-
-union acpi_generic_state *
-acpi_ut_pop_generic_state (
-       union acpi_generic_state        **list_head)
-{
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_TRACE ("ut_pop_generic_state");
-
-
-       /* Remove the state object at the head of the list (stack) */
-
-       state = *list_head;
-       if (state) {
-               /* Update the list head */
-
-               *list_head = state->common.next;
-       }
-
-       return_PTR (state);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_create_generic_state
- *
- * PARAMETERS:  None
- *
- * RETURN:      The new state object. NULL on failure.
- *
- * DESCRIPTION: Create a generic state object.  Attempt to obtain one from
- *              the global state cache;  If none available, create a new one.
- *
- ******************************************************************************/
-
-union acpi_generic_state *
-acpi_ut_create_generic_state (
-       void)
-{
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_ENTRY ();
-
-
-       state = acpi_ut_acquire_from_cache (ACPI_MEM_LIST_STATE);
-
-       /* Initialize */
-
-       if (state) {
-               state->common.data_type = ACPI_DESC_TYPE_STATE;
-       }
-
-       return (state);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_create_thread_state
- *
- * PARAMETERS:  None
- *
- * RETURN:      New Thread State. NULL on failure
- *
- * DESCRIPTION: Create a "Thread State" - a flavor of the generic state used
- *              to track per-thread info during method execution
- *
- ******************************************************************************/
-
-struct acpi_thread_state *
-acpi_ut_create_thread_state (
-       void)
-{
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_TRACE ("ut_create_thread_state");
-
-
-       /* Create the generic state object */
-
-       state = acpi_ut_create_generic_state ();
-       if (!state) {
-               return_PTR (NULL);
-       }
-
-       /* Init fields specific to the update struct */
-
-       state->common.data_type = ACPI_DESC_TYPE_STATE_THREAD;
-       state->thread.thread_id = acpi_os_get_thread_id ();
-
-       return_PTR ((struct acpi_thread_state *) state);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_create_update_state
- *
- * PARAMETERS:  Object          - Initial Object to be installed in the state
- *              Action          - Update action to be performed
- *
- * RETURN:      New state object, null on failure
- *
- * DESCRIPTION: Create an "Update State" - a flavor of the generic state used
- *              to update reference counts and delete complex objects such
- *              as packages.
- *
- ******************************************************************************/
-
-union acpi_generic_state *
-acpi_ut_create_update_state (
-       union acpi_operand_object       *object,
-       u16                             action)
-{
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ut_create_update_state", object);
-
-
-       /* Create the generic state object */
-
-       state = acpi_ut_create_generic_state ();
-       if (!state) {
-               return_PTR (NULL);
-       }
-
-       /* Init fields specific to the update struct */
-
-       state->common.data_type = ACPI_DESC_TYPE_STATE_UPDATE;
-       state->update.object = object;
-       state->update.value  = action;
-
-       return_PTR (state);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_create_pkg_state
- *
- * PARAMETERS:  Object          - Initial Object to be installed in the state
- *              Action          - Update action to be performed
- *
- * RETURN:      New state object, null on failure
- *
- * DESCRIPTION: Create a "Package State"
- *
- ******************************************************************************/
-
-union acpi_generic_state *
-acpi_ut_create_pkg_state (
-       void                            *internal_object,
-       void                            *external_object,
-       u16                             index)
-{
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ut_create_pkg_state", internal_object);
-
-
-       /* Create the generic state object */
-
-       state = acpi_ut_create_generic_state ();
-       if (!state) {
-               return_PTR (NULL);
-       }
-
-       /* Init fields specific to the update struct */
-
-       state->common.data_type = ACPI_DESC_TYPE_STATE_PACKAGE;
-       state->pkg.source_object = (union acpi_operand_object *) internal_object;
-       state->pkg.dest_object  = external_object;
-       state->pkg.index        = index;
-       state->pkg.num_packages = 1;
-
-       return_PTR (state);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_create_control_state
- *
- * PARAMETERS:  None
- *
- * RETURN:      New state object, null on failure
- *
- * DESCRIPTION: Create a "Control State" - a flavor of the generic state used
- *              to support nested IF/WHILE constructs in the AML.
- *
- ******************************************************************************/
-
-union acpi_generic_state *
-acpi_ut_create_control_state (
-       void)
-{
-       union acpi_generic_state        *state;
-
-
-       ACPI_FUNCTION_TRACE ("ut_create_control_state");
-
-
-       /* Create the generic state object */
-
-       state = acpi_ut_create_generic_state ();
-       if (!state) {
-               return_PTR (NULL);
-       }
-
-       /* Init fields specific to the control struct */
-
-       state->common.data_type = ACPI_DESC_TYPE_STATE_CONTROL;
-       state->common.state     = ACPI_CONTROL_CONDITIONAL_EXECUTING;
-
-       return_PTR (state);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_delete_generic_state
- *
- * PARAMETERS:  State               - The state object to be deleted
- *
- * RETURN:      None
- *
- * DESCRIPTION: Put a state object back into the global state cache.  The object
- *              is not actually freed at this time.
- *
- ******************************************************************************/
-
-void
-acpi_ut_delete_generic_state (
-       union acpi_generic_state        *state)
-{
-       ACPI_FUNCTION_TRACE ("ut_delete_generic_state");
-
-
-       acpi_ut_release_to_cache (ACPI_MEM_LIST_STATE, state);
-       return_VOID;
-}
-
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_delete_generic_state_cache
- *
- * PARAMETERS:  None
- *
- * RETURN:      None
- *
- * DESCRIPTION: Purge the global state object cache.  Used during subsystem
- *              termination.
- *
- ******************************************************************************/
-
-void
-acpi_ut_delete_generic_state_cache (
-       void)
-{
-       ACPI_FUNCTION_TRACE ("ut_delete_generic_state_cache");
-
-
-       acpi_ut_delete_generic_cache (ACPI_MEM_LIST_STATE);
-       return_VOID;
-}
-#endif
-
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_walk_package_tree
@@ -1268,33 +660,29 @@ acpi_ut_delete_generic_state_cache (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_walk_package_tree (
-       union acpi_operand_object       *source_object,
-       void                            *target_object,
-       acpi_pkg_callback               walk_callback,
-       void                            *context)
+acpi_ut_walk_package_tree(union acpi_operand_object * source_object,
+                         void *target_object,
+                         acpi_pkg_callback walk_callback, void *context)
 {
-       acpi_status                     status = AE_OK;
-       union acpi_generic_state        *state_list = NULL;
-       union acpi_generic_state        *state;
-       u32                             this_index;
-       union acpi_operand_object       *this_source_obj;
-
-
-       ACPI_FUNCTION_TRACE ("ut_walk_package_tree");
+       acpi_status status = AE_OK;
+       union acpi_generic_state *state_list = NULL;
+       union acpi_generic_state *state;
+       u32 this_index;
+       union acpi_operand_object *this_source_obj;
 
+       ACPI_FUNCTION_TRACE("ut_walk_package_tree");
 
-       state = acpi_ut_create_pkg_state (source_object, target_object, 0);
+       state = acpi_ut_create_pkg_state(source_object, target_object, 0);
        if (!state) {
-               return_ACPI_STATUS (AE_NO_MEMORY);
+               return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
        while (state) {
                /* Get one element of the package */
 
-               this_index    = state->pkg.index;
+               this_index = state->pkg.index;
                this_source_obj = (union acpi_operand_object *)
-                                 state->pkg.source_object->package.elements[this_index];
+                   state->pkg.source_object->package.elements[this_index];
 
                /*
                 * Check for:
@@ -1305,16 +693,20 @@ acpi_ut_walk_package_tree (
                 *    case below.
                 */
                if ((!this_source_obj) ||
-                       (ACPI_GET_DESCRIPTOR_TYPE (this_source_obj) != ACPI_DESC_TYPE_OPERAND) ||
-                       (ACPI_GET_OBJECT_TYPE (this_source_obj) != ACPI_TYPE_PACKAGE)) {
-                       status = walk_callback (ACPI_COPY_TYPE_SIMPLE, this_source_obj,
-                                        state, context);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                   (ACPI_GET_DESCRIPTOR_TYPE(this_source_obj) !=
+                    ACPI_DESC_TYPE_OPERAND)
+                   || (ACPI_GET_OBJECT_TYPE(this_source_obj) !=
+                       ACPI_TYPE_PACKAGE)) {
+                       status =
+                           walk_callback(ACPI_COPY_TYPE_SIMPLE,
+                                         this_source_obj, state, context);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
 
                        state->pkg.index++;
-                       while (state->pkg.index >= state->pkg.source_object->package.count) {
+                       while (state->pkg.index >=
+                              state->pkg.source_object->package.count) {
                                /*
                                 * We've handled all of the objects at this level,  This means
                                 * that we have just completed a package.  That package may
@@ -1322,8 +714,8 @@ acpi_ut_walk_package_tree (
                                 *
                                 * Delete this state and pop the previous state (package).
                                 */
-                               acpi_ut_delete_generic_state (state);
-                               state = acpi_ut_pop_generic_state (&state_list);
+                               acpi_ut_delete_generic_state(state);
+                               state = acpi_ut_pop_generic_state(&state_list);
 
                                /* Finished when there are no more states */
 
@@ -1333,7 +725,7 @@ acpi_ut_walk_package_tree (
                                         * package just add the length of the package objects
                                         * and exit
                                         */
-                                       return_ACPI_STATUS (AE_OK);
+                                       return_ACPI_STATUS(AE_OK);
                                }
 
                                /*
@@ -1342,35 +734,35 @@ acpi_ut_walk_package_tree (
                                 */
                                state->pkg.index++;
                        }
-               }
-               else {
+               } else {
                        /* This is a subobject of type package */
 
-                       status = walk_callback (ACPI_COPY_TYPE_PACKAGE, this_source_obj,
-                                         state, context);
-                       if (ACPI_FAILURE (status)) {
-                               return_ACPI_STATUS (status);
+                       status =
+                           walk_callback(ACPI_COPY_TYPE_PACKAGE,
+                                         this_source_obj, state, context);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
                        }
 
                        /*
                         * Push the current state and create a new one
                         * The callback above returned a new target package object.
                         */
-                       acpi_ut_push_generic_state (&state_list, state);
-                       state = acpi_ut_create_pkg_state (this_source_obj,
-                                          state->pkg.this_target_obj, 0);
+                       acpi_ut_push_generic_state(&state_list, state);
+                       state = acpi_ut_create_pkg_state(this_source_obj,
+                                                        state->pkg.
+                                                        this_target_obj, 0);
                        if (!state) {
-                               return_ACPI_STATUS (AE_NO_MEMORY);
+                               return_ACPI_STATUS(AE_NO_MEMORY);
                        }
                }
        }
 
        /* We should never get here */
 
-       return_ACPI_STATUS (AE_AML_INTERNAL);
+       return_ACPI_STATUS(AE_AML_INTERNAL);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_generate_checksum
@@ -1384,23 +776,18 @@ acpi_ut_walk_package_tree (
  *
  ******************************************************************************/
 
-u8
-acpi_ut_generate_checksum (
-       u8                              *buffer,
-       u32                             length)
+u8 acpi_ut_generate_checksum(u8 * buffer, u32 length)
 {
-       u32                             i;
-       signed char                     sum = 0;
-
+       u32 i;
+       signed char sum = 0;
 
        for (i = 0; i < length; i++) {
-               sum = (signed char) (sum + buffer[i]);
+               sum = (signed char)(sum + buffer[i]);
        }
 
        return ((u8) (0 - sum));
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_get_resource_end_tag
@@ -1413,17 +800,13 @@ acpi_ut_generate_checksum (
  *
  ******************************************************************************/
 
-
-u8 *
-acpi_ut_get_resource_end_tag (
-       union acpi_operand_object       *obj_desc)
+u8 *acpi_ut_get_resource_end_tag(union acpi_operand_object * obj_desc)
 {
-       u8                              buffer_byte;
-       u8                              *buffer;
-       u8                              *end_buffer;
-
+       u8 buffer_byte;
+       u8 *buffer;
+       u8 *end_buffer;
 
-       buffer    = obj_desc->buffer.pointer;
+       buffer = obj_desc->buffer.pointer;
        end_buffer = buffer + obj_desc->buffer.length;
 
        while (buffer < end_buffer) {
@@ -1431,12 +814,12 @@ acpi_ut_get_resource_end_tag (
                if (buffer_byte & ACPI_RDESC_TYPE_MASK) {
                        /* Large Descriptor - Length is next 2 bytes */
 
-                       buffer += ((*(buffer+1) | (*(buffer+2) << 8)) + 3);
-               }
-               else {
+                       buffer += ((*(buffer + 1) | (*(buffer + 2) << 8)) + 3);
+               } else {
                        /* Small Descriptor.  End Tag will be found here */
 
-                       if ((buffer_byte & ACPI_RDESC_SMALL_MASK) == ACPI_RDESC_TYPE_END_TAG) {
+                       if ((buffer_byte & ACPI_RDESC_SMALL_MASK) ==
+                           ACPI_RDESC_TYPE_END_TAG) {
                                /* Found the end tag descriptor, all done. */
 
                                return (buffer);
@@ -1453,7 +836,6 @@ acpi_ut_get_resource_end_tag (
        return (NULL);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_report_error
@@ -1468,17 +850,12 @@ acpi_ut_get_resource_end_tag (
  *
  ******************************************************************************/
 
-void
-acpi_ut_report_error (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id)
+void acpi_ut_report_error(char *module_name, u32 line_number, u32 component_id)
 {
 
-       acpi_os_printf ("%8s-%04d: *** Error: ", module_name, line_number);
+       acpi_os_printf("%8s-%04d: *** Error: ", module_name, line_number);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_report_warning
@@ -1494,16 +871,12 @@ acpi_ut_report_error (
  ******************************************************************************/
 
 void
-acpi_ut_report_warning (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id)
+acpi_ut_report_warning(char *module_name, u32 line_number, u32 component_id)
 {
 
-       acpi_os_printf ("%8s-%04d: *** Warning: ", module_name, line_number);
+       acpi_os_printf("%8s-%04d: *** Warning: ", module_name, line_number);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_report_info
@@ -1518,14 +891,8 @@ acpi_ut_report_warning (
  *
  ******************************************************************************/
 
-void
-acpi_ut_report_info (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id)
+void acpi_ut_report_info(char *module_name, u32 line_number, u32 component_id)
 {
 
-       acpi_os_printf ("%8s-%04d: *** Info: ", module_name, line_number);
+       acpi_os_printf("%8s-%04d: *** Info: ", module_name, line_number);
 }
-
-
diff --git a/drivers/acpi/utilities/utmutex.c b/drivers/acpi/utilities/utmutex.c
new file mode 100644 (file)
index 0000000..90134c5
--- /dev/null
@@ -0,0 +1,354 @@
+/*******************************************************************************
+ *
+ * Module Name: utmutex - local mutex support
+ *
+ ******************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2005, R. Byron Moore
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#include <acpi/acpi.h>
+
+#define _COMPONENT          ACPI_UTILITIES
+ACPI_MODULE_NAME("utmutex")
+
+/* Local prototypes */
+static acpi_status acpi_ut_create_mutex(acpi_mutex_handle mutex_id);
+
+static acpi_status acpi_ut_delete_mutex(acpi_mutex_handle mutex_id);
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_mutex_initialize
+ *
+ * PARAMETERS:  None.
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Create the system mutex objects.
+ *
+ ******************************************************************************/
+
+acpi_status acpi_ut_mutex_initialize(void)
+{
+       u32 i;
+       acpi_status status;
+
+       ACPI_FUNCTION_TRACE("ut_mutex_initialize");
+
+       /*
+        * Create each of the predefined mutex objects
+        */
+       for (i = 0; i < NUM_MUTEX; i++) {
+               status = acpi_ut_create_mutex(i);
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
+               }
+       }
+
+       status = acpi_os_create_lock(&acpi_gbl_gpe_lock);
+       return_ACPI_STATUS(status);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_mutex_terminate
+ *
+ * PARAMETERS:  None.
+ *
+ * RETURN:      None.
+ *
+ * DESCRIPTION: Delete all of the system mutex objects.
+ *
+ ******************************************************************************/
+
+void acpi_ut_mutex_terminate(void)
+{
+       u32 i;
+
+       ACPI_FUNCTION_TRACE("ut_mutex_terminate");
+
+       /*
+        * Delete each predefined mutex object
+        */
+       for (i = 0; i < NUM_MUTEX; i++) {
+               (void)acpi_ut_delete_mutex(i);
+       }
+
+       acpi_os_delete_lock(acpi_gbl_gpe_lock);
+       return_VOID;
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_create_mutex
+ *
+ * PARAMETERS:  mutex_iD        - ID of the mutex to be created
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Create a mutex object.
+ *
+ ******************************************************************************/
+
+static acpi_status acpi_ut_create_mutex(acpi_mutex_handle mutex_id)
+{
+       acpi_status status = AE_OK;
+
+       ACPI_FUNCTION_TRACE_U32("ut_create_mutex", mutex_id);
+
+       if (mutex_id > MAX_MUTEX) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
+       }
+
+       if (!acpi_gbl_mutex_info[mutex_id].mutex) {
+               status = acpi_os_create_semaphore(1, 1,
+                                                 &acpi_gbl_mutex_info
+                                                 [mutex_id].mutex);
+               acpi_gbl_mutex_info[mutex_id].thread_id =
+                   ACPI_MUTEX_NOT_ACQUIRED;
+               acpi_gbl_mutex_info[mutex_id].use_count = 0;
+       }
+
+       return_ACPI_STATUS(status);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_delete_mutex
+ *
+ * PARAMETERS:  mutex_iD        - ID of the mutex to be deleted
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Delete a mutex object.
+ *
+ ******************************************************************************/
+
+static acpi_status acpi_ut_delete_mutex(acpi_mutex_handle mutex_id)
+{
+       acpi_status status;
+
+       ACPI_FUNCTION_TRACE_U32("ut_delete_mutex", mutex_id);
+
+       if (mutex_id > MAX_MUTEX) {
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
+       }
+
+       status = acpi_os_delete_semaphore(acpi_gbl_mutex_info[mutex_id].mutex);
+
+       acpi_gbl_mutex_info[mutex_id].mutex = NULL;
+       acpi_gbl_mutex_info[mutex_id].thread_id = ACPI_MUTEX_NOT_ACQUIRED;
+
+       return_ACPI_STATUS(status);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_acquire_mutex
+ *
+ * PARAMETERS:  mutex_iD        - ID of the mutex to be acquired
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Acquire a mutex object.
+ *
+ ******************************************************************************/
+
+acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id)
+{
+       acpi_status status;
+       u32 this_thread_id;
+
+       ACPI_FUNCTION_NAME("ut_acquire_mutex");
+
+       if (mutex_id > MAX_MUTEX) {
+               return (AE_BAD_PARAMETER);
+       }
+
+       this_thread_id = acpi_os_get_thread_id();
+
+#ifdef ACPI_MUTEX_DEBUG
+       {
+               u32 i;
+               /*
+                * Mutex debug code, for internal debugging only.
+                *
+                * Deadlock prevention.  Check if this thread owns any mutexes of value
+                * greater than or equal to this one.  If so, the thread has violated
+                * the mutex ordering rule.  This indicates a coding error somewhere in
+                * the ACPI subsystem code.
+                */
+               for (i = mutex_id; i < MAX_MUTEX; i++) {
+                       if (acpi_gbl_mutex_info[i].owner_id == this_thread_id) {
+                               if (i == mutex_id) {
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "Mutex [%s] already acquired by this thread [%X]\n",
+                                                         acpi_ut_get_mutex_name
+                                                         (mutex_id),
+                                                         this_thread_id));
+
+                                       return (AE_ALREADY_ACQUIRED);
+                               }
+
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Invalid acquire order: Thread %X owns [%s], wants [%s]\n",
+                                                 this_thread_id,
+                                                 acpi_ut_get_mutex_name(i),
+                                                 acpi_ut_get_mutex_name
+                                                 (mutex_id)));
+
+                               return (AE_ACQUIRE_DEADLOCK);
+                       }
+               }
+       }
+#endif
+
+       ACPI_DEBUG_PRINT((ACPI_DB_MUTEX,
+                         "Thread %X attempting to acquire Mutex [%s]\n",
+                         this_thread_id, acpi_ut_get_mutex_name(mutex_id)));
+
+       status = acpi_os_wait_semaphore(acpi_gbl_mutex_info[mutex_id].mutex,
+                                       1, ACPI_WAIT_FOREVER);
+       if (ACPI_SUCCESS(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_MUTEX,
+                                 "Thread %X acquired Mutex [%s]\n",
+                                 this_thread_id,
+                                 acpi_ut_get_mutex_name(mutex_id)));
+
+               acpi_gbl_mutex_info[mutex_id].use_count++;
+               acpi_gbl_mutex_info[mutex_id].thread_id = this_thread_id;
+       } else {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Thread %X could not acquire Mutex [%s] %s\n",
+                                 this_thread_id,
+                                 acpi_ut_get_mutex_name(mutex_id),
+                                 acpi_format_exception(status)));
+       }
+
+       return (status);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_release_mutex
+ *
+ * PARAMETERS:  mutex_iD        - ID of the mutex to be released
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Release a mutex object.
+ *
+ ******************************************************************************/
+
+acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id)
+{
+       acpi_status status;
+       u32 this_thread_id;
+
+       ACPI_FUNCTION_NAME("ut_release_mutex");
+
+       this_thread_id = acpi_os_get_thread_id();
+       ACPI_DEBUG_PRINT((ACPI_DB_MUTEX,
+                         "Thread %X releasing Mutex [%s]\n", this_thread_id,
+                         acpi_ut_get_mutex_name(mutex_id)));
+
+       if (mutex_id > MAX_MUTEX) {
+               return (AE_BAD_PARAMETER);
+       }
+
+       /*
+        * Mutex must be acquired in order to release it!
+        */
+       if (acpi_gbl_mutex_info[mutex_id].thread_id == ACPI_MUTEX_NOT_ACQUIRED) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Mutex [%s] is not acquired, cannot release\n",
+                                 acpi_ut_get_mutex_name(mutex_id)));
+
+               return (AE_NOT_ACQUIRED);
+       }
+#ifdef ACPI_MUTEX_DEBUG
+       {
+               u32 i;
+               /*
+                * Mutex debug code, for internal debugging only.
+                *
+                * Deadlock prevention.  Check if this thread owns any mutexes of value
+                * greater than this one.  If so, the thread has violated the mutex
+                * ordering rule.  This indicates a coding error somewhere in
+                * the ACPI subsystem code.
+                */
+               for (i = mutex_id; i < MAX_MUTEX; i++) {
+                       if (acpi_gbl_mutex_info[i].owner_id == this_thread_id) {
+                               if (i == mutex_id) {
+                                       continue;
+                               }
+
+                               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                 "Invalid release order: owns [%s], releasing [%s]\n",
+                                                 acpi_ut_get_mutex_name(i),
+                                                 acpi_ut_get_mutex_name
+                                                 (mutex_id)));
+
+                               return (AE_RELEASE_DEADLOCK);
+                       }
+               }
+       }
+#endif
+
+       /* Mark unlocked FIRST */
+
+       acpi_gbl_mutex_info[mutex_id].thread_id = ACPI_MUTEX_NOT_ACQUIRED;
+
+       status =
+           acpi_os_signal_semaphore(acpi_gbl_mutex_info[mutex_id].mutex, 1);
+
+       if (ACPI_FAILURE(status)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Thread %X could not release Mutex [%s] %s\n",
+                                 this_thread_id,
+                                 acpi_ut_get_mutex_name(mutex_id),
+                                 acpi_format_exception(status)));
+       } else {
+               ACPI_DEBUG_PRINT((ACPI_DB_MUTEX,
+                                 "Thread %X released Mutex [%s]\n",
+                                 this_thread_id,
+                                 acpi_ut_get_mutex_name(mutex_id)));
+       }
+
+       return (status);
+}
index cd3899b9cc5a6d7dc4fc3af9d5a71daac6489070..3015e15400536d2890617179589f67cd1cbadec7 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 #include <acpi/amlcode.h>
 
-
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utobject")
+ACPI_MODULE_NAME("utobject")
 
 /* Local prototypes */
-
 static acpi_status
-acpi_ut_get_simple_object_size (
-       union acpi_operand_object       *obj,
-       acpi_size                       *obj_length);
+acpi_ut_get_simple_object_size(union acpi_operand_object *obj,
+                              acpi_size * obj_length);
 
 static acpi_status
-acpi_ut_get_package_object_size (
-       union acpi_operand_object       *obj,
-       acpi_size                       *obj_length);
+acpi_ut_get_package_object_size(union acpi_operand_object *obj,
+                               acpi_size * obj_length);
 
 static acpi_status
-acpi_ut_get_element_length (
-       u8                              object_type,
-       union acpi_operand_object       *source_object,
-       union acpi_generic_state        *state,
-       void                            *context);
-
+acpi_ut_get_element_length(u8 object_type,
+                          union acpi_operand_object *source_object,
+                          union acpi_generic_state *state, void *context);
 
 /*******************************************************************************
  *
@@ -91,26 +83,25 @@ acpi_ut_get_element_length (
  *
  ******************************************************************************/
 
-union acpi_operand_object    *
-acpi_ut_create_internal_object_dbg (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id,
-       acpi_object_type                type)
+union acpi_operand_object *acpi_ut_create_internal_object_dbg(char *module_name,
+                                                             u32 line_number,
+                                                             u32 component_id,
+                                                             acpi_object_type
+                                                             type)
 {
-       union acpi_operand_object       *object;
-       union acpi_operand_object       *second_object;
-
-
-       ACPI_FUNCTION_TRACE_STR ("ut_create_internal_object_dbg",
-               acpi_ut_get_type_name (type));
+       union acpi_operand_object *object;
+       union acpi_operand_object *second_object;
 
+       ACPI_FUNCTION_TRACE_STR("ut_create_internal_object_dbg",
+                               acpi_ut_get_type_name(type));
 
        /* Allocate the raw object descriptor */
 
-       object = acpi_ut_allocate_object_desc_dbg (module_name, line_number, component_id);
+       object =
+           acpi_ut_allocate_object_desc_dbg(module_name, line_number,
+                                            component_id);
        if (!object) {
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
        switch (type) {
@@ -119,11 +110,12 @@ acpi_ut_create_internal_object_dbg (
 
                /* These types require a secondary object */
 
-               second_object = acpi_ut_allocate_object_desc_dbg (module_name,
-                                  line_number, component_id);
+               second_object = acpi_ut_allocate_object_desc_dbg(module_name,
+                                                                line_number,
+                                                                component_id);
                if (!second_object) {
-                       acpi_ut_delete_object_desc (object);
-                       return_PTR (NULL);
+                       acpi_ut_delete_object_desc(object);
+                       return_PTR(NULL);
                }
 
                second_object->common.type = ACPI_TYPE_LOCAL_EXTRA;
@@ -149,10 +141,9 @@ acpi_ut_create_internal_object_dbg (
 
        /* Any per-type initialization should go here */
 
-       return_PTR (object);
+       return_PTR(object);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_create_buffer_object
@@ -165,22 +156,18 @@ acpi_ut_create_internal_object_dbg (
  *
  ******************************************************************************/
 
-union acpi_operand_object *
-acpi_ut_create_buffer_object (
-       acpi_size                       buffer_size)
+union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size)
 {
-       union acpi_operand_object       *buffer_desc;
-       u8                              *buffer = NULL;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ut_create_buffer_object", buffer_size);
+       union acpi_operand_object *buffer_desc;
+       u8 *buffer = NULL;
 
+       ACPI_FUNCTION_TRACE_U32("ut_create_buffer_object", buffer_size);
 
        /* Create a new Buffer object */
 
-       buffer_desc = acpi_ut_create_internal_object (ACPI_TYPE_BUFFER);
+       buffer_desc = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER);
        if (!buffer_desc) {
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
        /* Create an actual buffer only if size > 0 */
@@ -188,12 +175,11 @@ acpi_ut_create_buffer_object (
        if (buffer_size > 0) {
                /* Allocate the actual buffer */
 
-               buffer = ACPI_MEM_CALLOCATE (buffer_size);
+               buffer = ACPI_MEM_CALLOCATE(buffer_size);
                if (!buffer) {
-                       ACPI_REPORT_ERROR (("create_buffer: could not allocate size %X\n",
-                               (u32) buffer_size));
-                       acpi_ut_remove_reference (buffer_desc);
-                       return_PTR (NULL);
+                       ACPI_REPORT_ERROR(("create_buffer: could not allocate size %X\n", (u32) buffer_size));
+                       acpi_ut_remove_reference(buffer_desc);
+                       return_PTR(NULL);
                }
        }
 
@@ -205,10 +191,9 @@ acpi_ut_create_buffer_object (
 
        /* Return the new buffer descriptor */
 
-       return_PTR (buffer_desc);
+       return_PTR(buffer_desc);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_create_string_object
@@ -223,34 +208,29 @@ acpi_ut_create_buffer_object (
  *
  ******************************************************************************/
 
-union acpi_operand_object *
-acpi_ut_create_string_object (
-       acpi_size                       string_size)
+union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size)
 {
-       union acpi_operand_object       *string_desc;
-       char                            *string;
-
-
-       ACPI_FUNCTION_TRACE_U32 ("ut_create_string_object", string_size);
+       union acpi_operand_object *string_desc;
+       char *string;
 
+       ACPI_FUNCTION_TRACE_U32("ut_create_string_object", string_size);
 
        /* Create a new String object */
 
-       string_desc = acpi_ut_create_internal_object (ACPI_TYPE_STRING);
+       string_desc = acpi_ut_create_internal_object(ACPI_TYPE_STRING);
        if (!string_desc) {
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
        /*
         * Allocate the actual string buffer -- (Size + 1) for NULL terminator.
         * NOTE: Zero-length strings are NULL terminated
         */
-       string = ACPI_MEM_CALLOCATE (string_size + 1);
+       string = ACPI_MEM_CALLOCATE(string_size + 1);
        if (!string) {
-               ACPI_REPORT_ERROR (("create_string: could not allocate size %X\n",
-                       (u32) string_size));
-               acpi_ut_remove_reference (string_desc);
-               return_PTR (NULL);
+               ACPI_REPORT_ERROR(("create_string: could not allocate size %X\n", (u32) string_size));
+               acpi_ut_remove_reference(string_desc);
+               return_PTR(NULL);
        }
 
        /* Complete string object initialization */
@@ -260,10 +240,9 @@ acpi_ut_create_string_object (
 
        /* Return the new string descriptor */
 
-       return_PTR (string_desc);
+       return_PTR(string_desc);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_valid_internal_object
@@ -276,24 +255,21 @@ acpi_ut_create_string_object (
  *
  ******************************************************************************/
 
-u8
-acpi_ut_valid_internal_object (
-       void                            *object)
+u8 acpi_ut_valid_internal_object(void *object)
 {
 
-       ACPI_FUNCTION_NAME ("ut_valid_internal_object");
-
+       ACPI_FUNCTION_NAME("ut_valid_internal_object");
 
        /* Check for a null pointer */
 
        if (!object) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "**** Null Object Ptr\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "**** Null Object Ptr\n"));
                return (FALSE);
        }
 
        /* Check the descriptor type field */
 
-       switch (ACPI_GET_DESCRIPTOR_TYPE (object)) {
+       switch (ACPI_GET_DESCRIPTOR_TYPE(object)) {
        case ACPI_DESC_TYPE_OPERAND:
 
                /* The object appears to be a valid union acpi_operand_object    */
@@ -301,16 +277,15 @@ acpi_ut_valid_internal_object (
                return (TRUE);
 
        default:
-               ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                               "%p is not not an ACPI operand obj [%s]\n",
-                               object, acpi_ut_get_descriptor_name (object)));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "%p is not not an ACPI operand obj [%s]\n",
+                                 object, acpi_ut_get_descriptor_name(object)));
                break;
        }
 
        return (FALSE);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_allocate_object_desc_dbg
@@ -326,37 +301,31 @@ acpi_ut_valid_internal_object (
  *
  ******************************************************************************/
 
-void *
-acpi_ut_allocate_object_desc_dbg (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id)
+void *acpi_ut_allocate_object_desc_dbg(char *module_name,
+                                      u32 line_number, u32 component_id)
 {
-       union acpi_operand_object       *object;
+       union acpi_operand_object *object;
 
+       ACPI_FUNCTION_TRACE("ut_allocate_object_desc_dbg");
 
-       ACPI_FUNCTION_TRACE ("ut_allocate_object_desc_dbg");
-
-
-       object = acpi_ut_acquire_from_cache (ACPI_MEM_LIST_OPERAND);
+       object = acpi_os_acquire_object(acpi_gbl_operand_cache);
        if (!object) {
-               _ACPI_REPORT_ERROR (module_name, line_number, component_id,
-                                 ("Could not allocate an object descriptor\n"));
+               _ACPI_REPORT_ERROR(module_name, line_number, component_id,
+                                  ("Could not allocate an object descriptor\n"));
 
-               return_PTR (NULL);
+               return_PTR(NULL);
        }
 
        /* Mark the descriptor type */
+       memset(object, 0, sizeof(union acpi_operand_object));
+       ACPI_SET_DESCRIPTOR_TYPE(object, ACPI_DESC_TYPE_OPERAND);
 
-       ACPI_SET_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_OPERAND);
+       ACPI_DEBUG_PRINT((ACPI_DB_ALLOCATIONS, "%p Size %X\n",
+                         object, (u32) sizeof(union acpi_operand_object)));
 
-       ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "%p Size %X\n",
-                       object, (u32) sizeof (union acpi_operand_object)));
-
-       return_PTR (object);
+       return_PTR(object);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_delete_object_desc
@@ -369,54 +338,22 @@ acpi_ut_allocate_object_desc_dbg (
  *
  ******************************************************************************/
 
-void
-acpi_ut_delete_object_desc (
-       union acpi_operand_object       *object)
+void acpi_ut_delete_object_desc(union acpi_operand_object *object)
 {
-       ACPI_FUNCTION_TRACE_PTR ("ut_delete_object_desc", object);
-
+       ACPI_FUNCTION_TRACE_PTR("ut_delete_object_desc", object);
 
        /* Object must be an union acpi_operand_object    */
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (object) != ACPI_DESC_TYPE_OPERAND) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "%p is not an ACPI Operand object [%s]\n", object,
-                               acpi_ut_get_descriptor_name (object)));
+       if (ACPI_GET_DESCRIPTOR_TYPE(object) != ACPI_DESC_TYPE_OPERAND) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "%p is not an ACPI Operand object [%s]\n",
+                                 object, acpi_ut_get_descriptor_name(object)));
                return_VOID;
        }
 
-       acpi_ut_release_to_cache (ACPI_MEM_LIST_OPERAND, object);
-
-       return_VOID;
-}
-
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
-/*******************************************************************************
- *
- * FUNCTION:    acpi_ut_delete_object_cache
- *
- * PARAMETERS:  None
- *
- * RETURN:      None
- *
- * DESCRIPTION: Purge the global state object cache.  Used during subsystem
- *              termination.
- *
- ******************************************************************************/
-
-void
-acpi_ut_delete_object_cache (
-       void)
-{
-       ACPI_FUNCTION_TRACE ("ut_delete_object_cache");
-
-
-       acpi_ut_delete_generic_cache (ACPI_MEM_LIST_OPERAND);
+       (void)acpi_os_release_object(acpi_gbl_operand_cache, object);
        return_VOID;
 }
-#endif
-
 
 /*******************************************************************************
  *
@@ -436,16 +373,13 @@ acpi_ut_delete_object_cache (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_get_simple_object_size (
-       union acpi_operand_object       *internal_object,
-       acpi_size                       *obj_length)
+acpi_ut_get_simple_object_size(union acpi_operand_object *internal_object,
+                              acpi_size * obj_length)
 {
-       acpi_size                       length;
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE_PTR ("ut_get_simple_object_size", internal_object);
+       acpi_size length;
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE_PTR("ut_get_simple_object_size", internal_object);
 
        /*
         * Handle a null object (Could be a uninitialized package
@@ -453,18 +387,18 @@ acpi_ut_get_simple_object_size (
         */
        if (!internal_object) {
                *obj_length = 0;
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Start with the length of the Acpi object */
 
-       length = sizeof (union acpi_object);
+       length = sizeof(union acpi_object);
 
-       if (ACPI_GET_DESCRIPTOR_TYPE (internal_object) == ACPI_DESC_TYPE_NAMED) {
+       if (ACPI_GET_DESCRIPTOR_TYPE(internal_object) == ACPI_DESC_TYPE_NAMED) {
                /* Object is a named object (reference), just return the length */
 
-               *obj_length = ACPI_ROUND_UP_TO_NATIVE_WORD (length);
-               return_ACPI_STATUS (status);
+               *obj_length = ACPI_ROUND_UP_TO_NATIVE_WORD(length);
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -473,19 +407,17 @@ acpi_ut_get_simple_object_size (
         * must be accessed bytewise or there may be alignment problems on
         * certain processors
         */
-       switch (ACPI_GET_OBJECT_TYPE (internal_object)) {
+       switch (ACPI_GET_OBJECT_TYPE(internal_object)) {
        case ACPI_TYPE_STRING:
 
                length += (acpi_size) internal_object->string.length + 1;
                break;
 
-
        case ACPI_TYPE_BUFFER:
 
                length += (acpi_size) internal_object->buffer.length;
                break;
 
-
        case ACPI_TYPE_INTEGER:
        case ACPI_TYPE_PROCESSOR:
        case ACPI_TYPE_POWER:
@@ -495,7 +427,6 @@ acpi_ut_get_simple_object_size (
                 */
                break;
 
-
        case ACPI_TYPE_LOCAL_REFERENCE:
 
                switch (internal_object->reference.opcode) {
@@ -505,8 +436,10 @@ acpi_ut_get_simple_object_size (
                         * Get the actual length of the full pathname to this object.
                         * The reference will be converted to the pathname to the object
                         */
-                       length += ACPI_ROUND_UP_TO_NATIVE_WORD (
-                                        acpi_ns_get_pathname_length (internal_object->reference.node));
+                       length +=
+                           ACPI_ROUND_UP_TO_NATIVE_WORD
+                           (acpi_ns_get_pathname_length
+                            (internal_object->reference.node));
                        break;
 
                default:
@@ -516,19 +449,21 @@ acpi_ut_get_simple_object_size (
                         * Notably, Locals and Args are not supported, but this may be
                         * required eventually.
                         */
-                       ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
-                               "Unsupported Reference opcode=%X in object %p\n",
-                               internal_object->reference.opcode, internal_object));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Unsupported Reference opcode=%X in object %p\n",
+                                         internal_object->reference.opcode,
+                                         internal_object));
                        status = AE_TYPE;
                        break;
                }
                break;
 
-
        default:
 
-               ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Unsupported type=%X in object %p\n",
-                       ACPI_GET_OBJECT_TYPE (internal_object), internal_object));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unsupported type=%X in object %p\n",
+                                 ACPI_GET_OBJECT_TYPE(internal_object),
+                                 internal_object));
                status = AE_TYPE;
                break;
        }
@@ -539,11 +474,10 @@ acpi_ut_get_simple_object_size (
         * on a machine word boundary. (preventing alignment faults on some
         * machines.)
         */
-       *obj_length = ACPI_ROUND_UP_TO_NATIVE_WORD (length);
-       return_ACPI_STATUS (status);
+       *obj_length = ACPI_ROUND_UP_TO_NATIVE_WORD(length);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_get_element_length
@@ -557,16 +491,13 @@ acpi_ut_get_simple_object_size (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_get_element_length (
-       u8                              object_type,
-       union acpi_operand_object       *source_object,
-       union acpi_generic_state        *state,
-       void                            *context)
+acpi_ut_get_element_length(u8 object_type,
+                          union acpi_operand_object *source_object,
+                          union acpi_generic_state *state, void *context)
 {
-       acpi_status                     status = AE_OK;
-       struct acpi_pkg_info            *info = (struct acpi_pkg_info *) context;
-       acpi_size                       object_space;
-
+       acpi_status status = AE_OK;
+       struct acpi_pkg_info *info = (struct acpi_pkg_info *)context;
+       acpi_size object_space;
 
        switch (object_type) {
        case ACPI_COPY_TYPE_SIMPLE:
@@ -575,15 +506,16 @@ acpi_ut_get_element_length (
                 * Simple object - just get the size (Null object/entry is handled
                 * here also) and sum it into the running package length
                 */
-               status = acpi_ut_get_simple_object_size (source_object, &object_space);
-               if (ACPI_FAILURE (status)) {
+               status =
+                   acpi_ut_get_simple_object_size(source_object,
+                                                  &object_space);
+               if (ACPI_FAILURE(status)) {
                        return (status);
                }
 
                info->length += object_space;
                break;
 
-
        case ACPI_COPY_TYPE_PACKAGE:
 
                /* Package object - nothing much to do here, let the walk handle it */
@@ -592,7 +524,6 @@ acpi_ut_get_element_length (
                state->pkg.this_target_obj = NULL;
                break;
 
-
        default:
 
                /* No other types allowed */
@@ -603,7 +534,6 @@ acpi_ut_get_element_length (
        return (status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_get_package_object_size
@@ -622,25 +552,22 @@ acpi_ut_get_element_length (
  ******************************************************************************/
 
 static acpi_status
-acpi_ut_get_package_object_size (
-       union acpi_operand_object       *internal_object,
-       acpi_size                       *obj_length)
+acpi_ut_get_package_object_size(union acpi_operand_object *internal_object,
+                               acpi_size * obj_length)
 {
-       acpi_status                     status;
-       struct acpi_pkg_info            info;
+       acpi_status status;
+       struct acpi_pkg_info info;
 
+       ACPI_FUNCTION_TRACE_PTR("ut_get_package_object_size", internal_object);
 
-       ACPI_FUNCTION_TRACE_PTR ("ut_get_package_object_size", internal_object);
-
-
-       info.length      = 0;
+       info.length = 0;
        info.object_space = 0;
        info.num_packages = 1;
 
-       status = acpi_ut_walk_package_tree (internal_object, NULL,
-                        acpi_ut_get_element_length, &info);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_walk_package_tree(internal_object, NULL,
+                                          acpi_ut_get_element_length, &info);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
@@ -648,16 +575,15 @@ acpi_ut_get_package_object_size (
         * just add the length of the package objects themselves.
         * Round up to the next machine word.
         */
-       info.length += ACPI_ROUND_UP_TO_NATIVE_WORD (sizeof (union acpi_object)) *
-                         (acpi_size) info.num_packages;
+       info.length += ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof(union acpi_object)) *
+           (acpi_size) info.num_packages;
 
        /* Return the total package length */
 
        *obj_length = info.length;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_get_object_size
@@ -673,25 +599,23 @@ acpi_ut_get_package_object_size (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_get_object_size (
-       union acpi_operand_object       *internal_object,
-       acpi_size                       *obj_length)
+acpi_ut_get_object_size(union acpi_operand_object *internal_object,
+                       acpi_size * obj_length)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_ENTRY ();
-
-
-       if ((ACPI_GET_DESCRIPTOR_TYPE (internal_object) == ACPI_DESC_TYPE_OPERAND) &&
-               (ACPI_GET_OBJECT_TYPE (internal_object) == ACPI_TYPE_PACKAGE)) {
-               status = acpi_ut_get_package_object_size (internal_object, obj_length);
-       }
-       else {
-               status = acpi_ut_get_simple_object_size (internal_object, obj_length);
+       acpi_status status;
+
+       ACPI_FUNCTION_ENTRY();
+
+       if ((ACPI_GET_DESCRIPTOR_TYPE(internal_object) ==
+            ACPI_DESC_TYPE_OPERAND)
+           && (ACPI_GET_OBJECT_TYPE(internal_object) == ACPI_TYPE_PACKAGE)) {
+               status =
+                   acpi_ut_get_package_object_size(internal_object,
+                                                   obj_length);
+       } else {
+               status =
+                   acpi_ut_get_simple_object_size(internal_object, obj_length);
        }
 
        return (status);
 }
-
-
diff --git a/drivers/acpi/utilities/utstate.c b/drivers/acpi/utilities/utstate.c
new file mode 100644 (file)
index 0000000..c1cb275
--- /dev/null
@@ -0,0 +1,333 @@
+/*******************************************************************************
+ *
+ * Module Name: utstate - state object support procedures
+ *
+ ******************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2005, R. Byron Moore
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#include <acpi/acpi.h>
+
+#define _COMPONENT          ACPI_UTILITIES
+ACPI_MODULE_NAME("utstate")
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_create_pkg_state_and_push
+ *
+ * PARAMETERS:  Object          - Object to be added to the new state
+ *              Action          - Increment/Decrement
+ *              state_list      - List the state will be added to
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Create a new state and push it
+ *
+ ******************************************************************************/
+acpi_status
+acpi_ut_create_pkg_state_and_push(void *internal_object,
+                                 void *external_object,
+                                 u16 index,
+                                 union acpi_generic_state ** state_list)
+{
+       union acpi_generic_state *state;
+
+       ACPI_FUNCTION_ENTRY();
+
+       state =
+           acpi_ut_create_pkg_state(internal_object, external_object, index);
+       if (!state) {
+               return (AE_NO_MEMORY);
+       }
+
+       acpi_ut_push_generic_state(state_list, state);
+       return (AE_OK);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_push_generic_state
+ *
+ * PARAMETERS:  list_head           - Head of the state stack
+ *              State               - State object to push
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Push a state object onto a state stack
+ *
+ ******************************************************************************/
+
+void
+acpi_ut_push_generic_state(union acpi_generic_state **list_head,
+                          union acpi_generic_state *state)
+{
+       ACPI_FUNCTION_TRACE("ut_push_generic_state");
+
+       /* Push the state object onto the front of the list (stack) */
+
+       state->common.next = *list_head;
+       *list_head = state;
+
+       return_VOID;
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_pop_generic_state
+ *
+ * PARAMETERS:  list_head           - Head of the state stack
+ *
+ * RETURN:      The popped state object
+ *
+ * DESCRIPTION: Pop a state object from a state stack
+ *
+ ******************************************************************************/
+
+union acpi_generic_state *acpi_ut_pop_generic_state(union acpi_generic_state
+                                                   **list_head)
+{
+       union acpi_generic_state *state;
+
+       ACPI_FUNCTION_TRACE("ut_pop_generic_state");
+
+       /* Remove the state object at the head of the list (stack) */
+
+       state = *list_head;
+       if (state) {
+               /* Update the list head */
+
+               *list_head = state->common.next;
+       }
+
+       return_PTR(state);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_create_generic_state
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      The new state object. NULL on failure.
+ *
+ * DESCRIPTION: Create a generic state object.  Attempt to obtain one from
+ *              the global state cache;  If none available, create a new one.
+ *
+ ******************************************************************************/
+
+union acpi_generic_state *acpi_ut_create_generic_state(void)
+{
+       union acpi_generic_state *state;
+
+       ACPI_FUNCTION_ENTRY();
+
+       state = acpi_os_acquire_object(acpi_gbl_state_cache);
+       if (state) {
+               /* Initialize */
+               memset(state, 0, sizeof(union acpi_generic_state));
+               state->common.data_type = ACPI_DESC_TYPE_STATE;
+       }
+
+       return (state);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_create_thread_state
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      New Thread State. NULL on failure
+ *
+ * DESCRIPTION: Create a "Thread State" - a flavor of the generic state used
+ *              to track per-thread info during method execution
+ *
+ ******************************************************************************/
+
+struct acpi_thread_state *acpi_ut_create_thread_state(void)
+{
+       union acpi_generic_state *state;
+
+       ACPI_FUNCTION_TRACE("ut_create_thread_state");
+
+       /* Create the generic state object */
+
+       state = acpi_ut_create_generic_state();
+       if (!state) {
+               return_PTR(NULL);
+       }
+
+       /* Init fields specific to the update struct */
+
+       state->common.data_type = ACPI_DESC_TYPE_STATE_THREAD;
+       state->thread.thread_id = acpi_os_get_thread_id();
+
+       return_PTR((struct acpi_thread_state *)state);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_create_update_state
+ *
+ * PARAMETERS:  Object          - Initial Object to be installed in the state
+ *              Action          - Update action to be performed
+ *
+ * RETURN:      New state object, null on failure
+ *
+ * DESCRIPTION: Create an "Update State" - a flavor of the generic state used
+ *              to update reference counts and delete complex objects such
+ *              as packages.
+ *
+ ******************************************************************************/
+
+union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_object
+                                                     *object, u16 action)
+{
+       union acpi_generic_state *state;
+
+       ACPI_FUNCTION_TRACE_PTR("ut_create_update_state", object);
+
+       /* Create the generic state object */
+
+       state = acpi_ut_create_generic_state();
+       if (!state) {
+               return_PTR(NULL);
+       }
+
+       /* Init fields specific to the update struct */
+
+       state->common.data_type = ACPI_DESC_TYPE_STATE_UPDATE;
+       state->update.object = object;
+       state->update.value = action;
+
+       return_PTR(state);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_create_pkg_state
+ *
+ * PARAMETERS:  Object          - Initial Object to be installed in the state
+ *              Action          - Update action to be performed
+ *
+ * RETURN:      New state object, null on failure
+ *
+ * DESCRIPTION: Create a "Package State"
+ *
+ ******************************************************************************/
+
+union acpi_generic_state *acpi_ut_create_pkg_state(void *internal_object,
+                                                  void *external_object,
+                                                  u16 index)
+{
+       union acpi_generic_state *state;
+
+       ACPI_FUNCTION_TRACE_PTR("ut_create_pkg_state", internal_object);
+
+       /* Create the generic state object */
+
+       state = acpi_ut_create_generic_state();
+       if (!state) {
+               return_PTR(NULL);
+       }
+
+       /* Init fields specific to the update struct */
+
+       state->common.data_type = ACPI_DESC_TYPE_STATE_PACKAGE;
+       state->pkg.source_object = (union acpi_operand_object *)internal_object;
+       state->pkg.dest_object = external_object;
+       state->pkg.index = index;
+       state->pkg.num_packages = 1;
+
+       return_PTR(state);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_create_control_state
+ *
+ * PARAMETERS:  None
+ *
+ * RETURN:      New state object, null on failure
+ *
+ * DESCRIPTION: Create a "Control State" - a flavor of the generic state used
+ *              to support nested IF/WHILE constructs in the AML.
+ *
+ ******************************************************************************/
+
+union acpi_generic_state *acpi_ut_create_control_state(void)
+{
+       union acpi_generic_state *state;
+
+       ACPI_FUNCTION_TRACE("ut_create_control_state");
+
+       /* Create the generic state object */
+
+       state = acpi_ut_create_generic_state();
+       if (!state) {
+               return_PTR(NULL);
+       }
+
+       /* Init fields specific to the control struct */
+
+       state->common.data_type = ACPI_DESC_TYPE_STATE_CONTROL;
+       state->common.state = ACPI_CONTROL_CONDITIONAL_EXECUTING;
+
+       return_PTR(state);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_delete_generic_state
+ *
+ * PARAMETERS:  State               - The state object to be deleted
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Put a state object back into the global state cache.  The object
+ *              is not actually freed at this time.
+ *
+ ******************************************************************************/
+
+void acpi_ut_delete_generic_state(union acpi_generic_state *state)
+{
+       ACPI_FUNCTION_TRACE("ut_delete_generic_state");
+
+       (void)acpi_os_release_object(acpi_gbl_state_cache, state);
+       return_VOID;
+}
index e8803d81065635ad7435ca1f8899a6b616b4e64b..f06bd5e5e9d1b2970b4cb33f897552177f786f6c 100644 (file)
 #include <acpi/acpi.h>
 #include <acpi/acevents.h>
 #include <acpi/acnamesp.h>
-#include <acpi/acparser.h>
-#include <acpi/acdispat.h>
 #include <acpi/acdebug.h>
 
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utxface")
-
+ACPI_MODULE_NAME("utxface")
 
 /*******************************************************************************
  *
  *              called, so any early initialization belongs here.
  *
  ******************************************************************************/
-
-acpi_status
-acpi_initialize_subsystem (
-       void)
+acpi_status acpi_initialize_subsystem(void)
 {
-       acpi_status                     status;
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_initialize_subsystem");
 
-       ACPI_FUNCTION_TRACE ("acpi_initialize_subsystem");
+       ACPI_DEBUG_EXEC(acpi_ut_init_stack_ptr_trace());
 
+       /* Initialize the OS-Dependent layer */
 
-       ACPI_DEBUG_EXEC (acpi_ut_init_stack_ptr_trace ());
-
+       status = acpi_os_initialize();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("OSD failed to initialize, %s\n",
+                                  acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
+       }
 
        /* Initialize all globals used by the subsystem */
 
-       acpi_ut_init_globals ();
-
-       /* Initialize the OS-Dependent layer */
-
-       status = acpi_os_initialize ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("OSD failed to initialize, %s\n",
-                       acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
-       }
+       acpi_ut_init_globals();
 
        /* Create the default mutex objects */
 
-       status = acpi_ut_mutex_initialize ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Global mutex creation failure, %s\n",
-                       acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       status = acpi_ut_mutex_initialize();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Global mutex creation failure, %s\n",
+                                  acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
        /*
         * Initialize the namespace manager and
         * the root of the namespace tree
         */
-       status = acpi_ns_root_initialize ();
-       if (ACPI_FAILURE (status)) {
-               ACPI_REPORT_ERROR (("Namespace initialization failure, %s\n",
-                       acpi_format_exception (status)));
-               return_ACPI_STATUS (status);
+       status = acpi_ns_root_initialize();
+       if (ACPI_FAILURE(status)) {
+               ACPI_REPORT_ERROR(("Namespace initialization failure, %s\n",
+                                  acpi_format_exception(status)));
+               return_ACPI_STATUS(status);
        }
 
        /* If configured, initialize the AML debugger */
 
-       ACPI_DEBUGGER_EXEC (status = acpi_db_initialize ());
+       ACPI_DEBUGGER_EXEC(status = acpi_db_initialize());
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_enable_subsystem
@@ -134,41 +124,39 @@ acpi_initialize_subsystem (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_enable_subsystem (
-       u32                             flags)
+acpi_status acpi_enable_subsystem(u32 flags)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_enable_subsystem");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("acpi_enable_subsystem");
 
        /*
         * We must initialize the hardware before we can enable ACPI.
         * The values from the FADT are validated here.
         */
        if (!(flags & ACPI_NO_HARDWARE_INIT)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "[Init] Initializing ACPI hardware\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "[Init] Initializing ACPI hardware\n"));
 
-               status = acpi_hw_initialize ();
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_hw_initialize();
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Enable ACPI mode */
 
        if (!(flags & ACPI_NO_ACPI_ENABLE)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "[Init] Going into ACPI mode\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "[Init] Going into ACPI mode\n"));
 
                acpi_gbl_original_mode = acpi_hw_get_mode();
 
-               status = acpi_enable ();
-               if (ACPI_FAILURE (status)) {
-                       ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "acpi_enable failed.\n"));
-                       return_ACPI_STATUS (status);
+               status = acpi_enable();
+               if (ACPI_FAILURE(status)) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                         "acpi_enable failed.\n"));
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -178,12 +166,12 @@ acpi_enable_subsystem (
         * install_address_space_handler interface.
         */
        if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "[Init] Installing default address space handlers\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "[Init] Installing default address space handlers\n"));
 
-               status = acpi_ev_install_region_handlers ();
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ev_install_region_handlers();
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -196,28 +184,28 @@ acpi_enable_subsystem (
         * execution!
         */
        if (!(flags & ACPI_NO_EVENT_INIT)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "[Init] Initializing ACPI events\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "[Init] Initializing ACPI events\n"));
 
-               status = acpi_ev_initialize_events ();
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ev_initialize_events();
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
        /* Install the SCI handler and Global Lock handler */
 
        if (!(flags & ACPI_NO_HANDLER_INIT)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "[Init] Installing SCI/GL handlers\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "[Init] Installing SCI/GL handlers\n"));
 
-               status = acpi_ev_install_xrupt_handlers ();
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ev_install_xrupt_handlers();
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
 /*******************************************************************************
@@ -233,15 +221,11 @@ acpi_enable_subsystem (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_initialize_objects (
-       u32                             flags)
+acpi_status acpi_initialize_objects(u32 flags)
 {
-       acpi_status                     status = AE_OK;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_initialize_objects");
+       acpi_status status = AE_OK;
 
+       ACPI_FUNCTION_TRACE("acpi_initialize_objects");
 
        /*
         * Run all _REG methods
@@ -251,12 +235,12 @@ acpi_initialize_objects (
         * contain executable AML (see call to acpi_ns_initialize_objects below).
         */
        if (!(flags & ACPI_NO_ADDRESS_SPACE_INIT)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "[Init] Executing _REG op_region methods\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "[Init] Executing _REG op_region methods\n"));
 
-               status = acpi_ev_initialize_op_regions ();
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ev_initialize_op_regions();
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -266,12 +250,12 @@ acpi_initialize_objects (
         * objects: operation_regions, buffer_fields, Buffers, and Packages.
         */
        if (!(flags & ACPI_NO_OBJECT_INIT)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "[Init] Completing Initialization of ACPI Objects\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "[Init] Completing Initialization of ACPI Objects\n"));
 
-               status = acpi_ns_initialize_objects ();
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ns_initialize_objects();
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -280,12 +264,12 @@ acpi_initialize_objects (
         * This runs the _STA and _INI methods.
         */
        if (!(flags & ACPI_NO_DEVICE_INIT)) {
-               ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
-                       "[Init] Initializing ACPI Devices\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
+                                 "[Init] Initializing ACPI Devices\n"));
 
-               status = acpi_ns_initialize_devices ();
-               if (ACPI_FAILURE (status)) {
-                       return_ACPI_STATUS (status);
+               status = acpi_ns_initialize_devices();
+               if (ACPI_FAILURE(status)) {
+                       return_ACPI_STATUS(status);
                }
        }
 
@@ -294,13 +278,12 @@ acpi_initialize_objects (
         * the table load filled them up more than they will be at runtime --
         * thus wasting non-paged memory.
         */
-       status = acpi_purge_cached_objects ();
+       status = acpi_purge_cached_objects();
 
        acpi_gbl_startup_flags |= ACPI_INITIALIZED_OK;
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_terminate
@@ -313,15 +296,11 @@ acpi_initialize_objects (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_terminate (
-       void)
+acpi_status acpi_terminate(void)
 {
-       acpi_status                 status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_terminate");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE("acpi_terminate");
 
        /* Terminate the AML Debugger if present */
 
@@ -329,28 +308,25 @@ acpi_terminate (
 
        /* Shutdown and free all resources */
 
-       acpi_ut_subsystem_shutdown ();
-
+       acpi_ut_subsystem_shutdown();
 
        /* Free the mutex objects */
 
-       acpi_ut_mutex_terminate ();
-
+       acpi_ut_mutex_terminate();
 
 #ifdef ACPI_DEBUGGER
 
        /* Shut down the debugger */
 
-       acpi_db_terminate ();
+       acpi_db_terminate();
 #endif
 
        /* Now we can shutdown the OS-dependent layer */
 
-       status = acpi_os_terminate ();
-       return_ACPI_STATUS (status);
+       status = acpi_os_terminate();
+       return_ACPI_STATUS(status);
 }
 
-
 #ifdef ACPI_FUTURE_USAGE
 /*******************************************************************************
  *
@@ -366,20 +342,16 @@ acpi_terminate (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_subsystem_status (
-       void)
+acpi_status acpi_subsystem_status(void)
 {
 
        if (acpi_gbl_startup_flags & ACPI_INITIALIZED_OK) {
                return (AE_OK);
-       }
-       else {
+       } else {
                return (AE_ERROR);
        }
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_get_system_info
@@ -398,64 +370,60 @@ acpi_subsystem_status (
  *
  ******************************************************************************/
 
-acpi_status
-acpi_get_system_info (
-       struct acpi_buffer              *out_buffer)
+acpi_status acpi_get_system_info(struct acpi_buffer * out_buffer)
 {
-       struct acpi_system_info         *info_ptr;
-       acpi_status                     status;
-       u32                             i;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_system_info");
+       struct acpi_system_info *info_ptr;
+       acpi_status status;
+       u32 i;
 
+       ACPI_FUNCTION_TRACE("acpi_get_system_info");
 
        /* Parameter validation */
 
-       status = acpi_ut_validate_buffer (out_buffer);
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status = acpi_ut_validate_buffer(out_buffer);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Validate/Allocate/Clear caller buffer */
 
-       status = acpi_ut_initialize_buffer (out_buffer, sizeof (struct acpi_system_info));
-       if (ACPI_FAILURE (status)) {
-               return_ACPI_STATUS (status);
+       status =
+           acpi_ut_initialize_buffer(out_buffer,
+                                     sizeof(struct acpi_system_info));
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /*
         * Populate the return buffer
         */
-       info_ptr = (struct acpi_system_info *) out_buffer->pointer;
+       info_ptr = (struct acpi_system_info *)out_buffer->pointer;
 
-       info_ptr->acpi_ca_version   = ACPI_CA_VERSION;
+       info_ptr->acpi_ca_version = ACPI_CA_VERSION;
 
        /* System flags (ACPI capabilities) */
 
-       info_ptr->flags             = ACPI_SYS_MODE_ACPI;
+       info_ptr->flags = ACPI_SYS_MODE_ACPI;
 
        /* Timer resolution - 24 or 32 bits  */
 
        if (!acpi_gbl_FADT) {
                info_ptr->timer_resolution = 0;
-       }
-       else if (acpi_gbl_FADT->tmr_val_ext == 0) {
+       } else if (acpi_gbl_FADT->tmr_val_ext == 0) {
                info_ptr->timer_resolution = 24;
-       }
-       else {
+       } else {
                info_ptr->timer_resolution = 32;
        }
 
        /* Clear the reserved fields */
 
-       info_ptr->reserved1         = 0;
-       info_ptr->reserved2         = 0;
+       info_ptr->reserved1 = 0;
+       info_ptr->reserved2 = 0;
 
        /* Current debug levels */
 
-       info_ptr->debug_layer       = acpi_dbg_layer;
-       info_ptr->debug_level       = acpi_dbg_level;
+       info_ptr->debug_layer = acpi_dbg_layer;
+       info_ptr->debug_level = acpi_dbg_level;
 
        /* Current status of the ACPI tables, per table type */
 
@@ -464,10 +432,10 @@ acpi_get_system_info (
                info_ptr->table_info[i].count = acpi_gbl_table_lists[i].count;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
-EXPORT_SYMBOL(acpi_get_system_info);
 
+EXPORT_SYMBOL(acpi_get_system_info);
 
 /*****************************************************************************
  *
@@ -485,9 +453,7 @@ EXPORT_SYMBOL(acpi_get_system_info);
  ****************************************************************************/
 
 acpi_status
-acpi_install_initialization_handler (
-       acpi_init_handler               handler,
-       u32                             function)
+acpi_install_initialization_handler(acpi_init_handler handler, u32 function)
 {
 
        if (!handler) {
@@ -502,7 +468,7 @@ acpi_install_initialization_handler (
        return AE_OK;
 }
 
-#endif  /*  ACPI_FUTURE_USAGE  */
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*****************************************************************************
  *
@@ -516,19 +482,13 @@ acpi_install_initialization_handler (
  *
  ****************************************************************************/
 
-acpi_status
-acpi_purge_cached_objects (
-       void)
+acpi_status acpi_purge_cached_objects(void)
 {
-       ACPI_FUNCTION_TRACE ("acpi_purge_cached_objects");
-
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
-       acpi_ut_delete_generic_state_cache ();
-       acpi_ut_delete_object_cache ();
-       acpi_ds_delete_walk_state_cache ();
-       acpi_ps_delete_parse_cache ();
-#endif
+       ACPI_FUNCTION_TRACE("acpi_purge_cached_objects");
 
-       return_ACPI_STATUS (AE_OK);
+       (void)acpi_os_purge_cache(acpi_gbl_state_cache);
+       (void)acpi_os_purge_cache(acpi_gbl_operand_cache);
+       (void)acpi_os_purge_cache(acpi_gbl_ps_node_cache);
+       (void)acpi_os_purge_cache(acpi_gbl_ps_node_ext_cache);
+       return_ACPI_STATUS(AE_OK);
 }
index 1ce2047c3804d828fd16404838154af9e9bec8be..6458c47f7ac202c5113fab82f2563f11d477bac8 100644 (file)
 #include <acpi/acpi_bus.h>
 #include <acpi/acpi_drivers.h>
 
-
 #define _COMPONENT             ACPI_BUS_COMPONENT
-ACPI_MODULE_NAME               ("acpi_utils")
-
+ACPI_MODULE_NAME("acpi_utils")
 
 /* --------------------------------------------------------------------------
                             Object Evaluation Helpers
    -------------------------------------------------------------------------- */
-
 #ifdef ACPI_DEBUG_OUTPUT
 #define acpi_util_eval_error(h,p,s) {\
        char prefix[80] = {'\0'};\
@@ -49,26 +46,24 @@ ACPI_MODULE_NAME            ("acpi_utils")
 #else
 #define acpi_util_eval_error(h,p,s)
 #endif
-
-
 acpi_status
-acpi_extract_package (
-       union acpi_object       *package,
-       struct acpi_buffer      *format,
-       struct acpi_buffer      *buffer)
+acpi_extract_package(union acpi_object *package,
+                    struct acpi_buffer *format, struct acpi_buffer *buffer)
 {
-       u32                     size_required = 0;
-       u32                     tail_offset = 0;
-       char                    *format_string = NULL;
-       u32                     format_count = 0;
-       u32                     i = 0;
-       u8                      *head = NULL;
-       u8                      *tail = NULL;
+       u32 size_required = 0;
+       u32 tail_offset = 0;
+       char *format_string = NULL;
+       u32 format_count = 0;
+       u32 i = 0;
+       u8 *head = NULL;
+       u8 *tail = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_extract_package");
 
-       if (!package || (package->type != ACPI_TYPE_PACKAGE) || (package->package.count < 1)) {
-               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid 'package' argument\n"));
+       if (!package || (package->type != ACPI_TYPE_PACKAGE)
+           || (package->package.count < 1)) {
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Invalid 'package' argument\n"));
                return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
@@ -82,18 +77,20 @@ acpi_extract_package (
                return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       format_count = (format->length/sizeof(char)) - 1;
+       format_count = (format->length / sizeof(char)) - 1;
        if (format_count > package->package.count) {
-               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Format specifies more objects [%d] than exist in package [%d].", format_count, package->package.count));
+               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                 "Format specifies more objects [%d] than exist in package [%d].",
+                                 format_count, package->package.count));
                return_ACPI_STATUS(AE_BAD_DATA);
        }
 
-       format_string = (char*)format->pointer;
+       format_string = (char *)format->pointer;
 
        /*
         * Calculate size_required.
         */
-       for (i=0; i<format_count; i++) {
+       for (i = 0; i < format_count; i++) {
 
                union acpi_object *element = &(package->package.elements[i]);
 
@@ -110,11 +107,15 @@ acpi_extract_package (
                                tail_offset += sizeof(acpi_integer);
                                break;
                        case 'S':
-                               size_required += sizeof(char*) + sizeof(acpi_integer) + sizeof(char);
-                               tail_offset += sizeof(char*);
+                               size_required +=
+                                   sizeof(char *) + sizeof(acpi_integer) +
+                                   sizeof(char);
+                               tail_offset += sizeof(char *);
                                break;
                        default:
-                               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid package element [%d]: got number, expecing [%c].\n", i, format_string[i]));
+                               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                 "Invalid package element [%d]: got number, expecing [%c].\n",
+                                                 i, format_string[i]));
                                return_ACPI_STATUS(AE_BAD_DATA);
                                break;
                        }
@@ -124,15 +125,22 @@ acpi_extract_package (
                case ACPI_TYPE_BUFFER:
                        switch (format_string[i]) {
                        case 'S':
-                               size_required += sizeof(char*) + (element->string.length * sizeof(char)) + sizeof(char);
-                               tail_offset += sizeof(char*);
+                               size_required +=
+                                   sizeof(char *) +
+                                   (element->string.length * sizeof(char)) +
+                                   sizeof(char);
+                               tail_offset += sizeof(char *);
                                break;
                        case 'B':
-                               size_required += sizeof(u8*) + (element->buffer.length * sizeof(u8));
-                               tail_offset += sizeof(u8*);
+                               size_required +=
+                                   sizeof(u8 *) +
+                                   (element->buffer.length * sizeof(u8));
+                               tail_offset += sizeof(u8 *);
                                break;
                        default:
-                               ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid package element [%d] got string/buffer, expecing [%c].\n", i, format_string[i]));
+                               ACPI_DEBUG_PRINT((ACPI_DB_WARN,
+                                                 "Invalid package element [%d] got string/buffer, expecing [%c].\n",
+                                                 i, format_string[i]));
                                return_ACPI_STATUS(AE_BAD_DATA);
                                break;
                        }
@@ -140,7 +148,9 @@ acpi_extract_package (
 
                case ACPI_TYPE_PACKAGE:
                default:
-                       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found unsupported element at index=%d\n", i));
+                       ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                         "Found unsupported element at index=%d\n",
+                                         i));
                        /* TBD: handle nested packages... */
                        return_ACPI_STATUS(AE_SUPPORT);
                        break;
@@ -153,8 +163,7 @@ acpi_extract_package (
        if (buffer->length < size_required) {
                buffer->length = size_required;
                return_ACPI_STATUS(AE_BUFFER_OVERFLOW);
-       }
-       else if (buffer->length != size_required || !buffer->pointer) {
+       } else if (buffer->length != size_required || !buffer->pointer) {
                return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
@@ -164,7 +173,7 @@ acpi_extract_package (
        /*
         * Extract package data.
         */
-       for (i=0; i<format_count; i++) {
+       for (i = 0; i < format_count; i++) {
 
                u8 **pointer = NULL;
                union acpi_object *element = &(package->package.elements[i]);
@@ -178,14 +187,16 @@ acpi_extract_package (
                case ACPI_TYPE_INTEGER:
                        switch (format_string[i]) {
                        case 'N':
-                               *((acpi_integer*)head) = element->integer.value;
+                               *((acpi_integer *) head) =
+                                   element->integer.value;
                                head += sizeof(acpi_integer);
                                break;
                        case 'S':
-                               pointer = (u8**)head;
+                               pointer = (u8 **) head;
                                *pointer = tail;
-                               *((acpi_integer*)tail) = element->integer.value;
-                               head += sizeof(acpi_integer*);
+                               *((acpi_integer *) tail) =
+                                   element->integer.value;
+                               head += sizeof(acpi_integer *);
                                tail += sizeof(acpi_integer);
                                /* NULL terminate string */
                                *tail = (char)0;
@@ -201,20 +212,22 @@ acpi_extract_package (
                case ACPI_TYPE_BUFFER:
                        switch (format_string[i]) {
                        case 'S':
-                               pointer = (u8**)head;
+                               pointer = (u8 **) head;
                                *pointer = tail;
-                               memcpy(tail, element->string.pointer, element->string.length);
-                               head += sizeof(char*);
+                               memcpy(tail, element->string.pointer,
+                                      element->string.length);
+                               head += sizeof(char *);
                                tail += element->string.length * sizeof(char);
                                /* NULL terminate string */
                                *tail = (char)0;
                                tail += sizeof(char);
                                break;
                        case 'B':
-                               pointer = (u8**)head;
+                               pointer = (u8 **) head;
                                *pointer = tail;
-                               memcpy(tail, element->buffer.pointer, element->buffer.length);
-                               head += sizeof(u8*);
+                               memcpy(tail, element->buffer.pointer,
+                                      element->buffer.length);
+                               head += sizeof(u8 *);
                                tail += element->buffer.length * sizeof(u8);
                                break;
                        default:
@@ -233,19 +246,17 @@ acpi_extract_package (
 
        return_ACPI_STATUS(AE_OK);
 }
-EXPORT_SYMBOL(acpi_extract_package);
 
+EXPORT_SYMBOL(acpi_extract_package);
 
 acpi_status
-acpi_evaluate_integer (
-       acpi_handle             handle,
-       acpi_string             pathname,
-       struct acpi_object_list *arguments,
-       unsigned long           *data)
+acpi_evaluate_integer(acpi_handle handle,
+                     acpi_string pathname,
+                     struct acpi_object_list *arguments, unsigned long *data)
 {
-       acpi_status             status = AE_OK;
-       union acpi_object       *element;
-       struct acpi_buffer      buffer = {0,NULL};
+       acpi_status status = AE_OK;
+       union acpi_object *element;
+       struct acpi_buffer buffer = { 0, NULL };
 
        ACPI_FUNCTION_TRACE("acpi_evaluate_integer");
 
@@ -253,7 +264,7 @@ acpi_evaluate_integer (
                return_ACPI_STATUS(AE_BAD_PARAMETER);
 
        element = kmalloc(sizeof(union acpi_object), GFP_KERNEL);
-       if(!element)
+       if (!element)
                return_ACPI_STATUS(AE_NO_MEMORY);
 
        memset(element, 0, sizeof(union acpi_object));
@@ -277,20 +288,18 @@ acpi_evaluate_integer (
 
        return_ACPI_STATUS(AE_OK);
 }
-EXPORT_SYMBOL(acpi_evaluate_integer);
 
+EXPORT_SYMBOL(acpi_evaluate_integer);
 
 #if 0
 acpi_status
-acpi_evaluate_string (
-       acpi_handle             handle,
-       acpi_string             pathname,
-       acpi_object_list        *arguments,
-       acpi_string             *data)
+acpi_evaluate_string(acpi_handle handle,
+                    acpi_string pathname,
+                    acpi_object_list * arguments, acpi_string * data)
 {
-       acpi_status             status = AE_OK;
-       acpi_object             *element = NULL;
-       acpi_buffer             buffer = {ACPI_ALLOCATE_BUFFER, NULL};
+       acpi_status status = AE_OK;
+       acpi_object *element = NULL;
+       acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
 
        ACPI_FUNCTION_TRACE("acpi_evaluate_string");
 
@@ -305,9 +314,9 @@ acpi_evaluate_string (
 
        element = (acpi_object *) buffer.pointer;
 
-       if ((element->type != ACPI_TYPE_STRING) 
-               || (element->type != ACPI_TYPE_BUFFER)
-               || !element->string.length) {
+       if ((element->type != ACPI_TYPE_STRING)
+           || (element->type != ACPI_TYPE_BUFFER)
+           || !element->string.length) {
                acpi_util_eval_error(handle, pathname, AE_BAD_DATA);
                return_ACPI_STATUS(AE_BAD_DATA);
        }
@@ -329,19 +338,17 @@ acpi_evaluate_string (
 }
 #endif
 
-
 acpi_status
-acpi_evaluate_reference (
-       acpi_handle             handle,
-       acpi_string             pathname,
-       struct acpi_object_list *arguments,
-       struct acpi_handle_list *list)
+acpi_evaluate_reference(acpi_handle handle,
+                       acpi_string pathname,
+                       struct acpi_object_list *arguments,
+                       struct acpi_handle_list *list)
 {
-       acpi_status             status = AE_OK;
-       union acpi_object       *package = NULL;
-       union acpi_object       *element = NULL;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       u32                     i = 0;
+       acpi_status status = AE_OK;
+       union acpi_object *package = NULL;
+       union acpi_object *element = NULL;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       u32 i = 0;
 
        ACPI_FUNCTION_TRACE("acpi_evaluate_reference");
 
@@ -355,28 +362,28 @@ acpi_evaluate_reference (
        if (ACPI_FAILURE(status))
                goto end;
 
-       package = (union acpi_object *) buffer.pointer;
+       package = (union acpi_object *)buffer.pointer;
 
        if ((buffer.length == 0) || !package) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                       "No return object (len %X ptr %p)\n", 
-                       (unsigned)buffer.length, package));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "No return object (len %X ptr %p)\n",
+                                 (unsigned)buffer.length, package));
                status = AE_BAD_DATA;
                acpi_util_eval_error(handle, pathname, status);
                goto end;
        }
        if (package->type != ACPI_TYPE_PACKAGE) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                       "Expecting a [Package], found type %X\n", 
-                       package->type));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Expecting a [Package], found type %X\n",
+                                 package->type));
                status = AE_BAD_DATA;
                acpi_util_eval_error(handle, pathname, status);
                goto end;
        }
        if (!package->package.count) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                       "[Package] has zero elements (%p)\n", 
-                       package));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "[Package] has zero elements (%p)\n",
+                                 package));
                status = AE_BAD_DATA;
                acpi_util_eval_error(handle, pathname, status);
                goto end;
@@ -395,9 +402,9 @@ acpi_evaluate_reference (
 
                if (element->type != ACPI_TYPE_ANY) {
                        status = AE_BAD_DATA;
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, 
-                               "Expecting a [Reference] package element, found type %X\n",
-                               element->type));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Expecting a [Reference] package element, found type %X\n",
+                                         element->type));
                        acpi_util_eval_error(handle, pathname, status);
                        break;
                }
@@ -406,10 +413,10 @@ acpi_evaluate_reference (
 
                list->handles[i] = element->reference.handle;
                ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found reference [%p]\n",
-                       list->handles[i]));
+                                 list->handles[i]));
        }
 
-end:
+      end:
        if (ACPI_FAILURE(status)) {
                list->count = 0;
                //kfree(list->handles);
@@ -419,5 +426,5 @@ end:
 
        return_ACPI_STATUS(status);
 }
-EXPORT_SYMBOL(acpi_evaluate_reference);
 
+EXPORT_SYMBOL(acpi_evaluate_reference);
index 2cf264fd52e072e42fcff07b9cc6c948c9cbbede..e383d6109ae109c6963d43abe7ca71449e554518 100644 (file)
 #define ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS      0x85
 #define ACPI_VIDEO_NOTIFY_DISPLAY_OFF          0x86
 
-
 #define ACPI_VIDEO_HEAD_INVALID                (~0u - 1)
 #define ACPI_VIDEO_HEAD_END            (~0u)
 
-
 #define _COMPONENT             ACPI_VIDEO_COMPONENT
-ACPI_MODULE_NAME               ("acpi_video")
+ACPI_MODULE_NAME("acpi_video")
 
-MODULE_AUTHOR("Bruno Ducrot");
+    MODULE_AUTHOR("Bruno Ducrot");
 MODULE_DESCRIPTION(ACPI_VIDEO_DRIVER_NAME);
 MODULE_LICENSE("GPL");
 
-static int acpi_video_bus_add (struct acpi_device *device);
-static int acpi_video_bus_remove (struct acpi_device *device, int type);
-static int acpi_video_bus_match (struct acpi_device *device, struct acpi_driver *driver);
+static int acpi_video_bus_add(struct acpi_device *device);
+static int acpi_video_bus_remove(struct acpi_device *device, int type);
+static int acpi_video_bus_match(struct acpi_device *device,
+                               struct acpi_driver *driver);
 
 static struct acpi_driver acpi_video_bus = {
        .name = ACPI_VIDEO_DRIVER_NAME,
@@ -76,187 +75,192 @@ static struct acpi_driver acpi_video_bus = {
                .add = acpi_video_bus_add,
                .remove = acpi_video_bus_remove,
                .match = acpi_video_bus_match,
-       },
+               },
 };
 
 struct acpi_video_bus_flags {
-       u8      multihead:1;    /* can switch video heads */
-       u8      rom:1;          /* can retrieve a video rom */
-       u8      post:1;         /* can configure the head to */
-       u8      reserved:5;
+       u8 multihead:1;         /* can switch video heads */
+       u8 rom:1;               /* can retrieve a video rom */
+       u8 post:1;              /* can configure the head to */
+       u8 reserved:5;
 };
 
 struct acpi_video_bus_cap {
-       u8      _DOS:1; /*Enable/Disable output switching*/
-       u8      _DOD:1; /*Enumerate all devices attached to display adapter*/
-       u8      _ROM:1; /*Get ROM Data*/
-       u8      _GPD:1; /*Get POST Device*/
-       u8      _SPD:1; /*Set POST Device*/
-       u8      _VPO:1; /*Video POST Options*/
-       u8      reserved:2;
+       u8 _DOS:1;              /*Enable/Disable output switching */
+       u8 _DOD:1;              /*Enumerate all devices attached to display adapter */
+       u8 _ROM:1;              /*Get ROM Data */
+       u8 _GPD:1;              /*Get POST Device */
+       u8 _SPD:1;              /*Set POST Device */
+       u8 _VPO:1;              /*Video POST Options */
+       u8 reserved:2;
 };
 
-struct acpi_video_device_attrib{
-       u32     display_index:4; /* A zero-based instance of the Display*/
-       u32     display_port_attachment:4; /*This field differenates displays type*/
-       u32     display_type:4; /*Describe the specific type in use*/
-       u32     vendor_specific:4; /*Chipset Vendor Specifi*/ 
-       u32     bios_can_detect:1; /*BIOS can detect the device*/
-       u32     depend_on_vga:1; /*Non-VGA output device whose power is related to 
-                                  the VGA device.*/
-       u32     pipe_id:3; /*For VGA multiple-head devices.*/
-       u32     reserved:10; /*Must be 0*/
-       u32     device_id_scheme:1; /*Device ID Scheme*/
+struct acpi_video_device_attrib {
+       u32 display_index:4;    /* A zero-based instance of the Display */
+       u32 display_port_attachment:4;  /*This field differenates displays type */
+       u32 display_type:4;     /*Describe the specific type in use */
+       u32 vendor_specific:4;  /*Chipset Vendor Specifi */
+       u32 bios_can_detect:1;  /*BIOS can detect the device */
+       u32 depend_on_vga:1;    /*Non-VGA output device whose power is related to 
+                                  the VGA device. */
+       u32 pipe_id:3;          /*For VGA multiple-head devices. */
+       u32 reserved:10;        /*Must be 0 */
+       u32 device_id_scheme:1; /*Device ID Scheme */
 };
 
 struct acpi_video_enumerated_device {
        union {
                u32 int_val;
-               struct acpi_video_device_attrib attrib;
+               struct acpi_video_device_attrib attrib;
        } value;
        struct acpi_video_device *bind_info;
 };
 
 struct acpi_video_bus {
-       acpi_handle     handle;
-       u8      dos_setting;
+       acpi_handle handle;
+       u8 dos_setting;
        struct acpi_video_enumerated_device *attached_array;
-       u8                      attached_count;
-       struct acpi_video_bus_cap       cap;
+       u8 attached_count;
+       struct acpi_video_bus_cap cap;
        struct acpi_video_bus_flags flags;
-       struct semaphore        sem;
-       struct list_head        video_device_list;
-       struct proc_dir_entry   *dir;
+       struct semaphore sem;
+       struct list_head video_device_list;
+       struct proc_dir_entry *dir;
 };
 
 struct acpi_video_device_flags {
-       u8      crt:1;
-       u8      lcd:1;
-       u8      tvout:1;
-       u8      bios:1;
-       u8      unknown:1;
-       u8      reserved:3;
+       u8 crt:1;
+       u8 lcd:1;
+       u8 tvout:1;
+       u8 bios:1;
+       u8 unknown:1;
+       u8 reserved:3;
 };
 
 struct acpi_video_device_cap {
-       u8      _ADR:1; /*Return the unique ID */
-       u8      _BCL:1; /*Query list of brightness control levels supported*/
-       u8      _BCM:1; /*Set the brightness level*/
-       u8      _DDC:1; /*Return the EDID for this device*/
-       u8      _DCS:1; /*Return status of output device*/
-       u8      _DGS:1; /*Query graphics state*/
-       u8      _DSS:1; /*Device state set*/
-       u8      _reserved:1;
+       u8 _ADR:1;              /*Return the unique ID */
+       u8 _BCL:1;              /*Query list of brightness control levels supported */
+       u8 _BCM:1;              /*Set the brightness level */
+       u8 _DDC:1;              /*Return the EDID for this device */
+       u8 _DCS:1;              /*Return status of output device */
+       u8 _DGS:1;              /*Query graphics state */
+       u8 _DSS:1;              /*Device state set */
+       u8 _reserved:1;
 };
 
 struct acpi_video_device_brightness {
-       int     curr;
-       int     count;
-       int     *levels;
+       int curr;
+       int count;
+       int *levels;
 };
 
 struct acpi_video_device {
-       acpi_handle             handle;
-       unsigned long           device_id;
-       struct acpi_video_device_flags  flags;
-       struct acpi_video_device_cap    cap;
-       struct list_head        entry;
-       struct acpi_video_bus   *video;
-       struct acpi_device      *dev;
+       acpi_handle handle;
+       unsigned long device_id;
+       struct acpi_video_device_flags flags;
+       struct acpi_video_device_cap cap;
+       struct list_head entry;
+       struct acpi_video_bus *video;
+       struct acpi_device *dev;
        struct acpi_video_device_brightness *brightness;
 };
 
-
 /* bus */
 static int acpi_video_bus_info_open_fs(struct inode *inode, struct file *file);
 static struct file_operations acpi_video_bus_info_fops = {
-       .open           = acpi_video_bus_info_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_video_bus_info_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 static int acpi_video_bus_ROM_open_fs(struct inode *inode, struct file *file);
 static struct file_operations acpi_video_bus_ROM_fops = {
-       .open           = acpi_video_bus_ROM_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_video_bus_ROM_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
-static int acpi_video_bus_POST_info_open_fs(struct inode *inode, struct file *file);
+static int acpi_video_bus_POST_info_open_fs(struct inode *inode,
+                                           struct file *file);
 static struct file_operations acpi_video_bus_POST_info_fops = {
-       .open           = acpi_video_bus_POST_info_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_video_bus_POST_info_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 static int acpi_video_bus_POST_open_fs(struct inode *inode, struct file *file);
 static struct file_operations acpi_video_bus_POST_fops = {
-       .open           = acpi_video_bus_POST_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_video_bus_POST_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
-
 static int acpi_video_bus_DOS_open_fs(struct inode *inode, struct file *file);
 static struct file_operations acpi_video_bus_DOS_fops = {
-       .open           = acpi_video_bus_DOS_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_video_bus_DOS_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
 /* device */
-static int acpi_video_device_info_open_fs(struct inode *inode, struct file *file);
+static int acpi_video_device_info_open_fs(struct inode *inode,
+                                         struct file *file);
 static struct file_operations acpi_video_device_info_fops = {
-       .open           = acpi_video_device_info_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_video_device_info_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
-static int acpi_video_device_state_open_fs(struct inode *inode, struct file *file);
+static int acpi_video_device_state_open_fs(struct inode *inode,
+                                          struct file *file);
 static struct file_operations acpi_video_device_state_fops = {
-       .open           = acpi_video_device_state_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_video_device_state_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
-static int acpi_video_device_brightness_open_fs(struct inode *inode, struct file *file);
+static int acpi_video_device_brightness_open_fs(struct inode *inode,
+                                               struct file *file);
 static struct file_operations acpi_video_device_brightness_fops = {
-       .open           = acpi_video_device_brightness_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_video_device_brightness_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
-static int acpi_video_device_EDID_open_fs(struct inode *inode, struct file *file);
+static int acpi_video_device_EDID_open_fs(struct inode *inode,
+                                         struct file *file);
 static struct file_operations acpi_video_device_EDID_fops = {
-       .open           = acpi_video_device_EDID_open_fs,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
+       .open = acpi_video_device_EDID_open_fs,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
 };
 
-static char    device_decode[][30] = {
+static char device_decode[][30] = {
        "motherboard VGA device",
        "PCI VGA device",
        "AGP VGA device",
        "UNKNOWN",
 };
 
-static void acpi_video_device_notify ( acpi_handle handle, u32 event, void *data);
-static void acpi_video_device_rebind( struct acpi_video_bus *video);
-static void acpi_video_device_bind( struct acpi_video_bus *video, struct acpi_video_device *device);
+static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data);
+static void acpi_video_device_rebind(struct acpi_video_bus *video);
+static void acpi_video_device_bind(struct acpi_video_bus *video,
+                                  struct acpi_video_device *device);
 static int acpi_video_device_enumerate(struct acpi_video_bus *video);
-static int acpi_video_switch_output( struct acpi_video_bus *video, int event);
-static int acpi_video_get_next_level( struct acpi_video_device *device, u32 level_current,u32 event);
-static void acpi_video_switch_brightness ( struct acpi_video_device *device, int event);
-
+static int acpi_video_switch_output(struct acpi_video_bus *video, int event);
+static int acpi_video_get_next_level(struct acpi_video_device *device,
+                                    u32 level_current, u32 event);
+static void acpi_video_switch_brightness(struct acpi_video_device *device,
+                                        int event);
 
 /* --------------------------------------------------------------------------
                                Video Management
@@ -265,11 +269,9 @@ static void acpi_video_switch_brightness ( struct acpi_video_device *device, int
 /* device */
 
 static int
-acpi_video_device_query (
-       struct acpi_video_device        *device,
-       unsigned long                   *state)
+acpi_video_device_query(struct acpi_video_device *device, unsigned long *state)
 {
-       int                     status;
+       int status;
        ACPI_FUNCTION_TRACE("acpi_video_device_query");
        status = acpi_evaluate_integer(device->handle, "_DGS", NULL, state);
 
@@ -277,11 +279,10 @@ acpi_video_device_query (
 }
 
 static int
-acpi_video_device_get_state (
-       struct acpi_video_device        *device,
-       unsigned long           *state)
+acpi_video_device_get_state(struct acpi_video_device *device,
+                           unsigned long *state)
 {
-       int                     status;
+       int status;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_get_state");
 
@@ -291,31 +292,28 @@ acpi_video_device_get_state (
 }
 
 static int
-acpi_video_device_set_state (
-       struct acpi_video_device        *device,
-       int                     state)
+acpi_video_device_set_state(struct acpi_video_device *device, int state)
 {
-       int                     status;
-       union acpi_object       arg0 = {ACPI_TYPE_INTEGER};
-       struct acpi_object_list args = {1, &arg0};
+       int status;
+       union acpi_object arg0 = { ACPI_TYPE_INTEGER };
+       struct acpi_object_list args = { 1, &arg0 };
+       unsigned long ret;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_set_state");
 
        arg0.integer.value = state;
-       status = acpi_evaluate_integer(device->handle, "_DSS", &args, NULL);
+       status = acpi_evaluate_integer(device->handle, "_DSS", &args, &ret);
 
        return_VALUE(status);
 }
 
 static int
-acpi_video_device_lcd_query_levels (
-       struct acpi_video_device        *device,
-       union acpi_object               **levels)
+acpi_video_device_lcd_query_levels(struct acpi_video_device *device,
+                                  union acpi_object **levels)
 {
-       int                     status;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       union acpi_object       *obj;
-
+       int status;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       union acpi_object *obj;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_lcd_query_levels");
 
@@ -324,7 +322,7 @@ acpi_video_device_lcd_query_levels (
        status = acpi_evaluate_object(device->handle, "_BCL", NULL, &buffer);
        if (!ACPI_SUCCESS(status))
                return_VALUE(status);
-       obj = (union acpi_object *) buffer.pointer;
+       obj = (union acpi_object *)buffer.pointer;
        if (!obj && (obj->type != ACPI_TYPE_PACKAGE)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _BCL data\n"));
                status = -EFAULT;
@@ -335,7 +333,7 @@ acpi_video_device_lcd_query_levels (
 
        return_VALUE(0);
 
-err:
+      err:
        if (buffer.pointer)
                kfree(buffer.pointer);
 
@@ -343,13 +341,11 @@ err:
 }
 
 static int
-acpi_video_device_lcd_set_level (
-       struct acpi_video_device        *device,
-       int                             level)
+acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level)
 {
-       int                     status;
-       union acpi_object       arg0 = {ACPI_TYPE_INTEGER};
-       struct acpi_object_list args = {1, &arg0};
+       int status;
+       union acpi_object arg0 = { ACPI_TYPE_INTEGER };
+       struct acpi_object_list args = { 1, &arg0 };
 
        ACPI_FUNCTION_TRACE("acpi_video_device_lcd_set_level");
 
@@ -361,11 +357,10 @@ acpi_video_device_lcd_set_level (
 }
 
 static int
-acpi_video_device_lcd_get_level_current (
-       struct acpi_video_device        *device,
-       unsigned long   *level)
+acpi_video_device_lcd_get_level_current(struct acpi_video_device *device,
+                                       unsigned long *level)
 {
-       int                     status;
+       int status;
        ACPI_FUNCTION_TRACE("acpi_video_device_lcd_get_level_current");
 
        status = acpi_evaluate_integer(device->handle, "_BQC", NULL, level);
@@ -374,16 +369,14 @@ acpi_video_device_lcd_get_level_current (
 }
 
 static int
-acpi_video_device_EDID (
-       struct acpi_video_device        *device,
-       union acpi_object               **edid,
-       ssize_t                         length)
+acpi_video_device_EDID(struct acpi_video_device *device,
+                      union acpi_object **edid, ssize_t length)
 {
-       int                     status;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       union acpi_object       *obj;
-       union acpi_object       arg0 = {ACPI_TYPE_INTEGER};
-       struct acpi_object_list args = {1, &arg0};
+       int status;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       union acpi_object *obj;
+       union acpi_object arg0 = { ACPI_TYPE_INTEGER };
+       struct acpi_object_list args = { 1, &arg0 };
 
        ACPI_FUNCTION_TRACE("acpi_video_device_get_EDID");
 
@@ -402,7 +395,7 @@ acpi_video_device_EDID (
        if (ACPI_FAILURE(status))
                return_VALUE(-ENODEV);
 
-       obj = (union acpi_object *) buffer.pointer;
+       obj = (union acpi_object *)buffer.pointer;
 
        if (obj && obj->type == ACPI_TYPE_BUFFER)
                *edid = obj;
@@ -415,18 +408,15 @@ acpi_video_device_EDID (
        return_VALUE(status);
 }
 
-
 /* bus */
 
 static int
-acpi_video_bus_set_POST (
-       struct acpi_video_bus   *video,
-       unsigned long           option)
+acpi_video_bus_set_POST(struct acpi_video_bus *video, unsigned long option)
 {
-       int                     status;
-       unsigned long           tmp;
-       union acpi_object       arg0 = {ACPI_TYPE_INTEGER};
-       struct acpi_object_list args = {1, &arg0};
+       int status;
+       unsigned long tmp;
+       union acpi_object arg0 = { ACPI_TYPE_INTEGER };
+       struct acpi_object_list args = { 1, &arg0 };
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_set_POST");
 
@@ -434,15 +424,13 @@ acpi_video_bus_set_POST (
 
        status = acpi_evaluate_integer(video->handle, "_SPD", &args, &tmp);
        if (ACPI_SUCCESS(status))
-               status = tmp ? (-EINVAL):(AE_OK);
+               status = tmp ? (-EINVAL) : (AE_OK);
 
        return_VALUE(status);
 }
 
 static int
-acpi_video_bus_get_POST (
-       struct acpi_video_bus   *video,
-       unsigned long           *id)
+acpi_video_bus_get_POST(struct acpi_video_bus *video, unsigned long *id)
 {
        int status;
 
@@ -454,11 +442,10 @@ acpi_video_bus_get_POST (
 }
 
 static int
-acpi_video_bus_POST_options (
-       struct acpi_video_bus   *video,
-       unsigned long           *options)
+acpi_video_bus_POST_options(struct acpi_video_bus *video,
+                           unsigned long *options)
 {
-       int                     status;
+       int status;
        ACPI_FUNCTION_TRACE("acpi_video_bus_POST_options");
 
        status = acpi_evaluate_integer(video->handle, "_VPO", NULL, options);
@@ -489,18 +476,15 @@ acpi_video_bus_POST_options (
  */
 
 static int
-acpi_video_bus_DOS(
-       struct acpi_video_bus   *video,
-       int                     bios_flag,
-       int                     lcd_flag)
+acpi_video_bus_DOS(struct acpi_video_bus *video, int bios_flag, int lcd_flag)
 {
-       acpi_integer            status = 0;
-       union acpi_object       arg0 = {ACPI_TYPE_INTEGER};
-       struct acpi_object_list args = {1, &arg0};
+       acpi_integer status = 0;
+       union acpi_object arg0 = { ACPI_TYPE_INTEGER };
+       struct acpi_object_list args = { 1, &arg0 };
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_DOS");
 
-       if (bios_flag < 0 || bios_flag >3 || lcd_flag < 0 || lcd_flag > 1){
+       if (bios_flag < 0 || bios_flag > 3 || lcd_flag < 0 || lcd_flag > 1) {
                status = -1;
                goto Failed;
        }
@@ -508,7 +492,7 @@ acpi_video_bus_DOS(
        video->dos_setting = arg0.integer.value;
        acpi_evaluate_object(video->handle, "_DOS", &args, NULL);
 
-Failed:
+      Failed:
        return_VALUE(status);
 }
 
@@ -523,10 +507,9 @@ Failed:
  *  device.
  */
 
-static void
-acpi_video_device_find_cap (struct acpi_video_device *device)
+static void acpi_video_device_find_cap(struct acpi_video_device *device)
 {
-       acpi_integer            status;
+       acpi_integer status;
        acpi_handle h_dummy1;
        int i;
        union acpi_object *obj = NULL;
@@ -534,27 +517,27 @@ acpi_video_device_find_cap (struct acpi_video_device *device)
 
        ACPI_FUNCTION_TRACE("acpi_video_device_find_cap");
 
-       memset( &device->cap, 0, 4);
+       memset(&device->cap, 0, 4);
 
-       ifACPI_SUCCESS(acpi_get_handle(device->handle, "_ADR", &h_dummy1))) {
+       if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_ADR", &h_dummy1))) {
                device->cap._ADR = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(device->handle, "_BCL", &h_dummy1))) {
-               device->cap._BCL= 1;
+       if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_BCL", &h_dummy1))) {
+               device->cap._BCL = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(device->handle, "_BCM", &h_dummy1))) {
-               device->cap._BCM= 1;
+       if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_BCM", &h_dummy1))) {
+               device->cap._BCM = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(device->handle, "_DDC", &h_dummy1))) {
-               device->cap._DDC= 1;
+       if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DDC", &h_dummy1))) {
+               device->cap._DDC = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(device->handle, "_DCS", &h_dummy1))) {
+       if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DCS", &h_dummy1))) {
                device->cap._DCS = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(device->handle, "_DGS", &h_dummy1))) {
+       if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DGS", &h_dummy1))) {
                device->cap._DGS = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(device->handle, "_DSS", &h_dummy1))) {
+       if (ACPI_SUCCESS(acpi_get_handle(device->handle, "_DSS", &h_dummy1))) {
                device->cap._DSS = 1;
        }
 
@@ -563,34 +546,38 @@ acpi_video_device_find_cap (struct acpi_video_device *device)
        if (obj && obj->type == ACPI_TYPE_PACKAGE && obj->package.count >= 2) {
                int count = 0;
                union acpi_object *o;
-               
+
                br = kmalloc(sizeof(*br), GFP_KERNEL);
                if (!br) {
                        printk(KERN_ERR "can't allocate memory\n");
                } else {
                        memset(br, 0, sizeof(*br));
                        br->levels = kmalloc(obj->package.count *
-                                       sizeof *(br->levels), GFP_KERNEL);
+                                            sizeof *(br->levels), GFP_KERNEL);
                        if (!br->levels)
                                goto out;
 
                        for (i = 0; i < obj->package.count; i++) {
-                               o = (union acpi_object *) &obj->package.elements[i];
+                               o = (union acpi_object *)&obj->package.
+                                   elements[i];
                                if (o->type != ACPI_TYPE_INTEGER) {
-                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid data\n"));
+                                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                                         "Invalid data\n"));
                                        continue;
                                }
                                br->levels[count] = (u32) o->integer.value;
                                count++;
                        }
-out:
+                     out:
                        if (count < 2) {
                                kfree(br->levels);
                                kfree(br);
                        } else {
                                br->count = count;
                                device->brightness = br;
-                               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "found %d brightness levels\n", count));
+                               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                                 "found %d brightness levels\n",
+                                                 count));
                        }
                }
        }
@@ -610,28 +597,27 @@ out:
  *  Find out all required AML method defined under the video bus device.
  */
 
-static void 
-acpi_video_bus_find_cap (struct acpi_video_bus *video)
+static void acpi_video_bus_find_cap(struct acpi_video_bus *video)
 {
-       acpi_handle     h_dummy1;
+       acpi_handle h_dummy1;
 
-       memset(&video->cap ,0, 4);
-       ifACPI_SUCCESS(acpi_get_handle(video->handle, "_DOS", &h_dummy1))) {
+       memset(&video->cap0, 4);
+       if (ACPI_SUCCESS(acpi_get_handle(video->handle, "_DOS", &h_dummy1))) {
                video->cap._DOS = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(video->handle, "_DOD", &h_dummy1))) {
+       if (ACPI_SUCCESS(acpi_get_handle(video->handle, "_DOD", &h_dummy1))) {
                video->cap._DOD = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(video->handle, "_ROM", &h_dummy1))) {
+       if (ACPI_SUCCESS(acpi_get_handle(video->handle, "_ROM", &h_dummy1))) {
                video->cap._ROM = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(video->handle, "_GPD", &h_dummy1))) {
+       if (ACPI_SUCCESS(acpi_get_handle(video->handle, "_GPD", &h_dummy1))) {
                video->cap._GPD = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(video->handle, "_SPD", &h_dummy1))) {
+       if (ACPI_SUCCESS(acpi_get_handle(video->handle, "_SPD", &h_dummy1))) {
                video->cap._SPD = 1;
        }
-       ifACPI_SUCCESS(acpi_get_handle(video->handle, "_VPO", &h_dummy1))) {
+       if (ACPI_SUCCESS(acpi_get_handle(video->handle, "_VPO", &h_dummy1))) {
                video->cap._VPO = 1;
        }
 }
@@ -641,12 +627,9 @@ acpi_video_bus_find_cap (struct acpi_video_bus *video)
  * support the desired features
  */
 
-static int
-acpi_video_bus_check (
-       struct acpi_video_bus   *video)
+static int acpi_video_bus_check(struct acpi_video_bus *video)
 {
-       acpi_status             status = -ENOENT;
-
+       acpi_status status = -ENOENT;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_check");
 
@@ -658,19 +641,19 @@ acpi_video_bus_check (
         */
 
        /* Does this device able to support video switching ? */
-       if(video->cap._DOS){
+       if (video->cap._DOS) {
                video->flags.multihead = 1;
                status = 0;
        }
 
        /* Does this device able to retrieve a retrieve a video ROM ? */
-       if(video->cap._ROM){
+       if (video->cap._ROM) {
                video->flags.rom = 1;
                status = 0;
        }
 
        /* Does this device able to configure which video device to POST ? */
-       if(video->cap._GPD && video->cap._SPD && video->cap._VPO){
+       if (video->cap._GPD && video->cap._SPD && video->cap._VPO) {
                video->flags.post = 1;
                status = 0;
        }
@@ -682,16 +665,14 @@ acpi_video_bus_check (
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-static struct proc_dir_entry   *acpi_video_dir;
+static struct proc_dir_entry *acpi_video_dir;
 
 /* video devices */
 
-static int
-acpi_video_device_info_seq_show (
-       struct seq_file         *seq,
-       void                    *offset)
+static int acpi_video_device_info_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_video_device        *dev = (struct acpi_video_device *) seq->private;
+       struct acpi_video_device *dev =
+           (struct acpi_video_device *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_info_seq_show");
 
@@ -709,30 +690,25 @@ acpi_video_device_info_seq_show (
        else
                seq_printf(seq, "UNKNOWN\n");
 
-       seq_printf(seq,"known by bios: %s\n",
-                  dev->flags.bios ? "yes":"no");
+       seq_printf(seq, "known by bios: %s\n", dev->flags.bios ? "yes" : "no");
 
-end:
+      end:
        return_VALUE(0);
 }
 
 static int
-acpi_video_device_info_open_fs (
-       struct inode            *inode,
-       struct file             *file)
+acpi_video_device_info_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_video_device_info_seq_show,
                           PDE(inode)->data);
 }
 
-static int  
-acpi_video_device_state_seq_show (
-       struct seq_file         *seq,
-       void                    *offset)
+static int acpi_video_device_state_seq_show(struct seq_file *seq, void *offset)
 {
-       int                     status;
-       struct acpi_video_device        *dev = (struct acpi_video_device *) seq->private;
-       unsigned long   state;
+       int status;
+       struct acpi_video_device *dev =
+           (struct acpi_video_device *)seq->private;
+       unsigned long state;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_state_seq_show");
 
@@ -753,31 +729,27 @@ acpi_video_device_state_seq_show (
        else
                seq_printf(seq, "<not supported>\n");
 
-end:
+      end:
        return_VALUE(0);
 }
 
 static int
-acpi_video_device_state_open_fs (
-       struct inode            *inode,
-       struct file             *file)
+acpi_video_device_state_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_video_device_state_seq_show,
                           PDE(inode)->data);
 }
 
 static ssize_t
-acpi_video_device_write_state (
-       struct file             *file,
-       const char              __user *buffer,
-       size_t                  count,
-       loff_t                  *data)
+acpi_video_device_write_state(struct file *file,
+                             const char __user * buffer,
+                             size_t count, loff_t * data)
 {
-       int                     status;
-       struct seq_file         *m = (struct seq_file *) file->private_data;
-       struct acpi_video_device        *dev = (struct acpi_video_device *) m->private;
-       char                    str[12] = {0};
-       u32                     state = 0;
+       int status;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_video_device *dev = (struct acpi_video_device *)m->private;
+       char str[12] = { 0 };
+       u32 state = 0;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_write_state");
 
@@ -789,7 +761,7 @@ acpi_video_device_write_state (
 
        str[count] = 0;
        state = simple_strtoul(str, NULL, 0);
-       state &= ((1ul<<31) | (1ul<<30) | (1ul<<0));
+       state &= ((1ul << 31) | (1ul << 30) | (1ul << 0));
 
        status = acpi_video_device_set_state(dev, state);
 
@@ -800,12 +772,11 @@ acpi_video_device_write_state (
 }
 
 static int
-acpi_video_device_brightness_seq_show (
-       struct seq_file         *seq,
-       void                    *offset)
+acpi_video_device_brightness_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_video_device        *dev = (struct acpi_video_device *) seq->private;
-       int                     i;
+       struct acpi_video_device *dev =
+           (struct acpi_video_device *)seq->private;
+       int i;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_brightness_seq_show");
 
@@ -823,26 +794,22 @@ acpi_video_device_brightness_seq_show (
 }
 
 static int
-acpi_video_device_brightness_open_fs (
-       struct inode            *inode,
-       struct file             *file)
+acpi_video_device_brightness_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_video_device_brightness_seq_show,
                           PDE(inode)->data);
 }
 
 static ssize_t
-acpi_video_device_write_brightness (
-       struct file             *file,
-       const char              __user *buffer,
-       size_t                  count,
-       loff_t                  *data)
+acpi_video_device_write_brightness(struct file *file,
+                                  const char __user * buffer,
+                                  size_t count, loff_t * data)
 {
-       struct seq_file         *m = (struct seq_file *) file->private_data;
-       struct acpi_video_device        *dev = (struct acpi_video_device *) m->private;
-       char                    str[4] = {0};
-       unsigned int            level = 0;
-       int                     i;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_video_device *dev = (struct acpi_video_device *)m->private;
+       char str[4] = { 0 };
+       unsigned int level = 0;
+       int i;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_write_brightness");
 
@@ -854,14 +821,15 @@ acpi_video_device_write_brightness (
 
        str[count] = 0;
        level = simple_strtoul(str, NULL, 0);
-       
+
        if (level > 100)
                return_VALUE(-EFAULT);
 
        /* validate though the list of available levels */
        for (i = 0; i < dev->brightness->count; i++)
                if (level == dev->brightness->levels[i]) {
-                       if (ACPI_SUCCESS(acpi_video_device_lcd_set_level(dev, level)))
+                       if (ACPI_SUCCESS
+                           (acpi_video_device_lcd_set_level(dev, level)))
                                dev->brightness->curr = level;
                        break;
                }
@@ -869,24 +837,22 @@ acpi_video_device_write_brightness (
        return_VALUE(count);
 }
 
-static int
-acpi_video_device_EDID_seq_show (
-       struct seq_file         *seq,
-       void                    *offset)
+static int acpi_video_device_EDID_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_video_device        *dev = (struct acpi_video_device *) seq->private;
-       int                     status;
-       int                     i;
-       union acpi_object       *edid = NULL;
+       struct acpi_video_device *dev =
+           (struct acpi_video_device *)seq->private;
+       int status;
+       int i;
+       union acpi_object *edid = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_EDID_seq_show");
 
        if (!dev)
                goto out;
 
-       status = acpi_video_device_EDID (dev, &edid, 128);
+       status = acpi_video_device_EDID(dev, &edid, 128);
        if (ACPI_FAILURE(status)) {
-               status = acpi_video_device_EDID (dev, &edid, 256);
+               status = acpi_video_device_EDID(dev, &edid, 256);
        }
 
        if (ACPI_FAILURE(status)) {
@@ -898,7 +864,7 @@ acpi_video_device_EDID_seq_show (
                        seq_putc(seq, edid->buffer.pointer[i]);
        }
 
-out:
+      out:
        if (!edid)
                seq_printf(seq, "<not supported>\n");
        else
@@ -908,20 +874,15 @@ out:
 }
 
 static int
-acpi_video_device_EDID_open_fs (
-       struct inode            *inode,
-       struct file             *file)
+acpi_video_device_EDID_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_video_device_EDID_seq_show,
                           PDE(inode)->data);
 }
 
-
-static int
-acpi_video_device_add_fs (
-       struct acpi_device      *device)
+static int acpi_video_device_add_fs(struct acpi_device *device)
 {
-       struct proc_dir_entry   *entry = NULL;
+       struct proc_dir_entry *entry = NULL;
        struct acpi_video_device *vid_dev;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_add_fs");
@@ -929,13 +890,13 @@ acpi_video_device_add_fs (
        if (!device)
                return_VALUE(-ENODEV);
 
-       vid_dev = (struct acpi_video_device *) acpi_driver_data(device);
+       vid_dev = (struct acpi_video_device *)acpi_driver_data(device);
        if (!vid_dev)
                return_VALUE(-ENODEV);
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
-                               vid_dev->video->dir);
+                                                    vid_dev->video->dir);
                if (!acpi_device_dir(device))
                        return_VALUE(-ENODEV);
                acpi_device_dir(device)->owner = THIS_MODULE;
@@ -945,7 +906,7 @@ acpi_video_device_add_fs (
        entry = create_proc_entry("info", S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create 'info' fs entry\n"));
+                                 "Unable to create 'info' fs entry\n"));
        else {
                entry->proc_fops = &acpi_video_device_info_fops;
                entry->data = acpi_driver_data(device);
@@ -953,10 +914,12 @@ acpi_video_device_add_fs (
        }
 
        /* 'state' [R/W] */
-       entry = create_proc_entry("state", S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+       entry =
+           create_proc_entry("state", S_IFREG | S_IRUGO | S_IWUSR,
+                             acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create 'state' fs entry\n"));
+                                 "Unable to create 'state' fs entry\n"));
        else {
                entry->proc_fops = &acpi_video_device_state_fops;
                entry->proc_fops->write = acpi_video_device_write_state;
@@ -965,10 +928,12 @@ acpi_video_device_add_fs (
        }
 
        /* 'brightness' [R/W] */
-       entry = create_proc_entry("brightness", S_IFREG|S_IRUGO|S_IWUSR, acpi_device_dir(device));
+       entry =
+           create_proc_entry("brightness", S_IFREG | S_IRUGO | S_IWUSR,
+                             acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create 'brightness' fs entry\n"));
+                                 "Unable to create 'brightness' fs entry\n"));
        else {
                entry->proc_fops = &acpi_video_device_brightness_fops;
                entry->proc_fops->write = acpi_video_device_write_brightness;
@@ -980,7 +945,7 @@ acpi_video_device_add_fs (
        entry = create_proc_entry("EDID", S_IRUGO, acpi_device_dir(device));
        if (!entry)
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Unable to create 'brightness' fs entry\n"));
+                                 "Unable to create 'brightness' fs entry\n"));
        else {
                entry->proc_fops = &acpi_video_device_EDID_fops;
                entry->data = acpi_driver_data(device);
@@ -990,14 +955,12 @@ acpi_video_device_add_fs (
        return_VALUE(0);
 }
 
-static int
-acpi_video_device_remove_fs (
-       struct acpi_device      *device)
+static int acpi_video_device_remove_fs(struct acpi_device *device)
 {
        struct acpi_video_device *vid_dev;
        ACPI_FUNCTION_TRACE("acpi_video_device_remove_fs");
 
-       vid_dev = (struct acpi_video_device *) acpi_driver_data(device);
+       vid_dev = (struct acpi_video_device *)acpi_driver_data(device);
        if (!vid_dev || !vid_dev->video || !vid_dev->video->dir)
                return_VALUE(-ENODEV);
 
@@ -1006,22 +969,17 @@ acpi_video_device_remove_fs (
                remove_proc_entry("state", acpi_device_dir(device));
                remove_proc_entry("brightness", acpi_device_dir(device));
                remove_proc_entry("EDID", acpi_device_dir(device));
-               remove_proc_entry(acpi_device_bid(device),
-                                vid_dev->video->dir);
+               remove_proc_entry(acpi_device_bid(device), vid_dev->video->dir);
                acpi_device_dir(device) = NULL;
        }
 
        return_VALUE(0);
 }
 
-
 /* video bus */
-static int
-acpi_video_bus_info_seq_show (
-       struct seq_file         *seq,
-       void                    *offset)
+static int acpi_video_bus_info_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_video_bus   *video = (struct acpi_video_bus *) seq->private;
+       struct acpi_video_bus *video = (struct acpi_video_bus *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_info_seq_show");
 
@@ -1029,30 +987,25 @@ acpi_video_bus_info_seq_show (
                goto end;
 
        seq_printf(seq, "Switching heads:              %s\n",
-                       video->flags.multihead ? "yes":"no");
+                  video->flags.multihead ? "yes" : "no");
        seq_printf(seq, "Video ROM:                    %s\n",
-                       video->flags.rom ? "yes":"no");
+                  video->flags.rom ? "yes" : "no");
        seq_printf(seq, "Device to be POSTed on boot:  %s\n",
-                       video->flags.post ? "yes":"no");
+                  video->flags.post ? "yes" : "no");
 
-end:
+      end:
        return_VALUE(0);
 }
 
-static int
-acpi_video_bus_info_open_fs (
-       struct inode            *inode,
-       struct file             *file)
+static int acpi_video_bus_info_open_fs(struct inode *inode, struct file *file)
 {
-       return single_open(file, acpi_video_bus_info_seq_show, PDE(inode)->data);
+       return single_open(file, acpi_video_bus_info_seq_show,
+                          PDE(inode)->data);
 }
 
-static int
-acpi_video_bus_ROM_seq_show (
-       struct seq_file         *seq,
-       void                    *offset)
+static int acpi_video_bus_ROM_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_video_bus   *video = (struct acpi_video_bus *) seq->private;
+       struct acpi_video_bus *video = (struct acpi_video_bus *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_ROM_seq_show");
 
@@ -1062,26 +1015,20 @@ acpi_video_bus_ROM_seq_show (
        printk(KERN_INFO PREFIX "Please implement %s\n", __FUNCTION__);
        seq_printf(seq, "<TODO>\n");
 
-end:
+      end:
        return_VALUE(0);
 }
 
-static int
-acpi_video_bus_ROM_open_fs (
-       struct inode            *inode,
-       struct file             *file)
+static int acpi_video_bus_ROM_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_video_bus_ROM_seq_show, PDE(inode)->data);
 }
 
-static int
-acpi_video_bus_POST_info_seq_show (
-       struct seq_file         *seq,
-       void                    *offset)
+static int acpi_video_bus_POST_info_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_video_bus   *video = (struct acpi_video_bus *) seq->private;
-       unsigned long           options;
-       int                     status;
+       struct acpi_video_bus *video = (struct acpi_video_bus *)seq->private;
+       unsigned long options;
+       int status;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_POST_info_seq_show");
 
@@ -1091,8 +1038,10 @@ acpi_video_bus_POST_info_seq_show (
        status = acpi_video_bus_POST_options(video, &options);
        if (ACPI_SUCCESS(status)) {
                if (!(options & 1)) {
-                       printk(KERN_WARNING PREFIX "The motherboard VGA device is not listed as a possible POST device.\n");
-                       printk(KERN_WARNING PREFIX "This indicate a BIOS bug.  Please contact the manufacturer.\n");
+                       printk(KERN_WARNING PREFIX
+                              "The motherboard VGA device is not listed as a possible POST device.\n");
+                       printk(KERN_WARNING PREFIX
+                              "This indicate a BIOS bug.  Please contact the manufacturer.\n");
                }
                printk("%lx\n", options);
                seq_printf(seq, "can POST: <intgrated video>");
@@ -1103,89 +1052,74 @@ acpi_video_bus_POST_info_seq_show (
                seq_putc(seq, '\n');
        } else
                seq_printf(seq, "<not supported>\n");
-end:
+      end:
        return_VALUE(0);
 }
 
 static int
-acpi_video_bus_POST_info_open_fs (
-       struct inode            *inode,
-       struct file             *file)
+acpi_video_bus_POST_info_open_fs(struct inode *inode, struct file *file)
 {
-       return single_open(file, acpi_video_bus_POST_info_seq_show, PDE(inode)->data);
+       return single_open(file, acpi_video_bus_POST_info_seq_show,
+                          PDE(inode)->data);
 }
 
-static int
-acpi_video_bus_POST_seq_show (
-       struct seq_file         *seq,
-       void                    *offset)
+static int acpi_video_bus_POST_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_video_bus   *video = (struct acpi_video_bus *) seq->private;
-       int                     status;
-       unsigned long           id;
+       struct acpi_video_bus *video = (struct acpi_video_bus *)seq->private;
+       int status;
+       unsigned long id;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_POST_seq_show");
 
        if (!video)
                goto end;
 
-       status = acpi_video_bus_get_POST (video, &id);
+       status = acpi_video_bus_get_POST(video, &id);
        if (!ACPI_SUCCESS(status)) {
                seq_printf(seq, "<not supported>\n");
                goto end;
        }
-       seq_printf(seq, "device posted is <%s>\n",  device_decode[id & 3]);
+       seq_printf(seq, "device posted is <%s>\n", device_decode[id & 3]);
 
-end:
+      end:
        return_VALUE(0);
 }
 
-static int
-acpi_video_bus_DOS_seq_show (
-       struct seq_file         *seq,
-       void                    *offset)
+static int acpi_video_bus_DOS_seq_show(struct seq_file *seq, void *offset)
 {
-       struct acpi_video_bus   *video = (struct acpi_video_bus *) seq->private;
+       struct acpi_video_bus *video = (struct acpi_video_bus *)seq->private;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_DOS_seq_show");
 
-       seq_printf(seq, "DOS setting: <%d>\n", video->dos_setting );
+       seq_printf(seq, "DOS setting: <%d>\n", video->dos_setting);
 
        return_VALUE(0);
 }
 
-static int
-acpi_video_bus_POST_open_fs (
-       struct inode            *inode,
-       struct file             *file)
+static int acpi_video_bus_POST_open_fs(struct inode *inode, struct file *file)
 {
-       return single_open(file, acpi_video_bus_POST_seq_show, PDE(inode)->data);
+       return single_open(file, acpi_video_bus_POST_seq_show,
+                          PDE(inode)->data);
 }
 
-static int
-acpi_video_bus_DOS_open_fs (
-       struct inode            *inode,
-       struct file             *file)
+static int acpi_video_bus_DOS_open_fs(struct inode *inode, struct file *file)
 {
        return single_open(file, acpi_video_bus_DOS_seq_show, PDE(inode)->data);
 }
 
 static ssize_t
-acpi_video_bus_write_POST (
-       struct file             *file,
-       const char              __user *buffer,
-       size_t                  count,
-       loff_t                  *data)
+acpi_video_bus_write_POST(struct file *file,
+                         const char __user * buffer,
+                         size_t count, loff_t * data)
 {
-       int                     status;
-       struct seq_file         *m = (struct seq_file *) file->private_data;
-       struct acpi_video_bus   *video = (struct acpi_video_bus *) m->private;
-       char                    str[12] = {0};
-       unsigned long           opt, options;
+       int status;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_video_bus *video = (struct acpi_video_bus *)m->private;
+       char str[12] = { 0 };
+       unsigned long opt, options;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_write_POST");
 
-
        if (!video || count + 1 > sizeof str)
                return_VALUE(-EINVAL);
 
@@ -1205,32 +1139,28 @@ acpi_video_bus_write_POST (
        options |= 1;
 
        if (options & (1ul << opt)) {
-               status = acpi_video_bus_set_POST (video, opt);
+               status = acpi_video_bus_set_POST(video, opt);
                if (!ACPI_SUCCESS(status))
                        return_VALUE(-EFAULT);
 
        }
 
-
        return_VALUE(count);
 }
 
 static ssize_t
-acpi_video_bus_write_DOS (
-       struct file             *file,
-       const char              __user *buffer,
-       size_t                  count,
-       loff_t                  *data)
+acpi_video_bus_write_DOS(struct file *file,
+                        const char __user * buffer,
+                        size_t count, loff_t * data)
 {
-       int                     status;
-       struct seq_file         *m = (struct seq_file *) file->private_data;
-       struct acpi_video_bus   *video = (struct acpi_video_bus *) m->private;
-       char                    str[12] = {0};
-       unsigned long           opt;
+       int status;
+       struct seq_file *m = (struct seq_file *)file->private_data;
+       struct acpi_video_bus *video = (struct acpi_video_bus *)m->private;
+       char str[12] = { 0 };
+       unsigned long opt;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_write_DOS");
 
-
        if (!video || count + 1 > sizeof str)
                return_VALUE(-EINVAL);
 
@@ -1242,7 +1172,7 @@ acpi_video_bus_write_DOS (
        if (opt > 7)
                return_VALUE(-EFAULT);
 
-       status = acpi_video_bus_DOS (video, opt & 0x3, (opt & 0x4)>>2);
+       status = acpi_video_bus_DOS(video, opt & 0x3, (opt & 0x4) >> 2);
 
        if (!ACPI_SUCCESS(status))
                return_VALUE(-EFAULT);
@@ -1250,20 +1180,18 @@ acpi_video_bus_write_DOS (
        return_VALUE(count);
 }
 
-static int
-acpi_video_bus_add_fs (
-       struct acpi_device      *device)
+static int acpi_video_bus_add_fs(struct acpi_device *device)
 {
-       struct proc_dir_entry   *entry = NULL;
-       struct acpi_video_bus   *video;
+       struct proc_dir_entry *entry = NULL;
+       struct acpi_video_bus *video;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_add_fs");
 
-       video = (struct acpi_video_bus *) acpi_driver_data(device);
+       video = (struct acpi_video_bus *)acpi_driver_data(device);
 
        if (!acpi_device_dir(device)) {
                acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device),
-                               acpi_video_dir);
+                                                    acpi_video_dir);
                if (!acpi_device_dir(device))
                        return_VALUE(-ENODEV);
                video->dir = acpi_device_dir(device);
@@ -1273,7 +1201,8 @@ acpi_video_bus_add_fs (
        /* 'info' [R] */
        entry = create_proc_entry("info", S_IRUGO, acpi_device_dir(device));
        if (!entry)
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unable to create 'info' fs entry\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create 'info' fs entry\n"));
        else {
                entry->proc_fops = &acpi_video_bus_info_fops;
                entry->data = acpi_driver_data(device);
@@ -1283,7 +1212,8 @@ acpi_video_bus_add_fs (
        /* 'ROM' [R] */
        entry = create_proc_entry("ROM", S_IRUGO, acpi_device_dir(device));
        if (!entry)
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unable to create 'ROM' fs entry\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create 'ROM' fs entry\n"));
        else {
                entry->proc_fops = &acpi_video_bus_ROM_fops;
                entry->data = acpi_driver_data(device);
@@ -1291,9 +1221,11 @@ acpi_video_bus_add_fs (
        }
 
        /* 'POST_info' [R] */
-       entry = create_proc_entry("POST_info", S_IRUGO, acpi_device_dir(device));
+       entry =
+           create_proc_entry("POST_info", S_IRUGO, acpi_device_dir(device));
        if (!entry)
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unable to create 'POST_info' fs entry\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create 'POST_info' fs entry\n"));
        else {
                entry->proc_fops = &acpi_video_bus_POST_info_fops;
                entry->data = acpi_driver_data(device);
@@ -1301,9 +1233,12 @@ acpi_video_bus_add_fs (
        }
 
        /* 'POST' [R/W] */
-       entry = create_proc_entry("POST", S_IFREG|S_IRUGO|S_IRUSR, acpi_device_dir(device));
+       entry =
+           create_proc_entry("POST", S_IFREG | S_IRUGO | S_IRUSR,
+                             acpi_device_dir(device));
        if (!entry)
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unable to create 'POST' fs entry\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create 'POST' fs entry\n"));
        else {
                entry->proc_fops = &acpi_video_bus_POST_fops;
                entry->proc_fops->write = acpi_video_bus_write_POST;
@@ -1312,9 +1247,12 @@ acpi_video_bus_add_fs (
        }
 
        /* 'DOS' [R/W] */
-       entry = create_proc_entry("DOS", S_IFREG|S_IRUGO|S_IRUSR, acpi_device_dir(device));
+       entry =
+           create_proc_entry("DOS", S_IFREG | S_IRUGO | S_IRUSR,
+                             acpi_device_dir(device));
        if (!entry)
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Unable to create 'DOS' fs entry\n"));
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Unable to create 'DOS' fs entry\n"));
        else {
                entry->proc_fops = &acpi_video_bus_DOS_fops;
                entry->proc_fops->write = acpi_video_bus_write_DOS;
@@ -1325,15 +1263,13 @@ acpi_video_bus_add_fs (
        return_VALUE(0);
 }
 
-static int
-acpi_video_bus_remove_fs (
-       struct acpi_device      *device)
+static int acpi_video_bus_remove_fs(struct acpi_device *device)
 {
-       struct acpi_video_bus   *video;
+       struct acpi_video_bus *video;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_remove_fs");
 
-       video = (struct acpi_video_bus *) acpi_driver_data(device);
+       video = (struct acpi_video_bus *)acpi_driver_data(device);
 
        if (acpi_device_dir(device)) {
                remove_proc_entry("info", acpi_device_dir(device));
@@ -1341,8 +1277,7 @@ acpi_video_bus_remove_fs (
                remove_proc_entry("POST_info", acpi_device_dir(device));
                remove_proc_entry("POST", acpi_device_dir(device));
                remove_proc_entry("DOS", acpi_device_dir(device));
-               remove_proc_entry(acpi_device_bid(device),
-                               acpi_video_dir); 
+               remove_proc_entry(acpi_device_bid(device), acpi_video_dir);
                acpi_device_dir(device) = NULL;
        }
 
@@ -1356,20 +1291,20 @@ acpi_video_bus_remove_fs (
 /* device interface */
 
 static int
-acpi_video_bus_get_one_device (
-       struct acpi_device      *device,
-       struct acpi_video_bus   *video)
+acpi_video_bus_get_one_device(struct acpi_device *device,
+                             struct acpi_video_bus *video)
 {
-       unsigned long           device_id;
-       int                     status, result;
-       struct acpi_video_device        *data;
+       unsigned long device_id;
+       int status, result;
+       struct acpi_video_device *data;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_get_one_device");
 
        if (!device || !video)
                return_VALUE(-EINVAL);
 
-       status = acpi_evaluate_integer(device->handle, "_ADR", NULL, &device_id);
+       status =
+           acpi_evaluate_integer(device->handle, "_ADR", NULL, &device_id);
        if (ACPI_SUCCESS(status)) {
 
                data = kmalloc(sizeof(struct acpi_video_device), GFP_KERNEL);
@@ -1401,15 +1336,17 @@ acpi_video_bus_get_one_device (
                        data->flags.unknown = 1;
                        break;
                }
-               
+
                acpi_video_device_bind(video, data);
                acpi_video_device_find_cap(data);
 
                status = acpi_install_notify_handler(data->handle,
-                       ACPI_DEVICE_NOTIFY, acpi_video_device_notify, data);
+                                                    ACPI_DEVICE_NOTIFY,
+                                                    acpi_video_device_notify,
+                                                    data);
                if (ACPI_FAILURE(status)) {
                        ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                               "Error installing notify handler\n"));
+                                         "Error installing notify handler\n"));
                        result = -ENODEV;
                        goto end;
                }
@@ -1423,7 +1360,7 @@ acpi_video_bus_get_one_device (
                return_VALUE(0);
        }
 
-end:
+      end:
        return_VALUE(-ENOENT);
 }
 
@@ -1437,15 +1374,15 @@ end:
  *  Enumerate the video device list of the video bus, 
  *  bind the ids with the corresponding video devices
  *  under the video bus.
- */  
+ */
 
-static void
-acpi_video_device_rebind( struct acpi_video_bus *video)
+static void acpi_video_device_rebind(struct acpi_video_bus *video)
 {
-       struct list_head * node, * next;
+       struct list_head *node, *next;
        list_for_each_safe(node, next, &video->video_device_list) {
-               struct acpi_video_device * dev = container_of(node, struct acpi_video_device, entry);
-               acpi_video_device_bind( video, dev);
+               struct acpi_video_device *dev =
+                   container_of(node, struct acpi_video_device, entry);
+               acpi_video_device_bind(video, dev);
        }
 }
 
@@ -1460,21 +1397,21 @@ acpi_video_device_rebind( struct acpi_video_bus *video)
  *  
  *  Bind the ids with the corresponding video devices
  *  under the video bus.
- */  
+ */
 
 static void
-acpi_video_device_bind( struct acpi_video_bus *video,
-                       struct acpi_video_device *device)
+acpi_video_device_bind(struct acpi_video_bus *video,
+                      struct acpi_video_device *device)
 {
-       int     i;
+       int i;
        ACPI_FUNCTION_TRACE("acpi_video_device_bind");
 
 #define IDS_VAL(i) video->attached_array[i].value.int_val
 #define IDS_BIND(i) video->attached_array[i].bind_info
-       
-       for (i = 0; IDS_VAL(i) != ACPI_VIDEO_HEAD_INVALID && 
-               i < video->attached_count; i++) {
-               if (device->device_id == (IDS_VAL(i)& 0xffff)) {
+
+       for (i = 0; IDS_VAL(i) != ACPI_VIDEO_HEAD_INVALID &&
+            i < video->attached_count; i++) {
+               if (device->device_id == (IDS_VAL(i) & 0xffff)) {
                        IDS_BIND(i) = device;
                        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "device_bind %d\n", i));
                }
@@ -1492,17 +1429,17 @@ acpi_video_device_bind( struct acpi_video_bus *video,
  *  
  *  Call _DOD to enumerate all devices attached to display adapter
  *
- */  
+ */
 
 static int acpi_video_device_enumerate(struct acpi_video_bus *video)
 {
-       int                     status;
-       int                     count;
-       int                     i;
+       int status;
+       int count;
+       int i;
        struct acpi_video_enumerated_device *active_device_list;
-       struct acpi_buffer      buffer = {ACPI_ALLOCATE_BUFFER, NULL};
-       union acpi_object       *dod = NULL;
-       union acpi_object       *obj;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       union acpi_object *dod = NULL;
+       union acpi_object *obj;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_enumerate");
 
@@ -1512,7 +1449,7 @@ static int acpi_video_device_enumerate(struct acpi_video_bus *video)
                return_VALUE(status);
        }
 
-       dod = (union acpi_object *) buffer.pointer;
+       dod = (union acpi_object *)buffer.pointer;
        if (!dod || (dod->type != ACPI_TYPE_PACKAGE)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _DOD data\n"));
                status = -EFAULT;
@@ -1520,11 +1457,13 @@ static int acpi_video_device_enumerate(struct acpi_video_bus *video)
        }
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d video heads in _DOD\n",
-               dod->package.count));
+                         dod->package.count));
 
-       active_device_list= kmalloc(
-               (1+dod->package.count)*sizeof(struct acpi_video_enumerated_device),
-               GFP_KERNEL);
+       active_device_list = kmalloc((1 +
+                                     dod->package.count) *
+                                    sizeof(struct
+                                           acpi_video_enumerated_device),
+                                    GFP_KERNEL);
 
        if (!active_device_list) {
                status = -ENOMEM;
@@ -1533,25 +1472,28 @@ static int acpi_video_device_enumerate(struct acpi_video_bus *video)
 
        count = 0;
        for (i = 0; i < dod->package.count; i++) {
-               obj = (union acpi_object *) &dod->package.elements[i];
+               obj = (union acpi_object *)&dod->package.elements[i];
 
                if (obj->type != ACPI_TYPE_INTEGER) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid _DOD data\n"));
-                       active_device_list[i].value.int_val = ACPI_VIDEO_HEAD_INVALID;
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Invalid _DOD data\n"));
+                       active_device_list[i].value.int_val =
+                           ACPI_VIDEO_HEAD_INVALID;
                }
                active_device_list[i].value.int_val = obj->integer.value;
                active_device_list[i].bind_info = NULL;
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "dod element[%d] = %d\n", i, (int) obj->integer.value));
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "dod element[%d] = %d\n", i,
+                                 (int)obj->integer.value));
                count++;
        }
        active_device_list[count].value.int_val = ACPI_VIDEO_HEAD_END;
 
-       if(video->attached_array)
+       if (video->attached_array)
                kfree(video->attached_array);
-       
+
        video->attached_array = active_device_list;
        video->attached_count = count;
-out:
+      out:
        acpi_os_free(buffer.pointer);
        return_VALUE(status);
 }
@@ -1567,17 +1509,14 @@ out:
  *     1. Find out the current active output device.
  *     2. Identify the next output device to switch
  *     3. call _DSS to do actual switch.
- */  
+ */
 
-static int 
-acpi_video_switch_output(
-       struct acpi_video_bus *video, 
-       int     event)
+static int acpi_video_switch_output(struct acpi_video_bus *video, int event)
 {
-       struct list_head * node, * next;
-       struct acpi_video_device *dev=NULL;
-               struct acpi_video_device *dev_next=NULL;
-       struct acpi_video_device *dev_prev=NULL;
+       struct list_head *node, *next;
+       struct acpi_video_device *dev = NULL;
+       struct acpi_video_device *dev_next = NULL;
+       struct acpi_video_device *dev_prev = NULL;
        unsigned long state;
        int status = 0;
 
@@ -1586,15 +1525,19 @@ acpi_video_switch_output(
        list_for_each_safe(node, next, &video->video_device_list) {
                dev = container_of(node, struct acpi_video_device, entry);
                status = acpi_video_device_get_state(dev, &state);
-               if (state & 0x2){
-                       dev_next = container_of(node->next, struct acpi_video_device, entry);
-                       dev_prev = container_of(node->prev, struct acpi_video_device, entry);
+               if (state & 0x2) {
+                       dev_next =
+                           container_of(node->next, struct acpi_video_device,
+                                        entry);
+                       dev_prev =
+                           container_of(node->prev, struct acpi_video_device,
+                                        entry);
                        goto out;
                }
        }
        dev_next = container_of(node->next, struct acpi_video_device, entry);
        dev_prev = container_of(node->prev, struct acpi_video_device, entry);
-out:   
+      out:
        switch (event) {
        case ACPI_VIDEO_NOTIFY_CYCLE:
        case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT:
@@ -1611,21 +1554,16 @@ out:
        return_VALUE(status);
 }
 
-static int 
-acpi_video_get_next_level(
-       struct acpi_video_device *device,
-       u32     level_current,
-       u32     event)
+static int
+acpi_video_get_next_level(struct acpi_video_device *device,
+                         u32 level_current, u32 event)
 {
-       /*Fix me*/
+       /*Fix me */
        return level_current;
 }
 
-
 static void
-acpi_video_switch_brightness (
-       struct acpi_video_device *device, 
-       int     event)
+acpi_video_switch_brightness(struct acpi_video_device *device, int event)
 {
        unsigned long level_current, level_next;
        acpi_video_device_lcd_get_level_current(device, &level_current);
@@ -1634,26 +1572,27 @@ acpi_video_switch_brightness (
 }
 
 static int
-acpi_video_bus_get_devices (
-       struct acpi_video_bus   *video,
-       struct acpi_device      *device)
+acpi_video_bus_get_devices(struct acpi_video_bus *video,
+                          struct acpi_device *device)
 {
-       int                     status = 0;
-       struct list_head        *node, *next;
+       int status = 0;
+       struct list_head *node, *next;
 
        ACPI_FUNCTION_TRACE("acpi_video_get_devices");
 
        acpi_video_device_enumerate(video);
 
        list_for_each_safe(node, next, &device->children) {
-               struct acpi_device *dev = list_entry(node, struct acpi_device, node);
+               struct acpi_device *dev =
+                   list_entry(node, struct acpi_device, node);
 
                if (!dev)
                        continue;
 
                status = acpi_video_bus_get_one_device(dev, video);
                if (ACPI_FAILURE(status)) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Cant attach device\n"));
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                         "Cant attach device\n"));
                        continue;
                }
 
@@ -1661,10 +1600,9 @@ acpi_video_bus_get_devices (
        return_VALUE(status);
 }
 
-static int
-acpi_video_bus_put_one_device(
-       struct acpi_video_device        *device)
+static int acpi_video_bus_put_one_device(struct acpi_video_device *device)
 {
+       acpi_status status;
        struct acpi_video_bus *video;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_put_one_device");
@@ -1679,26 +1617,33 @@ acpi_video_bus_put_one_device(
        up(&video->sem);
        acpi_video_device_remove_fs(device->dev);
 
+       status = acpi_remove_notify_handler(device->handle,
+                                           ACPI_DEVICE_NOTIFY,
+                                           acpi_video_device_notify);
+       if (ACPI_FAILURE(status))
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+                                 "Error removing notify handler\n"));
+
        return_VALUE(0);
 }
 
-static int
-acpi_video_bus_put_devices (
-       struct acpi_video_bus   *video)
+static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
 {
-       int                     status;
-       struct list_head        *node, *next;
+       int status;
+       struct list_head *node, *next;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_put_devices");
 
        list_for_each_safe(node, next, &video->video_device_list) {
-               struct acpi_video_device *data = list_entry(node, struct acpi_video_device, entry);
+               struct acpi_video_device *data =
+                   list_entry(node, struct acpi_video_device, entry);
                if (!data)
                        continue;
 
                status = acpi_video_bus_put_one_device(data);
-               if(ACPI_FAILURE(status))
-                       printk(KERN_WARNING PREFIX "hhuuhhuu bug in acpi video driver.\n");
+               if (ACPI_FAILURE(status))
+                       printk(KERN_WARNING PREFIX
+                              "hhuuhhuu bug in acpi video driver.\n");
 
                if (data->brightness)
                        kfree(data->brightness);
@@ -1711,28 +1656,20 @@ acpi_video_bus_put_devices (
 
 /* acpi_video interface */
 
-static int
-acpi_video_bus_start_devices(
-       struct acpi_video_bus   *video)
+static int acpi_video_bus_start_devices(struct acpi_video_bus *video)
 {
        return acpi_video_bus_DOS(video, 1, 0);
 }
 
-static int
-acpi_video_bus_stop_devices(
-       struct acpi_video_bus   *video)
+static int acpi_video_bus_stop_devices(struct acpi_video_bus *video)
 {
        return acpi_video_bus_DOS(video, 0, 1);
 }
 
-static void
-acpi_video_bus_notify (
-       acpi_handle             handle,
-       u32                     event,
-       void                    *data)
+static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data)
 {
-       struct acpi_video_bus   *video = (struct acpi_video_bus *) data;
-       struct acpi_device      *device = NULL;
+       struct acpi_video_bus *video = (struct acpi_video_bus *)data;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_notify");
        printk("video bus notify\n");
@@ -1757,30 +1694,27 @@ acpi_video_bus_notify (
                acpi_bus_generate_event(device, event, 0);
                break;
 
-       case ACPI_VIDEO_NOTIFY_CYCLE: /* Cycle Display output hotkey pressed.*/
-       case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT: /* Next Display output hotkey pressed. */
-       case ACPI_VIDEO_NOTIFY_PREV_OUTPUT: /* previous Display output hotkey pressed. */
+       case ACPI_VIDEO_NOTIFY_CYCLE:   /* Cycle Display output hotkey pressed. */
+       case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT:     /* Next Display output hotkey pressed. */
+       case ACPI_VIDEO_NOTIFY_PREV_OUTPUT:     /* previous Display output hotkey pressed. */
                acpi_video_switch_output(video, event);
                acpi_bus_generate_event(device, event, 0);
                break;
 
        default:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Unsupported event [0x%x]\n", event));
+                                 "Unsupported event [0x%x]\n", event));
                break;
        }
 
        return_VOID;
 }
 
-static void
-acpi_video_device_notify (
-       acpi_handle             handle,
-       u32                     event,
-       void                    *data)
+static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data)
 {
-       struct acpi_video_device        *video_device = (struct acpi_video_device *) data;
-       struct acpi_device      *device = NULL;
+       struct acpi_video_device *video_device =
+           (struct acpi_video_device *)data;
+       struct acpi_device *device = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_video_device_notify");
 
@@ -1792,36 +1726,34 @@ acpi_video_device_notify (
                return_VOID;
 
        switch (event) {
-       case ACPI_VIDEO_NOTIFY_SWITCH: /* change in status (cycle output device) */
-       case ACPI_VIDEO_NOTIFY_PROBE: /* change in status (output device status) */
+       case ACPI_VIDEO_NOTIFY_SWITCH:  /* change in status (cycle output device) */
+       case ACPI_VIDEO_NOTIFY_PROBE:   /* change in status (output device status) */
                acpi_bus_generate_event(device, event, 0);
                break;
-       case ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS: /* Cycle brightness */
-       case ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS: /* Increase brightness */
-       case ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS: /* Decrease brightness */
-       case ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS: /* zero brightnesss */
-       case ACPI_VIDEO_NOTIFY_DISPLAY_OFF: /* display device off */
-               acpi_video_switch_brightness (video_device, event);
+       case ACPI_VIDEO_NOTIFY_CYCLE_BRIGHTNESS:        /* Cycle brightness */
+       case ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS:  /* Increase brightness */
+       case ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS:  /* Decrease brightness */
+       case ACPI_VIDEO_NOTIFY_ZERO_BRIGHTNESS: /* zero brightnesss */
+       case ACPI_VIDEO_NOTIFY_DISPLAY_OFF:     /* display device off */
+               acpi_video_switch_brightness(video_device, event);
                acpi_bus_generate_event(device, event, 0);
                break;
        default:
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                       "Unsupported event [0x%x]\n", event));
+                                 "Unsupported event [0x%x]\n", event));
                break;
        }
        return_VOID;
 }
 
-static int
-acpi_video_bus_add (
-       struct acpi_device      *device)
+static int acpi_video_bus_add(struct acpi_device *device)
 {
-       int                     result = 0;
-       acpi_status             status = 0;
-       struct acpi_video_bus   *video = NULL;
+       int result = 0;
+       acpi_status status = 0;
+       struct acpi_video_bus *video = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_add");
-       
+
        if (!device)
                return_VALUE(-EINVAL);
 
@@ -1851,21 +1783,22 @@ acpi_video_bus_add (
        acpi_video_bus_start_devices(video);
 
        status = acpi_install_notify_handler(video->handle,
-               ACPI_DEVICE_NOTIFY, acpi_video_bus_notify, video);
+                                            ACPI_DEVICE_NOTIFY,
+                                            acpi_video_bus_notify, video);
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error installing notify handler\n"));
+                                 "Error installing notify handler\n"));
                result = -ENODEV;
                goto end;
        }
 
        printk(KERN_INFO PREFIX "%s [%s] (multi-head: %s  rom: %s  post: %s)\n",
-               ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),
-               video->flags.multihead ? "yes":"no",
-               video->flags.rom ? "yes":"no",
-               video->flags.post ? "yes":"no");
+              ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),
+              video->flags.multihead ? "yes" : "no",
+              video->flags.rom ? "yes" : "no",
+              video->flags.post ? "yes" : "no");
 
-end:
+      end:
        if (result) {
                acpi_video_bus_remove_fs(device);
                kfree(video);
@@ -1874,28 +1807,26 @@ end:
        return_VALUE(result);
 }
 
-static int
-acpi_video_bus_remove (
-       struct acpi_device      *device,
-       int                     type)
+static int acpi_video_bus_remove(struct acpi_device *device, int type)
 {
-       acpi_status             status = 0;
-       struct acpi_video_bus   *video = NULL;
+       acpi_status status = 0;
+       struct acpi_video_bus *video = NULL;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_remove");
 
        if (!device || !acpi_driver_data(device))
                return_VALUE(-EINVAL);
 
-       video = (struct acpi_video_bus *) acpi_driver_data(device);
+       video = (struct acpi_video_bus *)acpi_driver_data(device);
 
        acpi_video_bus_stop_devices(video);
 
        status = acpi_remove_notify_handler(video->handle,
-               ACPI_DEVICE_NOTIFY, acpi_video_bus_notify);
+                                           ACPI_DEVICE_NOTIFY,
+                                           acpi_video_bus_notify);
        if (ACPI_FAILURE(status))
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                       "Error removing notify handler\n"));
+                                 "Error removing notify handler\n"));
 
        acpi_video_bus_put_devices(video);
        acpi_video_bus_remove_fs(device);
@@ -1907,15 +1838,12 @@ acpi_video_bus_remove (
        return_VALUE(0);
 }
 
-
 static int
-acpi_video_bus_match (
-       struct acpi_device      *device,
-       struct acpi_driver      *driver)
+acpi_video_bus_match(struct acpi_device *device, struct acpi_driver *driver)
 {
-       acpi_handle             h_dummy1;
-       acpi_handle             h_dummy2;
-       acpi_handle             h_dummy3;
+       acpi_handle h_dummy1;
+       acpi_handle h_dummy2;
+       acpi_handle h_dummy3;
 
        ACPI_FUNCTION_TRACE("acpi_video_bus_match");
 
@@ -1941,22 +1869,19 @@ acpi_video_bus_match (
            ACPI_SUCCESS(acpi_get_handle(device->handle, "_SPD", &h_dummy3)))
                return_VALUE(0);
 
-
        return_VALUE(-ENODEV);
 }
 
-
-static int __init
-acpi_video_init (void)
+static int __init acpi_video_init(void)
 {
-       int                     result = 0;
+       int result = 0;
 
        ACPI_FUNCTION_TRACE("acpi_video_init");
 
        /*
-       acpi_dbg_level = 0xFFFFFFFF;
-       acpi_dbg_layer = 0x08000000;
-       */
+          acpi_dbg_level = 0xFFFFFFFF;
+          acpi_dbg_layer = 0x08000000;
+        */
 
        acpi_video_dir = proc_mkdir(ACPI_VIDEO_CLASS, acpi_root_dir);
        if (!acpi_video_dir)
@@ -1972,8 +1897,7 @@ acpi_video_init (void)
        return_VALUE(0);
 }
 
-static void __exit
-acpi_video_exit (void)
+static void __exit acpi_video_exit(void)
 {
        ACPI_FUNCTION_TRACE("acpi_video_exit");
 
index ec615d854be9710b10fccfc02a4f40bf6dd68632..373e7b728fa70746bb13907e07114ee0293fd4f6 100644 (file)
 /* This is a private structure used to tie the classdev and the
  * container .. it should never be visible outside this file */
 struct internal_container {
-       struct list_head node;
+       struct klist_node node;
        struct attribute_container *cont;
        struct class_device classdev;
 };
 
+static void internal_container_klist_get(struct klist_node *n)
+{
+       struct internal_container *ic =
+               container_of(n, struct internal_container, node);
+       class_device_get(&ic->classdev);
+}
+
+static void internal_container_klist_put(struct klist_node *n)
+{
+       struct internal_container *ic =
+               container_of(n, struct internal_container, node);
+       class_device_put(&ic->classdev);
+}
+
+
 /**
  * attribute_container_classdev_to_container - given a classdev, return the container
  *
@@ -57,7 +72,8 @@ int
 attribute_container_register(struct attribute_container *cont)
 {
        INIT_LIST_HEAD(&cont->node);
-       INIT_LIST_HEAD(&cont->containers);
+       klist_init(&cont->containers,internal_container_klist_get,
+                  internal_container_klist_put);
                
        down(&attribute_container_mutex);
        list_add_tail(&cont->node, &attribute_container_list);
@@ -77,11 +93,13 @@ attribute_container_unregister(struct attribute_container *cont)
 {
        int retval = -EBUSY;
        down(&attribute_container_mutex);
-       if (!list_empty(&cont->containers))
+       spin_lock(&cont->containers.k_lock);
+       if (!list_empty(&cont->containers.k_list))
                goto out;
        retval = 0;
        list_del(&cont->node);
  out:
+       spin_unlock(&cont->containers.k_lock);
        up(&attribute_container_mutex);
        return retval;
                
@@ -140,7 +158,6 @@ attribute_container_add_device(struct device *dev,
                        continue;
                }
                memset(ic, 0, sizeof(struct internal_container));
-               INIT_LIST_HEAD(&ic->node);
                ic->cont = cont;
                class_device_initialize(&ic->classdev);
                ic->classdev.dev = get_device(dev);
@@ -151,11 +168,22 @@ attribute_container_add_device(struct device *dev,
                        fn(cont, dev, &ic->classdev);
                else
                        attribute_container_add_class_device(&ic->classdev);
-               list_add_tail(&ic->node, &cont->containers);
+               klist_add_tail(&ic->node, &cont->containers);
        }
        up(&attribute_container_mutex);
 }
 
+/* FIXME: can't break out of this unless klist_iter_exit is also
+ * called before doing the break
+ */
+#define klist_for_each_entry(pos, head, member, iter) \
+       for (klist_iter_init(head, iter); (pos = ({ \
+               struct klist_node *n = klist_next(iter); \
+               n ? container_of(n, typeof(*pos), member) : \
+                       ({ klist_iter_exit(iter) ; NULL; }); \
+       }) ) != NULL; )
+                       
+
 /**
  * attribute_container_remove_device - make device eligible for removal.
  *
@@ -182,17 +210,19 @@ attribute_container_remove_device(struct device *dev,
 
        down(&attribute_container_mutex);
        list_for_each_entry(cont, &attribute_container_list, node) {
-               struct internal_container *ic, *tmp;
+               struct internal_container *ic;
+               struct klist_iter iter;
 
                if (attribute_container_no_classdevs(cont))
                        continue;
 
                if (!cont->match(cont, dev))
                        continue;
-               list_for_each_entry_safe(ic, tmp, &cont->containers, node) {
+
+               klist_for_each_entry(ic, &cont->containers, node, &iter) {
                        if (dev != ic->classdev.dev)
                                continue;
-                       list_del(&ic->node);
+                       klist_del(&ic->node);
                        if (fn)
                                fn(cont, dev, &ic->classdev);
                        else {
@@ -225,12 +255,18 @@ attribute_container_device_trigger(struct device *dev,
 
        down(&attribute_container_mutex);
        list_for_each_entry(cont, &attribute_container_list, node) {
-               struct internal_container *ic, *tmp;
+               struct internal_container *ic;
+               struct klist_iter iter;
 
                if (!cont->match(cont, dev))
                        continue;
 
-               list_for_each_entry_safe(ic, tmp, &cont->containers, node) {
+               if (attribute_container_no_classdevs(cont)) {
+                       fn(cont, dev, NULL);
+                       continue;
+               }
+
+               klist_for_each_entry(ic, &cont->containers, node, &iter) {
                        if (dev == ic->classdev.dev)
                                fn(cont, dev, &ic->classdev);
                }
@@ -368,6 +404,36 @@ attribute_container_class_device_del(struct class_device *classdev)
 }
 EXPORT_SYMBOL_GPL(attribute_container_class_device_del);
 
+/**
+ * attribute_container_find_class_device - find the corresponding class_device
+ *
+ * @cont:      the container
+ * @dev:       the generic device
+ *
+ * Looks up the device in the container's list of class devices and returns
+ * the corresponding class_device.
+ */
+struct class_device *
+attribute_container_find_class_device(struct attribute_container *cont,
+                                     struct device *dev)
+{
+       struct class_device *cdev = NULL;
+       struct internal_container *ic;
+       struct klist_iter iter;
+
+       klist_for_each_entry(ic, &cont->containers, node, &iter) {
+               if (ic->classdev.dev == dev) {
+                       cdev = &ic->classdev;
+                       /* FIXME: must exit iterator then break */
+                       klist_iter_exit(&iter);
+                       break;
+               }
+       }
+
+       return cdev;
+}
+EXPORT_SYMBOL_GPL(attribute_container_find_class_device);
+
 int __init
 attribute_container_init(void)
 {
index 17e96698410e43c47464fb6d509cf082b0a0a724..03204bfd17afb3a64e940977474e411f74319535 100644 (file)
@@ -568,6 +568,36 @@ static void bus_remove_attrs(struct bus_type * bus)
        }
 }
 
+static void klist_devices_get(struct klist_node *n)
+{
+       struct device *dev = container_of(n, struct device, knode_bus);
+
+       get_device(dev);
+}
+
+static void klist_devices_put(struct klist_node *n)
+{
+       struct device *dev = container_of(n, struct device, knode_bus);
+
+       put_device(dev);
+}
+
+static void klist_drivers_get(struct klist_node *n)
+{
+       struct device_driver *drv = container_of(n, struct device_driver,
+                                                knode_bus);
+
+       get_driver(drv);
+}
+
+static void klist_drivers_put(struct klist_node *n)
+{
+       struct device_driver *drv = container_of(n, struct device_driver,
+                                                knode_bus);
+
+       put_driver(drv);
+}
+
 /**
  *     bus_register - register a bus with the system.
  *     @bus:   bus.
@@ -602,8 +632,8 @@ int bus_register(struct bus_type * bus)
        if (retval)
                goto bus_drivers_fail;
 
-       klist_init(&bus->klist_devices);
-       klist_init(&bus->klist_drivers);
+       klist_init(&bus->klist_devices, klist_devices_get, klist_devices_put);
+       klist_init(&bus->klist_drivers, klist_drivers_get, klist_drivers_put);
        bus_add_attrs(bus);
 
        pr_debug("bus type '%s' registered\n", bus->name);
index c8a33df007612b1e417744a262ba3fe1026114dd..6ab73f5c799aa486b3cc6f8050b82f962c02ff89 100644 (file)
@@ -191,6 +191,20 @@ void device_remove_file(struct device * dev, struct device_attribute * attr)
        }
 }
 
+static void klist_children_get(struct klist_node *n)
+{
+       struct device *dev = container_of(n, struct device, knode_parent);
+
+       get_device(dev);
+}
+
+static void klist_children_put(struct klist_node *n)
+{
+       struct device *dev = container_of(n, struct device, knode_parent);
+
+       put_device(dev);
+}
+
 
 /**
  *     device_initialize - init device structure.
@@ -207,7 +221,8 @@ void device_initialize(struct device *dev)
 {
        kobj_set_kset_s(dev, devices_subsys);
        kobject_init(&dev->kobj);
-       klist_init(&dev->klist_children);
+       klist_init(&dev->klist_children, klist_children_get,
+                  klist_children_put);
        INIT_LIST_HEAD(&dev->dma_pools);
        init_MUTEX(&dev->sem);
 }
index 291c5954a3af58afd353a8a6369850a5bf19e483..ef3fe513e39855f60e2e73a771d558a1b91b1dab 100644 (file)
@@ -142,6 +142,19 @@ void put_driver(struct device_driver * drv)
        kobject_put(&drv->kobj);
 }
 
+static void klist_devices_get(struct klist_node *n)
+{
+       struct device *dev = container_of(n, struct device, knode_driver);
+
+       get_device(dev);
+}
+
+static void klist_devices_put(struct klist_node *n)
+{
+       struct device *dev = container_of(n, struct device, knode_driver);
+
+       put_device(dev);
+}
 
 /**
  *     driver_register - register driver with bus
@@ -157,7 +170,7 @@ void put_driver(struct device_driver * drv)
  */
 int driver_register(struct device_driver * drv)
 {
-       klist_init(&drv->klist_devices);
+       klist_init(&drv->klist_devices, klist_devices_get, klist_devices_put);
        init_completion(&drv->unloaded);
        return bus_add_driver(drv);
 }
index 652281402c923860d449ec7a652ff81fa6903447..5bfa2e9a7c2678efade79213aa5bd203054613b8 100644 (file)
@@ -28,6 +28,7 @@ enum {
        FW_STATUS_DONE,
        FW_STATUS_ABORT,
        FW_STATUS_READY,
+       FW_STATUS_READY_NOHOTPLUG,
 };
 
 static int loading_timeout = 10;       /* In seconds */
@@ -344,7 +345,7 @@ error_kfree:
 
 static int
 fw_setup_class_device(struct firmware *fw, struct class_device **class_dev_p,
-                     const char *fw_name, struct device *device)
+                     const char *fw_name, struct device *device, int hotplug)
 {
        struct class_device *class_dev;
        struct firmware_priv *fw_priv;
@@ -376,7 +377,10 @@ fw_setup_class_device(struct firmware *fw, struct class_device **class_dev_p,
                goto error_unreg;
        }
 
-       set_bit(FW_STATUS_READY, &fw_priv->status);
+       if (hotplug)
+                set_bit(FW_STATUS_READY, &fw_priv->status);
+        else
+                set_bit(FW_STATUS_READY_NOHOTPLUG, &fw_priv->status);
        *class_dev_p = class_dev;
        goto out;
 
@@ -386,21 +390,9 @@ out:
        return retval;
 }
 
-/**
- * request_firmware: - request firmware to hotplug and wait for it
- * Description:
- *     @firmware will be used to return a firmware image by the name
- *     of @name for device @device.
- *
- *     Should be called from user context where sleeping is allowed.
- *
- *     @name will be use as $FIRMWARE in the hotplug environment and
- *     should be distinctive enough not to be confused with any other
- *     firmware image for this or any other device.
- **/
-int
-request_firmware(const struct firmware **firmware_p, const char *name,
-                struct device *device)
+static int
+_request_firmware(const struct firmware **firmware_p, const char *name,
+                struct device *device, int hotplug)
 {
        struct class_device *class_dev;
        struct firmware_priv *fw_priv;
@@ -419,22 +411,25 @@ request_firmware(const struct firmware **firmware_p, const char *name,
        }
        memset(firmware, 0, sizeof (*firmware));
 
-       retval = fw_setup_class_device(firmware, &class_dev, name, device);
+       retval = fw_setup_class_device(firmware, &class_dev, name, device,
+               hotplug);
        if (retval)
                goto error_kfree_fw;
 
        fw_priv = class_get_devdata(class_dev);
 
-       if (loading_timeout > 0) {
-               fw_priv->timeout.expires = jiffies + loading_timeout * HZ;
-               add_timer(&fw_priv->timeout);
-       }
-
-       kobject_hotplug(&class_dev->kobj, KOBJ_ADD);
-       wait_for_completion(&fw_priv->completion);
-       set_bit(FW_STATUS_DONE, &fw_priv->status);
+       if (hotplug) {
+               if (loading_timeout > 0) {
+                       fw_priv->timeout.expires = jiffies + loading_timeout * HZ;
+                       add_timer(&fw_priv->timeout);
+               }
 
-       del_timer_sync(&fw_priv->timeout);
+               kobject_hotplug(&class_dev->kobj, KOBJ_ADD);
+               wait_for_completion(&fw_priv->completion);
+               set_bit(FW_STATUS_DONE, &fw_priv->status);
+               del_timer_sync(&fw_priv->timeout);
+       } else
+               wait_for_completion(&fw_priv->completion);
 
        down(&fw_lock);
        if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status)) {
@@ -454,6 +449,26 @@ out:
        return retval;
 }
 
+/**
+ * request_firmware: - request firmware to hotplug and wait for it
+ * Description:
+ *      @firmware will be used to return a firmware image by the name
+ *      of @name for device @device.
+ *
+ *      Should be called from user context where sleeping is allowed.
+ *
+ *      @name will be use as $FIRMWARE in the hotplug environment and
+ *      should be distinctive enough not to be confused with any other
+ *      firmware image for this or any other device.
+ **/
+int
+request_firmware(const struct firmware **firmware_p, const char *name,
+                 struct device *device)
+{
+        int hotplug = 1;
+        return _request_firmware(firmware_p, name, device, hotplug);
+}
+
 /**
  * release_firmware: - release the resource associated with a firmware image
  **/
@@ -491,6 +506,7 @@ struct firmware_work {
        struct device *device;
        void *context;
        void (*cont)(const struct firmware *fw, void *context);
+       int hotplug;
 };
 
 static int
@@ -503,7 +519,8 @@ request_firmware_work_func(void *arg)
                return 0;
        }
        daemonize("%s/%s", "firmware", fw_work->name);
-       request_firmware(&fw, fw_work->name, fw_work->device);
+       _request_firmware(&fw, fw_work->name, fw_work->device,
+               fw_work->hotplug);
        fw_work->cont(fw, fw_work->context);
        release_firmware(fw);
        module_put(fw_work->module);
@@ -518,6 +535,9 @@ request_firmware_work_func(void *arg)
  *     Asynchronous variant of request_firmware() for contexts where
  *     it is not possible to sleep.
  *
+ *      @hotplug invokes hotplug event to copy the firmware image if this flag
+ *      is non-zero else the firmware copy must be done manually.
+ *
  *     @cont will be called asynchronously when the firmware request is over.
  *
  *     @context will be passed over to @cont.
@@ -527,7 +547,7 @@ request_firmware_work_func(void *arg)
  **/
 int
 request_firmware_nowait(
-       struct module *module,
+       struct module *module, int hotplug,
        const char *name, struct device *device, void *context,
        void (*cont)(const struct firmware *fw, void *context))
 {
@@ -548,6 +568,7 @@ request_firmware_nowait(
                .device = device,
                .context = context,
                .cont = cont,
+               .hotplug = hotplug,
        };
 
        ret = kernel_thread(request_firmware_work_func, fw_work,
index 6c2b447a333657133336187b0a7c77e14377d920..f25e7c6b2d27301990eb6bc133015b5889a754e9 100644 (file)
@@ -7,7 +7,7 @@
  * This file is licensed under GPLv2
  *
  * The basic idea here is to allow any "device controller" (which
- * would most often be a Host Bus Adapter" to use the services of one
+ * would most often be a Host Bus Adapter to use the services of one
  * or more tranport classes for performing transport specific
  * services.  Transport specific services are things that the generic
  * command layer doesn't want to know about (speed settings, line
@@ -64,7 +64,9 @@ void transport_class_unregister(struct transport_class *tclass)
 }
 EXPORT_SYMBOL_GPL(transport_class_unregister);
 
-static int anon_transport_dummy_function(struct device *dev)
+static int anon_transport_dummy_function(struct transport_container *tc,
+                                        struct device *dev,
+                                        struct class_device *cdev)
 {
        /* do nothing */
        return 0;
@@ -115,9 +117,10 @@ static int transport_setup_classdev(struct attribute_container *cont,
                                    struct class_device *classdev)
 {
        struct transport_class *tclass = class_to_transport_class(cont->class);
+       struct transport_container *tcont = attribute_container_to_transport_container(cont);
 
        if (tclass->setup)
-               tclass->setup(dev);
+               tclass->setup(tcont, dev, classdev);
 
        return 0;
 }
@@ -178,12 +181,14 @@ void transport_add_device(struct device *dev)
 EXPORT_SYMBOL_GPL(transport_add_device);
 
 static int transport_configure(struct attribute_container *cont,
-                              struct device *dev)
+                              struct device *dev,
+                              struct class_device *cdev)
 {
        struct transport_class *tclass = class_to_transport_class(cont->class);
+       struct transport_container *tcont = attribute_container_to_transport_container(cont);
 
        if (tclass->configure)
-               tclass->configure(dev);
+               tclass->configure(tcont, dev, cdev);
 
        return 0;
 }
@@ -202,7 +207,7 @@ static int transport_configure(struct attribute_container *cont,
  */
 void transport_configure_device(struct device *dev)
 {
-       attribute_container_trigger(dev, transport_configure);
+       attribute_container_device_trigger(dev, transport_configure);
 }
 EXPORT_SYMBOL_GPL(transport_configure_device);
 
@@ -215,7 +220,7 @@ static int transport_remove_classdev(struct attribute_container *cont,
        struct transport_class *tclass = class_to_transport_class(cont->class);
 
        if (tclass->remove)
-               tclass->remove(dev);
+               tclass->remove(tcont, dev, classdev);
 
        if (tclass->remove != anon_transport_dummy_function) {
                if (tcont->statistics)
index 6b736364cc5b886589c54a21bfdc8afdda448fe9..51b0af1cebee15f0406ceaf4517538bb9a39edb3 100644 (file)
@@ -6,7 +6,7 @@ menu "Block devices"
 
 config BLK_DEV_FD
        tristate "Normal floppy disk support"
-       depends on (!ARCH_S390 && !M68K && !IA64 && !UML && !ARM) || Q40 || (SUN3X && BROKEN) || ARCH_RPC || ARCH_EBSA285
+       depends on ARCH_MAY_HAVE_PC_FDC
        ---help---
          If you want to use the floppy disk drive(s) of your PC under Linux,
          say Y. Information about this driver, especially important for IBM
index 6e231c5a119958dd3549e5d825f4706f9d04f9ec..ded33ba31accfccf0df29072903cad7493447470 100644 (file)
@@ -35,7 +35,7 @@ aoedev_newdev(ulong nframes)
        struct aoedev *d;
        struct frame *f, *e;
 
-       d = kcalloc(1, sizeof *d, GFP_ATOMIC);
+       d = kzalloc(sizeof *d, GFP_ATOMIC);
        if (d == NULL)
                return NULL;
        f = kcalloc(nframes, sizeof *f, GFP_ATOMIC);
index cd056e7e64ec15d5cf81f16068623e29e07ad187..30c0903c7cddfdd46dbdd0de9c8e999c1ed7f349 100644 (file)
@@ -2260,8 +2260,6 @@ static void cfq_put_cfqd(struct cfq_data *cfqd)
        if (!atomic_dec_and_test(&cfqd->ref))
                return;
 
-       blk_put_queue(q);
-
        cfq_shutdown_timer_wq(cfqd);
        q->elevator->elevator_data = NULL;
 
@@ -2318,7 +2316,6 @@ static int cfq_init_queue(request_queue_t *q, elevator_t *e)
        e->elevator_data = cfqd;
 
        cfqd->queue = q;
-       atomic_inc(&q->refcnt);
 
        cfqd->max_queued = q->nr_requests / 4;
        q->nr_batching = cfq_queued;
index ff5201e021534693987f30597817ef7cdb2de317..24594c57c3230e5a095eb10ddb282137ed9161ba 100644 (file)
@@ -507,18 +507,12 @@ static int deadline_dispatch_requests(struct deadline_data *dd)
        const int reads = !list_empty(&dd->fifo_list[READ]);
        const int writes = !list_empty(&dd->fifo_list[WRITE]);
        struct deadline_rq *drq;
-       int data_dir, other_dir;
+       int data_dir;
 
        /*
         * batches are currently reads XOR writes
         */
-       drq = NULL;
-
-       if (dd->next_drq[READ])
-               drq = dd->next_drq[READ];
-
-       if (dd->next_drq[WRITE])
-               drq = dd->next_drq[WRITE];
+       drq = dd->next_drq[WRITE] ? : dd->next_drq[READ];
 
        if (drq) {
                /* we have a "next request" */
@@ -544,7 +538,6 @@ static int deadline_dispatch_requests(struct deadline_data *dd)
                        goto dispatch_writes;
 
                data_dir = READ;
-               other_dir = WRITE;
 
                goto dispatch_find_request;
        }
@@ -560,7 +553,6 @@ dispatch_writes:
                dd->starved = 0;
 
                data_dir = WRITE;
-               other_dir = READ;
 
                goto dispatch_find_request;
        }
index 47fd3659a061786967d2d150b5e9ba3212057bc9..d42840cc0d1dfcd0fad18fca25041c04ac69661a 100644 (file)
@@ -45,7 +45,7 @@ int get_blkdev_list(char *p, int used)
        struct blk_major_name *n;
        int i, len;
 
-       len = sprintf(p, "\nBlock devices:\n");
+       len = snprintf(p, (PAGE_SIZE-used), "\nBlock devices:\n");
 
        down(&block_subsys_sem);
        for (i = 0; i < ARRAY_SIZE(major_names); i++) {
index 3c818544475ea857d249f1afc8f259028c163a2b..483d71b10cf9307364f86cfcd244da6c2850ef96 100644 (file)
@@ -235,8 +235,8 @@ void blk_queue_make_request(request_queue_t * q, make_request_fn * mfn)
         * set defaults
         */
        q->nr_requests = BLKDEV_MAX_RQ;
-       q->max_phys_segments = MAX_PHYS_SEGMENTS;
-       q->max_hw_segments = MAX_HW_SEGMENTS;
+       blk_queue_max_phys_segments(q, MAX_PHYS_SEGMENTS);
+       blk_queue_max_hw_segments(q, MAX_HW_SEGMENTS);
        q->make_request_fn = mfn;
        q->backing_dev_info.ra_pages = (VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE;
        q->backing_dev_info.state = 0;
@@ -284,6 +284,7 @@ static inline void rq_init(request_queue_t *q, struct request *rq)
        rq->special = NULL;
        rq->data_len = 0;
        rq->data = NULL;
+       rq->nr_phys_segments = 0;
        rq->sense = NULL;
        rq->end_io = NULL;
        rq->end_io_data = NULL;
@@ -2115,7 +2116,7 @@ EXPORT_SYMBOL(blk_insert_request);
 /**
  * blk_rq_map_user - map user data to a request, for REQ_BLOCK_PC usage
  * @q:         request queue where request should be inserted
- * @rw:                READ or WRITE data
+ * @rq:                request structure to fill
  * @ubuf:      the user buffer
  * @len:       length of user data
  *
@@ -2132,21 +2133,19 @@ EXPORT_SYMBOL(blk_insert_request);
  *    original bio must be passed back in to blk_rq_unmap_user() for proper
  *    unmapping.
  */
-struct request *blk_rq_map_user(request_queue_t *q, int rw, void __user *ubuf,
-                               unsigned int len)
+int blk_rq_map_user(request_queue_t *q, struct request *rq, void __user *ubuf,
+                   unsigned int len)
 {
        unsigned long uaddr;
-       struct request *rq;
        struct bio *bio;
+       int reading;
 
        if (len > (q->max_sectors << 9))
-               return ERR_PTR(-EINVAL);
-       if ((!len && ubuf) || (len && !ubuf))
-               return ERR_PTR(-EINVAL);
+               return -EINVAL;
+       if (!len || !ubuf)
+               return -EINVAL;
 
-       rq = blk_get_request(q, rw, __GFP_WAIT);
-       if (!rq)
-               return ERR_PTR(-ENOMEM);
+       reading = rq_data_dir(rq) == READ;
 
        /*
         * if alignment requirement is satisfied, map in user pages for
@@ -2154,9 +2153,9 @@ struct request *blk_rq_map_user(request_queue_t *q, int rw, void __user *ubuf,
         */
        uaddr = (unsigned long) ubuf;
        if (!(uaddr & queue_dma_alignment(q)) && !(len & queue_dma_alignment(q)))
-               bio = bio_map_user(q, NULL, uaddr, len, rw == READ);
+               bio = bio_map_user(q, NULL, uaddr, len, reading);
        else
-               bio = bio_copy_user(q, uaddr, len, rw == READ);
+               bio = bio_copy_user(q, uaddr, len, reading);
 
        if (!IS_ERR(bio)) {
                rq->bio = rq->biotail = bio;
@@ -2164,28 +2163,70 @@ struct request *blk_rq_map_user(request_queue_t *q, int rw, void __user *ubuf,
 
                rq->buffer = rq->data = NULL;
                rq->data_len = len;
-               return rq;
+               return 0;
        }
 
        /*
         * bio is the err-ptr
         */
-       blk_put_request(rq);
-       return (struct request *) bio;
+       return PTR_ERR(bio);
 }
 
 EXPORT_SYMBOL(blk_rq_map_user);
 
+/**
+ * blk_rq_map_user_iov - map user data to a request, for REQ_BLOCK_PC usage
+ * @q:         request queue where request should be inserted
+ * @rq:                request to map data to
+ * @iov:       pointer to the iovec
+ * @iov_count: number of elements in the iovec
+ *
+ * Description:
+ *    Data will be mapped directly for zero copy io, if possible. Otherwise
+ *    a kernel bounce buffer is used.
+ *
+ *    A matching blk_rq_unmap_user() must be issued at the end of io, while
+ *    still in process context.
+ *
+ *    Note: The mapped bio may need to be bounced through blk_queue_bounce()
+ *    before being submitted to the device, as pages mapped may be out of
+ *    reach. It's the callers responsibility to make sure this happens. The
+ *    original bio must be passed back in to blk_rq_unmap_user() for proper
+ *    unmapping.
+ */
+int blk_rq_map_user_iov(request_queue_t *q, struct request *rq,
+                       struct sg_iovec *iov, int iov_count)
+{
+       struct bio *bio;
+
+       if (!iov || iov_count <= 0)
+               return -EINVAL;
+
+       /* we don't allow misaligned data like bio_map_user() does.  If the
+        * user is using sg, they're expected to know the alignment constraints
+        * and respect them accordingly */
+       bio = bio_map_user_iov(q, NULL, iov, iov_count, rq_data_dir(rq)== READ);
+       if (IS_ERR(bio))
+               return PTR_ERR(bio);
+
+       rq->bio = rq->biotail = bio;
+       blk_rq_bio_prep(q, rq, bio);
+       rq->buffer = rq->data = NULL;
+       rq->data_len = bio->bi_size;
+       return 0;
+}
+
+EXPORT_SYMBOL(blk_rq_map_user_iov);
+
 /**
  * blk_rq_unmap_user - unmap a request with user data
- * @rq:                request to be unmapped
- * @bio:       bio for the request
+ * @bio:       bio to be unmapped
  * @ulen:      length of user buffer
  *
  * Description:
- *    Unmap a request previously mapped by blk_rq_map_user().
+ *    Unmap a bio previously mapped by blk_rq_map_user().
  */
-int blk_rq_unmap_user(struct request *rq, struct bio *bio, unsigned int ulen)
+int blk_rq_unmap_user(struct bio *bio, unsigned int ulen)
 {
        int ret = 0;
 
@@ -2196,31 +2237,89 @@ int blk_rq_unmap_user(struct request *rq, struct bio *bio, unsigned int ulen)
                        ret = bio_uncopy_user(bio);
        }
 
-       blk_put_request(rq);
-       return ret;
+       return 0;
 }
 
 EXPORT_SYMBOL(blk_rq_unmap_user);
 
+/**
+ * blk_rq_map_kern - map kernel data to a request, for REQ_BLOCK_PC usage
+ * @q:         request queue where request should be inserted
+ * @rq:                request to fill
+ * @kbuf:      the kernel buffer
+ * @len:       length of user data
+ * @gfp_mask:  memory allocation flags
+ */
+int blk_rq_map_kern(request_queue_t *q, struct request *rq, void *kbuf,
+                   unsigned int len, unsigned int gfp_mask)
+{
+       struct bio *bio;
+
+       if (len > (q->max_sectors << 9))
+               return -EINVAL;
+       if (!len || !kbuf)
+               return -EINVAL;
+
+       bio = bio_map_kern(q, kbuf, len, gfp_mask);
+       if (IS_ERR(bio))
+               return PTR_ERR(bio);
+
+       if (rq_data_dir(rq) == WRITE)
+               bio->bi_rw |= (1 << BIO_RW);
+
+       rq->bio = rq->biotail = bio;
+       blk_rq_bio_prep(q, rq, bio);
+
+       rq->buffer = rq->data = NULL;
+       rq->data_len = len;
+       return 0;
+}
+
+EXPORT_SYMBOL(blk_rq_map_kern);
+
+/**
+ * blk_execute_rq_nowait - insert a request into queue for execution
+ * @q:         queue to insert the request in
+ * @bd_disk:   matching gendisk
+ * @rq:                request to insert
+ * @at_head:    insert request at head or tail of queue
+ * @done:      I/O completion handler
+ *
+ * Description:
+ *    Insert a fully prepared request at the back of the io scheduler queue
+ *    for execution.  Don't wait for completion.
+ */
+void blk_execute_rq_nowait(request_queue_t *q, struct gendisk *bd_disk,
+                          struct request *rq, int at_head,
+                          void (*done)(struct request *))
+{
+       int where = at_head ? ELEVATOR_INSERT_FRONT : ELEVATOR_INSERT_BACK;
+
+       rq->rq_disk = bd_disk;
+       rq->flags |= REQ_NOMERGE;
+       rq->end_io = done;
+       elv_add_request(q, rq, where, 1);
+       generic_unplug_device(q);
+}
+
 /**
  * blk_execute_rq - insert a request into queue for execution
  * @q:         queue to insert the request in
  * @bd_disk:   matching gendisk
  * @rq:                request to insert
+ * @at_head:    insert request at head or tail of queue
  *
  * Description:
  *    Insert a fully prepared request at the back of the io scheduler queue
- *    for execution.
+ *    for execution and wait for completion.
  */
 int blk_execute_rq(request_queue_t *q, struct gendisk *bd_disk,
-                  struct request *rq)
+                  struct request *rq, int at_head)
 {
        DECLARE_COMPLETION(wait);
        char sense[SCSI_SENSE_BUFFERSIZE];
        int err = 0;
 
-       rq->rq_disk = bd_disk;
-
        /*
         * we need an extra reference to the request, so we can look at
         * it after io completion
@@ -2233,11 +2332,8 @@ int blk_execute_rq(request_queue_t *q, struct gendisk *bd_disk,
                rq->sense_len = 0;
        }
 
-       rq->flags |= REQ_NOMERGE;
        rq->waiting = &wait;
-       rq->end_io = blk_end_sync_rq;
-       elv_add_request(q, rq, ELEVATOR_INSERT_BACK, 1);
-       generic_unplug_device(q);
+       blk_execute_rq_nowait(q, bd_disk, rq, at_head, blk_end_sync_rq);
        wait_for_completion(&wait);
        rq->waiting = NULL;
 
@@ -2277,6 +2373,44 @@ int blkdev_issue_flush(struct block_device *bdev, sector_t *error_sector)
 
 EXPORT_SYMBOL(blkdev_issue_flush);
 
+/**
+ * blkdev_scsi_issue_flush_fn - issue flush for SCSI devices
+ * @q:         device queue
+ * @disk:      gendisk
+ * @error_sector:      error offset
+ *
+ * Description:
+ *    Devices understanding the SCSI command set, can use this function as
+ *    a helper for issuing a cache flush. Note: driver is required to store
+ *    the error offset (in case of error flushing) in ->sector of struct
+ *    request.
+ */
+int blkdev_scsi_issue_flush_fn(request_queue_t *q, struct gendisk *disk,
+                              sector_t *error_sector)
+{
+       struct request *rq = blk_get_request(q, WRITE, __GFP_WAIT);
+       int ret;
+
+       rq->flags |= REQ_BLOCK_PC | REQ_SOFTBARRIER;
+       rq->sector = 0;
+       memset(rq->cmd, 0, sizeof(rq->cmd));
+       rq->cmd[0] = 0x35;
+       rq->cmd_len = 12;
+       rq->data = NULL;
+       rq->data_len = 0;
+       rq->timeout = 60 * HZ;
+
+       ret = blk_execute_rq(q, disk, rq, 0);
+
+       if (ret && error_sector)
+               *error_sector = rq->sector;
+
+       blk_put_request(rq);
+       return ret;
+}
+
+EXPORT_SYMBOL(blkdev_scsi_issue_flush_fn);
+
 static void drive_stat_acct(struct request *rq, int nr_sectors, int new_io)
 {
        int rw = rq_data_dir(rq);
index 681871ca5d60a89af6978c4727daac1853314d5c..abb2df249fd35dbb3242d31285f75586022ab324 100644 (file)
@@ -216,7 +216,7 @@ static int sg_io(struct file *file, request_queue_t *q,
                struct gendisk *bd_disk, struct sg_io_hdr *hdr)
 {
        unsigned long start_time;
-       int reading, writing;
+       int writing = 0, ret = 0;
        struct request *rq;
        struct bio *bio;
        char sense[SCSI_SENSE_BUFFERSIZE];
@@ -231,38 +231,48 @@ static int sg_io(struct file *file, request_queue_t *q,
        if (verify_command(file, cmd))
                return -EPERM;
 
-       /*
-        * we'll do that later
-        */
-       if (hdr->iovec_count)
-               return -EOPNOTSUPP;
-
        if (hdr->dxfer_len > (q->max_sectors << 9))
                return -EIO;
 
-       reading = writing = 0;
-       if (hdr->dxfer_len) {
+       if (hdr->dxfer_len)
                switch (hdr->dxfer_direction) {
                default:
                        return -EINVAL;
                case SG_DXFER_TO_FROM_DEV:
-                       reading = 1;
-                       /* fall through */
                case SG_DXFER_TO_DEV:
                        writing = 1;
                        break;
                case SG_DXFER_FROM_DEV:
-                       reading = 1;
                        break;
                }
 
-               rq = blk_rq_map_user(q, writing ? WRITE : READ, hdr->dxferp,
-                                    hdr->dxfer_len);
+       rq = blk_get_request(q, writing ? WRITE : READ, GFP_KERNEL);
+       if (!rq)
+               return -ENOMEM;
+
+       if (hdr->iovec_count) {
+               const int size = sizeof(struct sg_iovec) * hdr->iovec_count;
+               struct sg_iovec *iov;
+
+               iov = kmalloc(size, GFP_KERNEL);
+               if (!iov) {
+                       ret = -ENOMEM;
+                       goto out;
+               }
+
+               if (copy_from_user(iov, hdr->dxferp, size)) {
+                       kfree(iov);
+                       ret = -EFAULT;
+                       goto out;
+               }
+
+               ret = blk_rq_map_user_iov(q, rq, iov, hdr->iovec_count);
+               kfree(iov);
+       } else if (hdr->dxfer_len)
+               ret = blk_rq_map_user(q, rq, hdr->dxferp, hdr->dxfer_len);
 
-               if (IS_ERR(rq))
-                       return PTR_ERR(rq);
-       } else
-               rq = blk_get_request(q, READ, __GFP_WAIT);
+       if (ret)
+               goto out;
 
        /*
         * fill in request structure
@@ -298,7 +308,7 @@ static int sg_io(struct file *file, request_queue_t *q,
         * (if he doesn't check that is his problem).
         * N.B. a non-zero SCSI status is _not_ necessarily an error.
         */
-       blk_execute_rq(q, bd_disk, rq);
+       blk_execute_rq(q, bd_disk, rq, 0);
 
        /* write to all output members */
        hdr->status = 0xff & rq->errors;
@@ -320,12 +330,14 @@ static int sg_io(struct file *file, request_queue_t *q,
                        hdr->sb_len_wr = len;
        }
 
-       if (blk_rq_unmap_user(rq, bio, hdr->dxfer_len))
-               return -EFAULT;
+       if (blk_rq_unmap_user(bio, hdr->dxfer_len))
+               ret = -EFAULT;
 
        /* may not have succeeded, but output values written to control
         * structure (struct sg_io_hdr).  */
-       return 0;
+out:
+       blk_put_request(rq);
+       return ret;
 }
 
 #define OMAX_SB_LEN 16          /* For backward compatibility */
@@ -408,7 +420,7 @@ static int sg_scsi_ioctl(struct file *file, request_queue_t *q,
        rq->data_len = bytes;
        rq->flags |= REQ_BLOCK_PC;
 
-       blk_execute_rq(q, bd_disk, rq);
+       blk_execute_rq(q, bd_disk, rq, 0);
        err = rq->errors & 0xff;        /* only 8 bit SCSI status */
        if (err) {
                if (rq->sense_len && rq->sense) {
@@ -561,7 +573,7 @@ int scsi_cmd_ioctl(struct file *file, struct gendisk *bd_disk, unsigned int cmd,
                        rq->cmd[0] = GPCMD_START_STOP_UNIT;
                        rq->cmd[4] = 0x02 + (close != 0);
                        rq->cmd_len = 6;
-                       err = blk_execute_rq(q, bd_disk, rq);
+                       err = blk_execute_rq(q, bd_disk, rq, 0);
                        blk_put_request(rq);
                        break;
                default:
index beaa561f2ed888ad6780699b4ffb15bdc8796c93..153960348414b9540ca670430d231efd6c105547 100644 (file)
@@ -2097,6 +2097,10 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
        if (!q)
                return -ENXIO;
 
+       rq = blk_get_request(q, READ, GFP_KERNEL);
+       if (!rq)
+               return -ENOMEM;
+
        cdi->last_sense = 0;
 
        while (nframes) {
@@ -2108,9 +2112,9 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
 
                len = nr * CD_FRAMESIZE_RAW;
 
-               rq = blk_rq_map_user(q, READ, ubuf, len);
-               if (IS_ERR(rq))
-                       return PTR_ERR(rq);
+               ret = blk_rq_map_user(q, rq, ubuf, len);
+               if (ret)
+                       break;
 
                memset(rq->cmd, 0, sizeof(rq->cmd));
                rq->cmd[0] = GPCMD_READ_CD;
@@ -2132,13 +2136,13 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
                if (rq->bio)
                        blk_queue_bounce(q, &rq->bio);
 
-               if (blk_execute_rq(q, cdi->disk, rq)) {
+               if (blk_execute_rq(q, cdi->disk, rq, 0)) {
                        struct request_sense *s = rq->sense;
                        ret = -EIO;
                        cdi->last_sense = s->sense_key;
                }
 
-               if (blk_rq_unmap_user(rq, bio, len))
+               if (blk_rq_unmap_user(bio, len))
                        ret = -EFAULT;
 
                if (ret)
@@ -2149,6 +2153,7 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
                ubuf += len;
        }
 
+       blk_put_request(rq);
        return ret;
 }
 
index a1de06d76de63e8742558f0f20e587e1fcfa3cf6..2bc9d64db106cc40df4cf709db77405f66258c9d 100644 (file)
@@ -138,7 +138,7 @@ config CYZ_INTR
 
 config DIGIEPCA
        tristate "Digiboard Intelligent Async Support"
-       depends on SERIAL_NONSTANDARD && BROKEN_ON_SMP && (!64BIT || BROKEN)
+       depends on SERIAL_NONSTANDARD
        ---help---
          This is a driver for Digi International's Xx, Xeve, and Xem series
          of cards which provide multiple serial ports. You would need
index 184378d23f8ce1598827da50ca87041d5c21e24f..94d4eab5d3ca30e494e6cf90feab98607725d48b 100644 (file)
@@ -1,46 +1,46 @@
 /*          Definitions for DigiBoard ditty(1) command.                 */
 
 #if !defined(TIOCMODG)
-#define        TIOCMODG        ('d'<<8) | 250          /* get modem ctrl state */
-#define        TIOCMODS        ('d'<<8) | 251          /* set modem ctrl state */
+#define        TIOCMODG        (('d'<<8) | 250)        /* get modem ctrl state */
+#define        TIOCMODS        (('d'<<8) | 251)        /* set modem ctrl state */
 #endif
 
 #if !defined(TIOCMSET)
-#define        TIOCMSET        ('d'<<8) | 252          /* set modem ctrl state */
-#define        TIOCMGET        ('d'<<8) | 253          /* set modem ctrl state */
+#define        TIOCMSET        (('d'<<8) | 252)        /* set modem ctrl state */
+#define        TIOCMGET        (('d'<<8) | 253)        /* set modem ctrl state */
 #endif
 
 #if !defined(TIOCMBIC)
-#define        TIOCMBIC        ('d'<<8) | 254          /* set modem ctrl state */
-#define        TIOCMBIS        ('d'<<8) | 255          /* set modem ctrl state */
+#define        TIOCMBIC        (('d'<<8) | 254)        /* set modem ctrl state */
+#define        TIOCMBIS        (('d'<<8) | 255)        /* set modem ctrl state */
 #endif
 
 #if !defined(TIOCSDTR)
-#define        TIOCSDTR        ('e'<<8) | 0            /* set DTR              */
-#define        TIOCCDTR        ('e'<<8) | 1            /* clear DTR            */
+#define        TIOCSDTR        (('e'<<8) | 0)          /* set DTR              */
+#define        TIOCCDTR        (('e'<<8) | 1)          /* clear DTR            */
 #endif
 
 /************************************************************************
  * Ioctl command arguments for DIGI parameters.
  ************************************************************************/
-#define DIGI_GETA      ('e'<<8) | 94           /* Read params          */
+#define DIGI_GETA      (('e'<<8) | 94)         /* Read params          */
 
-#define DIGI_SETA      ('e'<<8) | 95           /* Set params           */
-#define DIGI_SETAW     ('e'<<8) | 96           /* Drain & set params   */
-#define DIGI_SETAF     ('e'<<8) | 97           /* Drain, flush & set params */
+#define DIGI_SETA      (('e'<<8) | 95)         /* Set params           */
+#define DIGI_SETAW     (('e'<<8) | 96)         /* Drain & set params   */
+#define DIGI_SETAF     (('e'<<8) | 97)         /* Drain, flush & set params */
 
-#define        DIGI_GETFLOW    ('e'<<8) | 99           /* Get startc/stopc flow */
+#define        DIGI_GETFLOW    (('e'<<8) | 99)         /* Get startc/stopc flow */
                                                /* control characters    */
-#define        DIGI_SETFLOW    ('e'<<8) | 100          /* Set startc/stopc flow */
+#define        DIGI_SETFLOW    (('e'<<8) | 100)        /* Set startc/stopc flow */
                                                /* control characters    */
-#define        DIGI_GETAFLOW   ('e'<<8) | 101          /* Get Aux. startc/stopc */
+#define        DIGI_GETAFLOW   (('e'<<8) | 101)        /* Get Aux. startc/stopc */
                                                /* flow control chars    */
-#define        DIGI_SETAFLOW   ('e'<<8) | 102          /* Set Aux. startc/stopc */
+#define        DIGI_SETAFLOW   (('e'<<8) | 102)        /* Set Aux. startc/stopc */
                                                /* flow control chars    */
 
-#define        DIGI_GETINFO    ('e'<<8) | 103          /* Fill in digi_info */
-#define        DIGI_POLLER     ('e'<<8) | 104          /* Turn on/off poller */
-#define        DIGI_INIT       ('e'<<8) | 105          /* Allow things to run. */
+#define        DIGI_GETINFO    (('e'<<8) | 103)        /* Fill in digi_info */
+#define        DIGI_POLLER     (('e'<<8) | 104)        /* Turn on/off poller */
+#define        DIGI_INIT       (('e'<<8) | 105)        /* Allow things to run. */
 
 struct digiflow_struct 
 {
index c47d7fcb840017fe9372f079e0ffec0452cd2280..3c1f1922c798a4cff9dea622efc537bbfd885b40 100644 (file)
 
 struct global_data 
 {
-       volatile ushort cin;
-       volatile ushort cout;
-       volatile ushort cstart;
-       volatile ushort cmax;
-       volatile ushort ein;
-       volatile ushort eout;
-       volatile ushort istart;
-       volatile ushort imax;
+       u16 cin;
+       u16 cout;
+       u16 cstart;
+       u16 cmax;
+       u16 ein;
+       u16 eout;
+       u16 istart;
+       u16 imax;
 };
 
 
 struct board_chan 
 {
-       int filler1; 
-       int filler2;
-       volatile ushort tseg;
-       volatile ushort tin;
-       volatile ushort tout;
-       volatile ushort tmax;
-       
-       volatile ushort rseg;
-       volatile ushort rin;
-       volatile ushort rout;
-       volatile ushort rmax;
-       
-       volatile ushort tlow;
-       volatile ushort rlow;
-       volatile ushort rhigh;
-       volatile ushort incr;
-       
-       volatile ushort etime;
-       volatile ushort edelay;
-       volatile unchar *dev;
-       
-       volatile ushort iflag;
-       volatile ushort oflag;
-       volatile ushort cflag;
-       volatile ushort gmask;
-       
-       volatile ushort col;
-       volatile ushort delay;
-       volatile ushort imask;
-       volatile ushort tflush;
-
-       int filler3;
-       int filler4;
-       int filler5;
-       int filler6;
-       
-       volatile unchar num;
-       volatile unchar ract;
-       volatile unchar bstat;
-       volatile unchar tbusy;
-       volatile unchar iempty;
-       volatile unchar ilow;
-       volatile unchar idata;
-       volatile unchar eflag;
-       
-       volatile unchar tflag;
-       volatile unchar rflag;
-       volatile unchar xmask;
-       volatile unchar xval;
-       volatile unchar mstat;
-       volatile unchar mchange;
-       volatile unchar mint;
-       volatile unchar lstat;
-
-       volatile unchar mtran;
-       volatile unchar orun;
-       volatile unchar startca;
-       volatile unchar stopca;
-       volatile unchar startc;
-       volatile unchar stopc;
-       volatile unchar vnext;
-       volatile unchar hflow;
-
-       volatile unchar fillc;
-       volatile unchar ochar;
-       volatile unchar omask;
-
-       unchar filler7;
-       unchar filler8[28];
+       u32 filler1;
+       u32 filler2;
+       u16 tseg;
+       u16 tin;
+       u16 tout;
+       u16 tmax;
+
+       u16 rseg;
+       u16 rin;
+       u16 rout;
+       u16 rmax;
+
+       u16 tlow;
+       u16 rlow;
+       u16 rhigh;
+       u16 incr;
+
+       u16 etime;
+       u16 edelay;
+       unchar *dev;
+
+       u16 iflag;
+       u16 oflag;
+       u16 cflag;
+       u16 gmask;
+
+       u16 col;
+       u16 delay;
+       u16 imask;
+       u16 tflush;
+
+       u32 filler3;
+       u32 filler4;
+       u32 filler5;
+       u32 filler6;
+
+       u8 num;
+       u8 ract;
+       u8 bstat;
+       u8 tbusy;
+       u8 iempty;
+       u8 ilow;
+       u8 idata;
+       u8 eflag;
+
+       u8 tflag;
+       u8 rflag;
+       u8 xmask;
+       u8 xval;
+       u8 mstat;
+       u8 mchange;
+       u8 mint;
+       u8 lstat;
+
+       u8 mtran;
+       u8 orun;
+       u8 startca;
+       u8 stopca;
+       u8 startc;
+       u8 stopc;
+       u8 vnext;
+       u8 hflow;
+
+       u8 fillc;
+       u8 ochar;
+       u8 omask;
+
+       u8 filler7;
+       u8 filler8[28];
 }; 
 
 
index e0743ebbe4bdfd9f5b32064bed2492279671d3d9..f28e70ae66065d4a498760af053d1ea5fa0b6a99 100644 (file)
@@ -48,8 +48,8 @@ unsigned long drm_get_resource_len(drm_device_t *dev, unsigned int resource)
 }
 EXPORT_SYMBOL(drm_get_resource_len);
 
-static drm_local_map_t *drm_find_matching_map(drm_device_t *dev,
-                                             drm_local_map_t *map)
+static drm_map_list_t *drm_find_matching_map(drm_device_t *dev,
+                                            drm_local_map_t *map)
 {
        struct list_head *list;
 
@@ -57,7 +57,7 @@ static drm_local_map_t *drm_find_matching_map(drm_device_t *dev,
                drm_map_list_t *entry = list_entry(list, drm_map_list_t, head);
                if (entry->map && map->type == entry->map->type &&
                    entry->map->offset == map->offset) {
-                       return entry->map;
+                       return entry;
                }
        }
 
@@ -114,14 +114,13 @@ static __inline__ unsigned int HandleID(unsigned long lhandle, drm_device_t *dev
  * type.  Adds the map to the map list drm_device::maplist. Adds MTRR's where
  * applicable and if supported by the kernel.
  */
-int drm_addmap(drm_device_t * dev, unsigned int offset,
-              unsigned int size, drm_map_type_t type,
-              drm_map_flags_t flags, drm_local_map_t ** map_ptr)
+int drm_addmap_core(drm_device_t * dev, unsigned int offset,
+                   unsigned int size, drm_map_type_t type,
+                   drm_map_flags_t flags, drm_map_list_t **maplist)
 {
        drm_map_t *map;
        drm_map_list_t *list;
        drm_dma_handle_t *dmah;
-       drm_local_map_t *found_map;
 
        map = drm_alloc( sizeof(*map), DRM_MEM_MAPS );
        if ( !map )
@@ -166,17 +165,17 @@ int drm_addmap(drm_device_t * dev, unsigned int offset,
                 * needing to be aware of it.  Therefore, we just return success
                 * when the server tries to create a duplicate map.
                 */
-               found_map = drm_find_matching_map(dev, map);
-               if (found_map != NULL) {
-                       if (found_map->size != map->size) {
+               list = drm_find_matching_map(dev, map);
+               if (list != NULL) {
+                       if (list->map->size != map->size) {
                                DRM_DEBUG("Matching maps of type %d with "
                                   "mismatched sizes, (%ld vs %ld)\n",
-                                   map->type, map->size, found_map->size);
-                               found_map->size = map->size;
+                                   map->type, map->size, list->map->size);
+                               list->map->size = map->size;
                        }
 
                        drm_free(map, sizeof(*map), DRM_MEM_MAPS);
-                       *map_ptr = found_map;
+                       *maplist = list;
                        return 0;
                }
 
@@ -264,9 +263,22 @@ int drm_addmap(drm_device_t * dev, unsigned int offset,
                                    : map->offset, dev);
        up(&dev->struct_sem);
 
-       *map_ptr = map;
+       *maplist = list;
        return 0;
 }
+
+int drm_addmap(drm_device_t *dev, unsigned int offset,
+              unsigned int size, drm_map_type_t type,
+              drm_map_flags_t flags, drm_local_map_t **map_ptr)
+{
+       drm_map_list_t *list;
+       int rc;
+
+       rc = drm_addmap_core(dev, offset, size, type, flags, &list);
+       if (!rc)
+               *map_ptr = list->map;
+       return rc;
+}
 EXPORT_SYMBOL(drm_addmap);
 
 int drm_addmap_ioctl(struct inode *inode, struct file *filp,
@@ -275,10 +287,9 @@ int drm_addmap_ioctl(struct inode *inode, struct file *filp,
        drm_file_t *priv = filp->private_data;
        drm_device_t *dev = priv->head->dev;
        drm_map_t map;
-       drm_map_t *map_ptr;
+       drm_map_list_t *maplist;
        drm_map_t __user *argp = (void __user *)arg;
        int err;
-       unsigned long handle = 0;
 
        if (!(filp->f_mode & 3))
                return -EACCES; /* Require read/write */
@@ -287,26 +298,15 @@ int drm_addmap_ioctl(struct inode *inode, struct file *filp,
                return -EFAULT;
        }
 
-       err = drm_addmap(dev, map.offset, map.size, map.type, map.flags,
-                        &map_ptr);
+       err = drm_addmap_core(dev, map.offset, map.size, map.type, map.flags,
+                             &maplist);
 
-       if (err) {
+       if (err) 
                return err;
-       }
-
-       {
-               drm_map_list_t *_entry;
-               list_for_each_entry(_entry, &dev->maplist->head, head) {
-                       if (_entry->map == map_ptr)
-                               handle = _entry->user_token;
-               }
-               if (!handle)
-                       return -EFAULT;
-       }
 
-       if (copy_to_user(argp, map_ptr, sizeof(*map_ptr)))
+       if (copy_to_user(argp, maplist->map, sizeof(drm_map_t)))
                return -EFAULT;
-       if (put_user(handle, &argp->handle))
+       if (put_user(maplist->user_token, &argp->handle))
                return -EFAULT;
        return 0;
 }
@@ -1041,7 +1041,7 @@ static int drm_addbufs_sg(drm_device_t *dev, drm_buf_desc_t *request)
        return 0;
 }
 
-int drm_addbufs_fb(drm_device_t *dev, drm_buf_desc_t *request)
+static int drm_addbufs_fb(drm_device_t *dev, drm_buf_desc_t *request)
 {
        drm_device_dma_t *dma = dev->dma;
        drm_buf_entry_t *entry;
index f515567e5b6f3b9545b8023f365c471b55b9db2d..502892794c1676b6fb05fc7dd59381bf06fb8d9a 100644 (file)
@@ -308,7 +308,7 @@ found:
  *
  * Attempt to set drm_device::context_flag.
  */
-int drm_context_switch( drm_device_t *dev, int old, int new )
+static int drm_context_switch( drm_device_t *dev, int old, int new )
 {
         if ( test_and_set_bit( 0, &dev->context_flag ) ) {
                 DRM_ERROR( "Reentering -- FIXME\n" );
index 2fc10c4bbcdfd4c9be3e5a11f822259d5f2aa746..475cc5e555e1c43626ed18be91df2e90babcf5a4 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/err.h>
 
 #include "drm_core.h"
+#include "drmP.h"
 
 struct drm_sysfs_class {
        struct class_device_attribute attr;
index 567b425b784fc1695065fb652d8388d6a56f4f1c..fc7d4a594bca01b78c69552f96353fabd31c76ec 100644 (file)
@@ -417,6 +417,7 @@ int mga_driver_preinit(drm_device_t *dev, unsigned long flags)
        return 0;
 }
 
+#if __OS_HAS_AGP
 /**
  * Bootstrap the driver for AGP DMA.
  * 
@@ -560,6 +561,13 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
        DRM_INFO("Initialized card for AGP DMA.\n");
        return 0;
 }
+#else
+static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
+                                   drm_mga_dma_bootstrap_t * dma_bs)
+{
+       return -EINVAL;
+}
+#endif
 
 /**
  * Bootstrap the driver for PCI DMA.
@@ -697,7 +705,6 @@ static int mga_do_dma_bootstrap(drm_device_t * dev,
         * carve off portions of it for internal uses.  The remaining memory
         * is returned to user-mode to be used for AGP textures.
         */
-
        if (is_agp) {
                err = mga_do_agp_dma_bootstrap(dev, dma_bs);
        }
@@ -932,6 +939,7 @@ static int mga_do_cleanup_dma( drm_device_t *dev )
                        drm_core_ioremapfree(dev->agp_buffer_map, dev);
 
                if (dev_priv->used_new_dma_init) {
+#if __OS_HAS_AGP
                        if (dev_priv->agp_mem != NULL) {
                                dev_priv->agp_textures = NULL;
                                drm_unbind_agp(dev_priv->agp_mem);
@@ -944,7 +952,7 @@ static int mga_do_cleanup_dma( drm_device_t *dev )
                        if ((dev->agp != NULL) && dev->agp->acquired) {
                                err = drm_agp_release(dev);
                        }
-
+#endif
                        dev_priv->used_new_dma_init = 0;
                }
 
@@ -965,7 +973,7 @@ static int mga_do_cleanup_dma( drm_device_t *dev )
                }
        }
 
-       return 0;
+       return err;
 }
 
 int mga_dma_init( DRM_IOCTL_ARGS )
index 6025e1866c7e5e0afeb74dbd74a979b77795da5d..58d3738a2b7fd4eab9d51cd783fba8bf98ceb562 100644 (file)
@@ -6,6 +6,8 @@
        For technical support please email digiLinux@dgii.com or
        call Digi tech support at (612) 912-3456
 
+       ** This driver is no longer supported by Digi **
+
        Much of this design and code came from epca.c which was 
        copyright (C) 1994, 1995 Troy De Jongh, and subsquently 
        modified by David Nugent, Christoph Lameter, Mike McLagan. 
 #include <linux/interrupt.h>
 #include <asm/uaccess.h>
 #include <asm/io.h>
-
-#ifdef CONFIG_PCI
-#define ENABLE_PCI
-#endif /* CONFIG_PCI */
-
-#define putUser(arg1, arg2) put_user(arg1, (unsigned long __user *)arg2)
-#define getUser(arg1, arg2) get_user(arg1, (unsigned __user *)arg2)
-
-#ifdef ENABLE_PCI
+#include <linux/spinlock.h>
 #include <linux/pci.h>
 #include "digiPCI.h"
-#endif /* ENABLE_PCI */
+
 
 #include "digi1.h"
 #include "digiFep1.h"
 #include "epca.h"
 #include "epcaconfig.h"
 
-#if BITS_PER_LONG != 32
-#  error FIXME: this driver only works on 32-bit platforms
-#endif
-
 /* ---------------------- Begin defines ------------------------ */
 
-#define VERSION            "1.3.0.1-LK"
+#define VERSION            "1.3.0.1-LK2.6"
 
 /* This major needs to be submitted to Linux to join the majors list */
 
 
 /* ----------------- Begin global definitions ------------------- */
 
-static char mesg[100];
 static int nbdevs, num_cards, liloconfig;
 static int digi_poller_inhibited = 1 ;
 
 static int setup_error_code;
 static int invalid_lilo_config;
 
+/* The ISA boards do window flipping into the same spaces so its only sane
+   with a single lock. It's still pretty efficient */
+
+static spinlock_t epca_lock = SPIN_LOCK_UNLOCKED;
+
 /* -----------------------------------------------------------------------
        MAXBOARDS is typically 12, but ISA and EISA cards are restricted to 
        7 below.
@@ -129,58 +123,58 @@ static struct timer_list epca_timer;
        configured.
 ----------------------------------------------------------------------- */
        
-static inline void memwinon(struct board_info *b, unsigned int win);
-static inline void memwinoff(struct board_info *b, unsigned int win);
-static inline void globalwinon(struct channel *ch);
-static inline void rxwinon(struct channel *ch);
-static inline void txwinon(struct channel *ch);
-static inline void memoff(struct channel *ch);
-static inline void assertgwinon(struct channel *ch);
-static inline void assertmemoff(struct channel *ch);
+static void memwinon(struct board_info *b, unsigned int win);
+static void memwinoff(struct board_info *b, unsigned int win);
+static void globalwinon(struct channel *ch);
+static void rxwinon(struct channel *ch);
+static void txwinon(struct channel *ch);
+static void memoff(struct channel *ch);
+static void assertgwinon(struct channel *ch);
+static void assertmemoff(struct channel *ch);
 
 /* ---- Begin more 'specific' memory functions for cx_like products --- */
 
-static inline void pcxem_memwinon(struct board_info *b, unsigned int win);
-static inline void pcxem_memwinoff(struct board_info *b, unsigned int win);
-static inline void pcxem_globalwinon(struct channel *ch);
-static inline void pcxem_rxwinon(struct channel *ch);
-static inline void pcxem_txwinon(struct channel *ch);
-static inline void pcxem_memoff(struct channel *ch);
+static void pcxem_memwinon(struct board_info *b, unsigned int win);
+static void pcxem_memwinoff(struct board_info *b, unsigned int win);
+static void pcxem_globalwinon(struct channel *ch);
+static void pcxem_rxwinon(struct channel *ch);
+static void pcxem_txwinon(struct channel *ch);
+static void pcxem_memoff(struct channel *ch);
 
 /* ------ Begin more 'specific' memory functions for the pcxe ------- */
 
-static inline void pcxe_memwinon(struct board_info *b, unsigned int win);
-static inline void pcxe_memwinoff(struct board_info *b, unsigned int win);
-static inline void pcxe_globalwinon(struct channel *ch);
-static inline void pcxe_rxwinon(struct channel *ch);
-static inline void pcxe_txwinon(struct channel *ch);
-static inline void pcxe_memoff(struct channel *ch);
+static void pcxe_memwinon(struct board_info *b, unsigned int win);
+static void pcxe_memwinoff(struct board_info *b, unsigned int win);
+static void pcxe_globalwinon(struct channel *ch);
+static void pcxe_rxwinon(struct channel *ch);
+static void pcxe_txwinon(struct channel *ch);
+static void pcxe_memoff(struct channel *ch);
 
 /* ---- Begin more 'specific' memory functions for the pc64xe and pcxi ---- */
 /* Note : pc64xe and pcxi share the same windowing routines */
 
-static inline void pcxi_memwinon(struct board_info *b, unsigned int win);
-static inline void pcxi_memwinoff(struct board_info *b, unsigned int win);
-static inline void pcxi_globalwinon(struct channel *ch);
-static inline void pcxi_rxwinon(struct channel *ch);
-static inline void pcxi_txwinon(struct channel *ch);
-static inline void pcxi_memoff(struct channel *ch);
+static void pcxi_memwinon(struct board_info *b, unsigned int win);
+static void pcxi_memwinoff(struct board_info *b, unsigned int win);
+static void pcxi_globalwinon(struct channel *ch);
+static void pcxi_rxwinon(struct channel *ch);
+static void pcxi_txwinon(struct channel *ch);
+static void pcxi_memoff(struct channel *ch);
 
 /* - Begin 'specific' do nothing memory functions needed for some cards - */
 
-static inline void dummy_memwinon(struct board_info *b, unsigned int win);
-static inline void dummy_memwinoff(struct board_info *b, unsigned int win);
-static inline void dummy_globalwinon(struct channel *ch);
-static inline void dummy_rxwinon(struct channel *ch);
-static inline void dummy_txwinon(struct channel *ch);
-static inline void dummy_memoff(struct channel *ch);
-static inline void dummy_assertgwinon(struct channel *ch);
-static inline void dummy_assertmemoff(struct channel *ch);
+static void dummy_memwinon(struct board_info *b, unsigned int win);
+static void dummy_memwinoff(struct board_info *b, unsigned int win);
+static void dummy_globalwinon(struct channel *ch);
+static void dummy_rxwinon(struct channel *ch);
+static void dummy_txwinon(struct channel *ch);
+static void dummy_memoff(struct channel *ch);
+static void dummy_assertgwinon(struct channel *ch);
+static void dummy_assertmemoff(struct channel *ch);
 
 /* ------------------- Begin declare functions ----------------------- */
 
-static inline struct channel *verifyChannel(register struct tty_struct *);
-static inline void pc_sched_event(struct channel *, int);
+static struct channel *verifyChannel(struct tty_struct *);
+static void pc_sched_event(struct channel *, int);
 static void epca_error(int, char *);
 static void pc_close(struct tty_struct *, struct file *);
 static void shutdown(struct channel *);
@@ -215,15 +209,11 @@ static void pc_unthrottle(struct tty_struct *tty);
 static void digi_send_break(struct channel *ch, int msec);
 static void setup_empty_event(struct tty_struct *tty, struct channel *ch);
 void epca_setup(char *, int *);
-void console_print(const char *);
 
 static int get_termio(struct tty_struct *, struct termio __user *);
 static int pc_write(struct tty_struct *, const unsigned char *, int);
-int pc_init(void);
-
-#ifdef ENABLE_PCI
+static int pc_init(void);
 static int init_PCI(void);
-#endif /* ENABLE_PCI */
 
 
 /* ------------------------------------------------------------------
@@ -237,41 +227,41 @@ static int init_PCI(void);
        making direct calls deserves what they get.
 -------------------------------------------------------------------- */
 
-static inline void memwinon(struct board_info *b, unsigned int win)
+static void memwinon(struct board_info *b, unsigned int win)
 {
        (b->memwinon)(b, win);
 }
 
-static inline void memwinoff(struct board_info *b, unsigned int win)
+static void memwinoff(struct board_info *b, unsigned int win)
 {
        (b->memwinoff)(b, win);
 }
 
-static inline void globalwinon(struct channel *ch)
+static void globalwinon(struct channel *ch)
 {
        (ch->board->globalwinon)(ch);
 }
 
-static inline void rxwinon(struct channel *ch)
+static void rxwinon(struct channel *ch)
 {
        (ch->board->rxwinon)(ch);
 }
 
-static inline void txwinon(struct channel *ch)
+static void txwinon(struct channel *ch)
 {
        (ch->board->txwinon)(ch);
 }
 
-static inline void memoff(struct channel *ch)
+static void memoff(struct channel *ch)
 {
        (ch->board->memoff)(ch);
 }
-static inline void assertgwinon(struct channel *ch)
+static void assertgwinon(struct channel *ch)
 {
        (ch->board->assertgwinon)(ch);
 }
 
-static inline void assertmemoff(struct channel *ch)
+static void assertmemoff(struct channel *ch)
 {
        (ch->board->assertmemoff)(ch);
 }
@@ -281,66 +271,66 @@ static inline void assertmemoff(struct channel *ch)
        and CX series cards.
 ------------------------------------------------------------ */
 
-static inline void pcxem_memwinon(struct board_info *b, unsigned int win)
+static void pcxem_memwinon(struct board_info *b, unsigned int win)
 {
-        outb_p(FEPWIN|win, (int)b->port + 1);
+        outb_p(FEPWIN|win, b->port + 1);
 }
 
-static inline void pcxem_memwinoff(struct board_info *b, unsigned int win)
+static void pcxem_memwinoff(struct board_info *b, unsigned int win)
 {
-       outb_p(0, (int)b->port + 1);
+       outb_p(0, b->port + 1);
 }
 
-static inline void pcxem_globalwinon(struct channel *ch)
+static void pcxem_globalwinon(struct channel *ch)
 {
        outb_p( FEPWIN, (int)ch->board->port + 1);
 }
 
-static inline void pcxem_rxwinon(struct channel *ch)
+static void pcxem_rxwinon(struct channel *ch)
 {
        outb_p(ch->rxwin, (int)ch->board->port + 1);
 }
 
-static inline void pcxem_txwinon(struct channel *ch)
+static void pcxem_txwinon(struct channel *ch)
 {
        outb_p(ch->txwin, (int)ch->board->port + 1);
 }
 
-static inline void pcxem_memoff(struct channel *ch)
+static void pcxem_memoff(struct channel *ch)
 {
        outb_p(0, (int)ch->board->port + 1);
 }
 
 /* ----------------- Begin pcxe memory window stuff ------------------ */
 
-static inline void pcxe_memwinon(struct board_info *b, unsigned int win)
+static void pcxe_memwinon(struct board_info *b, unsigned int win)
 {
-               outb_p(FEPWIN | win, (int)b->port + 1);
+               outb_p(FEPWIN | win, b->port + 1);
 }
 
-static inline void pcxe_memwinoff(struct board_info *b, unsigned int win)
+static void pcxe_memwinoff(struct board_info *b, unsigned int win)
 {
-       outb_p(inb((int)b->port) & ~FEPMEM,
-                  (int)b->port + 1);
-       outb_p(0, (int)b->port + 1);
+       outb_p(inb(b->port) & ~FEPMEM,
+                  b->port + 1);
+       outb_p(0, b->port + 1);
 }
 
-static inline void pcxe_globalwinon(struct channel *ch)
+static void pcxe_globalwinon(struct channel *ch)
 {
        outb_p( FEPWIN, (int)ch->board->port + 1);
 }
 
-static inline void pcxe_rxwinon(struct channel *ch)
+static void pcxe_rxwinon(struct channel *ch)
 {
                outb_p(ch->rxwin, (int)ch->board->port + 1);
 }
 
-static inline void pcxe_txwinon(struct channel *ch)
+static void pcxe_txwinon(struct channel *ch)
 {
                outb_p(ch->txwin, (int)ch->board->port + 1);
 }
 
-static inline void pcxe_memoff(struct channel *ch)
+static void pcxe_memoff(struct channel *ch)
 {
        outb_p(0, (int)ch->board->port);
        outb_p(0, (int)ch->board->port + 1);
@@ -348,44 +338,44 @@ static inline void pcxe_memoff(struct channel *ch)
 
 /* ------------- Begin pc64xe and pcxi memory window stuff -------------- */
 
-static inline void pcxi_memwinon(struct board_info *b, unsigned int win)
+static void pcxi_memwinon(struct board_info *b, unsigned int win)
 {
-               outb_p(inb((int)b->port) | FEPMEM, (int)b->port);
+               outb_p(inb(b->port) | FEPMEM, b->port);
 }
 
-static inline void pcxi_memwinoff(struct board_info *b, unsigned int win)
+static void pcxi_memwinoff(struct board_info *b, unsigned int win)
 {
-       outb_p(inb((int)b->port) & ~FEPMEM, (int)b->port);
+       outb_p(inb(b->port) & ~FEPMEM, b->port);
 }
 
-static inline void pcxi_globalwinon(struct channel *ch)
+static void pcxi_globalwinon(struct channel *ch)
 {
-       outb_p(FEPMEM, (int)ch->board->port);
+       outb_p(FEPMEM, ch->board->port);
 }
 
-static inline void pcxi_rxwinon(struct channel *ch)
+static void pcxi_rxwinon(struct channel *ch)
 {
-               outb_p(FEPMEM, (int)ch->board->port);
+               outb_p(FEPMEM, ch->board->port);
 }
 
-static inline void pcxi_txwinon(struct channel *ch)
+static void pcxi_txwinon(struct channel *ch)
 {
-               outb_p(FEPMEM, (int)ch->board->port);
+               outb_p(FEPMEM, ch->board->port);
 }
 
-static inline void pcxi_memoff(struct channel *ch)
+static void pcxi_memoff(struct channel *ch)
 {
-       outb_p(0, (int)ch->board->port);
+       outb_p(0, ch->board->port);
 }
 
-static inline void pcxi_assertgwinon(struct channel *ch)
+static void pcxi_assertgwinon(struct channel *ch)
 {
-       epcaassert(inb((int)ch->board->port) & FEPMEM, "Global memory off");
+       epcaassert(inb(ch->board->port) & FEPMEM, "Global memory off");
 }
 
-static inline void pcxi_assertmemoff(struct channel *ch)
+static void pcxi_assertmemoff(struct channel *ch)
 {
-       epcaassert(!(inb((int)ch->board->port) & FEPMEM), "Memory on");
+       epcaassert(!(inb(ch->board->port) & FEPMEM), "Memory on");
 }
 
 
@@ -398,185 +388,143 @@ static inline void pcxi_assertmemoff(struct channel *ch)
        may or may not do anything.
 ---------------------------------------------------------------------------*/
 
-static inline void dummy_memwinon(struct board_info *b, unsigned int win)
+static void dummy_memwinon(struct board_info *b, unsigned int win)
 {
 }
 
-static inline void dummy_memwinoff(struct board_info *b, unsigned int win)
+static void dummy_memwinoff(struct board_info *b, unsigned int win)
 {
 }
 
-static inline void dummy_globalwinon(struct channel *ch)
+static void dummy_globalwinon(struct channel *ch)
 {
 }
 
-static inline void dummy_rxwinon(struct channel *ch)
+static void dummy_rxwinon(struct channel *ch)
 {
 }
 
-static inline void dummy_txwinon(struct channel *ch)
+static void dummy_txwinon(struct channel *ch)
 {
 }
 
-static inline void dummy_memoff(struct channel *ch)
+static void dummy_memoff(struct channel *ch)
 {
 }
 
-static inline void dummy_assertgwinon(struct channel *ch)
+static void dummy_assertgwinon(struct channel *ch)
 {
 }
 
-static inline void dummy_assertmemoff(struct channel *ch)
+static void dummy_assertmemoff(struct channel *ch)
 {
 }
 
 /* ----------------- Begin verifyChannel function ----------------------- */
-static inline struct channel *verifyChannel(register struct tty_struct *tty)
+static struct channel *verifyChannel(struct tty_struct *tty)
 { /* Begin verifyChannel */
-
        /* --------------------------------------------------------------------
                This routine basically provides a sanity check.  It insures that
                the channel returned is within the proper range of addresses as
                well as properly initialized.  If some bogus info gets passed in
                through tty->driver_data this should catch it.
-       --------------------------------------------------------------------- */
-
-       if (tty) 
-       { /* Begin if tty */
-
-               register struct channel *ch = (struct channel *)tty->driver_data;
-
-               if ((ch >= &digi_channels[0]) && (ch < &digi_channels[nbdevs])) 
-               {
+               --------------------------------------------------------------------- */
+       if (tty) {
+               struct channel *ch = (struct channel *)tty->driver_data;
+               if ((ch >= &digi_channels[0]) && (ch < &digi_channels[nbdevs])) {
                        if (ch->magic == EPCA_MAGIC)
                                return ch;
                }
-
-       } /* End if tty */
-
-       /* Else return a NULL for invalid */
+       }
        return NULL;
 
 } /* End verifyChannel */
 
 /* ------------------ Begin pc_sched_event ------------------------- */
 
-static inline void pc_sched_event(struct channel *ch, int event)
-{ /* Begin pc_sched_event */
-
-
+static void pc_sched_event(struct channel *ch, int event)
+{
        /* ----------------------------------------------------------------------
                We call this to schedule interrupt processing on some event.  The 
                kernel sees our request and calls the related routine in OUR driver.
        -------------------------------------------------------------------------*/
-
        ch->event |= 1 << event;
        schedule_work(&ch->tqueue);
-
-
 } /* End pc_sched_event */
 
 /* ------------------ Begin epca_error ------------------------- */
 
 static void epca_error(int line, char *msg)
-{ /* Begin epca_error */
-
+{
        printk(KERN_ERR "epca_error (Digi): line = %d %s\n",line,msg);
-       return;
-
-} /* End epca_error */
+}
 
 /* ------------------ Begin pc_close ------------------------- */
 static void pc_close(struct tty_struct * tty, struct file * filp)
-{ /* Begin pc_close */
-
+{
        struct channel *ch;
        unsigned long flags;
-
        /* ---------------------------------------------------------
                verifyChannel returns the channel from the tty struct
                if it is valid.  This serves as a sanity check.
        ------------------------------------------------------------- */
-
-       if ((ch = verifyChannel(tty)) != NULL) 
-       { /* Begin if ch != NULL */
-
-               save_flags(flags);
-               cli();
-
-               if (tty_hung_up_p(filp)) 
-               {
-                       restore_flags(flags);
+       if ((ch = verifyChannel(tty)) != NULL)  { /* Begin if ch != NULL */
+               spin_lock_irqsave(&epca_lock, flags);
+               if (tty_hung_up_p(filp)) {
+                       spin_unlock_irqrestore(&epca_lock, flags);
                        return;
                }
-
                /* Check to see if the channel is open more than once */
-               if (ch->count-- > 1) 
-               { /* Begin channel is open more than once */
-
+               if (ch->count-- > 1)  {
+                       /* Begin channel is open more than once */
                        /* -------------------------------------------------------------
                                Return without doing anything.  Someone might still be using
                                the channel.
                        ---------------------------------------------------------------- */
-
-                       restore_flags(flags);
+                       spin_unlock_irqrestore(&epca_lock, flags);
                        return;
                } /* End channel is open more than once */
 
                /* Port open only once go ahead with shutdown & reset */
-
-               if (ch->count < 0) 
-               {
-                       ch->count = 0;
-               }
+               if (ch->count < 0)
+                       BUG();
 
                /* ---------------------------------------------------------------
                        Let the rest of the driver know the channel is being closed.
                        This becomes important if an open is attempted before close 
                        is finished.
                ------------------------------------------------------------------ */
-
                ch->asyncflags |= ASYNC_CLOSING;
-       
                tty->closing = 1;
 
-               if (ch->asyncflags & ASYNC_INITIALIZED) 
-               {
+               spin_unlock_irqrestore(&epca_lock, flags);
+
+               if (ch->asyncflags & ASYNC_INITIALIZED)  {
                        /* Setup an event to indicate when the transmit buffer empties */
                        setup_empty_event(tty, ch);             
                        tty_wait_until_sent(tty, 3000); /* 30 seconds timeout */
                }
-       
                if (tty->driver->flush_buffer)
                        tty->driver->flush_buffer(tty);
 
                tty_ldisc_flush(tty);
                shutdown(ch);
+
+               spin_lock_irqsave(&epca_lock, flags);
                tty->closing = 0;
                ch->event = 0;
                ch->tty = NULL;
+               spin_unlock_irqrestore(&epca_lock, flags);
 
-               if (ch->blocked_open) 
-               { /* Begin if blocked_open */
-
+               if (ch->blocked_open)  { /* Begin if blocked_open */
                        if (ch->close_delay) 
-                       {
                                msleep_interruptible(jiffies_to_msecs(ch->close_delay));
-                       }
-
                        wake_up_interruptible(&ch->open_wait);
-
                } /* End if blocked_open */
-
                ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_INITIALIZED | 
                                      ASYNC_CLOSING);
                wake_up_interruptible(&ch->close_wait);
-
-
-               restore_flags(flags);
-
        } /* End if ch != NULL */
-
 } /* End pc_close */ 
 
 /* ------------------ Begin shutdown  ------------------------- */
@@ -586,15 +534,14 @@ static void shutdown(struct channel *ch)
 
        unsigned long flags;
        struct tty_struct *tty;
-       volatile struct board_chan *bc;
+       struct board_chan *bc;
 
        if (!(ch->asyncflags & ASYNC_INITIALIZED)) 
                return;
 
-       save_flags(flags);
-       cli();
-       globalwinon(ch);
+       spin_lock_irqsave(&epca_lock, flags);
 
+       globalwinon(ch);
        bc = ch->brdchan;
 
        /* ------------------------------------------------------------------
@@ -604,20 +551,17 @@ static void shutdown(struct channel *ch)
        --------------------------------------------------------------------- */ 
 
        if (bc)
-               bc->idata = 0;
-
+               writeb(0, &bc->idata);
        tty = ch->tty;
 
        /* ----------------------------------------------------------------
           If we're a modem control device and HUPCL is on, drop RTS & DTR.
        ------------------------------------------------------------------ */
 
-       if (tty->termios->c_cflag & HUPCL) 
-       {
+       if (tty->termios->c_cflag & HUPCL)  {
                ch->omodem &= ~(ch->m_rts | ch->m_dtr);
                fepcmd(ch, SETMODEM, 0, ch->m_dtr | ch->m_rts, 10, 1);
        }
-
        memoff(ch);
 
        /* ------------------------------------------------------------------
@@ -628,7 +572,7 @@ static void shutdown(struct channel *ch)
        /* Prevent future Digi programmed interrupts from coming active */
 
        ch->asyncflags &= ~ASYNC_INITIALIZED;
-       restore_flags(flags);
+       spin_unlock_irqrestore(&epca_lock, flags);
 
 } /* End shutdown */
 
@@ -636,7 +580,6 @@ static void shutdown(struct channel *ch)
 
 static void pc_hangup(struct tty_struct *tty)
 { /* Begin pc_hangup */
-
        struct channel *ch;
        
        /* ---------------------------------------------------------
@@ -644,25 +587,21 @@ static void pc_hangup(struct tty_struct *tty)
                if it is valid.  This serves as a sanity check.
        ------------------------------------------------------------- */
 
-       if ((ch = verifyChannel(tty)) != NULL) 
-       { /* Begin if ch != NULL */
-
+       if ((ch = verifyChannel(tty)) != NULL)  { /* Begin if ch != NULL */
                unsigned long flags;
 
-               save_flags(flags);
-               cli();
                if (tty->driver->flush_buffer)
                        tty->driver->flush_buffer(tty);
                tty_ldisc_flush(tty);
                shutdown(ch);
 
+               spin_lock_irqsave(&epca_lock, flags);
                ch->tty   = NULL;
                ch->event = 0;
                ch->count = 0;
-               restore_flags(flags);
                ch->asyncflags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_INITIALIZED);
+               spin_unlock_irqrestore(&epca_lock, flags);
                wake_up_interruptible(&ch->open_wait);
-
        } /* End if ch != NULL */
 
 } /* End pc_hangup */
@@ -672,18 +611,14 @@ static void pc_hangup(struct tty_struct *tty)
 static int pc_write(struct tty_struct * tty,
                     const unsigned char *buf, int bytesAvailable)
 { /* Begin pc_write */
-
-       register unsigned int head, tail;
-       register int dataLen;
-       register int size;
-       register int amountCopied;
-
-
+       unsigned int head, tail;
+       int dataLen;
+       int size;
+       int amountCopied;
        struct channel *ch;
        unsigned long flags;
        int remain;
-       volatile struct board_chan *bc;
-
+       struct board_chan *bc;
 
        /* ----------------------------------------------------------------
                pc_write is primarily called directly by the kernel routine
@@ -706,24 +641,20 @@ static int pc_write(struct tty_struct * tty,
 
        bc   = ch->brdchan;
        size = ch->txbufsize;
-
        amountCopied = 0;
-       save_flags(flags);
-       cli();
 
+       spin_lock_irqsave(&epca_lock, flags);
        globalwinon(ch);
 
-       head = bc->tin & (size - 1);
-       tail = bc->tout;
+       head = readw(&bc->tin) & (size - 1);
+       tail = readw(&bc->tout);
 
-       if (tail != bc->tout)
-               tail = bc->tout;
+       if (tail != readw(&bc->tout))
+               tail = readw(&bc->tout);
        tail &= (size - 1);
 
        /*      If head >= tail, head has not wrapped around. */ 
-       if (head >= tail) 
-       { /* Begin head has not wrapped */
-
+       if (head >= tail)  { /* Begin head has not wrapped */
                /* ---------------------------------------------------------------
                        remain (much like dataLen above) represents the total amount of
                        space available on the card for data.  Here dataLen represents
@@ -731,26 +662,19 @@ static int pc_write(struct tty_struct * tty,
                        buffer.  This is important because a memcpy cannot be told to
                        automatically wrap around when it hits the buffer end.
                ------------------------------------------------------------------ */ 
-
                dataLen = size - head;
                remain = size - (head - tail) - 1;
-
-       } /* End head has not wrapped */
-       else 
-       { /* Begin head has wrapped around */
+       } else { /* Begin head has wrapped around */
 
                remain = tail - head - 1;
                dataLen = remain;
 
        } /* End head has wrapped around */
-
        /* -------------------------------------------------------------------
                        Check the space on the card.  If we have more data than 
                        space; reduce the amount of data to fit the space.
        ---------------------------------------------------------------------- */
-
        bytesAvailable = min(remain, bytesAvailable);
-
        txwinon(ch);
        while (bytesAvailable > 0) 
        { /* Begin while there is data to copy onto card */
@@ -767,26 +691,21 @@ static int pc_write(struct tty_struct * tty,
                amountCopied += dataLen;
                bytesAvailable -= dataLen;
 
-               if (head >= size) 
-               {
+               if (head >= size) {
                        head = 0;
                        dataLen = tail;
                }
-
        } /* End while there is data to copy onto card */
-
        ch->statusflags |= TXBUSY;
        globalwinon(ch);
-       bc->tin = head;
+       writew(head, &bc->tin);
 
-       if ((ch->statusflags & LOWWAIT) == 0) 
-       {
+       if ((ch->statusflags & LOWWAIT) == 0)  {
                ch->statusflags |= LOWWAIT;
-               bc->ilow = 1;
+               writeb(1, &bc->ilow);
        }
        memoff(ch);
-       restore_flags(flags);
-
+       spin_unlock_irqrestore(&epca_lock, flags);
        return(amountCopied);
 
 } /* End pc_write */
@@ -795,11 +714,7 @@ static int pc_write(struct tty_struct * tty,
 
 static void pc_put_char(struct tty_struct *tty, unsigned char c)
 { /* Begin pc_put_char */
-
-   
        pc_write(tty, &c, 1);
-       return;
-
 } /* End pc_put_char */
 
 /* ------------------ Begin pc_write_room  ------------------------- */
@@ -811,7 +726,7 @@ static int pc_write_room(struct tty_struct *tty)
        struct channel *ch;
        unsigned long flags;
        unsigned int head, tail;
-       volatile struct board_chan *bc;
+       struct board_chan *bc;
 
        remain = 0;
 
@@ -820,33 +735,29 @@ static int pc_write_room(struct tty_struct *tty)
                if it is valid.  This serves as a sanity check.
        ------------------------------------------------------------- */
 
-       if ((ch = verifyChannel(tty)) != NULL) 
-       {
-               save_flags(flags);
-               cli();
+       if ((ch = verifyChannel(tty)) != NULL)  {
+               spin_lock_irqsave(&epca_lock, flags);
                globalwinon(ch);
 
                bc   = ch->brdchan;
-               head = bc->tin & (ch->txbufsize - 1);
-               tail = bc->tout;
+               head = readw(&bc->tin) & (ch->txbufsize - 1);
+               tail = readw(&bc->tout);
 
-               if (tail != bc->tout)
-                       tail = bc->tout;
+               if (tail != readw(&bc->tout))
+                       tail = readw(&bc->tout);
                /* Wrap tail if necessary */
                tail &= (ch->txbufsize - 1);
 
                if ((remain = tail - head - 1) < 0 )
                        remain += ch->txbufsize;
 
-               if (remain && (ch->statusflags & LOWWAIT) == 0) 
-               {
+               if (remain && (ch->statusflags & LOWWAIT) == 0) {
                        ch->statusflags |= LOWWAIT;
-                       bc->ilow = 1;
+                       writeb(1, &bc->ilow);
                }
                memoff(ch);
-               restore_flags(flags);
+               spin_unlock_irqrestore(&epca_lock, flags);
        }
-
        /* Return how much room is left on card */
        return remain;
 
@@ -862,8 +773,7 @@ static int pc_chars_in_buffer(struct tty_struct *tty)
        int remain;
        unsigned long flags;
        struct channel *ch;
-       volatile struct board_chan *bc;
-
+       struct board_chan *bc;
 
        /* ---------------------------------------------------------
                verifyChannel returns the channel from the tty struct
@@ -873,34 +783,27 @@ static int pc_chars_in_buffer(struct tty_struct *tty)
        if ((ch = verifyChannel(tty)) == NULL)
                return(0);
 
-       save_flags(flags);
-       cli();
+       spin_lock_irqsave(&epca_lock, flags);
        globalwinon(ch);
 
        bc = ch->brdchan;
-       tail = bc->tout;
-       head = bc->tin;
-       ctail = ch->mailbox->cout;
+       tail = readw(&bc->tout);
+       head = readw(&bc->tin);
+       ctail = readw(&ch->mailbox->cout);
 
-       if (tail == head && ch->mailbox->cin == ctail && bc->tbusy == 0)
+       if (tail == head && readw(&ch->mailbox->cin) == ctail && readb(&bc->tbusy) == 0)
                chars = 0;
-       else 
-       { /* Begin if some space on the card has been used */
-
-               head = bc->tin & (ch->txbufsize - 1);
+       else  { /* Begin if some space on the card has been used */
+               head = readw(&bc->tin) & (ch->txbufsize - 1);
                tail &= (ch->txbufsize - 1);
-
                /*  --------------------------------------------------------------
                        The logic here is basically opposite of the above pc_write_room
                        here we are finding the amount of bytes in the buffer filled.
                        Not the amount of bytes empty.
                ------------------------------------------------------------------- */
-
                if ((remain = tail - head - 1) < 0 )
                        remain += ch->txbufsize;
-
                chars = (int)(ch->txbufsize - remain);
-
                /* -------------------------------------------------------------  
                        Make it possible to wakeup anything waiting for output
                        in tty_ioctl.c, etc.
@@ -908,15 +811,12 @@ static int pc_chars_in_buffer(struct tty_struct *tty)
                        If not already set.  Setup an event to indicate when the
                        transmit buffer empties 
                ----------------------------------------------------------------- */
-
                if (!(ch->statusflags & EMPTYWAIT))
                        setup_empty_event(tty,ch);
 
        } /* End if some space on the card has been used */
-
        memoff(ch);
-       restore_flags(flags);
-
+       spin_unlock_irqrestore(&epca_lock, flags);
        /* Return number of characters residing on card. */
        return(chars);
 
@@ -930,67 +830,46 @@ static void pc_flush_buffer(struct tty_struct *tty)
        unsigned int tail;
        unsigned long flags;
        struct channel *ch;
-       volatile struct board_chan *bc;
-
-
+       struct board_chan *bc;
        /* ---------------------------------------------------------
                verifyChannel returns the channel from the tty struct
                if it is valid.  This serves as a sanity check.
        ------------------------------------------------------------- */
-
        if ((ch = verifyChannel(tty)) == NULL)
                return;
 
-       save_flags(flags);
-       cli();
-
+       spin_lock_irqsave(&epca_lock, flags);
        globalwinon(ch);
-
        bc   = ch->brdchan;
-       tail = bc->tout;
-
+       tail = readw(&bc->tout);
        /* Have FEP move tout pointer; effectively flushing transmit buffer */
-
        fepcmd(ch, STOUT, (unsigned) tail, 0, 0, 0);
-
        memoff(ch);
-       restore_flags(flags);
-
+       spin_unlock_irqrestore(&epca_lock, flags);
        wake_up_interruptible(&tty->write_wait);
        tty_wakeup(tty);
-
 } /* End pc_flush_buffer */
 
 /* ------------------ Begin pc_flush_chars  ---------------------- */
 
 static void pc_flush_chars(struct tty_struct *tty)
 { /* Begin pc_flush_chars */
-
        struct channel * ch;
-
        /* ---------------------------------------------------------
                verifyChannel returns the channel from the tty struct
                if it is valid.  This serves as a sanity check.
        ------------------------------------------------------------- */
-
-       if ((ch = verifyChannel(tty)) != NULL) 
-       {
+       if ((ch = verifyChannel(tty)) != NULL) {
                unsigned long flags;
-
-               save_flags(flags);
-               cli();
-
+               spin_lock_irqsave(&epca_lock, flags);
                /* ----------------------------------------------------------------
                        If not already set and the transmitter is busy setup an event
                        to indicate when the transmit empties.
                ------------------------------------------------------------------- */
-
                if ((ch->statusflags & TXBUSY) && !(ch->statusflags & EMPTYWAIT))
                        setup_empty_event(tty,ch);
-
-               restore_flags(flags);
+               spin_unlock_irqrestore(&epca_lock, flags);
        }
-
 } /* End pc_flush_chars */
 
 /* ------------------ Begin block_til_ready  ---------------------- */
@@ -998,14 +877,11 @@ static void pc_flush_chars(struct tty_struct *tty)
 static int block_til_ready(struct tty_struct *tty, 
                            struct file *filp, struct channel *ch)
 { /* Begin block_til_ready */
-
        DECLARE_WAITQUEUE(wait,current);
        int     retval, do_clocal = 0;
        unsigned long flags;
 
-
-       if (tty_hung_up_p(filp))
-       {
+       if (tty_hung_up_p(filp)) {
                if (ch->asyncflags & ASYNC_HUP_NOTIFY)
                        retval = -EAGAIN;
                else
@@ -1017,8 +893,7 @@ static int block_til_ready(struct tty_struct *tty,
                If the device is in the middle of being closed, then block
                until it's done, and then try again.
        -------------------------------------------------------------------- */
-       if (ch->asyncflags & ASYNC_CLOSING) 
-       {
+       if (ch->asyncflags & ASYNC_CLOSING) {
                interruptible_sleep_on(&ch->close_wait);
 
                if (ch->asyncflags & ASYNC_HUP_NOTIFY)
@@ -1027,43 +902,29 @@ static int block_til_ready(struct tty_struct *tty,
                        return -ERESTARTSYS;
        }
 
-       if (filp->f_flags & O_NONBLOCK) 
-       {
+       if (filp->f_flags & O_NONBLOCK)  {
                /* ----------------------------------------------------------------- 
                 If non-blocking mode is set, then make the check up front
                 and then exit.
                -------------------------------------------------------------------- */
-
                ch->asyncflags |= ASYNC_NORMAL_ACTIVE;
-
                return 0;
        }
-
-
        if (tty->termios->c_cflag & CLOCAL)
                do_clocal = 1;
-       
-   /* Block waiting for the carrier detect and the line to become free */
+       /* Block waiting for the carrier detect and the line to become free */
        
        retval = 0;
        add_wait_queue(&ch->open_wait, &wait);
-       save_flags(flags);
-       cli();
-
 
+       spin_lock_irqsave(&epca_lock, flags);
        /* We dec count so that pc_close will know when to free things */
        if (!tty_hung_up_p(filp))
                ch->count--;
-
-       restore_flags(flags);
-
        ch->blocked_open++;
-
        while(1) 
        { /* Begin forever while  */
-
                set_current_state(TASK_INTERRUPTIBLE);
-
                if (tty_hung_up_p(filp) ||
                    !(ch->asyncflags & ASYNC_INITIALIZED)) 
                {
@@ -1073,17 +934,14 @@ static int block_til_ready(struct tty_struct *tty,
                                retval = -ERESTARTSYS;  
                        break;
                }
-
                if (!(ch->asyncflags & ASYNC_CLOSING) && 
                          (do_clocal || (ch->imodem & ch->dcd)))
                        break;
-
-               if (signal_pending(current)) 
-               {
+               if (signal_pending(current)) {
                        retval = -ERESTARTSYS;
                        break;
                }
-
+               spin_unlock_irqrestore(&epca_lock, flags);
                /* ---------------------------------------------------------------
                        Allow someone else to be scheduled.  We will occasionally go
                        through this loop until one of the above conditions change.
@@ -1091,25 +949,23 @@ static int block_til_ready(struct tty_struct *tty,
                        prevent this loop from hogging the cpu.
                ------------------------------------------------------------------ */
                schedule();
+               spin_lock_irqsave(&epca_lock, flags);
 
        } /* End forever while  */
 
        current->state = TASK_RUNNING;
        remove_wait_queue(&ch->open_wait, &wait);
-       cli();
        if (!tty_hung_up_p(filp))
                ch->count++;
-       restore_flags(flags);
-
        ch->blocked_open--;
 
+       spin_unlock_irqrestore(&epca_lock, flags);
+
        if (retval)
                return retval;
 
        ch->asyncflags |= ASYNC_NORMAL_ACTIVE;
-
        return 0;
-
 } /* End block_til_ready */    
 
 /* ------------------ Begin pc_open  ---------------------- */
@@ -1120,17 +976,12 @@ static int pc_open(struct tty_struct *tty, struct file * filp)
        struct channel *ch;
        unsigned long flags;
        int line, retval, boardnum;
-       volatile struct board_chan *bc;
-       volatile unsigned int head;
+       struct board_chan *bc;
+       unsigned int head;
 
        line = tty->index;
-       if (line < 0 || line >= nbdevs) 
-       {
-               printk(KERN_ERR "<Error> - pc_open : line out of range in pc_open\n");
-               tty->driver_data = NULL;
-               return(-ENODEV);
-       }
-
+       if (line < 0 || line >= nbdevs)
+               return -ENODEV;
 
        ch = &digi_channels[line];
        boardnum = ch->boardnum;
@@ -1143,66 +994,49 @@ static int pc_open(struct tty_struct *tty, struct file * filp)
                goes here.
        ---------------------------------------------------------------------- */
 
-       if (invalid_lilo_config)
-       {
+       if (invalid_lilo_config) {
                if (setup_error_code & INVALID_BOARD_TYPE)
-                       printk(KERN_ERR "<Error> - pc_open: Invalid board type specified in LILO command\n");
-
+                       printk(KERN_ERR "epca: pc_open: Invalid board type specified in kernel options.\n");
                if (setup_error_code & INVALID_NUM_PORTS)
-                       printk(KERN_ERR "<Error> - pc_open: Invalid number of ports specified in LILO command\n");
-
+                       printk(KERN_ERR "epca: pc_open: Invalid number of ports specified in kernel options.\n");
                if (setup_error_code & INVALID_MEM_BASE)
-                       printk(KERN_ERR "<Error> - pc_open: Invalid board memory address specified in LILO command\n");
-
+                       printk(KERN_ERR "epca: pc_open: Invalid board memory address specified in kernel options.\n");
                if (setup_error_code & INVALID_PORT_BASE)
-                       printk(KERN_ERR "<Error> - pc_open: Invalid board port address specified in LILO command\n");
-
+                       printk(KERN_ERR "epca; pc_open: Invalid board port address specified in kernel options.\n");
                if (setup_error_code & INVALID_BOARD_STATUS)
-                       printk(KERN_ERR "<Error> - pc_open: Invalid board status specified in LILO command\n");
-
+                       printk(KERN_ERR "epca: pc_open: Invalid board status specified in kernel options.\n");
                if (setup_error_code & INVALID_ALTPIN)
-                       printk(KERN_ERR "<Error> - pc_open: Invalid board altpin specified in LILO command\n");
-
+                       printk(KERN_ERR "epca: pc_open: Invalid board altpin specified in kernel options;\n");
                tty->driver_data = NULL;   /* Mark this device as 'down' */
-               return(-ENODEV);
+               return -ENODEV;
        }
-
-       if ((boardnum >= num_cards) || (boards[boardnum].status == DISABLED)) 
-       {
+       if (boardnum >= num_cards || boards[boardnum].status == DISABLED)  {
                tty->driver_data = NULL;   /* Mark this device as 'down' */
                return(-ENODEV);
        }
        
-       if (( bc = ch->brdchan) == 0) 
-       {
+       if ((bc = ch->brdchan) == 0) {
                tty->driver_data = NULL;
-               return(-ENODEV);
+               return -ENODEV;
        }
 
+       spin_lock_irqsave(&epca_lock, flags);
        /* ------------------------------------------------------------------
                Every time a channel is opened, increment a counter.  This is 
                necessary because we do not wish to flush and shutdown the channel
                until the last app holding the channel open, closes it.         
        --------------------------------------------------------------------- */
-
        ch->count++;
-
        /* ----------------------------------------------------------------
                Set a kernel structures pointer to our local channel 
                structure.  This way we can get to it when passed only
                a tty struct.
        ------------------------------------------------------------------ */
-
        tty->driver_data = ch;
-       
        /* ----------------------------------------------------------------
                If this is the first time the channel has been opened, initialize
                the tty->termios struct otherwise let pc_close handle it.
        -------------------------------------------------------------------- */
-
-       save_flags(flags);
-       cli();
-
        globalwinon(ch);
        ch->statusflags = 0;
 
@@ -1213,8 +1047,8 @@ static int pc_open(struct tty_struct *tty, struct file * filp)
           Set receive head and tail ptrs to each other.  This indicates
           no data available to read.
        ----------------------------------------------------------------- */
-       head = bc->rin;
-       bc->rout = head;
+       head = readw(&bc->rin);
+       writew(head, &bc->rout);
 
        /* Set the channels associated tty structure */
        ch->tty = tty;
@@ -1224,122 +1058,74 @@ static int pc_open(struct tty_struct *tty, struct file * filp)
                issues, etc.... It effect both control flags and input flags.
        -------------------------------------------------------------------- */
        epcaparam(tty,ch);
-
        ch->asyncflags |= ASYNC_INITIALIZED;
        memoff(ch);
-
-       restore_flags(flags);
+       spin_unlock_irqrestore(&epca_lock, flags);
 
        retval = block_til_ready(tty, filp, ch);
        if (retval)
-       {
                return retval;
-       }
-
        /* -------------------------------------------------------------
                Set this again in case a hangup set it to zero while this 
                open() was waiting for the line...
        --------------------------------------------------------------- */
+       spin_lock_irqsave(&epca_lock, flags);
        ch->tty = tty;
-
-       save_flags(flags);
-       cli();
        globalwinon(ch);
-
        /* Enable Digi Data events */
-       bc->idata = 1;
-
+       writeb(1, &bc->idata);
        memoff(ch);
-       restore_flags(flags);
-
+       spin_unlock_irqrestore(&epca_lock, flags);
        return 0;
-
 } /* End pc_open */
 
-#ifdef MODULE
 static int __init epca_module_init(void)
 { /* Begin init_module */
-
-       unsigned long   flags;
-
-       save_flags(flags);
-       cli();
-
-       pc_init();
-
-       restore_flags(flags);
-
-       return(0);
+       return pc_init();
 }
 
 module_init(epca_module_init);
-#endif
 
-#ifdef ENABLE_PCI
 static struct pci_driver epca_driver;
-#endif
-
-#ifdef MODULE
-/* -------------------- Begin cleanup_module  ---------------------- */
 
 static void __exit epca_module_exit(void)
 {
-
        int               count, crd;
        struct board_info *bd;
        struct channel    *ch;
-       unsigned long     flags;
 
        del_timer_sync(&epca_timer);
 
-       save_flags(flags);
-       cli();
-
        if ((tty_unregister_driver(pc_driver)) ||  
            (tty_unregister_driver(pc_info)))
        {
-               printk(KERN_WARNING "<Error> - DIGI : cleanup_module failed to un-register tty driver\n");
-               restore_flags(flags);
+               printk(KERN_WARNING "epca: cleanup_module failed to un-register tty driver\n");
                return;
        }
        put_tty_driver(pc_driver);
        put_tty_driver(pc_info);
 
-       for (crd = 0; crd < num_cards; crd++) 
-       { /* Begin for each card */
-
+       for (crd = 0; crd < num_cards; crd++)  { /* Begin for each card */
                bd = &boards[crd];
-
                if (!bd)
                { /* Begin sanity check */
                        printk(KERN_ERR "<Error> - Digi : cleanup_module failed\n");
                        return;
                } /* End sanity check */
-
-               ch = card_ptr[crd]; 
-
+               ch = card_ptr[crd];
                for (count = 0; count < bd->numports; count++, ch++) 
                { /* Begin for each port */
-
-                       if (ch) 
-                       {
+                       if (ch) {
                                if (ch->tty)
                                        tty_hangup(ch->tty);
                                kfree(ch->tmp_buf);
                        }
-
                } /* End for each port */
        } /* End for each card */
-
-#ifdef ENABLE_PCI
        pci_unregister_driver (&epca_driver);
-#endif
-
-       restore_flags(flags);
-
 }
+
 module_exit(epca_module_exit);
-#endif /* MODULE */
 
 static struct tty_operations pc_ops = {
        .open = pc_open,
@@ -1371,34 +1157,15 @@ static struct tty_operations info_ops = {
 
 /* ------------------ Begin pc_init  ---------------------- */
 
-int __init pc_init(void)
+static int __init pc_init(void)
 { /* Begin pc_init */
-
-       /* ----------------------------------------------------------------
-               pc_init is called by the operating system during boot up prior to
-               any open calls being made.  In the older versions of Linux (Prior
-               to 2.0.0) an entry is made into tty_io.c.  A pointer to the last
-               memory location (from kernel space) used (kmem_start) is passed
-               to pc_init.  It is pc_inits responsibility to modify this value 
-               for any memory that the Digi driver might need and then return
-               this value to the operating system.  For example if the driver
-               wishes to allocate 1K of kernel memory, pc_init would return 
-               (kmem_start + 1024).  This memory (Between kmem_start and kmem_start
-               + 1024) would then be available for use exclusively by the driver.  
-               In this case our driver does not allocate any of this kernel 
-               memory.
-       ------------------------------------------------------------------*/
-
-       ulong flags;
        int crd;
        struct board_info *bd;
        unsigned char board_id = 0;
 
-#ifdef ENABLE_PCI
        int pci_boards_found, pci_count;
 
        pci_count = 0;
-#endif /* ENABLE_PCI */
 
        pc_driver = alloc_tty_driver(MAX_ALLOC);
        if (!pc_driver)
@@ -1416,8 +1183,7 @@ int __init pc_init(void)
                Note : If LILO has ran epca_setup then epca_setup will handle defining
                num_cards as well as copying the data into the board structure.
        -------------------------------------------------------------------------- */
-       if (!liloconfig)
-       { /* Begin driver has been configured via. epcaconfig */
+       if (!liloconfig) { /* Begin driver has been configured via. epcaconfig */
 
                nbdevs = NBDEVS;
                num_cards = NUMCARDS;
@@ -1440,8 +1206,6 @@ int __init pc_init(void)
 
        printk(KERN_INFO "DIGI epca driver version %s loaded.\n",VERSION);
 
-#ifdef ENABLE_PCI
-
        /* ------------------------------------------------------------------
                NOTE : This code assumes that the number of ports found in 
                       the boards array is correct.  This could be wrong if
@@ -1467,8 +1231,6 @@ int __init pc_init(void)
                pci_boards_found += init_PCI();
        num_cards += pci_boards_found;
 
-#endif /* ENABLE_PCI */
-
        pc_driver->owner = THIS_MODULE;
        pc_driver->name = "ttyD"; 
        pc_driver->devfs_name = "tts/D";
@@ -1499,9 +1261,6 @@ int __init pc_init(void)
        tty_set_operations(pc_info, &info_ops);
 
 
-       save_flags(flags);
-       cli();
-
        for (crd = 0; crd < num_cards; crd++) 
        { /* Begin for each card */
 
@@ -1610,11 +1369,7 @@ int __init pc_init(void)
                                        if ((board_id & 0x30) == 0x30) 
                                                bd->memory_seg = 0x8000;
 
-                               } /* End it is an XI card */
-                               else
-                               {
-                                       printk(KERN_ERR "<Error> - Board at 0x%x doesn't appear to be an XI\n",(int)bd->port);
-                               }
+                               } else printk(KERN_ERR "epca: Board at 0x%x doesn't appear to be an XI\n",(int)bd->port);
                        break;
 
                } /* End switch on bd->type */
@@ -1634,9 +1389,6 @@ int __init pc_init(void)
        init_timer(&epca_timer);
        epca_timer.function = epcapoll;
        mod_timer(&epca_timer, jiffies + HZ/25);
-
-       restore_flags(flags);
-
        return 0;
 
 } /* End pc_init */
@@ -1647,10 +1399,10 @@ static void post_fep_init(unsigned int crd)
 { /* Begin post_fep_init */
 
        int i;
-       unchar *memaddr;
-       volatile struct global_data *gd;
+       unsigned char *memaddr;
+       struct global_data *gd;
        struct board_info *bd;
-       volatile struct board_chan *bc;
+       struct board_chan *bc;
        struct channel *ch; 
        int shrinkmem = 0, lowwater ; 
  
@@ -1669,9 +1421,7 @@ static void post_fep_init(unsigned int crd)
                after DIGI_INIT has been called will return the proper values. 
        ------------------------------------------------------------------- */
 
-       if (bd->type >= PCIXEM) /* If the board in question is PCI */
-       { /* Begin get PCI number of ports */
-
+       if (bd->type >= PCIXEM) { /* Begin get PCI number of ports */
                /* --------------------------------------------------------------------
                        Below we use XEMPORTS as a memory offset regardless of which PCI
                        card it is.  This is because all of the supported PCI cards have
@@ -1685,15 +1435,15 @@ static void post_fep_init(unsigned int crd)
                        (FYI - The id should be located at 0x1ac (And may use up to 4 bytes
                        if the box in question is a XEM or CX)).  
                ------------------------------------------------------------------------ */ 
-
-               bd->numports = (unsigned short)*(unsigned char *)bus_to_virt((unsigned long)
-                                                       (bd->re_map_membase + XEMPORTS));
-
-               
+               /* PCI cards are already remapped at this point ISA are not */
+               bd->numports = readw(bd->re_map_membase + XEMPORTS);
                epcaassert(bd->numports <= 64,"PCI returned a invalid number of ports");
                nbdevs += (bd->numports);
-
-       } /* End get PCI number of ports */
+       } else {
+               /* Fix up the mappings for ISA/EISA etc */
+               /* FIXME: 64K - can we be smarter ? */
+               bd->re_map_membase = ioremap(bd->membase, 0x10000);
+       }
 
        if (crd != 0)
                card_ptr[crd] = card_ptr[crd-1] + boards[crd-1].numports;
@@ -1701,19 +1451,9 @@ static void post_fep_init(unsigned int crd)
                card_ptr[crd] = &digi_channels[crd]; /* <- For card 0 only */
 
        ch = card_ptr[crd];
-
-
        epcaassert(ch <= &digi_channels[nbdevs - 1], "ch out of range");
 
-       memaddr = (unchar *)bd->re_map_membase;
-
-       /* 
-          The below command is necessary because newer kernels (2.1.x and
-          up) do not have a 1:1 virtual to physical mapping.  The below
-          call adjust for that.
-       */
-
-       memaddr = (unsigned char *)bus_to_virt((unsigned long)memaddr);
+       memaddr = bd->re_map_membase;
 
        /* -----------------------------------------------------------------
                The below assignment will set bc to point at the BEGINING of
@@ -1721,7 +1461,7 @@ static void post_fep_init(unsigned int crd)
                8 and 64 of these structures.
        -------------------------------------------------------------------- */
 
-       bc = (volatile struct board_chan *)((ulong)memaddr + CHANSTRUCT);
+       bc = (struct board_chan *)(memaddr + CHANSTRUCT);
 
        /* -------------------------------------------------------------------
                The below assignment will set gd to point at the BEGINING of
@@ -1730,20 +1470,18 @@ static void post_fep_init(unsigned int crd)
                pointer begins at 0xd10.
        ---------------------------------------------------------------------- */
 
-       gd = (volatile struct global_data *)((ulong)memaddr + GLOBAL);
+       gd = (struct global_data *)(memaddr + GLOBAL);
 
        /* --------------------------------------------------------------------
                XEPORTS (address 0xc22) points at the number of channels the
                card supports. (For 64XE, XI, XEM, and XR use 0xc02)
        ----------------------------------------------------------------------- */
 
-       if (((bd->type == PCXEVE) | (bd->type == PCXE)) &&
-           (*(ushort *)((ulong)memaddr + XEPORTS) < 3))
+       if ((bd->type == PCXEVE || bd->type == PCXE) && (readw(memaddr + XEPORTS) < 3))
                shrinkmem = 1;
        if (bd->type < PCIXEM)
                if (!request_region((int)bd->port, 4, board_desc[bd->type]))
                        return;         
-
        memwinon(bd, 0);
 
        /*  --------------------------------------------------------------------
@@ -1753,17 +1491,16 @@ static void post_fep_init(unsigned int crd)
 
        /* For every port on the card do ..... */
 
-       for (i = 0; i < bd->numports; i++, ch++, bc++) 
-       { /* Begin for each port */
+       for (i = 0; i < bd->numports; i++, ch++, bc++)  { /* Begin for each port */
+               unsigned long flags;
 
                ch->brdchan        = bc;
                ch->mailbox        = gd; 
                INIT_WORK(&ch->tqueue, do_softint, ch);
                ch->board          = &boards[crd];
 
-               switch (bd->type)
-               { /* Begin switch bd->type */
-
+               spin_lock_irqsave(&epca_lock, flags);
+               switch (bd->type) {
                        /* ----------------------------------------------------------------
                                Since some of the boards use different bitmaps for their
                                control signals we cannot hard code these values and retain
@@ -1796,14 +1533,12 @@ static void post_fep_init(unsigned int crd)
        
                } /* End switch bd->type */
 
-               if (boards[crd].altpin) 
-               {
+               if (boards[crd].altpin) {
                        ch->dsr = ch->m_dcd;
                        ch->dcd = ch->m_dsr;
                        ch->digiext.digi_flags |= DIGI_ALTPIN;
                }
-               else 
-               { 
+               else {
                        ch->dcd = ch->m_dcd;
                        ch->dsr = ch->m_dsr;
                }
@@ -1813,14 +1548,12 @@ static void post_fep_init(unsigned int crd)
                ch->magic      = EPCA_MAGIC;
                ch->tty        = NULL;
 
-               if (shrinkmem) 
-               {
+               if (shrinkmem) {
                        fepcmd(ch, SETBUFFER, 32, 0, 0, 0);
                        shrinkmem = 0;
                }
 
-               switch (bd->type)
-               { /* Begin switch bd->type */
+               switch (bd->type) {
 
                        case PCIXEM:
                        case PCIXRJ:
@@ -1878,13 +1611,13 @@ static void post_fep_init(unsigned int crd)
 
                fepcmd(ch, SRXHWATER, (3 * ch->rxbufsize / 4), 0, 10, 0);
 
-               bc->edelay = 100;
-               bc->idata = 1;
+               writew(100, &bc->edelay);
+               writeb(1, &bc->idata);
        
-               ch->startc  = bc->startc;
-               ch->stopc   = bc->stopc;
-               ch->startca = bc->startca;
-               ch->stopca  = bc->stopca;
+               ch->startc  = readb(&bc->startc);
+               ch->stopc   = readb(&bc->stopc);
+               ch->startca = readb(&bc->startca);
+               ch->stopca  = readb(&bc->stopca);
        
                ch->fepcflag = 0;
                ch->fepiflag = 0;
@@ -1899,27 +1632,23 @@ static void post_fep_init(unsigned int crd)
                ch->blocked_open = 0;
                init_waitqueue_head(&ch->open_wait);
                init_waitqueue_head(&ch->close_wait);
+
+               spin_unlock_irqrestore(&epca_lock, flags);
+
                ch->tmp_buf = kmalloc(ch->txbufsize,GFP_KERNEL);
-               if (!(ch->tmp_buf))
-               {
+               if (!ch->tmp_buf) {
                        printk(KERN_ERR "POST FEP INIT : kmalloc failed for port 0x%x\n",i);
                        release_region((int)bd->port, 4);
                        while(i-- > 0)
                                kfree((ch--)->tmp_buf);
                        return;
-               }
-               else 
+               } else
                        memset((void *)ch->tmp_buf,0,ch->txbufsize);
        } /* End for each port */
 
        printk(KERN_INFO 
                "Digi PC/Xx Driver V%s:  %s I/O = 0x%lx Mem = 0x%lx Ports = %d\n", 
                VERSION, board_desc[bd->type], (long)bd->port, (long)bd->membase, bd->numports);
-       sprintf(mesg, 
-               "Digi PC/Xx Driver V%s:  %s I/O = 0x%lx Mem = 0x%lx Ports = %d\n", 
-               VERSION, board_desc[bd->type], (long)bd->port, (long)bd->membase, bd->numports);
-       console_print(mesg);
-
        memwinoff(bd, 0);
 
 } /* End post_fep_init */
@@ -1943,9 +1672,6 @@ static void epcapoll(unsigned long ignored)
                buffer empty) and acts on those events.
        ----------------------------------------------------------------------- */
        
-       save_flags(flags);
-       cli();
-
        for (crd = 0; crd < num_cards; crd++) 
        { /* Begin for each card */
 
@@ -1961,6 +1687,8 @@ static void epcapoll(unsigned long ignored)
                        some legacy boards.
                ---------------------------------------------------------------- */
 
+               spin_lock_irqsave(&epca_lock, flags);
+
                assertmemoff(ch);
 
                globalwinon(ch);
@@ -1970,21 +1698,19 @@ static void epcapoll(unsigned long ignored)
                        the transmit or receive queue.
                ------------------------------------------------------------------- */
 
-               head = ch->mailbox->ein;
-               tail = ch->mailbox->eout;
+               head = readw(&ch->mailbox->ein);
+               tail = readw(&ch->mailbox->eout);
                
                /* If head isn't equal to tail we have an event */
 
                if (head != tail)
                        doevent(crd);
-
                memoff(ch);
 
-       } /* End for each card */
+               spin_unlock_irqrestore(&epca_lock, flags);
 
+       } /* End for each card */
        mod_timer(&epca_timer, jiffies + (HZ / 25));
-
-       restore_flags(flags);
 } /* End epcapoll */
 
 /* --------------------- Begin doevent  ------------------------ */
@@ -1992,53 +1718,42 @@ static void epcapoll(unsigned long ignored)
 static void doevent(int crd)
 { /* Begin doevent */
 
-       volatile unchar *eventbuf;
+       void *eventbuf;
        struct channel *ch, *chan0;
        static struct tty_struct *tty;
-       volatile struct board_info *bd;
-       volatile struct board_chan *bc;
-       register volatile unsigned int tail, head;
-       register int event, channel;
-       register int mstat, lstat;
+       struct board_info *bd;
+       struct board_chan *bc;
+       unsigned int tail, head;
+       int event, channel;
+       int mstat, lstat;
 
        /* -------------------------------------------------------------------
                This subroutine is called by epcapoll when an event is detected 
                in the event queue.  This routine responds to those events.
        --------------------------------------------------------------------- */
-
        bd = &boards[crd];
 
        chan0 = card_ptr[crd];
        epcaassert(chan0 <= &digi_channels[nbdevs - 1], "ch out of range");
-
        assertgwinon(chan0);
-
-       while ((tail = chan0->mailbox->eout) != (head = chan0->mailbox->ein)) 
+       while ((tail = readw(&chan0->mailbox->eout)) != (head = readw(&chan0->mailbox->ein)))
        { /* Begin while something in event queue */
-
                assertgwinon(chan0);
-
-               eventbuf = (volatile unchar *)bus_to_virt((ulong)(bd->re_map_membase + tail + ISTART));
-
+               eventbuf = bd->re_map_membase + tail + ISTART;
                /* Get the channel the event occurred on */
-               channel = eventbuf[0];
-
+               channel = readb(eventbuf);
                /* Get the actual event code that occurred */
-               event = eventbuf[1];
-
+               event = readb(eventbuf + 1);
                /*  ----------------------------------------------------------------
                        The two assignments below get the current modem status (mstat)
                        and the previous modem status (lstat).  These are useful becuase
                        an event could signal a change in modem signals itself.
                ------------------------------------------------------------------- */
-
-               mstat = eventbuf[2];
-               lstat = eventbuf[3];
+               mstat = readb(eventbuf + 2);
+               lstat = readb(eventbuf + 3);
 
                ch = chan0 + channel;
-
-               if ((unsigned)channel >= bd->numports || !ch) 
-               { 
+               if ((unsigned)channel >= bd->numports || !ch)  {
                        if (channel >= bd->numports)
                                ch = chan0;
                        bc = ch->brdchan;
@@ -2048,97 +1763,53 @@ static void doevent(int crd)
                if ((bc = ch->brdchan) == NULL)
                        goto next;
 
-               if (event & DATA_IND) 
-               { /* Begin DATA_IND */
-
+               if (event & DATA_IND)  { /* Begin DATA_IND */
                        receive_data(ch);
                        assertgwinon(ch);
-
                } /* End DATA_IND */
                /* else *//* Fix for DCD transition missed bug */
-               if (event & MODEMCHG_IND) 
-               { /* Begin MODEMCHG_IND */
-
+               if (event & MODEMCHG_IND)  { /* Begin MODEMCHG_IND */
                        /* A modem signal change has been indicated */
-
                        ch->imodem = mstat;
-
-                       if (ch->asyncflags & ASYNC_CHECK_CD) 
-                       {
+                       if (ch->asyncflags & ASYNC_CHECK_CD)  {
                                if (mstat & ch->dcd)  /* We are now receiving dcd */
                                        wake_up_interruptible(&ch->open_wait);
                                else
                                        pc_sched_event(ch, EPCA_EVENT_HANGUP); /* No dcd; hangup */
                        }
-
                } /* End MODEMCHG_IND */
-
                tty = ch->tty;
-               if (tty) 
-               { /* Begin if valid tty */
-
-                       if (event & BREAK_IND) 
-                       { /* Begin if BREAK_IND */
-
+               if (tty)  { /* Begin if valid tty */
+                       if (event & BREAK_IND)  { /* Begin if BREAK_IND */
                                /* A break has been indicated */
-
                                tty->flip.count++;
                                *tty->flip.flag_buf_ptr++ = TTY_BREAK;
-
                                *tty->flip.char_buf_ptr++ = 0;
-
                                tty_schedule_flip(tty); 
-
-                       } /* End if BREAK_IND */
-                       else
-                       if (event & LOWTX_IND) 
-                       { /* Begin LOWTX_IND */
-
+                       } else if (event & LOWTX_IND)  { /* Begin LOWTX_IND */
                                if (ch->statusflags & LOWWAIT) 
                                { /* Begin if LOWWAIT */
-
                                        ch->statusflags &= ~LOWWAIT;
                                        tty_wakeup(tty);
                                        wake_up_interruptible(&tty->write_wait);
-
                                } /* End if LOWWAIT */
-
-                       } /* End LOWTX_IND */
-                       else
-                       if (event & EMPTYTX_IND) 
-                       { /* Begin EMPTYTX_IND */
-
+                       } else if (event & EMPTYTX_IND)  { /* Begin EMPTYTX_IND */
                                /* This event is generated by setup_empty_event */
-
                                ch->statusflags &= ~TXBUSY;
-                               if (ch->statusflags & EMPTYWAIT) 
-                               { /* Begin if EMPTYWAIT */
-
+                               if (ch->statusflags & EMPTYWAIT)  { /* Begin if EMPTYWAIT */
                                        ch->statusflags &= ~EMPTYWAIT;
                                        tty_wakeup(tty);
-
                                        wake_up_interruptible(&tty->write_wait);
-
                                } /* End if EMPTYWAIT */
-
                        } /* End EMPTYTX_IND */
-
                } /* End if valid tty */
-
-
        next:
                globalwinon(ch);
-
-               if (!bc)
-                       printk(KERN_ERR "<Error> - bc == NULL in doevent!\n");
-               else 
-                       bc->idata = 1;
-
-               chan0->mailbox->eout = (tail + 4) & (IMAX - ISTART - 4);
+               BUG_ON(!bc);
+               writew(1, &bc->idata);
+               writew((tail + 4) & (IMAX - ISTART - 4), &chan0->mailbox->eout);
                globalwinon(chan0);
-
        } /* End while something in event queue */
-
 } /* End doevent */
 
 /* --------------------- Begin fepcmd  ------------------------ */
@@ -2146,7 +1817,6 @@ static void doevent(int crd)
 static void fepcmd(struct channel *ch, int cmd, int word_or_byte,
                    int byte2, int ncmds, int bytecmd)
 { /* Begin fepcmd */
-
        unchar *memaddr;
        unsigned int head, cmdTail, cmdStart, cmdMax;
        long count;
@@ -2155,93 +1825,57 @@ static void fepcmd(struct channel *ch, int cmd, int word_or_byte,
        /* This is the routine in which commands may be passed to the card. */
 
        if (ch->board->status == DISABLED)
-       {
                return;
-       }
-
        assertgwinon(ch);
-
        /* Remember head (As well as max) is just an offset not a base addr */
-       head = ch->mailbox->cin;
-
+       head = readw(&ch->mailbox->cin);
        /* cmdStart is a base address */
-       cmdStart = ch->mailbox->cstart;
-
+       cmdStart = readw(&ch->mailbox->cstart);
        /* ------------------------------------------------------------------
                We do the addition below because we do not want a max pointer 
                relative to cmdStart.  We want a max pointer that points at the 
                physical end of the command queue.
        -------------------------------------------------------------------- */
-
-       cmdMax = (cmdStart + 4 + (ch->mailbox->cmax));
-
+       cmdMax = (cmdStart + 4 + readw(&ch->mailbox->cmax));
        memaddr = ch->board->re_map_membase;
 
-       /* 
-          The below command is necessary because newer kernels (2.1.x and
-          up) do not have a 1:1 virtual to physical mapping.  The below
-          call adjust for that.
-       */
-
-       memaddr = (unsigned char *)bus_to_virt((unsigned long)memaddr);
-
-       if (head >= (cmdMax - cmdStart) || (head & 03)) 
-       {
-               printk(KERN_ERR "line %d: Out of range, cmd = %x, head = %x\n", __LINE__, 
-              cmd, head);
-               printk(KERN_ERR "line %d: Out of range, cmdMax = %x, cmdStart = %x\n", __LINE__, 
-              cmdMax, cmdStart);
+       if (head >= (cmdMax - cmdStart) || (head & 03))  {
+               printk(KERN_ERR "line %d: Out of range, cmd = %x, head = %x\n", __LINE__,  cmd, head);
+               printk(KERN_ERR "line %d: Out of range, cmdMax = %x, cmdStart = %x\n", __LINE__,  cmdMax, cmdStart);
                return;
        }
-
-       if (bytecmd) 
-       {
-               *(volatile unchar *)(memaddr + head + cmdStart + 0) = (unchar)cmd;
-
-               *(volatile unchar *)(memaddr + head + cmdStart + 1) = (unchar)ch->channelnum;
+       if (bytecmd)  {
+               writeb(cmd, memaddr + head + cmdStart + 0);
+               writeb(ch->channelnum,  memaddr + head + cmdStart + 1);
                /* Below word_or_byte is bits to set */
-               *(volatile unchar *)(memaddr + head + cmdStart + 2) = (unchar)word_or_byte;
+               writeb(word_or_byte,  memaddr + head + cmdStart + 2);
                /* Below byte2 is bits to reset */
-               *(volatile unchar *)(memaddr + head + cmdStart + 3) = (unchar)byte2;
-
-       } 
-       else 
-       {
-               *(volatile unchar *)(memaddr + head + cmdStart + 0) = (unchar)cmd;
-               *(volatile unchar *)(memaddr + head + cmdStart + 1) = (unchar)ch->channelnum;
-               *(volatile ushort*)(memaddr + head + cmdStart + 2) = (ushort)word_or_byte;
+               writeb(byte2, memaddr + head + cmdStart + 3);
+       }  else {
+               writeb(cmd, memaddr + head + cmdStart + 0);
+               writeb(ch->channelnum,  memaddr + head + cmdStart + 1);
+               writeb(word_or_byte,  memaddr + head + cmdStart + 2);
        }
-
        head = (head + 4) & (cmdMax - cmdStart - 4);
-       ch->mailbox->cin = head;
-
+       writew(head, &ch->mailbox->cin);
        count = FEPTIMEOUT;
 
-       for (;;) 
-       { /* Begin forever loop */
-
+       for (;;)  { /* Begin forever loop */
                count--;
-               if (count == 0) 
-               {
+               if (count == 0)  {
                        printk(KERN_ERR "<Error> - Fep not responding in fepcmd()\n");
                        return;
                }
-
-               head = ch->mailbox->cin;
-               cmdTail = ch->mailbox->cout;
-
+               head = readw(&ch->mailbox->cin);
+               cmdTail = readw(&ch->mailbox->cout);
                n = (head - cmdTail) & (cmdMax - cmdStart - 4);
-
                /* ----------------------------------------------------------
                        Basically this will break when the FEP acknowledges the 
                        command by incrementing cmdTail (Making it equal to head).
                ------------------------------------------------------------- */
-
                if (n <= ncmds * (sizeof(short) * 4))
                        break; /* Well nearly forever :-) */
-
        } /* End forever loop */
-
 } /* End fepcmd */
 
 /* ---------------------------------------------------------------------
@@ -2255,11 +1889,9 @@ static void fepcmd(struct channel *ch, int cmd, int word_or_byte,
 
 static unsigned termios2digi_h(struct channel *ch, unsigned cflag)
 { /* Begin termios2digi_h */
-
        unsigned res = 0;
 
-       if (cflag & CRTSCTS) 
-       {
+       if (cflag & CRTSCTS) {
                ch->digiext.digi_flags |= (RTSPACE | CTSPACE);
                res |= ((ch->m_cts) | (ch->m_rts));
        }
@@ -2295,7 +1927,6 @@ static unsigned termios2digi_i(struct channel *ch, unsigned iflag)
 
        unsigned res = iflag & (IGNBRK | BRKINT | IGNPAR | PARMRK | 
                                INPCK | ISTRIP|IXON|IXANY|IXOFF);
-       
        if (ch->digiext.digi_flags & DIGI_AIXON)
                res |= IAIXON;
        return res;
@@ -2308,28 +1939,15 @@ static unsigned termios2digi_c(struct channel *ch, unsigned cflag)
 { /* Begin termios2digi_c */
 
        unsigned res = 0;
-
-#ifdef SPEED_HACK
-       /* CL: HACK to force 115200 at 38400 and 57600 at 19200 Baud */
-       if ((cflag & CBAUD)== B38400) cflag=cflag - B38400 + B115200;
-       if ((cflag & CBAUD)== B19200) cflag=cflag - B19200 + B57600;
-#endif /* SPEED_HACK */
-
-       if (cflag & CBAUDEX)
-       { /* Begin detected CBAUDEX */
-
+       if (cflag & CBAUDEX) { /* Begin detected CBAUDEX */
                ch->digiext.digi_flags |= DIGI_FAST;
-
                /* -------------------------------------------------------------
                   HUPCL bit is used by FEP to indicate fast baud
                   table is to be used.
                ----------------------------------------------------------------- */
-
                res |= FEP_HUPCL;
-
        } /* End detected CBAUDEX */
        else ch->digiext.digi_flags &= ~DIGI_FAST; 
-
        /* -------------------------------------------------------------------
                CBAUD has bit position 0x1000 set these days to indicate Linux
                baud rate remap.  Digi hardware can't handle the bit assignment.
@@ -2337,7 +1955,6 @@ static unsigned termios2digi_c(struct channel *ch, unsigned cflag)
                bit out.
        ---------------------------------------------------------------------- */
        res |= cflag & ((CBAUD ^ CBAUDEX) | PARODD | PARENB | CSTOPB | CSIZE);
-
        /* -------------------------------------------------------------
                This gets a little confusing.  The Digi cards have their own
                representation of c_cflags controling baud rate.  For the most
@@ -2357,10 +1974,8 @@ static unsigned termios2digi_c(struct channel *ch, unsigned cflag)
                should be checked for a screened out prior to termios2digi_c 
                returning.  Since CLOCAL isn't used by the board this can be
                ignored as long as the returned value is used only by Digi hardware. 
-       ----------------------------------------------------------------- */
-
-       if (cflag & CBAUDEX)
-       {
+               ----------------------------------------------------------------- */
+       if (cflag & CBAUDEX) {
                /* -------------------------------------------------------------
                        The below code is trying to guarantee that only baud rates
                        115200 and 230400 are remapped.  We use exclusive or because
@@ -2371,138 +1986,96 @@ static unsigned termios2digi_c(struct channel *ch, unsigned cflag)
                                
                if ((!((cflag & 0x7) ^ (B115200 & ~CBAUDEX))) || 
                    (!((cflag & 0x7) ^ (B230400 & ~CBAUDEX))))
-               {
                        res += 1;
-               }
        }
-
        return res;
 
 } /* End termios2digi_c */
 
 /* --------------------- Begin epcaparam  ----------------------- */
 
+/* Caller must hold the locks */
 static void epcaparam(struct tty_struct *tty, struct channel *ch)
 { /* Begin epcaparam */
 
        unsigned int cmdHead;
        struct termios *ts;
-       volatile struct board_chan *bc;
+       struct board_chan *bc;
        unsigned mval, hflow, cflag, iflag;
 
        bc = ch->brdchan;
        epcaassert(bc !=0, "bc out of range");
 
        assertgwinon(ch);
-
        ts = tty->termios;
-
-       if ((ts->c_cflag & CBAUD) == 0) 
-       { /* Begin CBAUD detected */
-
-               cmdHead = bc->rin;
+       if ((ts->c_cflag & CBAUD) == 0)  { /* Begin CBAUD detected */
+               cmdHead = readw(&bc->rin);
                bc->rout = cmdHead;
-               cmdHead = bc->tin;
-
+               cmdHead = readw(&bc->tin);
                /* Changing baud in mid-stream transmission can be wonderful */
                /* ---------------------------------------------------------------
                        Flush current transmit buffer by setting cmdTail pointer (tout)
                        to cmdHead pointer (tin).  Hopefully the transmit buffer is empty.
                ----------------------------------------------------------------- */
-
                fepcmd(ch, STOUT, (unsigned) cmdHead, 0, 0, 0);
                mval = 0;
-
-       } /* End CBAUD detected */
-       else 
-       { /* Begin CBAUD not detected */
-
+       } else  { /* Begin CBAUD not detected */
                /* -------------------------------------------------------------------
                        c_cflags have changed but that change had nothing to do with BAUD.
                        Propagate the change to the card.
                ---------------------------------------------------------------------- */ 
-
                cflag = termios2digi_c(ch, ts->c_cflag);
-
-               if (cflag != ch->fepcflag) 
-               {
+               if (cflag != ch->fepcflag)  {
                        ch->fepcflag = cflag;
                        /* Set baud rate, char size, stop bits, parity */
                        fepcmd(ch, SETCTRLFLAGS, (unsigned) cflag, 0, 0, 0);
                }
-
-
                /* ----------------------------------------------------------------
                        If the user has not forced CLOCAL and if the device is not a 
                        CALLOUT device (Which is always CLOCAL) we set flags such that
                        the driver will wait on carrier detect.
                ------------------------------------------------------------------- */
-
                if (ts->c_cflag & CLOCAL)
-               { /* Begin it is a cud device or a ttyD device with CLOCAL on */
                        ch->asyncflags &= ~ASYNC_CHECK_CD;
-               } /* End it is a cud device or a ttyD device with CLOCAL on */
                else
-               { /* Begin it is a ttyD device */
                        ch->asyncflags |= ASYNC_CHECK_CD;
-               } /* End it is a ttyD device */
-
                mval = ch->m_dtr | ch->m_rts;
-
        } /* End CBAUD not detected */
-
        iflag = termios2digi_i(ch, ts->c_iflag);
-
        /* Check input mode flags */
-
-       if (iflag != ch->fepiflag) 
-       {
+       if (iflag != ch->fepiflag)  {
                ch->fepiflag = iflag;
-
                /* ---------------------------------------------------------------
                        Command sets channels iflag structure on the board. Such things 
                        as input soft flow control, handling of parity errors, and
                        break handling are all set here.
                ------------------------------------------------------------------- */
-
                /* break handling, parity handling, input stripping, flow control chars */
                fepcmd(ch, SETIFLAGS, (unsigned int) ch->fepiflag, 0, 0, 0);
        }
-
        /* ---------------------------------------------------------------
                Set the board mint value for this channel.  This will cause hardware
                events to be generated each time the DCD signal (Described in mint) 
                changes.        
        ------------------------------------------------------------------- */
-       bc->mint = ch->dcd;
-
+       writeb(ch->dcd, &bc->mint);
        if ((ts->c_cflag & CLOCAL) || (ch->digiext.digi_flags & DIGI_FORCEDCD))
                if (ch->digiext.digi_flags & DIGI_FORCEDCD)
-                       bc->mint = 0;
-
-       ch->imodem = bc->mstat;
-
+                       writeb(0, &bc->mint);
+       ch->imodem = readb(&bc->mstat);
        hflow = termios2digi_h(ch, ts->c_cflag);
-
-       if (hflow != ch->hflow) 
-       {
+       if (hflow != ch->hflow)  {
                ch->hflow = hflow;
-
                /* --------------------------------------------------------------
                        Hard flow control has been selected but the board is not
                        using it.  Activate hard flow control now.
                ----------------------------------------------------------------- */
-
                fepcmd(ch, SETHFLOW, hflow, 0xff, 0, 1);
        }
-       
-
        mval ^= ch->modemfake & (mval ^ ch->modem);
 
-       if (ch->omodem ^ mval) 
-       {
+       if (ch->omodem ^ mval)  {
                ch->omodem = mval;
-
                /* --------------------------------------------------------------
                        The below command sets the DTR and RTS mstat structure.  If
                        hard flow control is NOT active these changes will drive the
@@ -2514,87 +2087,65 @@ static void epcaparam(struct tty_struct *tty, struct channel *ch)
                /* First reset DTR & RTS; then set them */
                fepcmd(ch, SETMODEM, 0, ((ch->m_dtr)|(ch->m_rts)), 0, 1);
                fepcmd(ch, SETMODEM, mval, 0, 0, 1);
-
        }
-
-       if (ch->startc != ch->fepstartc || ch->stopc != ch->fepstopc) 
-       {
+       if (ch->startc != ch->fepstartc || ch->stopc != ch->fepstopc)  {
                ch->fepstartc = ch->startc;
                ch->fepstopc = ch->stopc;
-
                /* ------------------------------------------------------------
                        The XON / XOFF characters have changed; propagate these
                        changes to the card.    
                --------------------------------------------------------------- */
-
                fepcmd(ch, SONOFFC, ch->fepstartc, ch->fepstopc, 0, 1);
        }
-
-       if (ch->startca != ch->fepstartca || ch->stopca != ch->fepstopca) 
-       {
+       if (ch->startca != ch->fepstartca || ch->stopca != ch->fepstopca)  {
                ch->fepstartca = ch->startca;
                ch->fepstopca = ch->stopca;
-
                /* ---------------------------------------------------------------
                        Similar to the above, this time the auxilarly XON / XOFF 
                        characters have changed; propagate these changes to the card.
                ------------------------------------------------------------------ */
-
                fepcmd(ch, SAUXONOFFC, ch->fepstartca, ch->fepstopca, 0, 1);
        }
-
 } /* End epcaparam */
 
 /* --------------------- Begin receive_data  ----------------------- */
-
+/* Caller holds lock */
 static void receive_data(struct channel *ch)
 { /* Begin receive_data */
 
        unchar *rptr;
        struct termios *ts = NULL;
        struct tty_struct *tty;
-       volatile struct board_chan *bc;
-       register int dataToRead, wrapgap, bytesAvailable;
-       register unsigned int tail, head;
+       struct board_chan *bc;
+       int dataToRead, wrapgap, bytesAvailable;
+       unsigned int tail, head;
        unsigned int wrapmask;
        int rc;
 
-
        /* ---------------------------------------------------------------
                This routine is called by doint when a receive data event 
                has taken place.
        ------------------------------------------------------------------- */
 
        globalwinon(ch);
-
        if (ch->statusflags & RXSTOPPED)
                return;
-
        tty = ch->tty;
        if (tty)
                ts = tty->termios;
-
        bc = ch->brdchan;
-
-       if (!bc) 
-       {
-               printk(KERN_ERR "<Error> - bc is NULL in receive_data!\n");
-               return;
-       }
-
+       BUG_ON(!bc);
        wrapmask = ch->rxbufsize - 1;
 
        /* --------------------------------------------------------------------- 
                Get the head and tail pointers to the receiver queue.  Wrap the 
                head pointer if it has reached the end of the buffer.
        ------------------------------------------------------------------------ */
-
-       head = bc->rin;
+       head = readw(&bc->rin);
        head &= wrapmask;
-       tail = bc->rout & wrapmask;
+       tail = readw(&bc->rout) & wrapmask;
 
        bytesAvailable = (head - tail) & wrapmask;
-
        if (bytesAvailable == 0)
                return;
 
@@ -2602,8 +2153,7 @@ static void receive_data(struct channel *ch)
           If CREAD bit is off or device not open, set TX tail to head
        --------------------------------------------------------------------- */
 
-       if (!tty || !ts || !(ts->c_cflag & CREAD)) 
-       {
+       if (!tty || !ts || !(ts->c_cflag & CREAD))  {
                bc->rout = head;
                return;
        }
@@ -2611,64 +2161,45 @@ static void receive_data(struct channel *ch)
        if (tty->flip.count == TTY_FLIPBUF_SIZE) 
                return;
 
-       if (bc->orun) 
-       {
-               bc->orun = 0;
-               printk(KERN_WARNING "overrun! DigiBoard device %s\n",tty->name);
+       if (readb(&bc->orun)) {
+               writeb(0, &bc->orun);
+               printk(KERN_WARNING "epca; overrun! DigiBoard device %s\n",tty->name);
        }
-
        rxwinon(ch);
        rptr = tty->flip.char_buf_ptr;
        rc = tty->flip.count;
-
-       while (bytesAvailable > 0) 
-       { /* Begin while there is data on the card */
-
+       while (bytesAvailable > 0)  { /* Begin while there is data on the card */
                wrapgap = (head >= tail) ? head - tail : ch->rxbufsize - tail;
-
                /* ---------------------------------------------------------------
                        Even if head has wrapped around only report the amount of
                        data to be equal to the size - tail.  Remember memcpy can't
                        automaticly wrap around the receive buffer.
                ----------------------------------------------------------------- */
-
                dataToRead = (wrapgap < bytesAvailable) ? wrapgap : bytesAvailable;
-
                /* --------------------------------------------------------------
                   Make sure we don't overflow the buffer
                ----------------------------------------------------------------- */
-
                if ((rc + dataToRead) > TTY_FLIPBUF_SIZE)
                        dataToRead = TTY_FLIPBUF_SIZE - rc;
-
                if (dataToRead == 0)
                        break;
-
                /* ---------------------------------------------------------------
                        Move data read from our card into the line disciplines buffer
                        for translation if necessary.
                ------------------------------------------------------------------ */
-
-               if ((memcpy(rptr, ch->rxptr + tail, dataToRead)) != rptr)
-                       printk(KERN_ERR "<Error> - receive_data : memcpy failed\n");
-                       
+               memcpy_fromio(rptr, ch->rxptr + tail, dataToRead);
                rc   += dataToRead;
                rptr += dataToRead;
                tail = (tail + dataToRead) & wrapmask;
                bytesAvailable -= dataToRead;
-
        } /* End while there is data on the card */
-
-
        tty->flip.count = rc;
        tty->flip.char_buf_ptr = rptr;
        globalwinon(ch);
-       bc->rout = tail;
-
+       writew(tail, &bc->rout);
        /* Must be called with global data */
        tty_schedule_flip(ch->tty); 
        return;
-
 } /* End receive_data */
 
 static int info_ioctl(struct tty_struct *tty, struct file * file,
@@ -2676,17 +2207,15 @@ static int info_ioctl(struct tty_struct *tty, struct file * file,
 {
        switch (cmd) 
        { /* Begin switch cmd */
-
                case DIGI_GETINFO:
                { /* Begin case DIGI_GETINFO */
-
                        struct digi_info di ;
                        int brd;
 
-                       getUser(brd, (unsigned int __user *)arg);
-
-                       if ((brd < 0) || (brd >= num_cards) || (num_cards == 0))
-                               return (-ENODEV);
+                       if(get_user(brd, (unsigned int __user *)arg))
+                               return -EFAULT;
+                       if (brd < 0 || brd >= num_cards || num_cards == 0)
+                               return -ENODEV;
 
                        memset(&di, 0, sizeof(di));
 
@@ -2694,8 +2223,9 @@ static int info_ioctl(struct tty_struct *tty, struct file * file,
                        di.status = boards[brd].status;
                        di.type = boards[brd].type ;
                        di.numports = boards[brd].numports ;
-                       di.port = boards[brd].port ;
-                       di.membase = boards[brd].membase ;
+                       /* Legacy fixups - just move along nothing to see */
+                       di.port = (unsigned char *)boards[brd].port ;
+                       di.membase = (unsigned char *)boards[brd].membase ;
 
                        if (copy_to_user((void __user *)arg, &di, sizeof (di)))
                                return -EFAULT;
@@ -2709,39 +2239,29 @@ static int info_ioctl(struct tty_struct *tty, struct file * file,
                        int brd = arg & 0xff000000 >> 16 ; 
                        unsigned char state = arg & 0xff ; 
 
-                       if ((brd < 0) || (brd >= num_cards))
-                       {
-                               printk(KERN_ERR "<Error> - DIGI POLLER : brd not valid!\n");
+                       if (brd < 0 || brd >= num_cards) {
+                               printk(KERN_ERR "epca: DIGI POLLER : brd not valid!\n");
                                return (-ENODEV);
                        }
-
                        digi_poller_inhibited = state ;
                        break ; 
-
                } /* End case DIGI_POLLER */
 
                case DIGI_INIT:
                { /* Begin case DIGI_INIT */
-
                        /* ------------------------------------------------------------
                                This call is made by the apps to complete the initilization
                                of the board(s).  This routine is responsible for setting
                                the card to its initial state and setting the drivers control
                                fields to the sutianle settings for the card in question.
                        ---------------------------------------------------------------- */
-               
                        int crd ; 
                        for (crd = 0; crd < num_cards; crd++) 
                                post_fep_init (crd);
-
                        break ; 
-
                } /* End case DIGI_INIT */
-
-
                default:
-                       return -ENOIOCTLCMD;
-
+                       return -ENOTTY;
        } /* End switch cmd */
        return (0) ;
 }
@@ -2750,43 +2270,33 @@ static int info_ioctl(struct tty_struct *tty, struct file * file,
 static int pc_tiocmget(struct tty_struct *tty, struct file *file)
 {
        struct channel *ch = (struct channel *) tty->driver_data;
-       volatile struct board_chan *bc;
+       struct board_chan *bc;
        unsigned int mstat, mflag = 0;
        unsigned long flags;
 
        if (ch)
                bc = ch->brdchan;
        else
-       {
-               printk(KERN_ERR "<Error> - ch is NULL in pc_tiocmget!\n");
-               return(-EINVAL);
-       }
+               return -EINVAL;
 
-       save_flags(flags);
-       cli();
+       spin_lock_irqsave(&epca_lock, flags);
        globalwinon(ch);
-       mstat = bc->mstat;
+       mstat = readb(&bc->mstat);
        memoff(ch);
-       restore_flags(flags);
+       spin_unlock_irqrestore(&epca_lock, flags);
 
        if (mstat & ch->m_dtr)
                mflag |= TIOCM_DTR;
-
        if (mstat & ch->m_rts)
                mflag |= TIOCM_RTS;
-
        if (mstat & ch->m_cts)
                mflag |= TIOCM_CTS;
-
        if (mstat & ch->dsr)
                mflag |= TIOCM_DSR;
-
        if (mstat & ch->m_ri)
                mflag |= TIOCM_RI;
-
        if (mstat & ch->dcd)
                mflag |= TIOCM_CD;
-
        return mflag;
 }
 
@@ -2796,13 +2306,10 @@ static int pc_tiocmset(struct tty_struct *tty, struct file *file,
        struct channel *ch = (struct channel *) tty->driver_data;
        unsigned long flags;
 
-       if (!ch) {
-               printk(KERN_ERR "<Error> - ch is NULL in pc_tiocmset!\n");
-               return(-EINVAL);
-       }
+       if (!ch)
+               return -EINVAL;
 
-       save_flags(flags);
-       cli();
+       spin_lock_irqsave(&epca_lock, flags);
        /*
         * I think this modemfake stuff is broken.  It doesn't
         * correctly reflect the behaviour desired by the TIOCM*
@@ -2824,17 +2331,14 @@ static int pc_tiocmset(struct tty_struct *tty, struct file *file,
                ch->modemfake |= ch->m_dtr;
                ch->modem &= ~ch->m_dtr;
        }
-
        globalwinon(ch);
-
        /*  --------------------------------------------------------------
                The below routine generally sets up parity, baud, flow control
                issues, etc.... It effect both control flags and input flags.
        ------------------------------------------------------------------ */
-
        epcaparam(tty,ch);
        memoff(ch);
-       restore_flags(flags);
+       spin_unlock_irqrestore(&epca_lock, flags);
        return 0;
 }
 
@@ -2847,19 +2351,14 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
        unsigned long flags;
        unsigned int mflag, mstat;
        unsigned char startc, stopc;
-       volatile struct board_chan *bc;
+       struct board_chan *bc;
        struct channel *ch = (struct channel *) tty->driver_data;
        void __user *argp = (void __user *)arg;
        
        if (ch)
                bc = ch->brdchan;
        else 
-       {
-               printk(KERN_ERR "<Error> - ch is NULL in pc_ioctl!\n");
-               return(-EINVAL);
-       }
-
-       save_flags(flags);
+               return -EINVAL;
 
        /* -------------------------------------------------------------------
                For POSIX compliance we need to add more ioctls.  See tty_ioctl.c
@@ -2871,46 +2370,39 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
        { /* Begin switch cmd */
 
                case TCGETS:
-                       if (copy_to_user(argp, 
-                                        tty->termios, sizeof(struct termios)))
+                       if (copy_to_user(argp, tty->termios, sizeof(struct termios)))
                                return -EFAULT;
-                       return(0);
-
+                       return 0;
                case TCGETA:
                        return get_termio(tty, argp);
-
                case TCSBRK:    /* SVID version: non-zero arg --> no break */
-
                        retval = tty_check_change(tty);
                        if (retval)
                                return retval;
-
                        /* Setup an event to indicate when the transmit buffer empties */
-
+                       spin_lock_irqsave(&epca_lock, flags);
                        setup_empty_event(tty,ch);              
+                       spin_unlock_irqrestore(&epca_lock, flags);
                        tty_wait_until_sent(tty, 0);
                        if (!arg)
                                digi_send_break(ch, HZ/4);    /* 1/4 second */
                        return 0;
-
                case TCSBRKP:   /* support for POSIX tcsendbreak() */
-
                        retval = tty_check_change(tty);
                        if (retval)
                                return retval;
 
                        /* Setup an event to indicate when the transmit buffer empties */
-
+                       spin_lock_irqsave(&epca_lock, flags);
                        setup_empty_event(tty,ch);              
+                       spin_unlock_irqrestore(&epca_lock, flags);
                        tty_wait_until_sent(tty, 0);
                        digi_send_break(ch, arg ? arg*(HZ/10) : HZ/4);
                        return 0;
-
                case TIOCGSOFTCAR:
                        if (put_user(C_CLOCAL(tty)?1:0, (unsigned long __user *)arg))
                                return -EFAULT;
                        return 0;
-
                case TIOCSSOFTCAR:
                {
                        unsigned int value;
@@ -2922,75 +2414,63 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
                                 (value ? CLOCAL : 0));
                        return 0;
                }
-
                case TIOCMODG:
                        mflag = pc_tiocmget(tty, file);
                        if (put_user(mflag, (unsigned long __user *)argp))
                                return -EFAULT;
                        break;
-
                case TIOCMODS:
                        if (get_user(mstat, (unsigned __user *)argp))
                                return -EFAULT;
                        return pc_tiocmset(tty, file, mstat, ~mstat);
-
                case TIOCSDTR:
+                       spin_lock_irqsave(&epca_lock, flags);
                        ch->omodem |= ch->m_dtr;
-                       cli();
                        globalwinon(ch);
                        fepcmd(ch, SETMODEM, ch->m_dtr, 0, 10, 1);
                        memoff(ch);
-                       restore_flags(flags);
+                       spin_unlock_irqrestore(&epca_lock, flags);
                        break;
 
                case TIOCCDTR:
+                       spin_lock_irqsave(&epca_lock, flags);
                        ch->omodem &= ~ch->m_dtr;
-                       cli();
                        globalwinon(ch);
                        fepcmd(ch, SETMODEM, 0, ch->m_dtr, 10, 1);
                        memoff(ch);
-                       restore_flags(flags);
+                       spin_unlock_irqrestore(&epca_lock, flags);
                        break;
-
                case DIGI_GETA:
                        if (copy_to_user(argp, &ch->digiext, sizeof(digi_t)))
                                return -EFAULT;
                        break;
-
                case DIGI_SETAW:
                case DIGI_SETAF:
-                       if ((cmd) == (DIGI_SETAW)) 
-                       {
+                       if (cmd == DIGI_SETAW) {
                                /* Setup an event to indicate when the transmit buffer empties */
-
+                               spin_lock_irqsave(&epca_lock, flags);
                                setup_empty_event(tty,ch);              
+                               spin_unlock_irqrestore(&epca_lock, flags);
                                tty_wait_until_sent(tty, 0);
-                       }
-                       else 
-                       {
+                       } else  {
                                /* ldisc lock already held in ioctl */
                                if (tty->ldisc.flush_buffer)
                                        tty->ldisc.flush_buffer(tty);
                        }
-
                        /* Fall Thru */
-
                case DIGI_SETA:
                        if (copy_from_user(&ch->digiext, argp, sizeof(digi_t)))
                                return -EFAULT;
                        
-                       if (ch->digiext.digi_flags & DIGI_ALTPIN) 
-                       {
+                       if (ch->digiext.digi_flags & DIGI_ALTPIN)  {
                                ch->dcd = ch->m_dsr;
                                ch->dsr = ch->m_dcd;
-                       } 
-                       else 
-                       {
+                       } else {
                                ch->dcd = ch->m_dcd;
                                ch->dsr = ch->m_dsr;
                        }
                
-                       cli();
+                       spin_lock_irqsave(&epca_lock, flags);
                        globalwinon(ch);
 
                        /* -----------------------------------------------------------------
@@ -3000,25 +2480,22 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
 
                        epcaparam(tty,ch);
                        memoff(ch);
-                       restore_flags(flags);
+                       spin_unlock_irqrestore(&epca_lock, flags);
                        break;
 
                case DIGI_GETFLOW:
                case DIGI_GETAFLOW:
-                       cli();  
+                       spin_lock_irqsave(&epca_lock, flags);
                        globalwinon(ch);
-                       if ((cmd) == (DIGI_GETFLOW)) 
-                       {
-                               dflow.startc = bc->startc;
-                               dflow.stopc = bc->stopc;
-                       }
-                       else 
-                       {
-                               dflow.startc = bc->startca;
-                               dflow.stopc = bc->stopca;
+                       if (cmd == DIGI_GETFLOW) {
+                               dflow.startc = readb(&bc->startc);
+                               dflow.stopc = readb(&bc->stopc);
+                       } else {
+                               dflow.startc = readb(&bc->startca);
+                               dflow.stopc = readb(&bc->stopca);
                        }
                        memoff(ch);
-                       restore_flags(flags);
+                       spin_unlock_irqrestore(&epca_lock, flags);
 
                        if (copy_to_user(argp, &dflow, sizeof(dflow)))
                                return -EFAULT;
@@ -3026,13 +2503,10 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
 
                case DIGI_SETAFLOW:
                case DIGI_SETFLOW:
-                       if ((cmd) == (DIGI_SETFLOW)) 
-                       {
+                       if (cmd == DIGI_SETFLOW) {
                                startc = ch->startc;
                                stopc = ch->stopc;
-                       } 
-                       else 
-                       {
+                       } else {
                                startc = ch->startca;
                                stopc = ch->stopca;
                        }
@@ -3040,40 +2514,31 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
                        if (copy_from_user(&dflow, argp, sizeof(dflow)))
                                return -EFAULT;
 
-                       if (dflow.startc != startc || dflow.stopc != stopc) 
-                       { /* Begin  if setflow toggled */
-                               cli();
+                       if (dflow.startc != startc || dflow.stopc != stopc) { /* Begin  if setflow toggled */
+                               spin_lock_irqsave(&epca_lock, flags);
                                globalwinon(ch);
 
-                               if ((cmd) == (DIGI_SETFLOW)) 
-                               {
+                               if (cmd == DIGI_SETFLOW) {
                                        ch->fepstartc = ch->startc = dflow.startc;
                                        ch->fepstopc = ch->stopc = dflow.stopc;
                                        fepcmd(ch, SONOFFC, ch->fepstartc, ch->fepstopc, 0, 1);
-                               } 
-                               else 
-                               {
+                               } else {
                                        ch->fepstartca = ch->startca = dflow.startc;
                                        ch->fepstopca  = ch->stopca = dflow.stopc;
                                        fepcmd(ch, SAUXONOFFC, ch->fepstartca, ch->fepstopca, 0, 1);
                                }
 
-                               if      (ch->statusflags & TXSTOPPED)
+                               if (ch->statusflags & TXSTOPPED)
                                        pc_start(tty);
 
                                memoff(ch);
-                               restore_flags(flags);
-
+                               spin_unlock_irqrestore(&epca_lock, flags);
                        } /* End if setflow toggled */
                        break;
-
                default:
                        return -ENOIOCTLCMD;
-
        } /* End switch cmd */
-
        return 0;
-
 } /* End pc_ioctl */
 
 /* --------------------- Begin pc_set_termios  ----------------------- */
@@ -3083,20 +2548,16 @@ static void pc_set_termios(struct tty_struct *tty, struct termios *old_termios)
 
        struct channel *ch;
        unsigned long flags;
-
        /* ---------------------------------------------------------
                verifyChannel returns the channel from the tty struct
                if it is valid.  This serves as a sanity check.
        ------------------------------------------------------------- */
-
-       if ((ch = verifyChannel(tty)) != NULL) 
-       { /* Begin if channel valid */
-
-               save_flags(flags);
-               cli();
+       if ((ch = verifyChannel(tty)) != NULL)  { /* Begin if channel valid */
+               spin_lock_irqsave(&epca_lock, flags);
                globalwinon(ch);
                epcaparam(tty, ch);
                memoff(ch);
+               spin_unlock_irqrestore(&epca_lock, flags);
 
                if ((old_termios->c_cflag & CRTSCTS) &&
                         ((tty->termios->c_cflag & CRTSCTS) == 0))
@@ -3106,8 +2567,6 @@ static void pc_set_termios(struct tty_struct *tty, struct termios *old_termios)
                         (tty->termios->c_cflag & CLOCAL))
                        wake_up_interruptible(&ch->open_wait);
 
-               restore_flags(flags);
-
        } /* End if channel valid */
 
 } /* End pc_set_termios */
@@ -3116,29 +2575,18 @@ static void pc_set_termios(struct tty_struct *tty, struct termios *old_termios)
 
 static void do_softint(void *private_)
 { /* Begin do_softint */
-
        struct channel *ch = (struct channel *) private_;
-       
-
        /* Called in response to a modem change event */
-
-       if (ch && ch->magic == EPCA_MAGIC) 
-       { /* Begin EPCA_MAGIC */
-
+       if (ch && ch->magic == EPCA_MAGIC)  { /* Begin EPCA_MAGIC */
                struct tty_struct *tty = ch->tty;
 
-               if (tty && tty->driver_data) 
-               { 
-                       if (test_and_clear_bit(EPCA_EVENT_HANGUP, &ch->event)) 
-                       { /* Begin if clear_bit */
-
+               if (tty && tty->driver_data) {
+                       if (test_and_clear_bit(EPCA_EVENT_HANGUP, &ch->event)) { /* Begin if clear_bit */
                                tty_hangup(tty);        /* FIXME: module removal race here - AKPM */
                                wake_up_interruptible(&ch->open_wait);
                                ch->asyncflags &= ~ASYNC_NORMAL_ACTIVE;
-
                        } /* End if clear_bit */
                }
-
        } /* End EPCA_MAGIC */
 } /* End do_softint */
 
@@ -3154,82 +2602,49 @@ static void pc_stop(struct tty_struct *tty)
 
        struct channel *ch;
        unsigned long flags;
-
        /* ---------------------------------------------------------
                verifyChannel returns the channel from the tty struct
                if it is valid.  This serves as a sanity check.
        ------------------------------------------------------------- */
-
-       if ((ch = verifyChannel(tty)) != NULL) 
-       { /* Begin if valid channel */
-
-               save_flags(flags); 
-               cli();
-
-               if ((ch->statusflags & TXSTOPPED) == 0) 
-               { /* Begin if transmit stop requested */
-
+       if ((ch = verifyChannel(tty)) != NULL)  { /* Begin if valid channel */
+               spin_lock_irqsave(&epca_lock, flags);
+               if ((ch->statusflags & TXSTOPPED) == 0)  { /* Begin if transmit stop requested */
                        globalwinon(ch);
-
                        /* STOP transmitting now !! */
-
                        fepcmd(ch, PAUSETX, 0, 0, 0, 0);
-
                        ch->statusflags |= TXSTOPPED;
                        memoff(ch);
-
                } /* End if transmit stop requested */
-
-               restore_flags(flags);
-
+               spin_unlock_irqrestore(&epca_lock, flags);
        } /* End if valid channel */
-
 } /* End pc_stop */
 
 /* --------------------- Begin pc_start  ----------------------- */
 
 static void pc_start(struct tty_struct *tty)
 { /* Begin pc_start */
-
        struct channel *ch;
-
        /* ---------------------------------------------------------
                verifyChannel returns the channel from the tty struct
                if it is valid.  This serves as a sanity check.
        ------------------------------------------------------------- */
-
-       if ((ch = verifyChannel(tty)) != NULL) 
-       { /* Begin if channel valid */
-
+       if ((ch = verifyChannel(tty)) != NULL) { /* Begin if channel valid */
                unsigned long flags;
-
-               save_flags(flags);
-               cli();
-
+               spin_lock_irqsave(&epca_lock, flags);
                /* Just in case output was resumed because of a change in Digi-flow */
-               if (ch->statusflags & TXSTOPPED) 
-               { /* Begin transmit resume requested */
-
-                       volatile struct board_chan *bc;
-
+               if (ch->statusflags & TXSTOPPED)  { /* Begin transmit resume requested */
+                       struct board_chan *bc;
                        globalwinon(ch);
                        bc = ch->brdchan;
                        if (ch->statusflags & LOWWAIT)
-                               bc->ilow = 1;
-
+                               writeb(1, &bc->ilow);
                        /* Okay, you can start transmitting again... */
-
                        fepcmd(ch, RESUMETX, 0, 0, 0, 0);
-
                        ch->statusflags &= ~TXSTOPPED;
                        memoff(ch);
-
                } /* End transmit resume requested */
-
-               restore_flags(flags);
-
+               spin_unlock_irqrestore(&epca_lock, flags);
        } /* End if channel valid */
-
 } /* End pc_start */
 
 /* ------------------------------------------------------------------
@@ -3244,86 +2659,55 @@ ______________________________________________________________________ */
 
 static void pc_throttle(struct tty_struct * tty)
 { /* Begin pc_throttle */
-
        struct channel *ch;
        unsigned long flags;
-
        /* ---------------------------------------------------------
                verifyChannel returns the channel from the tty struct
                if it is valid.  This serves as a sanity check.
        ------------------------------------------------------------- */
-
-       if ((ch = verifyChannel(tty)) != NULL) 
-       { /* Begin if channel valid */
-
-
-               save_flags(flags);
-               cli();
-
-               if ((ch->statusflags & RXSTOPPED) == 0)
-               {
+       if ((ch = verifyChannel(tty)) != NULL)  { /* Begin if channel valid */
+               spin_lock_irqsave(&epca_lock, flags);
+               if ((ch->statusflags & RXSTOPPED) == 0) {
                        globalwinon(ch);
                        fepcmd(ch, PAUSERX, 0, 0, 0, 0);
-
                        ch->statusflags |= RXSTOPPED;
                        memoff(ch);
                }
-               restore_flags(flags);
-
+               spin_unlock_irqrestore(&epca_lock, flags);
        } /* End if channel valid */
-
 } /* End pc_throttle */
 
 /* --------------------- Begin unthrottle  ----------------------- */
 
 static void pc_unthrottle(struct tty_struct *tty)
 { /* Begin pc_unthrottle */
-
        struct channel *ch;
        unsigned long flags;
-       volatile struct board_chan *bc;
-
-
        /* ---------------------------------------------------------
                verifyChannel returns the channel from the tty struct
                if it is valid.  This serves as a sanity check.
        ------------------------------------------------------------- */
-
-       if ((ch = verifyChannel(tty)) != NULL) 
-       { /* Begin if channel valid */
-
-
+       if ((ch = verifyChannel(tty)) != NULL)  { /* Begin if channel valid */
                /* Just in case output was resumed because of a change in Digi-flow */
-               save_flags(flags);
-               cli();
-
-               if (ch->statusflags & RXSTOPPED) 
-               {
-
+               spin_lock_irqsave(&epca_lock, flags);
+               if (ch->statusflags & RXSTOPPED) {
                        globalwinon(ch);
-                       bc = ch->brdchan;
                        fepcmd(ch, RESUMERX, 0, 0, 0, 0);
-
                        ch->statusflags &= ~RXSTOPPED;
                        memoff(ch);
                }
-               restore_flags(flags);
-
+               spin_unlock_irqrestore(&epca_lock, flags);
        } /* End if channel valid */
-
 } /* End pc_unthrottle */
 
 /* --------------------- Begin digi_send_break  ----------------------- */
 
 void digi_send_break(struct channel *ch, int msec)
 { /* Begin digi_send_break */
-
        unsigned long flags;
 
-       save_flags(flags);
-       cli();
+       spin_lock_irqsave(&epca_lock, flags);
        globalwinon(ch);
-
        /* -------------------------------------------------------------------- 
           Maybe I should send an infinite break here, schedule() for
           msec amount of time, and then stop the break.  This way,
@@ -3331,36 +2715,28 @@ void digi_send_break(struct channel *ch, int msec)
           to be called (i.e. via an ioctl()) more than once in msec amount 
           of time.  Try this for now...
        ------------------------------------------------------------------------ */
-
        fepcmd(ch, SENDBREAK, msec, 0, 10, 0);
        memoff(ch);
-
-       restore_flags(flags);
-
+       spin_unlock_irqrestore(&epca_lock, flags);
 } /* End digi_send_break */
 
 /* --------------------- Begin setup_empty_event  ----------------------- */
 
+/* Caller MUST hold the lock */
+
 static void setup_empty_event(struct tty_struct *tty, struct channel *ch)
 { /* Begin setup_empty_event */
 
-       volatile struct board_chan *bc = ch->brdchan;
-       unsigned long int flags;
+       struct board_chan *bc = ch->brdchan;
 
-       save_flags(flags);
-       cli();
        globalwinon(ch);
        ch->statusflags |= EMPTYWAIT;
-       
        /* ------------------------------------------------------------------
                When set the iempty flag request a event to be generated when the 
                transmit buffer is empty (If there is no BREAK in progress).
        --------------------------------------------------------------------- */
-
-       bc->iempty = 1;
+       writeb(1, &bc->iempty);
        memoff(ch);
-       restore_flags(flags);
-
 } /* End setup_empty_event */
 
 /* --------------------- Begin get_termio ----------------------- */
@@ -3369,10 +2745,10 @@ static int get_termio(struct tty_struct * tty, struct termio __user * termio)
 { /* Begin get_termio */
        return kernel_termios_to_user_termio(termio, tty->termios);
 } /* End get_termio */
+
 /* ---------------------- Begin epca_setup  -------------------------- */
 void epca_setup(char *str, int *ints)
 { /* Begin epca_setup */
-
        struct board_info board;
        int               index, loop, last;
        char              *temp, *t2;
@@ -3394,49 +2770,41 @@ void epca_setup(char *str, int *ints)
        for (last = 0, index = 1; index <= ints[0]; index++)
                switch(index)
                { /* Begin parse switch */
-
                        case 1:
                                board.status = ints[index];
-                               
                                /* ---------------------------------------------------------
                                        We check for 2 (As opposed to 1; because 2 is a flag
                                        instructing the driver to ignore epcaconfig.)  For this
                                        reason we check for 2.
                                ------------------------------------------------------------ */ 
-                               if (board.status == 2)
-                               { /* Begin ignore epcaconfig as well as lilo cmd line */
+                               if (board.status == 2) { /* Begin ignore epcaconfig as well as lilo cmd line */
                                        nbdevs = 0;
                                        num_cards = 0;
                                        return;
                                } /* End ignore epcaconfig as well as lilo cmd line */
        
-                               if (board.status > 2)
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid board status 0x%x\n", board.status);
+                               if (board.status > 2) {
+                                       printk(KERN_ERR "epca_setup: Invalid board status 0x%x\n", board.status);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_BOARD_STATUS;
                                        return;
                                }
                                last = index;
                                break;
-
                        case 2:
                                board.type = ints[index];
-                               if (board.type >= PCIXEM) 
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid board type 0x%x\n", board.type);
+                               if (board.type >= PCIXEM)  {
+                                       printk(KERN_ERR "epca_setup: Invalid board type 0x%x\n", board.type);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_BOARD_TYPE;
                                        return;
                                }
                                last = index;
                                break;
-
                        case 3:
                                board.altpin = ints[index];
-                               if (board.altpin > 1)
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid board altpin 0x%x\n", board.altpin);
+                               if (board.altpin > 1) {
+                                       printk(KERN_ERR "epca_setup: Invalid board altpin 0x%x\n", board.altpin);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_ALTPIN;
                                        return;
@@ -3446,9 +2814,8 @@ void epca_setup(char *str, int *ints)
 
                        case 4:
                                board.numports = ints[index];
-                               if ((board.numports < 2) || (board.numports > 256))
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid board numports 0x%x\n", board.numports);
+                               if (board.numports < 2 || board.numports > 256) {
+                                       printk(KERN_ERR "epca_setup: Invalid board numports 0x%x\n", board.numports);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_NUM_PORTS;
                                        return;
@@ -3458,10 +2825,9 @@ void epca_setup(char *str, int *ints)
                                break;
 
                        case 5:
-                               board.port = (unsigned char *)ints[index];
-                               if (ints[index] <= 0)
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid io port 0x%x\n", (unsigned int)board.port);
+                               board.port = ints[index];
+                               if (ints[index] <= 0) {
+                                       printk(KERN_ERR "epca_setup: Invalid io port 0x%x\n", (unsigned int)board.port);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_PORT_BASE;
                                        return;
@@ -3470,10 +2836,9 @@ void epca_setup(char *str, int *ints)
                                break;
 
                        case 6:
-                               board.membase = (unsigned char *)ints[index];
-                               if (ints[index] <= 0)
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid memory base 0x%x\n",(unsigned int)board.membase);
+                               board.membase = ints[index];
+                               if (ints[index] <= 0) {
+                                       printk(KERN_ERR "epca_setup: Invalid memory base 0x%x\n",(unsigned int)board.membase);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_MEM_BASE;
                                        return;
@@ -3487,21 +2852,16 @@ void epca_setup(char *str, int *ints)
 
                } /* End parse switch */
 
-       while (str && *str) 
-       { /* Begin while there is a string arg */
-
+       while (str && *str)  { /* Begin while there is a string arg */
                /* find the next comma or terminator */
                temp = str;
-
                /* While string is not null, and a comma hasn't been found */
                while (*temp && (*temp != ','))
                        temp++;
-
                if (!*temp)
                        temp = NULL;
                else
                        *temp++ = 0;
-
                /* Set index to the number of args + 1 */
                index = last + 1;
 
@@ -3511,12 +2871,10 @@ void epca_setup(char *str, int *ints)
                                len = strlen(str);
                                if (strncmp("Disable", str, len) == 0) 
                                        board.status = 0;
-                               else
-                               if (strncmp("Enable", str, len) == 0)
+                               else if (strncmp("Enable", str, len) == 0)
                                        board.status = 1;
-                               else
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid status %s\n", str);
+                               else {
+                                       printk(KERN_ERR "epca_setup: Invalid status %s\n", str);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_BOARD_STATUS;
                                        return;
@@ -3525,22 +2883,17 @@ void epca_setup(char *str, int *ints)
                                break;
 
                        case 2:
-
                                for(loop = 0; loop < EPCA_NUM_TYPES; loop++)
                                        if (strcmp(board_desc[loop], str) == 0)
                                                break;
-
-
                                /* ---------------------------------------------------------------
                                        If the index incremented above refers to a legitamate board 
                                        type set it here. 
                                ------------------------------------------------------------------*/
-
                                if (index < EPCA_NUM_TYPES) 
                                        board.type = loop;
-                               else
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid board type: %s\n", str);
+                               else {
+                                       printk(KERN_ERR "epca_setup: Invalid board type: %s\n", str);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_BOARD_TYPE;
                                        return;
@@ -3552,12 +2905,10 @@ void epca_setup(char *str, int *ints)
                                len = strlen(str);
                                if (strncmp("Disable", str, len) == 0) 
                                        board.altpin = 0;
-                               else
-                               if (strncmp("Enable", str, len) == 0)
+                               else if (strncmp("Enable", str, len) == 0)
                                        board.altpin = 1;
-                               else
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid altpin %s\n", str);
+                               else {
+                                       printk(KERN_ERR "epca_setup: Invalid altpin %s\n", str);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_ALTPIN;
                                        return;
@@ -3570,9 +2921,8 @@ void epca_setup(char *str, int *ints)
                                while (isdigit(*t2))
                                        t2++;
 
-                               if (*t2)
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid port count %s\n", str);
+                               if (*t2) {
+                                       printk(KERN_ERR "epca_setup: Invalid port count %s\n", str);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_NUM_PORTS;
                                        return;
@@ -3601,15 +2951,14 @@ void epca_setup(char *str, int *ints)
                                while (isxdigit(*t2))
                                        t2++;
 
-                               if (*t2)
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid i/o address %s\n", str);
+                               if (*t2) {
+                                       printk(KERN_ERR "epca_setup: Invalid i/o address %s\n", str);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_PORT_BASE;
                                        return;
                                }
 
-                               board.port = (unsigned char *)simple_strtoul(str, NULL, 16);
+                               board.port = simple_strtoul(str, NULL, 16);
                                last = index;
                                break;
 
@@ -3618,52 +2967,38 @@ void epca_setup(char *str, int *ints)
                                while (isxdigit(*t2))
                                        t2++;
 
-                               if (*t2)
-                               {
-                                       printk(KERN_ERR "<Error> - epca_setup: Invalid memory base %s\n",str);
+                               if (*t2) {
+                                       printk(KERN_ERR "epca_setup: Invalid memory base %s\n",str);
                                        invalid_lilo_config = 1;
                                        setup_error_code |= INVALID_MEM_BASE;
                                        return;
                                }
-
-                               board.membase = (unsigned char *)simple_strtoul(str, NULL, 16);
+                               board.membase = simple_strtoul(str, NULL, 16);
                                last = index;
                                break;
-
                        default:
-                               printk(KERN_ERR "PC/Xx: Too many string parms\n");
+                               printk(KERN_ERR "epca: Too many string parms\n");
                                return;
                }
                str = temp;
-
        } /* End while there is a string arg */
 
-
-       if (last < 6)  
-       {
-               printk(KERN_ERR "PC/Xx: Insufficient parms specified\n");
+       if (last < 6) {
+               printk(KERN_ERR "epca: Insufficient parms specified\n");
                return;
        }
  
        /* I should REALLY validate the stuff here */
-
        /* Copies our local copy of board into boards */
        memcpy((void *)&boards[num_cards],(void *)&board, sizeof(board));
-
-
        /* Does this get called once per lilo arg are what ? */
-
        printk(KERN_INFO "PC/Xx: Added board %i, %s %i ports at 0x%4.4X base 0x%6.6X\n", 
                num_cards, board_desc[board.type], 
                board.numports, (int)board.port, (unsigned int) board.membase);
-
        num_cards++;
-
 } /* End epca_setup */
 
 
-
-#ifdef ENABLE_PCI
 /* ------------------------ Begin init_PCI  --------------------------- */
 
 enum epic_board_types {
@@ -3685,7 +3020,6 @@ static struct {
        { PCIXRJ, 2, },
 };
 
-
 static int __devinit epca_init_one (struct pci_dev *pdev,
                                 const struct pci_device_id *ent)
 {
@@ -3711,10 +3045,8 @@ static int __devinit epca_init_one (struct pci_dev *pdev,
        boards[board_idx].status = ENABLED;
        boards[board_idx].type = epca_info_tbl[info_idx].board_type;
        boards[board_idx].numports = 0x0;
-       boards[board_idx].port =
-               (unsigned char *)((char *) addr + PCI_IO_OFFSET);
-       boards[board_idx].membase =
-               (unsigned char *)((char *) addr);
+       boards[board_idx].port = addr + PCI_IO_OFFSET;
+       boards[board_idx].membase = addr;
 
        if (!request_mem_region (addr + PCI_IO_OFFSET, 0x200000, "epca")) {
                printk (KERN_ERR PFX "resource 0x%x @ 0x%lx unavailable\n",
@@ -3775,15 +3107,13 @@ static struct pci_device_id epca_pci_tbl[] = {
 MODULE_DEVICE_TABLE(pci, epca_pci_tbl);
 
 int __init init_PCI (void)
-{ /* Begin init_PCI */
+{      /* Begin init_PCI */
        memset (&epca_driver, 0, sizeof (epca_driver));
        epca_driver.name = "epca";
        epca_driver.id_table = epca_pci_tbl;
        epca_driver.probe = epca_init_one;
 
        return pci_register_driver(&epca_driver);
-} /* End init_PCI */
-
-#endif /* ENABLE_PCI */
+}
 
 MODULE_LICENSE("GPL");
index 52205ef7131483ae59a17a0220c3803fe0939741..20eeb5a70e1ad841c9b73490df25d82d6c7f8786 100644 (file)
@@ -85,73 +85,73 @@ static char *board_desc[] =
 struct channel 
 {
        long   magic;
-       unchar boardnum;
-       unchar channelnum;
-       unchar omodem;         /* FEP output modem status     */
-       unchar imodem;         /* FEP input modem status      */
-       unchar modemfake;      /* Modem values to be forced   */
-       unchar modem;          /* Force values                */
-       unchar hflow;
-       unchar dsr;
-       unchar dcd;
-       unchar m_rts ;          /* The bits used in whatever FEP */
-       unchar m_dcd ;          /* is indiginous to this board to */
-       unchar m_dsr ;          /* represent each of the physical */
-       unchar m_cts ;          /* handshake lines */
-       unchar m_ri ;
-       unchar m_dtr ;
-       unchar stopc;
-       unchar startc;
-       unchar stopca;
-       unchar startca;
-       unchar fepstopc;
-       unchar fepstartc;
-       unchar fepstopca;
-       unchar fepstartca;
-       unchar txwin;
-       unchar rxwin;
-       ushort fepiflag;
-       ushort fepcflag;
-       ushort fepoflag;
-       ushort txbufhead;
-       ushort txbufsize;
-       ushort rxbufhead;
-       ushort rxbufsize;
+       unsigned char boardnum;
+       unsigned char channelnum;
+       unsigned char omodem;         /* FEP output modem status     */
+       unsigned char imodem;         /* FEP input modem status      */
+       unsigned char modemfake;      /* Modem values to be forced   */
+       unsigned char modem;          /* Force values                */
+       unsigned char hflow;
+       unsigned char dsr;
+       unsigned char dcd;
+       unsigned char m_rts ;           /* The bits used in whatever FEP */
+       unsigned char m_dcd ;           /* is indiginous to this board to */
+       unsigned char m_dsr ;           /* represent each of the physical */
+       unsigned char m_cts ;           /* handshake lines */
+       unsigned char m_ri ;
+       unsigned char m_dtr ;
+       unsigned char stopc;
+       unsigned char startc;
+       unsigned char stopca;
+       unsigned char startca;
+       unsigned char fepstopc;
+       unsigned char fepstartc;
+       unsigned char fepstopca;
+       unsigned char fepstartca;
+       unsigned char txwin;
+       unsigned char rxwin;
+       unsigned short fepiflag;
+       unsigned short fepcflag;
+       unsigned short fepoflag;
+       unsigned short txbufhead;
+       unsigned short txbufsize;
+       unsigned short rxbufhead;
+       unsigned short rxbufsize;
        int    close_delay;
        int    count;
        int    blocked_open;
-       ulong  event;
+       unsigned long  event;
        int    asyncflags;
        uint   dev;
-       ulong  statusflags;
-       ulong  c_iflag;
-       ulong  c_cflag;
-       ulong  c_lflag;
-       ulong  c_oflag;
-       unchar *txptr;
-       unchar *rxptr;
-       unchar *tmp_buf;
+       unsigned long  statusflags;
+       unsigned long  c_iflag;
+       unsigned long  c_cflag;
+       unsigned long  c_lflag;
+       unsigned long  c_oflag;
+       unsigned char *txptr;
+       unsigned char *rxptr;
+       unsigned char *tmp_buf;
        struct board_info           *board;
-       volatile struct board_chan  *brdchan;
+       struct board_chan           *brdchan;
        struct digi_struct          digiext;
        struct tty_struct           *tty;
        wait_queue_head_t           open_wait;
        wait_queue_head_t           close_wait;
-       struct work_struct            tqueue;
-       volatile struct global_data *mailbox;
+       struct work_struct          tqueue;
+       struct global_data          *mailbox;
 };
 
 struct board_info      
 {
-       unchar status;
-       unchar type;
-       unchar altpin;
-       ushort numports;
-       unchar *port;
-       unchar *membase;
-       unchar __iomem *re_map_port;
-       unchar *re_map_membase;
-       ulong  memory_seg;
+       unsigned char status;
+       unsigned char type;
+       unsigned char altpin;
+       unsigned short numports;
+       unsigned long port;
+       unsigned long membase;
+       unsigned char __iomem *re_map_port;
+       unsigned char *re_map_membase;
+       unsigned long  memory_seg;
        void ( * memwinon )     (struct board_info *, unsigned int) ;
        void ( * memwinoff )    (struct board_info *, unsigned int) ;
        void ( * globalwinon )  (struct channel *) ;
@@ -160,6 +160,6 @@ struct board_info
        void ( * memoff )       (struct channel *) ;
        void ( * assertgwinon ) (struct channel *) ;
        void ( * assertmemoff ) (struct channel *) ;
-       unchar poller_inhibited ;
+       unsigned char poller_inhibited ;
 };
 
index 762fa430fb5be3b6a7615eed705e741509475ba7..5fe8461271fc35812222bd2b2e2f8e138d1ffc02 100644 (file)
@@ -44,7 +44,7 @@
 /*
  * The High Precision Event Timer driver.
  * This driver is closely modelled after the rtc.c driver.
- * http://www.intel.com/labs/platcomp/hpet/hpetspec.htm
+ * http://www.intel.com/hardwaredesign/hpetspec.htm
  */
 #define        HPET_USER_FREQ  (64)
 #define        HPET_DRIFT      (500)
@@ -712,7 +712,7 @@ static void hpet_register_interpolator(struct hpets *hpetp)
        ti->shift = 10;
        ti->addr = &hpetp->hp_hpet->hpet_mc;
        ti->frequency = hpet_time_div(hpets->hp_period);
-       ti->drift = ti->frequency * HPET_DRIFT / 1000000;
+       ti->drift = HPET_DRIFT;
        ti->mask = -1;
 
        hpetp->hp_interpolator = ti;
@@ -906,11 +906,15 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data)
                if (irqp->number_of_interrupts > 0) {
                        hdp->hd_nirqs = irqp->number_of_interrupts;
 
-                       for (i = 0; i < hdp->hd_nirqs; i++)
-                               hdp->hd_irq[i] =
+                       for (i = 0; i < hdp->hd_nirqs; i++) {
+                               int rc =
                                    acpi_register_gsi(irqp->interrupts[i],
                                                      irqp->edge_level,
                                                      irqp->active_high_low);
+                               if (rc < 0)
+                                       return AE_ERROR;
+                               hdp->hd_irq[i] = rc;
+                       }
                }
        }
 
index 5ce9c62690334cdf50ada526ec2c2a123b087849..33862670e285542fe7f4733fc299aef0346db31c 100644 (file)
@@ -31,8 +31,6 @@
 #include <linux/ipmi_msgdefs.h>                /* for completion codes */
 #include "ipmi_si_sm.h"
 
-#define IPMI_BT_VERSION "v33"
-
 static int bt_debug = 0x00;    /* Production value 0, see following flags */
 
 #define        BT_DEBUG_ENABLE 1
@@ -163,7 +161,8 @@ static int bt_start_transaction(struct si_sm_data *bt,
 {
        unsigned int i;
 
-       if ((size < 2) || (size > IPMI_MAX_MSG_LENGTH)) return -1;
+       if ((size < 2) || (size > IPMI_MAX_MSG_LENGTH))
+              return -1;
 
        if ((bt->state != BT_STATE_IDLE) && (bt->state != BT_STATE_HOSED))
                return -2;
@@ -171,7 +170,8 @@ static int bt_start_transaction(struct si_sm_data *bt,
        if (bt_debug & BT_DEBUG_MSG) {
                printk(KERN_WARNING "+++++++++++++++++++++++++++++++++++++\n");
                printk(KERN_WARNING "BT: write seq=0x%02X:", bt->seq);
-               for (i = 0; i < size; i ++) printk (" %02x", data[i]);
+               for (i = 0; i < size; i ++)
+                      printk (" %02x", data[i]);
                printk("\n");
        }
        bt->write_data[0] = size + 1;   /* all data plus seq byte */
@@ -210,15 +210,18 @@ static int bt_get_result(struct si_sm_data *bt,
        } else {
                data[0] = bt->read_data[1];
                data[1] = bt->read_data[3];
-               if (length < msg_len) bt->truncated = 1;
+               if (length < msg_len)
+                      bt->truncated = 1;
                if (bt->truncated) {    /* can be set in read_all_bytes() */
                        data[2] = IPMI_ERR_MSG_TRUNCATED;
                        msg_len = 3;
-               } else memcpy(data + 2, bt->read_data + 4, msg_len - 2);
+               } else
+                      memcpy(data + 2, bt->read_data + 4, msg_len - 2);
 
                if (bt_debug & BT_DEBUG_MSG) {
                        printk (KERN_WARNING "BT: res (raw)");
-                       for (i = 0; i < msg_len; i++) printk(" %02x", data[i]);
+                       for (i = 0; i < msg_len; i++)
+                              printk(" %02x", data[i]);
                        printk ("\n");
                }
        }
@@ -231,8 +234,10 @@ static int bt_get_result(struct si_sm_data *bt,
 
 static void reset_flags(struct si_sm_data *bt)
 {
-       if (BT_STATUS & BT_H_BUSY) BT_CONTROL(BT_H_BUSY);
-       if (BT_STATUS & BT_B_BUSY) BT_CONTROL(BT_B_BUSY);
+       if (BT_STATUS & BT_H_BUSY)
+              BT_CONTROL(BT_H_BUSY);
+       if (BT_STATUS & BT_B_BUSY)
+              BT_CONTROL(BT_B_BUSY);
        BT_CONTROL(BT_CLR_WR_PTR);
        BT_CONTROL(BT_SMS_ATN);
 #ifdef DEVELOPMENT_ONLY_NOT_FOR_PRODUCTION
@@ -241,7 +246,8 @@ static void reset_flags(struct si_sm_data *bt)
                BT_CONTROL(BT_H_BUSY);
                BT_CONTROL(BT_B2H_ATN);
                BT_CONTROL(BT_CLR_RD_PTR);
-               for (i = 0; i < IPMI_MAX_MSG_LENGTH + 2; i++) BMC2HOST;
+               for (i = 0; i < IPMI_MAX_MSG_LENGTH + 2; i++)
+                      BMC2HOST;
                BT_CONTROL(BT_H_BUSY);
        }
 #endif
@@ -258,7 +264,8 @@ static inline void write_all_bytes(struct si_sm_data *bt)
                        printk (" %02x", bt->write_data[i]);
                printk ("\n");
        }
-       for (i = 0; i < bt->write_count; i++) HOST2BMC(bt->write_data[i]);
+       for (i = 0; i < bt->write_count; i++)
+              HOST2BMC(bt->write_data[i]);
 }
 
 static inline int read_all_bytes(struct si_sm_data *bt)
@@ -278,7 +285,8 @@ static inline int read_all_bytes(struct si_sm_data *bt)
                bt->truncated = 1;
                return 1;       /* let next XACTION START clean it up */
        }
-       for (i = 1; i <= bt->read_count; i++) bt->read_data[i] = BMC2HOST;
+       for (i = 1; i <= bt->read_count; i++)
+              bt->read_data[i] = BMC2HOST;
        bt->read_count++;       /* account for the length byte */
 
        if (bt_debug & BT_DEBUG_MSG) {
@@ -295,7 +303,8 @@ static inline int read_all_bytes(struct si_sm_data *bt)
                ((bt->read_data[1] & 0xF8) == (bt->write_data[1] & 0xF8)))
                        return 1;
 
-       if (bt_debug & BT_DEBUG_MSG) printk(KERN_WARNING "BT: bad packet: "
+       if (bt_debug & BT_DEBUG_MSG)
+              printk(KERN_WARNING "BT: bad packet: "
                "want 0x(%02X, %02X, %02X) got (%02X, %02X, %02X)\n",
                bt->write_data[1], bt->write_data[2], bt->write_data[3],
                bt->read_data[1],  bt->read_data[2],  bt->read_data[3]);
@@ -359,7 +368,8 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
                        time);
        bt->last_state = bt->state;
 
-       if (bt->state == BT_STATE_HOSED) return SI_SM_HOSED;
+       if (bt->state == BT_STATE_HOSED)
+              return SI_SM_HOSED;
 
        if (bt->state != BT_STATE_IDLE) {       /* do timeout test */
 
@@ -371,7 +381,8 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
        /* FIXME: bt_event is sometimes called with time > BT_NORMAL_TIMEOUT
               (noticed in ipmi_smic_sm.c January 2004) */
 
-               if ((time <= 0) || (time >= BT_NORMAL_TIMEOUT)) time = 100;
+               if ((time <= 0) || (time >= BT_NORMAL_TIMEOUT))
+                      time = 100;
                bt->timeout -= time;
                if ((bt->timeout < 0) && (bt->state < BT_STATE_RESET1)) {
                        error_recovery(bt, "timed out");
@@ -393,12 +404,14 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
                        BT_CONTROL(BT_H_BUSY);
                        break;
                }
-               if (status & BT_B2H_ATN) break;
+               if (status & BT_B2H_ATN)
+                      break;
                bt->state = BT_STATE_WRITE_BYTES;
                return SI_SM_CALL_WITHOUT_DELAY;        /* for logging */
 
        case BT_STATE_WRITE_BYTES:
-               if (status & (BT_B_BUSY | BT_H2B_ATN)) break;
+               if (status & (BT_B_BUSY | BT_H2B_ATN))
+                      break;
                BT_CONTROL(BT_CLR_WR_PTR);
                write_all_bytes(bt);
                BT_CONTROL(BT_H2B_ATN); /* clears too fast to catch? */
@@ -406,7 +419,8 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
                return SI_SM_CALL_WITHOUT_DELAY; /* it MIGHT sail through */
 
        case BT_STATE_WRITE_CONSUME: /* BMCs usually blow right thru here */
-               if (status & (BT_H2B_ATN | BT_B_BUSY)) break;
+               if (status & (BT_H2B_ATN | BT_B_BUSY))
+                      break;
                bt->state = BT_STATE_B2H_WAIT;
                /* fall through with status */
 
@@ -415,15 +429,18 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
           generation of B2H_ATN so ALWAYS return CALL_WITH_DELAY. */
 
        case BT_STATE_B2H_WAIT:
-               if (!(status & BT_B2H_ATN)) break;
+               if (!(status & BT_B2H_ATN))
+                      break;
 
                /* Assume ordered, uncached writes: no need to wait */
-               if (!(status & BT_H_BUSY)) BT_CONTROL(BT_H_BUSY); /* set */
+               if (!(status & BT_H_BUSY))
+                      BT_CONTROL(BT_H_BUSY); /* set */
                BT_CONTROL(BT_B2H_ATN);         /* clear it, ACK to the BMC */
                BT_CONTROL(BT_CLR_RD_PTR);      /* reset the queue */
                i = read_all_bytes(bt);
                BT_CONTROL(BT_H_BUSY);          /* clear */
-               if (!i) break;                  /* Try this state again */
+               if (!i)                         /* Try this state again */
+                      break;
                bt->state = BT_STATE_READ_END;
                return SI_SM_CALL_WITHOUT_DELAY;        /* for logging */
 
@@ -436,7 +453,8 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
 
 #ifdef MAKE_THIS_TRUE_IF_NECESSARY
 
-               if (status & BT_H_BUSY) break;
+               if (status & BT_H_BUSY)
+                      break;
 #endif
                bt->seq++;
                bt->state = BT_STATE_IDLE;
@@ -459,7 +477,8 @@ static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
                break;
 
        case BT_STATE_RESET3:
-               if (bt->timeout > 0) return SI_SM_CALL_WITH_DELAY;
+               if (bt->timeout > 0)
+                      return SI_SM_CALL_WITH_DELAY;
                bt->state = BT_STATE_RESTART;   /* printk in debug modes */
                break;
 
@@ -485,7 +504,8 @@ static int bt_detect(struct si_sm_data *bt)
           but that's what you get from reading a bogus address, so we
           test that first.  The calling routine uses negative logic. */
 
-       if ((BT_STATUS == 0xFF) && (BT_INTMASK_R == 0xFF)) return 1;
+       if ((BT_STATUS == 0xFF) && (BT_INTMASK_R == 0xFF))
+              return 1;
        reset_flags(bt);
        return 0;
 }
@@ -501,7 +521,6 @@ static int bt_size(void)
 
 struct si_sm_handlers bt_smi_handlers =
 {
-       .version           = IPMI_BT_VERSION,
        .init_data         = bt_init_data,
        .start_transaction = bt_start_transaction,
        .get_result        = bt_get_result,
index e0a53570fea1a755485a90f1aa59c8778d753b26..883ac4352be49e4e1606e361d763a8503199a058 100644 (file)
@@ -47,8 +47,6 @@
 #include <linux/device.h>
 #include <linux/compat.h>
 
-#define IPMI_DEVINTF_VERSION "v33"
-
 struct ipmi_file_private
 {
        ipmi_user_t          user;
@@ -411,6 +409,7 @@ static int ipmi_ioctl(struct inode  *inode,
                break;
        }
 
+       /* The next four are legacy, not per-channel. */
        case IPMICTL_SET_MY_ADDRESS_CMD:
        {
                unsigned int val;
@@ -420,22 +419,25 @@ static int ipmi_ioctl(struct inode  *inode,
                        break;
                }
 
-               ipmi_set_my_address(priv->user, val);
-               rv = 0;
+               rv = ipmi_set_my_address(priv->user, 0, val);
                break;
        }
 
        case IPMICTL_GET_MY_ADDRESS_CMD:
        {
-               unsigned int val;
+               unsigned int  val;
+               unsigned char rval;
+
+               rv = ipmi_get_my_address(priv->user, 0, &rval);
+               if (rv)
+                       break;
 
-               val = ipmi_get_my_address(priv->user);
+               val = rval;
 
                if (copy_to_user(arg, &val, sizeof(val))) {
                        rv = -EFAULT;
                        break;
                }
-               rv = 0;
                break;
        }
 
@@ -448,24 +450,94 @@ static int ipmi_ioctl(struct inode  *inode,
                        break;
                }
 
-               ipmi_set_my_LUN(priv->user, val);
-               rv = 0;
+               rv = ipmi_set_my_LUN(priv->user, 0, val);
                break;
        }
 
        case IPMICTL_GET_MY_LUN_CMD:
        {
-               unsigned int val;
+               unsigned int  val;
+               unsigned char rval;
 
-               val = ipmi_get_my_LUN(priv->user);
+               rv = ipmi_get_my_LUN(priv->user, 0, &rval);
+               if (rv)
+                       break;
+
+               val = rval;
+
+               if (copy_to_user(arg, &val, sizeof(val))) {
+                       rv = -EFAULT;
+                       break;
+               }
+               break;
+       }
+
+       case IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD:
+       {
+               struct ipmi_channel_lun_address_set val;
+
+               if (copy_from_user(&val, arg, sizeof(val))) {
+                       rv = -EFAULT;
+                       break;
+               }
+
+               return ipmi_set_my_address(priv->user, val.channel, val.value);
+               break;
+       }
+
+       case IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD:
+       {
+               struct ipmi_channel_lun_address_set val;
+
+               if (copy_from_user(&val, arg, sizeof(val))) {
+                       rv = -EFAULT;
+                       break;
+               }
+
+               rv = ipmi_get_my_address(priv->user, val.channel, &val.value);
+               if (rv)
+                       break;
+
+               if (copy_to_user(arg, &val, sizeof(val))) {
+                       rv = -EFAULT;
+                       break;
+               }
+               break;
+       }
+
+       case IPMICTL_SET_MY_CHANNEL_LUN_CMD:
+       {
+               struct ipmi_channel_lun_address_set val;
+
+               if (copy_from_user(&val, arg, sizeof(val))) {
+                       rv = -EFAULT;
+                       break;
+               }
+
+               rv = ipmi_set_my_LUN(priv->user, val.channel, val.value);
+               break;
+       }
+
+       case IPMICTL_GET_MY_CHANNEL_LUN_CMD:
+       {
+               struct ipmi_channel_lun_address_set val;
+
+               if (copy_from_user(&val, arg, sizeof(val))) {
+                       rv = -EFAULT;
+                       break;
+               }
+
+               rv = ipmi_get_my_LUN(priv->user, val.channel, &val.value);
+               if (rv)
+                       break;
 
                if (copy_to_user(arg, &val, sizeof(val))) {
                        rv = -EFAULT;
                        break;
                }
-               rv = 0;
                break;
        }
+
        case IPMICTL_SET_TIMING_PARMS_CMD:
        {
                struct ipmi_timing_parms parms;
@@ -748,8 +820,7 @@ static __init int init_ipmi_devintf(void)
        if (ipmi_major < 0)
                return -EINVAL;
 
-       printk(KERN_INFO "ipmi device interface version "
-              IPMI_DEVINTF_VERSION "\n");
+       printk(KERN_INFO "ipmi device interface\n");
 
        ipmi_class = class_create(THIS_MODULE, "ipmi");
        if (IS_ERR(ipmi_class)) {
@@ -792,3 +863,5 @@ static __exit void cleanup_ipmi(void)
 module_exit(cleanup_ipmi);
 
 MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
+MODULE_DESCRIPTION("Linux device interface for the IPMI message handler.");
index 48cce24329bea516b62a0f3578ea162a48b73556..d21853a594a3b74c2354988d523f8cdd0bbcf71d 100644 (file)
@@ -42,8 +42,6 @@
 #include <linux/ipmi_msgdefs.h>                /* for completion codes */
 #include "ipmi_si_sm.h"
 
-#define IPMI_KCS_VERSION "v33"
-
 /* Set this if you want a printout of why the state machine was hosed
    when it gets hosed. */
 #define DEBUG_HOSED_REASON
@@ -489,7 +487,6 @@ static void kcs_cleanup(struct si_sm_data *kcs)
 
 struct si_sm_handlers kcs_smi_handlers =
 {
-       .version           = IPMI_KCS_VERSION,
        .init_data         = init_kcs_data,
        .start_transaction = start_kcs_transaction,
        .get_result        = get_kcs_result,
index e16c13fe698dff7c71ad27508d64904f84be80be..463351d4f9423c388d424231326b8bbe23a60cd0 100644 (file)
@@ -47,7 +47,8 @@
 #include <linux/proc_fs.h>
 
 #define PFX "IPMI message handler: "
-#define IPMI_MSGHANDLER_VERSION "v33"
+
+#define IPMI_DRIVER_VERSION "36.0"
 
 static struct ipmi_recv_msg *ipmi_alloc_recv_msg(void);
 static int ipmi_init_msghandler(void);
@@ -116,7 +117,7 @@ struct seq_table
        do {                                                            \
                seq = ((msgid >> 26) & 0x3f);                           \
                seqid = (msgid & 0x3fffff);                             \
-        } while(0)
+        } while (0)
 
 #define NEXT_SEQID(seqid) (((seqid) + 1) & 0x3fffff)
 
@@ -124,6 +125,14 @@ struct ipmi_channel
 {
        unsigned char medium;
        unsigned char protocol;
+
+       /* My slave address.  This is initialized to IPMI_BMC_SLAVE_ADDR,
+          but may be changed by the user. */
+       unsigned char address;
+
+       /* My LUN.  This should generally stay the SMS LUN, but just in
+          case... */
+       unsigned char lun;
 };
 
 #ifdef CONFIG_PROC_FS
@@ -135,7 +144,7 @@ struct ipmi_proc_entry
 #endif
 
 #define IPMI_IPMB_NUM_SEQ      64
-#define IPMI_MAX_CHANNELS       8
+#define IPMI_MAX_CHANNELS       16
 struct ipmi_smi
 {
        /* What interface number are we? */
@@ -193,20 +202,6 @@ struct ipmi_smi
        struct list_head waiting_events;
        unsigned int     waiting_events_count; /* How many events in queue? */
 
-       /* This will be non-null if someone registers to receive all
-          IPMI commands (this is for interface emulation).  There
-          may not be any things in the cmd_rcvrs list above when
-          this is registered. */
-       ipmi_user_t all_cmd_rcvr;
-
-       /* My slave address.  This is initialized to IPMI_BMC_SLAVE_ADDR,
-          but may be changed by the user. */
-       unsigned char my_address;
-
-       /* My LUN.  This should generally stay the SMS LUN, but just in
-          case... */
-       unsigned char my_lun;
-
        /* The event receiver for my BMC, only really used at panic
           shutdown as a place to store this. */
        unsigned char event_receiver;
@@ -218,7 +213,7 @@ struct ipmi_smi
           interface comes in with a NULL user, call this routine with
           it.  Note that the message will still be freed by the
           caller.  This only works on the system interface. */
-       void (*null_user_handler)(ipmi_smi_t intf, struct ipmi_smi_msg *msg);
+       void (*null_user_handler)(ipmi_smi_t intf, struct ipmi_recv_msg *msg);
 
        /* When we are scanning the channels for an SMI, this will
           tell which channel we are scanning. */
@@ -325,7 +320,7 @@ int ipmi_smi_watcher_register(struct ipmi_smi_watcher *watcher)
        down_read(&interfaces_sem);
        down_write(&smi_watchers_sem);
        list_add(&(watcher->link), &smi_watchers);
-       for (i=0; i<MAX_IPMI_INTERFACES; i++) {
+       for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
                if (ipmi_interfaces[i] != NULL) {
                        watcher->new_smi(i);
                }
@@ -458,7 +453,27 @@ unsigned int ipmi_addr_length(int addr_type)
 
 static void deliver_response(struct ipmi_recv_msg *msg)
 {
-       msg->user->handler->ipmi_recv_hndl(msg, msg->user->handler_data);
+       if (! msg->user) {
+               ipmi_smi_t    intf = msg->user_msg_data;
+               unsigned long flags;
+
+               /* Special handling for NULL users. */
+               if (intf->null_user_handler) {
+                       intf->null_user_handler(intf, msg);
+                       spin_lock_irqsave(&intf->counter_lock, flags);
+                       intf->handled_local_responses++;
+                       spin_unlock_irqrestore(&intf->counter_lock, flags);
+               } else {
+                       /* No handler, so give up. */
+                       spin_lock_irqsave(&intf->counter_lock, flags);
+                       intf->unhandled_local_responses++;
+                       spin_unlock_irqrestore(&intf->counter_lock, flags);
+               }
+               ipmi_free_recv_msg(msg);
+       } else {
+               msg->user->handler->ipmi_recv_hndl(msg,
+                                                  msg->user->handler_data);
+       }
 }
 
 /* Find the next sequence number not being used and add the given
@@ -475,9 +490,9 @@ static int intf_next_seq(ipmi_smi_t           intf,
        int          rv = 0;
        unsigned int i;
 
-       for (i=intf->curr_seq;
+       for (i = intf->curr_seq;
             (i+1)%IPMI_IPMB_NUM_SEQ != intf->curr_seq;
-            i=(i+1)%IPMI_IPMB_NUM_SEQ)
+            i = (i+1)%IPMI_IPMB_NUM_SEQ)
        {
                if (! intf->seq_table[i].inuse)
                        break;
@@ -712,7 +727,7 @@ static int ipmi_destroy_user_nolock(ipmi_user_t user)
 
        /* Remove the user from the interfaces sequence table. */
        spin_lock_irqsave(&(user->intf->seq_lock), flags);
-       for (i=0; i<IPMI_IPMB_NUM_SEQ; i++) {
+       for (i = 0; i < IPMI_IPMB_NUM_SEQ; i++) {
                if (user->intf->seq_table[i].inuse
                    && (user->intf->seq_table[i].recv_msg->user == user))
                {
@@ -766,26 +781,44 @@ void ipmi_get_version(ipmi_user_t   user,
        *minor = user->intf->version_minor;
 }
 
-void ipmi_set_my_address(ipmi_user_t   user,
-                        unsigned char address)
+int ipmi_set_my_address(ipmi_user_t   user,
+                       unsigned int  channel,
+                       unsigned char address)
 {
-       user->intf->my_address = address;
+       if (channel >= IPMI_MAX_CHANNELS)
+               return -EINVAL;
+       user->intf->channels[channel].address = address;
+       return 0;
 }
 
-unsigned char ipmi_get_my_address(ipmi_user_t user)
+int ipmi_get_my_address(ipmi_user_t   user,
+                       unsigned int  channel,
+                       unsigned char *address)
 {
-       return user->intf->my_address;
+       if (channel >= IPMI_MAX_CHANNELS)
+               return -EINVAL;
+       *address = user->intf->channels[channel].address;
+       return 0;
 }
 
-void ipmi_set_my_LUN(ipmi_user_t   user,
-                    unsigned char LUN)
+int ipmi_set_my_LUN(ipmi_user_t   user,
+                   unsigned int  channel,
+                   unsigned char LUN)
 {
-       user->intf->my_lun = LUN & 0x3;
+       if (channel >= IPMI_MAX_CHANNELS)
+               return -EINVAL;
+       user->intf->channels[channel].lun = LUN & 0x3;
+       return 0;
 }
 
-unsigned char ipmi_get_my_LUN(ipmi_user_t user)
+int ipmi_get_my_LUN(ipmi_user_t   user,
+                   unsigned int  channel,
+                   unsigned char *address)
 {
-       return user->intf->my_lun;
+       if (channel >= IPMI_MAX_CHANNELS)
+               return -EINVAL;
+       *address = user->intf->channels[channel].lun;
+       return 0;
 }
 
 int ipmi_set_gets_events(ipmi_user_t user, int val)
@@ -828,11 +861,6 @@ int ipmi_register_for_cmd(ipmi_user_t   user,
 
        read_lock(&(user->intf->users_lock));
        write_lock_irqsave(&(user->intf->cmd_rcvr_lock), flags);
-       if (user->intf->all_cmd_rcvr != NULL) {
-               rv = -EBUSY;
-               goto out_unlock;
-       }
-
        /* Make sure the command/netfn is not already registered. */
        list_for_each_entry(cmp, &(user->intf->cmd_rcvrs), link) {
                if ((cmp->netfn == netfn) && (cmp->cmd == cmd)) {
@@ -847,7 +875,7 @@ int ipmi_register_for_cmd(ipmi_user_t   user,
                rcvr->user = user;
                list_add_tail(&(rcvr->link), &(user->intf->cmd_rcvrs));
        }
- out_unlock:
+
        write_unlock_irqrestore(&(user->intf->cmd_rcvr_lock), flags);
        read_unlock(&(user->intf->users_lock));
 
@@ -1213,7 +1241,7 @@ static inline int i_ipmi_request(ipmi_user_t          user,
                unsigned char         ipmb_seq;
                long                  seqid;
 
-               if (addr->channel > IPMI_NUM_CHANNELS) {
+               if (addr->channel >= IPMI_NUM_CHANNELS) {
                        spin_lock_irqsave(&intf->counter_lock, flags);
                        intf->sent_invalid_commands++;
                        spin_unlock_irqrestore(&intf->counter_lock, flags);
@@ -1331,7 +1359,7 @@ static inline int i_ipmi_request(ipmi_user_t          user,
 #ifdef DEBUG_MSGING
        {
                int m;
-               for (m=0; m<smi_msg->data_size; m++)
+               for (m = 0; m < smi_msg->data_size; m++)
                        printk(" %2.2x", smi_msg->data[m]);
                printk("\n");
        }
@@ -1346,6 +1374,18 @@ static inline int i_ipmi_request(ipmi_user_t          user,
        return rv;
 }
 
+static int check_addr(ipmi_smi_t       intf,
+                     struct ipmi_addr *addr,
+                     unsigned char    *saddr,
+                     unsigned char    *lun)
+{
+       if (addr->channel >= IPMI_MAX_CHANNELS)
+               return -EINVAL;
+       *lun = intf->channels[addr->channel].lun;
+       *saddr = intf->channels[addr->channel].address;
+       return 0;
+}
+
 int ipmi_request_settime(ipmi_user_t      user,
                         struct ipmi_addr *addr,
                         long             msgid,
@@ -1355,6 +1395,14 @@ int ipmi_request_settime(ipmi_user_t      user,
                         int              retries,
                         unsigned int     retry_time_ms)
 {
+       unsigned char saddr, lun;
+       int           rv;
+
+       if (! user)
+               return -EINVAL;
+       rv = check_addr(user->intf, addr, &saddr, &lun);
+       if (rv)
+               return rv;
        return i_ipmi_request(user,
                              user->intf,
                              addr,
@@ -1363,8 +1411,8 @@ int ipmi_request_settime(ipmi_user_t      user,
                              user_msg_data,
                              NULL, NULL,
                              priority,
-                             user->intf->my_address,
-                             user->intf->my_lun,
+                             saddr,
+                             lun,
                              retries,
                              retry_time_ms);
 }
@@ -1378,6 +1426,14 @@ int ipmi_request_supply_msgs(ipmi_user_t          user,
                             struct ipmi_recv_msg *supplied_recv,
                             int                  priority)
 {
+       unsigned char saddr, lun;
+       int           rv;
+
+       if (! user)
+               return -EINVAL;
+       rv = check_addr(user->intf, addr, &saddr, &lun);
+       if (rv)
+               return rv;
        return i_ipmi_request(user,
                              user->intf,
                              addr,
@@ -1387,8 +1443,8 @@ int ipmi_request_supply_msgs(ipmi_user_t          user,
                              supplied_smi,
                              supplied_recv,
                              priority,
-                             user->intf->my_address,
-                             user->intf->my_lun,
+                             saddr,
+                             lun,
                              -1, 0);
 }
 
@@ -1397,8 +1453,15 @@ static int ipmb_file_read_proc(char *page, char **start, off_t off,
 {
        char       *out = (char *) page;
        ipmi_smi_t intf = data;
+       int        i;
+       int        rv= 0;
 
-       return sprintf(out, "%x\n", intf->my_address);
+       for (i = 0; i < IPMI_MAX_CHANNELS; i++)
+               rv += sprintf(out+rv, "%x ", intf->channels[i].address);
+       out[rv-1] = '\n'; /* Replace the final space with a newline */
+       out[rv] = '\0';
+       rv++;
+       return rv;
 }
 
 static int version_file_read_proc(char *page, char **start, off_t off,
@@ -1588,29 +1651,30 @@ send_channel_info_cmd(ipmi_smi_t intf, int chan)
                              (struct ipmi_addr *) &si,
                              0,
                              &msg,
-                             NULL,
+                             intf,
                              NULL,
                              NULL,
                              0,
-                             intf->my_address,
-                             intf->my_lun,
+                             intf->channels[0].address,
+                             intf->channels[0].lun,
                              -1, 0);
 }
 
 static void
-channel_handler(ipmi_smi_t intf, struct ipmi_smi_msg *msg)
+channel_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
 {
        int rv = 0;
        int chan;
 
-       if ((msg->rsp[0] == (IPMI_NETFN_APP_RESPONSE << 2))
-           && (msg->rsp[1] == IPMI_GET_CHANNEL_INFO_CMD))
+       if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
+           && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE)
+           && (msg->msg.cmd == IPMI_GET_CHANNEL_INFO_CMD))
        {
                /* It's the one we want */
-               if (msg->rsp[2] != 0) {
+               if (msg->msg.data[0] != 0) {
                        /* Got an error from the channel, just go on. */
 
-                       if (msg->rsp[2] == IPMI_INVALID_COMMAND_ERR) {
+                       if (msg->msg.data[0] == IPMI_INVALID_COMMAND_ERR) {
                                /* If the MC does not support this
                                   command, that is legal.  We just
                                   assume it has one IPMB at channel
@@ -1627,13 +1691,13 @@ channel_handler(ipmi_smi_t intf, struct ipmi_smi_msg *msg)
                        }
                        goto next_channel;
                }
-               if (msg->rsp_size < 6) {
+               if (msg->msg.data_len < 4) {
                        /* Message not big enough, just go on. */
                        goto next_channel;
                }
                chan = intf->curr_channel;
-               intf->channels[chan].medium = msg->rsp[4] & 0x7f;
-               intf->channels[chan].protocol = msg->rsp[5] & 0x1f;
+               intf->channels[chan].medium = msg->msg.data[2] & 0x7f;
+               intf->channels[chan].protocol = msg->msg.data[3] & 0x1f;
 
        next_channel:
                intf->curr_channel++;
@@ -1691,22 +1755,24 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers,
        rv = -ENOMEM;
 
        down_write(&interfaces_sem);
-       for (i=0; i<MAX_IPMI_INTERFACES; i++) {
+       for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
                if (ipmi_interfaces[i] == NULL) {
                        new_intf->intf_num = i;
                        new_intf->version_major = version_major;
                        new_intf->version_minor = version_minor;
-                       if (slave_addr == 0)
-                               new_intf->my_address = IPMI_BMC_SLAVE_ADDR;
-                       else
-                               new_intf->my_address = slave_addr;
-                       new_intf->my_lun = 2;  /* the SMS LUN. */
+                       for (j = 0; j < IPMI_MAX_CHANNELS; j++) {
+                               new_intf->channels[j].address
+                                       = IPMI_BMC_SLAVE_ADDR;
+                               new_intf->channels[j].lun = 2;
+                       }
+                       if (slave_addr != 0)
+                               new_intf->channels[0].address = slave_addr;
                        rwlock_init(&(new_intf->users_lock));
                        INIT_LIST_HEAD(&(new_intf->users));
                        new_intf->handlers = handlers;
                        new_intf->send_info = send_info;
                        spin_lock_init(&(new_intf->seq_lock));
-                       for (j=0; j<IPMI_IPMB_NUM_SEQ; j++) {
+                       for (j = 0; j < IPMI_IPMB_NUM_SEQ; j++) {
                                new_intf->seq_table[j].inuse = 0;
                                new_intf->seq_table[j].seqid = 0;
                        }
@@ -1722,7 +1788,6 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers,
                        rwlock_init(&(new_intf->cmd_rcvr_lock));
                        init_waitqueue_head(&new_intf->waitq);
                        INIT_LIST_HEAD(&(new_intf->cmd_rcvrs));
-                       new_intf->all_cmd_rcvr = NULL;
 
                        spin_lock_init(&(new_intf->counter_lock));
 
@@ -1814,7 +1879,7 @@ static void clean_up_interface_data(ipmi_smi_t intf)
        free_recv_msg_list(&(intf->waiting_events));
        free_cmd_rcvr_list(&(intf->cmd_rcvrs));
 
-       for (i=0; i<IPMI_IPMB_NUM_SEQ; i++) {
+       for (i = 0; i < IPMI_IPMB_NUM_SEQ; i++) {
                if ((intf->seq_table[i].inuse)
                    && (intf->seq_table[i].recv_msg))
                {
@@ -1833,7 +1898,7 @@ int ipmi_unregister_smi(ipmi_smi_t intf)
        down_write(&interfaces_sem);
        if (list_empty(&(intf->users)))
        {
-               for (i=0; i<MAX_IPMI_INTERFACES; i++) {
+               for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
                        if (ipmi_interfaces[i] == intf) {
                                remove_proc_entries(intf);
                                spin_lock_irqsave(&interfaces_lock, flags);
@@ -1960,15 +2025,11 @@ static int handle_ipmb_get_msg_cmd(ipmi_smi_t          intf,
 
        read_lock(&(intf->cmd_rcvr_lock));
        
-       if (intf->all_cmd_rcvr) {
-               user = intf->all_cmd_rcvr;
-       } else {
-               /* Find the command/netfn. */
-               list_for_each_entry(rcvr, &(intf->cmd_rcvrs), link) {
-                       if ((rcvr->netfn == netfn) && (rcvr->cmd == cmd)) {
-                               user = rcvr->user;
-                               break;
-                       }
+       /* Find the command/netfn. */
+       list_for_each_entry(rcvr, &(intf->cmd_rcvrs), link) {
+               if ((rcvr->netfn == netfn) && (rcvr->cmd == cmd)) {
+                       user = rcvr->user;
+                       break;
                }
        }
        read_unlock(&(intf->cmd_rcvr_lock));
@@ -1985,7 +2046,7 @@ static int handle_ipmb_get_msg_cmd(ipmi_smi_t          intf,
                msg->data[3] = msg->rsp[6];
                 msg->data[4] = ((netfn + 1) << 2) | (msg->rsp[7] & 0x3);
                msg->data[5] = ipmb_checksum(&(msg->data[3]), 2);
-               msg->data[6] = intf->my_address;
+               msg->data[6] = intf->channels[msg->rsp[3] & 0xf].address;
                 /* rqseq/lun */
                 msg->data[7] = (msg->rsp[7] & 0xfc) | (msg->rsp[4] & 0x3);
                msg->data[8] = msg->rsp[8]; /* cmd */
@@ -1997,7 +2058,7 @@ static int handle_ipmb_get_msg_cmd(ipmi_smi_t          intf,
        {
                int m;
                printk("Invalid command:");
-               for (m=0; m<msg->data_size; m++)
+               for (m = 0; m < msg->data_size; m++)
                        printk(" %2.2x", msg->data[m]);
                printk("\n");
        }
@@ -2145,15 +2206,11 @@ static int handle_lan_get_msg_cmd(ipmi_smi_t          intf,
 
        read_lock(&(intf->cmd_rcvr_lock));
 
-       if (intf->all_cmd_rcvr) {
-               user = intf->all_cmd_rcvr;
-       } else {
-               /* Find the command/netfn. */
-               list_for_each_entry(rcvr, &(intf->cmd_rcvrs), link) {
-                       if ((rcvr->netfn == netfn) && (rcvr->cmd == cmd)) {
-                               user = rcvr->user;
-                               break;
-                       }
+       /* Find the command/netfn. */
+       list_for_each_entry(rcvr, &(intf->cmd_rcvrs), link) {
+               if ((rcvr->netfn == netfn) && (rcvr->cmd == cmd)) {
+                       user = rcvr->user;
+                       break;
                }
        }
        read_unlock(&(intf->cmd_rcvr_lock));
@@ -2330,6 +2387,14 @@ static int handle_bmc_rsp(ipmi_smi_t          intf,
        unsigned long        flags;
 
        recv_msg = (struct ipmi_recv_msg *) msg->user_data;
+       if (recv_msg == NULL)
+       {
+               printk(KERN_WARNING"IPMI message received with no owner. This\n"
+                       "could be because of a malformed message, or\n"
+                       "because of a hardware error.  Contact your\n"
+                       "hardware vender for assistance\n");
+               return 0;
+       }
 
        /* Make sure the user still exists. */
        list_for_each_entry(user, &(intf->users), link) {
@@ -2340,19 +2405,11 @@ static int handle_bmc_rsp(ipmi_smi_t          intf,
                }
        }
 
-       if (!found) {
-               /* Special handling for NULL users. */
-               if (!recv_msg->user && intf->null_user_handler){
-                       intf->null_user_handler(intf, msg);
-                       spin_lock_irqsave(&intf->counter_lock, flags);
-                       intf->handled_local_responses++;
-                       spin_unlock_irqrestore(&intf->counter_lock, flags);
-               }else{
-                       /* The user for the message went away, so give up. */
-                       spin_lock_irqsave(&intf->counter_lock, flags);
-                       intf->unhandled_local_responses++;
-                       spin_unlock_irqrestore(&intf->counter_lock, flags);
-               }
+       if ((! found) && recv_msg->user) {
+               /* The user for the message went away, so give up. */
+               spin_lock_irqsave(&intf->counter_lock, flags);
+               intf->unhandled_local_responses++;
+               spin_unlock_irqrestore(&intf->counter_lock, flags);
                ipmi_free_recv_msg(recv_msg);
        } else {
                struct ipmi_system_interface_addr *smi_addr;
@@ -2392,7 +2449,7 @@ static int handle_new_recv_msg(ipmi_smi_t          intf,
 #ifdef DEBUG_MSGING
        int m;
        printk("Recv:");
-       for (m=0; m<msg->rsp_size; m++)
+       for (m = 0; m < msg->rsp_size; m++)
                printk(" %2.2x", msg->rsp[m]);
        printk("\n");
 #endif
@@ -2626,7 +2683,7 @@ smi_from_recv_msg(ipmi_smi_t intf, struct ipmi_recv_msg *recv_msg,
        {
                int m;
                printk("Resend: ");
-               for (m=0; m<smi_msg->data_size; m++)
+               for (m = 0; m < smi_msg->data_size; m++)
                        printk(" %2.2x", smi_msg->data[m]);
                printk("\n");
        }
@@ -2647,7 +2704,7 @@ ipmi_timeout_handler(long timeout_period)
        INIT_LIST_HEAD(&timeouts);
 
        spin_lock(&interfaces_lock);
-       for (i=0; i<MAX_IPMI_INTERFACES; i++) {
+       for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
                intf = ipmi_interfaces[i];
                if (intf == NULL)
                        continue;
@@ -2672,7 +2729,7 @@ ipmi_timeout_handler(long timeout_period)
                   have timed out, putting them in the timeouts
                   list. */
                spin_lock_irqsave(&(intf->seq_lock), flags);
-               for (j=0; j<IPMI_IPMB_NUM_SEQ; j++) {
+               for (j = 0; j < IPMI_IPMB_NUM_SEQ; j++) {
                        struct seq_table *ent = &(intf->seq_table[j]);
                        if (!ent->inuse)
                                continue;
@@ -2712,7 +2769,7 @@ ipmi_timeout_handler(long timeout_period)
                                spin_unlock(&intf->counter_lock);
                                smi_msg = smi_from_recv_msg(intf,
                                                ent->recv_msg, j, ent->seqid);
-                               if(!smi_msg)
+                               if (! smi_msg)
                                        continue;
 
                                spin_unlock_irqrestore(&(intf->seq_lock),flags);
@@ -2743,7 +2800,7 @@ static void ipmi_request_event(void)
        int        i;
 
        spin_lock(&interfaces_lock);
-       for (i=0; i<MAX_IPMI_INTERFACES; i++) {
+       for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
                intf = ipmi_interfaces[i];
                if (intf == NULL)
                        continue;
@@ -2838,28 +2895,30 @@ static void dummy_recv_done_handler(struct ipmi_recv_msg *msg)
 }
 
 #ifdef CONFIG_IPMI_PANIC_STRING
-static void event_receiver_fetcher(ipmi_smi_t intf, struct ipmi_smi_msg *msg)
+static void event_receiver_fetcher(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
 {
-       if ((msg->rsp[0] == (IPMI_NETFN_SENSOR_EVENT_RESPONSE << 2))
-           && (msg->rsp[1] == IPMI_GET_EVENT_RECEIVER_CMD)
-           && (msg->rsp[2] == IPMI_CC_NO_ERROR))
+       if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
+           && (msg->msg.netfn == IPMI_NETFN_SENSOR_EVENT_RESPONSE)
+           && (msg->msg.cmd == IPMI_GET_EVENT_RECEIVER_CMD)
+           && (msg->msg.data[0] == IPMI_CC_NO_ERROR))
        {
                /* A get event receiver command, save it. */
-               intf->event_receiver = msg->rsp[3];
-               intf->event_receiver_lun = msg->rsp[4] & 0x3;
+               intf->event_receiver = msg->msg.data[1];
+               intf->event_receiver_lun = msg->msg.data[2] & 0x3;
        }
 }
 
-static void device_id_fetcher(ipmi_smi_t intf, struct ipmi_smi_msg *msg)
+static void device_id_fetcher(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
 {
-       if ((msg->rsp[0] == (IPMI_NETFN_APP_RESPONSE << 2))
-           && (msg->rsp[1] == IPMI_GET_DEVICE_ID_CMD)
-           && (msg->rsp[2] == IPMI_CC_NO_ERROR))
+       if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
+           && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE)
+           && (msg->msg.cmd == IPMI_GET_DEVICE_ID_CMD)
+           && (msg->msg.data[0] == IPMI_CC_NO_ERROR))
        {
                /* A get device id command, save if we are an event
                   receiver or generator. */
-               intf->local_sel_device = (msg->rsp[8] >> 2) & 1;
-               intf->local_event_generator = (msg->rsp[8] >> 5) & 1;
+               intf->local_sel_device = (msg->msg.data[6] >> 2) & 1;
+               intf->local_event_generator = (msg->msg.data[6] >> 5) & 1;
        }
 }
 #endif
@@ -2903,7 +2962,7 @@ static void send_panic_events(char *str)
        recv_msg.done = dummy_recv_done_handler;
 
        /* For every registered interface, send the event. */
-       for (i=0; i<MAX_IPMI_INTERFACES; i++) {
+       for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
                intf = ipmi_interfaces[i];
                if (intf == NULL)
                        continue;
@@ -2915,12 +2974,12 @@ static void send_panic_events(char *str)
                               &addr,
                               0,
                               &msg,
-                              NULL,
+                              intf,
                               &smi_msg,
                               &recv_msg,
                               0,
-                              intf->my_address,
-                              intf->my_lun,
+                              intf->channels[0].address,
+                              intf->channels[0].lun,
                               0, 1); /* Don't retry, and don't wait. */
        }
 
@@ -2930,7 +2989,7 @@ static void send_panic_events(char *str)
        if (!str) 
                return;
 
-       for (i=0; i<MAX_IPMI_INTERFACES; i++) {
+       for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
                char                  *p = str;
                struct ipmi_ipmb_addr *ipmb;
                int                   j;
@@ -2961,12 +3020,12 @@ static void send_panic_events(char *str)
                               &addr,
                               0,
                               &msg,
-                              NULL,
+                              intf,
                               &smi_msg,
                               &recv_msg,
                               0,
-                              intf->my_address,
-                              intf->my_lun,
+                              intf->channels[0].address,
+                              intf->channels[0].lun,
                               0, 1); /* Don't retry, and don't wait. */
 
                if (intf->local_event_generator) {
@@ -2981,12 +3040,12 @@ static void send_panic_events(char *str)
                                       &addr,
                                       0,
                                       &msg,
-                                      NULL,
+                                      intf,
                                       &smi_msg,
                                       &recv_msg,
                                       0,
-                                      intf->my_address,
-                                      intf->my_lun,
+                                      intf->channels[0].address,
+                                      intf->channels[0].lun,
                                       0, 1); /* no retry, and no wait. */
                }
                intf->null_user_handler = NULL;
@@ -2996,7 +3055,7 @@ static void send_panic_events(char *str)
                   be zero, and it must not be my address. */
                 if (((intf->event_receiver & 1) == 0)
                    && (intf->event_receiver != 0)
-                   && (intf->event_receiver != intf->my_address))
+                   && (intf->event_receiver != intf->channels[0].address))
                {
                        /* The event receiver is valid, send an IPMB
                           message. */
@@ -3031,7 +3090,7 @@ static void send_panic_events(char *str)
                        data[0] = 0;
                        data[1] = 0;
                        data[2] = 0xf0; /* OEM event without timestamp. */
-                       data[3] = intf->my_address;
+                       data[3] = intf->channels[0].address;
                        data[4] = j++; /* sequence # */
                        /* Always give 11 bytes, so strncpy will fill
                           it with zeroes for me. */
@@ -3043,12 +3102,12 @@ static void send_panic_events(char *str)
                                       &addr,
                                       0,
                                       &msg,
-                                      NULL,
+                                      intf,
                                       &smi_msg,
                                       &recv_msg,
                                       0,
-                                      intf->my_address,
-                                      intf->my_lun,
+                                      intf->channels[0].address,
+                                      intf->channels[0].lun,
                                       0, 1); /* no retry, and no wait. */
                }
        }       
@@ -3070,7 +3129,7 @@ static int panic_event(struct notifier_block *this,
        has_paniced = 1;
 
        /* For every registered interface, set it to run to completion. */
-       for (i=0; i<MAX_IPMI_INTERFACES; i++) {
+       for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
                intf = ipmi_interfaces[i];
                if (intf == NULL)
                        continue;
@@ -3099,9 +3158,9 @@ static int ipmi_init_msghandler(void)
                return 0;
 
        printk(KERN_INFO "ipmi message handler version "
-              IPMI_MSGHANDLER_VERSION "\n");
+              IPMI_DRIVER_VERSION "\n");
 
-       for (i=0; i<MAX_IPMI_INTERFACES; i++) {
+       for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
                ipmi_interfaces[i] = NULL;
        }
 
@@ -3171,6 +3230,9 @@ module_exit(cleanup_ipmi);
 
 module_init(ipmi_init_msghandler_mod);
 MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
+MODULE_DESCRIPTION("Incoming and outgoing message routing for an IPMI interface.");
+MODULE_VERSION(IPMI_DRIVER_VERSION);
 
 EXPORT_SYMBOL(ipmi_create_user);
 EXPORT_SYMBOL(ipmi_destroy_user);
index f951c30236c98aac5ed60473073118793a242924..e82a96ba396bb8ea49a460b26f2a71d4570f5284 100644 (file)
@@ -42,7 +42,6 @@
 #include <linux/ipmi_smi.h>
 
 #define PFX "IPMI poweroff: "
-#define IPMI_POWEROFF_VERSION  "v33"
 
 /* Where to we insert our poweroff function? */
 extern void (*pm_power_off)(void);
@@ -53,16 +52,17 @@ extern void (*pm_power_off)(void);
 #define IPMI_CHASSIS_POWER_CYCLE       0x02    /* power cycle */
 
 /* the IPMI data command */
-static int poweroff_control = IPMI_CHASSIS_POWER_DOWN;
+static int poweroff_powercycle;
 
 /* parameter definition to allow user to flag power cycle */
-module_param(poweroff_control, int, IPMI_CHASSIS_POWER_DOWN);
-MODULE_PARM_DESC(poweroff_control, " Set to 2 to enable power cycle instead of power down. Power cycle is contingent on hardware support, otherwise it defaults back to power down.");
+module_param(poweroff_powercycle, int, 0);
+MODULE_PARM_DESC(poweroff_powercycles, " Set to non-zero to enable power cycle instead of power down. Power cycle is contingent on hardware support, otherwise it defaults back to power down.");
 
 /* Stuff from the get device id command. */
 static unsigned int mfg_id;
 static unsigned int prod_id;
 static unsigned char capabilities;
+static unsigned char ipmi_version;
 
 /* We use our own messages for this operation, we don't let the system
    allocate them, since we may be in a panic situation.  The whole
@@ -337,6 +337,25 @@ static void ipmi_poweroff_cpi1 (ipmi_user_t user)
        return;
 }
 
+/*
+ * ipmi_dell_chassis_detect()
+ * Dell systems with IPMI < 1.5 don't set the chassis capability bit
+ * but they can handle a chassis poweroff or powercycle command.
+ */
+
+#define DELL_IANA_MFR_ID {0xA2, 0x02, 0x00}
+static int ipmi_dell_chassis_detect (ipmi_user_t user)
+{
+       const char ipmi_version_major = ipmi_version & 0xF;
+       const char ipmi_version_minor = (ipmi_version >> 4) & 0xF;
+       const char mfr[3]=DELL_IANA_MFR_ID;
+       if (!memcmp(mfr, &mfg_id, sizeof(mfr)) &&
+           ipmi_version_major <= 1 &&
+           ipmi_version_minor < 5)
+               return 1;
+       return 0;
+}
+
 /*
  * Standard chassis support
  */
@@ -366,37 +385,34 @@ static void ipmi_poweroff_chassis (ipmi_user_t user)
 
  powercyclefailed:
        printk(KERN_INFO PFX "Powering %s via IPMI chassis control command\n",
-               ((poweroff_control != IPMI_CHASSIS_POWER_CYCLE) ? "down" : "cycle"));
+               (poweroff_powercycle ? "cycle" : "down"));
 
        /*
         * Power down
         */
        send_msg.netfn = IPMI_NETFN_CHASSIS_REQUEST;
        send_msg.cmd = IPMI_CHASSIS_CONTROL_CMD;
-       data[0] = poweroff_control;
+       if (poweroff_powercycle)
+               data[0] = IPMI_CHASSIS_POWER_CYCLE;
+       else
+               data[0] = IPMI_CHASSIS_POWER_DOWN;
        send_msg.data = data;
        send_msg.data_len = sizeof(data);
        rv = ipmi_request_in_rc_mode(user,
                                     (struct ipmi_addr *) &smi_addr,
                                     &send_msg);
        if (rv) {
-               switch (poweroff_control) {
-                       case IPMI_CHASSIS_POWER_CYCLE:
-                               /* power cycle failed, default to power down */
-                               printk(KERN_ERR PFX "Unable to send chassis power " \
-                                       "cycle message, IPMI error 0x%x\n", rv);
-                               poweroff_control = IPMI_CHASSIS_POWER_DOWN;
-                               goto powercyclefailed;
-
-                       case IPMI_CHASSIS_POWER_DOWN:
-                       default:
-                               printk(KERN_ERR PFX "Unable to send chassis power " \
-                                       "down message, IPMI error 0x%x\n", rv);
-                               break;
+               if (poweroff_powercycle) {
+                       /* power cycle failed, default to power down */
+                       printk(KERN_ERR PFX "Unable to send chassis power " \
+                              "cycle message, IPMI error 0x%x\n", rv);
+                       poweroff_powercycle = 0;
+                       goto powercyclefailed;
                }
-       }
 
-       return;
+               printk(KERN_ERR PFX "Unable to send chassis power " \
+                      "down message, IPMI error 0x%x\n", rv);
+       }
 }
 
 
@@ -414,6 +430,9 @@ static struct poweroff_function poweroff_functions[] = {
        { .platform_type        = "CPI1",
          .detect               = ipmi_cpi1_detect,
          .poweroff_func        = ipmi_poweroff_cpi1 },
+       { .platform_type        = "chassis",
+         .detect               = ipmi_dell_chassis_detect,
+         .poweroff_func        = ipmi_poweroff_chassis },
        /* Chassis should generally be last, other things should override
           it. */
        { .platform_type        = "chassis",
@@ -499,10 +518,11 @@ static void ipmi_po_new_smi(int if_num)
        prod_id = (halt_recv_msg.msg.data[10]
                   | (halt_recv_msg.msg.data[11] << 8));
        capabilities = halt_recv_msg.msg.data[6];
+       ipmi_version = halt_recv_msg.msg.data[5];
 
 
        /* Scan for a poweroff method */
-       for (i=0; i<NUM_PO_FUNCS; i++) {
+       for (i = 0; i < NUM_PO_FUNCS; i++) {
                if (poweroff_functions[i].detect(ipmi_user))
                        goto found;
        }
@@ -538,39 +558,35 @@ static struct ipmi_smi_watcher smi_watcher =
 
 
 #ifdef CONFIG_PROC_FS
-/* displays properties to proc */
-static int proc_read_chassctrl(char *page, char **start, off_t off, int count,
-                              int *eof, void *data)
-{
-       return sprintf(page, "%d\t[ 0=powerdown 2=powercycle ]\n",
-                       poweroff_control);
-}
+#include <linux/sysctl.h>
+
+static ctl_table ipmi_table[] = {
+       { .ctl_name     = DEV_IPMI_POWEROFF_POWERCYCLE,
+         .procname     = "poweroff_powercycle",
+         .data         = &poweroff_powercycle,
+         .maxlen       = sizeof(poweroff_powercycle),
+         .mode         = 0644,
+         .proc_handler = &proc_dointvec },
+       { }
+};
 
-/* process property writes from proc */
-static int proc_write_chassctrl(struct file *file, const char *buffer,
-                               unsigned long count, void *data)
-{
-       int          rv = count;
-       unsigned int newval = 0;
-
-       sscanf(buffer, "%d", &newval);
-       switch (newval) {
-               case IPMI_CHASSIS_POWER_CYCLE:
-                       printk(KERN_INFO PFX "power cycle is now enabled\n");
-                       poweroff_control = newval;
-                       break;
-
-               case IPMI_CHASSIS_POWER_DOWN:
-                       poweroff_control = IPMI_CHASSIS_POWER_DOWN;
-                       break;
-
-               default:
-                       rv = -EINVAL;
-                       break;
-       }
+static ctl_table ipmi_dir_table[] = {
+       { .ctl_name     = DEV_IPMI,
+         .procname     = "ipmi",
+         .mode         = 0555,
+         .child        = ipmi_table },
+       { }
+};
 
-       return rv;
-}
+static ctl_table ipmi_root_table[] = {
+       { .ctl_name     = CTL_DEV,
+         .procname     = "dev",
+         .mode         = 0555,
+         .child        = ipmi_dir_table },
+       { }
+};
+
+static struct ctl_table_header *ipmi_table_header;
 #endif /* CONFIG_PROC_FS */
 
 /*
@@ -578,42 +594,32 @@ static int proc_write_chassctrl(struct file *file, const char *buffer,
  */
 static int ipmi_poweroff_init (void)
 {
-       int                   rv;
-       struct proc_dir_entry *file;
+       int rv;
 
        printk ("Copyright (C) 2004 MontaVista Software -"
-               " IPMI Powerdown via sys_reboot version "
-               IPMI_POWEROFF_VERSION ".\n");
-
-       switch (poweroff_control) {
-               case IPMI_CHASSIS_POWER_CYCLE:
-                       printk(KERN_INFO PFX "Power cycle is enabled.\n");
-                       break;
-
-               case IPMI_CHASSIS_POWER_DOWN:
-               default:
-                       poweroff_control = IPMI_CHASSIS_POWER_DOWN;
-                       break;
+               " IPMI Powerdown via sys_reboot.\n");
+
+       if (poweroff_powercycle)
+               printk(KERN_INFO PFX "Power cycle is enabled.\n");
+
+#ifdef CONFIG_PROC_FS
+       ipmi_table_header = register_sysctl_table(ipmi_root_table, 1);
+       if (!ipmi_table_header) {
+               printk(KERN_ERR PFX "Unable to register powercycle sysctl\n");
+               rv = -ENOMEM;
+               goto out_err;
        }
+#endif
 
+#ifdef CONFIG_PROC_FS
        rv = ipmi_smi_watcher_register(&smi_watcher);
+#endif
        if (rv) {
+               unregister_sysctl_table(ipmi_table_header);
                printk(KERN_ERR PFX "Unable to register SMI watcher: %d\n", rv);
                goto out_err;
        }
 
-#ifdef CONFIG_PROC_FS
-       file = create_proc_entry("poweroff_control", 0, proc_ipmi_root);
-       if (!file) {
-               printk(KERN_ERR PFX "Unable to create proc power control\n");
-       } else {
-               file->nlink = 1;
-               file->read_proc = proc_read_chassctrl;
-               file->write_proc = proc_write_chassctrl;
-               file->owner = THIS_MODULE;
-       }
-#endif
-
  out_err:
        return rv;
 }
@@ -624,7 +630,7 @@ static __exit void ipmi_poweroff_cleanup(void)
        int rv;
 
 #ifdef CONFIG_PROC_FS
-       remove_proc_entry("poweroff_control", proc_ipmi_root);
+       unregister_sysctl_table(ipmi_table_header);
 #endif
 
        ipmi_smi_watcher_unregister(&smi_watcher);
@@ -642,3 +648,5 @@ module_exit(ipmi_poweroff_cleanup);
 
 module_init(ipmi_poweroff_init);
 MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
+MODULE_DESCRIPTION("IPMI Poweroff extension to sys_reboot");
index a44b97304e95a6e38426e973428f744b1764dd61..278f841049968c15867d25c34e2f17772d375829 100644 (file)
 # endif
 static inline void add_usec_to_timer(struct timer_list *t, long v)
 {
-       t->sub_expires += nsec_to_arch_cycle(v * 1000);
-       while (t->sub_expires >= arch_cycles_per_jiffy)
+       t->arch_cycle_expires += nsec_to_arch_cycle(v * 1000);
+       while (t->arch_cycle_expires >= arch_cycles_per_jiffy)
        {
                t->expires++;
-               t->sub_expires -= arch_cycles_per_jiffy;
+               t->arch_cycle_expires -= arch_cycles_per_jiffy;
        }
 }
 #endif
@@ -75,8 +75,7 @@ static inline void add_usec_to_timer(struct timer_list *t, long v)
 #include <asm/io.h>
 #include "ipmi_si_sm.h"
 #include <linux/init.h>
-
-#define IPMI_SI_VERSION "v33"
+#include <linux/dmi.h>
 
 /* Measure times between events in the driver. */
 #undef DEBUG_TIMING
@@ -109,6 +108,21 @@ enum si_type {
     SI_KCS, SI_SMIC, SI_BT
 };
 
+struct ipmi_device_id {
+       unsigned char device_id;
+       unsigned char device_revision;
+       unsigned char firmware_revision_1;
+       unsigned char firmware_revision_2;
+       unsigned char ipmi_version;
+       unsigned char additional_device_support;
+       unsigned char manufacturer_id[3];
+       unsigned char product_id[2];
+       unsigned char aux_firmware_revision[4];
+} __attribute__((packed));
+
+#define ipmi_version_major(v) ((v)->ipmi_version & 0xf)
+#define ipmi_version_minor(v) ((v)->ipmi_version >> 4)
+
 struct smi_info
 {
        ipmi_smi_t             intf;
@@ -131,12 +145,24 @@ struct smi_info
        void (*irq_cleanup)(struct smi_info *info);
        unsigned int io_size;
 
+       /* Per-OEM handler, called from handle_flags().
+          Returns 1 when handle_flags() needs to be re-run
+          or 0 indicating it set si_state itself.
+       */
+       int (*oem_data_avail_handler)(struct smi_info *smi_info);
+
        /* Flags from the last GET_MSG_FLAGS command, used when an ATTN
           is set to hold the flags until we are done handling everything
           from the flags. */
 #define RECEIVE_MSG_AVAIL      0x01
 #define EVENT_MSG_BUFFER_FULL  0x02
 #define WDT_PRE_TIMEOUT_INT    0x08
+#define OEM0_DATA_AVAIL     0x20
+#define OEM1_DATA_AVAIL     0x40
+#define OEM2_DATA_AVAIL     0x80
+#define OEM_DATA_AVAIL      (OEM0_DATA_AVAIL | \
+                             OEM1_DATA_AVAIL | \
+                             OEM2_DATA_AVAIL)
        unsigned char       msg_flags;
 
        /* If set to true, this will request events the next time the
@@ -175,11 +201,7 @@ struct smi_info
           interrupts. */
        int interrupt_disabled;
 
-       unsigned char ipmi_si_dev_rev;
-       unsigned char ipmi_si_fw_rev_major;
-       unsigned char ipmi_si_fw_rev_minor;
-       unsigned char ipmi_version_major;
-       unsigned char ipmi_version_minor;
+       struct ipmi_device_id device_id;
 
        /* Slave address, could be reported from DMI. */
        unsigned char slave_addr;
@@ -245,7 +267,7 @@ static enum si_sm_result start_next_msg(struct smi_info *smi_info)
                entry = smi_info->xmit_msgs.next;
        }
 
-       if (!entry) {
+       if (! entry) {
                smi_info->curr_msg = NULL;
                rv = SI_SM_IDLE;
        } else {
@@ -306,7 +328,7 @@ static void start_clear_flags(struct smi_info *smi_info)
    memory, we will re-enable the interrupt. */
 static inline void disable_si_irq(struct smi_info *smi_info)
 {
-       if ((smi_info->irq) && (!smi_info->interrupt_disabled)) {
+       if ((smi_info->irq) && (! smi_info->interrupt_disabled)) {
                disable_irq_nosync(smi_info->irq);
                smi_info->interrupt_disabled = 1;
        }
@@ -322,6 +344,7 @@ static inline void enable_si_irq(struct smi_info *smi_info)
 
 static void handle_flags(struct smi_info *smi_info)
 {
+ retry:
        if (smi_info->msg_flags & WDT_PRE_TIMEOUT_INT) {
                /* Watchdog pre-timeout */
                spin_lock(&smi_info->count_lock);
@@ -336,7 +359,7 @@ static void handle_flags(struct smi_info *smi_info)
        } else if (smi_info->msg_flags & RECEIVE_MSG_AVAIL) {
                /* Messages available. */
                smi_info->curr_msg = ipmi_alloc_smi_msg();
-               if (!smi_info->curr_msg) {
+               if (! smi_info->curr_msg) {
                        disable_si_irq(smi_info);
                        smi_info->si_state = SI_NORMAL;
                        return;
@@ -355,7 +378,7 @@ static void handle_flags(struct smi_info *smi_info)
        } else if (smi_info->msg_flags & EVENT_MSG_BUFFER_FULL) {
                /* Events available. */
                smi_info->curr_msg = ipmi_alloc_smi_msg();
-               if (!smi_info->curr_msg) {
+               if (! smi_info->curr_msg) {
                        disable_si_irq(smi_info);
                        smi_info->si_state = SI_NORMAL;
                        return;
@@ -371,6 +394,10 @@ static void handle_flags(struct smi_info *smi_info)
                        smi_info->curr_msg->data,
                        smi_info->curr_msg->data_size);
                smi_info->si_state = SI_GETTING_EVENTS;
+       } else if (smi_info->msg_flags & OEM_DATA_AVAIL) {
+               if (smi_info->oem_data_avail_handler)
+                       if (smi_info->oem_data_avail_handler(smi_info))
+                               goto retry;
        } else {
                smi_info->si_state = SI_NORMAL;
        }
@@ -387,7 +414,7 @@ static void handle_transaction_done(struct smi_info *smi_info)
 #endif
        switch (smi_info->si_state) {
        case SI_NORMAL:
-               if (!smi_info->curr_msg)
+               if (! smi_info->curr_msg)
                        break;
 
                smi_info->curr_msg->rsp_size
@@ -761,18 +788,20 @@ static void si_restart_short_timer(struct smi_info *smi_info)
 #if defined(CONFIG_HIGH_RES_TIMERS)
        unsigned long flags;
        unsigned long jiffies_now;
+       unsigned long seq;
 
        if (del_timer(&(smi_info->si_timer))) {
                /* If we don't delete the timer, then it will go off
                   immediately, anyway.  So we only process if we
                   actually delete the timer. */
 
-               /* We already have irqsave on, so no need for it
-                   here. */
-               read_lock(&xtime_lock);
-               jiffies_now = jiffies;
-               smi_info->si_timer.expires = jiffies_now;
-               smi_info->si_timer.sub_expires = get_arch_cycles(jiffies_now);
+               do {
+                       seq = read_seqbegin_irqsave(&xtime_lock, flags);
+                       jiffies_now = jiffies;
+                       smi_info->si_timer.expires = jiffies_now;
+                       smi_info->si_timer.arch_cycle_expires
+                               = get_arch_cycles(jiffies_now);
+               } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
 
                add_usec_to_timer(&smi_info->si_timer, SI_SHORT_TIMEOUT_USEC);
 
@@ -826,15 +855,19 @@ static void smi_timeout(unsigned long data)
        /* If the state machine asks for a short delay, then shorten
            the timer timeout. */
        if (smi_result == SI_SM_CALL_WITH_DELAY) {
+#if defined(CONFIG_HIGH_RES_TIMERS)
+               unsigned long seq;
+#endif
                spin_lock_irqsave(&smi_info->count_lock, flags);
                smi_info->short_timeouts++;
                spin_unlock_irqrestore(&smi_info->count_lock, flags);
 #if defined(CONFIG_HIGH_RES_TIMERS)
-               read_lock(&xtime_lock);
-                smi_info->si_timer.expires = jiffies;
-                smi_info->si_timer.sub_expires
-                        = get_arch_cycles(smi_info->si_timer.expires);
-                read_unlock(&xtime_lock);
+               do {
+                       seq = read_seqbegin_irqsave(&xtime_lock, flags);
+                       smi_info->si_timer.expires = jiffies;
+                       smi_info->si_timer.arch_cycle_expires
+                               = get_arch_cycles(smi_info->si_timer.expires);
+               } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
                add_usec_to_timer(&smi_info->si_timer, SI_SHORT_TIMEOUT_USEC);
 #else
                smi_info->si_timer.expires = jiffies + 1;
@@ -845,7 +878,7 @@ static void smi_timeout(unsigned long data)
                spin_unlock_irqrestore(&smi_info->count_lock, flags);
                smi_info->si_timer.expires = jiffies + SI_TIMEOUT_JIFFIES;
 #if defined(CONFIG_HIGH_RES_TIMERS)
-               smi_info->si_timer.sub_expires = 0;
+               smi_info->si_timer.arch_cycle_expires = 0;
 #endif
        }
 
@@ -986,7 +1019,7 @@ MODULE_PARM_DESC(slave_addrs, "Set the default IPMB slave address for"
 #define IPMI_MEM_ADDR_SPACE 1
 #define IPMI_IO_ADDR_SPACE  2
 
-#if defined(CONFIG_ACPI_INTERPRETER) || defined(CONFIG_X86) || defined(CONFIG_PCI)
+#if defined(CONFIG_ACPI) || defined(CONFIG_X86) || defined(CONFIG_PCI)
 static int is_new_interface(int intf, u8 addr_space, unsigned long base_addr)
 {
        int i;
@@ -1014,7 +1047,7 @@ static int std_irq_setup(struct smi_info *info)
 {
        int rv;
 
-       if (!info->irq)
+       if (! info->irq)
                return 0;
 
        if (info->si_type == SI_BT) {
@@ -1023,7 +1056,7 @@ static int std_irq_setup(struct smi_info *info)
                                 SA_INTERRUPT,
                                 DEVICE_NAME,
                                 info);
-               if (!rv)
+               if (! rv)
                        /* Enable the interrupt in the BT interface. */
                        info->io.outputb(&info->io, IPMI_BT_INTMASK_REG,
                                         IPMI_BT_INTMASK_ENABLE_IRQ_BIT);
@@ -1048,7 +1081,7 @@ static int std_irq_setup(struct smi_info *info)
 
 static void std_irq_cleanup(struct smi_info *info)
 {
-       if (!info->irq)
+       if (! info->irq)
                return;
 
        if (info->si_type == SI_BT)
@@ -1121,7 +1154,7 @@ static int port_setup(struct smi_info *info)
        unsigned int *addr = info->io.info;
        int           mapsize;
 
-       if (!addr || (!*addr))
+       if (! addr || (! *addr))
                return -ENODEV;
 
        info->io_cleanup = port_cleanup;
@@ -1164,15 +1197,15 @@ static int try_init_port(int intf_num, struct smi_info **new_info)
 {
        struct smi_info *info;
 
-       if (!ports[intf_num])
+       if (! ports[intf_num])
                return -ENODEV;
 
-       if (!is_new_interface(intf_num, IPMI_IO_ADDR_SPACE,
+       if (! is_new_interface(intf_num, IPMI_IO_ADDR_SPACE,
                              ports[intf_num]))
                return -ENODEV;
 
        info = kmalloc(sizeof(*info), GFP_KERNEL);
-       if (!info) {
+       if (! info) {
                printk(KERN_ERR "ipmi_si: Could not allocate SI data (1)\n");
                return -ENOMEM;
        }
@@ -1182,10 +1215,10 @@ static int try_init_port(int intf_num, struct smi_info **new_info)
        info->io.info = &(ports[intf_num]);
        info->io.addr = NULL;
        info->io.regspacing = regspacings[intf_num];
-       if (!info->io.regspacing)
+       if (! info->io.regspacing)
                info->io.regspacing = DEFAULT_REGSPACING;
        info->io.regsize = regsizes[intf_num];
-       if (!info->io.regsize)
+       if (! info->io.regsize)
                info->io.regsize = DEFAULT_REGSPACING;
        info->io.regshift = regshifts[intf_num];
        info->irq = 0;
@@ -1270,7 +1303,7 @@ static int mem_setup(struct smi_info *info)
        unsigned long *addr = info->io.info;
        int           mapsize;
 
-       if (!addr || (!*addr))
+       if (! addr || (! *addr))
                return -ENODEV;
 
        info->io_cleanup = mem_cleanup;
@@ -1325,15 +1358,15 @@ static int try_init_mem(int intf_num, struct smi_info **new_info)
 {
        struct smi_info *info;
 
-       if (!addrs[intf_num])
+       if (! addrs[intf_num])
                return -ENODEV;
 
-       if (!is_new_interface(intf_num, IPMI_MEM_ADDR_SPACE,
+       if (! is_new_interface(intf_num, IPMI_MEM_ADDR_SPACE,
                              addrs[intf_num]))
                return -ENODEV;
 
        info = kmalloc(sizeof(*info), GFP_KERNEL);
-       if (!info) {
+       if (! info) {
                printk(KERN_ERR "ipmi_si: Could not allocate SI data (2)\n");
                return -ENOMEM;
        }
@@ -1343,10 +1376,10 @@ static int try_init_mem(int intf_num, struct smi_info **new_info)
        info->io.info = &addrs[intf_num];
        info->io.addr = NULL;
        info->io.regspacing = regspacings[intf_num];
-       if (!info->io.regspacing)
+       if (! info->io.regspacing)
                info->io.regspacing = DEFAULT_REGSPACING;
        info->io.regsize = regsizes[intf_num];
-       if (!info->io.regsize)
+       if (! info->io.regsize)
                info->io.regsize = DEFAULT_REGSPACING;
        info->io.regshift = regshifts[intf_num];
        info->irq = 0;
@@ -1362,7 +1395,7 @@ static int try_init_mem(int intf_num, struct smi_info **new_info)
 }
 
 
-#ifdef CONFIG_ACPI_INTERPRETER
+#ifdef CONFIG_ACPI
 
 #include <linux/acpi.h>
 
@@ -1404,7 +1437,7 @@ static int acpi_gpe_irq_setup(struct smi_info *info)
 {
        acpi_status status;
 
-       if (!info->irq)
+       if (! info->irq)
                return 0;
 
        /* FIXME - is level triggered right? */
@@ -1428,7 +1461,7 @@ static int acpi_gpe_irq_setup(struct smi_info *info)
 
 static void acpi_gpe_irq_cleanup(struct smi_info *info)
 {
-       if (!info->irq)
+       if (! info->irq)
                return;
 
        acpi_remove_gpe_handler(NULL, info->irq, &ipmi_acpi_gpe);
@@ -1484,6 +1517,9 @@ static int try_init_acpi(int intf_num, struct smi_info **new_info)
        char             *io_type;
        u8               addr_space;
 
+       if (acpi_disabled)
+               return -ENODEV;
+
        if (acpi_failure)
                return -ENODEV;
 
@@ -1504,10 +1540,10 @@ static int try_init_acpi(int intf_num, struct smi_info **new_info)
                addr_space = IPMI_MEM_ADDR_SPACE;
        else
                addr_space = IPMI_IO_ADDR_SPACE;
-       if (!is_new_interface(-1, addr_space, spmi->addr.address))
+       if (! is_new_interface(-1, addr_space, spmi->addr.address))
                return -ENODEV;
 
-       if (!spmi->addr.register_bit_width) {
+       if (! spmi->addr.register_bit_width) {
                acpi_failure = 1;
                return -ENODEV;
        }
@@ -1534,7 +1570,7 @@ static int try_init_acpi(int intf_num, struct smi_info **new_info)
        }
 
        info = kmalloc(sizeof(*info), GFP_KERNEL);
-       if (!info) {
+       if (! info) {
                printk(KERN_ERR "ipmi_si: Could not allocate SI data (3)\n");
                return -ENOMEM;
        }
@@ -1610,22 +1646,15 @@ typedef struct dmi_ipmi_data
 static dmi_ipmi_data_t dmi_data[SI_MAX_DRIVERS];
 static int dmi_data_entries;
 
-typedef struct dmi_header
-{
-       u8      type;
-       u8      length;
-       u16     handle;
-} dmi_header_t;
-
-static int decode_dmi(dmi_header_t __iomem *dm, int intf_num)
+static int __init decode_dmi(struct dmi_header *dm, int intf_num)
 {
-       u8              __iomem *data = (u8 __iomem *)dm;
+       u8              *data = (u8 *)dm;
        unsigned long   base_addr;
        u8              reg_spacing;
-       u8              len = readb(&dm->length);
+       u8              len = dm->length;
        dmi_ipmi_data_t *ipmi_data = dmi_data+intf_num;
 
-       ipmi_data->type = readb(&data[4]);
+       ipmi_data->type = data[4];
 
        memcpy(&base_addr, data+8, sizeof(unsigned long));
        if (len >= 0x11) {
@@ -1640,12 +1669,12 @@ static int decode_dmi(dmi_header_t __iomem *dm, int intf_num)
                }
                /* If bit 4 of byte 0x10 is set, then the lsb for the address
                   is odd. */
-               ipmi_data->base_addr = base_addr | ((readb(&data[0x10]) & 0x10) >> 4);
+               ipmi_data->base_addr = base_addr | ((data[0x10] & 0x10) >> 4);
 
-               ipmi_data->irq = readb(&data[0x11]);
+               ipmi_data->irq = data[0x11];
 
                /* The top two bits of byte 0x10 hold the register spacing. */
-               reg_spacing = (readb(&data[0x10]) & 0xC0) >> 6;
+               reg_spacing = (data[0x10] & 0xC0) >> 6;
                switch(reg_spacing){
                case 0x00: /* Byte boundaries */
                    ipmi_data->offset = 1;
@@ -1673,7 +1702,7 @@ static int decode_dmi(dmi_header_t __iomem *dm, int intf_num)
                ipmi_data->offset = 1;
        }
 
-       ipmi_data->slave_addr = readb(&data[6]);
+       ipmi_data->slave_addr = data[6];
 
        if (is_new_interface(-1, ipmi_data->addr_space,ipmi_data->base_addr)) {
                dmi_data_entries++;
@@ -1685,94 +1714,29 @@ static int decode_dmi(dmi_header_t __iomem *dm, int intf_num)
        return -1;
 }
 
-static int dmi_table(u32 base, int len, int num)
+static void __init dmi_find_bmc(void)
 {
-       u8                __iomem *buf;
-       struct dmi_header __iomem *dm;
-       u8                __iomem *data;
-       int               i=1;
-       int               status=-1;
+       struct dmi_device *dev = NULL;
        int               intf_num = 0;
 
-       buf = ioremap(base, len);
-       if(buf==NULL)
-               return -1;
-
-       data = buf;
-
-       while(i<num && (data - buf) < len)
-       {
-               dm=(dmi_header_t __iomem *)data;
-
-               if((data-buf+readb(&dm->length)) >= len)
-                       break;
-
-               if (readb(&dm->type) == 38) {
-                       if (decode_dmi(dm, intf_num) == 0) {
-                               intf_num++;
-                               if (intf_num >= SI_MAX_DRIVERS)
-                                       break;
-                       }
-               }
-
-               data+=readb(&dm->length);
-               while((data-buf) < len && (readb(data)||readb(data+1)))
-                       data++;
-               data+=2;
-               i++;
-       }
-       iounmap(buf);
-
-       return status;
-}
-
-static inline int dmi_checksum(u8 *buf)
-{
-       u8   sum=0;
-       int  a;
-
-       for(a=0; a<15; a++)
-               sum+=buf[a];
-       return (sum==0);
-}
-
-static int dmi_decode(void)
-{
-       u8   buf[15];
-       u32  fp=0xF0000;
-
-#ifdef CONFIG_SIMNOW
-       return -1;
-#endif
-
-       while(fp < 0xFFFFF)
-       {
-               isa_memcpy_fromio(buf, fp, 15);
-               if(memcmp(buf, "_DMI_", 5)==0 && dmi_checksum(buf))
-               {
-                       u16 num=buf[13]<<8|buf[12];
-                       u16 len=buf[7]<<8|buf[6];
-                       u32 base=buf[11]<<24|buf[10]<<16|buf[9]<<8|buf[8];
+       while ((dev = dmi_find_device(DMI_DEV_TYPE_IPMI, NULL, dev))) {
+               if (intf_num >= SI_MAX_DRIVERS)
+                       break;
 
-                       if(dmi_table(base, len, num) == 0)
-                               return 0;
-               }
-               fp+=16;
+               decode_dmi((struct dmi_header *) dev->device_data, intf_num++);
        }
-
-       return -1;
 }
 
 static int try_init_smbios(int intf_num, struct smi_info **new_info)
 {
-       struct smi_info   *info;
-       dmi_ipmi_data_t   *ipmi_data = dmi_data+intf_num;
-       char              *io_type;
+       struct smi_info *info;
+       dmi_ipmi_data_t *ipmi_data = dmi_data+intf_num;
+       char            *io_type;
 
        if (intf_num >= dmi_data_entries)
                return -ENODEV;
 
-       switch(ipmi_data->type) {
+       switch (ipmi_data->type) {
                case 0x01: /* KCS */
                        si_type[intf_num] = "kcs";
                        break;
@@ -1787,7 +1751,7 @@ static int try_init_smbios(int intf_num, struct smi_info **new_info)
        }
 
        info = kmalloc(sizeof(*info), GFP_KERNEL);
-       if (!info) {
+       if (! info) {
                printk(KERN_ERR "ipmi_si: Could not allocate SI data (4)\n");
                return -ENOMEM;
        }
@@ -1811,7 +1775,7 @@ static int try_init_smbios(int intf_num, struct smi_info **new_info)
 
        regspacings[intf_num] = ipmi_data->offset;
        info->io.regspacing = regspacings[intf_num];
-       if (!info->io.regspacing)
+       if (! info->io.regspacing)
                info->io.regspacing = DEFAULT_REGSPACING;
        info->io.regsize = DEFAULT_REGSPACING;
        info->io.regshift = regshifts[intf_num];
@@ -1853,14 +1817,14 @@ static int find_pci_smic(int intf_num, struct smi_info **new_info)
 
        pci_smic_checked = 1;
 
-       if ((pci_dev = pci_get_device(PCI_HP_VENDOR_ID, PCI_MMC_DEVICE_ID,
-                                      NULL)))
-               ;
-       else if ((pci_dev = pci_get_class(PCI_ERMC_CLASSCODE, NULL)) &&
-                pci_dev->subsystem_vendor == PCI_HP_VENDOR_ID)
-               fe_rmc = 1;
-       else
-               return -ENODEV;
+       pci_dev = pci_get_device(PCI_HP_VENDOR_ID, PCI_MMC_DEVICE_ID, NULL);
+       if (! pci_dev) {
+               pci_dev = pci_get_class(PCI_ERMC_CLASSCODE, NULL);
+               if (pci_dev && (pci_dev->subsystem_vendor == PCI_HP_VENDOR_ID))
+                       fe_rmc = 1;
+               else
+                       return -ENODEV;
+       }
 
        error = pci_read_config_word(pci_dev, PCI_MMC_ADDR_CW, &base_addr);
        if (error)
@@ -1873,7 +1837,7 @@ static int find_pci_smic(int intf_num, struct smi_info **new_info)
        }
 
        /* Bit 0: 1 specifies programmed I/O, 0 specifies memory mapped I/O */
-       if (!(base_addr & 0x0001))
+       if (! (base_addr & 0x0001))
        {
                pci_dev_put(pci_dev);
                printk(KERN_ERR
@@ -1883,17 +1847,17 @@ static int find_pci_smic(int intf_num, struct smi_info **new_info)
        }
 
        base_addr &= 0xFFFE;
-       if (!fe_rmc)
+       if (! fe_rmc)
                /* Data register starts at base address + 1 in eRMC */
                ++base_addr;
 
-       if (!is_new_interface(-1, IPMI_IO_ADDR_SPACE, base_addr)) {
+       if (! is_new_interface(-1, IPMI_IO_ADDR_SPACE, base_addr)) {
                pci_dev_put(pci_dev);
                return -ENODEV;
        }
 
        info = kmalloc(sizeof(*info), GFP_KERNEL);
-       if (!info) {
+       if (! info) {
                pci_dev_put(pci_dev);
                printk(KERN_ERR "ipmi_si: Could not allocate SI data (5)\n");
                return -ENOMEM;
@@ -1904,7 +1868,7 @@ static int find_pci_smic(int intf_num, struct smi_info **new_info)
        ports[intf_num] = base_addr;
        info->io.info = &(ports[intf_num]);
        info->io.regspacing = regspacings[intf_num];
-       if (!info->io.regspacing)
+       if (! info->io.regspacing)
                info->io.regspacing = DEFAULT_REGSPACING;
        info->io.regsize = DEFAULT_REGSPACING;
        info->io.regshift = regshifts[intf_num];
@@ -1925,7 +1889,7 @@ static int find_pci_smic(int intf_num, struct smi_info **new_info)
 static int try_init_plug_and_play(int intf_num, struct smi_info **new_info)
 {
 #ifdef CONFIG_PCI
-       if (find_pci_smic(intf_num, new_info)==0)
+       if (find_pci_smic(intf_num, new_info) == 0)
                return 0;
 #endif
        /* Include other methods here. */
@@ -1943,7 +1907,7 @@ static int try_get_dev_id(struct smi_info *smi_info)
        int               rv = 0;
 
        resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
-       if (!resp)
+       if (! resp)
                return -ENOMEM;
 
        /* Do a Get Device ID command, since it comes back with some
@@ -1992,11 +1956,8 @@ static int try_get_dev_id(struct smi_info *smi_info)
        }
 
        /* Record info from the get device id, in case we need it. */
-       smi_info->ipmi_si_dev_rev = resp[4] & 0xf;
-       smi_info->ipmi_si_fw_rev_major = resp[5] & 0x7f;
-       smi_info->ipmi_si_fw_rev_minor = resp[6];
-       smi_info->ipmi_version_major = resp[7] & 0xf;
-       smi_info->ipmi_version_minor = resp[7] >> 4;
+       memcpy(&smi_info->device_id, &resp[3],
+              min_t(unsigned long, resp_len-3, sizeof(smi_info->device_id)));
 
  out:
        kfree(resp);
@@ -2028,7 +1989,7 @@ static int stat_file_read_proc(char *page, char **start, off_t off,
        struct smi_info *smi = data;
 
        out += sprintf(out, "interrupts_enabled:    %d\n",
-                      smi->irq && !smi->interrupt_disabled);
+                      smi->irq && ! smi->interrupt_disabled);
        out += sprintf(out, "short_timeouts:        %ld\n",
                       smi->short_timeouts);
        out += sprintf(out, "long_timeouts:         %ld\n",
@@ -2057,6 +2018,73 @@ static int stat_file_read_proc(char *page, char **start, off_t off,
        return (out - ((char *) page));
 }
 
+/*
+ * oem_data_avail_to_receive_msg_avail
+ * @info - smi_info structure with msg_flags set
+ *
+ * Converts flags from OEM_DATA_AVAIL to RECEIVE_MSG_AVAIL
+ * Returns 1 indicating need to re-run handle_flags().
+ */
+static int oem_data_avail_to_receive_msg_avail(struct smi_info *smi_info)
+{
+       smi_info->msg_flags = ((smi_info->msg_flags & ~OEM_DATA_AVAIL) |
+                               RECEIVE_MSG_AVAIL);
+       return 1;
+}
+
+/*
+ * setup_dell_poweredge_oem_data_handler
+ * @info - smi_info.device_id must be populated
+ *
+ * Systems that match, but have firmware version < 1.40 may assert
+ * OEM0_DATA_AVAIL on their own, without being told via Set Flags that
+ * it's safe to do so.  Such systems will de-assert OEM1_DATA_AVAIL
+ * upon receipt of IPMI_GET_MSG_CMD, so we should treat these flags
+ * as RECEIVE_MSG_AVAIL instead.
+ *
+ * As Dell has no plans to release IPMI 1.5 firmware that *ever*
+ * assert the OEM[012] bits, and if it did, the driver would have to
+ * change to handle that properly, we don't actually check for the
+ * firmware version.
+ * Device ID = 0x20                BMC on PowerEdge 8G servers
+ * Device Revision = 0x80
+ * Firmware Revision1 = 0x01       BMC version 1.40
+ * Firmware Revision2 = 0x40       BCD encoded
+ * IPMI Version = 0x51             IPMI 1.5
+ * Manufacturer ID = A2 02 00      Dell IANA
+ *
+ */
+#define DELL_POWEREDGE_8G_BMC_DEVICE_ID  0x20
+#define DELL_POWEREDGE_8G_BMC_DEVICE_REV 0x80
+#define DELL_POWEREDGE_8G_BMC_IPMI_VERSION 0x51
+#define DELL_IANA_MFR_ID {0xA2, 0x02, 0x00}
+static void setup_dell_poweredge_oem_data_handler(struct smi_info *smi_info)
+{
+       struct ipmi_device_id *id = &smi_info->device_id;
+       const char mfr[3]=DELL_IANA_MFR_ID;
+       if (! memcmp(mfr, id->manufacturer_id, sizeof(mfr))
+           && (id->device_id       == DELL_POWEREDGE_8G_BMC_DEVICE_ID)
+           && (id->device_revision == DELL_POWEREDGE_8G_BMC_DEVICE_REV)
+           && (id->ipmi_version    == DELL_POWEREDGE_8G_BMC_IPMI_VERSION))
+       {
+               smi_info->oem_data_avail_handler =
+                       oem_data_avail_to_receive_msg_avail;
+       }
+}
+
+/*
+ * setup_oem_data_handler
+ * @info - smi_info.device_id must be filled in already
+ *
+ * Fills in smi_info.device_id.oem_data_available_handler
+ * when we know what function to use there.
+ */
+
+static void setup_oem_data_handler(struct smi_info *smi_info)
+{
+       setup_dell_poweredge_oem_data_handler(smi_info);
+}
+
 /* Returns 0 if initialized, or negative on an error. */
 static int init_one_smi(int intf_num, struct smi_info **smi)
 {
@@ -2067,20 +2095,16 @@ static int init_one_smi(int intf_num, struct smi_info **smi)
        rv = try_init_mem(intf_num, &new_smi);
        if (rv)
                rv = try_init_port(intf_num, &new_smi);
-#ifdef CONFIG_ACPI_INTERPRETER
-       if ((rv) && (si_trydefaults)) {
+#ifdef CONFIG_ACPI
+       if (rv && si_trydefaults)
                rv = try_init_acpi(intf_num, &new_smi);
-       }
 #endif
 #ifdef CONFIG_X86
-       if ((rv) && (si_trydefaults)) {
+       if (rv && si_trydefaults)
                rv = try_init_smbios(intf_num, &new_smi);
-        }
 #endif
-       if ((rv) && (si_trydefaults)) {
+       if (rv && si_trydefaults)
                rv = try_init_plug_and_play(intf_num, &new_smi);
-       }
-
 
        if (rv)
                return rv;
@@ -2090,7 +2114,7 @@ static int init_one_smi(int intf_num, struct smi_info **smi)
        new_smi->si_sm = NULL;
        new_smi->handlers = NULL;
 
-       if (!new_smi->irq_setup) {
+       if (! new_smi->irq_setup) {
                new_smi->irq = irqs[intf_num];
                new_smi->irq_setup = std_irq_setup;
                new_smi->irq_cleanup = std_irq_cleanup;
@@ -2124,7 +2148,7 @@ static int init_one_smi(int intf_num, struct smi_info **smi)
 
        /* Allocate the state machine's data and initialize it. */
        new_smi->si_sm = kmalloc(new_smi->handlers->size(), GFP_KERNEL);
-       if (!new_smi->si_sm) {
+       if (! new_smi->si_sm) {
                printk(" Could not allocate state machine memory\n");
                rv = -ENOMEM;
                goto out_err;
@@ -2155,6 +2179,8 @@ static int init_one_smi(int intf_num, struct smi_info **smi)
        if (rv)
                goto out_err;
 
+       setup_oem_data_handler(new_smi);
+
        /* Try to claim any interrupts. */
        new_smi->irq_setup(new_smi);
 
@@ -2188,8 +2214,8 @@ static int init_one_smi(int intf_num, struct smi_info **smi)
 
        rv = ipmi_register_smi(&handlers,
                               new_smi,
-                              new_smi->ipmi_version_major,
-                              new_smi->ipmi_version_minor,
+                              ipmi_version_major(&new_smi->device_id),
+                              ipmi_version_minor(&new_smi->device_id),
                               new_smi->slave_addr,
                               &(new_smi->intf));
        if (rv) {
@@ -2230,7 +2256,7 @@ static int init_one_smi(int intf_num, struct smi_info **smi)
 
        /* Wait for the timer to stop.  This avoids problems with race
           conditions removing the timer here. */
-       while (!new_smi->timer_stopped) {
+       while (! new_smi->timer_stopped) {
                set_current_state(TASK_UNINTERRUPTIBLE);
                schedule_timeout(1);
        }
@@ -2270,7 +2296,7 @@ static __init int init_ipmi_si(void)
        /* Parse out the si_type string into its components. */
        str = si_type_str;
        if (*str != '\0') {
-               for (i=0; (i<SI_MAX_PARMS) && (*str != '\0'); i++) {
+               for (i = 0; (i < SI_MAX_PARMS) && (*str != '\0'); i++) {
                        si_type[i] = str;
                        str = strchr(str, ',');
                        if (str) {
@@ -2282,22 +2308,14 @@ static __init int init_ipmi_si(void)
                }
        }
 
-       printk(KERN_INFO "IPMI System Interface driver version "
-              IPMI_SI_VERSION);
-       if (kcs_smi_handlers.version)
-               printk(", KCS version %s", kcs_smi_handlers.version);
-       if (smic_smi_handlers.version)
-               printk(", SMIC version %s", smic_smi_handlers.version);
-       if (bt_smi_handlers.version)
-               printk(", BT version %s", bt_smi_handlers.version);
-       printk("\n");
+       printk(KERN_INFO "IPMI System Interface driver.\n");
 
 #ifdef CONFIG_X86
-       dmi_decode();
+       dmi_find_bmc();
 #endif
 
        rv = init_one_smi(0, &(smi_infos[pos]));
-       if (rv && !ports[0] && si_trydefaults) {
+       if (rv && ! ports[0] && si_trydefaults) {
                /* If we are trying defaults and the initial port is
                    not set, then set it. */
                si_type[0] = "kcs";
@@ -2319,7 +2337,7 @@ static __init int init_ipmi_si(void)
        if (rv == 0)
                pos++;
 
-       for (i=1; i < SI_MAX_PARMS; i++) {
+       for (i = 1; i < SI_MAX_PARMS; i++) {
                rv = init_one_smi(i, &(smi_infos[pos]));
                if (rv == 0)
                        pos++;
@@ -2361,14 +2379,14 @@ static void __exit cleanup_one_si(struct smi_info *to_clean)
 
        /* Wait for the timer to stop.  This avoids problems with race
           conditions removing the timer here. */
-       while (!to_clean->timer_stopped) {
+       while (! to_clean->timer_stopped) {
                set_current_state(TASK_UNINTERRUPTIBLE);
                schedule_timeout(1);
        }
 
        /* Interrupts and timeouts are stopped, now make sure the
           interface is in a clean state. */
-       while ((to_clean->curr_msg) || (to_clean->si_state != SI_NORMAL)) {
+       while (to_clean->curr_msg || (to_clean->si_state != SI_NORMAL)) {
                poll(to_clean);
                set_current_state(TASK_UNINTERRUPTIBLE);
                schedule_timeout(1);
@@ -2392,13 +2410,15 @@ static __exit void cleanup_ipmi_si(void)
 {
        int i;
 
-       if (!initialized)
+       if (! initialized)
                return;
 
-       for (i=0; i<SI_MAX_DRIVERS; i++) {
+       for (i = 0; i < SI_MAX_DRIVERS; i++) {
                cleanup_one_si(smi_infos[i]);
        }
 }
 module_exit(cleanup_ipmi_si);
 
 MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
+MODULE_DESCRIPTION("Interface to the IPMI driver for the KCS, SMIC, and BT system interfaces.");
index ae18747e670b10c0f2255403811f1210c85df982..add2aa2732f0c56c4324088a1a18b08ec08c7b9a 100644 (file)
@@ -46,8 +46,6 @@
 #include <linux/ipmi_msgdefs.h>                /* for completion codes */
 #include "ipmi_si_sm.h"
 
-#define IPMI_SMIC_VERSION "v33"
-
 /* smic_debug is a bit-field
  *     SMIC_DEBUG_ENABLE -     turned on for now
  *     SMIC_DEBUG_MSG -        commands and their responses
@@ -588,7 +586,6 @@ static int smic_size(void)
 
 struct si_sm_handlers smic_smi_handlers =
 {
-       .version           = IPMI_SMIC_VERSION,
        .init_data         = init_smic_data,
        .start_transaction = start_smic_transaction,
        .get_result        = smic_get_result,
index d35a953961cb9df8d5df54310cea2342f68fd8f9..e71aaae855adda775f9c296e6d91a333192d8110 100644 (file)
@@ -53,8 +53,6 @@
 
 #define        PFX "IPMI Watchdog: "
 
-#define IPMI_WATCHDOG_VERSION "v33"
-
 /*
  * The IPMI command/response information for the watchdog timer.
  */
@@ -259,7 +257,7 @@ static int i_ipmi_set_timeout(struct ipmi_smi_msg  *smi_msg,
 
        data[1] = 0;
        WDOG_SET_TIMEOUT_ACT(data[1], ipmi_watchdog_state);
-       if (pretimeout > 0) {
+       if ((pretimeout > 0) && (ipmi_watchdog_state != WDOG_TIMEOUT_NONE)) {
            WDOG_SET_PRETIMEOUT_ACT(data[1], preaction_val);
            data[2] = pretimeout;
        } else {
@@ -659,19 +657,18 @@ static ssize_t ipmi_read(struct file *file,
 
 static int ipmi_open(struct inode *ino, struct file *filep)
 {
-        switch (iminor(ino))
-        {
-                case WATCHDOG_MINOR:
-                   if(test_and_set_bit(0, &ipmi_wdog_open))
+        switch (iminor(ino)) {
+        case WATCHDOG_MINOR:
+               if (test_and_set_bit(0, &ipmi_wdog_open))
                         return -EBUSY;
 
-                   /* Don't start the timer now, let it start on the
-                      first heartbeat. */
-                   ipmi_start_timer_on_heartbeat = 1;
-                    return nonseekable_open(ino, filep);
+               /* Don't start the timer now, let it start on the
+                  first heartbeat. */
+               ipmi_start_timer_on_heartbeat = 1;
+               return nonseekable_open(ino, filep);
 
-                default:
-                    return (-ENODEV);
+       default:
+               return (-ENODEV);
         }
 }
 
@@ -817,15 +814,19 @@ static void ipmi_register_watchdog(int ipmi_intf)
 static int
 ipmi_nmi(void *dev_id, struct pt_regs *regs, int cpu, int handled)
 {
+        /* If we are not expecting a timeout, ignore it. */
+       if (ipmi_watchdog_state == WDOG_TIMEOUT_NONE)
+               return NOTIFY_DONE;
+
        /* If no one else handled the NMI, we assume it was the IPMI
            watchdog. */
-       if ((!handled) && (preop_val == WDOG_PREOP_PANIC))
+       if ((!handled) && (preop_val == WDOG_PREOP_PANIC)) {
+               /* On some machines, the heartbeat will give
+                  an error and not work unless we re-enable
+                  the timer.   So do so. */
+               pretimeout_since_last_heartbeat = 1;
                panic(PFX "pre-timeout");
-
-       /* On some machines, the heartbeat will give
-          an error and not work unless we re-enable
-          the timer.   So do so. */
-       pretimeout_since_last_heartbeat = 1;
+       }
 
        return NOTIFY_DONE;
 }
@@ -924,9 +925,6 @@ static int __init ipmi_wdog_init(void)
 {
        int rv;
 
-       printk(KERN_INFO PFX "driver version "
-              IPMI_WATCHDOG_VERSION "\n");
-
        if (strcmp(action, "reset") == 0) {
                action_val = WDOG_TIMEOUT_RESET;
        } else if (strcmp(action, "none") == 0) {
@@ -1011,6 +1009,8 @@ static int __init ipmi_wdog_init(void)
        register_reboot_notifier(&wdog_reboot_notifier);
        notifier_chain_register(&panic_notifier_list, &wdog_panic_notifier);
 
+       printk(KERN_INFO PFX "driver initialized\n");
+
        return 0;
 }
 
@@ -1062,3 +1062,5 @@ static void __exit ipmi_wdog_exit(void)
 module_exit(ipmi_wdog_exit);
 module_init(ipmi_wdog_init);
 MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
+MODULE_DESCRIPTION("watchdog timer based upon the IPMI interface.");
index 115dbb35334b031e71acaedff084402499a449a2..3fa64c63110864597f6fb5d32a3d40ebe0d84384 100644 (file)
@@ -750,7 +750,7 @@ static int mbcs_probe(struct cx_dev *dev, const struct cx_device_id *id)
 
        dev->soft = NULL;
 
-       soft = kcalloc(1, sizeof(struct mbcs_soft), GFP_KERNEL);
+       soft = kzalloc(sizeof(struct mbcs_soft), GFP_KERNEL);
        if (soft == NULL)
                return -ENOMEM;
 
index 850a78c9c4bc9c639dd5b2c5816a4c89e7568eb1..f182752fe918b9b08bb601bd0bc827bb3e1f0cf2 100644 (file)
 # include <linux/efi.h>
 #endif
 
-#if defined(CONFIG_S390_TAPE) && defined(CONFIG_S390_TAPE_CHAR)
-extern void tapechar_init(void);
-#endif
-
 /*
  * Architectures vary in how they handle caching for addresses
  * outside of main memory.
index 931efd58f87a2d4270a7180f2fd9b7c22bcbfa81..0c8375165e29afca09a0ba82a6387f7a56c7e9a4 100644 (file)
@@ -63,8 +63,6 @@ static DECLARE_MUTEX(misc_sem);
 #define DYNAMIC_MINORS 64 /* like dynamic majors */
 static unsigned char misc_minors[DYNAMIC_MINORS / 8];
 
-extern int rtc_DP8570A_init(void);
-extern int rtc_MK48T08_init(void);
 extern int pmu_device_init(void);
 
 #ifdef CONFIG_PROC_FS
@@ -303,12 +301,7 @@ static int __init misc_init(void)
        misc_class = class_create(THIS_MODULE, "misc");
        if (IS_ERR(misc_class))
                return PTR_ERR(misc_class);
-#ifdef CONFIG_MVME16x
-       rtc_MK48T08_init();
-#endif
-#ifdef CONFIG_BVME6000
-       rtc_DP8570A_init();
-#endif
+
        if (register_chrdev(MISC_MAJOR,"misc",&misc_fops)) {
                printk("unable to get major %d for misc devices\n",
                       MISC_MAJOR);
index cefbe985e55cf57e94f07f52d7bc57e6e11834f3..36ae9ad2598cc755cbad3a40a86111b1a25374b2 100644 (file)
@@ -98,12 +98,13 @@ MODULE_PARM_DESC(useinput,
 
 #define SONYPI_DEVICE_MODEL_TYPE1      1
 #define SONYPI_DEVICE_MODEL_TYPE2      2
+#define SONYPI_DEVICE_MODEL_TYPE3      3
 
 /* type1 models use those */
 #define SONYPI_IRQ_PORT                        0x8034
 #define SONYPI_IRQ_SHIFT               22
-#define SONYPI_BASE                    0x50
-#define SONYPI_G10A                    (SONYPI_BASE+0x14)
+#define SONYPI_TYPE1_BASE              0x50
+#define SONYPI_G10A                    (SONYPI_TYPE1_BASE+0x14)
 #define SONYPI_TYPE1_REGION_SIZE       0x08
 #define SONYPI_TYPE1_EVTYPE_OFFSET     0x04
 
@@ -114,6 +115,13 @@ MODULE_PARM_DESC(useinput,
 #define SONYPI_TYPE2_REGION_SIZE       0x20
 #define SONYPI_TYPE2_EVTYPE_OFFSET     0x12
 
+/* type3 series specifics */
+#define SONYPI_TYPE3_BASE              0x40
+#define SONYPI_TYPE3_GID2              (SONYPI_TYPE3_BASE+0x48) /* 16 bits */
+#define SONYPI_TYPE3_MISC              (SONYPI_TYPE3_BASE+0x6d) /* 8 bits  */
+#define SONYPI_TYPE3_REGION_SIZE       0x20
+#define SONYPI_TYPE3_EVTYPE_OFFSET     0x12
+
 /* battery / brightness addresses */
 #define SONYPI_BAT_FLAGS       0x81
 #define SONYPI_LCD_LIGHT       0x96
@@ -159,6 +167,10 @@ static struct sonypi_ioport_list sonypi_type2_ioport_list[] = {
        { 0x0, 0x0 }
 };
 
+/* same as in type 2 models */
+static struct sonypi_ioport_list *sonypi_type3_ioport_list =
+       sonypi_type2_ioport_list;
+
 /* The set of possible interrupts */
 struct sonypi_irq_list {
        u16     irq;
@@ -180,6 +192,9 @@ static struct sonypi_irq_list sonypi_type2_irq_list[] = {
        {  0, 0x00 }    /* no IRQ, 0x00 in SIRQ in AML */
 };
 
+/* same as in type2 models */
+static struct sonypi_irq_list *sonypi_type3_irq_list = sonypi_type2_irq_list;
+
 #define SONYPI_CAMERA_BRIGHTNESS               0
 #define SONYPI_CAMERA_CONTRAST                 1
 #define SONYPI_CAMERA_HUE                      2
@@ -223,6 +238,7 @@ static struct sonypi_irq_list sonypi_type2_irq_list[] = {
 #define SONYPI_MEYE_MASK                       0x00000400
 #define SONYPI_MEMORYSTICK_MASK                        0x00000800
 #define SONYPI_BATTERY_MASK                    0x00001000
+#define SONYPI_WIRELESS_MASK                   0x00002000
 
 struct sonypi_event {
        u8      data;
@@ -305,6 +321,13 @@ static struct sonypi_event sonypi_blueev[] = {
        { 0, 0 }
 };
 
+/* The set of possible wireless events */
+static struct sonypi_event sonypi_wlessev[] = {
+       { 0x59, SONYPI_EVENT_WIRELESS_ON },
+       { 0x5a, SONYPI_EVENT_WIRELESS_OFF },
+       { 0, 0 }
+};
+
 /* The set of possible back button events */
 static struct sonypi_event sonypi_backev[] = {
        { 0x20, SONYPI_EVENT_BACK_PRESSED },
@@ -383,7 +406,6 @@ static struct sonypi_eventtypes {
        { SONYPI_DEVICE_MODEL_TYPE2, 0x31, SONYPI_BLUETOOTH_MASK, sonypi_blueev },
        { SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_PKEY_MASK, sonypi_pkeyev },
        { SONYPI_DEVICE_MODEL_TYPE2, 0x11, SONYPI_BACK_MASK, sonypi_backev },
-       { SONYPI_DEVICE_MODEL_TYPE2, 0x08, SONYPI_HELP_MASK, sonypi_helpev },
        { SONYPI_DEVICE_MODEL_TYPE2, 0x21, SONYPI_HELP_MASK, sonypi_helpev },
        { SONYPI_DEVICE_MODEL_TYPE2, 0x21, SONYPI_ZOOM_MASK, sonypi_zoomev },
        { SONYPI_DEVICE_MODEL_TYPE2, 0x20, SONYPI_THUMBPHRASE_MASK, sonypi_thumbphraseev },
@@ -391,6 +413,12 @@ static struct sonypi_eventtypes {
        { SONYPI_DEVICE_MODEL_TYPE2, 0x41, SONYPI_BATTERY_MASK, sonypi_batteryev },
        { SONYPI_DEVICE_MODEL_TYPE2, 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
 
+       { SONYPI_DEVICE_MODEL_TYPE3, 0, 0xffffffff, sonypi_releaseev },
+       { SONYPI_DEVICE_MODEL_TYPE3, 0x21, SONYPI_FNKEY_MASK, sonypi_fnkeyev },
+       { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_WIRELESS_MASK, sonypi_wlessev },
+       { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_MEMORYSTICK_MASK, sonypi_memorystickev },
+       { SONYPI_DEVICE_MODEL_TYPE3, 0x41, SONYPI_BATTERY_MASK, sonypi_batteryev },
+       { SONYPI_DEVICE_MODEL_TYPE3, 0x31, SONYPI_PKEY_MASK, sonypi_pkeyev },
        { 0 }
 };
 
@@ -563,6 +591,23 @@ static void sonypi_type2_srs(void)
        udelay(10);
 }
 
+static void sonypi_type3_srs(void)
+{
+       u16 v16;
+       u8  v8;
+
+       /* This model type uses the same initialiazation of
+        * the embedded controller as the type2 models. */
+       sonypi_type2_srs();
+
+       /* Initialization of PCI config space of the LPC interface bridge. */
+       v16 = (sonypi_device.ioport1 & 0xFFF0) | 0x01;
+       pci_write_config_word(sonypi_device.dev, SONYPI_TYPE3_GID2, v16);
+       pci_read_config_byte(sonypi_device.dev, SONYPI_TYPE3_MISC, &v8);
+       v8 = (v8 & 0xCF) | 0x10;
+       pci_write_config_byte(sonypi_device.dev, SONYPI_TYPE3_MISC, v8);
+}
+
 /* Disables the device - this comes from the AML code in the ACPI bios */
 static void sonypi_type1_dis(void)
 {
@@ -587,6 +632,13 @@ static void sonypi_type2_dis(void)
                printk(KERN_WARNING "ec_write failed\n");
 }
 
+static void sonypi_type3_dis(void)
+{
+       sonypi_type2_dis();
+       udelay(10);
+       pci_write_config_word(sonypi_device.dev, SONYPI_TYPE3_GID2, 0);
+}
+
 static u8 sonypi_call1(u8 dev)
 {
        u8 v1, v2;
@@ -1067,10 +1119,17 @@ static struct miscdevice sonypi_misc_device = {
 
 static void sonypi_enable(unsigned int camera_on)
 {
-       if (sonypi_device.model == SONYPI_DEVICE_MODEL_TYPE2)
-               sonypi_type2_srs();
-       else
+       switch (sonypi_device.model) {
+       case SONYPI_DEVICE_MODEL_TYPE1:
                sonypi_type1_srs();
+               break;
+       case SONYPI_DEVICE_MODEL_TYPE2:
+               sonypi_type2_srs();
+               break;
+       case SONYPI_DEVICE_MODEL_TYPE3:
+               sonypi_type3_srs();
+               break;
+       }
 
        sonypi_call1(0x82);
        sonypi_call2(0x81, 0xff);
@@ -1094,10 +1153,18 @@ static int sonypi_disable(void)
        if (!SONYPI_ACPI_ACTIVE && fnkeyinit)
                outb(0xf1, 0xb2);
 
-       if (sonypi_device.model == SONYPI_DEVICE_MODEL_TYPE2)
-               sonypi_type2_dis();
-       else
+       switch (sonypi_device.model) {
+       case SONYPI_DEVICE_MODEL_TYPE1:
                sonypi_type1_dis();
+               break;
+       case SONYPI_DEVICE_MODEL_TYPE2:
+               sonypi_type2_dis();
+               break;
+       case SONYPI_DEVICE_MODEL_TYPE3:
+               sonypi_type3_dis();
+               break;
+       }
+
        return 0;
 }
 
@@ -1143,12 +1210,16 @@ static int __devinit sonypi_probe(void)
        struct sonypi_irq_list *irq_list;
        struct pci_dev *pcidev;
 
-       pcidev = pci_get_device(PCI_VENDOR_ID_INTEL,
-                               PCI_DEVICE_ID_INTEL_82371AB_3, NULL);
+       if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL,
+                                    PCI_DEVICE_ID_INTEL_82371AB_3, NULL)))
+               sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE1;
+       else if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL,
+                                         PCI_DEVICE_ID_INTEL_ICH6_1, NULL)))
+               sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE3;
+       else
+               sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE2;
 
        sonypi_device.dev = pcidev;
-       sonypi_device.model = pcidev ?
-               SONYPI_DEVICE_MODEL_TYPE1 : SONYPI_DEVICE_MODEL_TYPE2;
 
        spin_lock_init(&sonypi_device.fifo_lock);
        sonypi_device.fifo = kfifo_alloc(SONYPI_BUF_SIZE, GFP_KERNEL,
@@ -1176,16 +1247,22 @@ static int __devinit sonypi_probe(void)
                goto out_miscreg;
        }
 
-       if (sonypi_device.model == SONYPI_DEVICE_MODEL_TYPE2) {
+
+       if (sonypi_device.model == SONYPI_DEVICE_MODEL_TYPE1) {
+               ioport_list = sonypi_type1_ioport_list;
+               sonypi_device.region_size = SONYPI_TYPE1_REGION_SIZE;
+               sonypi_device.evtype_offset = SONYPI_TYPE1_EVTYPE_OFFSET;
+               irq_list = sonypi_type1_irq_list;
+       } else if (sonypi_device.model == SONYPI_DEVICE_MODEL_TYPE2) {
                ioport_list = sonypi_type2_ioport_list;
                sonypi_device.region_size = SONYPI_TYPE2_REGION_SIZE;
                sonypi_device.evtype_offset = SONYPI_TYPE2_EVTYPE_OFFSET;
                irq_list = sonypi_type2_irq_list;
        } else {
-               ioport_list = sonypi_type1_ioport_list;
-               sonypi_device.region_size = SONYPI_TYPE1_REGION_SIZE;
-               sonypi_device.evtype_offset = SONYPI_TYPE1_EVTYPE_OFFSET;
-               irq_list = sonypi_type1_irq_list;
+               ioport_list = sonypi_type3_ioport_list;
+               sonypi_device.region_size = SONYPI_TYPE3_REGION_SIZE;
+               sonypi_device.evtype_offset = SONYPI_TYPE3_EVTYPE_OFFSET;
+               irq_list = sonypi_type3_irq_list;
        }
 
        for (i = 0; ioport_list[i].port1; i++) {
@@ -1274,11 +1351,10 @@ static int __devinit sonypi_probe(void)
 
        printk(KERN_INFO "sonypi: Sony Programmable I/O Controller Driver"
               "v%s.\n", SONYPI_DRIVER_VERSION);
-       printk(KERN_INFO "sonypi: detected %s model, "
+       printk(KERN_INFO "sonypi: detected type%d model, "
               "verbose = %d, fnkeyinit = %s, camera = %s, "
               "compat = %s, mask = 0x%08lx, useinput = %s, acpi = %s\n",
-              (sonypi_device.model == SONYPI_DEVICE_MODEL_TYPE1) ?
-                       "type1" : "type2",
+              sonypi_device.model,
               verbose,
               fnkeyinit ? "on" : "off",
               camera ? "on" : "off",
index 79e9832ef1f30141add74626adbd1a8d6916e10e..b58adfe3ed191e039888ac21bf9b57fd7db4ed23 100644 (file)
@@ -17,7 +17,7 @@ config TCG_TPM
          obtained at: <http://sourceforge.net/projects/trousers>.  To 
          compile this driver as a module, choose M here; the module 
          will be called tpm. If unsure, say N.
-         Note: For more TPM drivers enable CONFIG_PNP, CONFIG_ACPI_BUS
+         Note: For more TPM drivers enable CONFIG_PNP, CONFIG_ACPI
          and CONFIG_PNPACPI.
 
 config TCG_NSC
index cc2cc77fd174c2e825938c5d436aa7e3db2a39ce..c0d64914595fe182fb31bce1d8cc207fb19d66e4 100644 (file)
@@ -206,6 +206,9 @@ static struct pci_device_id tpm_pci_tbl[] __devinitdata = {
        {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0)},
        {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12)},
        {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0)},
+       {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_0)},
+       {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1)},
+       {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_0)},
        {PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_LPC)},
        {PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6LPC)},
        {0,}
index 6e4be3bb2d89d56b95792bf98e08bb3d201cc3ae..9d657127f313f21e653b0dd7b49fc539a66a0501 100644 (file)
@@ -153,7 +153,6 @@ static int tty_release(struct inode *, struct file *);
 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 void rs_360_init(void);
 static void release_mem(struct tty_struct *tty, int idx);
 
 
@@ -2910,11 +2909,6 @@ void __init console_init(void)
         */
 #ifdef CONFIG_EARLY_PRINTK
        disable_early_printk();
-#endif
-#ifdef CONFIG_SERIAL_68360
-       /* This is not a console initcall. I know not what it's doing here.
-          So I haven't moved it. dwmw2 */
-        rs_360_init();
 #endif
        call = __con_initcall_start;
        while (call < __con_initcall_end) {
index 665103ccaee83b69b6ca30a7fda0f40eec8983f7..b8d0c290b0dbf137152a03d3a992ad07e308738a 100644 (file)
@@ -434,21 +434,25 @@ void invert_screen(struct vc_data *vc, int offset, int count, int viewed)
 /* used by selection: complement pointer position */
 void complement_pos(struct vc_data *vc, int offset)
 {
-       static unsigned short *p;
+       static int old_offset = -1;
        static unsigned short old;
        static unsigned short oldx, oldy;
 
        WARN_CONSOLE_UNLOCKED();
 
-       if (p) {
-               scr_writew(old, p);
+       if (old_offset != -1 && old_offset >= 0 &&
+           old_offset < vc->vc_screenbuf_size) {
+               scr_writew(old, screenpos(vc, old_offset, 1));
                if (DO_UPDATE(vc))
                        vc->vc_sw->con_putc(vc, old, oldy, oldx);
        }
-       if (offset == -1)
-               p = NULL;
-       else {
+
+       old_offset = offset;
+
+       if (offset != -1 && offset >= 0 &&
+           offset < vc->vc_screenbuf_size) {
                unsigned short new;
+               unsigned short *p;
                p = screenpos(vc, offset, 1);
                old = scr_readw(p);
                new = old ^ vc->vc_complement_mask;
@@ -459,6 +463,7 @@ void complement_pos(struct vc_data *vc, int offset)
                        vc->vc_sw->con_putc(vc, new, oldy, oldx);
                }
        }
+
 }
 
 static void insert_char(struct vc_data *vc, unsigned int nr)
@@ -2272,7 +2277,9 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
                        ret = paste_selection(tty);
                        break;
                case TIOCL_UNBLANKSCREEN:
+                       acquire_console_sem();
                        unblank_screen();
+                       release_console_sem();
                        break;
                case TIOCL_SELLOADLUT:
                        ret = sel_loadlut(p);
@@ -2317,8 +2324,10 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
                        }
                        break;
                case TIOCL_BLANKSCREEN: /* until explicitly unblanked, not only poked */
+                       acquire_console_sem();
                        ignore_poke = 1;
                        do_blank_screen(0);
+                       release_console_sem();
                        break;
                case TIOCL_BLANKEDSCREEN:
                        ret = console_blanked;
index 5b29c3b2a331bd28fb34a31d18bea4d2abf6d4ad..327b58e648753013e28026f4fb9f66f4af89edfe 100644 (file)
@@ -58,4 +58,31 @@ config EFI_PCDP
 
          See <http://www.dig64.org/specifications/DIG64_HCDPv20_042804.pdf>
 
+config DELL_RBU
+       tristate "BIOS update support for DELL systems via sysfs"
+       select FW_LOADER
+       help
+        Say m if you want to have the option of updating the BIOS for your
+        DELL system. Note you need a Dell OpenManage or Dell Update package (DUP)
+        supporting application to comunicate with the BIOS regarding the new
+        image for the image update to take effect.
+        See <file:Documentation/dell_rbu.txt> for more details on the driver.
+
+config DCDBAS
+       tristate "Dell Systems Management Base Driver"
+       depends on X86 || X86_64
+       default m
+       help
+         The Dell Systems Management Base Driver provides a sysfs interface
+         for systems management software to perform System Management
+         Interrupts (SMIs) and Host Control Actions (system power cycle or
+         power off after OS shutdown) on certain Dell systems.
+
+         See <file:Documentation/dcdbas.txt> for more details on the driver
+         and the Dell systems on which Dell systems management software makes
+         use of this driver.
+
+         Say Y or M here to enable the driver for use by Dell systems
+         management software such as Dell OpenManage.
+
 endmenu
index 90fd0b26db8b0d667b7ac1b9c9c347b1eb3fed74..85429979d0db2a27021a34c5d8199b1dd47754c1 100644 (file)
@@ -4,3 +4,5 @@
 obj-$(CONFIG_EDD)              += edd.o
 obj-$(CONFIG_EFI_VARS)         += efivars.o
 obj-$(CONFIG_EFI_PCDP)         += pcdp.o
+obj-$(CONFIG_DELL_RBU)          += dell_rbu.o
+obj-$(CONFIG_DCDBAS)           += dcdbas.o
diff --git a/drivers/firmware/dcdbas.c b/drivers/firmware/dcdbas.c
new file mode 100644 (file)
index 0000000..955537f
--- /dev/null
@@ -0,0 +1,596 @@
+/*
+ *  dcdbas.c: Dell Systems Management Base Driver
+ *
+ *  The Dell Systems Management Base Driver provides a sysfs interface for
+ *  systems management software to perform System Management Interrupts (SMIs)
+ *  and Host Control Actions (power cycle or power off after OS shutdown) on
+ *  Dell systems.
+ *
+ *  See Documentation/dcdbas.txt for more information.
+ *
+ *  Copyright (C) 1995-2005 Dell Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License v2.0 as published by
+ *  the Free Software Foundation.
+ *
+ *  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.
+ */
+
+#include <linux/device.h>
+#include <linux/dma-mapping.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/mc146818rtc.h>
+#include <linux/module.h>
+#include <linux/reboot.h>
+#include <linux/sched.h>
+#include <linux/smp.h>
+#include <linux/spinlock.h>
+#include <linux/string.h>
+#include <linux/types.h>
+#include <asm/io.h>
+#include <asm/semaphore.h>
+
+#include "dcdbas.h"
+
+#define DRIVER_NAME            "dcdbas"
+#define DRIVER_VERSION         "5.6.0-1"
+#define DRIVER_DESCRIPTION     "Dell Systems Management Base Driver"
+
+static struct platform_device *dcdbas_pdev;
+
+static u8 *smi_data_buf;
+static dma_addr_t smi_data_buf_handle;
+static unsigned long smi_data_buf_size;
+static u32 smi_data_buf_phys_addr;
+static DECLARE_MUTEX(smi_data_lock);
+
+static unsigned int host_control_action;
+static unsigned int host_control_smi_type;
+static unsigned int host_control_on_shutdown;
+
+/**
+ * smi_data_buf_free: free SMI data buffer
+ */
+static void smi_data_buf_free(void)
+{
+       if (!smi_data_buf)
+               return;
+
+       dev_dbg(&dcdbas_pdev->dev, "%s: phys: %x size: %lu\n",
+               __FUNCTION__, smi_data_buf_phys_addr, smi_data_buf_size);
+
+       dma_free_coherent(&dcdbas_pdev->dev, smi_data_buf_size, smi_data_buf,
+                         smi_data_buf_handle);
+       smi_data_buf = NULL;
+       smi_data_buf_handle = 0;
+       smi_data_buf_phys_addr = 0;
+       smi_data_buf_size = 0;
+}
+
+/**
+ * smi_data_buf_realloc: grow SMI data buffer if needed
+ */
+static int smi_data_buf_realloc(unsigned long size)
+{
+       void *buf;
+       dma_addr_t handle;
+
+       if (smi_data_buf_size >= size)
+               return 0;
+
+       if (size > MAX_SMI_DATA_BUF_SIZE)
+               return -EINVAL;
+
+       /* new buffer is needed */
+       buf = dma_alloc_coherent(&dcdbas_pdev->dev, size, &handle, GFP_KERNEL);
+       if (!buf) {
+               dev_dbg(&dcdbas_pdev->dev,
+                       "%s: failed to allocate memory size %lu\n",
+                       __FUNCTION__, size);
+               return -ENOMEM;
+       }
+       /* memory zeroed by dma_alloc_coherent */
+
+       if (smi_data_buf)
+               memcpy(buf, smi_data_buf, smi_data_buf_size);
+
+       /* free any existing buffer */
+       smi_data_buf_free();
+
+       /* set up new buffer for use */
+       smi_data_buf = buf;
+       smi_data_buf_handle = handle;
+       smi_data_buf_phys_addr = (u32) virt_to_phys(buf);
+       smi_data_buf_size = size;
+
+       dev_dbg(&dcdbas_pdev->dev, "%s: phys: %x size: %lu\n",
+               __FUNCTION__, smi_data_buf_phys_addr, smi_data_buf_size);
+
+       return 0;
+}
+
+static ssize_t smi_data_buf_phys_addr_show(struct device *dev,
+                                          struct device_attribute *attr,
+                                          char *buf)
+{
+       return sprintf(buf, "%x\n", smi_data_buf_phys_addr);
+}
+
+static ssize_t smi_data_buf_size_show(struct device *dev,
+                                     struct device_attribute *attr,
+                                     char *buf)
+{
+       return sprintf(buf, "%lu\n", smi_data_buf_size);
+}
+
+static ssize_t smi_data_buf_size_store(struct device *dev,
+                                      struct device_attribute *attr,
+                                      const char *buf, size_t count)
+{
+       unsigned long buf_size;
+       ssize_t ret;
+
+       buf_size = simple_strtoul(buf, NULL, 10);
+
+       /* make sure SMI data buffer is at least buf_size */
+       down(&smi_data_lock);
+       ret = smi_data_buf_realloc(buf_size);
+       up(&smi_data_lock);
+       if (ret)
+               return ret;
+
+       return count;
+}
+
+static ssize_t smi_data_read(struct kobject *kobj, char *buf, loff_t pos,
+                            size_t count)
+{
+       size_t max_read;
+       ssize_t ret;
+
+       down(&smi_data_lock);
+
+       if (pos >= smi_data_buf_size) {
+               ret = 0;
+               goto out;
+       }
+
+       max_read = smi_data_buf_size - pos;
+       ret = min(max_read, count);
+       memcpy(buf, smi_data_buf + pos, ret);
+out:
+       up(&smi_data_lock);
+       return ret;
+}
+
+static ssize_t smi_data_write(struct kobject *kobj, char *buf, loff_t pos,
+                             size_t count)
+{
+       ssize_t ret;
+
+       down(&smi_data_lock);
+
+       ret = smi_data_buf_realloc(pos + count);
+       if (ret)
+               goto out;
+
+       memcpy(smi_data_buf + pos, buf, count);
+       ret = count;
+out:
+       up(&smi_data_lock);
+       return ret;
+}
+
+static ssize_t host_control_action_show(struct device *dev,
+                                       struct device_attribute *attr,
+                                       char *buf)
+{
+       return sprintf(buf, "%u\n", host_control_action);
+}
+
+static ssize_t host_control_action_store(struct device *dev,
+                                        struct device_attribute *attr,
+                                        const char *buf, size_t count)
+{
+       ssize_t ret;
+
+       /* make sure buffer is available for host control command */
+       down(&smi_data_lock);
+       ret = smi_data_buf_realloc(sizeof(struct apm_cmd));
+       up(&smi_data_lock);
+       if (ret)
+               return ret;
+
+       host_control_action = simple_strtoul(buf, NULL, 10);
+       return count;
+}
+
+static ssize_t host_control_smi_type_show(struct device *dev,
+                                         struct device_attribute *attr,
+                                         char *buf)
+{
+       return sprintf(buf, "%u\n", host_control_smi_type);
+}
+
+static ssize_t host_control_smi_type_store(struct device *dev,
+                                          struct device_attribute *attr,
+                                          const char *buf, size_t count)
+{
+       host_control_smi_type = simple_strtoul(buf, NULL, 10);
+       return count;
+}
+
+static ssize_t host_control_on_shutdown_show(struct device *dev,
+                                            struct device_attribute *attr,
+                                            char *buf)
+{
+       return sprintf(buf, "%u\n", host_control_on_shutdown);
+}
+
+static ssize_t host_control_on_shutdown_store(struct device *dev,
+                                             struct device_attribute *attr,
+                                             const char *buf, size_t count)
+{
+       host_control_on_shutdown = simple_strtoul(buf, NULL, 10);
+       return count;
+}
+
+/**
+ * smi_request: generate SMI request
+ *
+ * Called with smi_data_lock.
+ */
+static int smi_request(struct smi_cmd *smi_cmd)
+{
+       cpumask_t old_mask;
+       int ret = 0;
+
+       if (smi_cmd->magic != SMI_CMD_MAGIC) {
+               dev_info(&dcdbas_pdev->dev, "%s: invalid magic value\n",
+                        __FUNCTION__);
+               return -EBADR;
+       }
+
+       /* SMI requires CPU 0 */
+       old_mask = current->cpus_allowed;
+       set_cpus_allowed(current, cpumask_of_cpu(0));
+       if (smp_processor_id() != 0) {
+               dev_dbg(&dcdbas_pdev->dev, "%s: failed to get CPU 0\n",
+                       __FUNCTION__);
+               ret = -EBUSY;
+               goto out;
+       }
+
+       /* generate SMI */
+       asm volatile (
+               "outb %b0,%w1"
+               : /* no output args */
+               : "a" (smi_cmd->command_code),
+                 "d" (smi_cmd->command_address),
+                 "b" (smi_cmd->ebx),
+                 "c" (smi_cmd->ecx)
+               : "memory"
+       );
+
+out:
+       set_cpus_allowed(current, old_mask);
+       return ret;
+}
+
+/**
+ * smi_request_store:
+ *
+ * The valid values are:
+ * 0: zero SMI data buffer
+ * 1: generate calling interface SMI
+ * 2: generate raw SMI
+ *
+ * User application writes smi_cmd to smi_data before telling driver
+ * to generate SMI.
+ */
+static ssize_t smi_request_store(struct device *dev,
+                                struct device_attribute *attr,
+                                const char *buf, size_t count)
+{
+       struct smi_cmd *smi_cmd;
+       unsigned long val = simple_strtoul(buf, NULL, 10);
+       ssize_t ret;
+
+       down(&smi_data_lock);
+
+       if (smi_data_buf_size < sizeof(struct smi_cmd)) {
+               ret = -ENODEV;
+               goto out;
+       }
+       smi_cmd = (struct smi_cmd *)smi_data_buf;
+
+       switch (val) {
+       case 2:
+               /* Raw SMI */
+               ret = smi_request(smi_cmd);
+               if (!ret)
+                       ret = count;
+               break;
+       case 1:
+               /* Calling Interface SMI */
+               smi_cmd->ebx = (u32) virt_to_phys(smi_cmd->command_buffer);
+               ret = smi_request(smi_cmd);
+               if (!ret)
+                       ret = count;
+               break;
+       case 0:
+               memset(smi_data_buf, 0, smi_data_buf_size);
+               ret = count;
+               break;
+       default:
+               ret = -EINVAL;
+               break;
+       }
+
+out:
+       up(&smi_data_lock);
+       return ret;
+}
+
+/**
+ * host_control_smi: generate host control SMI
+ *
+ * Caller must set up the host control command in smi_data_buf.
+ */
+static int host_control_smi(void)
+{
+       struct apm_cmd *apm_cmd;
+       u8 *data;
+       unsigned long flags;
+       u32 num_ticks;
+       s8 cmd_status;
+       u8 index;
+
+       apm_cmd = (struct apm_cmd *)smi_data_buf;
+       apm_cmd->status = ESM_STATUS_CMD_UNSUCCESSFUL;
+
+       switch (host_control_smi_type) {
+       case HC_SMITYPE_TYPE1:
+               spin_lock_irqsave(&rtc_lock, flags);
+               /* write SMI data buffer physical address */
+               data = (u8 *)&smi_data_buf_phys_addr;
+               for (index = PE1300_CMOS_CMD_STRUCT_PTR;
+                    index < (PE1300_CMOS_CMD_STRUCT_PTR + 4);
+                    index++, data++) {
+                       outb(index,
+                            (CMOS_BASE_PORT + CMOS_PAGE2_INDEX_PORT_PIIX4));
+                       outb(*data,
+                            (CMOS_BASE_PORT + CMOS_PAGE2_DATA_PORT_PIIX4));
+               }
+
+               /* first set status to -1 as called by spec */
+               cmd_status = ESM_STATUS_CMD_UNSUCCESSFUL;
+               outb((u8) cmd_status, PCAT_APM_STATUS_PORT);
+
+               /* generate SMM call */
+               outb(ESM_APM_CMD, PCAT_APM_CONTROL_PORT);
+               spin_unlock_irqrestore(&rtc_lock, flags);
+
+               /* wait a few to see if it executed */
+               num_ticks = TIMEOUT_USEC_SHORT_SEMA_BLOCKING;
+               while ((cmd_status = inb(PCAT_APM_STATUS_PORT))
+                      == ESM_STATUS_CMD_UNSUCCESSFUL) {
+                       num_ticks--;
+                       if (num_ticks == EXPIRED_TIMER)
+                               return -ETIME;
+               }
+               break;
+
+       case HC_SMITYPE_TYPE2:
+       case HC_SMITYPE_TYPE3:
+               spin_lock_irqsave(&rtc_lock, flags);
+               /* write SMI data buffer physical address */
+               data = (u8 *)&smi_data_buf_phys_addr;
+               for (index = PE1400_CMOS_CMD_STRUCT_PTR;
+                    index < (PE1400_CMOS_CMD_STRUCT_PTR + 4);
+                    index++, data++) {
+                       outb(index, (CMOS_BASE_PORT + CMOS_PAGE1_INDEX_PORT));
+                       outb(*data, (CMOS_BASE_PORT + CMOS_PAGE1_DATA_PORT));
+               }
+
+               /* generate SMM call */
+               if (host_control_smi_type == HC_SMITYPE_TYPE3)
+                       outb(ESM_APM_CMD, PCAT_APM_CONTROL_PORT);
+               else
+                       outb(ESM_APM_CMD, PE1400_APM_CONTROL_PORT);
+
+               /* restore RTC index pointer since it was written to above */
+               CMOS_READ(RTC_REG_C);
+               spin_unlock_irqrestore(&rtc_lock, flags);
+
+               /* read control port back to serialize write */
+               cmd_status = inb(PE1400_APM_CONTROL_PORT);
+
+               /* wait a few to see if it executed */
+               num_ticks = TIMEOUT_USEC_SHORT_SEMA_BLOCKING;
+               while (apm_cmd->status == ESM_STATUS_CMD_UNSUCCESSFUL) {
+                       num_ticks--;
+                       if (num_ticks == EXPIRED_TIMER)
+                               return -ETIME;
+               }
+               break;
+
+       default:
+               dev_dbg(&dcdbas_pdev->dev, "%s: invalid SMI type %u\n",
+                       __FUNCTION__, host_control_smi_type);
+               return -ENOSYS;
+       }
+
+       return 0;
+}
+
+/**
+ * dcdbas_host_control: initiate host control
+ *
+ * This function is called by the driver after the system has
+ * finished shutting down if the user application specified a
+ * host control action to perform on shutdown.  It is safe to
+ * use smi_data_buf at this point because the system has finished
+ * shutting down and no userspace apps are running.
+ */
+static void dcdbas_host_control(void)
+{
+       struct apm_cmd *apm_cmd;
+       u8 action;
+
+       if (host_control_action == HC_ACTION_NONE)
+               return;
+
+       action = host_control_action;
+       host_control_action = HC_ACTION_NONE;
+
+       if (!smi_data_buf) {
+               dev_dbg(&dcdbas_pdev->dev, "%s: no SMI buffer\n", __FUNCTION__);
+               return;
+       }
+
+       if (smi_data_buf_size < sizeof(struct apm_cmd)) {
+               dev_dbg(&dcdbas_pdev->dev, "%s: SMI buffer too small\n",
+                       __FUNCTION__);
+               return;
+       }
+
+       apm_cmd = (struct apm_cmd *)smi_data_buf;
+
+       /* power off takes precedence */
+       if (action & HC_ACTION_HOST_CONTROL_POWEROFF) {
+               apm_cmd->command = ESM_APM_POWER_CYCLE;
+               apm_cmd->reserved = 0;
+               *((s16 *)&apm_cmd->parameters.shortreq.parm[0]) = (s16) 0;
+               host_control_smi();
+       } else if (action & HC_ACTION_HOST_CONTROL_POWERCYCLE) {
+               apm_cmd->command = ESM_APM_POWER_CYCLE;
+               apm_cmd->reserved = 0;
+               *((s16 *)&apm_cmd->parameters.shortreq.parm[0]) = (s16) 20;
+               host_control_smi();
+       }
+}
+
+/**
+ * dcdbas_reboot_notify: handle reboot notification for host control
+ */
+static int dcdbas_reboot_notify(struct notifier_block *nb, unsigned long code,
+                               void *unused)
+{
+       static unsigned int notify_cnt = 0;
+
+       switch (code) {
+       case SYS_DOWN:
+       case SYS_HALT:
+       case SYS_POWER_OFF:
+               if (host_control_on_shutdown) {
+                       /* firmware is going to perform host control action */
+                       if (++notify_cnt == 2) {
+                               printk(KERN_WARNING
+                                      "Please wait for shutdown "
+                                      "action to complete...\n");
+                               dcdbas_host_control();
+                       }
+                       /*
+                        * register again and initiate the host control
+                        * action on the second notification to allow
+                        * everyone that registered to be notified
+                        */
+                       register_reboot_notifier(nb);
+               }
+               break;
+       }
+
+       return NOTIFY_DONE;
+}
+
+static struct notifier_block dcdbas_reboot_nb = {
+       .notifier_call = dcdbas_reboot_notify,
+       .next = NULL,
+       .priority = 0
+};
+
+static DCDBAS_BIN_ATTR_RW(smi_data);
+
+static struct bin_attribute *dcdbas_bin_attrs[] = {
+       &bin_attr_smi_data,
+       NULL
+};
+
+static DCDBAS_DEV_ATTR_RW(smi_data_buf_size);
+static DCDBAS_DEV_ATTR_RO(smi_data_buf_phys_addr);
+static DCDBAS_DEV_ATTR_WO(smi_request);
+static DCDBAS_DEV_ATTR_RW(host_control_action);
+static DCDBAS_DEV_ATTR_RW(host_control_smi_type);
+static DCDBAS_DEV_ATTR_RW(host_control_on_shutdown);
+
+static struct device_attribute *dcdbas_dev_attrs[] = {
+       &dev_attr_smi_data_buf_size,
+       &dev_attr_smi_data_buf_phys_addr,
+       &dev_attr_smi_request,
+       &dev_attr_host_control_action,
+       &dev_attr_host_control_smi_type,
+       &dev_attr_host_control_on_shutdown,
+       NULL
+};
+
+/**
+ * dcdbas_init: initialize driver
+ */
+static int __init dcdbas_init(void)
+{
+       int i;
+
+       host_control_action = HC_ACTION_NONE;
+       host_control_smi_type = HC_SMITYPE_NONE;
+
+       dcdbas_pdev = platform_device_register_simple(DRIVER_NAME, -1, NULL, 0);
+       if (IS_ERR(dcdbas_pdev))
+               return PTR_ERR(dcdbas_pdev);
+
+       /*
+        * BIOS SMI calls require buffer addresses be in 32-bit address space.
+        * This is done by setting the DMA mask below.
+        */
+       dcdbas_pdev->dev.coherent_dma_mask = DMA_32BIT_MASK;
+       dcdbas_pdev->dev.dma_mask = &dcdbas_pdev->dev.coherent_dma_mask;
+
+       register_reboot_notifier(&dcdbas_reboot_nb);
+
+       for (i = 0; dcdbas_bin_attrs[i]; i++)
+               sysfs_create_bin_file(&dcdbas_pdev->dev.kobj,
+                                     dcdbas_bin_attrs[i]);
+
+       for (i = 0; dcdbas_dev_attrs[i]; i++)
+               device_create_file(&dcdbas_pdev->dev, dcdbas_dev_attrs[i]);
+
+       dev_info(&dcdbas_pdev->dev, "%s (version %s)\n",
+                DRIVER_DESCRIPTION, DRIVER_VERSION);
+
+       return 0;
+}
+
+/**
+ * dcdbas_exit: perform driver cleanup
+ */
+static void __exit dcdbas_exit(void)
+{
+       platform_device_unregister(dcdbas_pdev);
+       unregister_reboot_notifier(&dcdbas_reboot_nb);
+       smi_data_buf_free();
+}
+
+module_init(dcdbas_init);
+module_exit(dcdbas_exit);
+
+MODULE_DESCRIPTION(DRIVER_DESCRIPTION " (version " DRIVER_VERSION ")");
+MODULE_VERSION(DRIVER_VERSION);
+MODULE_AUTHOR("Dell Inc.");
+MODULE_LICENSE("GPL");
+
diff --git a/drivers/firmware/dcdbas.h b/drivers/firmware/dcdbas.h
new file mode 100644 (file)
index 0000000..58a8518
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ *  dcdbas.h: Definitions for Dell Systems Management Base driver
+ *
+ *  Copyright (C) 1995-2005 Dell Inc.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License v2.0 as published by
+ *  the Free Software Foundation.
+ *
+ *  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.
+ */
+
+#ifndef _DCDBAS_H_
+#define _DCDBAS_H_
+
+#include <linux/device.h>
+#include <linux/input.h>
+#include <linux/sysfs.h>
+#include <linux/types.h>
+
+#define MAX_SMI_DATA_BUF_SIZE                  (256 * 1024)
+
+#define HC_ACTION_NONE                         (0)
+#define HC_ACTION_HOST_CONTROL_POWEROFF                BIT(1)
+#define HC_ACTION_HOST_CONTROL_POWERCYCLE      BIT(2)
+
+#define HC_SMITYPE_NONE                                (0)
+#define HC_SMITYPE_TYPE1                       (1)
+#define HC_SMITYPE_TYPE2                       (2)
+#define HC_SMITYPE_TYPE3                       (3)
+
+#define ESM_APM_CMD                            (0x0A0)
+#define ESM_APM_POWER_CYCLE                    (0x10)
+#define ESM_STATUS_CMD_UNSUCCESSFUL            (-1)
+
+#define CMOS_BASE_PORT                         (0x070)
+#define CMOS_PAGE1_INDEX_PORT                  (0)
+#define CMOS_PAGE1_DATA_PORT                   (1)
+#define CMOS_PAGE2_INDEX_PORT_PIIX4            (2)
+#define CMOS_PAGE2_DATA_PORT_PIIX4             (3)
+#define PE1400_APM_CONTROL_PORT                        (0x0B0)
+#define PCAT_APM_CONTROL_PORT                  (0x0B2)
+#define PCAT_APM_STATUS_PORT                   (0x0B3)
+#define PE1300_CMOS_CMD_STRUCT_PTR             (0x38)
+#define PE1400_CMOS_CMD_STRUCT_PTR             (0x70)
+
+#define MAX_SYSMGMT_SHORTCMD_PARMBUF_LEN       (14)
+#define MAX_SYSMGMT_LONGCMD_SGENTRY_NUM                (16)
+
+#define TIMEOUT_USEC_SHORT_SEMA_BLOCKING       (10000)
+#define EXPIRED_TIMER                          (0)
+
+#define SMI_CMD_MAGIC                          (0x534D4931)
+
+#define DCDBAS_DEV_ATTR_RW(_name) \
+       DEVICE_ATTR(_name,0600,_name##_show,_name##_store);
+
+#define DCDBAS_DEV_ATTR_RO(_name) \
+       DEVICE_ATTR(_name,0400,_name##_show,NULL);
+
+#define DCDBAS_DEV_ATTR_WO(_name) \
+       DEVICE_ATTR(_name,0200,NULL,_name##_store);
+
+#define DCDBAS_BIN_ATTR_RW(_name) \
+struct bin_attribute bin_attr_##_name = { \
+       .attr =  { .name = __stringify(_name), \
+                  .mode = 0600, \
+                  .owner = THIS_MODULE }, \
+       .read =  _name##_read, \
+       .write = _name##_write, \
+}
+
+struct smi_cmd {
+       __u32 magic;
+       __u32 ebx;
+       __u32 ecx;
+       __u16 command_address;
+       __u8 command_code;
+       __u8 reserved;
+       __u8 command_buffer[1];
+} __attribute__ ((packed));
+
+struct apm_cmd {
+       __u8 command;
+       __s8 status;
+       __u16 reserved;
+       union {
+               struct {
+                       __u8 parm[MAX_SYSMGMT_SHORTCMD_PARMBUF_LEN];
+               } __attribute__ ((packed)) shortreq;
+
+               struct {
+                       __u16 num_sg_entries;
+                       struct {
+                               __u32 size;
+                               __u64 addr;
+                       } __attribute__ ((packed))
+                           sglist[MAX_SYSMGMT_LONGCMD_SGENTRY_NUM];
+               } __attribute__ ((packed)) longreq;
+       } __attribute__ ((packed)) parameters;
+} __attribute__ ((packed));
+
+#endif /* _DCDBAS_H_ */
+
diff --git a/drivers/firmware/dell_rbu.c b/drivers/firmware/dell_rbu.c
new file mode 100644 (file)
index 0000000..3b865f3
--- /dev/null
@@ -0,0 +1,634 @@
+/*
+ * dell_rbu.c
+ * Bios Update driver for Dell systems
+ * Author: Dell Inc
+ *         Abhay Salunke <abhay_salunke@dell.com>
+ *
+ * Copyright (C) 2005 Dell Inc.
+ *
+ * Remote BIOS Update (rbu) driver is used for updating DELL BIOS by
+ * creating entries in the /sys file systems on Linux 2.6 and higher
+ * kernels. The driver supports two mechanism to update the BIOS namely
+ * contiguous and packetized. Both these methods still require having some
+ * application to set the CMOS bit indicating the BIOS to update itself
+ * after a reboot.
+ *
+ * Contiguous method:
+ * This driver writes the incoming data in a monolithic image by allocating
+ * contiguous physical pages large enough to accommodate the incoming BIOS
+ * image size.
+ *
+ * Packetized method:
+ * The driver writes the incoming packet image by allocating a new packet
+ * on every time the packet data is written. This driver requires an
+ * application to break the BIOS image in to fixed sized packet chunks.
+ *
+ * See Documentation/dell_rbu.txt for more info.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License v2.0 as published by
+ * the Free Software Foundation
+ *
+ * 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.
+ */
+#include <linux/version.h>
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include <linux/errno.h>
+#include <linux/blkdev.h>
+#include <linux/device.h>
+#include <linux/spinlock.h>
+#include <linux/moduleparam.h>
+#include <linux/firmware.h>
+#include <linux/dma-mapping.h>
+
+MODULE_AUTHOR("Abhay Salunke <abhay_salunke@dell.com>");
+MODULE_DESCRIPTION("Driver for updating BIOS image on DELL systems");
+MODULE_LICENSE("GPL");
+MODULE_VERSION("1.0");
+
+#define BIOS_SCAN_LIMIT 0xffffffff
+#define MAX_IMAGE_LENGTH 16
+static struct _rbu_data {
+       void *image_update_buffer;
+       unsigned long image_update_buffer_size;
+       unsigned long bios_image_size;
+       int image_update_ordernum;
+       int dma_alloc;
+       spinlock_t lock;
+       unsigned long packet_read_count;
+       unsigned long packet_write_count;
+       unsigned long num_packets;
+       unsigned long packetsize;
+} rbu_data;
+
+static char image_type[MAX_IMAGE_LENGTH] = "mono";
+module_param_string(image_type, image_type, sizeof(image_type), 0);
+MODULE_PARM_DESC(image_type, "BIOS image type. choose- mono or packet");
+
+struct packet_data {
+       struct list_head list;
+       size_t length;
+       void *data;
+       int ordernum;
+};
+
+static struct packet_data packet_data_head;
+
+static struct platform_device *rbu_device;
+static int context;
+static dma_addr_t dell_rbu_dmaaddr;
+
+static void init_packet_head(void)
+{
+       INIT_LIST_HEAD(&packet_data_head.list);
+       rbu_data.packet_write_count = 0;
+       rbu_data.packet_read_count = 0;
+       rbu_data.num_packets = 0;
+       rbu_data.packetsize = 0;
+}
+
+static int fill_last_packet(void *data, size_t length)
+{
+       struct list_head *ptemp_list;
+       struct packet_data *packet = NULL;
+       int packet_count = 0;
+
+       pr_debug("fill_last_packet: entry \n");
+
+       if (!rbu_data.num_packets) {
+               pr_debug("fill_last_packet: num_packets=0\n");
+               return -ENOMEM;
+       }
+
+       packet_count = rbu_data.num_packets;
+
+       ptemp_list = (&packet_data_head.list)->prev;
+
+       packet = list_entry(ptemp_list, struct packet_data, list);
+
+       if ((rbu_data.packet_write_count + length) > rbu_data.packetsize) {
+               pr_debug("dell_rbu:%s: packet size data "
+                        "overrun\n", __FUNCTION__);
+               return -EINVAL;
+       }
+
+       pr_debug("fill_last_packet : buffer = %p\n", packet->data);
+
+       memcpy((packet->data + rbu_data.packet_write_count), data, length);
+
+       if ((rbu_data.packet_write_count + length) == rbu_data.packetsize) {
+               /*
+                * this was the last data chunk in the packet
+                * so reinitialize the packet data counter to zero
+                */
+               rbu_data.packet_write_count = 0;
+       } else
+               rbu_data.packet_write_count += length;
+
+       pr_debug("fill_last_packet: exit \n");
+       return 0;
+}
+
+static int create_packet(size_t length)
+{
+       struct packet_data *newpacket;
+       int ordernum = 0;
+
+       pr_debug("create_packet: entry \n");
+
+       if (!rbu_data.packetsize) {
+               pr_debug("create_packet: packetsize not specified\n");
+               return -EINVAL;
+       }
+
+       newpacket = kmalloc(sizeof(struct packet_data), GFP_KERNEL);
+       if (!newpacket) {
+               printk(KERN_WARNING
+                      "dell_rbu:%s: failed to allocate new "
+                      "packet\n", __FUNCTION__);
+               return -ENOMEM;
+       }
+
+       ordernum = get_order(length);
+       /*
+        * there is no upper limit on memory
+        * address for packetized mechanism
+        */
+       newpacket->data = (unsigned char *)__get_free_pages(GFP_KERNEL,
+                                                           ordernum);
+
+       pr_debug("create_packet: newpacket %p\n", newpacket->data);
+
+       if (!newpacket->data) {
+               printk(KERN_WARNING
+                      "dell_rbu:%s: failed to allocate new "
+                      "packet\n", __FUNCTION__);
+               kfree(newpacket);
+               return -ENOMEM;
+       }
+
+       newpacket->ordernum = ordernum;
+       ++rbu_data.num_packets;
+       /*
+        * initialize the newly created packet headers
+        */
+       INIT_LIST_HEAD(&newpacket->list);
+       list_add_tail(&newpacket->list, &packet_data_head.list);
+       /*
+        * packets have fixed size
+        */
+       newpacket->length = rbu_data.packetsize;
+
+       pr_debug("create_packet: exit \n");
+
+       return 0;
+}
+
+static int packetize_data(void *data, size_t length)
+{
+       int rc = 0;
+
+       if (!rbu_data.packet_write_count) {
+               if ((rc = create_packet(length)))
+                       return rc;
+       }
+       if ((rc = fill_last_packet(data, length)))
+               return rc;
+
+       return rc;
+}
+
+static int
+do_packet_read(char *data, struct list_head *ptemp_list,
+              int length, int bytes_read, int *list_read_count)
+{
+       void *ptemp_buf;
+       struct packet_data *newpacket = NULL;
+       int bytes_copied = 0;
+       int j = 0;
+
+       newpacket = list_entry(ptemp_list, struct packet_data, list);
+       *list_read_count += newpacket->length;
+
+       if (*list_read_count > bytes_read) {
+               /* point to the start of unread data */
+               j = newpacket->length - (*list_read_count - bytes_read);
+               /* point to the offset in the packet buffer */
+               ptemp_buf = (u8 *) newpacket->data + j;
+               /*
+                * check if there is enough room in
+                * * the incoming buffer
+                */
+               if (length > (*list_read_count - bytes_read))
+                       /*
+                        * copy what ever is there in this
+                        * packet and move on
+                        */
+                       bytes_copied = (*list_read_count - bytes_read);
+               else
+                       /* copy the remaining */
+                       bytes_copied = length;
+               memcpy(data, ptemp_buf, bytes_copied);
+       }
+       return bytes_copied;
+}
+
+static int packet_read_list(char *data, size_t * pread_length)
+{
+       struct list_head *ptemp_list;
+       int temp_count = 0;
+       int bytes_copied = 0;
+       int bytes_read = 0;
+       int remaining_bytes = 0;
+       char *pdest = data;
+
+       /* check if we have any packets */
+       if (0 == rbu_data.num_packets)
+               return -ENOMEM;
+
+       remaining_bytes = *pread_length;
+       bytes_read = rbu_data.packet_read_count;
+
+       ptemp_list = (&packet_data_head.list)->next;
+       while (!list_empty(ptemp_list)) {
+               bytes_copied = do_packet_read(pdest, ptemp_list,
+                                             remaining_bytes, bytes_read,
+                                             &temp_count);
+               remaining_bytes -= bytes_copied;
+               bytes_read += bytes_copied;
+               pdest += bytes_copied;
+               /*
+                * check if we reached end of buffer before reaching the
+                * last packet
+                */
+               if (remaining_bytes == 0)
+                       break;
+
+               ptemp_list = ptemp_list->next;
+       }
+       /*finally set the bytes read */
+       *pread_length = bytes_read - rbu_data.packet_read_count;
+       rbu_data.packet_read_count = bytes_read;
+       return 0;
+}
+
+static void packet_empty_list(void)
+{
+       struct list_head *ptemp_list;
+       struct list_head *pnext_list;
+       struct packet_data *newpacket;
+
+       ptemp_list = (&packet_data_head.list)->next;
+       while (!list_empty(ptemp_list)) {
+               newpacket =
+                   list_entry(ptemp_list, struct packet_data, list);
+               pnext_list = ptemp_list->next;
+               list_del(ptemp_list);
+               ptemp_list = pnext_list;
+               /*
+                * zero out the RBU packet memory before freeing
+                * to make sure there are no stale RBU packets left in memory
+                */
+               memset(newpacket->data, 0, rbu_data.packetsize);
+               free_pages((unsigned long)newpacket->data,
+                          newpacket->ordernum);
+               kfree(newpacket);
+       }
+       rbu_data.packet_write_count = 0;
+       rbu_data.packet_read_count = 0;
+       rbu_data.num_packets = 0;
+       rbu_data.packetsize = 0;
+}
+
+/*
+ * img_update_free: Frees the buffer allocated for storing BIOS image
+ * Always called with lock held and returned with lock held
+ */
+static void img_update_free(void)
+{
+       if (!rbu_data.image_update_buffer)
+               return;
+       /*
+        * zero out this buffer before freeing it to get rid of any stale
+        * BIOS image copied in memory.
+        */
+       memset(rbu_data.image_update_buffer, 0,
+              rbu_data.image_update_buffer_size);
+       if (rbu_data.dma_alloc == 1)
+               dma_free_coherent(NULL, rbu_data.bios_image_size,
+                                 rbu_data.image_update_buffer,
+                                 dell_rbu_dmaaddr);
+       else
+               free_pages((unsigned long)rbu_data.image_update_buffer,
+                          rbu_data.image_update_ordernum);
+
+       /*
+        * Re-initialize the rbu_data variables after a free
+        */
+       rbu_data.image_update_ordernum = -1;
+       rbu_data.image_update_buffer = NULL;
+       rbu_data.image_update_buffer_size = 0;
+       rbu_data.bios_image_size = 0;
+       rbu_data.dma_alloc = 0;
+}
+
+/*
+ * img_update_realloc: This function allocates the contiguous pages to
+ * accommodate the requested size of data. The memory address and size
+ * values are stored globally and on every call to this function the new
+ * size is checked to see if more data is required than the existing size.
+ * If true the previous memory is freed and new allocation is done to
+ * accommodate the new size. If the incoming size is less then than the
+ * already allocated size, then that memory is reused. This function is
+ * called with lock held and returns with lock held.
+ */
+static int img_update_realloc(unsigned long size)
+{
+       unsigned char *image_update_buffer = NULL;
+       unsigned long rc;
+       unsigned long img_buf_phys_addr;
+       int ordernum;
+       int dma_alloc = 0;
+
+       /*
+        * check if the buffer of sufficient size has been
+        * already allocated
+        */
+       if (rbu_data.image_update_buffer_size >= size) {
+               /*
+                * check for corruption
+                */
+               if ((size != 0) && (rbu_data.image_update_buffer == NULL)) {
+                       printk(KERN_ERR "dell_rbu:%s: corruption "
+                              "check failed\n", __FUNCTION__);
+                       return -EINVAL;
+               }
+               /*
+                * we have a valid pre-allocated buffer with
+                * sufficient size
+                */
+               return 0;
+       }
+
+       /*
+        * free any previously allocated buffer
+        */
+       img_update_free();
+
+       spin_unlock(&rbu_data.lock);
+
+       ordernum = get_order(size);
+       image_update_buffer =
+           (unsigned char *)__get_free_pages(GFP_KERNEL, ordernum);
+
+       img_buf_phys_addr =
+           (unsigned long)virt_to_phys(image_update_buffer);
+
+       if (img_buf_phys_addr > BIOS_SCAN_LIMIT) {
+               free_pages((unsigned long)image_update_buffer, ordernum);
+               ordernum = -1;
+               image_update_buffer = dma_alloc_coherent(NULL, size,
+                                                        &dell_rbu_dmaaddr,
+                                                        GFP_KERNEL);
+               dma_alloc = 1;
+       }
+
+       spin_lock(&rbu_data.lock);
+
+       if (image_update_buffer != NULL) {
+               rbu_data.image_update_buffer = image_update_buffer;
+               rbu_data.image_update_buffer_size = size;
+               rbu_data.bios_image_size =
+                   rbu_data.image_update_buffer_size;
+               rbu_data.image_update_ordernum = ordernum;
+               rbu_data.dma_alloc = dma_alloc;
+               rc = 0;
+       } else {
+               pr_debug("Not enough memory for image update:"
+                        "size = %ld\n", size);
+               rc = -ENOMEM;
+       }
+
+       return rc;
+}
+
+static ssize_t read_packet_data(char *buffer, loff_t pos, size_t count)
+{
+       int retval;
+       size_t bytes_left;
+       size_t data_length;
+       char *ptempBuf = buffer;
+       unsigned long imagesize;
+
+       /* check to see if we have something to return */
+       if (rbu_data.num_packets == 0) {
+               pr_debug("read_packet_data: no packets written\n");
+               retval = -ENOMEM;
+               goto read_rbu_data_exit;
+       }
+
+       imagesize = rbu_data.num_packets * rbu_data.packetsize;
+
+       if (pos > imagesize) {
+               retval = 0;
+               printk(KERN_WARNING "dell_rbu:read_packet_data: "
+                      "data underrun\n");
+               goto read_rbu_data_exit;
+       }
+
+       bytes_left = imagesize - pos;
+       data_length = min(bytes_left, count);
+
+       if ((retval = packet_read_list(ptempBuf, &data_length)) < 0)
+               goto read_rbu_data_exit;
+
+       if ((pos + count) > imagesize) {
+               rbu_data.packet_read_count = 0;
+               /* this was the last copy */
+               retval = bytes_left;
+       } else
+               retval = count;
+
+      read_rbu_data_exit:
+       return retval;
+}
+
+static ssize_t read_rbu_mono_data(char *buffer, loff_t pos, size_t count)
+{
+       unsigned char *ptemp = NULL;
+       size_t bytes_left = 0;
+       size_t data_length = 0;
+       ssize_t ret_count = 0;
+
+       /* check to see if we have something to return */
+       if ((rbu_data.image_update_buffer == NULL) ||
+           (rbu_data.bios_image_size == 0)) {
+               pr_debug("read_rbu_data_mono: image_update_buffer %p ,"
+                        "bios_image_size %lu\n",
+                        rbu_data.image_update_buffer,
+                        rbu_data.bios_image_size);
+               ret_count = -ENOMEM;
+               goto read_rbu_data_exit;
+       }
+
+       if (pos > rbu_data.bios_image_size) {
+               ret_count = 0;
+               goto read_rbu_data_exit;
+       }
+
+       bytes_left = rbu_data.bios_image_size - pos;
+       data_length = min(bytes_left, count);
+
+       ptemp = rbu_data.image_update_buffer;
+       memcpy(buffer, (ptemp + pos), data_length);
+
+       if ((pos + count) > rbu_data.bios_image_size)
+               /* this was the last copy */
+               ret_count = bytes_left;
+       else
+               ret_count = count;
+      read_rbu_data_exit:
+       return ret_count;
+}
+
+static ssize_t
+read_rbu_data(struct kobject *kobj, char *buffer, loff_t pos, size_t count)
+{
+       ssize_t ret_count = 0;
+
+       spin_lock(&rbu_data.lock);
+
+       if (!strcmp(image_type, "mono"))
+               ret_count = read_rbu_mono_data(buffer, pos, count);
+       else if (!strcmp(image_type, "packet"))
+               ret_count = read_packet_data(buffer, pos, count);
+       else
+               pr_debug("read_rbu_data: invalid image type specified\n");
+
+       spin_unlock(&rbu_data.lock);
+       return ret_count;
+}
+
+static ssize_t
+read_rbu_image_type(struct kobject *kobj, char *buffer, loff_t pos,
+                   size_t count)
+{
+       int size = 0;
+       if (!pos)
+               size = sprintf(buffer, "%s\n", image_type);
+       return size;
+}
+
+static ssize_t
+write_rbu_image_type(struct kobject *kobj, char *buffer, loff_t pos,
+                    size_t count)
+{
+       int rc = count;
+       spin_lock(&rbu_data.lock);
+
+       if (strlen(buffer) < MAX_IMAGE_LENGTH)
+               sscanf(buffer, "%s", image_type);
+       else
+               printk(KERN_WARNING "dell_rbu: image_type is invalid"
+                      "max chars = %d, \n incoming str--%s-- \n",
+                      MAX_IMAGE_LENGTH, buffer);
+
+       /* we must free all previous allocations */
+       packet_empty_list();
+       img_update_free();
+
+       spin_unlock(&rbu_data.lock);
+       return rc;
+
+}
+
+static struct bin_attribute rbu_data_attr = {
+       .attr = {.name = "data",.owner = THIS_MODULE,.mode = 0444},
+       .read = read_rbu_data,
+};
+
+static struct bin_attribute rbu_image_type_attr = {
+       .attr = {.name = "image_type",.owner = THIS_MODULE,.mode = 0644},
+       .read = read_rbu_image_type,
+       .write = write_rbu_image_type,
+};
+
+static void callbackfn_rbu(const struct firmware *fw, void *context)
+{
+       int rc = 0;
+
+       if (!fw || !fw->size)
+               return;
+
+       spin_lock(&rbu_data.lock);
+       if (!strcmp(image_type, "mono")) {
+               if (!img_update_realloc(fw->size))
+                       memcpy(rbu_data.image_update_buffer,
+                              fw->data, fw->size);
+       } else if (!strcmp(image_type, "packet")) {
+               if (!rbu_data.packetsize)
+                       rbu_data.packetsize = fw->size;
+               else if (rbu_data.packetsize != fw->size) {
+                       packet_empty_list();
+                       rbu_data.packetsize = fw->size;
+               }
+               packetize_data(fw->data, fw->size);
+       } else
+               pr_debug("invalid image type specified.\n");
+       spin_unlock(&rbu_data.lock);
+
+       rc = request_firmware_nowait(THIS_MODULE, FW_ACTION_NOHOTPLUG,
+                                    "dell_rbu", &rbu_device->dev,
+                                    &context, callbackfn_rbu);
+       if (rc)
+               printk(KERN_ERR
+                      "dell_rbu:%s request_firmware_nowait failed"
+                      " %d\n", __FUNCTION__, rc);
+}
+
+static int __init dcdrbu_init(void)
+{
+       int rc = 0;
+       spin_lock_init(&rbu_data.lock);
+
+       init_packet_head();
+       rbu_device =
+           platform_device_register_simple("dell_rbu", -1, NULL, 0);
+       if (!rbu_device) {
+               printk(KERN_ERR
+                      "dell_rbu:%s:platform_device_register_simple "
+                      "failed\n", __FUNCTION__);
+               return -EIO;
+       }
+
+       sysfs_create_bin_file(&rbu_device->dev.kobj, &rbu_data_attr);
+       sysfs_create_bin_file(&rbu_device->dev.kobj, &rbu_image_type_attr);
+
+       rc = request_firmware_nowait(THIS_MODULE, FW_ACTION_NOHOTPLUG,
+                                    "dell_rbu", &rbu_device->dev,
+                                    &context, callbackfn_rbu);
+       if (rc)
+               printk(KERN_ERR "dell_rbu:%s:request_firmware_nowait"
+                      " failed %d\n", __FUNCTION__, rc);
+
+       return rc;
+
+}
+
+static __exit void dcdrbu_exit(void)
+{
+       spin_lock(&rbu_data.lock);
+       packet_empty_list();
+       img_update_free();
+       spin_unlock(&rbu_data.lock);
+       platform_device_unregister(rbu_device);
+}
+
+module_exit(dcdrbu_exit);
+module_init(dcdrbu_init);
index 354a262956725ebe8812908bf3a5341e593bc171..8ee56d4b38910486b42746c953d9f4e6cff5135a 100644 (file)
@@ -1489,7 +1489,7 @@ static int isp1301_probe(struct i2c_adapter *bus, int address, int kind)
        if (the_transceiver)
                return 0;
 
-       isp = kcalloc(1, sizeof *isp, GFP_KERNEL);
+       isp = kzalloc(sizeof *isp, GFP_KERNEL);
        if (!isp)
                return 0;
 
index c9d3a00a3c0c643bedcefd299d41d9075a08c036..234f5de3e929b6c0d10ee46a994e200f16f62646 100644 (file)
@@ -754,7 +754,7 @@ static int idedisk_issue_flush(request_queue_t *q, struct gendisk *disk,
 
        idedisk_prepare_flush(q, rq);
 
-       ret = blk_execute_rq(q, disk, rq);
+       ret = blk_execute_rq(q, disk, rq, 0);
 
        /*
         * if we failed and caller wants error offset, get it
index bebcc47ab06c2614c0d141d522c7731a212afa08..b23322523ef57b1cf147e4368239487e55ef15bc 100644 (file)
@@ -1068,6 +1068,8 @@ static int nodemgr_hotplug(struct class_device *cdev, char **envp, int num_envp,
        struct unit_directory *ud;
        int i = 0;
        int length = 0;
+       /* ieee1394:venNmoNspNverN */
+       char buf[8 + 1 + 3 + 8 + 2 + 8 + 2 + 8 + 3 + 8 + 1];
 
        if (!cdev)
                return -ENODEV;
@@ -1094,6 +1096,12 @@ do {                                                             \
        PUT_ENVP("GUID=%016Lx", (unsigned long long)ud->ne->guid);
        PUT_ENVP("SPECIFIER_ID=%06x", ud->specifier_id);
        PUT_ENVP("VERSION=%06x", ud->version);
+       snprintf(buf, sizeof(buf), "ieee1394:ven%08Xmo%08Xsp%08Xver%08X",
+                       ud->vendor_id,
+                       ud->model_id,
+                       ud->specifier_id,
+                       ud->version);
+       PUT_ENVP("MODALIAS=%s", buf);
 
 #undef PUT_ENVP
 
index fae1c2dcee51660650921523ae85e1c5748b26fe..211ba3223f65cc7c2d78f77d3cc84ab50d3639cd 100644 (file)
@@ -463,7 +463,7 @@ alloc_group_attrs(ssize_t (*show)(struct ib_port *,
                return NULL;
 
        for (i = 0; i < len; i++) {
-               element = kcalloc(1, sizeof(struct port_table_attribute),
+               element = kzalloc(sizeof(struct port_table_attribute),
                                  GFP_KERNEL);
                if (!element)
                        goto err;
index f8b278d3559bc2b3553d8949192ee1ce6494bc78..19c14c4beb44e2537b2207435e5a625efb9a5f2f 100644 (file)
@@ -393,6 +393,7 @@ static long evdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                                                case EV_LED: bits = dev->ledbit; len = LED_MAX; break;
                                                case EV_SND: bits = dev->sndbit; len = SND_MAX; break;
                                                case EV_FF:  bits = dev->ffbit;  len = FF_MAX;  break;
+                                               case EV_SW:  bits = dev->swbit;  len = SW_MAX;  break;
                                                default: return -EINVAL;
                                        }
                                        len = NBITS(len) * sizeof(long);
@@ -421,6 +422,13 @@ static long evdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                                        return copy_to_user(p, dev->snd, len) ? -EFAULT : len;
                                }
 
+                               if (_IOC_NR(cmd) == _IOC_NR(EVIOCGSW(0))) {
+                                       int len;
+                                       len = NBITS(SW_MAX) * sizeof(long);
+                                       if (len > _IOC_SIZE(cmd)) len = _IOC_SIZE(cmd);
+                                       return copy_to_user(p, dev->sw, len) ? -EFAULT : len;
+                               }
+
                                if (_IOC_NR(cmd) == _IOC_NR(EVIOCGNAME(0))) {
                                        int len;
                                        if (!dev->name) return -ENOENT;
index a0118038330a9702f0fd7a03e8269920575f8d18..462f8d300aae5629719c58a983627fed065879a5 100644 (file)
@@ -75,7 +75,7 @@ static int __devinit emu_probe(struct pci_dev *pdev, const struct pci_device_id
        if (!request_region(ioport, iolen, "emu10k1-gp"))
                return -EBUSY;
 
-       emu = kcalloc(1, sizeof(struct emu), GFP_KERNEL);
+       emu = kzalloc(sizeof(struct emu), GFP_KERNEL);
        port = gameport_allocate_port();
        if (!emu || !port) {
                printk(KERN_ERR "emu10k1-gp: Memory allocation failed\n");
index 57615bc639061384d7243230620cd542952213f1..47e93daa0fa7c498aec5ae237135126d0ef2e040 100644 (file)
@@ -83,7 +83,7 @@ static int __devinit fm801_gp_probe(struct pci_dev *pci, const struct pci_device
        struct fm801_gp *gp;
        struct gameport *port;
 
-       gp = kcalloc(1, sizeof(struct fm801_gp), GFP_KERNEL);
+       gp = kzalloc(sizeof(struct fm801_gp), GFP_KERNEL);
        port = gameport_allocate_port();
        if (!gp || !port) {
                printk(KERN_ERR "fm801-gp: Memory allocation failed\n");
index 70f051894a3cfa4d50f5dda7268c6af26e63b96f..d2e55dc956bafd3477ebd4e7ea448263b6375fcd 100644 (file)
@@ -142,7 +142,7 @@ static int ns558_isa_probe(int io)
                        return -EBUSY;
        }
 
-       ns558 = kcalloc(1, sizeof(struct ns558), GFP_KERNEL);
+       ns558 = kzalloc(sizeof(struct ns558), GFP_KERNEL);
        port = gameport_allocate_port();
        if (!ns558 || !port) {
                printk(KERN_ERR "ns558: Memory allocation failed.\n");
@@ -215,7 +215,7 @@ static int ns558_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *did)
        if (!request_region(ioport, iolen, "ns558-pnp"))
                return -EBUSY;
 
-       ns558 = kcalloc(1, sizeof(struct ns558), GFP_KERNEL);
+       ns558 = kzalloc(sizeof(struct ns558), GFP_KERNEL);
        port = gameport_allocate_port();
        if (!ns558 || !port) {
                printk(KERN_ERR "ns558: Memory allocation failed\n");
index a275211c8e1e3434a2788771b63b68077807892f..88636a204525e84862972ea7034c02ae020ae4bb 100644 (file)
@@ -89,6 +89,15 @@ void input_event(struct input_dev *dev, unsigned int type, unsigned int code, in
 
                        break;
 
+               case EV_SW:
+
+                       if (code > SW_MAX || !test_bit(code, dev->swbit) || !!test_bit(code, dev->sw) == value)
+                               return;
+
+                       change_bit(code, dev->sw);
+
+                       break;
+
                case EV_ABS:
 
                        if (code > ABS_MAX || !test_bit(code, dev->absbit))
@@ -402,6 +411,7 @@ static void input_call_hotplug(char *verb, struct input_dev *dev)
        SPRINTF_BIT_A2(ledbit, "LED=", LED_MAX, EV_LED);
        SPRINTF_BIT_A2(sndbit, "SND=", SND_MAX, EV_SND);
        SPRINTF_BIT_A2(ffbit,  "FF=",  FF_MAX, EV_FF);
+       SPRINTF_BIT_A2(swbit,  "SW=",  SW_MAX, EV_SW);
 
        envp[i++] = NULL;
 
@@ -490,6 +500,7 @@ static int input_devices_read(char *buf, char **start, off_t pos, int count, int
                SPRINTF_BIT_B2(ledbit, "LED=", LED_MAX, EV_LED);
                SPRINTF_BIT_B2(sndbit, "SND=", SND_MAX, EV_SND);
                SPRINTF_BIT_B2(ffbit,  "FF=",  FF_MAX, EV_FF);
+               SPRINTF_BIT_B2(swbit,  "SW=",  SW_MAX, EV_SW);
 
                len += sprintf(buf + len, "\n");
 
index bf34f75b9467f6650c5447a020f562787bccacfb..bf65430181faf0f2ee5db443f950bd35c90963f8 100644 (file)
@@ -269,7 +269,7 @@ static int a3d_connect(struct gameport *gameport, struct gameport_driver *drv)
        int i;
        int err;
 
-       if (!(a3d = kcalloc(1, sizeof(struct a3d), GFP_KERNEL)))
+       if (!(a3d = kzalloc(sizeof(struct a3d), GFP_KERNEL)))
                return -ENOMEM;
 
        a3d->gameport = gameport;
index 265962956c63cbf9d924f8bd8518981d10cf2ea5..cf35ae638a0d2c129544d16d90c87c22027e2b4e 100644 (file)
@@ -469,7 +469,7 @@ static int adi_connect(struct gameport *gameport, struct gameport_driver *drv)
        int i;
        int err;
 
-       if (!(port = kcalloc(1, sizeof(struct adi_port), GFP_KERNEL)))
+       if (!(port = kzalloc(sizeof(struct adi_port), GFP_KERNEL)))
                return -ENOMEM;
 
        port->gameport = gameport;
index c3a5739030c3ba45d8dd1dda01cd79382faf3478..64b1313a3c66d0c6400dcbd8e35c9f60c0041bd9 100644 (file)
@@ -655,7 +655,7 @@ static int analog_connect(struct gameport *gameport, struct gameport_driver *drv
        int i;
        int err;
 
-       if (!(port = kcalloc(1, sizeof(struct analog_port), GFP_KERNEL)))
+       if (!(port = kzalloc(sizeof(struct analog_port), GFP_KERNEL)))
                return - ENOMEM;
 
        err = analog_init_port(gameport, drv, port);
index a6002205328f80d16bf882054f5bfc32f9b806ac..0b2e9fa2657969457dfc2db4c12b39c5984f8966 100644 (file)
@@ -163,7 +163,7 @@ static int cobra_connect(struct gameport *gameport, struct gameport_driver *drv)
        int i, j;
        int err;
 
-       if (!(cobra = kcalloc(1, sizeof(struct cobra), GFP_KERNEL)))
+       if (!(cobra = kzalloc(sizeof(struct cobra), GFP_KERNEL)))
                return -ENOMEM;
 
        cobra->gameport = gameport;
index fbd3eed07f90403806e1bce3212781a638e35241..2a3e4bb2da507ef78f9cc33cf88b88e19d262fac 100644 (file)
@@ -572,7 +572,7 @@ static struct db9 __init *db9_probe(int *config, int nargs)
                }
        }
 
-       if (!(db9 = kcalloc(1, sizeof(struct db9), GFP_KERNEL))) {
+       if (!(db9 = kzalloc(sizeof(struct db9), GFP_KERNEL))) {
                parport_put_port(pp);
                return NULL;
        }
index 95bbdd302aad8639bacc4817e6f49b472e749211..5427bf9fc862320261a2c45aebbe53beeb761d00 100644 (file)
@@ -554,7 +554,7 @@ static struct gc __init *gc_probe(int *config, int nargs)
                return NULL;
        }
 
-       if (!(gc = kcalloc(1, sizeof(struct gc), GFP_KERNEL))) {
+       if (!(gc = kzalloc(sizeof(struct gc), GFP_KERNEL))) {
                parport_put_port(pp);
                return NULL;
        }
index 7d969420066c75c0140eed3ba2d88bc9cf7fedf5..8e4f92b115e6aa8188c70745011e40c71e00ab48 100644 (file)
@@ -242,7 +242,7 @@ static int gf2k_connect(struct gameport *gameport, struct gameport_driver *drv)
        unsigned char data[GF2K_LENGTH];
        int i, err;
 
-       if (!(gf2k = kcalloc(1, sizeof(struct gf2k), GFP_KERNEL)))
+       if (!(gf2k = kzalloc(sizeof(struct gf2k), GFP_KERNEL)))
                return -ENOMEM;
 
        gf2k->gameport = gameport;
index d1500d2562d67ec99fcaa72de01dac377cf14d23..9d3f910dd568b4cb46f7daf8ee0a6027b7ab5f8a 100644 (file)
@@ -301,7 +301,7 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv)
        int i, j, t;
        int err;
 
-       if (!(grip = kcalloc(1, sizeof(struct grip), GFP_KERNEL)))
+       if (!(grip = kzalloc(sizeof(struct grip), GFP_KERNEL)))
                return -ENOMEM;
 
        grip->gameport = gameport;
index 0da7bd133ccf39f03e948d60e2bfa19e18b742ea..da17eee6f5741f45cea1d86eca0be7c5045307a9 100644 (file)
@@ -607,7 +607,7 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv)
        struct grip_mp *grip;
        int err;
 
-       if (!(grip = kcalloc(1, sizeof(struct grip_mp), GFP_KERNEL)))
+       if (!(grip = kzalloc(sizeof(struct grip_mp), GFP_KERNEL)))
                return -ENOMEM;
 
        grip->gameport = gameport;
index f93da7bc082d08622b0859222a87b7e981407304..6a70ec429f063eb28d6f6f251037b695cb794841 100644 (file)
@@ -183,7 +183,7 @@ static int guillemot_connect(struct gameport *gameport, struct gameport_driver *
        int i, t;
        int err;
 
-       if (!(guillemot = kcalloc(1, sizeof(struct guillemot), GFP_KERNEL)))
+       if (!(guillemot = kzalloc(sizeof(struct guillemot), GFP_KERNEL)))
                return -ENOMEM;
 
        guillemot->gameport = gameport;
index 9d3f8c38cb097391403f44846781a75d4c68d845..d7b3472bd686611a5e30276203ea42778b1ea199 100644 (file)
@@ -212,7 +212,7 @@ static int interact_connect(struct gameport *gameport, struct gameport_driver *d
        int i, t;
        int err;
 
-       if (!(interact = kcalloc(1, sizeof(struct interact), GFP_KERNEL)))
+       if (!(interact = kzalloc(sizeof(struct interact), GFP_KERNEL)))
                return -ENOMEM;
 
        interact->gameport = gameport;
index 47144a7ed9e750f4682eac415c9d6bf7c8ac1b49..9e0353721a35d8892e96d5a5779075bafb1b92e5 100644 (file)
@@ -590,7 +590,7 @@ static int sw_connect(struct gameport *gameport, struct gameport_driver *drv)
 
        comment[0] = 0;
 
-       sw = kcalloc(1, sizeof(struct sw), GFP_KERNEL);
+       sw = kzalloc(sizeof(struct sw), GFP_KERNEL);
        buf = kmalloc(SW_LENGTH, GFP_KERNEL);
        idbuf = kmalloc(SW_LENGTH, GFP_KERNEL);
        if (!sw || !buf || !idbuf) {
index 9eb9954cac6e2584e70ef4c9a9d6646c494e348d..7431efc4330edb090696ea66b78e06e5c4d30378 100644 (file)
@@ -262,7 +262,7 @@ static int tmdc_connect(struct gameport *gameport, struct gameport_driver *drv)
        int i, j, k, l, m;
        int err;
 
-       if (!(tmdc = kcalloc(1, sizeof(struct tmdc), GFP_KERNEL)))
+       if (!(tmdc = kzalloc(sizeof(struct tmdc), GFP_KERNEL)))
                return -ENOMEM;
 
        tmdc->gameport = gameport;
index 28100d461cb751c1c1d8b34f4fb5001b970e1b2c..0c5b9c8297cd4ff1afb1c1fe979f962d944a6dca 100644 (file)
@@ -178,7 +178,7 @@ static struct tgfx __init *tgfx_probe(int *config, int nargs)
                return NULL;
        }
 
-       if (!(tgfx = kcalloc(1, sizeof(struct tgfx), GFP_KERNEL))) {
+       if (!(tgfx = kzalloc(sizeof(struct tgfx), GFP_KERNEL))) {
                parport_put_port(pp);
                return NULL;
        }
index a8551711e8d60031ffaadbb1e7e632a32f162aed..cd4b6e795013a841399cdcfbb25012990e240054 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/init.h>
 #include <linux/input.h>
 #include <linux/interrupt.h>
+#include <linux/jiffies.h>
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <asm/irq.h>
@@ -32,7 +33,6 @@
 /* zero code, 124 scancodes + 3 hinge combinations */
 #define        NR_SCANCODES            ( SCANCODE(KB_ROWS-1,KB_COLS-1) +1 +1 +3 )
 #define SCAN_INTERVAL          (HZ/10)
-#define CORGIKBD_PRESSED       1
 
 #define HINGE_SCAN_INTERVAL            (HZ/4)
 
@@ -73,25 +73,13 @@ struct corgikbd {
        struct input_dev input;
        char phys[32];
 
-       unsigned char state[ARRAY_SIZE(corgikbd_keycode)];
        spinlock_t lock;
-
        struct timer_list timer;
        struct timer_list htimer;
-};
 
-static void handle_scancode(unsigned int pressed,unsigned int scancode, struct corgikbd *corgikbd_data)
-{
-       if (pressed && !(corgikbd_data->state[scancode] & CORGIKBD_PRESSED)) {
-               corgikbd_data->state[scancode] |= CORGIKBD_PRESSED;
-               input_report_key(&corgikbd_data->input, corgikbd_data->keycode[scancode], 1);
-               if (corgikbd_data->keycode[scancode] == CORGI_KEY_OFF)
-                       input_event(&corgikbd_data->input, EV_PWR, CORGI_KEY_OFF, 1);
-       } else if (!pressed && corgikbd_data->state[scancode] & CORGIKBD_PRESSED) {
-               corgikbd_data->state[scancode] &= ~CORGIKBD_PRESSED;
-               input_report_key(&corgikbd_data->input, corgikbd_data->keycode[scancode], 0);
-       }
-}
+       unsigned int suspended;
+       unsigned long suspend_jiffies;
+};
 
 #define KB_DISCHARGE_DELAY     10
 #define KB_ACTIVATE_DELAY      10
@@ -105,36 +93,36 @@ static void handle_scancode(unsigned int pressed,unsigned int scancode, struct c
  */
 static inline void corgikbd_discharge_all(void)
 {
-       // STROBE All HiZ
+       /* STROBE All HiZ */
        GPCR2  = CORGI_GPIO_ALL_STROBE_BIT;
        GPDR2 &= ~CORGI_GPIO_ALL_STROBE_BIT;
 }
 
 static inline void corgikbd_activate_all(void)
 {
-       // STROBE ALL -> High
+       /* STROBE ALL -> High */
        GPSR2  = CORGI_GPIO_ALL_STROBE_BIT;
        GPDR2 |= CORGI_GPIO_ALL_STROBE_BIT;
 
        udelay(KB_DISCHARGE_DELAY);
 
-       // Clear any interrupts we may have triggered when altering the GPIO lines
+       /* Clear any interrupts we may have triggered when altering the GPIO lines */
        GEDR1 = CORGI_GPIO_HIGH_SENSE_BIT;
        GEDR2 = CORGI_GPIO_LOW_SENSE_BIT;
 }
 
 static inline void corgikbd_activate_col(int col)
 {
-       // STROBE col -> High, not col -> HiZ
+       /* STROBE col -> High, not col -> HiZ */
        GPSR2 = CORGI_GPIO_STROBE_BIT(col);
        GPDR2 = (GPDR2 & ~CORGI_GPIO_ALL_STROBE_BIT) | CORGI_GPIO_STROBE_BIT(col);
 }
 
 static inline void corgikbd_reset_col(int col)
 {
-       // STROBE col -> Low
+       /* STROBE col -> Low */
        GPCR2 = CORGI_GPIO_STROBE_BIT(col);
-       // STROBE col -> out, not col -> HiZ
+       /* STROBE col -> out, not col -> HiZ */
        GPDR2 = (GPDR2 & ~CORGI_GPIO_ALL_STROBE_BIT) | CORGI_GPIO_STROBE_BIT(col);
 }
 
@@ -149,10 +137,13 @@ static inline void corgikbd_reset_col(int col)
 /* Scan the hardware keyboard and push any changes up through the input layer */
 static void corgikbd_scankeyboard(struct corgikbd *corgikbd_data, struct pt_regs *regs)
 {
-       unsigned int row, col, rowd, scancode;
+       unsigned int row, col, rowd;
        unsigned long flags;
        unsigned int num_pressed;
 
+       if (corgikbd_data->suspended)
+               return;
+
        spin_lock_irqsave(&corgikbd_data->lock, flags);
 
        if (regs)
@@ -173,10 +164,21 @@ static void corgikbd_scankeyboard(struct corgikbd *corgikbd_data, struct pt_regs
 
                rowd = GET_ROWS_STATUS(col);
                for (row = 0; row < KB_ROWS; row++) {
+                       unsigned int scancode, pressed;
+
                        scancode = SCANCODE(row, col);
-                       handle_scancode((rowd & KB_ROWMASK(row)), scancode, corgikbd_data);
-                       if (rowd & KB_ROWMASK(row))
+                       pressed = rowd & KB_ROWMASK(row);
+
+                       input_report_key(&corgikbd_data->input, corgikbd_data->keycode[scancode], pressed);
+
+                       if (pressed)
                                num_pressed++;
+
+                       if (pressed && (corgikbd_data->keycode[scancode] == CORGI_KEY_OFF)
+                                       && time_after(jiffies, corgikbd_data->suspend_jiffies + HZ)) {
+                               input_event(&corgikbd_data->input, EV_PWR, CORGI_KEY_OFF, 1);
+                               corgikbd_data->suspend_jiffies=jiffies;
+                       }
                }
                corgikbd_reset_col(col);
        }
@@ -221,8 +223,11 @@ static void corgikbd_timer_callback(unsigned long data)
  * The hinge switches generate no interrupt so they need to be
  * monitored by a timer.
  *
- * When we detect changes, we debounce it and then pass the three
- * positions the system can take as keypresses to the input system.
+ * We debounce the switches and pass them to the input system.
+ *
+ *  gprr == 0x00 - Keyboard with Landscape Screen
+ *          0x08 - No Keyboard with Portrait Screen
+ *          0x0c - Keyboard and Screen Closed
  */
 
 #define HINGE_STABLE_COUNT 2
@@ -235,7 +240,7 @@ static void corgikbd_hinge_timer(unsigned long data)
        unsigned long gprr;
        unsigned long flags;
 
-       gprr = read_scoop_reg(SCOOP_GPRR) & (CORGI_SCP_SWA | CORGI_SCP_SWB);
+       gprr = read_scoop_reg(&corgiscoop_device.dev, SCOOP_GPRR) & (CORGI_SCP_SWA | CORGI_SCP_SWB);
        if (gprr != sharpsl_hinge_state) {
                hinge_count = 0;
                sharpsl_hinge_state = gprr;
@@ -244,9 +249,8 @@ static void corgikbd_hinge_timer(unsigned long data)
                if (hinge_count >= HINGE_STABLE_COUNT) {
                        spin_lock_irqsave(&corgikbd_data->lock, flags);
 
-                       handle_scancode((sharpsl_hinge_state == 0x00), 125, corgikbd_data); /* Keyboard with Landscape Screen */
-                       handle_scancode((sharpsl_hinge_state == 0x08), 126, corgikbd_data); /* No Keyboard with Portrait Screen */
-                       handle_scancode((sharpsl_hinge_state == 0x0c), 127, corgikbd_data); /* Keyboard and Screen Closed  */
+                       input_report_switch(&corgikbd_data->input, SW_0, ((sharpsl_hinge_state & CORGI_SCP_SWA) != 0));
+                       input_report_switch(&corgikbd_data->input, SW_1, ((sharpsl_hinge_state & CORGI_SCP_SWB) != 0));
                        input_sync(&corgikbd_data->input);
 
                        spin_unlock_irqrestore(&corgikbd_data->lock, flags);
@@ -255,19 +259,45 @@ static void corgikbd_hinge_timer(unsigned long data)
        mod_timer(&corgikbd_data->htimer, jiffies + HINGE_SCAN_INTERVAL);
 }
 
+#ifdef CONFIG_PM
+static int corgikbd_suspend(struct device *dev, pm_message_t state, uint32_t level)
+{
+       if (level == SUSPEND_POWER_DOWN) {
+               struct corgikbd *corgikbd = dev_get_drvdata(dev);
+               corgikbd->suspended = 1;
+       }
+       return 0;
+}
+
+static int corgikbd_resume(struct device *dev, uint32_t level)
+{
+       if (level == RESUME_POWER_ON) {
+               struct corgikbd *corgikbd = dev_get_drvdata(dev);
+
+               /* Upon resume, ignore the suspend key for a short while */
+               corgikbd->suspend_jiffies=jiffies;
+               corgikbd->suspended = 0;
+       }
+       return 0;
+}
+#else
+#define corgikbd_suspend       NULL
+#define corgikbd_resume                NULL
+#endif
+
 static int __init corgikbd_probe(struct device *dev)
 {
        int i;
        struct corgikbd *corgikbd;
 
-       corgikbd = kcalloc(1, sizeof(struct corgikbd), GFP_KERNEL);
+       corgikbd = kzalloc(sizeof(struct corgikbd), GFP_KERNEL);
        if (!corgikbd)
                return -ENOMEM;
 
        dev_set_drvdata(dev,corgikbd);
        strcpy(corgikbd->phys, "corgikbd/input0");
 
-       spin_lock_init(corgikbd->lock);
+       spin_lock_init(&corgikbd->lock);
 
        /* Init Keyboard rescan timer */
        init_timer(&corgikbd->timer);
@@ -279,6 +309,8 @@ static int __init corgikbd_probe(struct device *dev)
        corgikbd->htimer.function = corgikbd_hinge_timer;
        corgikbd->htimer.data = (unsigned long) corgikbd;
 
+       corgikbd->suspend_jiffies=jiffies;
+
        init_input_dev(&corgikbd->input);
        corgikbd->input.private = corgikbd;
        corgikbd->input.name = "Corgi Keyboard";
@@ -288,7 +320,7 @@ static int __init corgikbd_probe(struct device *dev)
        corgikbd->input.id.vendor = 0x0001;
        corgikbd->input.id.product = 0x0001;
        corgikbd->input.id.version = 0x0100;
-       corgikbd->input.evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_PWR);
+       corgikbd->input.evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_PWR) | BIT(EV_SW);
        corgikbd->input.keycode = corgikbd->keycode;
        corgikbd->input.keycodesize = sizeof(unsigned char);
        corgikbd->input.keycodemax = ARRAY_SIZE(corgikbd_keycode);
@@ -297,6 +329,8 @@ static int __init corgikbd_probe(struct device *dev)
        for (i = 0; i < ARRAY_SIZE(corgikbd_keycode); i++)
                set_bit(corgikbd->keycode[i], corgikbd->input.keybit);
        clear_bit(0, corgikbd->input.keybit);
+       set_bit(SW_0, corgikbd->input.swbit);
+       set_bit(SW_1, corgikbd->input.swbit);
 
        input_register_device(&corgikbd->input);
        mod_timer(&corgikbd->htimer, jiffies + HINGE_SCAN_INTERVAL);
@@ -343,6 +377,8 @@ static struct device_driver corgikbd_driver = {
        .bus            = &platform_bus_type,
        .probe          = corgikbd_probe,
        .remove         = corgikbd_remove,
+       .suspend        = corgikbd_suspend,
+       .resume         = corgikbd_resume,
 };
 
 static int __devinit corgikbd_init(void)
index 2bb2fe78bdca988f34ccae1cdebf0ba0faff79c5..12bdd3eff923ea32042d76f47110d217c43243f7 100644 (file)
@@ -883,7 +883,7 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
                psmouse_deactivate(parent);
        }
 
-       if (!(psmouse = kcalloc(1, sizeof(struct psmouse), GFP_KERNEL))) {
+       if (!(psmouse = kzalloc(sizeof(struct psmouse), GFP_KERNEL))) {
                retval = -ENOMEM;
                goto out;
        }
index 79ca38469159b90abd6d1f52bffb162dbb89968c..1bd88fca05425a9d6ddfb9f52c36d296f832fad2 100644 (file)
@@ -87,7 +87,7 @@ static int serport_ldisc_open(struct tty_struct *tty)
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM;
 
-       serport = kcalloc(1, sizeof(struct serport), GFP_KERNEL);
+       serport = kzalloc(sizeof(struct serport), GFP_KERNEL);
        if (!serport)
                return -ENOMEM;
 
@@ -165,7 +165,7 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
        if (test_and_set_bit(SERPORT_BUSY, &serport->flags))
                return -EBUSY;
 
-       serport->serio = serio = kcalloc(1, sizeof(struct serio), GFP_KERNEL);
+       serport->serio = serio = kzalloc(sizeof(struct serio), GFP_KERNEL);
        if (!serio)
                return -ENOMEM;
 
index 3f8b61cfbc37977abc2453a2fab177e1149a410a..5d19261b884fe8f09ebe48432589011080942e41 100644 (file)
@@ -53,11 +53,8 @@ struct corgi_ts {
 
 #define SyncHS()       while((STATUS_HSYNC) == 0); while((STATUS_HSYNC) != 0);
 #define CCNT(a)                asm volatile ("mrc p14, 0, %0, C1, C0, 0" : "=r"(a))
-#define CCNT_ON()      {int pmnc = 1; asm volatile ("mcr p14, 0, %0, C0, C0, 0" : : "r"(pmnc));}
-#define CCNT_OFF()     {int pmnc = 0; asm volatile ("mcr p14, 0, %0, C0, C0, 0" : : "r"(pmnc));}
-
-#define WAIT_HS_400_VGA                7013U   // 17.615us
-#define WAIT_HS_400_QVGA       16622U  // 41.750us
+#define PMNC_GET(x)    asm volatile ("mrc p14, 0, %0, C0, C0, 0" : "=r"(x))
+#define PMNC_SET(x)    asm volatile ("mcr p14, 0, %0, C0, C0, 0" : : "r"(x))
 
 
 /* ADS7846 Touch Screen Controller bit definitions */
@@ -69,41 +66,29 @@ struct corgi_ts {
 #define ADSCTRL_STS            (1u << 7)       /* Start Bit */
 
 /* External Functions */
-extern int w100fb_get_xres(void);
-extern int w100fb_get_blanking(void);
-extern int w100fb_get_fastsysclk(void);
+extern unsigned long w100fb_get_hsynclen(struct device *dev);
 extern unsigned int get_clk_frequency_khz(int info);
 
 static unsigned long calc_waittime(void)
 {
-       int w100fb_xres = w100fb_get_xres();
-       unsigned int waittime = 0;
-
-       if (w100fb_xres == 480 || w100fb_xres == 640) {
-               waittime = WAIT_HS_400_VGA * get_clk_frequency_khz(0) / 398131U;
-
-               if (w100fb_get_fastsysclk() == 100)
-                       waittime = waittime * 75 / 100;
-
-               if (w100fb_xres == 640)
-                       waittime *= 3;
+       unsigned long hsync_len = w100fb_get_hsynclen(&corgifb_device.dev);
 
-               return waittime;
-       }
-
-       return WAIT_HS_400_QVGA * get_clk_frequency_khz(0) / 398131U;
+       if (hsync_len)
+               return get_clk_frequency_khz(0)*1000/hsync_len;
+       else
+               return 0;
 }
 
 static int sync_receive_data_send_cmd(int doRecive, int doSend, unsigned int address, unsigned long wait_time)
 {
+       unsigned long timer1 = 0, timer2, pmnc = 0;
        int pos = 0;
-       unsigned long timer1 = 0, timer2;
-       int dosleep;
 
-       dosleep = !w100fb_get_blanking();
+       if (wait_time && doSend) {
+               PMNC_GET(pmnc);
+               if (!(pmnc & 0x01))
+                       PMNC_SET(0x01);
 
-       if (dosleep && doSend) {
-               CCNT_ON();
                /* polling HSync */
                SyncHS();
                /* get CCNT */
@@ -119,11 +104,11 @@ static int sync_receive_data_send_cmd(int doRecive, int doSend, unsigned int add
                corgi_ssp_ads7846_put(cmd);
                corgi_ssp_ads7846_get();
 
-               if (dosleep) {
+               if (wait_time) {
                        /* Wait after HSync */
                        CCNT(timer2);
                        if (timer2-timer1 > wait_time) {
-                               /* timeout */
+                               /* too slow - timeout, try again */
                                SyncHS();
                                /* get OSCR */
                                CCNT(timer1);
@@ -134,8 +119,8 @@ static int sync_receive_data_send_cmd(int doRecive, int doSend, unsigned int add
                                CCNT(timer2);
                }
                corgi_ssp_ads7846_put(cmd);
-               if (dosleep)
-                       CCNT_OFF();
+               if (wait_time && !(pmnc & 0x01))
+                       PMNC_SET(pmnc);
        }
        return pos;
 }
@@ -244,7 +229,7 @@ static irqreturn_t ts_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 }
 
 #ifdef CONFIG_PM
-static int corgits_suspend(struct device *dev, uint32_t state, uint32_t level)
+static int corgits_suspend(struct device *dev, pm_message_t state, uint32_t level)
 {
        if (level == SUSPEND_POWER_DOWN) {
                struct corgi_ts *corgi_ts = dev_get_drvdata(dev);
index 17cf7663c58233fda3610b9890d2e663254ba643..26c545fa223be8672a5e3cace0e4377b04af48a2 100644 (file)
@@ -10,7 +10,6 @@
 #include <linux/errno.h>
 #include <linux/fs.h>
 #include <linux/major.h>
-#include <asm/segment.h>
 #include <asm/io.h>
 #include <linux/delay.h>
 #include <linux/kernel.h>
@@ -1242,6 +1241,8 @@ struct IsdnCardState {
 
 #ifdef CONFIG_HISAX_ENTERNOW_PCI
 #define CARD_FN_ENTERNOW_PCI 1
+#else
+#define CARD_FN_ENTERNOW_PCI 0
 #endif
 
 #define TEI_PER_CARD 1
index f47f2b9846d8fc45c55ef777a989316c9908c18e..38619e8cd8230b4c9d893fbb85976a6a9055df2e 100644 (file)
@@ -516,11 +516,11 @@ buffer_full:
 }
 
 int
-isdn_v110_stat_callback(int idx, isdn_ctrl * c)
+isdn_v110_stat_callback(int idx, isdn_ctrl *c)
 {
        isdn_v110_stream *v = NULL;
        int i;
-       int ret;
+       int ret = 0;
 
        if (idx < 0)
                return 0;
index 45754bb6a79994678901f967bc29dc3c91d34d62..9de000131a8a2cb729c9e66858d30ed0d5700088 100644 (file)
@@ -239,6 +239,11 @@ static void vm_dp_init(struct dpages *dp, void *data)
        dp->context_ptr = data;
 }
 
+static void dm_bio_destructor(struct bio *bio)
+{
+       bio_free(bio, _bios);
+}
+
 /*-----------------------------------------------------------------
  * IO routines that accept a list of pages.
  *---------------------------------------------------------------*/
@@ -263,6 +268,7 @@ static void do_region(int rw, unsigned int region, struct io_region *where,
                bio->bi_bdev = where->bdev;
                bio->bi_end_io = endio;
                bio->bi_private = io;
+               bio->bi_destructor = dm_bio_destructor;
                bio_set_region(bio, region);
 
                /*
index d487d9deb98e1c04ddb4bc152e2a47d880c3332d..930b9fc27953766e94b2ce8869f6228feb5f04b3 100644 (file)
@@ -399,6 +399,11 @@ struct clone_info {
        unsigned short idx;
 };
 
+static void dm_bio_destructor(struct bio *bio)
+{
+       bio_free(bio, dm_set);
+}
+
 /*
  * Creates a little bio that is just does part of a bvec.
  */
@@ -410,6 +415,7 @@ static struct bio *split_bvec(struct bio *bio, sector_t sector,
        struct bio_vec *bv = bio->bi_io_vec + idx;
 
        clone = bio_alloc_bioset(GFP_NOIO, 1, dm_set);
+       clone->bi_destructor = dm_bio_destructor;
        *clone->bi_io_vec = *bv;
 
        clone->bi_sector = sector;
index b12545f093f8aacd54e4aac476a0b504aaddda38..1e85d16491b02acb426d9f6a48f5439fc38c603c 100644 (file)
@@ -1,5 +1,5 @@
 config DVB_BT8XX
-       tristate "Nebula/Pinnacle PCTV/Twinhan PCI cards"
+       tristate "BT8xx based PCI cards"
        depends on DVB_CORE && PCI && VIDEO_BT848
        select DVB_MT352
        select DVB_SP887X
@@ -8,8 +8,8 @@ config DVB_BT8XX
        select DVB_OR51211
        help
          Support for PCI cards based on the Bt8xx PCI bridge. Examples are
-         the Nebula cards, the Pinnacle PCTV cards, the Twinhan DST cards and
-         pcHDTV HD2000 cards.
+         the Nebula cards, the Pinnacle PCTV cards, the Twinhan DST cards,
+         the pcHDTV HD2000 cards, and certain AVerMedia cards.
 
          Since these cards have no MPEG decoder onboard, they transmit
          only compressed MPEG data over the PCI bus, so you need
index 1f1cd7a8d500846c07e8fd4fa49c0d8335cd7443..7142b9c51dd2460e3b2c65ec91bddf08d877f8b0 100644 (file)
@@ -69,8 +69,8 @@ struct lgdt330x_state
 };
 
 static int i2c_write_demod_bytes (struct lgdt330x_state* state,
-                          u8 *buf, /* data bytes to send */
-                          int len  /* number of bytes to send */ )
+                                 u8 *buf, /* data bytes to send */
+                                 int len  /* number of bytes to send */ )
 {
        struct i2c_msg msg =
                { .addr = state->config->demod_address,
@@ -129,13 +129,13 @@ static int lgdt3302_SwReset(struct lgdt330x_state* state)
        };
 
        ret = i2c_write_demod_bytes(state,
-                            reset, sizeof(reset));
+                                   reset, sizeof(reset));
        if (ret == 0) {
 
                /* force reset high (inactive) and unmask interrupts */
                reset[1] = 0x7f;
                ret = i2c_write_demod_bytes(state,
-                                    reset, sizeof(reset));
+                                           reset, sizeof(reset));
        }
        return ret;
 }
@@ -149,13 +149,13 @@ static int lgdt3303_SwReset(struct lgdt330x_state* state)
        };
 
        ret = i2c_write_demod_bytes(state,
-                            reset, sizeof(reset));
+                                   reset, sizeof(reset));
        if (ret == 0) {
 
                /* force reset high (inactive) */
                reset[1] = 0x01;
                ret = i2c_write_demod_bytes(state,
-                                    reset, sizeof(reset));
+                                           reset, sizeof(reset));
        }
        return ret;
 }
@@ -172,7 +172,6 @@ static int lgdt330x_SwReset(struct lgdt330x_state* state)
        }
 }
 
-
 static int lgdt330x_init(struct dvb_frontend* fe)
 {
        /* Hardware reset is done using gpio[0] of cx23880x chip.
@@ -229,13 +228,13 @@ static int lgdt330x_init(struct dvb_frontend* fe)
        case LGDT3302:
                chip_name = "LGDT3302";
                err = i2c_write_demod_bytes(state, lgdt3302_init_data,
-                                                                       sizeof(lgdt3302_init_data));
-               break;
+                                           sizeof(lgdt3302_init_data));
+               break;
        case LGDT3303:
                chip_name = "LGDT3303";
                err = i2c_write_demod_bytes(state, lgdt3303_init_data,
-                                                                       sizeof(lgdt3303_init_data));
-               break;
+                                           sizeof(lgdt3303_init_data));
+               break;
        default:
                chip_name = "undefined";
                printk (KERN_WARNING "Only LGDT3302 and LGDT3303 are supported chips.\n");
@@ -262,15 +261,15 @@ static int lgdt330x_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
        switch (state->config->demod_chip) {
        case LGDT3302:
                err = i2c_read_demod_bytes(state, LGDT3302_PACKET_ERR_COUNTER1,
-                                                                 buf, sizeof(buf));
-               break;
+                                          buf, sizeof(buf));
+               break;
        case LGDT3303:
                err = i2c_read_demod_bytes(state, LGDT3303_PACKET_ERR_COUNTER1,
-                                                                 buf, sizeof(buf));
-               break;
+                                          buf, sizeof(buf));
+               break;
        default:
                printk(KERN_WARNING
-                          "Only LGDT3302 and LGDT3303 are supported chips.\n");
+                      "Only LGDT3302 and LGDT3303 are supported chips.\n");
                err = -ENODEV;
        }
 
@@ -330,7 +329,7 @@ static int lgdt330x_set_parameters(struct dvb_frontend* fe,
 
                        if (state->config->demod_chip == LGDT3303) {
                                err = i2c_write_demod_bytes(state, lgdt3303_8vsb_44_data,
-                                                                                       sizeof(lgdt3303_8vsb_44_data));
+                                                           sizeof(lgdt3303_8vsb_44_data));
                        }
                        break;
 
@@ -378,18 +377,19 @@ static int lgdt330x_set_parameters(struct dvb_frontend* fe,
 
                /* Select the requested mode */
                i2c_write_demod_bytes(state, top_ctrl_cfg,
-                                                         sizeof(top_ctrl_cfg));
-               state->config->set_ts_params(fe, 0);
+                                     sizeof(top_ctrl_cfg));
+               if (state->config->set_ts_params)
+                       state->config->set_ts_params(fe, 0);
                state->current_modulation = param->u.vsb.modulation;
        }
 
-       /* Change only if we are actually changing the channel */
-       if (state->current_frequency != param->frequency) {
-               /* Tune to the new frequency */
+       /* Tune to the specified frequency */
+       if (state->config->pll_set)
                state->config->pll_set(fe, param);
-               /* Keep track of the new frequency */
-               state->current_frequency = param->frequency;
-       }
+
+       /* Keep track of the new frequency */
+       state->current_frequency = param->frequency;
+
        lgdt330x_SwReset(state);
        return 0;
 }
index 810e7aac0a535edeed845e2c435d3d8f5cbb9d8f..3e6f5347da21ef90f97e99a0c651d28fc1edf070 100644 (file)
@@ -29,7 +29,7 @@ obj-$(CONFIG_VIDEO_ZORAN_LML33R10) += saa7114.o adv7170.o zr36060.o
 obj-$(CONFIG_VIDEO_ZORAN) += zr36067.o videocodec.o
 obj-$(CONFIG_VIDEO_PMS) += pms.o
 obj-$(CONFIG_VIDEO_PLANB) += planb.o
-obj-$(CONFIG_VIDEO_VINO) += vino.o
+obj-$(CONFIG_VIDEO_VINO) += vino.o saa7191.o indycam.o
 obj-$(CONFIG_VIDEO_STRADIS) += stradis.o
 obj-$(CONFIG_VIDEO_CPIA) += cpia.o
 obj-$(CONFIG_VIDEO_CPIA_PP) += cpia_pp.o
index 52e32f05d625b2fc9c0bcba9caa2aa60b9ac8878..1ca2b67aedfb653c66fc9b35467356d87604274f 100644 (file)
@@ -43,7 +43,6 @@
 #include <asm/pgtable.h>
 #include <asm/page.h>
 #include <linux/sched.h>
-#include <asm/segment.h>
 #include <linux/types.h>
 
 #include <linux/videodev.h>
index b5ed9544bdea14702564a7037f96ed9bc388e3ca..173bca1e02950cdd29d340e56474f1da30389fbb 100644 (file)
@@ -39,7 +39,6 @@
 #include <asm/pgtable.h>
 #include <asm/page.h>
 #include <linux/sched.h>
-#include <asm/segment.h>
 #include <linux/types.h>
 
 #include <linux/videodev.h>
index c6cfa7c48b04e5d5547437ab6703f61d25653dc2..3ee0afca76a7f1b206a39688648aacbd68e4ae5e 100644 (file)
@@ -43,7 +43,6 @@
 #include <asm/pgtable.h>
 #include <asm/page.h>
 #include <linux/sched.h>
-#include <asm/segment.h>
 #include <linux/types.h>
 
 #include <linux/videodev.h>
index c13d2865886882b36c3a8ee91f4a39a11e8c0362..8eb871d0e85b61cdf1d139d73116bcbd32ff88f8 100644 (file)
@@ -43,7 +43,6 @@
 #include <asm/pgtable.h>
 #include <asm/page.h>
 #include <linux/sched.h>
-#include <asm/segment.h>
 #include <linux/types.h>
 
 #include <linux/videodev.h>
diff --git a/drivers/media/video/indycam.c b/drivers/media/video/indycam.c
new file mode 100644 (file)
index 0000000..b2b0384
--- /dev/null
@@ -0,0 +1,412 @@
+/*
+ *  indycam.c - Silicon Graphics IndyCam digital camera driver
+ *
+ *  Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
+ *  Copyright (C) 2004,2005 Mikael Nousiainen <tmnousia@cc.hut.fi>
+ *
+ *  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 <linux/module.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/kernel.h>
+#include <linux/major.h>
+#include <linux/slab.h>
+#include <linux/mm.h>
+#include <linux/sched.h>
+
+#include <linux/videodev.h>
+/* IndyCam decodes stream of photons into digital image representation ;-) */
+#include <linux/video_decoder.h>
+#include <linux/i2c.h>
+
+#include "indycam.h"
+
+//#define INDYCAM_DEBUG
+
+#define INDYCAM_MODULE_VERSION "0.0.3"
+
+MODULE_DESCRIPTION("SGI IndyCam driver");
+MODULE_VERSION(INDYCAM_MODULE_VERSION);
+MODULE_AUTHOR("Mikael Nousiainen <tmnousia@cc.hut.fi>");
+MODULE_LICENSE("GPL");
+
+#ifdef INDYCAM_DEBUG
+#define dprintk(x...) printk("IndyCam: " x);
+#define indycam_regdump(client) indycam_regdump_debug(client)
+#else
+#define dprintk(x...)
+#define indycam_regdump(client)
+#endif
+
+#define VINO_ADAPTER   (I2C_ALGO_SGI | I2C_HW_SGI_VINO)
+
+struct indycam {
+       struct i2c_client *client;
+       int version;
+};
+
+static struct i2c_driver i2c_driver_indycam;
+
+static const unsigned char initseq[] = {
+       INDYCAM_CONTROL_AGCENA,         /* INDYCAM_CONTROL */
+       INDYCAM_SHUTTER_DEFAULT,        /* INDYCAM_SHUTTER */
+       INDYCAM_GAIN_DEFAULT,           /* INDYCAM_GAIN */
+       0x00,                           /* INDYCAM_BRIGHTNESS (read-only) */
+       INDYCAM_RED_BALANCE_DEFAULT,    /* INDYCAM_RED_BALANCE */
+       INDYCAM_BLUE_BALANCE_DEFAULT,   /* INDYCAM_BLUE_BALANCE */
+       INDYCAM_RED_SATURATION_DEFAULT, /* INDYCAM_RED_SATURATION */
+       INDYCAM_BLUE_SATURATION_DEFAULT,/* INDYCAM_BLUE_SATURATION */
+};
+
+/* IndyCam register handling */
+
+static int indycam_read_reg(struct i2c_client *client, unsigned char reg,
+                            unsigned char *value)
+{
+       int ret;
+
+       if (reg == INDYCAM_RESET) {
+               dprintk("indycam_read_reg(): "
+                       "skipping write-only register %d\n", reg);
+               *value = 0;
+               return 0;
+       }
+
+       ret = i2c_smbus_read_byte_data(client, reg);
+       if (ret < 0) {
+               printk(KERN_ERR "IndyCam: indycam_read_reg(): read failed, "
+                      "register = 0x%02x\n", reg);
+               return ret;
+       }
+
+       *value = (unsigned char)ret;
+
+       return 0;
+}
+
+static int indycam_write_reg(struct i2c_client *client, unsigned char reg,
+                            unsigned char value)
+{
+       int err;
+
+       if ((reg == INDYCAM_BRIGHTNESS)
+           || (reg == INDYCAM_VERSION)) {
+               dprintk("indycam_write_reg(): "
+                       "skipping read-only register %d\n", reg);
+               return 0;
+       }
+
+       dprintk("Writing Reg %d = 0x%02x\n", reg, value);
+       err = i2c_smbus_write_byte_data(client, reg, value);
+       if (err) {
+               printk(KERN_ERR "IndyCam: indycam_write_reg(): write failed, "
+                      "register = 0x%02x, value = 0x%02x\n", reg, value);
+       }
+       return err;
+}
+
+static int indycam_write_block(struct i2c_client *client, unsigned char reg,
+                               unsigned char length, unsigned char *data)
+{
+       unsigned char i;
+       int err;
+
+       for (i = reg; i < length; i++) {
+               err = indycam_write_reg(client, reg + i, data[i]);
+               if (err)
+                       return err;
+       }
+
+       return 0;
+}
+
+/* Helper functions */
+
+#ifdef INDYCAM_DEBUG
+static void indycam_regdump_debug(struct i2c_client *client)
+{
+       int i;
+       unsigned char val;
+
+       for (i = 0; i < 9; i++) {
+               indycam_read_reg(client, i, &val);
+               dprintk("Reg %d = 0x%02x\n", i, val);
+       }
+}
+#endif
+
+static int indycam_get_controls(struct i2c_client *client,
+                               struct indycam_control *ctrl)
+{
+       unsigned char ctrl_reg;
+
+       indycam_read_reg(client, INDYCAM_CONTROL, &ctrl_reg);
+       ctrl->agc = (ctrl_reg & INDYCAM_CONTROL_AGCENA)
+               ? INDYCAM_VALUE_ENABLED
+               : INDYCAM_VALUE_DISABLED;
+       ctrl->awb = (ctrl_reg & INDYCAM_CONTROL_AWBCTL)
+               ? INDYCAM_VALUE_ENABLED
+               : INDYCAM_VALUE_DISABLED;
+       indycam_read_reg(client, INDYCAM_SHUTTER,
+                        (unsigned char *)&ctrl->shutter);
+       indycam_read_reg(client, INDYCAM_GAIN,
+                        (unsigned char *)&ctrl->gain);
+       indycam_read_reg(client, INDYCAM_RED_BALANCE,
+                        (unsigned char *)&ctrl->red_balance);
+       indycam_read_reg(client, INDYCAM_BLUE_BALANCE,
+                        (unsigned char *)&ctrl->blue_balance);
+       indycam_read_reg(client, INDYCAM_RED_SATURATION,
+                        (unsigned char *)&ctrl->red_saturation);
+       indycam_read_reg(client, INDYCAM_BLUE_SATURATION,
+                        (unsigned char *)&ctrl->blue_saturation);
+       indycam_read_reg(client, INDYCAM_GAMMA,
+                        (unsigned char *)&ctrl->gamma);
+
+       return 0;
+}
+
+static int indycam_set_controls(struct i2c_client *client,
+                               struct indycam_control *ctrl)
+{
+       unsigned char ctrl_reg;
+
+       indycam_read_reg(client, INDYCAM_CONTROL, &ctrl_reg);
+       if (ctrl->agc != INDYCAM_VALUE_UNCHANGED) {
+               if (ctrl->agc)
+                       ctrl_reg |= INDYCAM_CONTROL_AGCENA;
+               else
+                       ctrl_reg &= ~INDYCAM_CONTROL_AGCENA;
+       }
+       if (ctrl->awb != INDYCAM_VALUE_UNCHANGED) {
+               if (ctrl->awb)
+                       ctrl_reg |= INDYCAM_CONTROL_AWBCTL;
+               else
+                       ctrl_reg &= ~INDYCAM_CONTROL_AWBCTL;
+       }
+       indycam_write_reg(client, INDYCAM_CONTROL, ctrl_reg);
+
+       if (ctrl->shutter >= 0)
+               indycam_write_reg(client, INDYCAM_SHUTTER, ctrl->shutter);
+       if (ctrl->gain >= 0)
+               indycam_write_reg(client, INDYCAM_GAIN, ctrl->gain);
+       if (ctrl->red_balance >= 0)
+               indycam_write_reg(client, INDYCAM_RED_BALANCE,
+                                 ctrl->red_balance);
+       if (ctrl->blue_balance >= 0)
+               indycam_write_reg(client, INDYCAM_BLUE_BALANCE,
+                                 ctrl->blue_balance);
+       if (ctrl->red_saturation >= 0)
+               indycam_write_reg(client, INDYCAM_RED_SATURATION,
+                                 ctrl->red_saturation);
+       if (ctrl->blue_saturation >= 0)
+               indycam_write_reg(client, INDYCAM_BLUE_SATURATION,
+                                 ctrl->blue_saturation);
+       if (ctrl->gamma >= 0)
+               indycam_write_reg(client, INDYCAM_GAMMA, ctrl->gamma);
+
+       return 0;
+}
+
+/* I2C-interface */
+
+static int indycam_attach(struct i2c_adapter *adap, int addr, int kind)
+{
+       int err = 0;
+       struct indycam *camera;
+       struct i2c_client *client;
+
+       printk(KERN_INFO "SGI IndyCam driver version %s\n",
+              INDYCAM_MODULE_VERSION);
+
+       client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+       if (!client)
+               return -ENOMEM;
+       camera = kmalloc(sizeof(struct indycam), GFP_KERNEL);
+       if (!camera) {
+               err = -ENOMEM;
+               goto out_free_client;
+       }
+
+       memset(client, 0, sizeof(struct i2c_client));
+       memset(camera, 0, sizeof(struct indycam));
+
+       client->addr = addr;
+       client->adapter = adap;
+       client->driver = &i2c_driver_indycam;
+       client->flags = 0;
+       strcpy(client->name, "IndyCam client");
+       i2c_set_clientdata(client, camera);
+
+       camera->client = client;
+
+       err = i2c_attach_client(client);
+       if (err)
+               goto out_free_camera;
+
+       camera->version = i2c_smbus_read_byte_data(client, INDYCAM_VERSION);
+       if (camera->version != CAMERA_VERSION_INDY &&
+           camera->version != CAMERA_VERSION_MOOSE) {
+               err = -ENODEV;
+               goto out_detach_client;
+       }
+       printk(KERN_INFO "IndyCam v%d.%d detected\n",
+              INDYCAM_VERSION_MAJOR(camera->version),
+              INDYCAM_VERSION_MINOR(camera->version));
+
+       indycam_regdump(client);
+
+       // initialize
+       err = indycam_write_block(client, 0, sizeof(initseq),
+                                 (unsigned char *)&initseq);
+       if (err) {
+               printk(KERN_ERR "IndyCam initalization failed\n");
+               err = -EIO;
+               goto out_detach_client;
+       }
+
+       indycam_regdump(client);
+
+       // white balance
+       err = indycam_write_reg(client, INDYCAM_CONTROL,
+                         INDYCAM_CONTROL_AGCENA | INDYCAM_CONTROL_AWBCTL);
+       if (err) {
+               printk(KERN_ERR "IndyCam white balance "
+                      "initialization failed\n");
+               err = -EIO;
+               goto out_detach_client;
+       }
+
+       indycam_regdump(client);
+
+       printk(KERN_INFO "IndyCam initialized\n");
+
+       return 0;
+
+out_detach_client:
+       i2c_detach_client(client);
+out_free_camera:
+       kfree(camera);
+out_free_client:
+       kfree(client);
+       return err;
+}
+
+static int indycam_probe(struct i2c_adapter *adap)
+{
+       /* Indy specific crap */
+       if (adap->id == VINO_ADAPTER)
+               return indycam_attach(adap, INDYCAM_ADDR, 0);
+       /* Feel free to add probe here :-) */
+       return -ENODEV;
+}
+
+static int indycam_detach(struct i2c_client *client)
+{
+       struct indycam *camera = i2c_get_clientdata(client);
+
+       i2c_detach_client(client);
+       kfree(camera);
+       kfree(client);
+       return 0;
+}
+
+static int indycam_command(struct i2c_client *client, unsigned int cmd,
+                          void *arg)
+{
+       // struct indycam *camera = i2c_get_clientdata(client);
+
+       /* The old video_decoder interface just isn't enough,
+        * so we'll use some custom commands. */
+       switch (cmd) {
+       case DECODER_GET_CAPABILITIES: {
+               struct video_decoder_capability *cap = arg;
+
+               cap->flags  = VIDEO_DECODER_NTSC;
+               cap->inputs = 1;
+               cap->outputs = 1;
+               break;
+       }
+       case DECODER_GET_STATUS: {
+               int *iarg = arg;
+
+               *iarg = DECODER_STATUS_GOOD | DECODER_STATUS_NTSC |
+                       DECODER_STATUS_COLOR;
+               break;
+       }
+       case DECODER_SET_NORM: {
+               int *iarg = arg;
+
+               switch (*iarg) {
+               case VIDEO_MODE_NTSC:
+                       break;
+               default:
+                       return -EINVAL;
+               }
+               break;
+       }
+       case DECODER_SET_INPUT: {
+               int *iarg = arg;
+
+               if (*iarg != 0)
+                       return -EINVAL;
+               break;
+       }
+       case DECODER_SET_OUTPUT: {
+               int *iarg = arg;
+
+               if (*iarg != 0)
+                       return -EINVAL;
+               break;
+       }
+       case DECODER_ENABLE_OUTPUT: {
+               /* Always enabled */
+               break;
+       }
+       case DECODER_SET_PICTURE: {
+               // struct video_picture *pic = arg;
+               /* TODO: convert values for indycam_set_controls() */
+               break;
+       }
+       case DECODER_INDYCAM_GET_CONTROLS: {
+               struct indycam_control *ctrl = arg;
+               indycam_get_controls(client, ctrl);
+       }
+       case DECODER_INDYCAM_SET_CONTROLS: {
+               struct indycam_control *ctrl = arg;
+               indycam_set_controls(client, ctrl);
+       }
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static struct i2c_driver i2c_driver_indycam = {
+       .owner          = THIS_MODULE,
+       .name           = "indycam",
+       .id             = I2C_DRIVERID_INDYCAM,
+       .flags          = I2C_DF_NOTIFY,
+       .attach_adapter = indycam_probe,
+       .detach_client  = indycam_detach,
+       .command        = indycam_command,
+};
+
+static int __init indycam_init(void)
+{
+       return i2c_add_driver(&i2c_driver_indycam);
+}
+
+static void __exit indycam_exit(void)
+{
+       i2c_del_driver(&i2c_driver_indycam);
+}
+
+module_init(indycam_init);
+module_exit(indycam_exit);
diff --git a/drivers/media/video/indycam.h b/drivers/media/video/indycam.h
new file mode 100644 (file)
index 0000000..d9ddb6b
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ *  indycam.h - Silicon Graphics IndyCam digital camera driver
+ *
+ *  Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
+ *  Copyright (C) 2004,2005 Mikael Nousiainen <tmnousia@cc.hut.fi>
+ *
+ *  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.
+ */
+
+#ifndef _INDYCAM_H_
+#define _INDYCAM_H_
+
+/* I2C address for the Guinness Camera */
+#define INDYCAM_ADDR                   0x56
+
+/* Camera version */
+#define CAMERA_VERSION_INDY            0x10    /* v1.0 */
+#define CAMERA_VERSION_MOOSE           0x12    /* v1.2 */
+#define INDYCAM_VERSION_MAJOR(x)       (((x) & 0xf0) >> 4)
+#define INDYCAM_VERSION_MINOR(x)       ((x) & 0x0f)
+
+/* Register bus addresses */
+#define INDYCAM_CONTROL                        0x00
+#define INDYCAM_SHUTTER                        0x01
+#define INDYCAM_GAIN                   0x02
+#define INDYCAM_BRIGHTNESS             0x03 /* read-only */
+#define INDYCAM_RED_BALANCE            0x04
+#define INDYCAM_BLUE_BALANCE           0x05
+#define INDYCAM_RED_SATURATION         0x06
+#define INDYCAM_BLUE_SATURATION                0x07
+#define INDYCAM_GAMMA                  0x08
+#define INDYCAM_VERSION                        0x0e /* read-only */
+#define INDYCAM_RESET                  0x0f /* write-only */
+
+#define INDYCAM_LED                    0x46
+#define INDYCAM_ORIENTATION            0x47
+#define INDYCAM_BUTTON                 0x48
+
+/* Field definitions of registers */
+#define INDYCAM_CONTROL_AGCENA         (1<<0) /* automatic gain control */
+#define INDYCAM_CONTROL_AWBCTL         (1<<1) /* automatic white balance */
+                                               /* 2-3 are reserved */
+#define INDYCAM_CONTROL_EVNFLD         (1<<4)  /* read-only */
+
+#define INDYCAM_SHUTTER_10000          0x02    /* 1/10000 second */
+#define INDYCAM_SHUTTER_4000           0x04    /* 1/4000 second */
+#define INDYCAM_SHUTTER_2000           0x08    /* 1/2000 second */
+#define INDYCAM_SHUTTER_1000           0x10    /* 1/1000 second */
+#define INDYCAM_SHUTTER_500            0x20    /* 1/500 second */
+#define INDYCAM_SHUTTER_250            0x3f    /* 1/250 second */
+#define INDYCAM_SHUTTER_125            0x7e    /* 1/125 second */
+#define INDYCAM_SHUTTER_100            0x9e    /* 1/100 second */
+#define INDYCAM_SHUTTER_60             0x00    /* 1/60 second */
+
+#define INDYCAM_LED_ACTIVE                     0x10
+#define INDYCAM_LED_INACTIVE                   0x30
+#define INDYCAM_ORIENTATION_BOTTOM_TO_TOP      0x40
+#define INDYCAM_BUTTON_RELEASED                        0x10
+
+#define INDYCAM_SHUTTER_MIN            0x00
+#define INDYCAM_SHUTTER_MAX            0xff
+#define INDYCAM_GAIN_MIN                0x00
+#define INDYCAM_GAIN_MAX                0xff
+#define INDYCAM_RED_BALANCE_MIN        0x00 /* the effect is the opposite? */
+#define INDYCAM_RED_BALANCE_MAX        0xff
+#define INDYCAM_BLUE_BALANCE_MIN        0x00 /* the effect is the opposite? */
+#define INDYCAM_BLUE_BALANCE_MAX        0xff
+#define INDYCAM_RED_SATURATION_MIN      0x00
+#define INDYCAM_RED_SATURATION_MAX      0xff
+#define INDYCAM_BLUE_SATURATION_MIN    0x00
+#define INDYCAM_BLUE_SATURATION_MAX    0xff
+#define INDYCAM_GAMMA_MIN              0x00
+#define INDYCAM_GAMMA_MAX              0xff
+
+/* Driver interface definitions */
+
+#define INDYCAM_VALUE_ENABLED          1
+#define INDYCAM_VALUE_DISABLED         0
+#define INDYCAM_VALUE_UNCHANGED                -1
+
+/* When setting controls, a value of -1 leaves the control unchanged. */
+struct indycam_control {
+       int agc;        /* boolean */
+       int awb;        /* boolean */
+       int shutter;
+       int gain;
+       int red_balance;
+       int blue_balance;
+       int red_saturation;
+       int blue_saturation;
+       int gamma;
+};
+
+#define        DECODER_INDYCAM_GET_CONTROLS    _IOR('d', 193, struct indycam_control)
+#define        DECODER_INDYCAM_SET_CONTROLS    _IOW('d', 194, struct indycam_control)
+
+/* Default values for controls */
+
+#define INDYCAM_AGC_DEFAULT            INDYCAM_VALUE_ENABLED
+#define INDYCAM_AWB_DEFAULT            INDYCAM_VALUE_ENABLED
+
+#define INDYCAM_SHUTTER_DEFAULT                INDYCAM_SHUTTER_60
+#define INDYCAM_GAIN_DEFAULT           0x80
+#define INDYCAM_RED_BALANCE_DEFAULT    0x18
+#define INDYCAM_BLUE_BALANCE_DEFAULT   0xa4
+#define INDYCAM_RED_SATURATION_DEFAULT 0x80
+#define INDYCAM_BLUE_SATURATION_DEFAULT        0xc0
+#define INDYCAM_GAMMA_DEFAULT          0x80
+
+#endif
index fe194012bccf65aac168a7bfc61b48fa621767c8..3f2a882bc20a6a6b31b00af7bef5278596f253db 100644 (file)
@@ -37,6 +37,7 @@
 #include <linux/delay.h>
 #include <linux/interrupt.h>
 #include <linux/vmalloc.h>
+#include <linux/dma-mapping.h>
 
 #include "meye.h"
 #include <linux/meye.h>
@@ -121,7 +122,7 @@ static int ptable_alloc(void)
        memset(meye.mchip_ptable, 0, sizeof(meye.mchip_ptable));
 
        /* give only 32 bit DMA addresses */
-       if (dma_set_mask(&meye.mchip_dev->dev, 0xffffffff))
+       if (dma_set_mask(&meye.mchip_dev->dev, DMA_32BIT_MASK))
                return -1;
 
        meye.mchip_ptable_toc = dma_alloc_coherent(&meye.mchip_dev->dev,
index f18df53d98ff16c7b7b1027b5d0e5057ae7510c3..fe8a5e45396982ca0a1a62ee2ab6571ca4d7ba23 100644 (file)
@@ -42,7 +42,6 @@
 #include <asm/pgtable.h>
 #include <asm/page.h>
 #include <linux/sched.h>
-#include <asm/segment.h>
 #include <linux/types.h>
 
 #include <linux/videodev.h>
index e0c70f54f0737f93cc8aa519fb588b93c0794eed..d9f50e2f7b92f1c14997945c465ffdc13fad668c 100644 (file)
@@ -45,7 +45,6 @@
 #include <asm/pgtable.h>
 #include <asm/page.h>
 #include <linux/sched.h>
-#include <asm/segment.h>
 #include <linux/types.h>
 
 #include <linux/videodev.h>
index e93412f4407cb9d7fa1008d4c21a9e018555d534..132aa7943c1625a7385a15a9d69bbd37b3864a3e 100644 (file)
@@ -39,7 +39,6 @@
 #include <asm/pgtable.h>
 #include <asm/page.h>
 #include <linux/sched.h>
-#include <asm/segment.h>
 #include <linux/types.h>
 
 #include <linux/videodev.h>
diff --git a/drivers/media/video/saa7191.c b/drivers/media/video/saa7191.c
new file mode 100644 (file)
index 0000000..454f5c1
--- /dev/null
@@ -0,0 +1,512 @@
+/*
+ *  saa7191.c - Philips SAA7191 video decoder driver
+ *
+ *  Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
+ *  Copyright (C) 2004,2005 Mikael Nousiainen <tmnousia@cc.hut.fi>
+ *
+ *  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 <linux/module.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/kernel.h>
+#include <linux/major.h>
+#include <linux/slab.h>
+#include <linux/mm.h>
+#include <linux/sched.h>
+
+#include <linux/videodev.h>
+#include <linux/video_decoder.h>
+#include <linux/i2c.h>
+
+#include "saa7191.h"
+
+#define SAA7191_MODULE_VERSION "0.0.3"
+
+MODULE_DESCRIPTION("Philips SAA7191 video decoder driver");
+MODULE_VERSION(SAA7191_MODULE_VERSION);
+MODULE_AUTHOR("Mikael Nousiainen <tmnousia@cc.hut.fi>");
+MODULE_LICENSE("GPL");
+
+#define VINO_ADAPTER   (I2C_ALGO_SGI | I2C_HW_SGI_VINO)
+
+struct saa7191 {
+       struct i2c_client *client;
+
+       /* the register values are stored here as the actual
+        * I2C-registers are write-only */
+       unsigned char reg[25];
+
+       unsigned char norm;
+       unsigned char input;
+};
+
+static struct i2c_driver i2c_driver_saa7191;
+
+static const unsigned char initseq[] = {
+       0,      /* Subaddress */
+       0x50,   /* SAA7191_REG_IDEL */
+       0x30,   /* SAA7191_REG_HSYB */
+       0x00,   /* SAA7191_REG_HSYS */
+       0xe8,   /* SAA7191_REG_HCLB */
+       0xb6,   /* SAA7191_REG_HCLS */
+       0xf4,   /* SAA7191_REG_HPHI */
+       0x01,   /* SAA7191_REG_LUMA - chrominance trap active (CVBS) */
+       0x00,   /* SAA7191_REG_HUEC */
+       0xf8,   /* SAA7191_REG_CKTQ */
+       0xf8,   /* SAA7191_REG_CKTS */
+       0x90,   /* SAA7191_REG_PLSE */
+       0x90,   /* SAA7191_REG_SESE */
+       0x00,   /* SAA7191_REG_GAIN */
+       0x0c,   /* SAA7191_REG_STDC - not SECAM, slow time constant */
+       0x78,   /* SAA7191_REG_IOCK - chrominance from CVBS, GPSW1 & 2 off */
+       0x99,   /* SAA7191_REG_CTL3 - automatic field detection */
+       0x00,   /* SAA7191_REG_CTL4 */
+       0x2c,   /* SAA7191_REG_CHCV */
+       0x00,   /* unused */
+       0x00,   /* unused */
+       0x34,   /* SAA7191_REG_HS6B */
+       0x0a,   /* SAA7191_REG_HS6S */
+       0xf4,   /* SAA7191_REG_HC6B */
+       0xce,   /* SAA7191_REG_HC6S */
+       0xf4,   /* SAA7191_REG_HP6I */
+};
+
+/* SAA7191 register handling */
+
+static unsigned char saa7191_read_reg(struct i2c_client *client,
+                                     unsigned char reg)
+{
+       return ((struct saa7191 *)i2c_get_clientdata(client))->reg[reg];
+}
+
+static int saa7191_read_status(struct i2c_client *client,
+                              unsigned char *value)
+{
+       int ret;
+
+       ret = i2c_master_recv(client, value, 1);
+       if (ret < 0) {
+               printk(KERN_ERR "SAA7191: saa7191_read_status(): read failed");
+               return ret;
+       }
+
+       return 0;
+}
+
+
+static int saa7191_write_reg(struct i2c_client *client, unsigned char reg,
+                            unsigned char value)
+{
+
+       ((struct saa7191 *)i2c_get_clientdata(client))->reg[reg] = value;
+       return i2c_smbus_write_byte_data(client, reg, value);
+}
+
+/* the first byte of data must be the first subaddress number (register) */
+static int saa7191_write_block(struct i2c_client *client,
+                              unsigned char length, unsigned char *data)
+{
+       int i;
+       int ret;
+
+       struct saa7191 *decoder = (struct saa7191 *)i2c_get_clientdata(client);
+       for (i = 0; i < (length - 1); i++) {
+               decoder->reg[data[0] + i] = data[i + 1];
+       }
+
+       ret = i2c_master_send(client, data, length);
+       if (ret < 0) {
+               printk(KERN_ERR "SAA7191: saa7191_write_block(): "
+                      "write failed");
+               return ret;
+       }
+
+       return 0;
+}
+
+/* Helper functions */
+
+static int saa7191_set_input(struct i2c_client *client, int input)
+{
+       unsigned char luma = saa7191_read_reg(client, SAA7191_REG_LUMA);
+       unsigned char iock = saa7191_read_reg(client, SAA7191_REG_IOCK);
+       int err;
+
+       switch (input) {
+       case SAA7191_INPUT_COMPOSITE: /* Set Composite input */
+               iock &= ~(SAA7191_IOCK_CHRS | SAA7191_IOCK_GPSW1
+                         | SAA7191_IOCK_GPSW2);
+               /* Chrominance trap active */
+               luma &= ~SAA7191_LUMA_BYPS;
+               break;
+       case SAA7191_INPUT_SVIDEO: /* Set S-Video input */
+               iock |= SAA7191_IOCK_CHRS | SAA7191_IOCK_GPSW2;
+               /* Chrominance trap bypassed */
+               luma |= SAA7191_LUMA_BYPS;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       err = saa7191_write_reg(client, SAA7191_REG_LUMA, luma);
+       if (err)
+               return -EIO;
+       err = saa7191_write_reg(client, SAA7191_REG_IOCK, iock);
+       if (err)
+               return -EIO;
+
+       return 0;
+}
+
+static int saa7191_set_norm(struct i2c_client *client, int norm)
+{
+       struct saa7191 *decoder = i2c_get_clientdata(client);
+       unsigned char stdc = saa7191_read_reg(client, SAA7191_REG_STDC);
+       unsigned char ctl3 = saa7191_read_reg(client, SAA7191_REG_CTL3);
+       unsigned char chcv = saa7191_read_reg(client, SAA7191_REG_CHCV);
+       int err;
+
+       switch(norm) {
+       case SAA7191_NORM_AUTO: {
+               unsigned char status;
+
+               // does status depend on current norm ?
+               if (saa7191_read_status(client, &status))
+                       return -EIO;
+
+               stdc &= ~SAA7191_STDC_SECS;
+               ctl3 &= ~SAA7191_CTL3_FSEL;
+               ctl3 |= SAA7191_CTL3_AUFD;
+               chcv = (status & SAA7191_STATUS_FIDT)
+                              ? SAA7191_CHCV_NTSC : SAA7191_CHCV_PAL;
+               break;
+       }
+       case SAA7191_NORM_PAL:
+               stdc &= ~SAA7191_STDC_SECS;
+               ctl3 &= ~(SAA7191_CTL3_AUFD | SAA7191_CTL3_FSEL);
+               chcv = SAA7191_CHCV_PAL;
+               break;
+       case SAA7191_NORM_NTSC:
+               stdc &= ~SAA7191_STDC_SECS;
+               ctl3 &= ~SAA7191_CTL3_AUFD;
+               ctl3 |= SAA7191_CTL3_FSEL;
+               chcv = SAA7191_CHCV_NTSC;
+               break;
+       case SAA7191_NORM_SECAM:
+               stdc |= SAA7191_STDC_SECS;
+               ctl3 &= ~(SAA7191_CTL3_AUFD | SAA7191_CTL3_FSEL);
+               chcv = SAA7191_CHCV_PAL;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       err = saa7191_write_reg(client, SAA7191_REG_CTL3, ctl3);
+       if (err)
+               return -EIO;
+       err = saa7191_write_reg(client, SAA7191_REG_STDC, stdc);
+       if (err)
+               return -EIO;
+       err = saa7191_write_reg(client, SAA7191_REG_CHCV, chcv);
+       if (err)
+               return -EIO;
+
+       decoder->norm = norm;
+
+       return 0;
+}
+
+static int saa7191_get_controls(struct i2c_client *client,
+                               struct saa7191_control *ctrl)
+{
+       unsigned char hue = saa7191_read_reg(client, SAA7191_REG_HUEC);
+       unsigned char stdc = saa7191_read_reg(client, SAA7191_REG_STDC);
+
+       if (hue < 0x80) {
+               hue += 0x80;
+       } else {
+               hue -= 0x80;
+       }
+       ctrl->hue = hue;
+
+       ctrl->vtrc = (stdc & SAA7191_STDC_VTRC)
+               ? SAA7191_VALUE_ENABLED : SAA7191_VALUE_DISABLED;
+
+       return 0;
+}
+
+static int saa7191_set_controls(struct i2c_client *client,
+                               struct saa7191_control *ctrl)
+{
+       int err;
+
+       if (ctrl->hue >= 0) {
+               unsigned char hue = ctrl->hue & 0xff;
+               if (hue < 0x80) {
+                       hue += 0x80;
+               } else {
+                       hue -= 0x80;
+               }
+               err = saa7191_write_reg(client, SAA7191_REG_HUEC, hue);
+               if (err)
+                       return -EIO;
+       }
+       if (ctrl->vtrc >= 0) {
+               unsigned char stdc =
+                       saa7191_read_reg(client, SAA7191_REG_STDC);
+
+               if (ctrl->vtrc) {
+                       stdc |= SAA7191_STDC_VTRC;
+               } else {
+                       stdc &= ~SAA7191_STDC_VTRC;
+               }
+
+               err = saa7191_write_reg(client, SAA7191_REG_STDC, stdc);
+               if (err)
+                       return -EIO;
+       }
+
+       return 0;
+}
+
+/* I2C-interface */
+
+static int saa7191_attach(struct i2c_adapter *adap, int addr, int kind)
+{
+       int err = 0;
+       struct saa7191 *decoder;
+       struct i2c_client *client;
+
+       printk(KERN_INFO "Philips SAA7191 driver version %s\n",
+              SAA7191_MODULE_VERSION);
+
+       client = kmalloc(sizeof(*client), GFP_KERNEL);
+       if (!client)
+               return -ENOMEM;
+       decoder = kmalloc(sizeof(*decoder), GFP_KERNEL);
+       if (!decoder) {
+               err = -ENOMEM;
+               goto out_free_client;
+       }
+
+       memset(client, 0, sizeof(struct i2c_client));
+       memset(decoder, 0, sizeof(struct saa7191));
+
+       client->addr = addr;
+       client->adapter = adap;
+       client->driver = &i2c_driver_saa7191;
+       client->flags = 0;
+       strcpy(client->name, "saa7191 client");
+       i2c_set_clientdata(client, decoder);
+
+       decoder->client = client;
+
+       err = i2c_attach_client(client);
+       if (err)
+               goto out_free_decoder;
+
+       decoder->input = SAA7191_INPUT_COMPOSITE;
+       decoder->norm = SAA7191_NORM_AUTO;
+
+       err = saa7191_write_block(client, sizeof(initseq),
+                                 (unsigned char *)initseq);
+       if (err) {
+               printk(KERN_ERR "SAA7191 initialization failed\n");
+               goto out_detach_client;
+       }
+
+       printk(KERN_INFO "SAA7191 initialized\n");
+
+       return 0;
+
+out_detach_client:
+       i2c_detach_client(client);
+out_free_decoder:
+       kfree(decoder);
+out_free_client:
+       kfree(client);
+       return err;
+}
+
+static int saa7191_probe(struct i2c_adapter *adap)
+{
+       /* Always connected to VINO */
+       if (adap->id == VINO_ADAPTER)
+               return saa7191_attach(adap, SAA7191_ADDR, 0);
+       /* Feel free to add probe here :-) */
+       return -ENODEV;
+}
+
+static int saa7191_detach(struct i2c_client *client)
+{
+       struct saa7191 *decoder = i2c_get_clientdata(client);
+
+       i2c_detach_client(client);
+       kfree(decoder);
+       kfree(client);
+       return 0;
+}
+
+static int saa7191_command(struct i2c_client *client, unsigned int cmd,
+                          void *arg)
+{
+       struct saa7191 *decoder = i2c_get_clientdata(client);
+
+       switch (cmd) {
+       case DECODER_GET_CAPABILITIES: {
+               struct video_decoder_capability *cap = arg;
+
+               cap->flags  = VIDEO_DECODER_PAL | VIDEO_DECODER_NTSC |
+                             VIDEO_DECODER_SECAM | VIDEO_DECODER_AUTO;
+               cap->inputs = (client->adapter->id == VINO_ADAPTER) ? 2 : 1;
+               cap->outputs = 1;
+               break;
+       }
+       case DECODER_GET_STATUS: {
+               int *iarg = arg;
+               unsigned char status;
+               int res = 0;
+
+               if (saa7191_read_status(client, &status)) {
+                       return -EIO;
+               }
+               if ((status & SAA7191_STATUS_HLCK) == 0)
+                       res |= DECODER_STATUS_GOOD;
+               if (status & SAA7191_STATUS_CODE)
+                       res |= DECODER_STATUS_COLOR;
+               switch (decoder->norm) {
+               case SAA7191_NORM_NTSC:
+                       res |= DECODER_STATUS_NTSC;
+                       break;
+               case SAA7191_NORM_PAL:
+                       res |= DECODER_STATUS_PAL;
+                       break;
+               case SAA7191_NORM_SECAM:
+                       res |= DECODER_STATUS_SECAM;
+                       break;
+               case SAA7191_NORM_AUTO:
+               default:
+                       if (status & SAA7191_STATUS_FIDT)
+                               res |= DECODER_STATUS_NTSC;
+                       else
+                               res |= DECODER_STATUS_PAL;
+                       break;
+               }
+               *iarg = res;
+               break;
+       }
+       case DECODER_SET_NORM: {
+               int *iarg = arg;
+
+               switch (*iarg) {
+               case VIDEO_MODE_AUTO:
+                       return saa7191_set_norm(client, SAA7191_NORM_AUTO);
+               case VIDEO_MODE_PAL:
+                       return saa7191_set_norm(client, SAA7191_NORM_PAL);
+               case VIDEO_MODE_NTSC:
+                       return saa7191_set_norm(client, SAA7191_NORM_NTSC);
+               case VIDEO_MODE_SECAM:
+                       return saa7191_set_norm(client, SAA7191_NORM_SECAM);
+               default:
+                       return -EINVAL;
+               }
+               break;
+       }
+       case DECODER_SET_INPUT: {
+               int *iarg = arg;
+
+               switch (client->adapter->id) {
+               case VINO_ADAPTER:
+                       return saa7191_set_input(client, *iarg);
+               default:
+                       if (*iarg != 0)
+                               return -EINVAL;
+               }
+               break;
+       }
+       case DECODER_SET_OUTPUT: {
+               int *iarg = arg;
+
+               /* not much choice of outputs */
+               if (*iarg != 0)
+                       return -EINVAL;
+               break;
+       }
+       case DECODER_ENABLE_OUTPUT: {
+               /* Always enabled */
+               break;
+       }
+       case DECODER_SET_PICTURE: {
+               struct video_picture *pic = arg;
+               unsigned val;
+               int err;
+
+               val = (pic->hue >> 8) - 0x80;
+               err = saa7191_write_reg(client, SAA7191_REG_HUEC, val);
+               if (err)
+                       return -EIO;
+               break;
+       }
+       case DECODER_SAA7191_GET_STATUS: {
+               struct saa7191_status *status = arg;
+               unsigned char status_reg;
+
+               if (saa7191_read_status(client, &status_reg))
+                       return -EIO;
+               status->signal = ((status_reg & SAA7191_STATUS_HLCK) == 0)
+                       ? SAA7191_VALUE_ENABLED : SAA7191_VALUE_DISABLED;
+               status->ntsc = (status_reg & SAA7191_STATUS_FIDT)
+                       ? SAA7191_VALUE_ENABLED : SAA7191_VALUE_DISABLED;
+               status->color = (status_reg & SAA7191_STATUS_CODE)
+                       ? SAA7191_VALUE_ENABLED : SAA7191_VALUE_DISABLED;
+
+               status->input = decoder->input;
+               status->norm = decoder->norm;
+       }
+       case DECODER_SAA7191_SET_NORM: {
+               int *norm = arg;
+               return saa7191_set_norm(client, *norm);
+       }
+       case DECODER_SAA7191_GET_CONTROLS: {
+               struct saa7191_control *ctrl = arg;
+               return saa7191_get_controls(client, ctrl);
+       }
+       case DECODER_SAA7191_SET_CONTROLS: {
+               struct saa7191_control *ctrl = arg;
+               return saa7191_set_controls(client, ctrl);
+       }
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static struct i2c_driver i2c_driver_saa7191 = {
+       .owner          = THIS_MODULE,
+       .name           = "saa7191",
+       .id             = I2C_DRIVERID_SAA7191,
+       .flags          = I2C_DF_NOTIFY,
+       .attach_adapter = saa7191_probe,
+       .detach_client  = saa7191_detach,
+       .command        = saa7191_command
+};
+
+static int saa7191_init(void)
+{
+       return i2c_add_driver(&i2c_driver_saa7191);
+}
+
+static void saa7191_exit(void)
+{
+       i2c_del_driver(&i2c_driver_saa7191);
+}
+
+module_init(saa7191_init);
+module_exit(saa7191_exit);
diff --git a/drivers/media/video/saa7191.h b/drivers/media/video/saa7191.h
new file mode 100644 (file)
index 0000000..2720450
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ *  saa7191.h - Philips SAA7191 video decoder driver
+ *
+ *  Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
+ *  Copyright (C) 2004,2005 Mikael Nousiainen <tmnousia@cc.hut.fi>
+ *
+ *  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.
+ */
+
+#ifndef _SAA7191_H_
+#define _SAA7191_H_
+
+/* Philips SAA7191 DMSD I2C bus address */
+#define SAA7191_ADDR           0x8a
+
+/* Register subaddresses. */
+#define SAA7191_REG_IDEL       0x00
+#define SAA7191_REG_HSYB       0x01
+#define SAA7191_REG_HSYS       0x02
+#define SAA7191_REG_HCLB       0x03
+#define SAA7191_REG_HCLS       0x04
+#define SAA7191_REG_HPHI       0x05
+#define SAA7191_REG_LUMA       0x06
+#define SAA7191_REG_HUEC       0x07
+#define SAA7191_REG_CKTQ       0x08
+#define SAA7191_REG_CKTS       0x09
+#define SAA7191_REG_PLSE       0x0a
+#define SAA7191_REG_SESE       0x0b
+#define SAA7191_REG_GAIN       0x0c
+#define SAA7191_REG_STDC       0x0d
+#define SAA7191_REG_IOCK       0x0e
+#define SAA7191_REG_CTL3       0x0f
+#define SAA7191_REG_CTL4       0x10
+#define SAA7191_REG_CHCV       0x11
+#define SAA7191_REG_HS6B       0x14
+#define SAA7191_REG_HS6S       0x15
+#define SAA7191_REG_HC6B       0x16
+#define SAA7191_REG_HC6S       0x17
+#define SAA7191_REG_HP6I       0x18
+#define SAA7191_REG_STATUS     0xff    /* not really a subaddress */
+
+/* Status Register definitions */
+#define SAA7191_STATUS_CODE    0x01    /* color detected flag */
+#define SAA7191_STATUS_FIDT    0x20    /* format type NTSC/PAL */
+#define SAA7191_STATUS_HLCK    0x40    /* PLL unlocked/locked */
+#define SAA7191_STATUS_STTC    0x80    /* tv/vtr time constant */
+
+/* Luminance Control Register definitions */
+#define SAA7191_LUMA_BYPS      0x80
+
+/* Chroma Gain Control Settings Register definitions */
+/* 0=automatic colour-killer enabled, 1=forced colour on */
+#define SAA7191_GAIN_COLO      0x80
+
+/* Standard/Mode Control Register definitions */
+/* tv/vtr mode bit: 0=TV mode (slow time constant),
+ * 1=VTR mode (fast time constant) */
+#define SAA7191_STDC_VTRC      0x80
+/* SECAM mode bit: 0=other standards, 1=SECAM */
+#define SAA7191_STDC_SECS      0x01
+/* the bit fields above must be or'd with this value */
+#define SAA7191_STDC_VALUE     0x0c
+
+/* I/O and Clock Control Register definitions */
+/* horizontal clock PLL: 0=PLL closed,
+ * 1=PLL circuit open and horizontal freq fixed */
+#define SAA7191_IOCK_HPLL      0x80
+/* S-VHS bit (chrominance from CVBS or from chrominance input):
+ * 0=controlled by BYPS-bit, 1=from chrominance input */
+#define SAA7191_IOCK_CHRS      0x04
+/* general purpose switch 2
+ * VINO-specific: 0=used with CVBS, 1=used with S-Video */
+#define SAA7191_IOCK_GPSW2     0x02
+/* general purpose switch 1 */
+/* VINO-specific: 0=always, 1=not used!*/
+#define SAA7191_IOCK_GPSW1     0x01
+
+/* Miscellaneous Control #1 Register definitions */
+/* automatic field detection (50/60Hz standard) */
+#define SAA7191_CTL3_AUFD      0x80
+/* field select: (if AUFD=0)
+ * 0=50Hz (625 lines), 1=60Hz (525 lines) */
+#define SAA7191_CTL3_FSEL      0x40
+/* the bit fields above must be or'd with this value */
+#define SAA7191_CTL3_VALUE     0x19
+
+/* Chrominance Gain Control Register definitions
+ * (nominal value for UV CCIR level) */
+#define SAA7191_CHCV_NTSC      0x2c
+#define SAA7191_CHCV_PAL       0x59
+
+/* Driver interface definitions */
+#define SAA7191_INPUT_COMPOSITE        0
+#define SAA7191_INPUT_SVIDEO   1
+
+#define SAA7191_NORM_AUTO      0
+#define SAA7191_NORM_PAL       1
+#define SAA7191_NORM_NTSC      2
+#define SAA7191_NORM_SECAM     3
+
+#define SAA7191_VALUE_ENABLED          1
+#define SAA7191_VALUE_DISABLED         0
+#define SAA7191_VALUE_UNCHANGED                -1
+
+struct saa7191_status {
+       /* 0=no signal, 1=signal active*/
+       int signal;
+       /* 0=50hz (pal) signal, 1=60hz (ntsc) signal */
+       int ntsc;
+       /* 0=no color detected, 1=color detected */
+       int color;
+
+       /* current SAA7191_INPUT_ */
+       int input;
+       /* current SAA7191_NORM_ */
+       int norm;
+};
+
+#define SAA7191_HUE_MIN                0x00
+#define SAA7191_HUE_MAX                0xff
+#define SAA7191_HUE_DEFAULT    0x80
+
+#define SAA7191_VTRC_MIN       0x00
+#define SAA7191_VTRC_MAX       0x01
+#define SAA7191_VTRC_DEFAULT   0x00
+
+struct saa7191_control {
+       int hue;
+       int vtrc;
+};
+
+#define        DECODER_SAA7191_GET_STATUS      _IOR('d', 195, struct saa7191_status)
+#define        DECODER_SAA7191_SET_NORM        _IOW('d', 196, int)
+#define        DECODER_SAA7191_GET_CONTROLS    _IOR('d', 197, struct saa7191_control)
+#define        DECODER_SAA7191_SET_CONTROLS    _IOW('d', 198, struct saa7191_control)
+
+#endif
index 76e8681d65c662f863636fb67deaf35f7158391b..d8a0f763ca101314d18f1c501631dca62d125f62 100644 (file)
 /*
- * (incomplete) Driver for the VINO (Video In No Out) system found in SGI Indys.
+ * Driver for the VINO (Video In No Out) system found in SGI Indys.
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * License version 2 as published by the Free Software Foundation.
  *
+ * Copyright (C) 2004,2005 Mikael Nousiainen <tmnousia@cc.hut.fi>
+ *
+ * Based on the previous version of the driver for 2.4 kernels by:
  * Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
  */
 
-#include <linux/module.h>
+/*
+ * TODO:
+ * - remove "hacks" from memory allocation code and implement nopage()
+ * - check decimation, calculating and reporting image size when
+ *   using decimation
+ * - check vino_acquire_input(), vino_set_input() and channel
+ *   ownership handling
+ * - report VINO error-interrupts via ioctls ?
+ * - implement picture controls (all implemented?)
+ * - use macros for boolean values (?)
+ * - implement user mode buffers and overlay (?)
+ */
+
 #include <linux/init.h>
-#include <linux/types.h>
-#include <linux/mm.h>
-#include <linux/slab.h>
-#include <linux/wrapper.h>
-#include <linux/errno.h>
-#include <linux/irq.h>
+#include <linux/module.h>
 #include <linux/delay.h>
-#include <linux/videodev.h>
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/interrupt.h>
+#include <linux/dma-mapping.h>
+#include <linux/time.h>
+#include <linux/moduleparam.h>
+
+#ifdef CONFIG_KMOD
+#include <linux/kmod.h>
+#endif
+
 #include <linux/i2c.h>
 #include <linux/i2c-algo-sgi.h>
 
-#include <asm/addrspace.h>
-#include <asm/system.h>
-#include <asm/bootinfo.h>
-#include <asm/pgtable.h>
+#include <linux/videodev.h>
+#include <linux/videodev2.h>
+#include <linux/video_decoder.h>
+
 #include <asm/paccess.h>
 #include <asm/io.h>
 #include <asm/sgi/ip22.h>
-#include <asm/sgi/hpc3.h>
 #include <asm/sgi/mc.h>
 
 #include "vino.h"
+#include "saa7191.h"
+#include "indycam.h"
 
-/* debugging? */
-#if 1
-#define DEBUG(x...)     printk(x);
+/* Uncomment the following line to get lots and lots of (mostly useless)
+ * debug info.
+ * Note that the debug output also slows down the driver significantly */
+// #define VINO_DEBUG
+
+#define VINO_MODULE_VERSION "0.0.3"
+#define VINO_VERSION_CODE KERNEL_VERSION(0, 0, 3)
+
+MODULE_DESCRIPTION("SGI VINO Video4Linux2 driver");
+MODULE_VERSION(VINO_MODULE_VERSION);
+MODULE_AUTHOR("Mikael Nousiainen <tmnousia@cc.hut.fi>");
+MODULE_LICENSE("GPL");
+
+#define mem_map_reserve(p) set_bit(PG_reserved, &((p)->flags))
+#define mem_map_unreserve(p) clear_bit(PG_reserved, &((p)->flags))
+
+#ifdef VINO_DEBUG
+#define dprintk(x...) printk("VINO: " x);
 #else
-#define DEBUG(x...)
+#define dprintk(x...)
 #endif
 
+#define VINO_NO_CHANNEL                        0
+#define VINO_CHANNEL_A                 1
+#define VINO_CHANNEL_B                 2
+
+#define VINO_PAL_WIDTH                 768
+#define VINO_PAL_HEIGHT                        576
+#define VINO_NTSC_WIDTH                        640
+#define VINO_NTSC_HEIGHT               480
+
+#define VINO_MIN_WIDTH                 32
+#define VINO_MIN_HEIGHT                        32
+
+#define VINO_CLIPPING_START_ODD_D1     1
+#define VINO_CLIPPING_START_ODD_PAL    1
+#define VINO_CLIPPING_START_ODD_NTSC   1
+
+#define VINO_CLIPPING_START_EVEN_D1    2
+#define VINO_CLIPPING_START_EVEN_PAL   2
+#define VINO_CLIPPING_START_EVEN_NTSC  2
+
+#define VINO_INPUT_CHANNEL_COUNT       3
+
+#define VINO_INPUT_NONE                        -1
+#define VINO_INPUT_COMPOSITE           0
+#define VINO_INPUT_SVIDEO              1
+#define VINO_INPUT_D1                  2
+
+#define VINO_PAGE_RATIO                        (PAGE_SIZE / VINO_PAGE_SIZE)
+
+#define VINO_FIFO_THRESHOLD_DEFAULT    512
+
+/*#define VINO_FRAMEBUFFER_SIZE                (VINO_PAL_WIDTH * VINO_PAL_HEIGHT * 4 \
+  + 2 * PAGE_SIZE)*/
+#define VINO_FRAMEBUFFER_SIZE          ((VINO_PAL_WIDTH \
+                                         * VINO_PAL_HEIGHT * 4 \
+                                         + 3 * PAGE_SIZE) & ~(PAGE_SIZE - 1))
+
+#define VINO_FRAMEBUFFER_MAX_COUNT     8
+
+#define VINO_FRAMEBUFFER_UNUSED                0
+#define VINO_FRAMEBUFFER_IN_USE                1
+#define VINO_FRAMEBUFFER_READY         2
+
+#define VINO_QUEUE_ERROR               -1
+#define VINO_QUEUE_MAGIC               0x20050125
+
+#define VINO_MEMORY_NONE               0
+#define VINO_MEMORY_MMAP               1
+#define VINO_MEMORY_USERPTR            2
+
+#define VINO_DUMMY_DESC_COUNT          4
+#define VINO_DESC_FETCH_DELAY          5       /* microseconds */
+
+/* the number is the index for vino_data_formats */
+#define VINO_DATA_FMT_NONE             -1
+#define VINO_DATA_FMT_GREY             0
+#define VINO_DATA_FMT_RGB332           1
+#define VINO_DATA_FMT_RGB32            2
+#define VINO_DATA_FMT_YUV              3
+//#define VINO_DATA_FMT_RGB24          4
+
+#define VINO_DATA_FMT_COUNT            4
+
+#define VINO_DATA_NORM_NONE            -1
+#define VINO_DATA_NORM_NTSC            0
+#define VINO_DATA_NORM_PAL             1
+#define VINO_DATA_NORM_SECAM           2
+#define VINO_DATA_NORM_D1              3
+/* The following is a special entry that can be used to
+ * autodetect the norm. */
+#define VINO_DATA_NORM_AUTO            0xff
+
+#define VINO_DATA_NORM_COUNT           4
+
+/* Internal data structure definitions */
+
+struct vino_input {
+       char *name;
+       v4l2_std_id std;
+};
+
+struct vino_clipping {
+       unsigned int left, right, top, bottom;
+};
+
+struct vino_data_format {
+       /* the description */
+       char *description;
+       /* bytes per pixel */
+       unsigned int bpp;
+       /* V4L2 fourcc code */
+       __u32 pixelformat;
+       /* V4L2 colorspace (duh!) */
+       enum v4l2_colorspace colorspace;
+};
+
+struct vino_data_norm {
+       char *description;
+       unsigned int width, height;
+       struct vino_clipping odd;
+       struct vino_clipping even;
+
+       v4l2_std_id std;
+       unsigned int fps_min, fps_max;
+       __u32 framelines;
+};
+
+struct vino_descriptor_table {
+       /* the number of PAGE_SIZE sized pages in the buffer */
+       unsigned int page_count;
+       /* virtual (kmalloc'd) pointers to the actual data
+        * (in PAGE_SIZE chunks, used with mmap streaming) */
+       unsigned long *virtual;
+
+       /* cpu address for the VINO descriptor table
+        * (contains DMA addresses, VINO_PAGE_SIZE chunks) */
+       unsigned long *dma_cpu;
+       /* dma address for the VINO descriptor table
+        * (contains DMA addresses, VINO_PAGE_SIZE chunks) */
+       dma_addr_t dma;
+};
+
+struct vino_framebuffer {
+       /* identifier nubmer */
+       unsigned int id;
+       /* the length of the whole buffer */
+       unsigned int size;
+       /* the length of actual data in buffer */
+       unsigned int data_size;
+       /* the data format */
+       unsigned int data_format;
+       /* the state of buffer data */
+       unsigned int state;
+       /* is the buffer mapped in user space? */
+       unsigned int map_count;
+       /* memory offset for mmap() */
+       unsigned int offset;
+       /* frame counter */
+       unsigned int frame_counter;
+       /* timestamp (written when image capture finishes) */
+       struct timeval timestamp;
+
+       struct vino_descriptor_table desc_table;
+
+       spinlock_t state_lock;
+};
+
+struct vino_framebuffer_fifo {
+       unsigned int length;
+
+       unsigned int used;
+       unsigned int head;
+       unsigned int tail;
+
+       unsigned int data[VINO_FRAMEBUFFER_MAX_COUNT];
+};
+
+struct vino_framebuffer_queue {
+       unsigned int magic;
+
+       /* VINO_MEMORY_NONE, VINO_MEMORY_MMAP or VINO_MEMORY_USERPTR */
+       unsigned int type;
+       unsigned int length;
+
+       /* data field of in and out contain index numbers for buffer */
+       struct vino_framebuffer_fifo in;
+       struct vino_framebuffer_fifo out;
+
+       struct vino_framebuffer *buffer[VINO_FRAMEBUFFER_MAX_COUNT];
 
-/* VINO ASIC registers */
-struct sgi_vino *vino;
+       spinlock_t queue_lock;
+       struct semaphore queue_sem;
+       wait_queue_head_t frame_wait_queue;
+};
+
+struct vino_channel_settings {
+       unsigned int channel;
+
+       int input;
+       unsigned int data_format;
+       unsigned int data_norm;
+       struct vino_clipping clipping;
+       unsigned int decimation;
+       unsigned int line_size;
+       unsigned int alpha;
+       unsigned int fps;
+       unsigned int framert_reg;
+
+       unsigned int fifo_threshold;
+
+       struct vino_framebuffer_queue fb_queue;
+
+       /* number of the current field */
+       unsigned int field;
+
+       /* read in progress */
+       int reading;
+       /* streaming is active */
+       int streaming;
+       /* the driver is currently processing the queue */
+       int capturing;
+
+       struct semaphore sem;
+       spinlock_t capture_lock;
 
-static const char *vinostr = "VINO IndyCam/TV";
-static int threshold_a = 512;
-static int threshold_b = 512;
+       unsigned int users;
 
-struct vino_device {
-       struct video_device vdev;
-#define VINO_CHAN_A            1
-#define VINO_CHAN_B            2
-       int chan;
+       /* V4L support */
+       struct video_device *v4l_device;
 };
 
 struct vino_client {
+       /* the channel which owns this client:
+        * VINO_NO_CHANNEL, VINO_CHANNEL_A or VINO_CHANNEL_B */
+       unsigned int owner;
        struct i2c_client *driver;
-       int owner;
 };
 
-struct vino_video {
-       struct vino_device chA;
-       struct vino_device chB;
+struct vino_settings {
+       struct vino_channel_settings a;
+       struct vino_channel_settings b;
 
        struct vino_client decoder;
        struct vino_client camera;
 
-       struct semaphore input_lock;
+       /* a lock for vino register access */
+       spinlock_t vino_lock;
+       /* a lock for channel input changes */
+       spinlock_t input_lock;
 
-       /* Loaded into VINO descriptors to clear End Of Descriptors table
-        * interupt condition */
        unsigned long dummy_page;
-       unsigned int dummy_buf[4] __attribute__((aligned(8)));
+       struct vino_descriptor_table dummy_desc_table;
+};
+
+/* Module parameters */
+
+/*
+ * Using vino_pixel_conversion the ARGB32-format pixels supplied
+ * by the VINO chip can be converted to more common formats
+ * like RGBA32 (or probably RGB24 in the future). This way we
+ * can give out data that can be specified correctly with
+ * the V4L2-definitions.
+ *
+ * The pixel format is specified as RGBA32 when no conversion
+ * is used.
+ *
+ * Note that this only affects the 32-bit bit depth.
+ *
+ * Use non-zero value to enable conversion.
+ */
+static int vino_pixel_conversion = 0;
+module_param_named(pixelconv, vino_pixel_conversion, int, 0);
+MODULE_PARM_DESC(pixelconv,
+                "enable pixel conversion (non-zero value enables)");
+
+/* Internal data structures */
+
+static struct sgi_vino *vino;
+
+static struct vino_settings *vino_drvdata;
+
+static const char *vino_driver_name = "vino";
+static const char *vino_driver_description = "SGI VINO";
+static const char *vino_bus_name = "GIO64 bus";
+static const char *vino_v4l_device_name_a = "SGI VINO Channel A";
+static const char *vino_v4l_device_name_b = "SGI VINO Channel B";
+
+static const struct vino_input vino_inputs[] = {
+       {
+               .name           = "Composite",
+               .std            = V4L2_STD_NTSC | V4L2_STD_PAL | V4L2_STD_SECAM,
+       },{
+               .name           = "S-Video",
+               .std            = V4L2_STD_NTSC | V4L2_STD_PAL | V4L2_STD_SECAM,
+       },{
+               .name           = "D1 (IndyCam)",
+               .std            = V4L2_STD_NTSC,
+       }
+};
+
+static const struct vino_data_format vino_data_formats[] = {
+       {
+               .description    = "8-bit greyscale",
+               .bpp            = 1,
+               .pixelformat    = V4L2_PIX_FMT_GREY,
+               .colorspace     = V4L2_COLORSPACE_SMPTE170M,
+       },{
+               .description    = "8-bit dithered RGB 3-3-2",
+               .bpp            = 1,
+               .pixelformat    = V4L2_PIX_FMT_RGB332,
+               .colorspace     = V4L2_COLORSPACE_SRGB,
+       },{
+               .description    = "32-bit RGB",
+               .bpp            = 4,
+               .pixelformat    = V4L2_PIX_FMT_RGB32,
+               .colorspace     = V4L2_COLORSPACE_SRGB,
+       },{
+               .description    = "YUV 4:2:2",
+               .bpp            = 4,
+               .pixelformat    = V4L2_PIX_FMT_YUYV, // XXX: swapped?
+               .colorspace     = V4L2_COLORSPACE_SMPTE170M,
+       }/*,{
+               .description    = "24-bit RGB",
+               .bpp            = 3,
+               .pixelformat    = V4L2_PIX_FMT_RGB24,
+               .colorspace     = V4L2_COLORSPACE_SRGB,
+               }*/
+};
+
+static const struct vino_data_norm vino_data_norms[] = {
+       {
+               .description    = "NTSC",
+               .std            = V4L2_STD_NTSC,
+               .fps_min        = 6,
+               .fps_max        = 30,
+               .framelines     = 525,
+               .width          = VINO_NTSC_WIDTH,
+               .height         = VINO_NTSC_HEIGHT,
+               .odd            = {
+                       .top    = VINO_CLIPPING_START_ODD_NTSC,
+                       .left   = 0,
+                       .bottom = VINO_CLIPPING_START_ODD_NTSC
+                       + VINO_NTSC_HEIGHT / 2 - 1,
+                       .right  = VINO_NTSC_WIDTH,
+               },
+               .even           = {
+                       .top    = VINO_CLIPPING_START_EVEN_NTSC,
+                       .left   = 0,
+                       .bottom = VINO_CLIPPING_START_EVEN_NTSC
+                       + VINO_NTSC_HEIGHT / 2 - 1,
+                       .right  = VINO_NTSC_WIDTH,
+               },
+       },{
+               .description    = "PAL",
+               .std            = V4L2_STD_PAL,
+               .fps_min        = 5,
+               .fps_max        = 25,
+               .framelines     = 625,
+               .width          = VINO_PAL_WIDTH,
+               .height         = VINO_PAL_HEIGHT,
+               .odd            = {
+                       .top    = VINO_CLIPPING_START_ODD_PAL,
+                       .left   = 0,
+                       .bottom = VINO_CLIPPING_START_ODD_PAL
+                       + VINO_PAL_HEIGHT / 2 - 1,
+                       .right  = VINO_PAL_WIDTH,
+               },
+               .even           = {
+                       .top    = VINO_CLIPPING_START_EVEN_PAL,
+                       .left   = 0,
+                       .bottom = VINO_CLIPPING_START_EVEN_PAL
+                       + VINO_PAL_HEIGHT / 2 - 1,
+                       .right  = VINO_PAL_WIDTH,
+               },
+       },{
+               .description    = "SECAM",
+               .std            = V4L2_STD_SECAM,
+               .fps_min        = 5,
+               .fps_max        = 25,
+               .framelines     = 625,
+               .width          = VINO_PAL_WIDTH,
+               .height         = VINO_PAL_HEIGHT,
+               .odd            = {
+                       .top    = VINO_CLIPPING_START_ODD_PAL,
+                       .left   = 0,
+                       .bottom = VINO_CLIPPING_START_ODD_PAL
+                       + VINO_PAL_HEIGHT / 2 - 1,
+                       .right  = VINO_PAL_WIDTH,
+               },
+               .even           = {
+                       .top    = VINO_CLIPPING_START_EVEN_PAL,
+                       .left   = 0,
+                       .bottom = VINO_CLIPPING_START_EVEN_PAL
+                       + VINO_PAL_HEIGHT / 2 - 1,
+                       .right  = VINO_PAL_WIDTH,
+               },
+       },{
+               .description    = "NTSC (D1 input)",
+               .std            = V4L2_STD_NTSC,
+               .fps_min        = 6,
+               .fps_max        = 30,
+               .framelines     = 525,
+               .width          = VINO_NTSC_WIDTH,
+               .height         = VINO_NTSC_HEIGHT,
+               .odd            = {
+                       .top    = VINO_CLIPPING_START_ODD_D1,
+                       .left   = 0,
+                       .bottom = VINO_CLIPPING_START_ODD_D1
+                       + VINO_NTSC_HEIGHT / 2 - 1,
+                       .right  = VINO_NTSC_WIDTH,
+               },
+               .even           = {
+                       .top    = VINO_CLIPPING_START_EVEN_D1,
+                       .left   = 0,
+                       .bottom = VINO_CLIPPING_START_EVEN_D1
+                       + VINO_NTSC_HEIGHT / 2 - 1,
+                       .right  = VINO_NTSC_WIDTH,
+               },
+       }
+};
+
+#define VINO_INDYCAM_V4L2_CONTROL_COUNT                9
+
+struct v4l2_queryctrl vino_indycam_v4l2_controls[] = {
+       {
+               .id = V4L2_CID_AUTOGAIN,
+               .type = V4L2_CTRL_TYPE_BOOLEAN,
+               .name = "Automatic Gain Control",
+               .minimum = 0,
+               .maximum = 1,
+               .step = 1,
+               .default_value = INDYCAM_AGC_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       },{
+               .id = V4L2_CID_AUTO_WHITE_BALANCE,
+               .type = V4L2_CTRL_TYPE_BOOLEAN,
+               .name = "Automatic White Balance",
+               .minimum = 0,
+               .maximum = 1,
+               .step = 1,
+               .default_value = INDYCAM_AWB_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       },{
+               .id = V4L2_CID_GAIN,
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .name = "Gain",
+               .minimum = INDYCAM_GAIN_MIN,
+               .maximum = INDYCAM_GAIN_MAX,
+               .step = 1,
+               .default_value = INDYCAM_GAIN_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       },{
+               .id = V4L2_CID_PRIVATE_BASE,
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .name = "Red Saturation",
+               .minimum = INDYCAM_RED_SATURATION_MIN,
+               .maximum = INDYCAM_RED_SATURATION_MAX,
+               .step = 1,
+               .default_value = INDYCAM_RED_SATURATION_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       },{
+               .id = V4L2_CID_PRIVATE_BASE + 1,
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .name = "Blue Saturation",
+               .minimum = INDYCAM_BLUE_SATURATION_MIN,
+               .maximum = INDYCAM_BLUE_SATURATION_MAX,
+               .step = 1,
+               .default_value = INDYCAM_BLUE_SATURATION_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       },{
+               .id = V4L2_CID_RED_BALANCE,
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .name = "Red Balance",
+               .minimum = INDYCAM_RED_BALANCE_MIN,
+               .maximum = INDYCAM_RED_BALANCE_MAX,
+               .step = 1,
+               .default_value = INDYCAM_RED_BALANCE_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       },{
+               .id = V4L2_CID_BLUE_BALANCE,
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .name = "Blue Balance",
+               .minimum = INDYCAM_BLUE_BALANCE_MIN,
+               .maximum = INDYCAM_BLUE_BALANCE_MAX,
+               .step = 1,
+               .default_value = INDYCAM_BLUE_BALANCE_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       },{
+               .id = V4L2_CID_EXPOSURE,
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .name = "Shutter Control",
+               .minimum = INDYCAM_SHUTTER_MIN,
+               .maximum = INDYCAM_SHUTTER_MAX,
+               .step = 1,
+               .default_value = INDYCAM_SHUTTER_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       },{
+               .id = V4L2_CID_GAMMA,
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .name = "Gamma",
+               .minimum = INDYCAM_GAMMA_MIN,
+               .maximum = INDYCAM_GAMMA_MAX,
+               .step = 1,
+               .default_value = INDYCAM_GAMMA_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       }
+};
+
+#define VINO_SAA7191_V4L2_CONTROL_COUNT                2
+
+struct v4l2_queryctrl vino_saa7191_v4l2_controls[] = {
+       {
+               .id = V4L2_CID_HUE,
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .name = "Hue",
+               .minimum = SAA7191_HUE_MIN,
+               .maximum = SAA7191_HUE_MAX,
+               .step = 1,
+               .default_value = SAA7191_HUE_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       },{
+               .id = V4L2_CID_PRIVATE_BASE,
+               .type = V4L2_CTRL_TYPE_BOOLEAN,
+               .name = "VTR Time Constant",
+               .minimum = SAA7191_VTRC_MIN,
+               .maximum = SAA7191_VTRC_MAX,
+               .step = 1,
+               .default_value = SAA7191_VTRC_DEFAULT,
+               .flags = 0,
+               .reserved = { 0, 0 },
+       }
 };
 
-static struct vino_video *Vino;
+/* VINO I2C bus functions */
 
 unsigned i2c_vino_getctrl(void *data)
 {
@@ -112,49 +638,49 @@ static struct i2c_algo_sgi_data i2c_sgi_vino_data =
  */
 static int i2c_vino_client_reg(struct i2c_client *client)
 {
-       int res = 0;
+       int ret = 0;
 
-       down(&Vino->input_lock);
+       spin_lock(&vino_drvdata->input_lock);
        switch (client->driver->id) {
        case I2C_DRIVERID_SAA7191:
-               if (Vino->decoder.driver)
-                       res = -EBUSY;
+               if (vino_drvdata->decoder.driver)
+                       ret = -EBUSY;
                else
-                       Vino->decoder.driver = client;
+                       vino_drvdata->decoder.driver = client;
                break;
        case I2C_DRIVERID_INDYCAM:
-               if (Vino->camera.driver)
-                       res = -EBUSY;
+               if (vino_drvdata->camera.driver)
+                       ret = -EBUSY;
                else
-                       Vino->camera.driver = client;
+                       vino_drvdata->camera.driver = client;
                break;
        default:
-               res = -ENODEV;
+               ret = -ENODEV;
        }
-       up(&Vino->input_lock);
+       spin_unlock(&vino_drvdata->input_lock);
 
-       return res;
+       return ret;
 }
 
 static int i2c_vino_client_unreg(struct i2c_client *client)
 {
-       int res = 0;
+       int ret = 0;
 
-       down(&Vino->input_lock);
-       if (client == Vino->decoder.driver) {
-               if (Vino->decoder.owner)
-                       res = -EBUSY;
+       spin_lock(&vino_drvdata->input_lock);
+       if (client == vino_drvdata->decoder.driver) {
+               if (vino_drvdata->decoder.owner != VINO_NO_CHANNEL)
+                       ret = -EBUSY;
                else
-                       Vino->decoder.driver = NULL;
-       } else if (client == Vino->camera.driver) {
-               if (Vino->camera.owner)
-                       res = -EBUSY;
+                       vino_drvdata->decoder.driver = NULL;
+       } else if (client == vino_drvdata->camera.driver) {
+               if (vino_drvdata->camera.owner != VINO_NO_CHANNEL)
+                       ret = -EBUSY;
                else
-                       Vino->camera.driver = NULL;
+                       vino_drvdata->camera.driver = NULL;
        }
-       up(&Vino->input_lock);
+       spin_unlock(&vino_drvdata->input_lock);
 
-       return res;
+       return ret;
 }
 
 static struct i2c_adapter vino_i2c_adapter =
@@ -176,172 +702,3591 @@ static int vino_i2c_del_bus(void)
        return i2c_sgi_del_bus(&vino_i2c_adapter);
 }
 
+static int i2c_camera_command(unsigned int cmd, void *arg)
+{
+       return vino_drvdata->camera.driver->
+               driver->command(vino_drvdata->camera.driver,
+                               cmd, arg);
+}
 
-static void vino_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static int i2c_decoder_command(unsigned int cmd, void *arg)
 {
+       return vino_drvdata->decoder.driver->
+               driver->command(vino_drvdata->decoder.driver,
+                               cmd, arg);
 }
 
-static int vino_open(struct video_device *dev, int flags)
+/* VINO framebuffer/DMA descriptor management */
+
+static void vino_free_buffer_with_count(struct vino_framebuffer *fb,
+                                              unsigned int count)
 {
-       struct vino_device *videv = (struct vino_device *)dev;
+       unsigned int i;
 
-       return 0;
+       dprintk("vino_free_buffer_with_count(): count = %d\n", count);
+
+       for (i = 0; i < count; i++) {
+               mem_map_unreserve(virt_to_page(fb->desc_table.virtual[i]));
+               dma_unmap_single(NULL,
+                                fb->desc_table.dma_cpu[VINO_PAGE_RATIO * i],
+                                PAGE_SIZE, DMA_FROM_DEVICE);
+               free_page(fb->desc_table.virtual[i]);
+       }
+
+       dma_free_coherent(NULL,
+                         VINO_PAGE_RATIO * (fb->desc_table.page_count + 4) *
+                         sizeof(dma_addr_t), (void *)fb->desc_table.dma_cpu,
+                         fb->desc_table.dma);
+       kfree(fb->desc_table.virtual);
+
+       memset(fb, 0, sizeof(struct vino_framebuffer));
+}
+
+static void vino_free_buffer(struct vino_framebuffer *fb)
+{
+       vino_free_buffer_with_count(fb, fb->desc_table.page_count);
 }
 
-static void vino_close(struct video_device *dev)
+static int vino_allocate_buffer(struct vino_framebuffer *fb,
+                               unsigned int size)
 {
-       struct vino_device *videv = (struct vino_device *)dev;
+       unsigned int count, i, j;
+       int ret = 0;
+
+       dprintk("vino_allocate_buffer():\n");
+
+       if (size < 1)
+               return -EINVAL;
+
+       memset(fb, 0, sizeof(struct vino_framebuffer));
+
+       count = ((size / PAGE_SIZE) + 4) & ~3;
+
+       dprintk("vino_allocate_buffer(): size = %d, count = %d\n",
+               size, count);
+
+       /* allocate memory for table with virtual (page) addresses */
+       fb->desc_table.virtual = (unsigned long *)
+               kmalloc(count * sizeof(unsigned long), GFP_KERNEL);
+       if (!fb->desc_table.virtual)
+               return -ENOMEM;
+
+       /* allocate memory for table with dma addresses
+        * (has space for four extra descriptors) */
+       fb->desc_table.dma_cpu =
+               dma_alloc_coherent(NULL, VINO_PAGE_RATIO * (count + 4) *
+                                  sizeof(dma_addr_t), &fb->desc_table.dma,
+                                  GFP_KERNEL | GFP_DMA);
+       if (!fb->desc_table.dma_cpu) {
+               ret = -ENOMEM;
+               goto out_free_virtual;
+       }
+
+       /* allocate pages for the buffer and acquire the according
+        * dma addresses */
+       for (i = 0; i < count; i++) {
+               dma_addr_t dma_data_addr;
+
+               fb->desc_table.virtual[i] =
+                       get_zeroed_page(GFP_KERNEL | GFP_DMA);
+               if (!fb->desc_table.virtual[i]) {
+                       ret = -ENOBUFS;
+                       break;
+               }
+
+               dma_data_addr =
+                       dma_map_single(NULL,
+                                      (void *)fb->desc_table.virtual[i],
+                                      PAGE_SIZE, DMA_FROM_DEVICE);
+
+               for (j = 0; j < VINO_PAGE_RATIO; j++) {
+                       fb->desc_table.dma_cpu[VINO_PAGE_RATIO * i + j] =
+                               dma_data_addr + VINO_PAGE_SIZE * j;
+               }
+
+               mem_map_reserve(virt_to_page(fb->desc_table.virtual[i]));
+       }
+
+       /* page_count needs to be set anyway, because the descriptor table has
+        * been allocated according to this number */
+       fb->desc_table.page_count = count;
+
+       if (ret) {
+               /* the descriptor with index i doesn't contain
+                * a valid address yet */
+               vino_free_buffer_with_count(fb, i);
+               return ret;
+       }
+
+       //fb->size = size;
+       fb->size = count * PAGE_SIZE;
+       fb->data_format = VINO_DATA_FMT_NONE;
+
+       /* set the dma stop-bit for the last (count+1)th descriptor */
+       fb->desc_table.dma_cpu[VINO_PAGE_RATIO * count] = VINO_DESC_STOP;
+       return 0;
+
+ out_free_virtual:
+       kfree(fb->desc_table.virtual);
+       return ret;
 }
 
-static int vino_mmap(struct video_device *dev, const char *adr,
-                    unsigned long size)
+#if 0
+/* user buffers not fully implemented yet */
+static int vino_prepare_user_buffer(struct vino_framebuffer *fb,
+                                    void *user,
+                                    unsigned int size)
 {
-       struct vino_device *videv = (struct vino_device *)dev;
+       unsigned int count, i, j;
+       int ret = 0;
+
+       dprintk("vino_prepare_user_buffer():\n");
+
+       if (size < 1)
+               return -EINVAL;
+
+       memset(fb, 0, sizeof(struct vino_framebuffer));
+
+       count = ((size / PAGE_SIZE)) & ~3;
+
+       dprintk("vino_prepare_user_buffer(): size = %d, count = %d\n",
+               size, count);
+
+       /* allocate memory for table with virtual (page) addresses */
+       fb->desc_table.virtual = (unsigned long *)
+               kmalloc(count * sizeof(unsigned long), GFP_KERNEL);
+       if (!fb->desc_table.virtual)
+               return -ENOMEM;
+
+       /* allocate memory for table with dma addresses
+        * (has space for four extra descriptors) */
+       fb->desc_table.dma_cpu =
+               dma_alloc_coherent(NULL, VINO_PAGE_RATIO * (count + 4) *
+                                  sizeof(dma_addr_t), &fb->desc_table.dma,
+                                  GFP_KERNEL | GFP_DMA);
+       if (!fb->desc_table.dma_cpu) {
+               ret = -ENOMEM;
+               goto out_free_virtual;
+       }
+
+       /* allocate pages for the buffer and acquire the according
+        * dma addresses */
+       for (i = 0; i < count; i++) {
+               dma_addr_t dma_data_addr;
+
+               fb->desc_table.virtual[i] =
+                       get_zeroed_page(GFP_KERNEL | GFP_DMA);
+               if (!fb->desc_table.virtual[i]) {
+                       ret = -ENOBUFS;
+                       break;
+               }
+
+               dma_data_addr =
+                       dma_map_single(NULL,
+                                      (void *)fb->desc_table.virtual[i],
+                                      PAGE_SIZE, DMA_FROM_DEVICE);
+
+               for (j = 0; j < VINO_PAGE_RATIO; j++) {
+                       fb->desc_table.dma_cpu[VINO_PAGE_RATIO * i + j] =
+                               dma_data_addr + VINO_PAGE_SIZE * j;
+               }
+
+               mem_map_reserve(virt_to_page(fb->desc_table.virtual[i]));
+       }
 
-       return -EINVAL;
+       /* page_count needs to be set anyway, because the descriptor table has
+        * been allocated according to this number */
+       fb->desc_table.page_count = count;
+
+       if (ret) {
+               /* the descriptor with index i doesn't contain
+                * a valid address yet */
+               vino_free_buffer_with_count(fb, i);
+               return ret;
+       }
+
+       //fb->size = size;
+       fb->size = count * PAGE_SIZE;
+
+       /* set the dma stop-bit for the last (count+1)th descriptor */
+       fb->desc_table.dma_cpu[VINO_PAGE_RATIO * count] = VINO_DESC_STOP;
+       return 0;
+
+ out_free_virtual:
+       kfree(fb->desc_table.virtual);
+       return ret;
 }
+#endif
 
-static int vino_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
+static void vino_sync_buffer(struct vino_framebuffer *fb)
 {
-       struct vino_device *videv = (struct vino_device *)dev;
+       int i;
+
+       dprintk("vino_sync_buffer():\n");
 
-       return -EINVAL;
+       for (i = 0; i < fb->desc_table.page_count; i++)
+               dma_sync_single(NULL,
+                               fb->desc_table.dma_cpu[VINO_PAGE_RATIO * i],
+                               PAGE_SIZE, DMA_FROM_DEVICE);
 }
 
-static const struct video_device vino_device = {
-       .owner          = THIS_MODULE,
-       .type           = VID_TYPE_CAPTURE | VID_TYPE_SUBCAPTURE,
-       .hardware       = VID_HARDWARE_VINO,
-       .name           = "VINO",
-       .open           = vino_open,
-       .close          = vino_close,
-       .ioctl          = vino_ioctl,
-       .mmap           = vino_mmap,
-};
+/* Framebuffer fifo functions (need to be locked externally) */
 
-static int __init vino_init(void)
+static void vino_fifo_init(struct vino_framebuffer_fifo *f,
+                          unsigned int length)
 {
-       unsigned long rev;
-       int i, ret = 0;
+       f->length = 0;
+       f->used = 0;
+       f->head = 0;
+       f->tail = 0;
 
-       /* VINO is Indy specific beast */
-       if (ip22_is_fullhouse())
-               return -ENODEV;
+       if (length > VINO_FRAMEBUFFER_MAX_COUNT)
+               length = VINO_FRAMEBUFFER_MAX_COUNT;
 
-       /*
-        * VINO is in the EISA address space, so the sysid register will tell
-        * us if the EISA_PRESENT pin on MC has been pulled low.
-        *
-        * If EISA_PRESENT is not set we definitely don't have a VINO equiped
-        * system.
-        */
-       if (!(sgimc->systemid & SGIMC_SYSID_EPRESENT)) {
-               printk(KERN_ERR "VINO not found\n");
-               return -ENODEV;
+       f->length = length;
+}
+
+/* returns true/false */
+static int vino_fifo_has_id(struct vino_framebuffer_fifo *f, unsigned int id)
+{
+       unsigned int i;
+       for (i = f->head; i == (f->tail - 1); i = (i + 1) % f->length) {
+               if (f->data[i] == id)
+                       return 1;
        }
 
-       vino = (struct sgi_vino *)ioremap(VINO_BASE, sizeof(struct sgi_vino));
-       if (!vino)
-               return -EIO;
+       return 0;
+}
 
-       /* Okay, once we know that VINO is present we'll read its revision
-        * safe way. One never knows... */
-       if (get_dbe(rev, &(vino->rev_id))) {
-               printk(KERN_ERR "VINO: failed to read revision register\n");
-               ret = -ENODEV;
-               goto out_unmap;
+/* returns true/false */
+static int vino_fifo_full(struct vino_framebuffer_fifo *f)
+{
+       return (f->used == f->length);
+}
+
+static unsigned int vino_fifo_get_used(struct vino_framebuffer_fifo *f)
+{
+       return f->used;
+}
+
+static int vino_fifo_enqueue(struct vino_framebuffer_fifo *f, unsigned int id)
+{
+       if (id >= f->length) {
+               return VINO_QUEUE_ERROR;
        }
-       if (VINO_ID_VALUE(rev) != VINO_CHIP_ID) {
-               printk(KERN_ERR "VINO is not VINO (Rev/ID: 0x%04lx)\n", rev);
-               ret = -ENODEV;
-               goto out_unmap;
+
+       if (vino_fifo_has_id(f, id)) {
+               return VINO_QUEUE_ERROR;
        }
-       printk(KERN_INFO "VINO Rev: 0x%02lx\n", VINO_REV_NUM(rev));
 
-       Vino = (struct vino_video *)
-               kmalloc(sizeof(struct vino_video), GFP_KERNEL);
-       if (!Vino) {
-               ret = -ENOMEM;
-               goto out_unmap;
+       if (f->used < f->length) {
+               f->data[f->tail] = id;
+               f->tail = (f->tail + 1) % f->length;
+               f->used++;
+       } else {
+               return VINO_QUEUE_ERROR;
        }
 
-       Vino->dummy_page = get_zeroed_page(GFP_KERNEL | GFP_DMA);
-       if (!Vino->dummy_page) {
-               ret = -ENOMEM;
-               goto out_free_vino;
+       return 0;
+}
+
+static int vino_fifo_peek(struct vino_framebuffer_fifo *f, unsigned int *id)
+{
+       if (f->used > 0) {
+               *id = f->data[f->head];
+       } else {
+               return VINO_QUEUE_ERROR;
        }
-       for (i = 0; i < 4; i++)
-               Vino->dummy_buf[i] = PHYSADDR(Vino->dummy_page);
 
-       vino->control = 0;
-       /* prevent VINO from throwing spurious interrupts */
-       vino->a.next_4_desc = PHYSADDR(Vino->dummy_buf);
-       vino->b.next_4_desc = PHYSADDR(Vino->dummy_buf);
-       udelay(5);
-       vino->intr_status = 0;
-        /* set threshold level */
-        vino->a.fifo_thres = threshold_a;
-       vino->b.fifo_thres = threshold_b;
+       return 0;
+}
+
+static int vino_fifo_dequeue(struct vino_framebuffer_fifo *f, unsigned int *id)
+{
+       if (f->used > 0) {
+               *id = f->data[f->head];
+               f->head = (f->head + 1) % f->length;
+               f->used--;
+       } else {
+               return VINO_QUEUE_ERROR;
+       }
+
+       return 0;
+}
 
-       init_MUTEX(&Vino->input_lock);
+/* Framebuffer queue functions */
 
-       if (request_irq(SGI_VINO_IRQ, vino_interrupt, 0, vinostr, NULL)) {
-               printk(KERN_ERR "VINO: irq%02d registration failed\n",
-                      SGI_VINO_IRQ);
-               ret = -EAGAIN;
-               goto out_free_page;
+/* execute with queue_lock locked */
+static void vino_queue_free_with_count(struct vino_framebuffer_queue *q,
+                                      unsigned int length)
+{
+       unsigned int i;
+
+       q->length = 0;
+       memset(&q->in, 0, sizeof(struct vino_framebuffer_fifo));
+       memset(&q->out, 0, sizeof(struct vino_framebuffer_fifo));
+       for (i = 0; i < length; i++) {
+               dprintk("vino_queue_free_with_count(): freeing buffer %d\n",
+                       i);
+               vino_free_buffer(q->buffer[i]);
+               kfree(q->buffer[i]);
        }
 
-       ret = vino_i2c_add_bus();
-       if (ret) {
-               printk(KERN_ERR "VINO: I2C bus registration failed\n");
-               goto out_free_irq;
+       q->type = VINO_MEMORY_NONE;
+       q->magic = 0;
+}
+
+static void vino_queue_free(struct vino_framebuffer_queue *q)
+{
+       dprintk("vino_queue_free():\n");
+
+       if (q->magic != VINO_QUEUE_MAGIC)
+               return;
+       if (q->type != VINO_MEMORY_MMAP)
+               return;
+
+       down(&q->queue_sem);
+
+       vino_queue_free_with_count(q, q->length);
+
+       up(&q->queue_sem);
+}
+
+static int vino_queue_init(struct vino_framebuffer_queue *q,
+                          unsigned int *length)
+{
+       unsigned int i;
+       int ret = 0;
+
+       dprintk("vino_queue_init(): length = %d\n", *length);
+
+       if (q->magic == VINO_QUEUE_MAGIC) {
+               dprintk("vino_queue_init(): queue already initialized!\n");
+               return -EINVAL;
        }
 
-       if (video_register_device(&Vino->chA.vdev, VFL_TYPE_GRABBER, -1) < 0) {
-               printk("%s, chnl %d: device registration failed.\n",
-                       Vino->chA.vdev.name, Vino->chA.chan);
-               ret = -EINVAL;
-               goto out_i2c_del_bus;
+       if (q->type != VINO_MEMORY_NONE) {
+               dprintk("vino_queue_init(): queue already initialized!\n");
+               return -EINVAL;
        }
-       if (video_register_device(&Vino->chB.vdev, VFL_TYPE_GRABBER, -1) < 0) {
-               printk("%s, chnl %d: device registration failed.\n",
-                       Vino->chB.vdev.name, Vino->chB.chan);
-               ret = -EINVAL;
-               goto out_unregister_vdev;
+
+       if (*length < 1)
+               return -EINVAL;
+
+       down(&q->queue_sem);
+
+       if (*length > VINO_FRAMEBUFFER_MAX_COUNT)
+               *length = VINO_FRAMEBUFFER_MAX_COUNT;
+
+       q->length = 0;
+
+       for (i = 0; i < *length; i++) {
+               dprintk("vino_queue_init(): allocating buffer %d\n", i);
+               q->buffer[i] = kmalloc(sizeof(struct vino_framebuffer),
+                                      GFP_KERNEL);
+               if (!q->buffer[i]) {
+                       dprintk("vino_queue_init(): kmalloc() failed\n");
+                       ret = -ENOMEM;
+                       break;
+               }
+
+               ret = vino_allocate_buffer(q->buffer[i],
+                                          VINO_FRAMEBUFFER_SIZE);
+               if (ret) {
+                       kfree(q->buffer[i]);
+                       dprintk("vino_queue_init(): "
+                               "vino_allocate_buffer() failed\n");
+                       break;
+               }
+
+               q->buffer[i]->id = i;
+               if (i > 0) {
+                       q->buffer[i]->offset = q->buffer[i - 1]->offset +
+                               q->buffer[i - 1]->size;
+               } else {
+                       q->buffer[i]->offset = 0;
+               }
+
+               spin_lock_init(&q->buffer[i]->state_lock);
+
+               dprintk("vino_queue_init(): buffer = %d, offset = %d, "
+                       "size = %d\n", i, q->buffer[i]->offset,
+                       q->buffer[i]->size);
        }
 
-       return 0;
+       if (ret) {
+               vino_queue_free_with_count(q, i);
+               *length = 0;
+       } else {
+               q->length = *length;
+               vino_fifo_init(&q->in, q->length);
+               vino_fifo_init(&q->out, q->length);
+               q->type = VINO_MEMORY_MMAP;
+               q->magic = VINO_QUEUE_MAGIC;
+       }
 
-out_unregister_vdev:
-       video_unregister_device(&Vino->chA.vdev);
-out_i2c_del_bus:
-       vino_i2c_del_bus();
-out_free_irq:
-       free_irq(SGI_VINO_IRQ, NULL);
-out_free_page:
-       free_page(Vino->dummy_page);
-out_free_vino:
-       kfree(Vino);
-out_unmap:
-       iounmap(vino);
+       up(&q->queue_sem);
 
        return ret;
 }
 
-static void __exit vino_exit(void)
+static struct vino_framebuffer *vino_queue_add(struct
+                                              vino_framebuffer_queue *q,
+                                              unsigned int id)
 {
-       video_unregister_device(&Vino->chA.vdev);
-       video_unregister_device(&Vino->chB.vdev);
-       vino_i2c_del_bus();
-       free_irq(SGI_VINO_IRQ, NULL);
-       free_page(Vino->dummy_page);
-       kfree(Vino);
-       iounmap(vino);
+       struct vino_framebuffer *ret = NULL;
+       unsigned int total;
+       unsigned long flags;
+
+       dprintk("vino_queue_add(): id = %d\n", id);
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return ret;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+
+       if (q->length == 0)
+               goto out;
+
+       if (id >= q->length)
+               goto out;
+
+       /* not needed?: if (vino_fifo_full(&q->out)) {
+               goto out;
+               }*/
+       /* check that outgoing queue isn't already full
+        * (or that it won't become full) */
+       total = vino_fifo_get_used(&q->in) +
+               vino_fifo_get_used(&q->out);
+       if (total >= q->length)
+               goto out;
+
+       if (vino_fifo_enqueue(&q->in, id))
+               goto out;
+
+       ret = q->buffer[id];
+
+out:
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
 }
 
-module_init(vino_init);
-module_exit(vino_exit);
+static struct vino_framebuffer *vino_queue_transfer(struct
+                                                   vino_framebuffer_queue *q)
+{
+       struct vino_framebuffer *ret = NULL;
+       struct vino_framebuffer *fb;
+       int id;
+       unsigned long flags;
 
-MODULE_DESCRIPTION("Video4Linux driver for SGI Indy VINO (IndyCam)");
-MODULE_LICENSE("GPL");
+       dprintk("vino_queue_transfer():\n");
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return ret;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+
+       if (q->length == 0)
+               goto out;
+
+       // now this actually removes an entry from the incoming queue
+       if (vino_fifo_dequeue(&q->in, &id)) {
+               goto out;
+       }
+
+       dprintk("vino_queue_transfer(): id = %d\n", id);
+       fb = q->buffer[id];
+
+       // we have already checked that the outgoing queue is not full, but...
+       if (vino_fifo_enqueue(&q->out, id)) {
+               printk(KERN_ERR "vino_queue_transfer(): "
+                      "outgoing queue is full, this shouldn't happen!\n");
+               goto out;
+       }
+
+       ret = fb;
+out:
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
+}
+
+/* returns true/false */
+static int vino_queue_incoming_contains(struct vino_framebuffer_queue *q,
+                                       unsigned int id)
+{
+       int ret = 0;
+       unsigned long flags;
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return ret;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+
+       if (q->length == 0)
+               goto out;
+
+       ret = vino_fifo_has_id(&q->in, id);
+
+out:
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
+}
+
+/* returns true/false */
+static int vino_queue_outgoing_contains(struct vino_framebuffer_queue *q,
+                                       unsigned int id)
+{
+       int ret = 0;
+       unsigned long flags;
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return ret;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+
+       if (q->length == 0)
+               goto out;
+
+       ret = vino_fifo_has_id(&q->out, id);
+
+out:
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
+}
+
+static int vino_queue_get_incoming(struct vino_framebuffer_queue *q,
+                                  unsigned int *used)
+{
+       int ret = 0;
+       unsigned long flags;
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return VINO_QUEUE_ERROR;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+
+       if (q->length == 0) {
+               ret = VINO_QUEUE_ERROR;
+               goto out;
+       }
+
+       *used = vino_fifo_get_used(&q->in);
+
+out:
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
+}
+
+static int vino_queue_get_outgoing(struct vino_framebuffer_queue *q,
+                                  unsigned int *used)
+{
+       int ret = 0;
+       unsigned long flags;
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return VINO_QUEUE_ERROR;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+
+       if (q->length == 0) {
+               ret = VINO_QUEUE_ERROR;
+               goto out;
+       }
+
+       *used = vino_fifo_get_used(&q->out);
+
+out:
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
+}
+
+static int vino_queue_get_total(struct vino_framebuffer_queue *q,
+                               unsigned int *total)
+{
+       int ret = 0;
+       unsigned long flags;
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return VINO_QUEUE_ERROR;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+
+       if (q->length == 0) {
+               ret = VINO_QUEUE_ERROR;
+               goto out;
+       }
+
+       *total = vino_fifo_get_used(&q->in) +
+               vino_fifo_get_used(&q->out);
+
+out:
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
+}
+
+static struct vino_framebuffer *vino_queue_peek(struct
+                                               vino_framebuffer_queue *q,
+                                               unsigned int *id)
+{
+       struct vino_framebuffer *ret = NULL;
+       unsigned long flags;
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return ret;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+
+       if (q->length == 0)
+               goto out;
+
+       if (vino_fifo_peek(&q->in, id)) {
+               goto out;
+       }
+
+       ret = q->buffer[*id];
+out:
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
+}
+
+static struct vino_framebuffer *vino_queue_remove(struct
+                                                 vino_framebuffer_queue *q,
+                                                 unsigned int *id)
+{
+       struct vino_framebuffer *ret = NULL;
+       unsigned long flags;
+       dprintk("vino_queue_remove():\n");
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return ret;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+
+       if (q->length == 0)
+               goto out;
+
+       if (vino_fifo_dequeue(&q->out, id)) {
+               goto out;
+       }
+
+       dprintk("vino_queue_remove(): id = %d\n", *id);
+       ret = q->buffer[*id];
+out:
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
+}
+
+static struct
+vino_framebuffer *vino_queue_get_buffer(struct vino_framebuffer_queue *q,
+                                       unsigned int id)
+{
+       struct vino_framebuffer *ret = NULL;
+       unsigned long flags;
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return ret;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+
+       if (q->length == 0)
+               goto out;
+
+       if (id >= q->length)
+               goto out;
+
+       ret = q->buffer[id];
+ out:
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
+}
+
+static unsigned int vino_queue_get_length(struct vino_framebuffer_queue *q)
+{
+       unsigned int length = 0;
+       unsigned long flags;
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return length;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+       length = q->length;
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return length;
+}
+
+static int vino_queue_has_mapped_buffers(struct vino_framebuffer_queue *q)
+{
+       unsigned int i;
+       int ret = 0;
+       unsigned long flags;
+
+       if (q->magic != VINO_QUEUE_MAGIC) {
+               return ret;
+       }
+
+       spin_lock_irqsave(&q->queue_lock, flags);
+       for (i = 0; i < q->length; i++) {
+               if (q->buffer[i]->map_count > 0) {
+                       ret = 1;
+                       break;
+               }
+       }
+       spin_unlock_irqrestore(&q->queue_lock, flags);
+
+       return ret;
+}
+
+/* VINO functions */
+
+/* execute with input_lock locked */
+static void vino_update_line_size(struct vino_channel_settings *vcs)
+{
+       unsigned int w = vcs->clipping.right - vcs->clipping.left;
+       unsigned int d = vcs->decimation;
+       unsigned int bpp = vino_data_formats[vcs->data_format].bpp;
+        unsigned int lsize;
+
+       dprintk("update_line_size(): before: w = %d, d = %d, "
+               "line_size = %d\n", w, d, vcs->line_size);
+        /* line size must be multiple of 8 bytes */
+       lsize = (bpp * (w / d)) & ~7;
+       w = (lsize / bpp) * d;
+
+       vcs->clipping.right = vcs->clipping.left + w;
+       vcs->line_size = lsize;
+       dprintk("update_line_size(): after: w = %d, d = %d, "
+               "line_size = %d\n", w, d, vcs->line_size);
+}
+
+/* execute with input_lock locked */
+static void vino_set_clipping(struct vino_channel_settings *vcs,
+                             unsigned int x, unsigned int y,
+                             unsigned int w, unsigned int h)
+{
+       unsigned int maxwidth, maxheight;
+       unsigned int d;
+
+       maxwidth = vino_data_norms[vcs->data_norm].width;
+       maxheight = vino_data_norms[vcs->data_norm].height;
+       d = vcs->decimation;
+
+       y &= ~1;        /* odd/even fields */
+
+       if (x > maxwidth) {
+               x = 0;
+       }
+       if (y > maxheight) {
+               y = 0;
+       }
+
+       if (((w / d) < VINO_MIN_WIDTH)
+           || ((h / d) < VINO_MIN_HEIGHT)) {
+               w = VINO_MIN_WIDTH * d;
+               h = VINO_MIN_HEIGHT * d;
+       }
+
+       if ((x + w) > maxwidth) {
+               w = maxwidth - x;
+               if ((w / d) < VINO_MIN_WIDTH)
+                       x = maxwidth - VINO_MIN_WIDTH * d;
+       }
+       if ((y + h) > maxheight) {
+               h = maxheight - y;
+               if ((h / d) < VINO_MIN_HEIGHT)
+                       y = maxheight - VINO_MIN_HEIGHT * d;
+       }
+
+       vcs->clipping.left = x;
+       vcs->clipping.top = y;
+       vcs->clipping.right = x + w;
+       vcs->clipping.bottom = y + h;
+
+       vino_update_line_size(vcs);
+
+       dprintk("clipping %d, %d, %d, %d / %d - %d\n",
+               vcs->clipping.left, vcs->clipping.top, vcs->clipping.right,
+               vcs->clipping.bottom, vcs->decimation, vcs->line_size);
+}
+
+/* execute with input_lock locked */
+static void vino_set_default_clipping(struct vino_channel_settings *vcs)
+{
+       vino_set_clipping(vcs, 0, 0, vino_data_norms[vcs->data_norm].width,
+                         vino_data_norms[vcs->data_norm].height);
+}
+
+/* execute with input_lock locked */
+static void vino_set_scaling(struct vino_channel_settings *vcs,
+                            unsigned int w, unsigned int h)
+{
+       unsigned int x, y, curw, curh, d;
+
+       x = vcs->clipping.left;
+       y = vcs->clipping.top;
+       curw = vcs->clipping.right - vcs->clipping.left;
+       curh = vcs->clipping.bottom - vcs->clipping.top;
+
+       d = max(curw / w, curh / h);
+
+       dprintk("scaling w: %d, h: %d, curw: %d, curh: %d, d: %d\n",
+               w, h, curw, curh, d);
+
+       if (d < 1) {
+               d = 1;
+       }
+       if (d > 8) {
+               d = 8;
+       }
+
+       vcs->decimation = d;
+       vino_set_clipping(vcs, x, y, w * d, h * d);
+
+       dprintk("scaling %d, %d, %d, %d / %d - %d\n", vcs->clipping.left,
+               vcs->clipping.top, vcs->clipping.right, vcs->clipping.bottom,
+               vcs->decimation, vcs->line_size);
+}
+
+/* execute with input_lock locked */
+static void vino_reset_scaling(struct vino_channel_settings *vcs)
+{
+       vino_set_scaling(vcs, vcs->clipping.right - vcs->clipping.left,
+                        vcs->clipping.bottom - vcs->clipping.top);
+}
+
+/* execute with input_lock locked */
+static void vino_set_framerate(struct vino_channel_settings *vcs,
+                              unsigned int fps)
+{
+       unsigned int mask;
+
+       switch (vcs->data_norm) {
+       case VINO_DATA_NORM_NTSC:
+       case VINO_DATA_NORM_D1:
+               fps = (unsigned int)(fps / 6) * 6; // FIXME: round!
+
+               if (fps < vino_data_norms[vcs->data_norm].fps_min)
+                       fps = vino_data_norms[vcs->data_norm].fps_min;
+               if (fps > vino_data_norms[vcs->data_norm].fps_max)
+                       fps = vino_data_norms[vcs->data_norm].fps_max;
+
+               switch (fps) {
+               case 6:
+                       mask = 0x003;
+                       break;
+               case 12:
+                       mask = 0x0c3;
+                       break;
+               case 18:
+                       mask = 0x333;
+                       break;
+               case 24:
+                       mask = 0x3ff;
+                       break;
+               case 30:
+                       mask = 0xfff;
+                       break;
+               default:
+                       mask = VINO_FRAMERT_FULL;
+               }
+               vcs->framert_reg = VINO_FRAMERT_RT(mask);
+               break;
+       case VINO_DATA_NORM_PAL:
+       case VINO_DATA_NORM_SECAM:
+               fps = (unsigned int)(fps / 5) * 5; // FIXME: round!
+
+               if (fps < vino_data_norms[vcs->data_norm].fps_min)
+                       fps = vino_data_norms[vcs->data_norm].fps_min;
+               if (fps > vino_data_norms[vcs->data_norm].fps_max)
+                       fps = vino_data_norms[vcs->data_norm].fps_max;
+
+               switch (fps) {
+               case 5:
+                       mask = 0x003;
+                       break;
+               case 10:
+                       mask = 0x0c3;
+                       break;
+               case 15:
+                       mask = 0x333;
+                       break;
+               case 20:
+                       mask = 0x0ff;
+                       break;
+               case 25:
+                       mask = 0x3ff;
+                       break;
+               default:
+                       mask = VINO_FRAMERT_FULL;
+               }
+               vcs->framert_reg = VINO_FRAMERT_RT(mask) | VINO_FRAMERT_PAL;
+               break;
+       }
+
+       vcs->fps = fps;
+}
+
+/* execute with input_lock locked */
+static void vino_set_default_framerate(struct vino_channel_settings *vcs)
+{
+       vino_set_framerate(vcs, vino_data_norms[vcs->data_norm].fps_max);
+}
+
+/*
+ * Prepare VINO for DMA transfer...
+ * (execute only with vino_lock and input_lock locked)
+ */
+static int vino_dma_setup(struct vino_channel_settings *vcs,
+                         struct vino_framebuffer *fb)
+{
+       u32 ctrl, intr;
+       struct sgi_vino_channel *ch;
+       const struct vino_data_norm *norm;
+
+       dprintk("vino_dma_setup():\n");
+
+       vcs->field = 0;
+       fb->frame_counter = 0;
+
+       ch = (vcs->channel == VINO_CHANNEL_A) ? &vino->a : &vino->b;
+       norm = &vino_data_norms[vcs->data_norm];
+
+       ch->page_index = 0;
+       ch->line_count = 0;
+
+       /* VINO line size register is set 8 bytes less than actual */
+       ch->line_size = vcs->line_size - 8;
+
+       /* let VINO know where to transfer data */
+       ch->start_desc_tbl = fb->desc_table.dma;
+       ch->next_4_desc = fb->desc_table.dma;
+
+       /* give vino time to fetch the first four descriptors, 5 usec
+        * should be more than enough time */
+       udelay(VINO_DESC_FETCH_DELAY);
+
+       /* set the alpha register */
+       ch->alpha = vcs->alpha;
+
+       /* set clipping registers */
+       ch->clip_start = VINO_CLIP_ODD(norm->odd.top + vcs->clipping.top / 2) |
+               VINO_CLIP_EVEN(norm->even.top +
+                              vcs->clipping.top / 2) |
+               VINO_CLIP_X(vcs->clipping.left);
+       ch->clip_end = VINO_CLIP_ODD(norm->odd.top +
+                                    vcs->clipping.bottom / 2 - 1) |
+               VINO_CLIP_EVEN(norm->even.top +
+                              vcs->clipping.bottom / 2 - 1) |
+               VINO_CLIP_X(vcs->clipping.right);
+       /* FIXME: end-of-field bug workaround
+                      VINO_CLIP_X(VINO_PAL_WIDTH);
+        */
+
+       /* set the size of actual content in the buffer (DECIMATION !) */
+       fb->data_size = ((vcs->clipping.right - vcs->clipping.left) /
+                        vcs->decimation) *
+               ((vcs->clipping.bottom - vcs->clipping.top) /
+                vcs->decimation) *
+               vino_data_formats[vcs->data_format].bpp;
+
+       ch->frame_rate = vcs->framert_reg;
+
+       ctrl = vino->control;
+       intr = vino->intr_status;
+
+       if (vcs->channel == VINO_CHANNEL_A) {
+               /* All interrupt conditions for this channel was cleared
+                * so clear the interrupt status register and enable
+                * interrupts */
+               intr &= ~VINO_INTSTAT_A;
+               ctrl |= VINO_CTRL_A_INT;
+
+               /* enable synchronization */
+               ctrl |= VINO_CTRL_A_SYNC_ENBL;
+
+               /* enable frame assembly */
+               ctrl |= VINO_CTRL_A_INTERLEAVE_ENBL;
+
+               /* set decimation used */
+               if (vcs->decimation < 2)
+                       ctrl &= ~VINO_CTRL_A_DEC_ENBL;
+               else {
+                       ctrl |= VINO_CTRL_A_DEC_ENBL;
+                       ctrl &= ~VINO_CTRL_A_DEC_SCALE_MASK;
+                       ctrl |= (vcs->decimation - 1) <<
+                               VINO_CTRL_A_DEC_SCALE_SHIFT;
+               }
+
+               /* select input interface */
+               if (vcs->input == VINO_INPUT_D1)
+                       ctrl |= VINO_CTRL_A_SELECT;
+               else
+                       ctrl &= ~VINO_CTRL_A_SELECT;
+
+               /* palette */
+               ctrl &= ~(VINO_CTRL_A_LUMA_ONLY | VINO_CTRL_A_RGB |
+                         VINO_CTRL_A_DITHER);
+       } else {
+               intr &= ~VINO_INTSTAT_B;
+               ctrl |= VINO_CTRL_B_INT;
+
+               ctrl |= VINO_CTRL_B_SYNC_ENBL;
+               ctrl |= VINO_CTRL_B_INTERLEAVE_ENBL;
+
+               if (vcs->decimation < 2)
+                       ctrl &= ~VINO_CTRL_B_DEC_ENBL;
+               else {
+                       ctrl |= VINO_CTRL_B_DEC_ENBL;
+                       ctrl &= ~VINO_CTRL_B_DEC_SCALE_MASK;
+                       ctrl |= (vcs->decimation - 1) <<
+                               VINO_CTRL_B_DEC_SCALE_SHIFT;
+
+               }
+               if (vcs->input == VINO_INPUT_D1)
+                       ctrl |= VINO_CTRL_B_SELECT;
+               else
+                       ctrl &= ~VINO_CTRL_B_SELECT;
+
+               ctrl &= ~(VINO_CTRL_B_LUMA_ONLY | VINO_CTRL_B_RGB |
+                         VINO_CTRL_B_DITHER);
+       }
+
+       /* set palette */
+       fb->data_format = vcs->data_format;
+
+       switch (vcs->data_format) {
+               case VINO_DATA_FMT_GREY:
+                       ctrl |= (vcs->channel == VINO_CHANNEL_A) ?
+                               VINO_CTRL_A_LUMA_ONLY : VINO_CTRL_B_LUMA_ONLY;
+                       break;
+               case VINO_DATA_FMT_RGB32:
+                       ctrl |= (vcs->channel == VINO_CHANNEL_A) ?
+                               VINO_CTRL_A_RGB : VINO_CTRL_B_RGB;
+                       break;
+               case VINO_DATA_FMT_YUV:
+                       /* nothing needs to be done */
+                       break;
+               case VINO_DATA_FMT_RGB332:
+                       ctrl |= (vcs->channel == VINO_CHANNEL_A) ?
+                               VINO_CTRL_A_RGB | VINO_CTRL_A_DITHER :
+                               VINO_CTRL_B_RGB | VINO_CTRL_B_DITHER;
+                       break;
+       }
+
+       vino->intr_status = intr;
+       vino->control = ctrl;
+
+       return 0;
+}
+
+/* (execute only with vino_lock locked) */
+static void vino_dma_start(struct vino_channel_settings *vcs)
+{
+       u32 ctrl = vino->control;
+
+       dprintk("vino_dma_start():\n");
+       ctrl |= (vcs->channel == VINO_CHANNEL_A) ?
+               VINO_CTRL_A_DMA_ENBL : VINO_CTRL_B_DMA_ENBL;
+       vino->control = ctrl;
+}
+
+/* (execute only with vino_lock locked) */
+static void vino_dma_stop(struct vino_channel_settings *vcs)
+{
+       u32 ctrl = vino->control;
+
+       ctrl &= (vcs->channel == VINO_CHANNEL_A) ?
+               ~VINO_CTRL_A_DMA_ENBL : ~VINO_CTRL_B_DMA_ENBL;
+       vino->control = ctrl;
+       dprintk("vino_dma_stop():\n");
+}
+
+/*
+ * Load dummy page to descriptor registers. This prevents generating of
+ * spurious interrupts. (execute only with vino_lock locked)
+ */
+static void vino_clear_interrupt(struct vino_channel_settings *vcs)
+{
+       struct sgi_vino_channel *ch;
+
+       ch = (vcs->channel == VINO_CHANNEL_A) ? &vino->a : &vino->b;
+
+       ch->page_index = 0;
+       ch->line_count = 0;
+
+       ch->start_desc_tbl = vino_drvdata->dummy_desc_table.dma;
+       ch->next_4_desc = vino_drvdata->dummy_desc_table.dma;
+
+       udelay(VINO_DESC_FETCH_DELAY);
+       dprintk("channel %c clear interrupt condition\n",
+              (vcs->channel == VINO_CHANNEL_A) ? 'A':'B');
+}
+
+static int vino_capture(struct vino_channel_settings *vcs,
+                       struct vino_framebuffer *fb)
+{
+       int err = 0;
+       unsigned long flags, flags2;
+
+       spin_lock_irqsave(&fb->state_lock, flags);
+
+       if (fb->state == VINO_FRAMEBUFFER_IN_USE)
+               err = -EBUSY;
+       fb->state = VINO_FRAMEBUFFER_IN_USE;
+
+       spin_unlock_irqrestore(&fb->state_lock, flags);
+
+       if (err)
+               return err;
+
+       spin_lock_irqsave(&vino_drvdata->vino_lock, flags);
+       spin_lock_irqsave(&vino_drvdata->input_lock, flags2);
+
+       vino_dma_setup(vcs, fb);
+       vino_dma_start(vcs);
+
+       spin_unlock_irqrestore(&vino_drvdata->input_lock, flags2);
+       spin_unlock_irqrestore(&vino_drvdata->vino_lock, flags);
+
+       return err;
+}
+
+static
+struct vino_framebuffer *vino_capture_enqueue(struct
+                                             vino_channel_settings *vcs,
+                                             unsigned int index)
+{
+       struct vino_framebuffer *fb;
+       unsigned long flags;
+
+       dprintk("vino_capture_enqueue():\n");
+
+       spin_lock_irqsave(&vcs->capture_lock, flags);
+
+       fb = vino_queue_add(&vcs->fb_queue, index);
+       if (fb == NULL) {
+               dprintk("vino_capture_enqueue(): vino_queue_add() failed, "
+                       "queue full?\n");
+               goto out;
+       }
+out:
+       spin_unlock_irqrestore(&vcs->capture_lock, flags);
+
+       return fb;
+}
+
+static int vino_capture_next(struct vino_channel_settings *vcs, int start)
+{
+       struct vino_framebuffer *fb;
+       unsigned int incoming, id;
+       int err = 0;
+       unsigned long flags, flags2;
+
+       dprintk("vino_capture_next():\n");
+
+       spin_lock_irqsave(&vcs->capture_lock, flags);
+
+       if (start) {
+               /* start capture only if capture isn't in progress already */
+               if (vcs->capturing) {
+                       spin_unlock_irqrestore(&vcs->capture_lock, flags);
+                       return 0;
+               }
+
+       } else {
+               /* capture next frame:
+                * stop capture if capturing is not set */
+               if (!vcs->capturing) {
+                       spin_unlock_irqrestore(&vcs->capture_lock, flags);
+                       return 0;
+               }
+       }
+
+       err = vino_queue_get_incoming(&vcs->fb_queue, &incoming);
+       if (err) {
+               dprintk("vino_capture_next(): vino_queue_get_incoming() "
+                       "failed\n");
+               err = -EINVAL;
+               goto out;
+       }
+       if (incoming == 0) {
+               dprintk("vino_capture_next(): no buffers available\n");
+               goto out;
+       }
+
+       fb = vino_queue_peek(&vcs->fb_queue, &id);
+       if (fb == NULL) {
+               dprintk("vino_capture_next(): vino_queue_peek() failed\n");
+               err = -EINVAL;
+               goto out;
+       }
+
+       spin_lock_irqsave(&fb->state_lock, flags2);
+       fb->state = VINO_FRAMEBUFFER_UNUSED;
+       spin_unlock_irqrestore(&fb->state_lock, flags2);
+
+       if (start) {
+               vcs->capturing = 1;
+       }
+
+       spin_unlock_irqrestore(&vcs->capture_lock, flags);
+
+       err = vino_capture(vcs, fb);
+
+       return err;
+
+out:
+       vcs->capturing = 0;
+       spin_unlock_irqrestore(&vcs->capture_lock, flags);
+
+       return err;
+}
+
+static int vino_is_capturing(struct vino_channel_settings *vcs)
+{
+       int ret;
+       unsigned long flags;
+
+       spin_lock_irqsave(&vcs->capture_lock, flags);
+
+       ret = vcs->capturing;
+
+       spin_unlock_irqrestore(&vcs->capture_lock, flags);
+
+       return ret;
+}
+
+/* waits until a frame is captured */
+static int vino_wait_for_frame(struct vino_channel_settings *vcs)
+{
+       wait_queue_t wait;
+       int err = 0;
+
+       dprintk("vino_wait_for_frame():\n");
+
+       init_waitqueue_entry(&wait, current);
+       /* add ourselves into wait queue */
+       add_wait_queue(&vcs->fb_queue.frame_wait_queue, &wait);
+       /* and set current state */
+       set_current_state(TASK_INTERRUPTIBLE);
+
+       /* to ensure that schedule_timeout will return immediately
+        * if VINO interrupt was triggred meanwhile */
+       schedule_timeout(HZ / 10);
+
+       if (signal_pending(current))
+               err = -EINTR;
+
+       remove_wait_queue(&vcs->fb_queue.frame_wait_queue, &wait);
+
+       dprintk("vino_wait_for_frame(): waiting for frame %s\n",
+               err ? "failed" : "ok");
+
+       return err;
+}
+
+/* the function assumes that PAGE_SIZE % 4 == 0 */
+static void vino_convert_to_rgba(struct vino_framebuffer *fb) {
+       unsigned char *pageptr;
+       unsigned int page, i;
+       unsigned char a;
+
+       for (page = 0; page < fb->desc_table.page_count; page++) {
+               pageptr = (unsigned char *)fb->desc_table.virtual[page];
+
+               for (i = 0; i < PAGE_SIZE; i += 4) {
+                       a = pageptr[0];
+                       pageptr[0] = pageptr[3];
+                       pageptr[1] = pageptr[2];
+                       pageptr[2] = pageptr[1];
+                       pageptr[3] = a;
+                       pageptr += 4;
+               }
+       }
+}
+
+/* checks if the buffer is in correct state and syncs data */
+static int vino_check_buffer(struct vino_channel_settings *vcs,
+                            struct vino_framebuffer *fb)
+{
+       int err = 0;
+       unsigned long flags;
+
+       dprintk("vino_check_buffer():\n");
+
+       spin_lock_irqsave(&fb->state_lock, flags);
+       switch (fb->state) {
+       case VINO_FRAMEBUFFER_IN_USE:
+               err = -EIO;
+               break;
+       case VINO_FRAMEBUFFER_READY:
+               vino_sync_buffer(fb);
+               fb->state = VINO_FRAMEBUFFER_UNUSED;
+               break;
+       default:
+               err = -EINVAL;
+       }
+       spin_unlock_irqrestore(&fb->state_lock, flags);
+
+       if (!err) {
+               if (vino_pixel_conversion
+                   && (fb->data_format == VINO_DATA_FMT_RGB32)) {
+                       vino_convert_to_rgba(fb);
+               }
+       } else if (err && (err != -EINVAL)) {
+               dprintk("vino_check_buffer(): buffer not ready\n");
+
+               spin_lock_irqsave(&vino_drvdata->vino_lock, flags);
+               vino_dma_stop(vcs);
+               vino_clear_interrupt(vcs);
+               spin_unlock_irqrestore(&vino_drvdata->vino_lock, flags);
+       }
+
+       return err;
+}
+
+/* forcefully terminates capture */
+static void vino_capture_stop(struct vino_channel_settings *vcs)
+{
+       unsigned int incoming = 0, outgoing = 0, id;
+       unsigned long flags, flags2;
+
+       dprintk("vino_capture_stop():\n");
+
+       spin_lock_irqsave(&vcs->capture_lock, flags);
+       /* unset capturing to stop queue processing */
+       vcs->capturing = 0;
+
+       spin_lock_irqsave(&vino_drvdata->vino_lock, flags2);
+
+       vino_dma_stop(vcs);
+       vino_clear_interrupt(vcs);
+
+       spin_unlock_irqrestore(&vino_drvdata->vino_lock, flags2);
+
+       /* remove all items from the queue */
+       if (vino_queue_get_incoming(&vcs->fb_queue, &incoming)) {
+               dprintk("vino_capture_stop(): "
+                       "vino_queue_get_incoming() failed\n");
+               goto out;
+       }
+       while (incoming > 0) {
+               vino_queue_transfer(&vcs->fb_queue);
+
+               if (vino_queue_get_incoming(&vcs->fb_queue, &incoming)) {
+                       dprintk("vino_capture_stop(): "
+                               "vino_queue_get_incoming() failed\n");
+                       goto out;
+               }
+       }
+
+       if (vino_queue_get_outgoing(&vcs->fb_queue, &outgoing)) {
+               dprintk("vino_capture_stop(): "
+                       "vino_queue_get_outgoing() failed\n");
+               goto out;
+       }
+       while (outgoing > 0) {
+               vino_queue_remove(&vcs->fb_queue, &id);
+
+               if (vino_queue_get_outgoing(&vcs->fb_queue, &outgoing)) {
+                       dprintk("vino_capture_stop(): "
+                               "vino_queue_get_outgoing() failed\n");
+                       goto out;
+               }
+       }
+
+out:
+       spin_unlock_irqrestore(&vcs->capture_lock, flags);
+}
+
+static int vino_capture_failed(struct vino_channel_settings *vcs)
+{
+       struct vino_framebuffer *fb;
+       unsigned long flags;
+       unsigned int i;
+       int ret;
+
+       dprintk("vino_capture_failed():\n");
+
+       spin_lock_irqsave(&vino_drvdata->vino_lock, flags);
+
+       vino_dma_stop(vcs);
+       vino_clear_interrupt(vcs);
+
+       spin_unlock_irqrestore(&vino_drvdata->vino_lock, flags);
+
+       ret = vino_queue_get_incoming(&vcs->fb_queue, &i);
+       if (ret == VINO_QUEUE_ERROR) {
+               dprintk("vino_queue_get_incoming() failed\n");
+               return -EINVAL;
+       }
+       if (i == 0) {
+               /* no buffers to process */
+               return 0;
+       }
+
+       fb = vino_queue_peek(&vcs->fb_queue, &i);
+       if (fb == NULL) {
+               dprintk("vino_queue_peek() failed\n");
+               return -EINVAL;
+       }
+
+       spin_lock_irqsave(&fb->state_lock, flags);
+       if (fb->state == VINO_FRAMEBUFFER_IN_USE) {
+               fb->state = VINO_FRAMEBUFFER_UNUSED;
+               vino_queue_transfer(&vcs->fb_queue);
+               vino_queue_remove(&vcs->fb_queue, &i);
+               /* we should actually discard the newest frame,
+                * but who cares ... */
+       }
+       spin_unlock_irqrestore(&fb->state_lock, flags);
+
+       return 0;
+}
+
+static void vino_frame_done(struct vino_channel_settings *vcs,
+                           unsigned int fc)
+{
+       struct vino_framebuffer *fb;
+       unsigned long flags;
+
+       spin_lock_irqsave(&vcs->capture_lock, flags);
+       fb = vino_queue_transfer(&vcs->fb_queue);
+       if (!fb) {
+               spin_unlock_irqrestore(&vcs->capture_lock, flags);
+               dprintk("vino_frame_done(): vino_queue_transfer() failed!\n");
+               return;
+       }
+       spin_unlock_irqrestore(&vcs->capture_lock, flags);
+
+       fb->frame_counter = fc;
+       do_gettimeofday(&fb->timestamp);
+
+       spin_lock_irqsave(&fb->state_lock, flags);
+       if (fb->state == VINO_FRAMEBUFFER_IN_USE)
+               fb->state = VINO_FRAMEBUFFER_READY;
+       spin_unlock_irqrestore(&fb->state_lock, flags);
+
+       wake_up(&vcs->fb_queue.frame_wait_queue);
+
+       vino_capture_next(vcs, 0);
+}
+
+static irqreturn_t vino_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+       u32 intr;
+       unsigned int fc_a, fc_b;
+       int done_a = 0;
+       int done_b = 0;
+
+       spin_lock(&vino_drvdata->vino_lock);
+
+       intr = vino->intr_status;
+       fc_a = vino->a.field_counter / 2;
+       fc_b = vino->b.field_counter / 2;
+
+       // TODO: handle error-interrupts in some special way ?
+
+       if (intr & VINO_INTSTAT_A) {
+               if (intr & VINO_INTSTAT_A_EOF) {
+                       vino_drvdata->a.field++;
+                       if (vino_drvdata->a.field > 1) {
+                               vino_dma_stop(&vino_drvdata->a);
+                               vino_clear_interrupt(&vino_drvdata->a);
+                               vino_drvdata->a.field = 0;
+                               done_a = 1;
+                       }
+                       dprintk("intr: channel A end-of-field interrupt: "
+                               "%04x\n", intr);
+               } else {
+                       vino_dma_stop(&vino_drvdata->a);
+                       vino_clear_interrupt(&vino_drvdata->a);
+                       done_a = 1;
+                       dprintk("channel A error interrupt: %04x\n", intr);
+               }
+       }
+       if (intr & VINO_INTSTAT_B) {
+               if (intr & VINO_INTSTAT_B_EOF) {
+                       vino_drvdata->b.field++;
+                       if (vino_drvdata->b.field > 1) {
+                               vino_dma_stop(&vino_drvdata->b);
+                               vino_clear_interrupt(&vino_drvdata->b);
+                               vino_drvdata->b.field = 0;
+                               done_b = 1;
+                       }
+                       dprintk("intr: channel B end-of-field interrupt: "
+                               "%04x\n", intr);
+               } else {
+                       vino_dma_stop(&vino_drvdata->b);
+                       vino_clear_interrupt(&vino_drvdata->b);
+                       done_b = 1;
+                       dprintk("channel B error interrupt: %04x\n", intr);
+               }
+       }
+
+       /* always remember to clear interrupt status */
+       vino->intr_status = ~intr;
+
+       spin_unlock(&vino_drvdata->vino_lock);
+
+       if (done_a) {
+               vino_frame_done(&vino_drvdata->a, fc_a);
+               dprintk("channel A frame done, interrupt: %d\n", intr);
+       }
+       if (done_b) {
+               vino_frame_done(&vino_drvdata->b, fc_b);
+               dprintk("channel B frame done, interrupt: %d\n", intr);
+       }
+
+       return IRQ_HANDLED;
+}
+
+/* VINO video input management */
+
+static int vino_get_saa7191_input(int input)
+{
+       switch (input) {
+       case VINO_INPUT_COMPOSITE:
+               return SAA7191_INPUT_COMPOSITE;
+       case VINO_INPUT_SVIDEO:
+               return SAA7191_INPUT_SVIDEO;
+       default:
+               printk(KERN_ERR "VINO: vino_get_saa7191_input(): "
+                      "invalid input!\n");
+               return -1;
+       }
+}
+
+static int vino_get_saa7191_norm(int norm)
+{
+       switch (norm) {
+       case VINO_DATA_NORM_AUTO:
+               return SAA7191_NORM_AUTO;
+       case VINO_DATA_NORM_PAL:
+               return SAA7191_NORM_PAL;
+       case VINO_DATA_NORM_NTSC:
+               return SAA7191_NORM_NTSC;
+       case VINO_DATA_NORM_SECAM:
+               return SAA7191_NORM_SECAM;
+       default:
+               printk(KERN_ERR "VINO: vino_get_saa7191_norm(): "
+                      "invalid norm!\n");
+               return -1;
+       }
+}
+
+/* execute with input_lock locked */
+static int vino_is_input_owner(struct vino_channel_settings *vcs)
+{
+       switch(vcs->input) {
+       case VINO_INPUT_COMPOSITE:
+       case VINO_INPUT_SVIDEO:
+               return (vino_drvdata->decoder.owner == vcs->channel);
+       case VINO_INPUT_D1:
+               return (vino_drvdata->camera.owner == vcs->channel);
+       default:
+               return 0;
+       }
+}
+
+static int vino_acquire_input(struct vino_channel_settings *vcs)
+{
+       int ret = 0;
+
+       dprintk("vino_acquire_input():\n");
+
+       spin_lock(&vino_drvdata->input_lock);
+
+       /* First try D1 and then SAA7191 */
+       if (vino_drvdata->camera.driver
+           && (vino_drvdata->camera.owner == VINO_NO_CHANNEL)) {
+               if (i2c_use_client(vino_drvdata->camera.driver)) {
+                       ret = -ENODEV;
+                       goto out;
+               }
+
+               vino_drvdata->camera.owner = vcs->channel;
+               vcs->input = VINO_INPUT_D1;
+               vcs->data_norm = VINO_DATA_NORM_D1;
+       } else if (vino_drvdata->decoder.driver
+                  && (vino_drvdata->decoder.owner == VINO_NO_CHANNEL)) {
+               int saa7191_input;
+               int saa7191_norm;
+
+               if (i2c_use_client(vino_drvdata->decoder.driver)) {
+                       ret = -ENODEV;
+                       goto out;
+               }
+
+               vino_drvdata->decoder.owner = vcs->channel;
+               vcs->input = VINO_INPUT_COMPOSITE;
+               vcs->data_norm = VINO_DATA_NORM_PAL;
+
+               saa7191_input = vino_get_saa7191_input(vcs->input);
+               i2c_decoder_command(DECODER_SET_INPUT, &saa7191_input);
+
+               saa7191_norm = vino_get_saa7191_norm(vcs->data_norm);
+               i2c_decoder_command(DECODER_SAA7191_SET_NORM, &saa7191_norm);
+       } else {
+               vcs->input = (vcs->channel == VINO_CHANNEL_A) ?
+                       vino_drvdata->b.input : vino_drvdata->a.input;
+               vcs->data_norm = (vcs->channel == VINO_CHANNEL_A) ?
+                       vino_drvdata->b.data_norm : vino_drvdata->a.data_norm;
+       }
+
+       if (vcs->input == VINO_INPUT_NONE) {
+               ret = -ENODEV;
+               goto out;
+       }
+
+       if (vino_is_input_owner(vcs)) {
+               vino_set_default_clipping(vcs);
+               vino_set_default_framerate(vcs);
+       }
+
+       dprintk("vino_acquire_input(): %s\n", vino_inputs[vcs->input].name);
+
+out:
+       spin_unlock(&vino_drvdata->input_lock);
+
+       return ret;
+}
+
+static int vino_set_input(struct vino_channel_settings *vcs, int input)
+{
+       struct vino_channel_settings *vcs2 = (vcs->channel == VINO_CHANNEL_A) ?
+               &vino_drvdata->b : &vino_drvdata->a;
+       int ret = 0;
+
+       dprintk("vino_set_input():\n");
+
+       spin_lock(&vino_drvdata->input_lock);
+
+       if (vcs->input == input)
+               goto out;
+
+       switch(input) {
+       case VINO_INPUT_COMPOSITE:
+       case VINO_INPUT_SVIDEO:
+               if (!vino_drvdata->decoder.driver) {
+                       ret = -EINVAL;
+                       goto out;
+               }
+
+               if (vino_drvdata->decoder.owner == VINO_NO_CHANNEL) {
+                       if (i2c_use_client(vino_drvdata->decoder.driver)) {
+                               ret = -ENODEV;
+                               goto out;
+                       }
+                       vino_drvdata->decoder.owner = vcs->channel;
+               }
+
+               if (vino_drvdata->decoder.owner == vcs->channel) {
+                       int saa7191_input;
+                       int saa7191_norm;
+
+                       vcs->input = input;
+                       vcs->data_norm = VINO_DATA_NORM_PAL;
+
+                       saa7191_input = vino_get_saa7191_input(vcs->input);
+                       i2c_decoder_command(DECODER_SET_INPUT, &saa7191_input);
+                       saa7191_norm = vino_get_saa7191_norm(vcs->data_norm);
+                       i2c_decoder_command(DECODER_SAA7191_SET_NORM,
+                                           &saa7191_norm);
+               } else {
+                       if (vcs2->input != input) {
+                               ret = -EBUSY;
+                               goto out;
+                       }
+
+                       vcs->input = input;
+                       vcs->data_norm = vcs2->data_norm;
+               }
+
+               if (vino_drvdata->camera.owner == vcs->channel) {
+                       /* Transfer the ownership or release the input */
+                       if (vcs2->input == VINO_INPUT_D1) {
+                               vino_drvdata->camera.owner = vcs2->channel;
+                       } else {
+                               i2c_release_client(vino_drvdata->
+                                                  camera.driver);
+                               vino_drvdata->camera.owner = VINO_NO_CHANNEL;
+                       }
+               }
+               break;
+       case VINO_INPUT_D1:
+               if (!vino_drvdata->camera.driver) {
+                       ret = -EINVAL;
+                       goto out;
+               }
+
+               if (vino_drvdata->camera.owner == VINO_NO_CHANNEL) {
+                       if (i2c_use_client(vino_drvdata->camera.driver)) {
+                               ret = -ENODEV;
+                               goto out;
+                       }
+                       vino_drvdata->camera.owner = vcs->channel;
+               }
+
+               if (vino_drvdata->decoder.owner == vcs->channel) {
+                       /* Transfer the ownership or release the input */
+                       if ((vcs2->input == VINO_INPUT_COMPOSITE) ||
+                                (vcs2->input == VINO_INPUT_SVIDEO)) {
+                               vino_drvdata->decoder.owner = vcs2->channel;
+                       } else {
+                               i2c_release_client(vino_drvdata->
+                                                  decoder.driver);
+                               vino_drvdata->decoder.owner = VINO_NO_CHANNEL;
+                       }
+               }
+
+               vcs->input = input;
+               vcs->data_norm = VINO_DATA_NORM_D1;
+               break;
+       default:
+               ret = -EINVAL;
+               goto out;
+       }
+
+       vino_set_default_clipping(vcs);
+       vino_set_default_framerate(vcs);
+
+       dprintk("vino_set_input(): %s\n", vino_inputs[vcs->input].name);
+
+out:
+       spin_unlock(&vino_drvdata->input_lock);
+
+       return ret;
+}
+
+static void vino_release_input(struct vino_channel_settings *vcs)
+{
+       struct vino_channel_settings *vcs2 = (vcs->channel == VINO_CHANNEL_A) ?
+               &vino_drvdata->b : &vino_drvdata->a;
+
+       dprintk("vino_release_input():\n");
+
+       spin_lock(&vino_drvdata->input_lock);
+
+       /* Release ownership of the channel
+        * and if the other channel takes input from
+        * the same source, transfer the ownership */
+       if (vino_drvdata->camera.owner == vcs->channel) {
+               if (vcs2->input == VINO_INPUT_D1) {
+                       vino_drvdata->camera.owner = vcs2->channel;
+               } else {
+                       i2c_release_client(vino_drvdata->camera.driver);
+                       vino_drvdata->camera.owner = VINO_NO_CHANNEL;
+               }
+       } else if (vino_drvdata->decoder.owner == vcs->channel) {
+               if ((vcs2->input == VINO_INPUT_COMPOSITE) ||
+                        (vcs2->input == VINO_INPUT_SVIDEO)) {
+                       vino_drvdata->decoder.owner = vcs2->channel;
+               } else {
+                       i2c_release_client(vino_drvdata->decoder.driver);
+                       vino_drvdata->decoder.owner = VINO_NO_CHANNEL;
+               }
+       }
+       vcs->input = VINO_INPUT_NONE;
+
+       spin_unlock(&vino_drvdata->input_lock);
+}
+
+/* execute with input_lock locked */
+static int vino_set_data_norm(struct vino_channel_settings *vcs,
+                             unsigned int data_norm)
+{
+       int saa7191_norm;
+
+       switch (vcs->input) {
+       case VINO_INPUT_D1:
+               /* only one "norm" supported */
+               if (data_norm != VINO_DATA_NORM_D1)
+                       return -EINVAL;
+               break;
+       case VINO_INPUT_COMPOSITE:
+       case VINO_INPUT_SVIDEO:
+
+               saa7191_norm = vino_get_saa7191_norm(data_norm);
+
+               i2c_decoder_command(DECODER_SAA7191_SET_NORM, &saa7191_norm);
+               vcs->data_norm = data_norm;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+/* V4L2 helper functions */
+
+static int vino_find_data_format(__u32 pixelformat)
+{
+       int i;
+
+       for (i = 0; i < VINO_DATA_FMT_COUNT; i++) {
+               if (vino_data_formats[i].pixelformat == pixelformat)
+                       return i;
+       }
+
+       return VINO_DATA_FMT_NONE;
+}
+
+static int vino_enum_data_norm(struct vino_channel_settings *vcs, __u32 index)
+{
+       int data_norm = VINO_DATA_NORM_NONE;
+
+       spin_lock(&vino_drvdata->input_lock);
+       switch(vcs->input) {
+       case VINO_INPUT_COMPOSITE:
+       case VINO_INPUT_SVIDEO:
+               if (index == 0) {
+                       data_norm = VINO_DATA_NORM_PAL;
+               } else if (index == 1) {
+                       data_norm = VINO_DATA_NORM_NTSC;
+               } else if (index == 2) {
+                       data_norm = VINO_DATA_NORM_SECAM;
+               }
+               break;
+       case VINO_INPUT_D1:
+               if (index == 0) {
+                       data_norm = VINO_DATA_NORM_D1;
+               }
+               break;
+       }
+       spin_unlock(&vino_drvdata->input_lock);
+
+       return data_norm;
+}
+
+static int vino_enum_input(struct vino_channel_settings *vcs, __u32 index)
+{
+       int input = VINO_INPUT_NONE;
+
+       spin_lock(&vino_drvdata->input_lock);
+       if (vino_drvdata->decoder.driver && vino_drvdata->camera.driver) {
+               switch (index) {
+               case 0:
+                       input = VINO_INPUT_COMPOSITE;
+                       break;
+               case 1:
+                       input = VINO_INPUT_SVIDEO;
+                       break;
+               case 2:
+                       input = VINO_INPUT_D1;
+                       break;
+               }
+       } else if (vino_drvdata->decoder.driver) {
+               switch (index) {
+               case 0:
+                       input = VINO_INPUT_COMPOSITE;
+                       break;
+               case 1:
+                       input = VINO_INPUT_SVIDEO;
+                       break;
+               }
+       } else if (vino_drvdata->camera.driver) {
+               switch (index) {
+               case 0:
+                       input = VINO_INPUT_D1;
+                       break;
+               }
+       }
+       spin_unlock(&vino_drvdata->input_lock);
+
+       return input;
+}
+
+/* execute with input_lock locked */
+static __u32 vino_find_input_index(struct vino_channel_settings *vcs)
+{
+       __u32 index = 0;
+       // FIXME: detect when no inputs available
+
+       if (vino_drvdata->decoder.driver && vino_drvdata->camera.driver) {
+               switch (vcs->input) {
+               case VINO_INPUT_COMPOSITE:
+                       index = 0;
+                       break;
+               case VINO_INPUT_SVIDEO:
+                       index = 1;
+                       break;
+               case VINO_INPUT_D1:
+                       index = 2;
+                       break;
+               }
+       } else if (vino_drvdata->decoder.driver) {
+               switch (vcs->input) {
+               case VINO_INPUT_COMPOSITE:
+                       index = 0;
+                       break;
+               case VINO_INPUT_SVIDEO:
+                       index = 1;
+                       break;
+               }
+       } else if (vino_drvdata->camera.driver) {
+               switch (vcs->input) {
+               case VINO_INPUT_D1:
+                       index = 0;
+                       break;
+               }
+       }
+
+       return index;
+}
+
+/* V4L2 ioctls */
+
+static void vino_v4l2_querycap(struct v4l2_capability *cap)
+{
+       memset(cap, 0, sizeof(struct v4l2_capability));
+
+       strcpy(cap->driver, vino_driver_name);
+       strcpy(cap->card, vino_driver_description);
+       strcpy(cap->bus_info, vino_bus_name);
+       cap->version = VINO_VERSION_CODE;
+       cap->capabilities =
+               V4L2_CAP_VIDEO_CAPTURE |
+               V4L2_CAP_STREAMING;
+       // V4L2_CAP_OVERLAY, V4L2_CAP_READWRITE
+}
+
+static int vino_v4l2_enuminput(struct vino_channel_settings *vcs,
+                              struct v4l2_input *i)
+{
+       __u32 index = i->index;
+       int input;
+       dprintk("requested index = %d\n", index);
+
+       input = vino_enum_input(vcs, index);
+       if (input == VINO_INPUT_NONE)
+               return -EINVAL;
+
+       memset(i, 0, sizeof(struct v4l2_input));
+
+       i->index = index;
+       i->type = V4L2_INPUT_TYPE_CAMERA;
+       i->std = vino_inputs[input].std;
+       strcpy(i->name, vino_inputs[input].name);
+
+       if ((input == VINO_INPUT_COMPOSITE)
+           || (input == VINO_INPUT_SVIDEO)) {
+               struct saa7191_status status;
+               i2c_decoder_command(DECODER_SAA7191_GET_STATUS, &status);
+               i->status |= status.signal ? 0 : V4L2_IN_ST_NO_SIGNAL;
+               i->status |= status.color ? 0 : V4L2_IN_ST_NO_COLOR;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_g_input(struct vino_channel_settings *vcs,
+                            struct v4l2_input *i)
+{
+       __u32 index;
+       int input;
+
+       spin_lock(&vino_drvdata->input_lock);
+       input = vcs->input;
+       index = vino_find_input_index(vcs);
+       spin_unlock(&vino_drvdata->input_lock);
+
+       dprintk("input = %d\n", input);
+
+       if (input == VINO_INPUT_NONE) {
+               return -EINVAL;
+       }
+
+       memset(i, 0, sizeof(struct v4l2_input));
+
+       i->index = index;
+       i->type = V4L2_INPUT_TYPE_CAMERA;
+       i->std = vino_inputs[input].std;
+       strcpy(i->name, vino_inputs[input].name);
+
+       return 0;
+}
+
+static int vino_v4l2_s_input(struct vino_channel_settings *vcs,
+                            struct v4l2_input *i)
+{
+       int input;
+       dprintk("requested input = %d\n", i->index);
+
+       input = vino_enum_input(vcs, i->index);
+       if (input == VINO_INPUT_NONE)
+               return -EINVAL;
+
+       return vino_set_input(vcs, input);
+}
+
+static int vino_v4l2_enumstd(struct vino_channel_settings *vcs,
+                            struct v4l2_standard *s)
+{
+       int index = s->index;
+       int data_norm = vino_enum_data_norm(vcs, index);
+       dprintk("standard index = %d\n", index);
+
+       if (data_norm == VINO_DATA_NORM_NONE)
+               return -EINVAL;
+
+       dprintk("standard name = %s\n",
+              vino_data_norms[data_norm].description);
+
+       memset(s, 0, sizeof(struct v4l2_standard));
+       s->index = index;
+
+       s->id = vino_data_norms[data_norm].std;
+       s->frameperiod.numerator = 1;
+       s->frameperiod.denominator =
+               vino_data_norms[data_norm].fps_max;
+       s->framelines =
+               vino_data_norms[data_norm].framelines;
+       strcpy(s->name,
+              vino_data_norms[data_norm].description);
+
+       return 0;
+}
+
+static int vino_v4l2_g_std(struct vino_channel_settings *vcs,
+                          v4l2_std_id *std)
+{
+       spin_lock(&vino_drvdata->input_lock);
+       dprintk("current standard = %d\n", vcs->data_norm);
+       *std = vino_data_norms[vcs->data_norm].std;
+       spin_unlock(&vino_drvdata->input_lock);
+
+       return 0;
+}
+
+static int vino_v4l2_s_std(struct vino_channel_settings *vcs,
+                          v4l2_std_id *std)
+{
+       int ret = 0;
+
+       spin_lock(&vino_drvdata->input_lock);
+
+       /* check if the standard is valid for the current input */
+       if (vino_is_input_owner(vcs)
+           && (vino_inputs[vcs->input].std & (*std))) {
+               dprintk("standard accepted\n");
+
+               /* change the video norm for SAA7191
+                * and accept NTSC for D1 (do nothing) */
+
+               if (vcs->input == VINO_INPUT_D1)
+                       goto out;
+
+               if ((*std) & V4L2_STD_PAL) {
+                       vino_set_data_norm(vcs, VINO_DATA_NORM_PAL);
+                       vcs->data_norm = VINO_DATA_NORM_PAL;
+               } else if ((*std) & V4L2_STD_NTSC) {
+                       vino_set_data_norm(vcs, VINO_DATA_NORM_NTSC);
+                       vcs->data_norm = VINO_DATA_NORM_NTSC;
+               } else if ((*std) & V4L2_STD_SECAM) {
+                       vino_set_data_norm(vcs, VINO_DATA_NORM_SECAM);
+                       vcs->data_norm = VINO_DATA_NORM_SECAM;
+               } else {
+                       ret = -EINVAL;
+               }
+       } else {
+               ret = -EINVAL;
+       }
+
+out:
+       spin_unlock(&vino_drvdata->input_lock);
+
+       return ret;
+}
+
+static int vino_v4l2_enum_fmt(struct vino_channel_settings *vcs,
+                             struct v4l2_fmtdesc *fd)
+{
+       enum v4l2_buf_type type = fd->type;
+       int index = fd->index;
+       dprintk("format index = %d\n", index);
+
+       switch (fd->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE:
+               if ((fd->index < 0) ||
+                   (fd->index >= VINO_DATA_FMT_COUNT))
+                       return -EINVAL;
+               dprintk("format name = %s\n",
+                      vino_data_formats[index].description);
+
+               memset(fd, 0, sizeof(struct v4l2_fmtdesc));
+               fd->index = index;
+               fd->type = type;
+               fd->pixelformat = vino_data_formats[index].pixelformat;
+               strcpy(fd->description, vino_data_formats[index].description);
+               break;
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_try_fmt(struct vino_channel_settings *vcs,
+                            struct v4l2_format *f)
+{
+       struct vino_channel_settings tempvcs;
+
+       switch (f->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE: {
+               struct v4l2_pix_format *pf = &f->fmt.pix;
+
+               dprintk("requested: w = %d, h = %d\n",
+                      pf->width, pf->height);
+
+               spin_lock(&vino_drvdata->input_lock);
+               memcpy(&tempvcs, vcs, sizeof(struct vino_channel_settings));
+               spin_unlock(&vino_drvdata->input_lock);
+
+               tempvcs.data_format = vino_find_data_format(pf->pixelformat);
+               if (tempvcs.data_format == VINO_DATA_FMT_NONE) {
+                       tempvcs.data_format = VINO_DATA_FMT_RGB32;
+                       pf->pixelformat =
+                               vino_data_formats[tempvcs.data_format].
+                               pixelformat;
+               }
+
+               /* data format must be set before clipping/scaling */
+               vino_set_scaling(&tempvcs, pf->width, pf->height);
+
+               dprintk("data format = %s\n",
+                      vino_data_formats[tempvcs.data_format].description);
+
+               pf->width = (tempvcs.clipping.right - tempvcs.clipping.left) /
+                       tempvcs.decimation;
+               pf->height = (tempvcs.clipping.bottom - tempvcs.clipping.top) /
+                       tempvcs.decimation;
+
+               pf->field = V4L2_FIELD_INTERLACED;
+               pf->bytesperline = tempvcs.line_size;
+               pf->sizeimage = tempvcs.line_size *
+                       (tempvcs.clipping.bottom - tempvcs.clipping.top) /
+                       tempvcs.decimation;
+               pf->colorspace =
+                       vino_data_formats[tempvcs.data_format].colorspace;
+
+               pf->priv = 0;
+               break;
+       }
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_g_fmt(struct vino_channel_settings *vcs,
+                          struct v4l2_format *f)
+{
+       switch (f->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE: {
+               struct v4l2_pix_format *pf = &f->fmt.pix;
+               spin_lock(&vino_drvdata->input_lock);
+
+               pf->width = (vcs->clipping.right - vcs->clipping.left) /
+                       vcs->decimation;
+               pf->height = (vcs->clipping.bottom - vcs->clipping.top) /
+                       vcs->decimation;
+               pf->pixelformat =
+                       vino_data_formats[vcs->data_format].pixelformat;
+
+               pf->field = V4L2_FIELD_INTERLACED;
+               pf->bytesperline = vcs->line_size;
+               pf->sizeimage = vcs->line_size *
+                       (vcs->clipping.bottom - vcs->clipping.top) /
+                       vcs->decimation;
+               pf->colorspace =
+                       vino_data_formats[vcs->data_format].colorspace;
+
+               pf->priv = 0;
+
+               spin_unlock(&vino_drvdata->input_lock);
+               break;
+       }
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_s_fmt(struct vino_channel_settings *vcs,
+                          struct v4l2_format *f)
+{
+       int data_format;
+
+       switch (f->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE: {
+               struct v4l2_pix_format *pf = &f->fmt.pix;
+               spin_lock(&vino_drvdata->input_lock);
+
+               if (!vino_is_input_owner(vcs)) {
+                       spin_unlock(&vino_drvdata->input_lock);
+                       return -EINVAL;
+               }
+
+               data_format = vino_find_data_format(pf->pixelformat);
+               if (data_format == VINO_DATA_FMT_NONE) {
+                       vcs->data_format = VINO_DATA_FMT_RGB32;
+                       pf->pixelformat =
+                               vino_data_formats[vcs->data_format].
+                               pixelformat;
+               } else {
+                       vcs->data_format = data_format;
+               }
+
+               /* data format must be set before clipping/scaling */
+               vino_set_scaling(vcs, pf->width, pf->height);
+
+               dprintk("data format = %s\n",
+                      vino_data_formats[vcs->data_format].description);
+
+               pf->width = vcs->clipping.right - vcs->clipping.left;
+               pf->height = vcs->clipping.bottom - vcs->clipping.top;
+
+               pf->field = V4L2_FIELD_INTERLACED;
+               pf->bytesperline = vcs->line_size;
+               pf->sizeimage = vcs->line_size *
+                       (vcs->clipping.bottom - vcs->clipping.top) /
+                       vcs->decimation;
+               pf->colorspace =
+                       vino_data_formats[vcs->data_format].colorspace;
+
+               pf->priv = 0;
+
+               spin_unlock(&vino_drvdata->input_lock);
+               break;
+       }
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_cropcap(struct vino_channel_settings *vcs,
+                            struct v4l2_cropcap *ccap)
+{
+       const struct vino_data_norm *norm;
+
+       switch (ccap->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE:
+               spin_lock(&vino_drvdata->input_lock);
+               norm = &vino_data_norms[vcs->data_norm];
+               spin_unlock(&vino_drvdata->input_lock);
+
+               ccap->bounds.left = 0;
+               ccap->bounds.top = 0;
+               ccap->bounds.width = norm->width;
+               ccap->bounds.height = norm->height;
+               memcpy(&ccap->defrect, &ccap->bounds,
+                      sizeof(struct v4l2_rect));
+
+               ccap->pixelaspect.numerator = 1;
+               ccap->pixelaspect.denominator = 1;
+               break;
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_g_crop(struct vino_channel_settings *vcs,
+                           struct v4l2_crop *c)
+{
+       switch (c->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE:
+               spin_lock(&vino_drvdata->input_lock);
+
+               c->c.left = vcs->clipping.left;
+               c->c.top = vcs->clipping.top;
+               c->c.width = vcs->clipping.right - vcs->clipping.left;
+               c->c.height = vcs->clipping.bottom - vcs->clipping.top;
+
+               spin_unlock(&vino_drvdata->input_lock);
+               break;
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_s_crop(struct vino_channel_settings *vcs,
+                           struct v4l2_crop *c)
+{
+       switch (c->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE:
+               spin_lock(&vino_drvdata->input_lock);
+
+               if (!vino_is_input_owner(vcs)) {
+                       spin_unlock(&vino_drvdata->input_lock);
+                       return -EINVAL;
+               }
+               vino_set_clipping(vcs, c->c.left, c->c.top,
+                                 c->c.width, c->c.height);
+
+               spin_unlock(&vino_drvdata->input_lock);
+               break;
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_g_parm(struct vino_channel_settings *vcs,
+                           struct v4l2_streamparm *sp)
+{
+       switch (sp->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE: {
+               struct v4l2_captureparm *cp = &sp->parm.capture;
+               memset(cp, 0, sizeof(struct v4l2_captureparm));
+
+               cp->capability = V4L2_CAP_TIMEPERFRAME;
+               cp->timeperframe.numerator = 1;
+
+               spin_lock(&vino_drvdata->input_lock);
+               cp->timeperframe.denominator = vcs->fps;
+               spin_unlock(&vino_drvdata->input_lock);
+
+               // TODO: cp->readbuffers = xxx;
+               break;
+       }
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_s_parm(struct vino_channel_settings *vcs,
+                           struct v4l2_streamparm *sp)
+{
+       switch (sp->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE: {
+               struct v4l2_captureparm *cp = &sp->parm.capture;
+
+               spin_lock(&vino_drvdata->input_lock);
+               if (!vino_is_input_owner(vcs)) {
+                       spin_unlock(&vino_drvdata->input_lock);
+                       return -EINVAL;
+               }
+
+               if ((cp->timeperframe.numerator == 0) ||
+                   (cp->timeperframe.denominator == 0)) {
+                       /* reset framerate */
+                       vino_set_default_framerate(vcs);
+               } else {
+                       vino_set_framerate(vcs, cp->timeperframe.denominator /
+                                          cp->timeperframe.numerator);
+               }
+               spin_unlock(&vino_drvdata->input_lock);
+
+               // TODO: set buffers according to cp->readbuffers
+               break;
+       }
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_reqbufs(struct vino_channel_settings *vcs,
+                            struct v4l2_requestbuffers *rb)
+{
+       if (vcs->reading)
+               return -EBUSY;
+
+       switch (rb->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE: {
+               // TODO: check queue type
+               if (rb->memory != V4L2_MEMORY_MMAP) {
+                       dprintk("type not mmap\n");
+                       return -EINVAL;
+               }
+
+               if (vino_is_capturing(vcs)) {
+                       dprintk("busy, capturing\n");
+                       return -EBUSY;
+               }
+
+               dprintk("count = %d\n", rb->count);
+               if (rb->count > 0) {
+                       if (vino_queue_has_mapped_buffers(&vcs->fb_queue)) {
+                               dprintk("busy, buffers still mapped\n");
+                               return -EBUSY;
+                       } else {
+                               vino_queue_free(&vcs->fb_queue);
+                               vino_queue_init(&vcs->fb_queue, &rb->count);
+                       }
+               } else {
+                       vino_capture_stop(vcs);
+                       vino_queue_free(&vcs->fb_queue);
+               }
+               break;
+       }
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static void vino_v4l2_get_buffer_status(struct vino_channel_settings *vcs,
+                                       struct vino_framebuffer *fb,
+                                       struct v4l2_buffer *b)
+{
+       if (vino_queue_outgoing_contains(&vcs->fb_queue,
+                                        fb->id)) {
+               b->flags &= ~V4L2_BUF_FLAG_QUEUED;
+               b->flags |= V4L2_BUF_FLAG_DONE;
+       } else if (vino_queue_incoming_contains(&vcs->fb_queue,
+                                      fb->id)) {
+               b->flags &= ~V4L2_BUF_FLAG_DONE;
+               b->flags |= V4L2_BUF_FLAG_QUEUED;
+       } else {
+               b->flags &= ~(V4L2_BUF_FLAG_DONE |
+                             V4L2_BUF_FLAG_QUEUED);
+       }
+
+       b->flags &= ~(V4L2_BUF_FLAG_TIMECODE);
+
+       if (fb->map_count > 0)
+               b->flags |= V4L2_BUF_FLAG_MAPPED;
+
+       b->index = fb->id;
+       b->memory = (vcs->fb_queue.type == VINO_MEMORY_MMAP) ?
+               V4L2_MEMORY_MMAP : V4L2_MEMORY_USERPTR;
+       b->m.offset = fb->offset;
+       b->bytesused = fb->data_size;
+       b->length = fb->size;
+       b->field = V4L2_FIELD_INTERLACED;
+       b->sequence = fb->frame_counter;
+       memcpy(&b->timestamp, &fb->timestamp,
+              sizeof(struct timeval));
+       // b->input ?
+
+       dprintk("buffer %d: length = %d, bytesused = %d, offset = %d\n",
+               fb->id, fb->size, fb->data_size, fb->offset);
+}
+
+static int vino_v4l2_querybuf(struct vino_channel_settings *vcs,
+                             struct v4l2_buffer *b)
+{
+       if (vcs->reading)
+               return -EBUSY;
+
+       switch (b->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE: {
+               struct vino_framebuffer *fb;
+
+               // TODO: check queue type
+               if (b->index >= vino_queue_get_length(&vcs->fb_queue)) {
+                       dprintk("invalid index = %d\n",
+                              b->index);
+                       return -EINVAL;
+               }
+
+               fb = vino_queue_get_buffer(&vcs->fb_queue,
+                                          b->index);
+               if (fb == NULL) {
+                       dprintk("vino_queue_get_buffer() failed");
+                       return -EINVAL;
+               }
+
+               vino_v4l2_get_buffer_status(vcs, fb, b);
+               break;
+       }
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_qbuf(struct vino_channel_settings *vcs,
+                         struct v4l2_buffer *b)
+{
+       if (vcs->reading)
+               return -EBUSY;
+
+       switch (b->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE: {
+               struct vino_framebuffer *fb;
+               int ret;
+
+               // TODO: check queue type
+               if (b->memory != V4L2_MEMORY_MMAP) {
+                       dprintk("type not mmap\n");
+                       return -EINVAL;
+               }
+
+               fb = vino_capture_enqueue(vcs, b->index);
+               if (fb == NULL)
+                       return -EINVAL;
+
+               vino_v4l2_get_buffer_status(vcs, fb, b);
+
+               if (vcs->streaming) {
+                       ret = vino_capture_next(vcs, 1);
+                       if (ret)
+                               return ret;
+               }
+               break;
+       }
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_dqbuf(struct vino_channel_settings *vcs,
+                          struct v4l2_buffer *b,
+                          unsigned int nonblocking)
+{
+       if (vcs->reading)
+               return -EBUSY;
+
+       switch (b->type) {
+       case V4L2_BUF_TYPE_VIDEO_CAPTURE: {
+               struct vino_framebuffer *fb;
+               unsigned int incoming, outgoing;
+               int err;
+
+               // TODO: check queue type
+
+               err = vino_queue_get_incoming(&vcs->fb_queue, &incoming);
+               if (err) {
+                       dprintk("vino_queue_get_incoming() failed\n");
+                       return -EIO;
+               }
+               err = vino_queue_get_outgoing(&vcs->fb_queue, &outgoing);
+               if (err) {
+                       dprintk("vino_queue_get_outgoing() failed\n");
+                       return -EIO;
+               }
+
+               dprintk("incoming = %d, outgoing = %d\n", incoming, outgoing);
+
+               if (outgoing == 0) {
+                       if (incoming == 0) {
+                               dprintk("no incoming or outgoing buffers\n");
+                               return -EINVAL;
+                       }
+                       if (nonblocking) {
+                               dprintk("non-blocking I/O was selected and "
+                                       "there are no buffers to dequeue\n");
+                               return -EAGAIN;
+                       }
+
+                       err = vino_wait_for_frame(vcs);
+                       if (err) {
+                               err = vino_wait_for_frame(vcs);
+                               if (err) {
+                                       /* interrupted */
+                                       vino_capture_failed(vcs);
+                                       return -EIO;
+                               }
+                       }
+               }
+
+               fb = vino_queue_remove(&vcs->fb_queue, &b->index);
+               if (fb == NULL) {
+                       dprintk("vino_queue_remove() failed\n");
+                       return -EINVAL;
+               }
+
+               err = vino_check_buffer(vcs, fb);
+               if (err)
+                       return -EIO;
+
+               vino_v4l2_get_buffer_status(vcs, fb, b);
+               break;
+       }
+       case V4L2_BUF_TYPE_VIDEO_OVERLAY:
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_streamon(struct vino_channel_settings *vcs)
+{
+       unsigned int incoming;
+       int ret;
+       if (vcs->reading)
+               return -EBUSY;
+
+       if (vcs->streaming)
+               return 0;
+
+       // TODO: check queue type
+
+       if (vino_queue_get_length(&vcs->fb_queue) < 1) {
+               dprintk("no buffers allocated\n");
+               return -EINVAL;
+       }
+
+       ret = vino_queue_get_incoming(&vcs->fb_queue, &incoming);
+       if (ret) {
+               dprintk("vino_queue_get_incoming() failed\n");
+               return -EINVAL;
+       }
+
+       vcs->streaming = 1;
+
+       if (incoming > 0) {
+               ret = vino_capture_next(vcs, 1);
+               if (ret) {
+                       vcs->streaming = 0;
+
+                       dprintk("couldn't start capture\n");
+                       return -EINVAL;
+               }
+       }
+
+       return 0;
+}
+
+static int vino_v4l2_streamoff(struct vino_channel_settings *vcs)
+{
+       if (vcs->reading)
+               return -EBUSY;
+
+       if (!vcs->streaming)
+               return 0;
+
+       vino_capture_stop(vcs);
+       vcs->streaming = 0;
+
+       return 0;
+}
+
+static int vino_v4l2_queryctrl(struct vino_channel_settings *vcs,
+                              struct v4l2_queryctrl *queryctrl)
+{
+       int i;
+       int err = 0;
+
+       spin_lock(&vino_drvdata->input_lock);
+
+       switch (vcs->input) {
+       case VINO_INPUT_D1:
+               for (i = 0; i < VINO_INDYCAM_V4L2_CONTROL_COUNT; i++) {
+                       if (vino_indycam_v4l2_controls[i].id ==
+                           queryctrl->id) {
+                               memcpy(queryctrl,
+                                      &vino_indycam_v4l2_controls[i],
+                                      sizeof(struct v4l2_queryctrl));
+                               goto found;
+                       }
+               }
+
+               err =  -EINVAL;
+               break;
+       case VINO_INPUT_COMPOSITE:
+       case VINO_INPUT_SVIDEO:
+               for (i = 0; i < VINO_SAA7191_V4L2_CONTROL_COUNT; i++) {
+                       if (vino_saa7191_v4l2_controls[i].id ==
+                           queryctrl->id) {
+                               memcpy(queryctrl,
+                                      &vino_saa7191_v4l2_controls[i],
+                                      sizeof(struct v4l2_queryctrl));
+                               goto found;
+                       }
+               }
+
+               err =  -EINVAL;
+               break;
+       default:
+               err =  -EINVAL;
+       }
+
+ found:
+       spin_unlock(&vino_drvdata->input_lock);
+
+       return err;
+}
+
+static int vino_v4l2_g_ctrl(struct vino_channel_settings *vcs,
+                           struct v4l2_control *control)
+{
+       struct indycam_control indycam_ctrl;
+       struct saa7191_control saa7191_ctrl;
+       int err = 0;
+
+       spin_lock(&vino_drvdata->input_lock);
+
+       switch (vcs->input) {
+       case VINO_INPUT_D1:
+               i2c_camera_command(DECODER_INDYCAM_GET_CONTROLS,
+                                  &indycam_ctrl);
+
+               switch(control->id) {
+               case V4L2_CID_AUTOGAIN:
+                       control->value = indycam_ctrl.agc;
+                       break;
+               case V4L2_CID_AUTO_WHITE_BALANCE:
+                       control->value = indycam_ctrl.awb;
+                       break;
+               case V4L2_CID_GAIN:
+                       control->value = indycam_ctrl.gain;
+                       break;
+               case V4L2_CID_PRIVATE_BASE:
+                       control->value = indycam_ctrl.red_saturation;
+                       break;
+               case V4L2_CID_PRIVATE_BASE + 1:
+                       control->value = indycam_ctrl.blue_saturation;
+                       break;
+               case V4L2_CID_RED_BALANCE:
+                       control->value = indycam_ctrl.red_balance;
+                       break;
+               case V4L2_CID_BLUE_BALANCE:
+                       control->value = indycam_ctrl.blue_balance;
+                       break;
+               case V4L2_CID_EXPOSURE:
+                       control->value = indycam_ctrl.shutter;
+                       break;
+               case V4L2_CID_GAMMA:
+                       control->value = indycam_ctrl.gamma;
+                       break;
+               default:
+                       err = -EINVAL;
+               }
+               break;
+       case VINO_INPUT_COMPOSITE:
+       case VINO_INPUT_SVIDEO:
+               i2c_decoder_command(DECODER_SAA7191_GET_CONTROLS,
+                                  &saa7191_ctrl);
+
+               switch(control->id) {
+               case V4L2_CID_HUE:
+                       control->value = saa7191_ctrl.hue;
+                       break;
+               case V4L2_CID_PRIVATE_BASE:
+                       control->value = saa7191_ctrl.vtrc;
+                       break;
+               default:
+                       err = -EINVAL;
+               }
+               break;
+       default:
+               err =  -EINVAL;
+       }
+
+       spin_unlock(&vino_drvdata->input_lock);
+
+       return err;
+}
+
+static int vino_v4l2_s_ctrl(struct vino_channel_settings *vcs,
+                           struct v4l2_control *control)
+{
+       struct indycam_control indycam_ctrl;
+       struct saa7191_control saa7191_ctrl;
+       int i;
+       int err = 0;
+
+       spin_lock(&vino_drvdata->input_lock);
+
+       switch (vcs->input) {
+       case VINO_INPUT_D1:
+               for (i = 0; i < VINO_INDYCAM_V4L2_CONTROL_COUNT; i++) {
+                       if (vino_indycam_v4l2_controls[i].id ==
+                           control->id) {
+                               if ((control->value >=
+                                    vino_indycam_v4l2_controls[i].minimum)
+                                   && (control->value <=
+                                       vino_indycam_v4l2_controls[i].
+                                       maximum)) {
+                                       goto ok1;
+                               } else {
+                                       err = -ERANGE;
+                                       goto error;
+                               }
+                       }
+               }
+               err = -EINVAL;
+               goto error;
+
+ok1:
+               indycam_ctrl.agc = INDYCAM_VALUE_UNCHANGED;
+               indycam_ctrl.awb = INDYCAM_VALUE_UNCHANGED;
+               indycam_ctrl.shutter = INDYCAM_VALUE_UNCHANGED;
+               indycam_ctrl.gain = INDYCAM_VALUE_UNCHANGED;
+               indycam_ctrl.red_balance = INDYCAM_VALUE_UNCHANGED;
+               indycam_ctrl.blue_balance = INDYCAM_VALUE_UNCHANGED;
+               indycam_ctrl.red_saturation = INDYCAM_VALUE_UNCHANGED;
+               indycam_ctrl.blue_saturation = INDYCAM_VALUE_UNCHANGED;
+               indycam_ctrl.gamma = INDYCAM_VALUE_UNCHANGED;
+
+               switch(control->id) {
+               case V4L2_CID_AUTOGAIN:
+                       indycam_ctrl.agc = control->value;
+                       break;
+               case V4L2_CID_AUTO_WHITE_BALANCE:
+                       indycam_ctrl.awb = control->value;
+                       break;
+               case V4L2_CID_GAIN:
+                       indycam_ctrl.gain = control->value;
+                       break;
+               case V4L2_CID_PRIVATE_BASE:
+                       indycam_ctrl.red_saturation = control->value;
+                       break;
+               case V4L2_CID_PRIVATE_BASE + 1:
+                       indycam_ctrl.blue_saturation = control->value;
+                       break;
+               case V4L2_CID_RED_BALANCE:
+                       indycam_ctrl.red_balance = control->value;
+                       break;
+               case V4L2_CID_BLUE_BALANCE:
+                       indycam_ctrl.blue_balance = control->value;
+                       break;
+               case V4L2_CID_EXPOSURE:
+                       indycam_ctrl.shutter = control->value;
+                       break;
+               case V4L2_CID_GAMMA:
+                       indycam_ctrl.gamma = control->value;
+                       break;
+               default:
+                       err =  -EINVAL;
+               }
+
+               if (!err)
+                       i2c_camera_command(DECODER_INDYCAM_SET_CONTROLS,
+                                          &indycam_ctrl);
+               break;
+       case VINO_INPUT_COMPOSITE:
+       case VINO_INPUT_SVIDEO:
+               for (i = 0; i < VINO_SAA7191_V4L2_CONTROL_COUNT; i++) {
+                       if (vino_saa7191_v4l2_controls[i].id ==
+                           control->id) {
+                               if ((control->value >=
+                                    vino_saa7191_v4l2_controls[i].minimum)
+                                   && (control->value <=
+                                       vino_saa7191_v4l2_controls[i].
+                                       maximum)) {
+                                       goto ok2;
+                               } else {
+                                       err = -ERANGE;
+                                       goto error;
+                               }
+                       }
+               }
+               err = -EINVAL;
+               goto error;
+
+ok2:
+               saa7191_ctrl.hue = SAA7191_VALUE_UNCHANGED;
+               saa7191_ctrl.vtrc = SAA7191_VALUE_UNCHANGED;
+
+               switch(control->id) {
+               case V4L2_CID_HUE:
+                       saa7191_ctrl.hue = control->value;
+                       break;
+               case V4L2_CID_PRIVATE_BASE:
+                       saa7191_ctrl.vtrc = control->value;
+                       break;
+               default:
+                       err =  -EINVAL;
+               }
+
+               if (!err)
+                       i2c_decoder_command(DECODER_SAA7191_SET_CONTROLS,
+                                           &saa7191_ctrl);
+               break;
+       default:
+               err =  -EINVAL;
+       }
+
+error:
+       spin_unlock(&vino_drvdata->input_lock);
+
+       return err;
+}
+
+/* File operations */
+
+static int vino_open(struct inode *inode, struct file *file)
+{
+       struct video_device *dev = video_devdata(file);
+       struct vino_channel_settings *vcs = video_get_drvdata(dev);
+       int ret = 0;
+       dprintk("open(): channel = %c\n",
+              (vcs->channel == VINO_CHANNEL_A) ? 'A' : 'B');
+
+       down(&vcs->sem);
+
+       if (vcs->users) {
+               dprintk("open(): driver busy\n");
+               ret = -EBUSY;
+               goto out;
+       }
+
+       ret = vino_acquire_input(vcs);
+       if (ret) {
+               dprintk("open(): vino_acquire_input() failed\n");
+               goto out;
+       }
+
+       vcs->users++;
+
+ out:
+       up(&vcs->sem);
+
+       dprintk("open(): %s!\n", ret ? "failed" : "complete");
+
+       return ret;
+}
+
+static int vino_close(struct inode *inode, struct file *file)
+{
+       struct video_device *dev = video_devdata(file);
+       struct vino_channel_settings *vcs = video_get_drvdata(dev);
+       dprintk("close():\n");
+
+       down(&vcs->sem);
+
+       vcs->users--;
+
+       if (!vcs->users) {
+               vino_release_input(vcs);
+
+               /* stop DMA and free buffers */
+               vino_capture_stop(vcs);
+               vino_queue_free(&vcs->fb_queue);
+       }
+
+       up(&vcs->sem);
+
+       return 0;
+}
+
+static void vino_vm_open(struct vm_area_struct *vma)
+{
+       struct vino_framebuffer *fb = vma->vm_private_data;
+
+       fb->map_count++;
+       dprintk("vino_vm_open(): count = %d\n", fb->map_count);
+}
+
+static void vino_vm_close(struct vm_area_struct *vma)
+{
+       struct vino_framebuffer *fb = vma->vm_private_data;
+
+       fb->map_count--;
+       dprintk("vino_vm_close(): count = %d\n", fb->map_count);
+}
+
+static struct vm_operations_struct vino_vm_ops = {
+       .open   = vino_vm_open,
+       .close  = vino_vm_close,
+};
+
+static int vino_mmap(struct file *file, struct vm_area_struct *vma)
+{
+       struct video_device *dev = video_devdata(file);
+       struct vino_channel_settings *vcs = video_get_drvdata(dev);
+
+       unsigned long start = vma->vm_start;
+       unsigned long size = vma->vm_end - vma->vm_start;
+       unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
+
+       struct vino_framebuffer *fb = NULL;
+       unsigned int i, length;
+       int ret = 0;
+
+       dprintk("mmap():\n");
+
+       // TODO: reject mmap if already mapped
+
+       if (down_interruptible(&vcs->sem))
+               return -EINTR;
+
+       if (vcs->reading) {
+               ret = -EBUSY;
+               goto out;
+       }
+
+       // TODO: check queue type
+
+       if (!(vma->vm_flags & VM_WRITE)) {
+               dprintk("mmap(): app bug: PROT_WRITE please\n");
+               ret = -EINVAL;
+               goto out;
+       }
+       if (!(vma->vm_flags & VM_SHARED)) {
+               dprintk("mmap(): app bug: MAP_SHARED please\n");
+               ret = -EINVAL;
+               goto out;
+       }
+
+       /* find the correct buffer using offset */
+       length = vino_queue_get_length(&vcs->fb_queue);
+       if (length == 0) {
+               dprintk("mmap(): queue not initialized\n");
+               ret = -EINVAL;
+               goto out;
+       }
+
+       for (i = 0; i < length; i++) {
+               fb = vino_queue_get_buffer(&vcs->fb_queue, i);
+               if (fb == NULL) {
+                       dprintk("mmap(): vino_queue_get_buffer() failed\n");
+                       ret = -EINVAL;
+                       goto out;
+               }
+
+               if (fb->offset == offset)
+                       goto found;
+       }
+
+       dprintk("mmap(): invalid offset = %lu\n", offset);
+       ret = -EINVAL;
+       goto out;
+
+found:
+       dprintk("mmap(): buffer = %d\n", i);
+
+       if (size > (fb->desc_table.page_count * PAGE_SIZE)) {
+               dprintk("mmap(): failed: size = %lu > %lu\n",
+                       size, fb->desc_table.page_count * PAGE_SIZE);
+               ret = -EINVAL;
+               goto out;
+       }
+
+       for (i = 0; i < fb->desc_table.page_count; i++) {
+               unsigned long pfn =
+                       virt_to_phys((void *)fb->desc_table.virtual[i]) >>
+                       PAGE_SHIFT;
+
+               if (size < PAGE_SIZE)
+                       break;
+
+               // protection was: PAGE_READONLY
+               if (remap_pfn_range(vma, start, pfn, PAGE_SIZE,
+                                   vma->vm_page_prot)) {
+                       dprintk("mmap(): remap_pfn_range() failed\n");
+                       ret = -EAGAIN;
+                       goto out;
+               }
+
+               start += PAGE_SIZE;
+               size -= PAGE_SIZE;
+       }
+
+       fb->map_count = 1;
+
+       vma->vm_flags |= VM_DONTEXPAND | VM_RESERVED;
+       vma->vm_flags &= ~VM_IO;
+       vma->vm_private_data = fb;
+       vma->vm_file = file;
+       vma->vm_ops = &vino_vm_ops;
+
+out:
+       up(&vcs->sem);
+
+       return ret;
+}
+
+static unsigned int vino_poll(struct file *file, poll_table *pt)
+{
+       struct video_device *dev = video_devdata(file);
+       struct vino_channel_settings *vcs = video_get_drvdata(dev);
+       unsigned int outgoing;
+       unsigned int ret = 0;
+
+       // lock mutex (?)
+       // TODO: this has to be corrected for different read modes
+
+       dprintk("poll():\n");
+
+       if (vino_queue_get_outgoing(&vcs->fb_queue, &outgoing)) {
+               dprintk("poll(): vino_queue_get_outgoing() failed\n");
+               ret = POLLERR;
+               goto error;
+       }
+       if (outgoing > 0)
+               goto over;
+
+       poll_wait(file, &vcs->fb_queue.frame_wait_queue, pt);
+
+       if (vino_queue_get_outgoing(&vcs->fb_queue, &outgoing)) {
+               dprintk("poll(): vino_queue_get_outgoing() failed\n");
+               ret = POLLERR;
+               goto error;
+       }
+
+over:
+       dprintk("poll(): data %savailable\n",
+               (outgoing > 0) ? "" : "not ");
+       if (outgoing > 0) {
+               ret = POLLIN | POLLRDNORM;
+       }
+
+error:
+
+       return ret;
+}
+
+static int vino_do_ioctl(struct inode *inode, struct file *file,
+                     unsigned int cmd, void *arg)
+{
+       struct video_device *dev = video_devdata(file);
+       struct vino_channel_settings *vcs = video_get_drvdata(dev);
+
+       switch (_IOC_TYPE(cmd)) {
+       case 'v':
+               dprintk("ioctl(): V4L1 unsupported (0x%08x)\n", cmd);
+               break;
+       case 'V':
+               dprintk("ioctl(): V4L2 %s (0x%08x)\n",
+                       v4l2_ioctl_names[_IOC_NR(cmd)], cmd);
+               break;
+       default:
+               dprintk("ioctl(): unsupported command 0x%08x\n", cmd);
+       }
+
+       switch (cmd) {
+       /* TODO: V4L1 interface (use compatibility layer?) */
+       /* V4L2 interface */
+       case VIDIOC_QUERYCAP: {
+               vino_v4l2_querycap(arg);
+               break;
+       }
+       case VIDIOC_ENUMINPUT: {
+               return vino_v4l2_enuminput(vcs, arg);
+       }
+       case VIDIOC_G_INPUT: {
+               return vino_v4l2_g_input(vcs, arg);
+       }
+       case VIDIOC_S_INPUT: {
+               return vino_v4l2_s_input(vcs, arg);
+       }
+       case VIDIOC_ENUMSTD: {
+               return vino_v4l2_enumstd(vcs, arg);
+       }
+       case VIDIOC_G_STD: {
+               return vino_v4l2_g_std(vcs, arg);
+       }
+       case VIDIOC_S_STD: {
+               return vino_v4l2_s_std(vcs, arg);
+       }
+       case VIDIOC_ENUM_FMT: {
+               return vino_v4l2_enum_fmt(vcs, arg);
+       }
+       case VIDIOC_TRY_FMT: {
+               return vino_v4l2_try_fmt(vcs, arg);
+       }
+       case VIDIOC_G_FMT: {
+               return vino_v4l2_g_fmt(vcs, arg);
+       }
+       case VIDIOC_S_FMT: {
+               return vino_v4l2_s_fmt(vcs, arg);
+       }
+       case VIDIOC_CROPCAP: {
+               return vino_v4l2_cropcap(vcs, arg);
+       }
+       case VIDIOC_G_CROP: {
+               return vino_v4l2_g_crop(vcs, arg);
+       }
+       case VIDIOC_S_CROP: {
+               return vino_v4l2_s_crop(vcs, arg);
+       }
+       case VIDIOC_G_PARM: {
+               return vino_v4l2_g_parm(vcs, arg);
+       }
+       case VIDIOC_S_PARM: {
+               return vino_v4l2_s_parm(vcs, arg);
+       }
+       case VIDIOC_REQBUFS: {
+               return vino_v4l2_reqbufs(vcs, arg);
+       }
+       case VIDIOC_QUERYBUF: {
+               return vino_v4l2_querybuf(vcs, arg);
+       }
+       case VIDIOC_QBUF: {
+               return vino_v4l2_qbuf(vcs, arg);
+       }
+       case VIDIOC_DQBUF: {
+               return vino_v4l2_dqbuf(vcs, arg, file->f_flags & O_NONBLOCK);
+       }
+       case VIDIOC_STREAMON: {
+               return vino_v4l2_streamon(vcs);
+       }
+       case VIDIOC_STREAMOFF: {
+               return vino_v4l2_streamoff(vcs);
+       }
+       case VIDIOC_QUERYCTRL: {
+               return vino_v4l2_queryctrl(vcs, arg);
+       }
+       case VIDIOC_G_CTRL: {
+               return vino_v4l2_g_ctrl(vcs, arg);
+       }
+       case VIDIOC_S_CTRL: {
+               return vino_v4l2_s_ctrl(vcs, arg);
+       }
+       default:
+               return -ENOIOCTLCMD;
+       }
+
+       return 0;
+}
+
+static int vino_ioctl(struct inode *inode, struct file *file,
+                     unsigned int cmd, unsigned long arg)
+{
+       struct video_device *dev = video_devdata(file);
+       struct vino_channel_settings *vcs = video_get_drvdata(dev);
+       int ret;
+
+       if (down_interruptible(&vcs->sem))
+               return -EINTR;
+
+       ret = video_usercopy(inode, file, cmd, arg, vino_do_ioctl);
+
+       up(&vcs->sem);
+
+       return ret;
+}
+
+/* Initialization and cleanup */
+
+// __initdata
+static int vino_init_stage = 0;
+
+static struct file_operations vino_fops = {
+       .owner          = THIS_MODULE,
+       .open           = vino_open,
+       .release        = vino_close,
+       .ioctl          = vino_ioctl,
+       .mmap           = vino_mmap,
+       .poll           = vino_poll,
+       .llseek         = no_llseek,
+};
+
+static struct video_device v4l_device_template = {
+       .name           = "NOT SET",
+       //.type         = VID_TYPE_CAPTURE | VID_TYPE_SUBCAPTURE |
+       //      VID_TYPE_CLIPPING | VID_TYPE_SCALES, VID_TYPE_OVERLAY
+       .hardware       = VID_HARDWARE_VINO,
+       .fops           = &vino_fops,
+       .minor          = -1,
+};
+
+static void vino_module_cleanup(int stage)
+{
+       switch(stage) {
+       case 10:
+               video_unregister_device(vino_drvdata->b.v4l_device);
+               vino_drvdata->b.v4l_device = NULL;
+       case 9:
+               video_unregister_device(vino_drvdata->a.v4l_device);
+               vino_drvdata->a.v4l_device = NULL;
+       case 8:
+               vino_i2c_del_bus();
+       case 7:
+               free_irq(SGI_VINO_IRQ, NULL);
+       case 6:
+               if (vino_drvdata->b.v4l_device) {
+                       video_device_release(vino_drvdata->b.v4l_device);
+                       vino_drvdata->b.v4l_device = NULL;
+               }
+       case 5:
+               if (vino_drvdata->a.v4l_device) {
+                       video_device_release(vino_drvdata->a.v4l_device);
+                       vino_drvdata->a.v4l_device = NULL;
+               }
+       case 4:
+               /* all entries in dma_cpu dummy table have the same address */
+               dma_unmap_single(NULL,
+                                vino_drvdata->dummy_desc_table.dma_cpu[0],
+                                PAGE_SIZE, DMA_FROM_DEVICE);
+               dma_free_coherent(NULL, VINO_DUMMY_DESC_COUNT
+                                 * sizeof(dma_addr_t),
+                                 (void *)vino_drvdata->
+                                 dummy_desc_table.dma_cpu,
+                                 vino_drvdata->dummy_desc_table.dma);
+       case 3:
+               free_page(vino_drvdata->dummy_page);
+       case 2:
+               kfree(vino_drvdata);
+       case 1:
+               iounmap(vino);
+       case 0:
+               break;
+       default:
+               dprintk("vino_module_cleanup(): invalid cleanup stage = %d\n",
+                       stage);
+       }
+}
+
+static int vino_probe(void)
+{
+       unsigned long rev_id;
+
+       if (ip22_is_fullhouse()) {
+               printk(KERN_ERR "VINO doesn't exist in IP22 Fullhouse\n");
+               return -ENODEV;
+       }
+
+       if (!(sgimc->systemid & SGIMC_SYSID_EPRESENT)) {
+               printk(KERN_ERR "VINO is not found (EISA BUS not present)\n");
+               return -ENODEV;
+       }
+
+       vino = (struct sgi_vino *)ioremap(VINO_BASE, sizeof(struct sgi_vino));
+       if (!vino) {
+               printk(KERN_ERR "VINO: ioremap() failed\n");
+               return -EIO;
+       }
+       vino_init_stage++;
+
+       if (get_dbe(rev_id, &(vino->rev_id))) {
+               printk(KERN_ERR "Failed to read VINO revision register\n");
+               vino_module_cleanup(vino_init_stage);
+               return -ENODEV;
+       }
+
+       if (VINO_ID_VALUE(rev_id) != VINO_CHIP_ID) {
+               printk(KERN_ERR "Unknown VINO chip ID (Rev/ID: 0x%02lx)\n",
+                      rev_id);
+               vino_module_cleanup(vino_init_stage);
+               return -ENODEV;
+       }
+
+       printk(KERN_INFO "VINO with chip ID %ld, revision %ld found\n",
+              VINO_ID_VALUE(rev_id), VINO_REV_NUM(rev_id));
+
+       return 0;
+}
+
+static int vino_init(void)
+{
+       dma_addr_t dma_dummy_address;
+       int i;
+
+       vino_drvdata = (struct vino_settings *)
+               kmalloc(sizeof(struct vino_settings), GFP_KERNEL);
+       if (!vino_drvdata) {
+               vino_module_cleanup(vino_init_stage);
+               return -ENOMEM;
+       }
+       memset(vino_drvdata, 0, sizeof(struct vino_settings));
+       vino_init_stage++;
+
+       /* create a dummy dma descriptor */
+       vino_drvdata->dummy_page = get_zeroed_page(GFP_KERNEL | GFP_DMA);
+       if (!vino_drvdata->dummy_page) {
+               vino_module_cleanup(vino_init_stage);
+               return -ENOMEM;
+       }
+       vino_init_stage++;
+
+       // TODO: use page_count in dummy_desc_table
+
+       vino_drvdata->dummy_desc_table.dma_cpu =
+               dma_alloc_coherent(NULL,
+               VINO_DUMMY_DESC_COUNT * sizeof(dma_addr_t),
+               &vino_drvdata->dummy_desc_table.dma,
+               GFP_KERNEL | GFP_DMA);
+       if (!vino_drvdata->dummy_desc_table.dma_cpu) {
+               vino_module_cleanup(vino_init_stage);
+               return -ENOMEM;
+       }
+       vino_init_stage++;
+
+       dma_dummy_address = dma_map_single(NULL,
+                                          (void *)vino_drvdata->dummy_page,
+                                       PAGE_SIZE, DMA_FROM_DEVICE);
+       for (i = 0; i < VINO_DUMMY_DESC_COUNT; i++) {
+               vino_drvdata->dummy_desc_table.dma_cpu[i] = dma_dummy_address;
+       }
+
+       /* initialize VINO */
+
+       vino->control = 0;
+       vino->a.next_4_desc = vino_drvdata->dummy_desc_table.dma;
+       vino->b.next_4_desc = vino_drvdata->dummy_desc_table.dma;
+       udelay(VINO_DESC_FETCH_DELAY);
+
+       vino->intr_status = 0;
+
+       vino->a.fifo_thres = VINO_FIFO_THRESHOLD_DEFAULT;
+       vino->b.fifo_thres = VINO_FIFO_THRESHOLD_DEFAULT;
+
+       return 0;
+}
+
+static int vino_init_channel_settings(struct vino_channel_settings *vcs,
+                                unsigned int channel, const char *name)
+{
+       vcs->channel = channel;
+       vcs->input = VINO_INPUT_NONE;
+       vcs->alpha = 0;
+       vcs->users = 0;
+       vcs->data_format = VINO_DATA_FMT_GREY;
+       vcs->data_norm = VINO_DATA_NORM_NTSC;
+       vcs->decimation = 1;
+       vino_set_default_clipping(vcs);
+       vino_set_default_framerate(vcs);
+
+       vcs->capturing = 0;
+
+       init_MUTEX(&vcs->sem);
+       spin_lock_init(&vcs->capture_lock);
+
+       init_MUTEX(&vcs->fb_queue.queue_sem);
+       spin_lock_init(&vcs->fb_queue.queue_lock);
+       init_waitqueue_head(&vcs->fb_queue.frame_wait_queue);
+
+       vcs->v4l_device = video_device_alloc();
+       if (!vcs->v4l_device) {
+               vino_module_cleanup(vino_init_stage);
+               return -ENOMEM;
+       }
+       vino_init_stage++;
+
+       memcpy(vcs->v4l_device, &v4l_device_template,
+              sizeof(struct video_device));
+       strcpy(vcs->v4l_device->name, name);
+       vcs->v4l_device->release = video_device_release;
+
+       video_set_drvdata(vcs->v4l_device, vcs);
+
+       return 0;
+}
+
+static int __init vino_module_init(void)
+{
+       int ret;
+
+       printk(KERN_INFO "SGI VINO driver version %s\n",
+              VINO_MODULE_VERSION);
+
+       ret = vino_probe();
+       if (ret)
+               return ret;
+
+       ret = vino_init();
+       if (ret)
+               return ret;
+
+       /* initialize data structures */
+
+       spin_lock_init(&vino_drvdata->vino_lock);
+       spin_lock_init(&vino_drvdata->input_lock);
+
+       ret = vino_init_channel_settings(&vino_drvdata->a, VINO_CHANNEL_A,
+                                   vino_v4l_device_name_a);
+       if (ret)
+               return ret;
+
+       ret = vino_init_channel_settings(&vino_drvdata->b, VINO_CHANNEL_B,
+                                   vino_v4l_device_name_b);
+       if (ret)
+               return ret;
+
+       /* initialize hardware and register V4L devices */
+
+       ret = request_irq(SGI_VINO_IRQ, vino_interrupt, 0,
+               vino_driver_description, NULL);
+       if (ret) {
+               printk(KERN_ERR "VINO: requesting IRQ %02d failed\n",
+                      SGI_VINO_IRQ);
+               vino_module_cleanup(vino_init_stage);
+               return -EAGAIN;
+       }
+       vino_init_stage++;
+
+       ret = vino_i2c_add_bus();
+       if (ret) {
+               printk(KERN_ERR "VINO I2C bus registration failed\n");
+               vino_module_cleanup(vino_init_stage);
+               return ret;
+       }
+       vino_init_stage++;
+
+       ret = video_register_device(vino_drvdata->a.v4l_device,
+                                   VFL_TYPE_GRABBER, -1);
+       if (ret < 0) {
+               printk(KERN_ERR "VINO channel A Video4Linux-device "
+                      "registration failed\n");
+               vino_module_cleanup(vino_init_stage);
+               return -EINVAL;
+       }
+       vino_init_stage++;
+
+       ret = video_register_device(vino_drvdata->b.v4l_device,
+                                   VFL_TYPE_GRABBER, -1);
+       if (ret < 0) {
+               printk(KERN_ERR "VINO channel B Video4Linux-device "
+                      "registration failed\n");
+               vino_module_cleanup(vino_init_stage);
+               return -EINVAL;
+       }
+       vino_init_stage++;
+
+#if defined(CONFIG_KMOD) && defined(MODULE)
+       request_module("saa7191");
+       request_module("indycam");
+#endif
+
+       dprintk("init complete!\n");
+
+       return 0;
+}
+
+static void __exit vino_module_exit(void)
+{
+       dprintk("exiting, stage = %d ...\n", vino_init_stage);
+       vino_module_cleanup(vino_init_stage);
+       dprintk("cleanup complete, exit!\n");
+}
+
+module_init(vino_module_init);
+module_exit(vino_module_exit);
index d2fce472f35ab7543c58805b525e438eaae2389d..de2d615ae7c9492bc14b72eea236cb67a87331a7 100644 (file)
@@ -1,13 +1,19 @@
 /*
+ * Driver for the VINO (Video In No Out) system found in SGI Indys.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
  * Copyright (C) 1999 Ulf Karlsson <ulfc@bun.falkenberg.se>
  * Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
  */
 
-#ifndef VINO_H
-#define VINO_H
+#ifndef _VINO_H_
+#define _VINO_H_
 
 #define VINO_BASE      0x00080000      /* Vino is in the EISA address space,
                                         * but it is not an EISA bus card */
+#define VINO_PAGE_SIZE 4096
 
 struct sgi_vino_channel {
        u32 _pad_alpha;
@@ -21,8 +27,9 @@ struct sgi_vino_channel {
        u32 _pad_clip_end;
        volatile u32 clip_end;
 
+#define VINO_FRAMERT_FULL      0xfff
 #define VINO_FRAMERT_PAL       (1<<0)                  /* 0=NTSC 1=PAL */
-#define VINO_FRAMERT_RT(x)     (((x) & 0x1fff) << 1)   /* bits 1:12 */
+#define VINO_FRAMERT_RT(x)     (((x) & 0xfff) << 1)    /* bits 1:12 */
        u32 _pad_frame_rate;
        volatile u32 frame_rate;
 
@@ -67,18 +74,18 @@ struct sgi_vino {
        volatile u32 rev_id;
 
 #define VINO_CTRL_LITTLE_ENDIAN                (1<<0)
-#define VINO_CTRL_A_FIELD_TRANS_INT    (1<<1)  /* Field transferred int */
-#define VINO_CTRL_A_FIFO_OF_INT                (1<<2)  /* FIFO overflow int */
-#define VINO_CTRL_A_END_DESC_TBL_INT   (1<<3)  /* End of desc table int */
-#define VINO_CTRL_A_INT                        (VINO_CTRL_A_FIELD_TRANS_INT | \
-                                        VINO_CTRL_A_FIFO_OF_INT | \
-                                        VINO_CTRL_A_END_DESC_TBL_INT)
-#define VINO_CTRL_B_FIELD_TRANS_INT    (1<<4)  /* Field transferred int */
-#define VINO_CTRL_B_FIFO_OF_INT                (1<<5)  /* FIFO overflow int */
-#define VINO_CTRL_B_END_DESC_TBL_INT   (1<<6)  /* End of desc table int */
-#define VINO_CTRL_B_INT                        (VINO_CTRL_B_FIELD_TRANS_INT | \
-                                        VINO_CTRL_B_FIFO_OF_INT | \
-                                        VINO_CTRL_B_END_DESC_TBL_INT)
+#define VINO_CTRL_A_EOF_INT            (1<<1)  /* Field transferred int */
+#define VINO_CTRL_A_FIFO_INT           (1<<2)  /* FIFO overflow int */
+#define VINO_CTRL_A_EOD_INT            (1<<3)  /* End of desc table int */
+#define VINO_CTRL_A_INT                        (VINO_CTRL_A_EOF_INT | \
+                                        VINO_CTRL_A_FIFO_INT | \
+                                        VINO_CTRL_A_EOD_INT)
+#define VINO_CTRL_B_EOF_INT            (1<<4)  /* Field transferred int */
+#define VINO_CTRL_B_FIFO_INT           (1<<5)  /* FIFO overflow int */
+#define VINO_CTRL_B_EOD_INT            (1<<6)  /* End of desc table int */
+#define VINO_CTRL_B_INT                        (VINO_CTRL_B_EOF_INT | \
+                                        VINO_CTRL_B_FIFO_INT | \
+                                        VINO_CTRL_B_EOD_INT)
 #define VINO_CTRL_A_DMA_ENBL           (1<<7)
 #define VINO_CTRL_A_INTERLEAVE_ENBL    (1<<8)
 #define VINO_CTRL_A_SYNC_ENBL          (1<<9)
@@ -104,18 +111,18 @@ struct sgi_vino {
        u32 _pad_control;
        volatile u32 control;
 
-#define VINO_INTSTAT_A_FIELD_TRANS     (1<<0)  /* Field transferred int */
-#define VINO_INTSTAT_A_FIFO_OF         (1<<1)  /* FIFO overflow int */
-#define VINO_INTSTAT_A_END_DESC_TBL    (1<<2)  /* End of desc table int */
-#define VINO_INTSTAT_A                 (VINO_INTSTAT_A_FIELD_TRANS | \
-                                        VINO_INTSTAT_A_FIFO_OF | \
-                                        VINO_INTSTAT_A_END_DESC_TBL)
-#define VINO_INTSTAT_B_FIELD_TRANS     (1<<3)  /* Field transferred int */
-#define VINO_INTSTAT_B_FIFO_OF         (1<<4)  /* FIFO overflow int */
-#define VINO_INTSTAT_B_END_DESC_TBL    (1<<5)  /* End of desc table int */
-#define VINO_INTSTAT_B                 (VINO_INTSTAT_B_FIELD_TRANS | \
-                                        VINO_INTSTAT_B_FIFO_OF | \
-                                        VINO_INTSTAT_B_END_DESC_TBL)
+#define VINO_INTSTAT_A_EOF             (1<<0)  /* Field transferred int */
+#define VINO_INTSTAT_A_FIFO            (1<<1)  /* FIFO overflow int */
+#define VINO_INTSTAT_A_EOD             (1<<2)  /* End of desc table int */
+#define VINO_INTSTAT_A                 (VINO_INTSTAT_A_EOF | \
+                                        VINO_INTSTAT_A_FIFO | \
+                                        VINO_INTSTAT_A_EOD)
+#define VINO_INTSTAT_B_EOF             (1<<3)  /* Field transferred int */
+#define VINO_INTSTAT_B_FIFO            (1<<4)  /* FIFO overflow int */
+#define VINO_INTSTAT_B_EOD             (1<<5)  /* End of desc table int */
+#define VINO_INTSTAT_B                 (VINO_INTSTAT_B_EOF | \
+                                        VINO_INTSTAT_B_FIFO | \
+                                        VINO_INTSTAT_B_EOD)
        u32 _pad_intr_status;
        volatile u32 intr_status;
 
index 9f98334e5076bccd0171325fbf3ad084debba632..b61e3d175070f6cefec9ce17f6eaf8ae3f8b8b54 100644 (file)
@@ -6,7 +6,7 @@
  *          Title:  MPI Message independent structures and definitions
  *  Creation Date:  July 27, 2000
  *
- *    mpi.h Version:  01.05.07
+ *    mpi.h Version:  01.05.08
  *
  *  Version History
  *  ---------------
@@ -71,6 +71,9 @@
  *  03-11-05  01.05.07  Removed function codes for SCSI IO 32 and
  *                      TargetAssistExtended requests.
  *                      Removed EEDP IOCStatus codes.
+ *  06-24-05  01.05.08  Added function codes for SCSI IO 32 and
+ *                      TargetAssistExtended requests.
+ *                      Added EEDP IOCStatus codes.
  *  --------------------------------------------------------------------------
  */
 
 /* Note: The major versions of 0xe0 through 0xff are reserved */
 
 /* versioning for this MPI header set */
-#define MPI_HEADER_VERSION_UNIT             (0x09)
+#define MPI_HEADER_VERSION_UNIT             (0x0A)
 #define MPI_HEADER_VERSION_DEV              (0x00)
 #define MPI_HEADER_VERSION_UNIT_MASK        (0xFF00)
 #define MPI_HEADER_VERSION_UNIT_SHIFT       (8)
 #define MPI_FUNCTION_DIAG_BUFFER_POST               (0x1D)
 #define MPI_FUNCTION_DIAG_RELEASE                   (0x1E)
 
+#define MPI_FUNCTION_SCSI_IO_32                     (0x1F)
+
 #define MPI_FUNCTION_LAN_SEND                       (0x20)
 #define MPI_FUNCTION_LAN_RECEIVE                    (0x21)
 #define MPI_FUNCTION_LAN_RESET                      (0x22)
 
+#define MPI_FUNCTION_TARGET_ASSIST_EXTENDED         (0x23)
 #define MPI_FUNCTION_TARGET_CMD_BUF_BASE_POST       (0x24)
 #define MPI_FUNCTION_TARGET_CMD_BUF_LIST_POST       (0x25)
 
@@ -680,6 +686,15 @@ typedef struct _MSG_DEFAULT_REPLY
 #define MPI_IOCSTATUS_SCSI_IOC_TERMINATED       (0x004B)
 #define MPI_IOCSTATUS_SCSI_EXT_TERMINATED       (0x004C)
 
+/****************************************************************************/
+/*  For use by SCSI Initiator and SCSI Target end-to-end data protection    */
+/****************************************************************************/
+
+#define MPI_IOCSTATUS_EEDP_GUARD_ERROR          (0x004D)
+#define MPI_IOCSTATUS_EEDP_REF_TAG_ERROR        (0x004E)
+#define MPI_IOCSTATUS_EEDP_APP_TAG_ERROR        (0x004F)
+
+
 /****************************************************************************/
 /*  SCSI Target values                                                      */
 /****************************************************************************/
index 15b12b06799d2c4c8d54cb9d215245ee095b1f6d..d8339896f7343c60732c3f0f5f6c92bf8391373f 100644 (file)
@@ -6,7 +6,7 @@
  *          Title:  MPI Config message, structures, and Pages
  *  Creation Date:  July 27, 2000
  *
- *    mpi_cnfg.h Version:  01.05.08
+ *    mpi_cnfg.h Version:  01.05.09
  *
  *  Version History
  *  ---------------
  *                      New physical mapping mode in SAS IO Unit Page 2.
  *                      Added CONFIG_PAGE_SAS_ENCLOSURE_0.
  *                      Added Slot and Enclosure fields to SAS Device Page 0.
+ *  06-24-05  01.05.09  Added EEDP defines to IOC Page 1.
+ *                      Added more RAID type defines to IOC Page 2.
+ *                      Added Port Enable Delay settings to BIOS Page 1.
+ *                      Added Bad Block Table Full define to RAID Volume Page 0.
+ *                      Added Previous State defines to RAID Physical Disk
+ *                      Page 0.
+ *                      Added Max Sata Targets define for DiscoveryStatus field
+ *                      of SAS IO Unit Page 0.
+ *                      Added Device Self Test to Control Flags of SAS IO Unit
+ *                      Page 1.
+ *                      Added Direct Attach Starting Slot Number define for SAS
+ *                      IO Unit Page 2.
+ *                      Added new fields in SAS Device Page 2 for enclosure
+ *                      mapping.
+ *                      Added OwnerDevHandle and Flags field to SAS PHY Page 0.
+ *                      Added IOC GPIO Flags define to SAS Enclosure Page 0.
+ *                      Fixed the value for MPI_SAS_IOUNIT1_CONTROL_DEV_SATA_SUPPORT.
  *  --------------------------------------------------------------------------
  */
 
@@ -477,6 +494,7 @@ typedef struct _MSG_CONFIG_REPLY
 #define MPI_MANUFACTPAGE_DEVICEID_FC929X            (0x0626)
 #define MPI_MANUFACTPAGE_DEVICEID_FC939X            (0x0642)
 #define MPI_MANUFACTPAGE_DEVICEID_FC949X            (0x0640)
+#define MPI_MANUFACTPAGE_DEVICEID_FC949ES           (0x0646)
 /* SCSI */
 #define MPI_MANUFACTPAGE_DEVID_53C1030              (0x0030)
 #define MPI_MANUFACTPAGE_DEVID_53C1030ZC            (0x0031)
@@ -769,9 +787,13 @@ typedef struct _CONFIG_PAGE_IOC_1
 } CONFIG_PAGE_IOC_1, MPI_POINTER PTR_CONFIG_PAGE_IOC_1,
   IOCPage1_t, MPI_POINTER pIOCPage1_t;
 
-#define MPI_IOCPAGE1_PAGEVERSION                        (0x02)
+#define MPI_IOCPAGE1_PAGEVERSION                        (0x03)
 
 /* defines for the Flags field */
+#define MPI_IOCPAGE1_EEDP_MODE_MASK                     (0x07000000)
+#define MPI_IOCPAGE1_EEDP_MODE_OFF                      (0x00000000)
+#define MPI_IOCPAGE1_EEDP_MODE_T10                      (0x01000000)
+#define MPI_IOCPAGE1_EEDP_MODE_LSI_1                    (0x02000000)
 #define MPI_IOCPAGE1_INITIATOR_CONTEXT_REPLY_DISABLE    (0x00000010)
 #define MPI_IOCPAGE1_REPLY_COALESCING                   (0x00000001)
 
@@ -795,6 +817,11 @@ typedef struct _CONFIG_PAGE_IOC_2_RAID_VOL
 #define MPI_RAID_VOL_TYPE_IS                        (0x00)
 #define MPI_RAID_VOL_TYPE_IME                       (0x01)
 #define MPI_RAID_VOL_TYPE_IM                        (0x02)
+#define MPI_RAID_VOL_TYPE_RAID_5                    (0x03)
+#define MPI_RAID_VOL_TYPE_RAID_6                    (0x04)
+#define MPI_RAID_VOL_TYPE_RAID_10                   (0x05)
+#define MPI_RAID_VOL_TYPE_RAID_50                   (0x06)
+#define MPI_RAID_VOL_TYPE_UNKNOWN                   (0xFF)
 
 /* IOC Page 2 Volume Flags values */
 
@@ -820,13 +847,17 @@ typedef struct _CONFIG_PAGE_IOC_2
 } CONFIG_PAGE_IOC_2, MPI_POINTER PTR_CONFIG_PAGE_IOC_2,
   IOCPage2_t, MPI_POINTER pIOCPage2_t;
 
-#define MPI_IOCPAGE2_PAGEVERSION                        (0x02)
+#define MPI_IOCPAGE2_PAGEVERSION                        (0x03)
 
 /* IOC Page 2 Capabilities flags */
 
 #define MPI_IOCPAGE2_CAP_FLAGS_IS_SUPPORT               (0x00000001)
 #define MPI_IOCPAGE2_CAP_FLAGS_IME_SUPPORT              (0x00000002)
 #define MPI_IOCPAGE2_CAP_FLAGS_IM_SUPPORT               (0x00000004)
+#define MPI_IOCPAGE2_CAP_FLAGS_RAID_5_SUPPORT           (0x00000008)
+#define MPI_IOCPAGE2_CAP_FLAGS_RAID_6_SUPPORT           (0x00000010)
+#define MPI_IOCPAGE2_CAP_FLAGS_RAID_10_SUPPORT          (0x00000020)
+#define MPI_IOCPAGE2_CAP_FLAGS_RAID_50_SUPPORT          (0x00000040)
 #define MPI_IOCPAGE2_CAP_FLAGS_SES_SUPPORT              (0x20000000)
 #define MPI_IOCPAGE2_CAP_FLAGS_SAFTE_SUPPORT            (0x40000000)
 #define MPI_IOCPAGE2_CAP_FLAGS_CROSS_CHANNEL_SUPPORT    (0x80000000)
@@ -945,7 +976,7 @@ typedef struct _CONFIG_PAGE_BIOS_1
 } CONFIG_PAGE_BIOS_1, MPI_POINTER PTR_CONFIG_PAGE_BIOS_1,
   BIOSPage1_t, MPI_POINTER pBIOSPage1_t;
 
-#define MPI_BIOSPAGE1_PAGEVERSION                       (0x01)
+#define MPI_BIOSPAGE1_PAGEVERSION                       (0x02)
 
 /* values for the BiosOptions field */
 #define MPI_BIOSPAGE1_OPTIONS_SPI_ENABLE                (0x00000400)
@@ -954,6 +985,8 @@ typedef struct _CONFIG_PAGE_BIOS_1
 #define MPI_BIOSPAGE1_OPTIONS_DISABLE_BIOS              (0x00000001)
 
 /* values for the IOCSettings field */
+#define MPI_BIOSPAGE1_IOCSET_MASK_PORT_ENABLE_DELAY     (0x00F00000)
+#define MPI_BIOSPAGE1_IOCSET_SHIFT_PORT_ENABLE_DELAY    (20)
 #define MPI_BIOSPAGE1_IOCSET_MASK_BOOT_PREFERENCE       (0x00030000)
 #define MPI_BIOSPAGE1_IOCSET_ENCLOSURE_SLOT_BOOT        (0x00000000)
 #define MPI_BIOSPAGE1_IOCSET_SAS_ADDRESS_BOOT           (0x00010000)
@@ -1167,6 +1200,7 @@ typedef struct _CONFIG_PAGE_BIOS_2
 #define MPI_BIOSPAGE2_FORM_PCI_SLOT_NUMBER              (0x03)
 #define MPI_BIOSPAGE2_FORM_FC_WWN                       (0x04)
 #define MPI_BIOSPAGE2_FORM_SAS_WWN                      (0x05)
+#define MPI_BIOSPAGE2_FORM_ENCLOSURE_SLOT               (0x06)
 
 
 /****************************************************************************
@@ -1957,11 +1991,11 @@ typedef struct _RAID_VOL0_STATUS
   RaidVol0Status_t, MPI_POINTER pRaidVol0Status_t;
 
 /* RAID Volume Page 0 VolumeStatus defines */
-
 #define MPI_RAIDVOL0_STATUS_FLAG_ENABLED                (0x01)
 #define MPI_RAIDVOL0_STATUS_FLAG_QUIESCED               (0x02)
 #define MPI_RAIDVOL0_STATUS_FLAG_RESYNC_IN_PROGRESS     (0x04)
 #define MPI_RAIDVOL0_STATUS_FLAG_VOLUME_INACTIVE        (0x08)
+#define MPI_RAIDVOL0_STATUS_FLAG_BAD_BLOCK_TABLE_FULL   (0x10)
 
 #define MPI_RAIDVOL0_STATUS_STATE_OPTIMAL               (0x00)
 #define MPI_RAIDVOL0_STATUS_STATE_DEGRADED              (0x01)
@@ -2025,7 +2059,7 @@ typedef struct _CONFIG_PAGE_RAID_VOL_0
 } CONFIG_PAGE_RAID_VOL_0, MPI_POINTER PTR_CONFIG_PAGE_RAID_VOL_0,
   RaidVolumePage0_t, MPI_POINTER pRaidVolumePage0_t;
 
-#define MPI_RAIDVOLPAGE0_PAGEVERSION                    (0x04)
+#define MPI_RAIDVOLPAGE0_PAGEVERSION                    (0x05)
 
 /* values for RAID Volume Page 0 InactiveStatus field */
 #define MPI_RAIDVOLPAGE0_UNKNOWN_INACTIVE               (0x00)
@@ -2104,6 +2138,8 @@ typedef struct _RAID_PHYS_DISK0_STATUS
 #define MPI_PHYSDISK0_STATUS_FLAG_OUT_OF_SYNC           (0x01)
 #define MPI_PHYSDISK0_STATUS_FLAG_QUIESCED              (0x02)
 #define MPI_PHYSDISK0_STATUS_FLAG_INACTIVE_VOLUME       (0x04)
+#define MPI_PHYSDISK0_STATUS_FLAG_OPTIMAL_PREVIOUS      (0x00)
+#define MPI_PHYSDISK0_STATUS_FLAG_NOT_OPTIMAL_PREVIOUS  (0x08)
 
 #define MPI_PHYSDISK0_STATUS_ONLINE                     (0x00)
 #define MPI_PHYSDISK0_STATUS_MISSING                    (0x01)
@@ -2132,7 +2168,7 @@ typedef struct _CONFIG_PAGE_RAID_PHYS_DISK_0
 } CONFIG_PAGE_RAID_PHYS_DISK_0, MPI_POINTER PTR_CONFIG_PAGE_RAID_PHYS_DISK_0,
   RaidPhysDiskPage0_t, MPI_POINTER pRaidPhysDiskPage0_t;
 
-#define MPI_RAIDPHYSDISKPAGE0_PAGEVERSION           (0x01)
+#define MPI_RAIDPHYSDISKPAGE0_PAGEVERSION           (0x02)
 
 
 typedef struct _RAID_PHYS_DISK1_PATH
@@ -2263,7 +2299,7 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_0
 } CONFIG_PAGE_SAS_IO_UNIT_0, MPI_POINTER PTR_CONFIG_PAGE_SAS_IO_UNIT_0,
   SasIOUnitPage0_t, MPI_POINTER pSasIOUnitPage0_t;
 
-#define MPI_SASIOUNITPAGE0_PAGEVERSION      (0x02)
+#define MPI_SASIOUNITPAGE0_PAGEVERSION      (0x03)
 
 /* values for SAS IO Unit Page 0 PortFlags */
 #define MPI_SAS_IOUNIT0_PORT_FLAGS_DISCOVERY_IN_PROGRESS    (0x08)
@@ -2299,6 +2335,7 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_0
 #define MPI_SAS_IOUNIT0_DS_SUBTRACTIVE_LINK                 (0x00000200)
 #define MPI_SAS_IOUNIT0_DS_TABLE_LINK                       (0x00000400)
 #define MPI_SAS_IOUNIT0_DS_UNSUPPORTED_DEVICE               (0x00000800)
+#define MPI_SAS_IOUNIT0_DS_MAX_SATA_TARGETS                 (0x00001000)
 
 
 typedef struct _MPI_SAS_IO_UNIT1_PHY_DATA
@@ -2336,6 +2373,7 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_1
 #define MPI_SASIOUNITPAGE1_PAGEVERSION      (0x04)
 
 /* values for SAS IO Unit Page 1 ControlFlags */
+#define MPI_SAS_IOUNIT1_CONTROL_DEVICE_SELF_TEST        (0x8000)
 #define MPI_SAS_IOUNIT1_CONTROL_SATA_3_0_MAX            (0x4000)
 #define MPI_SAS_IOUNIT1_CONTROL_SATA_1_5_MAX            (0x2000)
 #define MPI_SAS_IOUNIT1_CONTROL_SATA_SW_PRESERVE        (0x1000)
@@ -2345,9 +2383,8 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_1
 #define MPI_SAS_IOUNIT1_CONTROL_SHIFT_DEV_SUPPORT       (9)
 #define MPI_SAS_IOUNIT1_CONTROL_DEV_SUPPORT_BOTH        (0x00)
 #define MPI_SAS_IOUNIT1_CONTROL_DEV_SAS_SUPPORT         (0x01)
-#define MPI_SAS_IOUNIT1_CONTROL_DEV_SATA_SUPPORT        (0x10)
+#define MPI_SAS_IOUNIT1_CONTROL_DEV_SATA_SUPPORT        (0x02)
 
-#define MPI_SAS_IOUNIT1_CONTROL_AUTO_PORT_SAME_SAS_ADDR (0x0100)
 #define MPI_SAS_IOUNIT1_CONTROL_SATA_48BIT_LBA_REQUIRED (0x0080)
 #define MPI_SAS_IOUNIT1_CONTROL_SATA_SMART_REQUIRED     (0x0040)
 #define MPI_SAS_IOUNIT1_CONTROL_SATA_NCQ_REQUIRED       (0x0020)
@@ -2390,7 +2427,7 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_2
 } CONFIG_PAGE_SAS_IO_UNIT_2, MPI_POINTER PTR_CONFIG_PAGE_SAS_IO_UNIT_2,
   SasIOUnitPage2_t, MPI_POINTER pSasIOUnitPage2_t;
 
-#define MPI_SASIOUNITPAGE2_PAGEVERSION      (0x03)
+#define MPI_SASIOUNITPAGE2_PAGEVERSION      (0x04)
 
 /* values for SAS IO Unit Page 2 Status field */
 #define MPI_SAS_IOUNIT2_STATUS_DISABLED_PERSISTENT_MAPPINGS (0x02)
@@ -2406,6 +2443,7 @@ typedef struct _CONFIG_PAGE_SAS_IO_UNIT_2
 #define MPI_SAS_IOUNIT2_FLAGS_ENCLOSURE_SLOT_PHYS_MAP       (0x02)
 
 #define MPI_SAS_IOUNIT2_FLAGS_RESERVE_ID_0_FOR_BOOT         (0x10)
+#define MPI_SAS_IOUNIT2_FLAGS_DA_STARTING_SLOT              (0x20)
 
 
 typedef struct _CONFIG_PAGE_SAS_IO_UNIT_3
@@ -2584,11 +2622,19 @@ typedef struct _CONFIG_PAGE_SAS_DEVICE_2
 {
     CONFIG_EXTENDED_PAGE_HEADER         Header;                 /* 00h */
     U64                                 PhysicalIdentifier;     /* 08h */
-    U32                                 Reserved1;              /* 10h */
+    U32                                 EnclosureMapping;       /* 10h */
 } CONFIG_PAGE_SAS_DEVICE_2, MPI_POINTER PTR_CONFIG_PAGE_SAS_DEVICE_2,
   SasDevicePage2_t, MPI_POINTER pSasDevicePage2_t;
 
-#define MPI_SASDEVICE2_PAGEVERSION          (0x00)
+#define MPI_SASDEVICE2_PAGEVERSION          (0x01)
+
+/* defines for SAS Device Page 2 EnclosureMapping field */
+#define MPI_SASDEVICE2_ENC_MAP_MASK_MISSING_COUNT       (0x0000000F)
+#define MPI_SASDEVICE2_ENC_MAP_SHIFT_MISSING_COUNT      (0)
+#define MPI_SASDEVICE2_ENC_MAP_MASK_NUM_SLOTS           (0x000007F0)
+#define MPI_SASDEVICE2_ENC_MAP_SHIFT_NUM_SLOTS          (4)
+#define MPI_SASDEVICE2_ENC_MAP_MASK_START_INDEX         (0x001FF800)
+#define MPI_SASDEVICE2_ENC_MAP_SHIFT_START_INDEX        (11)
 
 
 /****************************************************************************
@@ -2598,7 +2644,8 @@ typedef struct _CONFIG_PAGE_SAS_DEVICE_2
 typedef struct _CONFIG_PAGE_SAS_PHY_0
 {
     CONFIG_EXTENDED_PAGE_HEADER         Header;                 /* 00h */
-    U32                                 Reserved1;              /* 08h */
+    U16                                 OwnerDevHandle;         /* 08h */
+    U16                                 Reserved1;              /* 0Ah */
     U64                                 SASAddress;             /* 0Ch */
     U16                                 AttachedDevHandle;      /* 14h */
     U8                                  AttachedPhyIdentifier;  /* 16h */
@@ -2607,12 +2654,12 @@ typedef struct _CONFIG_PAGE_SAS_PHY_0
     U8                                  ProgrammedLinkRate;     /* 20h */
     U8                                  HwLinkRate;             /* 21h */
     U8                                  ChangeCount;            /* 22h */
-    U8                                  Reserved3;              /* 23h */
+    U8                                  Flags;                  /* 23h */
     U32                                 PhyInfo;                /* 24h */
 } CONFIG_PAGE_SAS_PHY_0, MPI_POINTER PTR_CONFIG_PAGE_SAS_PHY_0,
   SasPhyPage0_t, MPI_POINTER pSasPhyPage0_t;
 
-#define MPI_SASPHY0_PAGEVERSION             (0x00)
+#define MPI_SASPHY0_PAGEVERSION             (0x01)
 
 /* values for SAS PHY Page 0 ProgrammedLinkRate field */
 #define MPI_SAS_PHY0_PRATE_MAX_RATE_MASK                        (0xF0)
@@ -2632,6 +2679,9 @@ typedef struct _CONFIG_PAGE_SAS_PHY_0
 #define MPI_SAS_PHY0_HWRATE_MIN_RATE_1_5                        (0x08)
 #define MPI_SAS_PHY0_HWRATE_MIN_RATE_3_0                        (0x09)
 
+/* values for SAS PHY Page 0 Flags field */
+#define MPI_SAS_PHY0_FLAGS_SGPIO_DIRECT_ATTACH_ENC              (0x01)
+
 /* values for SAS PHY Page 0 PhyInfo field */
 #define MPI_SAS_PHY0_PHYINFO_SATA_PORT_ACTIVE                   (0x00004000)
 #define MPI_SAS_PHY0_PHYINFO_SATA_PORT_SELECTOR                 (0x00002000)
@@ -2690,7 +2740,7 @@ typedef struct _CONFIG_PAGE_SAS_ENCLOSURE_0
 } CONFIG_PAGE_SAS_ENCLOSURE_0, MPI_POINTER PTR_CONFIG_PAGE_SAS_ENCLOSURE_0,
   SasEnclosurePage0_t, MPI_POINTER pSasEnclosurePage0_t;
 
-#define MPI_SASENCLOSURE0_PAGEVERSION       (0x00)
+#define MPI_SASENCLOSURE0_PAGEVERSION       (0x01)
 
 /* values for SAS Enclosure Page 0 Flags field */
 #define MPI_SAS_ENCLS0_FLAGS_SEP_BUS_ID_VALID       (0x0020)
@@ -2702,6 +2752,7 @@ typedef struct _CONFIG_PAGE_SAS_ENCLOSURE_0
 #define MPI_SAS_ENCLS0_FLAGS_MNG_IOC_SGPIO          (0x0002)
 #define MPI_SAS_ENCLS0_FLAGS_MNG_EXP_SGPIO          (0x0003)
 #define MPI_SAS_ENCLS0_FLAGS_MNG_SES_ENCLOSURE      (0x0004)
+#define MPI_SAS_ENCLS0_FLAGS_MNG_IOC_GPIO           (0x0005)
 
 
 /****************************************************************************
index c9edbee41edff1a103a8c8267214529be5f7925e..1a30ef16adb4d58911967f5cf585c0c7306cbf94 100644 (file)
@@ -6,17 +6,17 @@
  Copyright (c) 2000-2005 LSI Logic Corporation.
 
  ---------------------------------------
- Header Set Release Version:    01.05.09
+ Header Set Release Version:    01.05.10
  Header Set Release Date:       03-11-05
  ---------------------------------------
 
  Filename               Current version     Prior version
  ----------             ---------------     -------------
- mpi.h                  01.05.07            01.05.06
- mpi_ioc.h              01.05.08            01.05.07
- mpi_cnfg.h             01.05.08            01.05.07
- mpi_init.h             01.05.04            01.05.03
- mpi_targ.h             01.05.04            01.05.03
+ mpi.h                  01.05.08            01.05.07
+ mpi_ioc.h              01.05.09            01.05.08
+ mpi_cnfg.h             01.05.09            01.05.08
+ mpi_init.h             01.05.05            01.05.04
+ mpi_targ.h             01.05.05            01.05.04
  mpi_fc.h               01.05.01            01.05.01
  mpi_lan.h              01.05.01            01.05.01
  mpi_raid.h             01.05.02            01.05.02
@@ -24,7 +24,7 @@
  mpi_inb.h              01.05.01            01.05.01
  mpi_sas.h              01.05.01            01.05.01
  mpi_type.h             01.05.01            01.05.01
- mpi_history.txt        01.05.09            01.05.08
+ mpi_history.txt        01.05.09            01.05.09
 
 
  *  Date      Version   Description
@@ -88,6 +88,9 @@ mpi.h
  *  03-11-05  01.05.07  Removed function codes for SCSI IO 32 and
  *                      TargetAssistExtended requests.
  *                      Removed EEDP IOCStatus codes.
+ *  06-24-05  01.05.08  Added function codes for SCSI IO 32 and
+ *                      TargetAssistExtended requests.
+ *                      Added EEDP IOCStatus codes.
  *  --------------------------------------------------------------------------
 
 mpi_ioc.h
@@ -159,6 +162,8 @@ mpi_ioc.h
  *                      Reply and IOC Init Request.
  *  03-11-05  01.05.08  Added family code for 1068E family.
  *                      Removed IOCFacts Reply EEDP Capability bit.
+ *  06-24-05  01.05.09  Added 5 new IOCFacts Reply IOCCapabilities bits.
+ *                      Added Max SATA Targets to SAS Discovery Error event.
  *  --------------------------------------------------------------------------
 
 mpi_cnfg.h
@@ -380,6 +385,23 @@ mpi_cnfg.h
  *                      New physical mapping mode in SAS IO Unit Page 2.
  *                      Added CONFIG_PAGE_SAS_ENCLOSURE_0.
  *                      Added Slot and Enclosure fields to SAS Device Page 0.
+ *  06-24-05  01.05.09  Added EEDP defines to IOC Page 1.
+ *                      Added more RAID type defines to IOC Page 2.
+ *                      Added Port Enable Delay settings to BIOS Page 1.
+ *                      Added Bad Block Table Full define to RAID Volume Page 0.
+ *                      Added Previous State defines to RAID Physical Disk
+ *                      Page 0.
+ *                      Added Max Sata Targets define for DiscoveryStatus field
+ *                      of SAS IO Unit Page 0.
+ *                      Added Device Self Test to Control Flags of SAS IO Unit
+ *                      Page 1.
+ *                      Added Direct Attach Starting Slot Number define for SAS
+ *                      IO Unit Page 2.
+ *                      Added new fields in SAS Device Page 2 for enclosure
+ *                      mapping.
+ *                      Added OwnerDevHandle and Flags field to SAS PHY Page 0.
+ *                      Added IOC GPIO Flags define to SAS Enclosure Page 0.
+ *                      Fixed the value for MPI_SAS_IOUNIT1_CONTROL_DEV_SATA_SUPPORT.
  *  --------------------------------------------------------------------------
 
 mpi_init.h
@@ -418,6 +440,8 @@ mpi_init.h
  *                      Modified SCSI Enclosure Processor Request and Reply to
  *                      support Enclosure/Slot addressing rather than WWID
  *                      addressing.
+ *  06-24-05  01.05.05  Added SCSI IO 32 structures and defines.
+ *                      Added four new defines for SEP SlotStatus.
  *  --------------------------------------------------------------------------
 
 mpi_targ.h
@@ -461,6 +485,7 @@ mpi_targ.h
  *  10-05-04  01.05.02  MSG_TARGET_CMD_BUFFER_POST_BASE_LIST_REPLY added.
  *  02-22-05  01.05.03  Changed a comment.
  *  03-11-05  01.05.04  Removed TargetAssistExtended Request.
+ *  06-24-05  01.05.05  Added TargetAssistExtended structures and defines.
  *  --------------------------------------------------------------------------
 
 mpi_fc.h
@@ -571,20 +596,20 @@ mpi_type.h
 
 mpi_history.txt         Parts list history
 
-Filename    01.05.09
-----------  --------
-mpi.h       01.05.07
-mpi_ioc.h   01.05.08
-mpi_cnfg.h  01.05.08
-mpi_init.h  01.05.04
-mpi_targ.h  01.05.04
-mpi_fc.h    01.05.01
-mpi_lan.h   01.05.01
-mpi_raid.h  01.05.02
-mpi_tool.h  01.05.03
-mpi_inb.h   01.05.01
-mpi_sas.h   01.05.01
-mpi_type.h  01.05.01
+Filename    01.05.10  01.05.09
+----------  --------  --------
+mpi.h       01.05.08  01.05.07
+mpi_ioc.h   01.05.09  01.05.08
+mpi_cnfg.h  01.05.09  01.05.08
+mpi_init.h  01.05.05  01.05.04
+mpi_targ.h  01.05.05  01.05.04
+mpi_fc.h    01.05.01  01.05.01
+mpi_lan.h   01.05.01  01.05.01
+mpi_raid.h  01.05.02  01.05.02
+mpi_tool.h  01.05.03  01.05.03
+mpi_inb.h   01.05.01  01.05.01
+mpi_sas.h   01.05.01  01.05.01
+mpi_type.h  01.05.01  01.05.01
 
 Filename    01.05.08   01.05.07   01.05.06   01.05.05   01.05.04   01.05.03
 ----------  --------   --------   --------   --------   --------   --------
index aca035801a86ca77a076f0b4c1e338f6aa5c8beb..d5af75afbd94a8545b163012be4aef243dc7f36d 100644 (file)
@@ -6,7 +6,7 @@
  *          Title:  MPI initiator mode messages and structures
  *  Creation Date:  June 8, 2000
  *
- *    mpi_init.h Version:  01.05.04
+ *    mpi_init.h Version:  01.05.05
  *
  *  Version History
  *  ---------------
@@ -48,6 +48,8 @@
  *                      Modified SCSI Enclosure Processor Request and Reply to
  *                      support Enclosure/Slot addressing rather than WWID
  *                      addressing.
+ *  06-24-05  01.05.05  Added SCSI IO 32 structures and defines.
+ *                      Added four new defines for SEP SlotStatus.
  *  --------------------------------------------------------------------------
  */
 
@@ -202,6 +204,197 @@ typedef struct _MSG_SCSI_IO_REPLY
 #define MPI_SCSI_TASKTAG_UNKNOWN                (0xFFFF)
 
 
+/****************************************************************************/
+/*  SCSI IO 32 messages and associated structures                           */
+/****************************************************************************/
+
+typedef struct
+{
+    U8                      CDB[20];                    /* 00h */
+    U32                     PrimaryReferenceTag;        /* 14h */
+    U16                     PrimaryApplicationTag;      /* 18h */
+    U16                     PrimaryApplicationTagMask;  /* 1Ah */
+    U32                     TransferLength;             /* 1Ch */
+} MPI_SCSI_IO32_CDB_EEDP32, MPI_POINTER PTR_MPI_SCSI_IO32_CDB_EEDP32,
+  MpiScsiIo32CdbEedp32_t, MPI_POINTER pMpiScsiIo32CdbEedp32_t;
+
+typedef struct
+{
+    U8                      CDB[16];                    /* 00h */
+    U32                     DataLength;                 /* 10h */
+    U32                     PrimaryReferenceTag;        /* 14h */
+    U16                     PrimaryApplicationTag;      /* 18h */
+    U16                     PrimaryApplicationTagMask;  /* 1Ah */
+    U32                     TransferLength;             /* 1Ch */
+} MPI_SCSI_IO32_CDB_EEDP16, MPI_POINTER PTR_MPI_SCSI_IO32_CDB_EEDP16,
+  MpiScsiIo32CdbEedp16_t, MPI_POINTER pMpiScsiIo32CdbEedp16_t;
+
+typedef union
+{
+    U8                       CDB32[32];
+    MPI_SCSI_IO32_CDB_EEDP32 EEDP32;
+    MPI_SCSI_IO32_CDB_EEDP16 EEDP16;
+    SGE_SIMPLE_UNION         SGE;
+} MPI_SCSI_IO32_CDB_UNION, MPI_POINTER PTR_MPI_SCSI_IO32_CDB_UNION,
+  MpiScsiIo32Cdb_t, MPI_POINTER pMpiScsiIo32Cdb_t;
+
+typedef struct
+{
+    U8                      TargetID;           /* 00h */
+    U8                      Bus;                /* 01h */
+    U16                     Reserved1;          /* 02h */
+    U32                     Reserved2;          /* 04h */
+} MPI_SCSI_IO32_BUS_TARGET_ID_FORM, MPI_POINTER PTR_MPI_SCSI_IO32_BUS_TARGET_ID_FORM,
+  MpiScsiIo32BusTargetIdForm_t, MPI_POINTER pMpiScsiIo32BusTargetIdForm_t;
+
+typedef union
+{
+    MPI_SCSI_IO32_BUS_TARGET_ID_FORM    SCSIID;
+    U64                                 WWID;
+} MPI_SCSI_IO32_ADDRESS, MPI_POINTER PTR_MPI_SCSI_IO32_ADDRESS,
+  MpiScsiIo32Address_t, MPI_POINTER pMpiScsiIo32Address_t;
+
+typedef struct _MSG_SCSI_IO32_REQUEST
+{
+    U8                          Port;                           /* 00h */
+    U8                          Reserved1;                      /* 01h */
+    U8                          ChainOffset;                    /* 02h */
+    U8                          Function;                       /* 03h */
+    U8                          CDBLength;                      /* 04h */
+    U8                          SenseBufferLength;              /* 05h */
+    U8                          Flags;                          /* 06h */
+    U8                          MsgFlags;                       /* 07h */
+    U32                         MsgContext;                     /* 08h */
+    U8                          LUN[8];                         /* 0Ch */
+    U32                         Control;                        /* 14h */
+    MPI_SCSI_IO32_CDB_UNION     CDB;                            /* 18h */
+    U32                         DataLength;                     /* 38h */
+    U32                         BidirectionalDataLength;        /* 3Ch */
+    U32                         SecondaryReferenceTag;          /* 40h */
+    U16                         SecondaryApplicationTag;        /* 44h */
+    U16                         Reserved2;                      /* 46h */
+    U16                         EEDPFlags;                      /* 48h */
+    U16                         ApplicationTagTranslationMask;  /* 4Ah */
+    U32                         EEDPBlockSize;                  /* 4Ch */
+    MPI_SCSI_IO32_ADDRESS       DeviceAddress;                  /* 50h */
+    U8                          SGLOffset0;                     /* 58h */
+    U8                          SGLOffset1;                     /* 59h */
+    U8                          SGLOffset2;                     /* 5Ah */
+    U8                          SGLOffset3;                     /* 5Bh */
+    U32                         Reserved3;                      /* 5Ch */
+    U32                         Reserved4;                      /* 60h */
+    U32                         SenseBufferLowAddr;             /* 64h */
+    SGE_IO_UNION                SGL;                            /* 68h */
+} MSG_SCSI_IO32_REQUEST, MPI_POINTER PTR_MSG_SCSI_IO32_REQUEST,
+  SCSIIO32Request_t, MPI_POINTER pSCSIIO32Request_t;
+
+/* SCSI IO 32 MsgFlags bits */
+#define MPI_SCSIIO32_MSGFLGS_SENSE_WIDTH                (0x01)
+#define MPI_SCSIIO32_MSGFLGS_SENSE_WIDTH_32             (0x00)
+#define MPI_SCSIIO32_MSGFLGS_SENSE_WIDTH_64             (0x01)
+
+#define MPI_SCSIIO32_MSGFLGS_SENSE_LOCATION             (0x02)
+#define MPI_SCSIIO32_MSGFLGS_SENSE_LOC_HOST             (0x00)
+#define MPI_SCSIIO32_MSGFLGS_SENSE_LOC_IOC              (0x02)
+
+#define MPI_SCSIIO32_MSGFLGS_CMD_DETERMINES_DATA_DIR    (0x04)
+#define MPI_SCSIIO32_MSGFLGS_SGL_OFFSETS_CHAINS         (0x08)
+#define MPI_SCSIIO32_MSGFLGS_MULTICAST                  (0x10)
+#define MPI_SCSIIO32_MSGFLGS_BIDIRECTIONAL              (0x20)
+#define MPI_SCSIIO32_MSGFLGS_LARGE_CDB                  (0x40)
+
+/* SCSI IO 32 Flags bits */
+#define MPI_SCSIIO32_FLAGS_FORM_MASK                    (0x03)
+#define MPI_SCSIIO32_FLAGS_FORM_SCSIID                  (0x00)
+#define MPI_SCSIIO32_FLAGS_FORM_WWID                    (0x01)
+
+/* SCSI IO 32 LUN fields */
+#define MPI_SCSIIO32_LUN_FIRST_LEVEL_ADDRESSING     (0x0000FFFF)
+#define MPI_SCSIIO32_LUN_SECOND_LEVEL_ADDRESSING    (0xFFFF0000)
+#define MPI_SCSIIO32_LUN_THIRD_LEVEL_ADDRESSING     (0x0000FFFF)
+#define MPI_SCSIIO32_LUN_FOURTH_LEVEL_ADDRESSING    (0xFFFF0000)
+#define MPI_SCSIIO32_LUN_LEVEL_1_WORD               (0xFF00)
+#define MPI_SCSIIO32_LUN_LEVEL_1_DWORD              (0x0000FF00)
+
+/* SCSI IO 32 Control bits */
+#define MPI_SCSIIO32_CONTROL_DATADIRECTION_MASK     (0x03000000)
+#define MPI_SCSIIO32_CONTROL_NODATATRANSFER         (0x00000000)
+#define MPI_SCSIIO32_CONTROL_WRITE                  (0x01000000)
+#define MPI_SCSIIO32_CONTROL_READ                   (0x02000000)
+#define MPI_SCSIIO32_CONTROL_BIDIRECTIONAL          (0x03000000)
+
+#define MPI_SCSIIO32_CONTROL_ADDCDBLEN_MASK         (0xFC000000)
+#define MPI_SCSIIO32_CONTROL_ADDCDBLEN_SHIFT        (26)
+
+#define MPI_SCSIIO32_CONTROL_TASKATTRIBUTE_MASK     (0x00000700)
+#define MPI_SCSIIO32_CONTROL_SIMPLEQ                (0x00000000)
+#define MPI_SCSIIO32_CONTROL_HEADOFQ                (0x00000100)
+#define MPI_SCSIIO32_CONTROL_ORDEREDQ               (0x00000200)
+#define MPI_SCSIIO32_CONTROL_ACAQ                   (0x00000400)
+#define MPI_SCSIIO32_CONTROL_UNTAGGED               (0x00000500)
+#define MPI_SCSIIO32_CONTROL_NO_DISCONNECT          (0x00000700)
+
+#define MPI_SCSIIO32_CONTROL_TASKMANAGE_MASK        (0x00FF0000)
+#define MPI_SCSIIO32_CONTROL_OBSOLETE               (0x00800000)
+#define MPI_SCSIIO32_CONTROL_CLEAR_ACA_RSV          (0x00400000)
+#define MPI_SCSIIO32_CONTROL_TARGET_RESET           (0x00200000)
+#define MPI_SCSIIO32_CONTROL_LUN_RESET_RSV          (0x00100000)
+#define MPI_SCSIIO32_CONTROL_RESERVED               (0x00080000)
+#define MPI_SCSIIO32_CONTROL_CLR_TASK_SET_RSV       (0x00040000)
+#define MPI_SCSIIO32_CONTROL_ABORT_TASK_SET         (0x00020000)
+#define MPI_SCSIIO32_CONTROL_RESERVED2              (0x00010000)
+
+/* SCSI IO 32 EEDPFlags */
+#define MPI_SCSIIO32_EEDPFLAGS_MASK_OP              (0x0007)
+#define MPI_SCSIIO32_EEDPFLAGS_NOOP_OP              (0x0000)
+#define MPI_SCSIIO32_EEDPFLAGS_CHK_OP               (0x0001)
+#define MPI_SCSIIO32_EEDPFLAGS_STRIP_OP             (0x0002)
+#define MPI_SCSIIO32_EEDPFLAGS_CHKRM_OP             (0x0003)
+#define MPI_SCSIIO32_EEDPFLAGS_INSERT_OP            (0x0004)
+#define MPI_SCSIIO32_EEDPFLAGS_REPLACE_OP           (0x0006)
+#define MPI_SCSIIO32_EEDPFLAGS_CHKREGEN_OP          (0x0007)
+
+#define MPI_SCSIIO32_EEDPFLAGS_PASS_REF_TAG         (0x0008)
+#define MPI_SCSIIO32_EEDPFLAGS_8_9THS_MODE          (0x0010)
+
+#define MPI_SCSIIO32_EEDPFLAGS_T10_CHK_MASK         (0x0700)
+#define MPI_SCSIIO32_EEDPFLAGS_T10_CHK_GUARD        (0x0100)
+#define MPI_SCSIIO32_EEDPFLAGS_T10_CHK_REFTAG       (0x0200)
+#define MPI_SCSIIO32_EEDPFLAGS_T10_CHK_LBATAG       (0x0400)
+#define MPI_SCSIIO32_EEDPFLAGS_T10_CHK_SHIFT        (8)
+
+#define MPI_SCSIIO32_EEDPFLAGS_INC_SEC_APPTAG       (0x1000)
+#define MPI_SCSIIO32_EEDPFLAGS_INC_PRI_APPTAG       (0x2000)
+#define MPI_SCSIIO32_EEDPFLAGS_INC_SEC_REFTAG       (0x4000)
+#define MPI_SCSIIO32_EEDPFLAGS_INC_PRI_REFTAG       (0x8000)
+
+
+/* SCSIIO32 IO reply structure */
+typedef struct _MSG_SCSIIO32_IO_REPLY
+{
+    U8                      Port;                       /* 00h */
+    U8                      Reserved1;                  /* 01h */
+    U8                      MsgLength;                  /* 02h */
+    U8                      Function;                   /* 03h */
+    U8                      CDBLength;                  /* 04h */
+    U8                      SenseBufferLength;          /* 05h */
+    U8                      Flags;                      /* 06h */
+    U8                      MsgFlags;                   /* 07h */
+    U32                     MsgContext;                 /* 08h */
+    U8                      SCSIStatus;                 /* 0Ch */
+    U8                      SCSIState;                  /* 0Dh */
+    U16                     IOCStatus;                  /* 0Eh */
+    U32                     IOCLogInfo;                 /* 10h */
+    U32                     TransferCount;              /* 14h */
+    U32                     SenseCount;                 /* 18h */
+    U32                     ResponseInfo;               /* 1Ch */
+    U16                     TaskTag;                    /* 20h */
+    U16                     Reserved2;                  /* 22h */
+    U32                     BidirectionalTransferCount; /* 24h */
+} MSG_SCSIIO32_IO_REPLY, MPI_POINTER PTR_MSG_SCSIIO32_IO_REPLY,
+  SCSIIO32Reply_t, MPI_POINTER pSCSIIO32Reply_t;
+
+
 /****************************************************************************/
 /*  SCSI Task Management messages                                           */
 /****************************************************************************/
@@ -310,10 +503,14 @@ typedef struct _MSG_SEP_REQUEST
 #define MPI_SEP_REQ_SLOTSTATUS_UNCONFIGURED             (0x00000080)
 #define MPI_SEP_REQ_SLOTSTATUS_HOT_SPARE                (0x00000100)
 #define MPI_SEP_REQ_SLOTSTATUS_REBUILD_STOPPED          (0x00000200)
+#define MPI_SEP_REQ_SLOTSTATUS_REQ_CONSISTENCY_CHECK    (0x00001000)
+#define MPI_SEP_REQ_SLOTSTATUS_DISABLE                  (0x00002000)
+#define MPI_SEP_REQ_SLOTSTATUS_REQ_RESERVED_DEVICE      (0x00004000)
 #define MPI_SEP_REQ_SLOTSTATUS_IDENTIFY_REQUEST         (0x00020000)
 #define MPI_SEP_REQ_SLOTSTATUS_REQUEST_REMOVE           (0x00040000)
 #define MPI_SEP_REQ_SLOTSTATUS_REQUEST_INSERT           (0x00080000)
 #define MPI_SEP_REQ_SLOTSTATUS_DO_NOT_MOVE              (0x00400000)
+#define MPI_SEP_REQ_SLOTSTATUS_ACTIVE                   (0x00800000)
 #define MPI_SEP_REQ_SLOTSTATUS_B_ENABLE_BYPASS          (0x04000000)
 #define MPI_SEP_REQ_SLOTSTATUS_A_ENABLE_BYPASS          (0x08000000)
 #define MPI_SEP_REQ_SLOTSTATUS_DEV_OFF                  (0x10000000)
@@ -352,11 +549,15 @@ typedef struct _MSG_SEP_REPLY
 #define MPI_SEP_REPLY_SLOTSTATUS_UNCONFIGURED           (0x00000080)
 #define MPI_SEP_REPLY_SLOTSTATUS_HOT_SPARE              (0x00000100)
 #define MPI_SEP_REPLY_SLOTSTATUS_REBUILD_STOPPED        (0x00000200)
+#define MPI_SEP_REPLY_SLOTSTATUS_CONSISTENCY_CHECK      (0x00001000)
+#define MPI_SEP_REPLY_SLOTSTATUS_DISABLE                (0x00002000)
+#define MPI_SEP_REPLY_SLOTSTATUS_RESERVED_DEVICE        (0x00004000)
 #define MPI_SEP_REPLY_SLOTSTATUS_REPORT                 (0x00010000)
 #define MPI_SEP_REPLY_SLOTSTATUS_IDENTIFY_REQUEST       (0x00020000)
 #define MPI_SEP_REPLY_SLOTSTATUS_REMOVE_READY           (0x00040000)
 #define MPI_SEP_REPLY_SLOTSTATUS_INSERT_READY           (0x00080000)
 #define MPI_SEP_REPLY_SLOTSTATUS_DO_NOT_REMOVE          (0x00400000)
+#define MPI_SEP_REPLY_SLOTSTATUS_ACTIVE                 (0x00800000)
 #define MPI_SEP_REPLY_SLOTSTATUS_B_BYPASS_ENABLED       (0x01000000)
 #define MPI_SEP_REPLY_SLOTSTATUS_A_BYPASS_ENABLED       (0x02000000)
 #define MPI_SEP_REPLY_SLOTSTATUS_B_ENABLE_BYPASS        (0x04000000)
index f91eb4efe8cc043f6bcec48bad7f8b78bd05b369..93b70e2b426623813c290bca3315ac36705e1f24 100644 (file)
@@ -6,7 +6,7 @@
  *          Title:  MPI IOC, Port, Event, FW Download, and FW Upload messages
  *  Creation Date:  August 11, 2000
  *
- *    mpi_ioc.h Version:  01.05.08
+ *    mpi_ioc.h Version:  01.05.09
  *
  *  Version History
  *  ---------------
@@ -81,6 +81,8 @@
  *                      Reply and IOC Init Request.
  *  03-11-05  01.05.08  Added family code for 1068E family.
  *                      Removed IOCFacts Reply EEDP Capability bit.
+ *  06-24-05  01.05.09  Added 5 new IOCFacts Reply IOCCapabilities bits.
+ *                      Added Max SATA Targets to SAS Discovery Error event.
  *  --------------------------------------------------------------------------
  */
 
@@ -261,7 +263,11 @@ typedef struct _MSG_IOC_FACTS_REPLY
 #define MPI_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER       (0x00000008)
 #define MPI_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER         (0x00000010)
 #define MPI_IOCFACTS_CAPABILITY_EXTENDED_BUFFER         (0x00000020)
-
+#define MPI_IOCFACTS_CAPABILITY_EEDP                    (0x00000040)
+#define MPI_IOCFACTS_CAPABILITY_BIDIRECTIONAL           (0x00000080)
+#define MPI_IOCFACTS_CAPABILITY_MULTICAST               (0x00000100)
+#define MPI_IOCFACTS_CAPABILITY_SCSIIO32                (0x00000200)
+#define MPI_IOCFACTS_CAPABILITY_NO_SCSIIO16             (0x00000400)
 
 
 /*****************************************************************************
@@ -677,6 +683,7 @@ typedef struct _EVENT_DATA_DISCOVERY_ERROR
 #define MPI_EVENT_DSCVRY_ERR_DS_MULTPL_SUBTRACTIVE          (0x00000200)
 #define MPI_EVENT_DSCVRY_ERR_DS_TABLE_TO_TABLE              (0x00000400)
 #define MPI_EVENT_DSCVRY_ERR_DS_MULTPL_PATHS                (0x00000800)
+#define MPI_EVENT_DSCVRY_ERR_DS_MAX_SATA_TARGETS            (0x00001000)
 
 
 /*****************************************************************************
index 623901fd82be3a05a0197744baaecc11c25f4f65..3f462859ceea9fb904560607cc059182e743d786 100644 (file)
@@ -6,7 +6,7 @@
  *          Title:  MPI Target mode messages and structures
  *  Creation Date:  June 22, 2000
  *
- *    mpi_targ.h Version:  01.05.04
+ *    mpi_targ.h Version:  01.05.05
  *
  *  Version History
  *  ---------------
@@ -53,6 +53,7 @@
  *  10-05-04  01.05.02  MSG_TARGET_CMD_BUFFER_POST_BASE_LIST_REPLY added.
  *  02-22-05  01.05.03  Changed a comment.
  *  03-11-05  01.05.04  Removed TargetAssistExtended Request.
+ *  06-24-05  01.05.05  Added TargetAssistExtended structures and defines.
  *  --------------------------------------------------------------------------
  */
 
@@ -370,6 +371,77 @@ typedef struct _MSG_TARGET_ERROR_REPLY
   TargetErrorReply_t, MPI_POINTER pTargetErrorReply_t;
 
 
+/****************************************************************************/
+/* Target Assist Extended Request                                           */
+/****************************************************************************/
+
+typedef struct _MSG_TARGET_ASSIST_EXT_REQUEST
+{
+    U8                      StatusCode;                     /* 00h */
+    U8                      TargetAssistFlags;              /* 01h */
+    U8                      ChainOffset;                    /* 02h */
+    U8                      Function;                       /* 03h */
+    U16                     QueueTag;                       /* 04h */
+    U8                      Reserved1;                      /* 06h */
+    U8                      MsgFlags;                       /* 07h */
+    U32                     MsgContext;                     /* 08h */
+    U32                     ReplyWord;                      /* 0Ch */
+    U8                      LUN[8];                         /* 10h */
+    U32                     RelativeOffset;                 /* 18h */
+    U32                     Reserved2;                      /* 1Ch */
+    U32                     Reserved3;                      /* 20h */
+    U32                     PrimaryReferenceTag;            /* 24h */
+    U16                     PrimaryApplicationTag;          /* 28h */
+    U16                     PrimaryApplicationTagMask;      /* 2Ah */
+    U32                     Reserved4;                      /* 2Ch */
+    U32                     DataLength;                     /* 30h */
+    U32                     BidirectionalDataLength;        /* 34h */
+    U32                     SecondaryReferenceTag;          /* 38h */
+    U16                     SecondaryApplicationTag;        /* 3Ch */
+    U16                     Reserved5;                      /* 3Eh */
+    U16                     EEDPFlags;                      /* 40h */
+    U16                     ApplicationTagTranslationMask;  /* 42h */
+    U32                     EEDPBlockSize;                  /* 44h */
+    U8                      SGLOffset0;                     /* 48h */
+    U8                      SGLOffset1;                     /* 49h */
+    U8                      SGLOffset2;                     /* 4Ah */
+    U8                      SGLOffset3;                     /* 4Bh */
+    U32                     Reserved6;                      /* 4Ch */
+    SGE_IO_UNION            SGL[1];                         /* 50h */
+} MSG_TARGET_ASSIST_EXT_REQUEST, MPI_POINTER PTR_MSG_TARGET_ASSIST_EXT_REQUEST,
+  TargetAssistExtRequest_t, MPI_POINTER pTargetAssistExtRequest_t;
+
+/* see the defines after MSG_TARGET_ASSIST_REQUEST for TargetAssistFlags */
+
+/* defines for the MsgFlags field */
+#define TARGET_ASSIST_EXT_MSGFLAGS_BIDIRECTIONAL        (0x20)
+#define TARGET_ASSIST_EXT_MSGFLAGS_MULTICAST            (0x10)
+#define TARGET_ASSIST_EXT_MSGFLAGS_SGL_OFFSET_CHAINS    (0x08)
+
+/* defines for the EEDPFlags field */
+#define TARGET_ASSIST_EXT_EEDP_MASK_OP          (0x0007)
+#define TARGET_ASSIST_EXT_EEDP_NOOP_OP          (0x0000)
+#define TARGET_ASSIST_EXT_EEDP_CHK_OP           (0x0001)
+#define TARGET_ASSIST_EXT_EEDP_STRIP_OP         (0x0002)
+#define TARGET_ASSIST_EXT_EEDP_CHKRM_OP         (0x0003)
+#define TARGET_ASSIST_EXT_EEDP_INSERT_OP        (0x0004)
+#define TARGET_ASSIST_EXT_EEDP_REPLACE_OP       (0x0006)
+#define TARGET_ASSIST_EXT_EEDP_CHKREGEN_OP      (0x0007)
+
+#define TARGET_ASSIST_EXT_EEDP_PASS_REF_TAG     (0x0008)
+
+#define TARGET_ASSIST_EXT_EEDP_T10_CHK_MASK     (0x0700)
+#define TARGET_ASSIST_EXT_EEDP_T10_CHK_GUARD    (0x0100)
+#define TARGET_ASSIST_EXT_EEDP_T10_CHK_APPTAG   (0x0200)
+#define TARGET_ASSIST_EXT_EEDP_T10_CHK_REFTAG   (0x0400)
+#define TARGET_ASSIST_EXT_EEDP_T10_CHK_SHIFT    (8)
+
+#define TARGET_ASSIST_EXT_EEDP_INC_SEC_APPTAG   (0x1000)
+#define TARGET_ASSIST_EXT_EEDP_INC_PRI_APPTAG   (0x2000)
+#define TARGET_ASSIST_EXT_EEDP_INC_SEC_REFTAG   (0x4000)
+#define TARGET_ASSIST_EXT_EEDP_INC_PRI_REFTAG   (0x8000)
+
+
 /****************************************************************************/
 /* Target Status Send Request                                               */
 /****************************************************************************/
index ffbe6f4720e161da17c25ee6ecc549ef547be929..f517d0692d5faa08d960276d55dbc998d51b5945 100644 (file)
@@ -218,8 +218,7 @@ pci_enable_io_access(struct pci_dev *pdev)
  *     (also referred to as a IO Controller or IOC).
  *     This routine must clear the interrupt from the adapter and does
  *     so by reading the reply FIFO.  Multiple replies may be processed
- *     per single call to this routine; up to MPT_MAX_REPLIES_PER_ISR
- *     which is currently set to 32 in mptbase.h.
+ *     per single call to this routine.
  *
  *     This routine handles register-level access of the adapter but
  *     dispatches (calls) a protocol-specific callback routine to handle
@@ -279,11 +278,11 @@ mpt_interrupt(int irq, void *bus_id, struct pt_regs *r)
                        cb_idx = mr->u.frame.hwhdr.msgctxu.fld.cb_idx;
                        mf = MPT_INDEX_2_MFPTR(ioc, req_idx);
 
-                       dmfprintk((MYIOC_s_INFO_FMT "Got non-TURBO reply=%p req_idx=%x\n",
-                                       ioc->name, mr, req_idx));
+                       dmfprintk((MYIOC_s_INFO_FMT "Got non-TURBO reply=%p req_idx=%x cb_idx=%x Function=%x\n",
+                                       ioc->name, mr, req_idx, cb_idx, mr->u.hdr.Function));
                        DBG_DUMP_REPLY_FRAME(mr)
 
-                       /*  Check/log IOC log info
+                        /*  Check/log IOC log info
                         */
                        ioc_stat = le16_to_cpu(mr->u.reply.IOCStatus);
                        if (ioc_stat & MPI_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE) {
@@ -345,7 +344,7 @@ mpt_interrupt(int irq, void *bus_id, struct pt_regs *r)
                        if ((mf) && ((mf >= MPT_INDEX_2_MFPTR(ioc, ioc->req_depth))
                                || (mf < ioc->req_frames)) ) {
                                printk(MYIOC_s_WARN_FMT
-                                       "mpt_interrupt: Invalid mf (%p) req_idx (%d)!\n", ioc->name, (void *)mf, req_idx);
+                                       "mpt_interrupt: Invalid mf (%p)!\n", ioc->name, (void *)mf);
                                cb_idx = 0;
                                pa = 0;
                                freeme = 0;
@@ -399,7 +398,7 @@ mpt_interrupt(int irq, void *bus_id, struct pt_regs *r)
  *     @mf: Pointer to original MPT request frame
  *     @reply: Pointer to MPT reply frame (NULL if TurboReply)
  *
      *       Returns 1 indicating original alloc'd request frame ptr
*     Returns 1 indicating original alloc'd request frame ptr
  *     should be freed, or 0 if it shouldn't.
  */
 static int
@@ -408,28 +407,17 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply)
        int freereq = 1;
        u8 func;
 
-       dprintk((MYIOC_s_INFO_FMT "mpt_base_reply() called\n", ioc->name));
-
-       if ((mf == NULL) ||
-           (mf >= MPT_INDEX_2_MFPTR(ioc, ioc->req_depth))) {
-               printk(MYIOC_s_ERR_FMT "NULL or BAD request frame ptr! (=%p)\n",
-                               ioc->name, (void *)mf);
-               return 1;
-       }
-
-       if (reply == NULL) {
-               dprintk((MYIOC_s_ERR_FMT "Unexpected NULL Event (turbo?) reply!\n",
-                               ioc->name));
-               return 1;
-       }
+       dmfprintk((MYIOC_s_INFO_FMT "mpt_base_reply() called\n", ioc->name));
 
+#if defined(MPT_DEBUG_MSG_FRAME)
        if (!(reply->u.hdr.MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY)) {
                dmfprintk((KERN_INFO MYNAM ": Original request frame (@%p) header\n", mf));
                DBG_DUMP_REQUEST_FRAME_HDR(mf)
        }
+#endif
 
        func = reply->u.hdr.Function;
-       dprintk((MYIOC_s_INFO_FMT "mpt_base_reply, Function=%02Xh\n",
+       dmfprintk((MYIOC_s_INFO_FMT "mpt_base_reply, Function=%02Xh\n",
                        ioc->name, func));
 
        if (func == MPI_FUNCTION_EVENT_NOTIFICATION) {
@@ -448,8 +436,14 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply)
                 *      Hmmm...  It seems that EventNotificationReply is an exception
                 *      to the rule of one reply per request.
                 */
-               if (pEvReply->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY)
+               if (pEvReply->MsgFlags & MPI_MSGFLAGS_CONTINUATION_REPLY) {
                        freereq = 0;
+                       devtprintk((MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p does not return Request frame\n",
+                               ioc->name, pEvReply));
+               } else {
+                       devtprintk((MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p returns Request frame\n",
+                               ioc->name, pEvReply));
+               }
 
 #ifdef CONFIG_PROC_FS
 //             LogEvent(ioc, pEvReply);
@@ -491,10 +485,21 @@ mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply)
 
                                pCfg->status = status;
                                if (status == MPI_IOCSTATUS_SUCCESS) {
-                                       pCfg->hdr->PageVersion = pReply->Header.PageVersion;
-                                       pCfg->hdr->PageLength = pReply->Header.PageLength;
-                                       pCfg->hdr->PageNumber = pReply->Header.PageNumber;
-                                       pCfg->hdr->PageType = pReply->Header.PageType;
+                                       if ((pReply->Header.PageType &
+                                           MPI_CONFIG_PAGETYPE_MASK) ==
+                                           MPI_CONFIG_PAGETYPE_EXTENDED) {
+                                               pCfg->cfghdr.ehdr->ExtPageLength =
+                                                   le16_to_cpu(pReply->ExtPageLength);
+                                               pCfg->cfghdr.ehdr->ExtPageType =
+                                                   pReply->ExtPageType;
+                                       }
+                                       pCfg->cfghdr.hdr->PageVersion = pReply->Header.PageVersion;
+
+                                       /* If this is a regular header, save PageLength. */
+                                       /* LMP Do this better so not using a reserved field! */
+                                       pCfg->cfghdr.hdr->PageLength = pReply->Header.PageLength;
+                                       pCfg->cfghdr.hdr->PageNumber = pReply->Header.PageNumber;
+                                       pCfg->cfghdr.hdr->PageType = pReply->Header.PageType;
                                }
                        }
 
@@ -705,7 +710,7 @@ mpt_device_driver_deregister(int cb_idx)
                if (dd_cbfunc->remove)
                        dd_cbfunc->remove(ioc->pcidev);
        }
-       
+
        MptDeviceDriverHandlers[cb_idx] = NULL;
 }
 
@@ -818,7 +823,7 @@ mpt_put_msg_frame(int handle, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)
        }
 #endif
 
-       mf_dma_addr = (ioc->req_frames_low_dma + req_offset) | ioc->RequestNB[req_idx];  
+       mf_dma_addr = (ioc->req_frames_low_dma + req_offset) | ioc->RequestNB[req_idx];
        dsgprintk((MYIOC_s_INFO_FMT "mf_dma_addr=%x req_idx=%d RequestNB=%x\n", ioc->name, mf_dma_addr, req_idx, ioc->RequestNB[req_idx]));
        CHIPREG_WRITE32(&ioc->chip->RequestFifo, mf_dma_addr);
 }
@@ -920,7 +925,7 @@ mpt_send_handshake_request(int handle, MPT_ADAPTER *ioc, int reqBytes, u32 *req,
 
        /* Make sure there are no doorbells */
        CHIPREG_WRITE32(&ioc->chip->IntStatus, 0);
-       
+
        CHIPREG_WRITE32(&ioc->chip->Doorbell,
                        ((MPI_FUNCTION_HANDSHAKE<<MPI_DOORBELL_FUNCTION_SHIFT) |
                         ((reqBytes/4)<<MPI_DOORBELL_ADD_DWORDS_SHIFT)));
@@ -935,14 +940,14 @@ mpt_send_handshake_request(int handle, MPT_ADAPTER *ioc, int reqBytes, u32 *req,
                return -5;
 
        dhsprintk((KERN_INFO MYNAM ": %s: mpt_send_handshake_request start, WaitCnt=%d\n",
-                       ioc->name, ii));
+               ioc->name, ii));
 
        CHIPREG_WRITE32(&ioc->chip->IntStatus, 0);
 
        if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) {
                return -2;
        }
-               
+
        /* Send request via doorbell handshake */
        req_as_bytes = (u8 *) req;
        for (ii = 0; ii < reqBytes/4; ii++) {
@@ -988,9 +993,9 @@ mpt_verify_adapter(int iocid, MPT_ADAPTER **iocpp)
                if (ioc->id == iocid) {
                        *iocpp =ioc;
                        return iocid;
-               } 
+               }
        }
-       
+
        *iocpp = NULL;
        return -1;
 }
@@ -1032,9 +1037,9 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
 
        if (pci_enable_device(pdev))
                return r;
-       
+
        dinitprintk((KERN_WARNING MYNAM ": mpt_adapter_install\n"));
-       
+
        if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
                dprintk((KERN_INFO MYNAM
                        ": 64 BIT PCI BUS DMA ADDRESSING SUPPORTED\n"));
@@ -1059,7 +1064,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
        ioc->alloc_total = sizeof(MPT_ADAPTER);
        ioc->req_sz = MPT_DEFAULT_FRAME_SIZE;           /* avoid div by zero! */
        ioc->reply_sz = MPT_REPLY_FRAME_SIZE;
-       
+
        ioc->pcidev = pdev;
        ioc->diagPending = 0;
        spin_lock_init(&ioc->diagLock);
@@ -1088,7 +1093,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
        /* Find lookup slot. */
        INIT_LIST_HEAD(&ioc->list);
        ioc->id = mpt_ids++;
-       
+
        mem_phys = msize = 0;
        port = psize = 0;
        for (ii=0; ii < DEVICE_COUNT_RESOURCE; ii++) {
@@ -1143,7 +1148,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
                ioc->prod_name = "LSIFC909";
                ioc->bus_type = FC;
        }
-       if (pdev->device == MPI_MANUFACTPAGE_DEVICEID_FC929) {
+       else if (pdev->device == MPI_MANUFACTPAGE_DEVICEID_FC929) {
                ioc->prod_name = "LSIFC929";
                ioc->bus_type = FC;
        }
@@ -1322,7 +1327,7 @@ mpt_detach(struct pci_dev *pdev)
        remove_proc_entry(pname, NULL);
        sprintf(pname, MPT_PROCFS_MPTBASEDIR "/%s", ioc->name);
        remove_proc_entry(pname, NULL);
-       
+
        /* call per device driver remove entry point */
        for(ii=0; ii<MPT_MAX_PROTOCOL_DRIVERS; ii++) {
                if(MptDeviceDriverHandlers[ii] &&
@@ -1330,7 +1335,7 @@ mpt_detach(struct pci_dev *pdev)
                        MptDeviceDriverHandlers[ii]->remove(pdev);
                }
        }
-       
+
        /* Disable interrupts! */
        CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF);
 
@@ -1403,7 +1408,7 @@ mpt_resume(struct pci_dev *pdev)
        u32 device_state = pdev->current_state;
        int recovery_state;
        int ii;
-       
+
        printk(MYIOC_s_INFO_FMT
        "pci-resume: pdev=0x%p, slot=%s, Previous operating state [D%d]\n",
                ioc->name, pdev, pci_name(pdev), device_state);
@@ -1534,7 +1539,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
                if ((rc = GetIocFacts(ioc, sleepFlag, reason)) == 0)
                        break;
        }
-       
+
 
        if (ii == 5) {
                dinitprintk((MYIOC_s_INFO_FMT "Retry IocFacts failed rc=%x\n", ioc->name, rc));
@@ -1542,7 +1547,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
        } else if (reason == MPT_HOSTEVENT_IOC_BRINGUP) {
                MptDisplayIocCapabilities(ioc);
        }
-       
+
        if (alt_ioc_ready) {
                if ((rc = GetIocFacts(ioc->alt_ioc, sleepFlag, reason)) != 0) {
                        dinitprintk((MYIOC_s_INFO_FMT "Initial Alt IocFacts failed rc=%x\n", ioc->name, rc));
@@ -1613,7 +1618,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
 
        if (reset_alt_ioc_active && ioc->alt_ioc) {
                /* (re)Enable alt-IOC! (reply interrupt) */
-               dprintk((KERN_INFO MYNAM ": alt-%s reply irq re-enabled\n",
+               dinitprintk((KERN_INFO MYNAM ": alt-%s reply irq re-enabled\n",
                                ioc->alt_ioc->name));
                CHIPREG_WRITE32(&ioc->alt_ioc->chip->IntMask, ~(MPI_HIM_RIM));
                ioc->alt_ioc->active = 1;
@@ -1670,7 +1675,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
 
                        /* Find IM volumes
                         */
-                       if (ioc->facts.MsgVersion >= 0x0102)
+                       if (ioc->facts.MsgVersion >= MPI_VERSION_01_02)
                                mpt_findImVolumes(ioc);
 
                        /* Check, and possibly reset, the coalescing value
@@ -1700,7 +1705,7 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
                        }
 
                        if (alt_ioc_ready && MptResetHandlers[ii]) {
-                               dprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n",
+                               drsprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n",
                                                ioc->name, ioc->alt_ioc->name, ii));
                                rc += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_POST_RESET);
                                handlers++;
@@ -1733,8 +1738,8 @@ mpt_detect_bound_ports(MPT_ADAPTER *ioc, struct pci_dev *pdev)
 
        dprintk((MYIOC_s_INFO_FMT "PCI device %s devfn=%x/%x,"
            " searching for devfn match on %x or %x\n",
-               ioc->name, pci_name(pdev), pdev->devfn,
-               func-1, func+1));
+               ioc->name, pci_name(pdev), pdev->bus->number,
+               pdev->devfn, func-1, func+1));
 
        peer = pci_get_slot(pdev->bus, PCI_DEVFN(slot,func-1));
        if (!peer) {
@@ -1861,36 +1866,39 @@ mpt_adapter_disable(MPT_ADAPTER *ioc)
 static void
 mpt_adapter_dispose(MPT_ADAPTER *ioc)
 {
-       if (ioc != NULL) {
-               int sz_first, sz_last;
+       int sz_first, sz_last;
 
-               sz_first = ioc->alloc_total;
+       if (ioc == NULL)
+               return;
 
-               mpt_adapter_disable(ioc);
+       sz_first = ioc->alloc_total;
 
-               if (ioc->pci_irq != -1) {
-                       free_irq(ioc->pci_irq, ioc);
-                       ioc->pci_irq = -1;
-               }
+       mpt_adapter_disable(ioc);
 
-               if (ioc->memmap != NULL)
-                       iounmap(ioc->memmap);
+       if (ioc->pci_irq != -1) {
+               free_irq(ioc->pci_irq, ioc);
+               ioc->pci_irq = -1;
+       }
+
+       if (ioc->memmap != NULL) {
+               iounmap(ioc->memmap);
+               ioc->memmap = NULL;
+       }
 
 #if defined(CONFIG_MTRR) && 0
-               if (ioc->mtrr_reg > 0) {
-                       mtrr_del(ioc->mtrr_reg, 0, 0);
-                       dprintk((KERN_INFO MYNAM ": %s: MTRR region de-registered\n", ioc->name));
-               }
+       if (ioc->mtrr_reg > 0) {
+               mtrr_del(ioc->mtrr_reg, 0, 0);
+               dprintk((KERN_INFO MYNAM ": %s: MTRR region de-registered\n", ioc->name));
+       }
 #endif
 
-               /*  Zap the adapter lookup ptr!  */
-               list_del(&ioc->list);
+       /*  Zap the adapter lookup ptr!  */
+       list_del(&ioc->list);
 
-               sz_last = ioc->alloc_total;
-               dprintk((KERN_INFO MYNAM ": %s: free'd %d of %d bytes\n",
-                               ioc->name, sz_first-sz_last+(int)sizeof(*ioc), sz_first));
-               kfree(ioc);
-       }
+       sz_last = ioc->alloc_total;
+       dprintk((KERN_INFO MYNAM ": %s: free'd %d of %d bytes\n",
+                       ioc->name, sz_first-sz_last+(int)sizeof(*ioc), sz_first));
+       kfree(ioc);
 }
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
@@ -1977,7 +1985,7 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag)
        }
 
        /* Is it already READY? */
-       if (!statefault && (ioc_state & MPI_IOC_STATE_MASK) == MPI_IOC_STATE_READY) 
+       if (!statefault && (ioc_state & MPI_IOC_STATE_MASK) == MPI_IOC_STATE_READY)
                return 0;
 
        /*
@@ -1995,7 +2003,7 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag)
         *      Hmmm...  Did it get left operational?
         */
        if ((ioc_state & MPI_IOC_STATE_MASK) == MPI_IOC_STATE_OPERATIONAL) {
-               dinitprintk((MYIOC_s_WARN_FMT "IOC operational unexpected\n",
+               dinitprintk((MYIOC_s_INFO_FMT "IOC operational unexpected\n",
                                ioc->name));
 
                /* Check WhoInit.
@@ -2004,8 +2012,8 @@ MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag)
                 * Else, fall through to KickStart case
                 */
                whoinit = (ioc_state & MPI_DOORBELL_WHO_INIT_MASK) >> MPI_DOORBELL_WHO_INIT_SHIFT;
-               dprintk((KERN_WARNING MYNAM
-                       ": whoinit 0x%x\n statefault %d force %d\n",
+               dinitprintk((KERN_INFO MYNAM
+                       ": whoinit 0x%x statefault %d force %d\n",
                        whoinit, statefault, force));
                if (whoinit == MPI_WHOINIT_PCI_PEER)
                        return -4;
@@ -2140,8 +2148,8 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason)
        get_facts.Function = MPI_FUNCTION_IOC_FACTS;
        /* Assert: All other get_facts fields are zero! */
 
-       dinitprintk((MYIOC_s_INFO_FMT 
-           "Sending get IocFacts request req_sz=%d reply_sz=%d\n", 
+       dinitprintk((MYIOC_s_INFO_FMT
+           "Sending get IocFacts request req_sz=%d reply_sz=%d\n",
            ioc->name, req_sz, reply_sz));
 
        /* No non-zero fields in the get_facts request are greater than
@@ -2174,7 +2182,7 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason)
                facts->IOCExceptions = le16_to_cpu(facts->IOCExceptions);
                facts->IOCStatus = le16_to_cpu(facts->IOCStatus);
                facts->IOCLogInfo = le32_to_cpu(facts->IOCLogInfo);
-               status = facts->IOCStatus & MPI_IOCSTATUS_MASK;
+               status = le16_to_cpu(facts->IOCStatus) & MPI_IOCSTATUS_MASK;
                /* CHECKME! IOCStatus, IOCLogInfo */
 
                facts->ReplyQueueDepth = le16_to_cpu(facts->ReplyQueueDepth);
@@ -2221,7 +2229,7 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason)
                if ( sz & 0x02 )
                        sz += 2;
                facts->FWImageSize = sz;
-               
+
                if (!facts->RequestFrameSize) {
                        /*  Something is wrong!  */
                        printk(MYIOC_s_ERR_FMT "IOC reported invalid 0 request size!\n",
@@ -2240,7 +2248,7 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason)
                ioc->NBShiftFactor  = shiftFactor;
                dinitprintk((MYIOC_s_INFO_FMT "NB_for_64_byte_frame=%x NBShiftFactor=%x BlockSize=%x\n",
                                        ioc->name, vv, shiftFactor, r));
-    
+
                if (reason == MPT_HOSTEVENT_IOC_BRINGUP) {
                        /*
                         * Set values for this IOC's request & reply frame sizes,
@@ -2261,7 +2269,7 @@ GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason)
                                return r;
                }
        } else {
-               printk(MYIOC_s_ERR_FMT 
+               printk(MYIOC_s_ERR_FMT
                     "Invalid IOC facts reply, msgLength=%d offsetof=%zd!\n",
                     ioc->name, facts->MsgLength, (offsetof(IOCFactsReply_t,
                     RequestFrameSize)/sizeof(u32)));
@@ -2413,9 +2421,11 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFlag)
 
        dhsprintk((MYIOC_s_INFO_FMT "Sending PortEnable (req @ %p)\n",
                        ioc->name, &ioc_init));
-       
-       if ((r = SendPortEnable(ioc, 0, sleepFlag)) != 0)
+
+       if ((r = SendPortEnable(ioc, 0, sleepFlag)) != 0) {
+               printk(MYIOC_s_ERR_FMT "Sending PortEnable failed(%d)!\n",ioc->name, r);
                return r;
+       }
 
        /* YIKES!  SUPER IMPORTANT!!!
         *  Poll IocState until _OPERATIONAL while IOC is doing
@@ -2440,7 +2450,7 @@ SendIocInit(MPT_ADAPTER *ioc, int sleepFlag)
                state = mpt_GetIocState(ioc, 1);
                count++;
        }
-       dhsprintk((MYIOC_s_INFO_FMT "INFO - Wait IOC_OPERATIONAL state (cnt=%d)\n",
+       dinitprintk((MYIOC_s_INFO_FMT "INFO - Wait IOC_OPERATIONAL state (cnt=%d)\n",
                        ioc->name, count));
 
        return r;
@@ -2529,7 +2539,7 @@ mpt_free_fw_memory(MPT_ADAPTER *ioc)
        int sz;
 
        sz = ioc->facts.FWImageSize;
-       dinitprintk((KERN_WARNING MYNAM "free_fw_memory: FW Image  @ %p[%p], sz=%d[%x] bytes\n",
+       dinitprintk((KERN_INFO MYNAM "free_fw_memory: FW Image  @ %p[%p], sz=%d[%x] bytes\n",
                 ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, sz, sz));
        pci_free_consistent(ioc->pcidev, sz,
                        ioc->cached_fw, ioc->cached_fw_dma);
@@ -2573,9 +2583,9 @@ mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag)
 
        mpt_alloc_fw_memory(ioc, sz);
 
-       dinitprintk((KERN_WARNING MYNAM ": FW Image  @ %p[%p], sz=%d[%x] bytes\n",
+       dinitprintk((KERN_INFO MYNAM ": FW Image  @ %p[%p], sz=%d[%x] bytes\n",
                 ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, sz, sz));
-       
+
        if (ioc->cached_fw == NULL) {
                /* Major Failure.
                 */
@@ -2605,14 +2615,14 @@ mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag)
        mpt_add_sge(&request[sgeoffset], flagsLength, ioc->cached_fw_dma);
 
        sgeoffset += sizeof(u32) + sizeof(dma_addr_t);
-       dinitprintk((KERN_WARNING MYNAM "Sending FW Upload (req @ %p) sgeoffset=%d \n",
+       dinitprintk((KERN_INFO MYNAM ": Sending FW Upload (req @ %p) sgeoffset=%d \n",
                        prequest, sgeoffset));
        DBG_DUMP_FW_REQUEST_FRAME(prequest)
 
        ii = mpt_handshake_req_reply_wait(ioc, sgeoffset, (u32*)prequest,
                                reply_sz, (u16*)preply, 65 /*seconds*/, sleepFlag);
 
-       dinitprintk((KERN_WARNING MYNAM "FW Upload completed rc=%x \n", ii));
+       dinitprintk((KERN_INFO MYNAM ": FW Upload completed rc=%x \n", ii));
 
        cmdStatus = -EFAULT;
        if (ii == 0) {
@@ -2627,10 +2637,10 @@ mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag)
                                cmdStatus = 0;
                }
        }
-       dinitprintk((MYIOC_s_INFO_FMT ": do_upload status %d \n",
+       dinitprintk((MYIOC_s_INFO_FMT ": do_upload cmdStatus=%d \n",
                        ioc->name, cmdStatus));
 
-       
+
        if (cmdStatus) {
 
                ddlprintk((MYIOC_s_INFO_FMT ": fw upload failed, freeing image \n",
@@ -2761,8 +2771,8 @@ mpt_downloadboot(MPT_ADAPTER *ioc, int sleepFlag)
                fwSize = (pExtImage->ImageSize + 3) >> 2;
                ptrFw = (u32 *)pExtImage;
 
-               ddlprintk((MYIOC_s_INFO_FMT "Write Ext Image: 0x%x bytes @ %p load_addr=%x\n",
-                                               ioc->name, fwSize*4, ptrFw, load_addr));
+               ddlprintk((MYIOC_s_INFO_FMT "Write Ext Image: 0x%x (%d) bytes @ %p load_addr=%x\n",
+                                               ioc->name, fwSize*4, fwSize*4, ptrFw, load_addr));
                CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, load_addr);
 
                while (fwSize--) {
@@ -2845,9 +2855,9 @@ mpt_downloadboot(MPT_ADAPTER *ioc, int sleepFlag)
  *                       0 else
  *
  *     Returns:
- *              1 - hard reset, READY  
- *              0 - no reset due to History bit, READY 
- *             -1 - no reset due to History bit but not READY  
+ *              1 - hard reset, READY
+ *              0 - no reset due to History bit, READY
+ *             -1 - no reset due to History bit but not READY
  *                  OR reset but failed to come READY
  *             -2 - no reset, could not enter DIAG mode
  *             -3 - reset but bad FW bit
@@ -2990,7 +3000,7 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
                 *
                 */
                CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val | MPI_DIAG_DISABLE_ARM);
-               mdelay (1);
+               mdelay(1);
 
                /*
                 * Now hit the reset bit in the Diagnostic register
@@ -3170,7 +3180,7 @@ SendIocReset(MPT_ADAPTER *ioc, u8 reset_type, int sleepFlag)
        u32 state;
        int cntdn, count;
 
-       drsprintk((KERN_WARNING MYNAM ": %s: Sending IOC reset(0x%02x)!\n",
+       drsprintk((KERN_INFO MYNAM ": %s: Sending IOC reset(0x%02x)!\n",
                        ioc->name, reset_type));
        CHIPREG_WRITE32(&ioc->chip->Doorbell, reset_type<<MPI_DOORBELL_FUNCTION_SHIFT);
        if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0)
@@ -3374,6 +3384,9 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                ioc->reply_frames = (MPT_FRAME_HDR *) mem;
                ioc->reply_frames_low_dma = (u32) (alloc_dma & 0xFFFFFFFF);
 
+               dinitprintk((KERN_INFO MYNAM ": %s ReplyBuffers @ %p[%p]\n",
+                       ioc->name, ioc->reply_frames, (void *)(ulong)alloc_dma));
+
                alloc_dma += reply_sz;
                mem += reply_sz;
 
@@ -3382,7 +3395,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                ioc->req_frames = (MPT_FRAME_HDR *) mem;
                ioc->req_frames_dma = alloc_dma;
 
-               dinitprintk((KERN_INFO MYNAM ": %s.RequestBuffers @ %p[%p]\n",
+               dinitprintk((KERN_INFO MYNAM ": %s RequestBuffers @ %p[%p]\n",
                                ioc->name, mem, (void *)(ulong)alloc_dma));
 
                ioc->req_frames_low_dma = (u32) (alloc_dma & 0xFFFFFFFF);
@@ -3408,7 +3421,7 @@ PrimeIocFifos(MPT_ADAPTER *ioc)
                ioc->ChainBuffer = mem;
                ioc->ChainBufferDMA = alloc_dma;
 
-               dinitprintk((KERN_INFO MYNAM " :%s.ChainBuffers @ %p(%p)\n",
+               dinitprintk((KERN_INFO MYNAM " :%s ChainBuffers @ %p(%p)\n",
                        ioc->name, ioc->ChainBuffer, (void *)(ulong)ioc->ChainBufferDMA));
 
                /* Initialize the free chain Q.
@@ -3513,7 +3526,7 @@ out_fail:
  */
 static int
 mpt_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes, u32 *req,
-                               int replyBytes, u16 *u16reply, int maxwait, int sleepFlag)
+               int replyBytes, u16 *u16reply, int maxwait, int sleepFlag)
 {
        MPIDefaultReply_t *mptReply;
        int failcnt = 0;
@@ -3588,7 +3601,7 @@ mpt_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes, u32 *req,
                 */
                if (!failcnt && (t = WaitForDoorbellReply(ioc, maxwait, sleepFlag)) < 0)
                        failcnt++;
-               
+
                dhsprintk((MYIOC_s_INFO_FMT "HandShake reply count=%d%s\n",
                                ioc->name, t, failcnt ? " - MISSING DOORBELL REPLY!" : ""));
 
@@ -3747,7 +3760,7 @@ WaitForDoorbellReply(MPT_ADAPTER *ioc, int howlong, int sleepFlag)
        }
 
        dhsprintk((MYIOC_s_INFO_FMT "WaitCnt=%d First handshake reply word=%08x%s\n",
-                       ioc->name, t, le32_to_cpu(*(u32 *)hs_reply), 
+                       ioc->name, t, le32_to_cpu(*(u32 *)hs_reply),
                        failcnt ? " - MISSING DOORBELL HANDSHAKE!" : ""));
 
        /*
@@ -3819,7 +3832,7 @@ GetLanConfigPages(MPT_ADAPTER *ioc)
        hdr.PageLength = 0;
        hdr.PageNumber = 0;
        hdr.PageType = MPI_CONFIG_PAGETYPE_LAN;
-       cfg.hdr = &hdr;
+       cfg.cfghdr.hdr = &hdr;
        cfg.physAddr = -1;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
        cfg.dir = 0;
@@ -3863,7 +3876,7 @@ GetLanConfigPages(MPT_ADAPTER *ioc)
        hdr.PageLength = 0;
        hdr.PageNumber = 1;
        hdr.PageType = MPI_CONFIG_PAGETYPE_LAN;
-       cfg.hdr = &hdr;
+       cfg.cfghdr.hdr = &hdr;
        cfg.physAddr = -1;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
        cfg.dir = 0;
@@ -3930,7 +3943,7 @@ GetFcPortPage0(MPT_ADAPTER *ioc, int portnum)
        hdr.PageLength = 0;
        hdr.PageNumber = 0;
        hdr.PageType = MPI_CONFIG_PAGETYPE_FC_PORT;
-       cfg.hdr = &hdr;
+       cfg.cfghdr.hdr = &hdr;
        cfg.physAddr = -1;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
        cfg.dir = 0;
@@ -4012,7 +4025,7 @@ GetIoUnitPage2(MPT_ADAPTER *ioc)
        hdr.PageLength = 0;
        hdr.PageNumber = 2;
        hdr.PageType = MPI_CONFIG_PAGETYPE_IO_UNIT;
-       cfg.hdr = &hdr;
+       cfg.cfghdr.hdr = &hdr;
        cfg.physAddr = -1;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
        cfg.dir = 0;
@@ -4102,7 +4115,7 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
        header.PageLength = 0;
        header.PageNumber = 0;
        header.PageType = MPI_CONFIG_PAGETYPE_SCSI_PORT;
-       cfg.hdr = &header;
+       cfg.cfghdr.hdr = &header;
        cfg.physAddr = -1;
        cfg.pageAddr = portnum;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
@@ -4122,6 +4135,8 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
                                ioc->spi_data.minSyncFactor = MPT_ASYNC;
                                ioc->spi_data.busType = MPT_HOST_BUS_UNKNOWN;
                                rc = 1;
+                               ddvprintk((MYIOC_s_INFO_FMT "Unable to read PortPage0 minSyncFactor=%x\n",
+                                       ioc->name, ioc->spi_data.minSyncFactor));
                        } else {
                                /* Save the Port Page 0 data
                                 */
@@ -4131,7 +4146,7 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
 
                                if ( (pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_QAS) == 0 ) {
                                        ioc->spi_data.noQas |= MPT_TARGET_NO_NEGO_QAS;
-                                       dinitprintk((KERN_INFO MYNAM " :%s noQas due to Capabilities=%x\n",
+                                       ddvprintk((KERN_INFO MYNAM " :%s noQas due to Capabilities=%x\n",
                                                ioc->name, pPP0->Capabilities));
                                }
                                ioc->spi_data.maxBusWidth = pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_WIDE ? 1 : 0;
@@ -4140,6 +4155,8 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
                                        ioc->spi_data.maxSyncOffset = (u8) (data >> 16);
                                        data = pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_MIN_SYNC_PERIOD_MASK;
                                        ioc->spi_data.minSyncFactor = (u8) (data >> 8);
+                                       ddvprintk((MYIOC_s_INFO_FMT "PortPage0 minSyncFactor=%x\n",
+                                               ioc->name, ioc->spi_data.minSyncFactor));
                                } else {
                                        ioc->spi_data.maxSyncOffset = 0;
                                        ioc->spi_data.minSyncFactor = MPT_ASYNC;
@@ -4152,8 +4169,11 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
                                if ((ioc->spi_data.busType == MPI_SCSIPORTPAGE0_PHY_SIGNAL_HVD) ||
                                        (ioc->spi_data.busType == MPI_SCSIPORTPAGE0_PHY_SIGNAL_SE))  {
 
-                               if (ioc->spi_data.minSyncFactor < MPT_ULTRA)
+                                       if (ioc->spi_data.minSyncFactor < MPT_ULTRA) {
                                                ioc->spi_data.minSyncFactor = MPT_ULTRA;
+                                               ddvprintk((MYIOC_s_INFO_FMT "HVD or SE detected, minSyncFactor=%x\n",
+                                                       ioc->name, ioc->spi_data.minSyncFactor));
+                                       }
                                }
                        }
                        if (pbuf) {
@@ -4168,7 +4188,7 @@ mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum)
        header.PageLength = 0;
        header.PageNumber = 2;
        header.PageType = MPI_CONFIG_PAGETYPE_SCSI_PORT;
-       cfg.hdr = &header;
+       cfg.cfghdr.hdr = &header;
        cfg.physAddr = -1;
        cfg.pageAddr = portnum;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
@@ -4236,7 +4256,7 @@ mpt_readScsiDevicePageHeaders(MPT_ADAPTER *ioc, int portnum)
        header.PageLength = 0;
        header.PageNumber = 1;
        header.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE;
-       cfg.hdr = &header;
+       cfg.cfghdr.hdr = &header;
        cfg.physAddr = -1;
        cfg.pageAddr = portnum;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
@@ -4245,8 +4265,8 @@ mpt_readScsiDevicePageHeaders(MPT_ADAPTER *ioc, int portnum)
        if (mpt_config(ioc, &cfg) != 0)
                 return -EFAULT;
 
-       ioc->spi_data.sdp1version = cfg.hdr->PageVersion;
-       ioc->spi_data.sdp1length = cfg.hdr->PageLength;
+       ioc->spi_data.sdp1version = cfg.cfghdr.hdr->PageVersion;
+       ioc->spi_data.sdp1length = cfg.cfghdr.hdr->PageLength;
 
        header.PageVersion = 0;
        header.PageLength = 0;
@@ -4255,8 +4275,8 @@ mpt_readScsiDevicePageHeaders(MPT_ADAPTER *ioc, int portnum)
        if (mpt_config(ioc, &cfg) != 0)
                 return -EFAULT;
 
-       ioc->spi_data.sdp0version = cfg.hdr->PageVersion;
-       ioc->spi_data.sdp0length = cfg.hdr->PageLength;
+       ioc->spi_data.sdp0version = cfg.cfghdr.hdr->PageVersion;
+       ioc->spi_data.sdp0length = cfg.cfghdr.hdr->PageLength;
 
        dcprintk((MYIOC_s_INFO_FMT "Headers: 0: version %d length %d\n",
                        ioc->name, ioc->spi_data.sdp0version, ioc->spi_data.sdp0length));
@@ -4298,7 +4318,7 @@ mpt_findImVolumes(MPT_ADAPTER *ioc)
        header.PageLength = 0;
        header.PageNumber = 2;
        header.PageType = MPI_CONFIG_PAGETYPE_IOC;
-       cfg.hdr = &header;
+       cfg.cfghdr.hdr = &header;
        cfg.physAddr = -1;
        cfg.pageAddr = 0;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
@@ -4394,7 +4414,7 @@ mpt_read_ioc_pg_3(MPT_ADAPTER *ioc)
        header.PageLength = 0;
        header.PageNumber = 3;
        header.PageType = MPI_CONFIG_PAGETYPE_IOC;
-       cfg.hdr = &header;
+       cfg.cfghdr.hdr = &header;
        cfg.physAddr = -1;
        cfg.pageAddr = 0;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
@@ -4446,7 +4466,7 @@ mpt_read_ioc_pg_4(MPT_ADAPTER *ioc)
        header.PageLength = 0;
        header.PageNumber = 4;
        header.PageType = MPI_CONFIG_PAGETYPE_IOC;
-       cfg.hdr = &header;
+       cfg.cfghdr.hdr = &header;
        cfg.physAddr = -1;
        cfg.pageAddr = 0;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
@@ -4498,7 +4518,7 @@ mpt_read_ioc_pg_1(MPT_ADAPTER *ioc)
        header.PageLength = 0;
        header.PageNumber = 1;
        header.PageType = MPI_CONFIG_PAGETYPE_IOC;
-       cfg.hdr = &header;
+       cfg.cfghdr.hdr = &header;
        cfg.physAddr = -1;
        cfg.pageAddr = 0;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
@@ -4580,13 +4600,13 @@ SendEventNotification(MPT_ADAPTER *ioc, u8 EvSwitch)
 
        evnp = (EventNotification_t *) mpt_get_msg_frame(mpt_base_index, ioc);
        if (evnp == NULL) {
-               dprintk((MYIOC_s_WARN_FMT "Unable to allocate event request frame!\n",
+               devtprintk((MYIOC_s_WARN_FMT "Unable to allocate event request frame!\n",
                                ioc->name));
                return 0;
        }
        memset(evnp, 0, sizeof(*evnp));
 
-       dprintk((MYIOC_s_INFO_FMT "Sending EventNotification(%d)\n", ioc->name, EvSwitch));
+       devtprintk((MYIOC_s_INFO_FMT "Sending EventNotification (%d) request %p\n", ioc->name, EvSwitch, evnp));
 
        evnp->Function = MPI_FUNCTION_EVENT_NOTIFICATION;
        evnp->ChainOffset = 0;
@@ -4610,8 +4630,10 @@ SendEventAck(MPT_ADAPTER *ioc, EventNotificationReply_t *evnp)
        EventAck_t      *pAck;
 
        if ((pAck = (EventAck_t *) mpt_get_msg_frame(mpt_base_index, ioc)) == NULL) {
-               printk(MYIOC_s_WARN_FMT "Unable to allocate event ACK request frame!\n",
-                               ioc->name);
+               printk(MYIOC_s_WARN_FMT "Unable to allocate event ACK "
+                       "request frame for Event=%x EventContext=%x EventData=%x!\n",
+                       ioc->name, evnp->Event, le32_to_cpu(evnp->EventContext),
+                       le32_to_cpu(evnp->Data[0]));
                return -1;
        }
        memset(pAck, 0, sizeof(*pAck));
@@ -4647,10 +4669,11 @@ int
 mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
 {
        Config_t        *pReq;
+       ConfigExtendedPageHeader_t  *pExtHdr = NULL;
        MPT_FRAME_HDR   *mf;
        unsigned long    flags;
        int              ii, rc;
-       u32              flagsLength;
+       int              flagsLength;
        int              in_isr;
 
        /*      Prevent calling wait_event() (below), if caller happens
@@ -4675,16 +4698,30 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
        pReq->Reserved = 0;
        pReq->ChainOffset = 0;
        pReq->Function = MPI_FUNCTION_CONFIG;
+
+       /* Assume page type is not extended and clear "reserved" fields. */
        pReq->ExtPageLength = 0;
        pReq->ExtPageType = 0;
        pReq->MsgFlags = 0;
+
        for (ii=0; ii < 8; ii++)
                pReq->Reserved2[ii] = 0;
 
-       pReq->Header.PageVersion = pCfg->hdr->PageVersion;
-       pReq->Header.PageLength = pCfg->hdr->PageLength;
-       pReq->Header.PageNumber = pCfg->hdr->PageNumber;
-       pReq->Header.PageType = (pCfg->hdr->PageType & MPI_CONFIG_PAGETYPE_MASK);
+       pReq->Header.PageVersion = pCfg->cfghdr.hdr->PageVersion;
+       pReq->Header.PageLength = pCfg->cfghdr.hdr->PageLength;
+       pReq->Header.PageNumber = pCfg->cfghdr.hdr->PageNumber;
+       pReq->Header.PageType = (pCfg->cfghdr.hdr->PageType & MPI_CONFIG_PAGETYPE_MASK);
+
+       if ((pCfg->cfghdr.hdr->PageType & MPI_CONFIG_PAGETYPE_MASK) == MPI_CONFIG_PAGETYPE_EXTENDED) {
+               pExtHdr = (ConfigExtendedPageHeader_t *)pCfg->cfghdr.ehdr;
+               pReq->ExtPageLength = cpu_to_le16(pExtHdr->ExtPageLength);
+               pReq->ExtPageType = pExtHdr->ExtPageType;
+               pReq->Header.PageType = MPI_CONFIG_PAGETYPE_EXTENDED;
+
+               /* Page Length must be treated as a reserved field for the extended header. */
+               pReq->Header.PageLength = 0;
+       }
+
        pReq->PageAddress = cpu_to_le32(pCfg->pageAddr);
 
        /* Add a SGE to the config request.
@@ -4694,12 +4731,20 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
        else
                flagsLength = MPT_SGE_FLAGS_SSIMPLE_READ;
 
-       flagsLength |= pCfg->hdr->PageLength * 4;
+       if ((pCfg->cfghdr.hdr->PageType & MPI_CONFIG_PAGETYPE_MASK) == MPI_CONFIG_PAGETYPE_EXTENDED) {
+               flagsLength |= pExtHdr->ExtPageLength * 4;
 
-       mpt_add_sge((char *)&pReq->PageBufferSGE, flagsLength, pCfg->physAddr);
+               dcprintk((MYIOC_s_INFO_FMT "Sending Config request type %d, page %d and action %d\n",
+                       ioc->name, pReq->ExtPageType, pReq->Header.PageNumber, pReq->Action));
+       }
+       else {
+               flagsLength |= pCfg->cfghdr.hdr->PageLength * 4;
+
+               dcprintk((MYIOC_s_INFO_FMT "Sending Config request type %d, page %d and action %d\n",
+                       ioc->name, pReq->Header.PageType, pReq->Header.PageNumber, pReq->Action));
+       }
 
-       dcprintk((MYIOC_s_INFO_FMT "Sending Config request type %d, page %d and action %d\n",
-               ioc->name, pReq->Header.PageType, pReq->Header.PageNumber, pReq->Action));
+       mpt_add_sge((char *)&pReq->PageBufferSGE, flagsLength, pCfg->physAddr);
 
        /* Append pCfg pointer to end of mf
         */
@@ -4789,8 +4834,8 @@ mpt_toolbox(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
        pReq->Reserved3 = 0;
        pReq->NumAddressBytes = 0x01;
        pReq->Reserved4 = 0;
-       pReq->DataLength = 0x04;
-       pdev = (struct pci_dev *) ioc->pcidev;
+       pReq->DataLength = cpu_to_le16(0x04);
+       pdev = ioc->pcidev;
        if (pdev->devfn & 1)
                pReq->DeviceAddr = 0xB2;
        else
@@ -5504,6 +5549,8 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply
         *  If needed, send (a single) EventAck.
         */
        if (pEventReply->AckRequired == MPI_EVENT_NOTIFICATION_ACK_REQUIRED) {
+               devtprintk((MYIOC_s_WARN_FMT
+                       "EventAck required\n",ioc->name));
                if ((ii = SendEventAck(ioc, pEventReply)) != 0) {
                        devtprintk((MYIOC_s_WARN_FMT "SendEventAck returned %d\n",
                                        ioc->name, ii));
@@ -5584,7 +5631,7 @@ mpt_sp_log_info(MPT_ADAPTER *ioc, u32 log_info)
        case 0x00080000:
                desc = "Outbound DMA Overrun";
                break;
-       
+
        case 0x00090000:
                desc = "Task Management";
                break;
@@ -5600,7 +5647,7 @@ mpt_sp_log_info(MPT_ADAPTER *ioc, u32 log_info)
        case 0x000C0000:
                desc = "Untagged Table Size";
                break;
-       
+
        }
 
        printk(MYIOC_s_INFO_FMT "LogInfo(0x%08x): F/W: %s\n", ioc->name, log_info, desc);
@@ -5692,7 +5739,7 @@ mpt_sp_ioc_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf)
                break;
 
        case MPI_IOCSTATUS_SCSI_DATA_UNDERRUN: /* 0x0045 */
-               /* This error is checked in scsi_io_done(). Skip. 
+               /* This error is checked in scsi_io_done(). Skip.
                desc = "SCSI Data Underrun";
                */
                break;
index 848fb236b175b94dc8213fc926f8be6a022360b1..f4827d92373119987376a1d2387189872c6d0a93 100644 (file)
@@ -915,7 +915,10 @@ struct scsi_cmnd;
 typedef struct _x_config_parms {
        struct list_head         linkage;       /* linked list */
        struct timer_list        timer;         /* timer function for this request  */
-       ConfigPageHeader_t      *hdr;
+       union {
+               ConfigExtendedPageHeader_t      *ehdr;
+               ConfigPageHeader_t      *hdr;
+       } cfghdr;
        dma_addr_t               physAddr;
        int                      wait_done;     /* wait for this request */
        u32                      pageAddr;      /* properly formatted */
index 05ea5944c487d7f893c097beee21ef84e0409e50..7577c2417e2e124ca9109640a86cbe7fc4e9ddf7 100644 (file)
@@ -242,7 +242,7 @@ mptctl_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply)
                /* Set the command status to GOOD if IOC Status is GOOD
                 * OR if SCSI I/O cmd and data underrun or recovered error.
                 */
-               iocStatus = reply->u.reply.IOCStatus & MPI_IOCSTATUS_MASK;
+               iocStatus = le16_to_cpu(reply->u.reply.IOCStatus) & MPI_IOCSTATUS_MASK;
                if (iocStatus  == MPI_IOCSTATUS_SUCCESS)
                        ioc->ioctl->status |= MPT_IOCTL_STATUS_COMMAND_GOOD;
 
@@ -2324,7 +2324,7 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
        hdr.PageLength = 0;
        hdr.PageNumber = 0;
        hdr.PageType = MPI_CONFIG_PAGETYPE_MANUFACTURING;
-       cfg.hdr = &hdr;
+       cfg.cfghdr.hdr = &hdr;
        cfg.physAddr = -1;
        cfg.pageAddr = 0;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
@@ -2333,7 +2333,7 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)
 
        strncpy(karg.serial_number, " ", 24);
        if (mpt_config(ioc, &cfg) == 0) {
-               if (cfg.hdr->PageLength > 0) {
+               if (cfg.cfghdr.hdr->PageLength > 0) {
                        /* Issue the second config page request */
                        cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
 
@@ -2479,7 +2479,7 @@ mptctl_hp_targetinfo(unsigned long arg)
                hdr.PageNumber = 0;
                hdr.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE;
 
-               cfg.hdr = &hdr;
+               cfg.cfghdr.hdr = &hdr;
                cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
                cfg.dir = 0;
                cfg.timeout = 0;
@@ -2527,15 +2527,15 @@ mptctl_hp_targetinfo(unsigned long arg)
        hdr.PageNumber = 3;
        hdr.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE;
 
-       cfg.hdr = &hdr;
+       cfg.cfghdr.hdr = &hdr;
        cfg.action = MPI_CONFIG_ACTION_PAGE_HEADER;
        cfg.dir = 0;
        cfg.timeout = 0;
        cfg.physAddr = -1;
-       if ((mpt_config(ioc, &cfg) == 0) && (cfg.hdr->PageLength > 0)) {
+       if ((mpt_config(ioc, &cfg) == 0) && (cfg.cfghdr.hdr->PageLength > 0)) {
                /* Issue the second config page request */
                cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
-               data_sz = (int) cfg.hdr->PageLength * 4;
+               data_sz = (int) cfg.cfghdr.hdr->PageLength * 4;
                pg3_alloc = (SCSIDevicePage3_t *) pci_alloc_consistent(
                                                        ioc->pcidev, data_sz, &page_dma);
                if (pg3_alloc) {
index b9d4f78725b456e073ec0bf8e4573ea7e4259edb..4a003dc5fde86084b66cd8316467c3fe1e5f2d57 100644 (file)
@@ -281,12 +281,12 @@ mptscsih_getFreeChainBuffer(MPT_ADAPTER *ioc, int *retIndex)
                offset = (u8 *)chainBuf - (u8 *)ioc->ChainBuffer;
                chain_idx = offset / ioc->req_sz;
                rc = SUCCESS;
-               dsgprintk((MYIOC_s_INFO_FMT "getFreeChainBuffer (index %d), got buf=%p\n",
-                       ioc->name, *retIndex, chainBuf));
+               dsgprintk((MYIOC_s_ERR_FMT "getFreeChainBuffer chainBuf=%p ChainBuffer=%p offset=%d chain_idx=%d\n",
+                       ioc->name, chainBuf, ioc->ChainBuffer, offset, chain_idx));
        } else {
                rc = FAILED;
                chain_idx = MPT_HOST_NO_CHAIN;
-               dfailprintk((MYIOC_s_ERR_FMT "getFreeChainBuffer failed\n",
+               dfailprintk((MYIOC_s_INFO_FMT "getFreeChainBuffer failed\n",
                        ioc->name));
        }
        spin_unlock_irqrestore(&ioc->FreeQlock, flags);
@@ -432,7 +432,7 @@ nextSGEset:
                         */
                        pReq->ChainOffset = 0;
                        RequestNB = (((sgeOffset - 1) >> ioc->NBShiftFactor)  + 1) & 0x03;
-                       dsgprintk((MYIOC_s_ERR_FMT 
+                       dsgprintk((MYIOC_s_INFO_FMT
                            "Single Buffer RequestNB=%x, sgeOffset=%d\n", ioc->name, RequestNB, sgeOffset));
                        ioc->RequestNB[req_idx] = RequestNB;
                }
@@ -491,11 +491,12 @@ nextSGEset:
                /* NOTE: psge points to the beginning of the chain element
                 * in current buffer. Get a chain buffer.
                 */
-               dsgprintk((MYIOC_s_INFO_FMT 
-                   "calling getFreeChainBuffer SCSI cmd=%02x (%p)\n",
-                   ioc->name, pReq->CDB[0], SCpnt));
-               if ((mptscsih_getFreeChainBuffer(ioc, &newIndex)) == FAILED)
+               if ((mptscsih_getFreeChainBuffer(ioc, &newIndex)) == FAILED) {
+                       dfailprintk((MYIOC_s_INFO_FMT
+                           "getFreeChainBuffer FAILED SCSI cmd=%02x (%p)\n",
+                           ioc->name, pReq->CDB[0], SCpnt));
                        return FAILED;
+               }
 
                /* Update the tracking arrays.
                 * If chainSge == NULL, update ReqToChain, else ChainToChain
@@ -577,14 +578,20 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                return 1;
        }
 
-       dmfprintk((MYIOC_s_INFO_FMT
-               "ScsiDone (mf=%p,mr=%p,sc=%p,idx=%d)\n",
-               ioc->name, mf, mr, sc, req_idx));
-
        sc->result = DID_OK << 16;              /* Set default reply as OK */
        pScsiReq = (SCSIIORequest_t *) mf;
        pScsiReply = (SCSIIOReply_t *) mr;
 
+       if((ioc->facts.MsgVersion >= MPI_VERSION_01_05) && pScsiReply){
+               dmfprintk((MYIOC_s_INFO_FMT
+                       "ScsiDone (mf=%p,mr=%p,sc=%p,idx=%d,task-tag=%d)\n",
+                       ioc->name, mf, mr, sc, req_idx, pScsiReply->TaskTag));
+       }else{
+               dmfprintk((MYIOC_s_INFO_FMT
+                       "ScsiDone (mf=%p,mr=%p,sc=%p,idx=%d)\n",
+                       ioc->name, mf, mr, sc, req_idx));
+       }
+
        if (pScsiReply == NULL) {
                /* special context reply handling */
                ;
@@ -658,8 +665,8 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                                /* Sufficient data transfer occurred */
                                sc->result = (DID_OK << 16) | scsi_status;
                        } else if ( xfer_cnt == 0 ) {
-                               /* A CRC Error causes this condition; retry */ 
-                               sc->result = (DRIVER_SENSE << 24) | (DID_OK << 16) | 
+                               /* A CRC Error causes this condition; retry */
+                               sc->result = (DRIVER_SENSE << 24) | (DID_OK << 16) |
                                        (CHECK_CONDITION << 1);
                                sc->sense_buffer[0] = 0x70;
                                sc->sense_buffer[2] = NO_SENSE;
@@ -668,7 +675,9 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                        } else {
                                sc->result = DID_SOFT_ERROR << 16;
                        }
-                       dreplyprintk((KERN_NOTICE "RESIDUAL_MISMATCH: result=%x on id=%d\n", sc->result, sc->target));
+                       dreplyprintk((KERN_NOTICE
+                           "RESIDUAL_MISMATCH: result=%x on id=%d\n",
+                           sc->result, sc->device->id));
                        break;
 
                case MPI_IOCSTATUS_SCSI_DATA_UNDERRUN:          /* 0x0045 */
@@ -796,7 +805,6 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
        return 1;
 }
 
-
 /*
  *     mptscsih_flush_running_cmds - For each command found, search
  *             Scsi_Host instance taskQ and reply to OS.
@@ -1017,7 +1025,7 @@ mptscsih_remove(struct pci_dev *pdev)
        scsi_host_put(host);
 
        mpt_detach(pdev);
-       
+
 }
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
@@ -1072,7 +1080,7 @@ mptscsih_resume(struct pci_dev *pdev)
        MPT_SCSI_HOST           *hd;
 
        mpt_resume(pdev);
-       
+
        if(!host)
                return 0;
 
@@ -1214,8 +1222,8 @@ mptscsih_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t off
        int size = 0;
 
        if (func) {
-               /* 
-                * write is not supported 
+               /*
+                * write is not supported
                 */
        } else {
                if (start)
@@ -1535,17 +1543,17 @@ mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 target, u8 lun, in
         */
        if (mptscsih_tm_pending_wait(hd) == FAILED) {
                if (type == MPI_SCSITASKMGMT_TASKTYPE_ABORT_TASK) {
-                       dtmprintk((KERN_WARNING MYNAM ": %s: TMHandler abort: "
+                       dtmprintk((KERN_INFO MYNAM ": %s: TMHandler abort: "
                           "Timed out waiting for last TM (%d) to complete! \n",
                           hd->ioc->name, hd->tmPending));
                        return FAILED;
                } else if (type == MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET) {
-                       dtmprintk((KERN_WARNING MYNAM ": %s: TMHandler target reset: "
+                       dtmprintk((KERN_INFO MYNAM ": %s: TMHandler target reset: "
                           "Timed out waiting for last TM (%d) to complete! \n",
                           hd->ioc->name, hd->tmPending));
                        return FAILED;
                } else if (type == MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS) {
-                       dtmprintk((KERN_WARNING MYNAM ": %s: TMHandler bus reset: "
+                       dtmprintk((KERN_INFO MYNAM ": %s: TMHandler bus reset: "
                           "Timed out waiting for last TM (%d) to complete! \n",
                           hd->ioc->name, hd->tmPending));
                        if (hd->tmPending & (1 << MPI_SCSITASKMGMT_TASKTYPE_RESET_BUS))
@@ -1631,8 +1639,7 @@ mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 target, u8 lun
        if ((mf = mpt_get_msg_frame(hd->ioc->TaskCtx, hd->ioc)) == NULL) {
                dfailprintk((MYIOC_s_ERR_FMT "IssueTaskMgmt, no msg frames!!\n",
                                hd->ioc->name));
-               //return FAILED;
-               return -999;
+               return FAILED;
        }
        dtmprintk((MYIOC_s_INFO_FMT "IssueTaskMgmt request @ %p\n",
                        hd->ioc->name, mf));
@@ -1661,9 +1668,8 @@ mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 target, u8 lun
 
        pScsiTm->TaskMsgContext = ctx2abort;
 
-       dtmprintk((MYIOC_s_INFO_FMT
-               "IssueTaskMgmt: ctx2abort (0x%08x) type=%d\n",
-               hd->ioc->name, ctx2abort, type));
+       dtmprintk((MYIOC_s_INFO_FMT "IssueTaskMgmt: ctx2abort (0x%08x) type=%d\n",
+                       hd->ioc->name, ctx2abort, type));
 
        DBG_DUMP_TM_REQUEST_FRAME((u32 *)pScsiTm);
 
@@ -1902,13 +1908,13 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt)
 
        /*  If we can't locate the host to reset, then we failed. */
        if ((hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata) == NULL){
-               dtmprintk( ( KERN_WARNING MYNAM ": mptscsih_host_reset: "
+               dtmprintk( ( KERN_INFO MYNAM ": mptscsih_host_reset: "
                             "Can't locate host! (sc=%p)\n",
                             SCpnt ) );
                return FAILED;
        }
 
-       printk(KERN_WARNING MYNAM ": %s: >> Attempting host reset! (sc=%p)\n",
+       printk(KERN_WARNING MYNAM ": %s: Attempting host reset! (sc=%p)\n",
               hd->ioc->name, SCpnt);
 
        /*  If our attempts to reset the host failed, then return a failed
@@ -1924,7 +1930,7 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt)
                hd->tmState = TM_STATE_NONE;
        }
 
-       dtmprintk( ( KERN_WARNING MYNAM ": mptscsih_host_reset: "
+       dtmprintk( ( KERN_INFO MYNAM ": mptscsih_host_reset: "
                     "Status = %s\n",
                     (status == SUCCESS) ? "SUCCESS" : "FAILED" ) );
 
@@ -1951,8 +1957,8 @@ mptscsih_tm_pending_wait(MPT_SCSI_HOST * hd)
                if (hd->tmState == TM_STATE_NONE) {
                        hd->tmState = TM_STATE_IN_PROGRESS;
                        hd->tmPending = 1;
-                       status = SUCCESS;
                        spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags);
+                       status = SUCCESS;
                        break;
                }
                spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags);
@@ -1980,7 +1986,7 @@ mptscsih_tm_wait_for_completion(MPT_SCSI_HOST * hd, ulong timeout )
                spin_lock_irqsave(&hd->ioc->FreeQlock, flags);
                if(hd->tmPending == 0) {
                        status = SUCCESS;
-                       spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags);
+                       spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags);
                        break;
                }
                spin_unlock_irqrestore(&hd->ioc->FreeQlock, flags);
@@ -2318,10 +2324,10 @@ mptscsih_slave_configure(struct scsi_device *device)
        if (pTarget == NULL) {
                /* Driver doesn't know about this device.
                 * Kernel may generate a "Dummy Lun 0" which
-                * may become a real Lun if a 
+                * may become a real Lun if a
                 * "scsi add-single-device" command is executed
-                * while the driver is active (hot-plug a 
-                * device).  LSI Raid controllers need 
+                * while the driver is active (hot-plug a
+                * device).  LSI Raid controllers need
                 * queue_depth set to DEV_HIGH for this reason.
                 */
                scsi_adjust_queue_depth(device, MSG_SIMPLE_TAG,
@@ -2691,7 +2697,7 @@ mptscsih_initTarget(MPT_SCSI_HOST *hd, int bus_id, int target_id, u8 lun, char *
         * If the peripheral qualifier filter is enabled then if the target reports a 0x1
         * (i.e. The targer is capable of supporting the specified peripheral device type
         * on this logical unit; however, the physical device is not currently connected
-        * to this logical unit) it will be converted to a 0x3 (i.e. The target is not 
+        * to this logical unit) it will be converted to a 0x3 (i.e. The target is not
         * capable of supporting a physical device on this logical unit). This is to work
         * around a bug in th emid-layer in some distributions in which the mid-layer will
         * continue to try to communicate to the LUN and evntually create a dummy LUN.
@@ -3194,8 +3200,8 @@ mptscsih_writeSDP1(MPT_SCSI_HOST *hd, int portnum, int target_id, int flags)
                /* Get a MF for this command.
                 */
                if ((mf = mpt_get_msg_frame(ioc->DoneCtx, ioc)) == NULL) {
-                       dprintk((MYIOC_s_WARN_FMT "write SDP1: no msg frames!\n",
-                                               ioc->name));
+                       dfailprintk((MYIOC_s_WARN_FMT "write SDP1: no msg frames!\n",
+                               ioc->name));
                        return -EAGAIN;
                }
 
@@ -3289,7 +3295,7 @@ mptscsih_writeIOCPage4(MPT_SCSI_HOST *hd, int target_id, int bus)
        /* Get a MF for this command.
         */
        if ((mf = mpt_get_msg_frame(ioc->DoneCtx, ioc)) == NULL) {
-               dprintk((MYIOC_s_WARN_FMT "writeIOCPage4 : no msg frames!\n",
+               dfailprintk((MYIOC_s_WARN_FMT "writeIOCPage4 : no msg frames!\n",
                                        ioc->name));
                return -EAGAIN;
        }
@@ -3447,7 +3453,7 @@ mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                                 * some type of error occurred.
                                 */
                                MpiRaidActionReply_t    *pr = (MpiRaidActionReply_t *)mr;
-                               if (pr->ActionStatus == MPI_RAID_ACTION_ASTATUS_SUCCESS)
+                               if (le16_to_cpu(pr->ActionStatus) == MPI_RAID_ACTION_ASTATUS_SUCCESS)
                                        completionCode = MPT_SCANDV_GOOD;
                                else
                                        completionCode = MPT_SCANDV_SOME_ERROR;
@@ -3955,7 +3961,7 @@ mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, int portnum)
                                header1.PageLength = ioc->spi_data.sdp1length;
                                header1.PageNumber = 1;
                                header1.PageType = MPI_CONFIG_PAGETYPE_SCSI_DEVICE;
-                               cfg.hdr = &header1;
+                               cfg.cfghdr.hdr = &header1;
                                cfg.physAddr = cfg1_dma_addr;
                                cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT;
                                cfg.dir = 1;
@@ -3996,9 +4002,9 @@ mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, int portnum)
                        dnegoprintk(("syncronize cache: id=%d width=0 factor=MPT_ASYNC "
                                "offset=0 negoFlags=%x request=%x config=%x\n",
                                id, flags, requested, configuration));
-                       pcfg1Data->RequestedParameters = le32_to_cpu(requested);
+                       pcfg1Data->RequestedParameters = cpu_to_le32(requested);
                        pcfg1Data->Reserved = 0;
-                       pcfg1Data->Configuration = le32_to_cpu(configuration);
+                       pcfg1Data->Configuration = cpu_to_le32(configuration);
                        cfg.pageAddr = (bus<<8) | id;
                        mpt_config(hd->ioc, &cfg);
                }
@@ -4353,7 +4359,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id)
        /* Prep cfg structure
         */
        cfg.pageAddr = (bus<<8) | id;
-       cfg.hdr = NULL;
+       cfg.cfghdr.hdr = NULL;
 
        /* Prep SDP0 header
         */
@@ -4399,7 +4405,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id)
        pcfg1Data = (SCSIDevicePage1_t *) (pDvBuf + sz);
        cfg1_dma_addr = dvbuf_dma + sz;
 
-       /* Skip this ID? Set cfg.hdr to force config page write
+       /* Skip this ID? Set cfg.cfghdr.hdr to force config page write
         */
        {
                ScsiCfgData *pspi_data = &hd->ioc->spi_data;
@@ -4417,7 +4423,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id)
 
                                dv.cmd = MPT_SET_MAX;
                                mptscsih_dv_parms(hd, &dv, (void *)pcfg1Data);
-                               cfg.hdr = &header1;
+                               cfg.cfghdr.hdr = &header1;
 
                                /* Save the final negotiated settings to
                                 * SCSI device page 1.
@@ -4483,7 +4489,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id)
                dv.cmd = MPT_SET_MIN;
                mptscsih_dv_parms(hd, &dv, (void *)pcfg1Data);
 
-               cfg.hdr = &header1;
+               cfg.cfghdr.hdr = &header1;
                cfg.physAddr = cfg1_dma_addr;
                cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT;
                cfg.dir = 1;
@@ -4596,8 +4602,8 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id)
                                if ((pbuf1[56] & 0x02) == 0) {
                                        pTarget->negoFlags |= MPT_TARGET_NO_NEGO_QAS;
                                        hd->ioc->spi_data.noQas = MPT_TARGET_NO_NEGO_QAS;
-                                       ddvprintk((MYIOC_s_NOTE_FMT 
-                                           "DV: Start Basic noQas on id=%d due to pbuf1[56]=%x\n", 
+                                       ddvprintk((MYIOC_s_NOTE_FMT
+                                           "DV: Start Basic noQas on id=%d due to pbuf1[56]=%x\n",
                                            ioc->name, id, pbuf1[56]));
                                }
                        }
@@ -4637,7 +4643,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id)
                                        u32 sdp0_info;
                                        u32 sdp0_nego;
 
-                                       cfg.hdr = &header0;
+                                       cfg.cfghdr.hdr = &header0;
                                        cfg.physAddr = cfg0_dma_addr;
                                        cfg.action = MPI_CONFIG_ACTION_PAGE_READ_CURRENT;
                                        cfg.dir = 0;
@@ -4673,7 +4679,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id)
                                                if (!firstPass)
                                                        doFallback = 1;
                                        } else {
-                                               ddvprintk((MYIOC_s_NOTE_FMT 
+                                               ddvprintk((MYIOC_s_NOTE_FMT
                                                    "DV:Inquiry compared id=%d, calling initTarget\n", ioc->name, id));
                                                hd->ioc->spi_data.dvStatus[id] &= ~MPT_SCSICFG_DV_NOT_DONE;
                                                mptscsih_initTarget(hd,
@@ -4689,8 +4695,8 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id)
 
                        } else if (rc == MPT_SCANDV_ISSUE_SENSE)
                                doFallback = 1; /* set fallback flag */
-                       else if ((rc == MPT_SCANDV_DID_RESET) || 
-                                (rc == MPT_SCANDV_SENSE) || 
+                       else if ((rc == MPT_SCANDV_DID_RESET) ||
+                                (rc == MPT_SCANDV_SENSE) ||
                                 (rc == MPT_SCANDV_FALLBACK))
                                doFallback = 1; /* set fallback flag */
                        else
@@ -4722,7 +4728,7 @@ mptscsih_doDv(MPT_SCSI_HOST *hd, int bus_number, int id)
         * 4) release
         * 5) update nego parms to target struct
         */
-       cfg.hdr = &header1;
+       cfg.cfghdr.hdr = &header1;
        cfg.physAddr = cfg1_dma_addr;
        cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT;
        cfg.dir = 1;
@@ -5121,12 +5127,12 @@ target_done:
 
        /* Set if cfg1_dma_addr contents is valid
         */
-       if ((cfg.hdr != NULL) && (retcode == 0)){
+       if ((cfg.cfghdr.hdr != NULL) && (retcode == 0)){
                /* If disk, not U320, disable QAS
                 */
                if ((inq0 == 0) && (dv.now.factor > MPT_ULTRA320)) {
                        hd->ioc->spi_data.noQas = MPT_TARGET_NO_NEGO_QAS;
-                       ddvprintk((MYIOC_s_NOTE_FMT 
+                       ddvprintk((MYIOC_s_NOTE_FMT
                            "noQas set due to id=%d has factor=%x\n", ioc->name, id, dv.now.factor));
                }
 
@@ -5137,7 +5143,7 @@ target_done:
                 * skip save of the final negotiated settings to
                 * SCSI device page 1.
                 *
-               cfg.hdr = &header1;
+               cfg.cfghdr.hdr = &header1;
                cfg.physAddr = cfg1_dma_addr;
                cfg.action = MPI_CONFIG_ACTION_PAGE_WRITE_CURRENT;
                cfg.dir = 1;
@@ -5248,7 +5254,7 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVPARAMETERS *dv,void *pPage)
                /* Update tmax values with those from Device Page 0.*/
                pPage0 = (SCSIDevicePage0_t *) pPage;
                if (pPage0) {
-                       val = cpu_to_le32(pPage0->NegotiatedParameters);
+                       val = le32_to_cpu(pPage0->NegotiatedParameters);
                        dv->max.width = val & MPI_SCSIDEVPAGE0_NP_WIDE ? 1 : 0;
                        dv->max.offset = (val&MPI_SCSIDEVPAGE0_NP_NEG_SYNC_OFFSET_MASK) >> 16;
                        dv->max.factor = (val&MPI_SCSIDEVPAGE0_NP_NEG_SYNC_PERIOD_MASK) >> 8;
@@ -5276,12 +5282,12 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVPARAMETERS *dv,void *pPage)
                                dv->now.offset, &val, &configuration, dv->now.flags);
                        dnegoprintk(("Setting Max: id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x config=%x\n",
                                id, dv->now.width, dv->now.factor, dv->now.offset, dv->now.flags, val, configuration));
-                       pPage1->RequestedParameters = le32_to_cpu(val);
+                       pPage1->RequestedParameters = cpu_to_le32(val);
                        pPage1->Reserved = 0;
-                       pPage1->Configuration = le32_to_cpu(configuration);
+                       pPage1->Configuration = cpu_to_le32(configuration);
                }
 
-               ddvprintk(("id=%d width=%d factor=%x offset=%x flags=%x request=%x configuration=%x\n",
+               ddvprintk(("id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x configuration=%x\n",
                                id, dv->now.width, dv->now.factor, dv->now.offset, dv->now.flags, val, configuration));
                break;
 
@@ -5301,9 +5307,9 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVPARAMETERS *dv,void *pPage)
                                offset, &val, &configuration, negoFlags);
                        dnegoprintk(("Setting Min: id=%d width=%d factor=%x offset=%x negoFlags=%x request=%x config=%x\n",
                                id, width, factor, offset, negoFlags, val, configuration));
-                       pPage1->RequestedParameters = le32_to_cpu(val);
+                       pPage1->RequestedParameters = cpu_to_le32(val);
                        pPage1->Reserved = 0;
-                       pPage1->Configuration = le32_to_cpu(configuration);
+                       pPage1->Configuration = cpu_to_le32(configuration);
                }
                ddvprintk(("id=%d width=%d factor=%x offset=%x request=%x config=%x negoFlags=%x\n",
                                id, width, factor, offset, val, configuration, negoFlags));
@@ -5377,12 +5383,12 @@ mptscsih_dv_parms(MPT_SCSI_HOST *hd, DVPARAMETERS *dv,void *pPage)
                if (pPage1) {
                        mptscsih_setDevicePage1Flags (width, factor, offset, &val,
                                                &configuration, dv->now.flags);
-                       dnegoprintk(("Finish: id=%d width=%d offset=%d factor=%x flags=%x request=%x config=%x\n",
+                       dnegoprintk(("Finish: id=%d width=%d offset=%d factor=%x negoFlags=%x request=%x config=%x\n",
                             id, width, offset, factor, dv->now.flags, val, configuration));
 
-                       pPage1->RequestedParameters = le32_to_cpu(val);
+                       pPage1->RequestedParameters = cpu_to_le32(val);
                        pPage1->Reserved = 0;
-                       pPage1->Configuration = le32_to_cpu(configuration);
+                       pPage1->Configuration = cpu_to_le32(configuration);
                }
 
                ddvprintk(("Finish: id=%d offset=%d factor=%x width=%d request=%x config=%x\n",
index dfa8806b1e13d618875242352ab8ee32de0781b3..587d1274fd74f665dc3f477b04141096c147c530 100644 (file)
@@ -162,15 +162,15 @@ mptspi_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        u8                      *mem;
        int                     error=0;
        int                     r;
-       
+
        if ((r = mpt_attach(pdev,id)) != 0)
                return r;
-       
+
        ioc = pci_get_drvdata(pdev);
        ioc->DoneCtx = mptspiDoneCtx;
        ioc->TaskCtx = mptspiTaskCtx;
        ioc->InternalCtx = mptspiInternalCtx;
-       
+
        /*  Added sanity check on readiness of the MPT adapter.
         */
        if (ioc->last_state != MPI_IOC_STATE_OPERATIONAL) {
index dea6589d153364c0b2f6799f1380e3f99ca180a4..7fc692a8f5b080e8db0a7c133db23f5eced53297 100644 (file)
@@ -6,7 +6,7 @@ menu "Misc devices"
 
 config IBM_ASM
        tristate "Device driver for IBM RSA service processor"
-       depends on X86 && PCI && EXPERIMENTAL && BROKEN
+       depends on X86 && PCI && EXPERIMENTAL
        ---help---
          This option enables device driver support for in-band access to the
          IBM RSA (Condor) service processor in eServer xSeries systems.
index 914804512dba00e7bb3971927a6b7b77e0382824..7e98434cfa37783b1cfa45c1bd162e9a56f14bad 100644 (file)
 #include <linux/termios.h>
 #include <linux/tty.h>
 #include <linux/serial_core.h>
-#include <linux/serial.h>
 #include <linux/serial_reg.h>
+#include <linux/serial_8250.h>
 #include "ibmasm.h"
 #include "lowlevel.h"
 
 
 void ibmasm_register_uart(struct service_processor *sp)
 {
-       struct serial_struct serial;
+       struct uart_port uport;
        void __iomem *iomem_base;
 
        iomem_base = sp->base_address + SCOUT_COM_B_BASE;
@@ -47,14 +47,14 @@ void ibmasm_register_uart(struct service_processor *sp)
                return;
        }
 
-       memset(&serial, 0, sizeof(serial));
-       serial.irq              = sp->irq;
-       serial.baud_base        = 3686400 / 16;
-       serial.flags            = UPF_AUTOPROBE | UPF_SHARE_IRQ;
-       serial.io_type          = UPIO_MEM;
-       serial.iomem_base       = iomem_base;
+       memset(&uport, 0, sizeof(struct uart_port));
+       uport.irq       = sp->irq;
+       uport.uartclk   = 3686400;
+       uport.flags     = UPF_AUTOPROBE | UPF_SHARE_IRQ;
+       uport.iotype    = UPIO_MEM;
+       uport.membase   = iomem_base;
 
-       sp->serial_line = register_serial(&serial);
+       sp->serial_line = serial8250_register_port(&uport);
        if (sp->serial_line < 0) {
                dev_err(sp->dev, "Failed to register serial port\n");
                return;
@@ -68,5 +68,5 @@ void ibmasm_unregister_uart(struct service_processor *sp)
                return;
 
        disable_uart_interrupts(sp->base_address);
-       unregister_serial(sp->serial_line);
+       serial8250_unregister_port(sp->serial_line);
 }
index 0a8165974ba763abebeb0519434f849ea8876413..0a117c61cd1809e4f2ee6d924ac716810c8c848e 100644 (file)
@@ -2,6 +2,8 @@
  *  linux/drivers/mmc/mmc.c
  *
  *  Copyright (C) 2003-2004 Russell King, All Rights Reserved.
+ *  SD support Copyright (C) 2004 Ian Molton, All Rights Reserved.
+ *  SD support Copyright (C) 2005 Pierre Ossman, 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
@@ -16,6 +18,8 @@
 #include <linux/delay.h>
 #include <linux/pagemap.h>
 #include <linux/err.h>
+#include <asm/scatterlist.h>
+#include <linux/scatterlist.h>
 
 #include <linux/mmc/card.h>
 #include <linux/mmc/host.h>
@@ -172,7 +176,81 @@ int mmc_wait_for_cmd(struct mmc_host *host, struct mmc_command *cmd, int retries
 
 EXPORT_SYMBOL(mmc_wait_for_cmd);
 
+/**
+ *     mmc_wait_for_app_cmd - start an application command and wait for
+                              completion
+ *     @host: MMC host to start command
+ *     @rca: RCA to send MMC_APP_CMD to
+ *     @cmd: MMC command to start
+ *     @retries: maximum number of retries
+ *
+ *     Sends a MMC_APP_CMD, checks the card response, sends the command
+ *     in the parameter and waits for it to complete. Return any error
+ *     that occurred while the command was executing.  Do not attempt to
+ *     parse the response.
+ */
+int mmc_wait_for_app_cmd(struct mmc_host *host, unsigned int rca,
+       struct mmc_command *cmd, int retries)
+{
+       struct mmc_request mrq;
+       struct mmc_command appcmd;
+
+       int i, err;
+
+       BUG_ON(host->card_busy == NULL);
+       BUG_ON(retries < 0);
+
+       err = MMC_ERR_INVALID;
+
+       /*
+        * We have to resend MMC_APP_CMD for each attempt so
+        * we cannot use the retries field in mmc_command.
+        */
+       for (i = 0;i <= retries;i++) {
+               memset(&mrq, 0, sizeof(struct mmc_request));
+
+               appcmd.opcode = MMC_APP_CMD;
+               appcmd.arg = rca << 16;
+               appcmd.flags = MMC_RSP_R1;
+               appcmd.retries = 0;
+               memset(appcmd.resp, 0, sizeof(appcmd.resp));
+               appcmd.data = NULL;
+
+               mrq.cmd = &appcmd;
+               appcmd.data = NULL;
+
+               mmc_wait_for_req(host, &mrq);
+
+               if (appcmd.error) {
+                       err = appcmd.error;
+                       continue;
+               }
+
+               /* Check that card supported application commands */
+               if (!(appcmd.resp[0] & R1_APP_CMD))
+                       return MMC_ERR_FAILED;
+
+               memset(&mrq, 0, sizeof(struct mmc_request));
+
+               memset(cmd->resp, 0, sizeof(cmd->resp));
+               cmd->retries = 0;
+
+               mrq.cmd = cmd;
+               cmd->data = NULL;
 
+               mmc_wait_for_req(host, &mrq);
+
+               err = cmd->error;
+               if (cmd->error == MMC_ERR_NONE)
+                       break;
+       }
+
+       return err;
+}
+
+EXPORT_SYMBOL(mmc_wait_for_app_cmd);
+
+static int mmc_select_card(struct mmc_host *host, struct mmc_card *card);
 
 /**
  *     __mmc_claim_host - exclusively claim a host
@@ -206,16 +284,10 @@ int __mmc_claim_host(struct mmc_host *host, struct mmc_card *card)
        spin_unlock_irqrestore(&host->lock, flags);
        remove_wait_queue(&host->wq, &wait);
 
-       if (card != (void *)-1 && host->card_selected != card) {
-               struct mmc_command cmd;
-
-               host->card_selected = card;
-
-               cmd.opcode = MMC_SELECT_CARD;
-               cmd.arg = card->rca << 16;
-               cmd.flags = MMC_RSP_R1;
-
-               err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
+       if (card != (void *)-1) {
+               err = mmc_select_card(host, card);
+               if (err != MMC_ERR_NONE)
+                       return err;
        }
 
        return err;
@@ -245,6 +317,63 @@ void mmc_release_host(struct mmc_host *host)
 
 EXPORT_SYMBOL(mmc_release_host);
 
+static int mmc_select_card(struct mmc_host *host, struct mmc_card *card)
+{
+       int err;
+       struct mmc_command cmd;
+
+       BUG_ON(host->card_busy == NULL);
+
+       if (host->card_selected == card)
+               return MMC_ERR_NONE;
+
+       host->card_selected = card;
+
+       cmd.opcode = MMC_SELECT_CARD;
+       cmd.arg = card->rca << 16;
+       cmd.flags = MMC_RSP_R1;
+
+       err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
+       if (err != MMC_ERR_NONE)
+               return err;
+
+       /*
+        * Default bus width is 1 bit.
+        */
+       host->ios.bus_width = MMC_BUS_WIDTH_1;
+
+       /*
+        * We can only change the bus width of the selected
+        * card so therefore we have to put the handling
+        * here.
+        */
+       if (host->caps & MMC_CAP_4_BIT_DATA) {
+               /*
+                * The card is in 1 bit mode by default so
+                * we only need to change if it supports the
+                * wider version.
+                */
+               if (mmc_card_sd(card) &&
+                       (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
+                       struct mmc_command cmd;
+                       cmd.opcode = SD_APP_SET_BUS_WIDTH;
+                       cmd.arg = SD_BUS_WIDTH_4;
+                       cmd.flags = MMC_RSP_R1;
+
+                       err = mmc_wait_for_app_cmd(host, card->rca, &cmd,
+                               CMD_RETRIES);
+                       if (err != MMC_ERR_NONE)
+                               return err;
+
+                       host->ios.bus_width = MMC_BUS_WIDTH_4;
+               }
+       }
+
+       host->ops->set_ios(host, &host->ios);
+
+       return MMC_ERR_NONE;
+}
+
 /*
  * Ensure that no card is selected.
  */
@@ -322,48 +451,69 @@ static void mmc_decode_cid(struct mmc_card *card)
 
        memset(&card->cid, 0, sizeof(struct mmc_cid));
 
-       /*
-        * The selection of the format here is guesswork based upon
-        * information people have sent to date.
-        */
-       switch (card->csd.mmca_vsn) {
-       case 0: /* MMC v1.? */
-       case 1: /* MMC v1.4 */
-               card->cid.manfid        = UNSTUFF_BITS(resp, 104, 24);
-               card->cid.prod_name[0]  = UNSTUFF_BITS(resp, 96, 8);
-               card->cid.prod_name[1]  = UNSTUFF_BITS(resp, 88, 8);
-               card->cid.prod_name[2]  = UNSTUFF_BITS(resp, 80, 8);
-               card->cid.prod_name[3]  = UNSTUFF_BITS(resp, 72, 8);
-               card->cid.prod_name[4]  = UNSTUFF_BITS(resp, 64, 8);
-               card->cid.prod_name[5]  = UNSTUFF_BITS(resp, 56, 8);
-               card->cid.prod_name[6]  = UNSTUFF_BITS(resp, 48, 8);
-               card->cid.hwrev         = UNSTUFF_BITS(resp, 44, 4);
-               card->cid.fwrev         = UNSTUFF_BITS(resp, 40, 4);
-               card->cid.serial        = UNSTUFF_BITS(resp, 16, 24);
-               card->cid.month         = UNSTUFF_BITS(resp, 12, 4);
-               card->cid.year          = UNSTUFF_BITS(resp, 8, 4) + 1997;
-               break;
-
-       case 2: /* MMC v2.x ? */
-       case 3: /* MMC v3.x ? */
-               card->cid.manfid        = UNSTUFF_BITS(resp, 120, 8);
-               card->cid.oemid         = UNSTUFF_BITS(resp, 104, 16);
-               card->cid.prod_name[0]  = UNSTUFF_BITS(resp, 96, 8);
-               card->cid.prod_name[1]  = UNSTUFF_BITS(resp, 88, 8);
-               card->cid.prod_name[2]  = UNSTUFF_BITS(resp, 80, 8);
-               card->cid.prod_name[3]  = UNSTUFF_BITS(resp, 72, 8);
-               card->cid.prod_name[4]  = UNSTUFF_BITS(resp, 64, 8);
-               card->cid.prod_name[5]  = UNSTUFF_BITS(resp, 56, 8);
-               card->cid.serial        = UNSTUFF_BITS(resp, 16, 32);
-               card->cid.month         = UNSTUFF_BITS(resp, 12, 4);
-               card->cid.year          = UNSTUFF_BITS(resp, 8, 4) + 1997;
-               break;
-
-       default:
-               printk("%s: card has unknown MMCA version %d\n",
-                       mmc_hostname(card->host), card->csd.mmca_vsn);
-               mmc_card_set_bad(card);
-               break;
+       if (mmc_card_sd(card)) {
+               /*
+                * SD doesn't currently have a version field so we will
+                * have to assume we can parse this.
+                */
+               card->cid.manfid                = UNSTUFF_BITS(resp, 120, 8);
+               card->cid.oemid                 = UNSTUFF_BITS(resp, 104, 16);
+               card->cid.prod_name[0]          = UNSTUFF_BITS(resp, 96, 8);
+               card->cid.prod_name[1]          = UNSTUFF_BITS(resp, 88, 8);
+               card->cid.prod_name[2]          = UNSTUFF_BITS(resp, 80, 8);
+               card->cid.prod_name[3]          = UNSTUFF_BITS(resp, 72, 8);
+               card->cid.prod_name[4]          = UNSTUFF_BITS(resp, 64, 8);
+               card->cid.hwrev                 = UNSTUFF_BITS(resp, 60, 4);
+               card->cid.fwrev                 = UNSTUFF_BITS(resp, 56, 4);
+               card->cid.serial                = UNSTUFF_BITS(resp, 24, 32);
+               card->cid.year                  = UNSTUFF_BITS(resp, 12, 8);
+               card->cid.month                 = UNSTUFF_BITS(resp, 8, 4);
+
+               card->cid.year += 2000; /* SD cards year offset */
+       } else {
+               /*
+                * The selection of the format here is based upon published
+                * specs from sandisk and from what people have reported.
+                */
+               switch (card->csd.mmca_vsn) {
+               case 0: /* MMC v1.0 - v1.2 */
+               case 1: /* MMC v1.4 */
+                       card->cid.manfid        = UNSTUFF_BITS(resp, 104, 24);
+                       card->cid.prod_name[0]  = UNSTUFF_BITS(resp, 96, 8);
+                       card->cid.prod_name[1]  = UNSTUFF_BITS(resp, 88, 8);
+                       card->cid.prod_name[2]  = UNSTUFF_BITS(resp, 80, 8);
+                       card->cid.prod_name[3]  = UNSTUFF_BITS(resp, 72, 8);
+                       card->cid.prod_name[4]  = UNSTUFF_BITS(resp, 64, 8);
+                       card->cid.prod_name[5]  = UNSTUFF_BITS(resp, 56, 8);
+                       card->cid.prod_name[6]  = UNSTUFF_BITS(resp, 48, 8);
+                       card->cid.hwrev         = UNSTUFF_BITS(resp, 44, 4);
+                       card->cid.fwrev         = UNSTUFF_BITS(resp, 40, 4);
+                       card->cid.serial        = UNSTUFF_BITS(resp, 16, 24);
+                       card->cid.month         = UNSTUFF_BITS(resp, 12, 4);
+                       card->cid.year          = UNSTUFF_BITS(resp, 8, 4) + 1997;
+                       break;
+
+               case 2: /* MMC v2.0 - v2.2 */
+               case 3: /* MMC v3.1 - v3.3 */
+                       card->cid.manfid        = UNSTUFF_BITS(resp, 120, 8);
+                       card->cid.oemid         = UNSTUFF_BITS(resp, 104, 16);
+                       card->cid.prod_name[0]  = UNSTUFF_BITS(resp, 96, 8);
+                       card->cid.prod_name[1]  = UNSTUFF_BITS(resp, 88, 8);
+                       card->cid.prod_name[2]  = UNSTUFF_BITS(resp, 80, 8);
+                       card->cid.prod_name[3]  = UNSTUFF_BITS(resp, 72, 8);
+                       card->cid.prod_name[4]  = UNSTUFF_BITS(resp, 64, 8);
+                       card->cid.prod_name[5]  = UNSTUFF_BITS(resp, 56, 8);
+                       card->cid.serial        = UNSTUFF_BITS(resp, 16, 32);
+                       card->cid.month         = UNSTUFF_BITS(resp, 12, 4);
+                       card->cid.year          = UNSTUFF_BITS(resp, 8, 4) + 1997;
+                       break;
+
+               default:
+                       printk("%s: card has unknown MMCA version %d\n",
+                               mmc_hostname(card->host), card->csd.mmca_vsn);
+                       mmc_card_set_bad(card);
+                       break;
+               }
        }
 }
 
@@ -376,34 +526,86 @@ static void mmc_decode_csd(struct mmc_card *card)
        unsigned int e, m, csd_struct;
        u32 *resp = card->raw_csd;
 
-       /*
-        * We only understand CSD structure v1.1 and v2.
-        * v2 has extra information in bits 15, 11 and 10.
-        */
-       csd_struct = UNSTUFF_BITS(resp, 126, 2);
-       if (csd_struct != 1 && csd_struct != 2) {
-               printk("%s: unrecognised CSD structure version %d\n",
-                       mmc_hostname(card->host), csd_struct);
-               mmc_card_set_bad(card);
-               return;
+       if (mmc_card_sd(card)) {
+               csd_struct = UNSTUFF_BITS(resp, 126, 2);
+               if (csd_struct != 0) {
+                       printk("%s: unrecognised CSD structure version %d\n",
+                               mmc_hostname(card->host), csd_struct);
+                       mmc_card_set_bad(card);
+                       return;
+               }
+
+               m = UNSTUFF_BITS(resp, 115, 4);
+               e = UNSTUFF_BITS(resp, 112, 3);
+               csd->tacc_ns     = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
+               csd->tacc_clks   = UNSTUFF_BITS(resp, 104, 8) * 100;
+
+               m = UNSTUFF_BITS(resp, 99, 4);
+               e = UNSTUFF_BITS(resp, 96, 3);
+               csd->max_dtr      = tran_exp[e] * tran_mant[m];
+               csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
+
+               e = UNSTUFF_BITS(resp, 47, 3);
+               m = UNSTUFF_BITS(resp, 62, 12);
+               csd->capacity     = (1 + m) << (e + 2);
+
+               csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
+       } else {
+               /*
+                * We only understand CSD structure v1.1 and v1.2.
+                * v1.2 has extra information in bits 15, 11 and 10.
+                */
+               csd_struct = UNSTUFF_BITS(resp, 126, 2);
+               if (csd_struct != 1 && csd_struct != 2) {
+                       printk("%s: unrecognised CSD structure version %d\n",
+                               mmc_hostname(card->host), csd_struct);
+                       mmc_card_set_bad(card);
+                       return;
+               }
+
+               csd->mmca_vsn    = UNSTUFF_BITS(resp, 122, 4);
+               m = UNSTUFF_BITS(resp, 115, 4);
+               e = UNSTUFF_BITS(resp, 112, 3);
+               csd->tacc_ns     = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
+               csd->tacc_clks   = UNSTUFF_BITS(resp, 104, 8) * 100;
+
+               m = UNSTUFF_BITS(resp, 99, 4);
+               e = UNSTUFF_BITS(resp, 96, 3);
+               csd->max_dtr      = tran_exp[e] * tran_mant[m];
+               csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
+
+               e = UNSTUFF_BITS(resp, 47, 3);
+               m = UNSTUFF_BITS(resp, 62, 12);
+               csd->capacity     = (1 + m) << (e + 2);
+
+               csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
        }
+}
 
-       csd->mmca_vsn    = UNSTUFF_BITS(resp, 122, 4);
-       m = UNSTUFF_BITS(resp, 115, 4);
-       e = UNSTUFF_BITS(resp, 112, 3);
-       csd->tacc_ns     = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
-       csd->tacc_clks   = UNSTUFF_BITS(resp, 104, 8) * 100;
+/*
+ * Given a 64-bit response, decode to our card SCR structure.
+ */
+static void mmc_decode_scr(struct mmc_card *card)
+{
+       struct sd_scr *scr = &card->scr;
+       unsigned int scr_struct;
+       u32 resp[4];
+
+       BUG_ON(!mmc_card_sd(card));
 
-       m = UNSTUFF_BITS(resp, 99, 4);
-       e = UNSTUFF_BITS(resp, 96, 3);
-       csd->max_dtr      = tran_exp[e] * tran_mant[m];
-       csd->cmdclass     = UNSTUFF_BITS(resp, 84, 12);
+       resp[3] = card->raw_scr[1];
+       resp[2] = card->raw_scr[0];
 
-       e = UNSTUFF_BITS(resp, 47, 3);
-       m = UNSTUFF_BITS(resp, 62, 12);
-       csd->capacity     = (1 + m) << (e + 2);
+       scr_struct = UNSTUFF_BITS(resp, 60, 4);
+       if (scr_struct != 0) {
+               printk("%s: unrecognised SCR structure version %d\n",
+                       mmc_hostname(card->host), scr_struct);
+               mmc_card_set_bad(card);
+               return;
+       }
 
-       csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
+       scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
+       scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
 }
 
 /*
@@ -487,6 +689,7 @@ static void mmc_power_up(struct mmc_host *host)
        host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
        host->ios.chip_select = MMC_CS_DONTCARE;
        host->ios.power_mode = MMC_POWER_UP;
+       host->ios.bus_width = MMC_BUS_WIDTH_1;
        host->ops->set_ios(host, &host->ios);
 
        mmc_delay(1);
@@ -505,6 +708,7 @@ static void mmc_power_off(struct mmc_host *host)
        host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
        host->ios.chip_select = MMC_CS_DONTCARE;
        host->ios.power_mode = MMC_POWER_OFF;
+       host->ios.bus_width = MMC_BUS_WIDTH_1;
        host->ops->set_ios(host, &host->ios);
 }
 
@@ -536,6 +740,34 @@ static int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
        return err;
 }
 
+static int mmc_send_app_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
+{
+       struct mmc_command cmd;
+       int i, err = 0;
+
+       cmd.opcode = SD_APP_OP_COND;
+       cmd.arg = ocr;
+       cmd.flags = MMC_RSP_R3;
+
+       for (i = 100; i; i--) {
+               err = mmc_wait_for_app_cmd(host, 0, &cmd, CMD_RETRIES);
+               if (err != MMC_ERR_NONE)
+                       break;
+
+               if (cmd.resp[0] & MMC_CARD_BUSY || ocr == 0)
+                       break;
+
+               err = MMC_ERR_TIMEOUT;
+
+               mmc_delay(10);
+       }
+
+       if (rocr)
+               *rocr = cmd.resp[0];
+
+       return err;
+}
+
 /*
  * Discover cards by requesting their CID.  If this command
  * times out, it is not an error; there are no further cards
@@ -579,13 +811,38 @@ static void mmc_discover_cards(struct mmc_host *host)
 
                card->state &= ~MMC_STATE_DEAD;
 
-               cmd.opcode = MMC_SET_RELATIVE_ADDR;
-               cmd.arg = card->rca << 16;
-               cmd.flags = MMC_RSP_R1;
+               if (host->mode == MMC_MODE_SD) {
+                       mmc_card_set_sd(card);
 
-               err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
-               if (err != MMC_ERR_NONE)
-                       mmc_card_set_dead(card);
+                       cmd.opcode = SD_SEND_RELATIVE_ADDR;
+                       cmd.arg = 0;
+                       cmd.flags = MMC_RSP_R1;
+
+                       err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
+                       if (err != MMC_ERR_NONE)
+                               mmc_card_set_dead(card);
+                       else {
+                               card->rca = cmd.resp[0] >> 16;
+
+                               if (!host->ops->get_ro) {
+                                       printk(KERN_WARNING "%s: host does not "
+                                               "support reading read-only "
+                                               "switch. assuming write-enable.\n",
+                                               mmc_hostname(host));
+                               } else {
+                                       if (host->ops->get_ro(host))
+                                               mmc_card_set_readonly(card);
+                               }
+                       }
+               } else {
+                       cmd.opcode = MMC_SET_RELATIVE_ADDR;
+                       cmd.arg = card->rca << 16;
+                       cmd.flags = MMC_RSP_R1;
+
+                       err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
+                       if (err != MMC_ERR_NONE)
+                               mmc_card_set_dead(card);
+               }
        }
 }
 
@@ -617,6 +874,79 @@ static void mmc_read_csds(struct mmc_host *host)
        }
 }
 
+static void mmc_read_scrs(struct mmc_host *host)
+{
+       int err;
+       struct mmc_card *card;
+
+       struct mmc_request mrq;
+       struct mmc_command cmd;
+       struct mmc_data data;
+
+       struct scatterlist sg;
+
+       list_for_each_entry(card, &host->cards, node) {
+               if (card->state & (MMC_STATE_DEAD|MMC_STATE_PRESENT))
+                       continue;
+               if (!mmc_card_sd(card))
+                       continue;
+
+               err = mmc_select_card(host, card);
+               if (err != MMC_ERR_NONE) {
+                       mmc_card_set_dead(card);
+                       continue;
+               }
+
+               memset(&cmd, 0, sizeof(struct mmc_command));
+
+               cmd.opcode = MMC_APP_CMD;
+               cmd.arg = card->rca << 16;
+               cmd.flags = MMC_RSP_R1;
+
+               err = mmc_wait_for_cmd(host, &cmd, 0);
+               if ((err != MMC_ERR_NONE) || !(cmd.resp[0] & R1_APP_CMD)) {
+                       mmc_card_set_dead(card);
+                       continue;
+               }
+
+               memset(&cmd, 0, sizeof(struct mmc_command));
+
+               cmd.opcode = SD_APP_SEND_SCR;
+               cmd.arg = 0;
+               cmd.flags = MMC_RSP_R1;
+
+               memset(&data, 0, sizeof(struct mmc_data));
+
+               data.timeout_ns = card->csd.tacc_ns * 10;
+               data.timeout_clks = card->csd.tacc_clks * 10;
+               data.blksz_bits = 3;
+               data.blocks = 1;
+               data.flags = MMC_DATA_READ;
+               data.sg = &sg;
+               data.sg_len = 1;
+
+               memset(&mrq, 0, sizeof(struct mmc_request));
+
+               mrq.cmd = &cmd;
+               mrq.data = &data;
+
+               sg_init_one(&sg, (u8*)card->raw_scr, 8);
+
+               err = mmc_wait_for_req(host, &mrq);
+               if (err != MMC_ERR_NONE) {
+                       mmc_card_set_dead(card);
+                       continue;
+               }
+
+               card->raw_scr[0] = ntohl(card->raw_scr[0]);
+               card->raw_scr[1] = ntohl(card->raw_scr[1]);
+
+               mmc_decode_scr(card);
+       }
+
+       mmc_deselect_cards(host);
+}
+
 static unsigned int mmc_calculate_clock(struct mmc_host *host)
 {
        struct mmc_card *card;
@@ -669,12 +999,24 @@ static void mmc_setup(struct mmc_host *host)
                int err;
                u32 ocr;
 
+               host->mode = MMC_MODE_SD;
+
                mmc_power_up(host);
                mmc_idle_cards(host);
 
-               err = mmc_send_op_cond(host, 0, &ocr);
-               if (err != MMC_ERR_NONE)
-                       return;
+               err = mmc_send_app_op_cond(host, 0, &ocr);
+
+               /*
+                * If we fail to detect any SD cards then try
+                * searching for MMC cards.
+                */
+               if (err != MMC_ERR_NONE) {
+                       host->mode = MMC_MODE_MMC;
+
+                       err = mmc_send_op_cond(host, 0, &ocr);
+                       if (err != MMC_ERR_NONE)
+                               return;
+               }
 
                host->ocr = mmc_select_voltage(host, ocr);
 
@@ -714,7 +1056,10 @@ static void mmc_setup(struct mmc_host *host)
         * all get the idea that they should be ready for CMD2.
         * (My SanDisk card seems to need this.)
         */
-       mmc_send_op_cond(host, host->ocr, NULL);
+       if (host->mode == MMC_MODE_SD)
+               mmc_send_app_op_cond(host, host->ocr, NULL);
+       else
+               mmc_send_op_cond(host, host->ocr, NULL);
 
        mmc_discover_cards(host);
 
@@ -725,6 +1070,9 @@ static void mmc_setup(struct mmc_host *host)
        host->ops->set_ios(host, &host->ios);
 
        mmc_read_csds(host);
+
+       if (host->mode == MMC_MODE_SD)
+               mmc_read_scrs(host);
 }
 
 
index d4eee99c2bf65ffe86798deb86cdd5ef0a2e81da..fa83f15fdf161d8eafda24958a8e9ccb6ebc2573 100644 (file)
@@ -95,6 +95,10 @@ static int mmc_blk_open(struct inode *inode, struct file *filp)
                if (md->usage == 2)
                        check_disk_change(inode->i_bdev);
                ret = 0;
+
+               if ((filp->f_mode & FMODE_WRITE) &&
+                       mmc_card_readonly(md->queue.card))
+                       ret = -EROFS;
        }
 
        return ret;
@@ -403,9 +407,10 @@ static int mmc_blk_probe(struct mmc_card *card)
        if (err)
                goto out;
 
-       printk(KERN_INFO "%s: %s %s %dKiB\n",
+       printk(KERN_INFO "%s: %s %s %dKiB %s\n",
                md->disk->disk_name, mmc_card_id(card), mmc_card_name(card),
-               (card->csd.capacity << card->csd.read_blkbits) / 1024);
+               (card->csd.capacity << card->csd.read_blkbits) / 1024,
+               mmc_card_readonly(card)?"(ro)":"");
 
        mmc_set_drvdata(card, md);
        add_disk(md->disk);
index ad8949810fc5cbeb79de505265ed57fb1aeba6b9..3f4a66ca9555e6c354c468266d22609adf56c628 100644 (file)
@@ -34,6 +34,7 @@ MMC_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
        card->raw_cid[2], card->raw_cid[3]);
 MMC_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
        card->raw_csd[2], card->raw_csd[3]);
+MMC_ATTR(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]);
 MMC_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
 MMC_ATTR(fwrev, "0x%x\n", card->cid.fwrev);
 MMC_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
@@ -57,6 +58,8 @@ static struct device_attribute mmc_dev_attrs[] = {
        __ATTR_NULL
 };
 
+static struct device_attribute mmc_dev_attr_scr = MMC_ATTR_RO(scr);
+
 
 static void mmc_release_card(struct device *dev)
 {
@@ -207,10 +210,20 @@ void mmc_init_card(struct mmc_card *card, struct mmc_host *host)
  */
 int mmc_register_card(struct mmc_card *card)
 {
+       int ret;
+
        snprintf(card->dev.bus_id, sizeof(card->dev.bus_id),
                 "%s:%04x", mmc_hostname(card->host), card->rca);
 
-       return device_add(&card->dev);
+       ret = device_add(&card->dev);
+       if (ret == 0) {
+               if (mmc_card_sd(card)) {
+                       ret = device_create_file(&card->dev, &mmc_dev_attr_scr);
+                       if (ret)
+                               device_del(&card->dev);
+               }
+       }
+       return ret;
 }
 
 /*
@@ -219,8 +232,12 @@ int mmc_register_card(struct mmc_card *card)
  */
 void mmc_remove_card(struct mmc_card *card)
 {
-       if (mmc_card_present(card))
+       if (mmc_card_present(card)) {
+               if (mmc_card_sd(card))
+                       device_remove_file(&card->dev, &mmc_dev_attr_scr);
+
                device_del(&card->dev);
+       }
 
        put_device(&card->dev);
 }
index b78beb1b0159cc66748c15c19e05407c8c12d076..e99a53b09e321390d683362cf483923774d535a7 100644 (file)
@@ -362,6 +362,16 @@ static void pxamci_request(struct mmc_host *mmc, struct mmc_request *mrq)
        pxamci_start_cmd(host, mrq->cmd, cmdat);
 }
 
+static int pxamci_get_ro(struct mmc_host *mmc)
+{
+       struct pxamci_host *host = mmc_priv(mmc);
+
+       if (host->pdata && host->pdata->get_ro)
+               return host->pdata->get_ro(mmc->dev);
+       /* Host doesn't support read only detection so assume writeable */
+       return 0;
+}
+
 static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 {
        struct pxamci_host *host = mmc_priv(mmc);
@@ -401,6 +411,7 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 
 static struct mmc_host_ops pxamci_ops = {
        .request        = pxamci_request,
+       .get_ro         = pxamci_get_ro,
        .set_ios        = pxamci_set_ios,
 };
 
index 08ae22aed9e8f7f38a1c61af4a0b87b92b563a0b..dec01d38c782fce5935ffb575ca90122934260e7 100644 (file)
@@ -720,11 +720,28 @@ static void wbsd_prepare_data(struct wbsd_host* host, struct mmc_data* data)
         * calculate CRC.
         *
         * Space for CRC must be included in the size.
+        * Two bytes are needed for each data line.
         */
-       blksize = (1 << data->blksz_bits) + 2;
+       if (host->bus_width == MMC_BUS_WIDTH_1)
+       {
+               blksize = (1 << data->blksz_bits) + 2;
+
+               wbsd_write_index(host, WBSD_IDX_PBSMSB, (blksize >> 4) & 0xF0);
+               wbsd_write_index(host, WBSD_IDX_PBSLSB, blksize & 0xFF);
+       }
+       else if (host->bus_width == MMC_BUS_WIDTH_4)
+       {
+               blksize = (1 << data->blksz_bits) + 2 * 4;
        
-       wbsd_write_index(host, WBSD_IDX_PBSMSB, (blksize >> 4) & 0xF0);
-       wbsd_write_index(host, WBSD_IDX_PBSLSB, blksize & 0xFF);
+               wbsd_write_index(host, WBSD_IDX_PBSMSB, ((blksize >> 4) & 0xF0)
+                       | WBSD_DATA_WIDTH);
+               wbsd_write_index(host, WBSD_IDX_PBSLSB, blksize & 0xFF);
+       }
+       else
+       {
+               data->error = MMC_ERR_INVALID;
+               return;
+       }
 
        /*
         * Clear the FIFO. This is needed even for DMA
@@ -960,9 +977,9 @@ static void wbsd_set_ios(struct mmc_host* mmc, struct mmc_ios* ios)
        struct wbsd_host* host = mmc_priv(mmc);
        u8 clk, setup, pwr;
        
-       DBGF("clock %uHz busmode %u powermode %u cs %u Vdd %u\n",
-               ios->clock, ios->bus_mode, ios->power_mode, ios->chip_select,
-               ios->vdd);
+       DBGF("clock %uHz busmode %u powermode %u cs %u Vdd %u width %u\n",
+            ios->clock, ios->bus_mode, ios->power_mode, ios->chip_select,
+            ios->vdd, ios->bus_width);
 
        spin_lock_bh(&host->lock);
 
@@ -1010,6 +1027,7 @@ static void wbsd_set_ios(struct mmc_host* mmc, struct mmc_ios* ios)
        setup = wbsd_read_index(host, WBSD_IDX_SETUP);
        if (ios->chip_select == MMC_CS_HIGH)
        {
+               BUG_ON(ios->bus_width != MMC_BUS_WIDTH_1);
                setup |= WBSD_DAT3_H;
                host->flags |= WBSD_FIGNORE_DETECT;
        }
@@ -1025,12 +1043,41 @@ static void wbsd_set_ios(struct mmc_host* mmc, struct mmc_ios* ios)
        }
        wbsd_write_index(host, WBSD_IDX_SETUP, setup);
        
+       /*
+        * Store bus width for later. Will be used when
+        * setting up the data transfer.
+        */
+       host->bus_width = ios->bus_width;
+
        spin_unlock_bh(&host->lock);
 }
 
+static int wbsd_get_ro(struct mmc_host* mmc)
+{
+       struct wbsd_host* host = mmc_priv(mmc);
+       u8 csr;
+
+       spin_lock_bh(&host->lock);
+
+       csr = inb(host->base + WBSD_CSR);
+       csr |= WBSD_MSLED;
+       outb(csr, host->base + WBSD_CSR);
+
+       mdelay(1);
+
+       csr = inb(host->base + WBSD_CSR);
+       csr &= ~WBSD_MSLED;
+       outb(csr, host->base + WBSD_CSR);
+
+       spin_unlock_bh(&host->lock);
+
+       return csr & WBSD_WRPT;
+}
+
 static struct mmc_host_ops wbsd_ops = {
        .request        = wbsd_request,
        .set_ios        = wbsd_set_ios,
+       .get_ro         = wbsd_get_ro,
 };
 
 /*****************************************************************************\
@@ -1355,6 +1402,7 @@ static int __devinit wbsd_alloc_mmc(struct device* dev)
        mmc->f_min = 375000;
        mmc->f_max = 24000000;
        mmc->ocr_avail = MMC_VDD_32_33|MMC_VDD_33_34;
+       mmc->caps = MMC_CAP_4_BIT_DATA;
        
        spin_lock_init(&host->lock);
        
index 8af43549f5d5b95b34bbe8b17b1fad18199be236..9005b5241b3cce44c132f13be7e9b5270cfc691c 100644 (file)
 #define WBSD_CLK_16M           0x02
 #define WBSD_CLK_24M           0x03
 
+#define WBSD_DATA_WIDTH                0x01
+
 #define WBSD_DAT3_H            0x08
 #define WBSD_FIFO_RESET                0x04
 #define WBSD_SOFT_RESET                0x02
@@ -164,6 +166,7 @@ struct wbsd_host
        int                     firsterr;       /* See fifo functions */
        
        u8                      clk;            /* Current clock speed */
+       unsigned char           bus_width;      /* Current bus width */
        
        int                     config;         /* Config port */
        u8                      unlock_code;    /* Code to unlock config */
index eee5115658c8c37bc3bf91136f48494e4221cb16..04e54318bc6a603f2c44b32e3b2f8b5b260a64dc 100644 (file)
@@ -526,6 +526,7 @@ static void nand_wait_ready(struct mtd_info *mtd)
        do {
                if (this->dev_ready(mtd))
                        return;
+               touch_softlockup_watchdog();
        } while (time_before(jiffies, timeo));  
 }
 
index 07746b95fd83754cb3875bdea4ebe9b545bbcf6c..455ba915ede738adc53f533f1b0a672cb07228d9 100644 (file)
@@ -973,6 +973,11 @@ static int vortex_suspend (struct pci_dev *pdev, pm_message_t state)
                        netif_device_detach(dev);
                        vortex_down(dev, 1);
                }
+               pci_save_state(pdev);
+               pci_enable_wake(pdev, pci_choose_state(pdev, state), 0);
+               free_irq(dev->irq, dev);
+               pci_disable_device(pdev);
+               pci_set_power_state(pdev, pci_choose_state(pdev, state));
        }
        return 0;
 }
@@ -980,8 +985,19 @@ static int vortex_suspend (struct pci_dev *pdev, pm_message_t state)
 static int vortex_resume (struct pci_dev *pdev)
 {
        struct net_device *dev = pci_get_drvdata(pdev);
+       struct vortex_private *vp = netdev_priv(dev);
 
-       if (dev && dev->priv) {
+       if (dev && vp) {
+               pci_set_power_state(pdev, PCI_D0);
+               pci_restore_state(pdev);
+               pci_enable_device(pdev);
+               pci_set_master(pdev);
+               if (request_irq(dev->irq, vp->full_bus_master_rx ?
+                               &boomerang_interrupt : &vortex_interrupt, SA_SHIRQ, dev->name, dev)) {
+                       printk(KERN_WARNING "%s: Could not reserve IRQ %d\n", dev->name, dev->irq);
+                       pci_disable_device(pdev);
+                       return -EBUSY;
+               }
                if (netif_running(dev)) {
                        vortex_up(dev);
                        netif_device_attach(dev);
@@ -1873,6 +1889,7 @@ vortex_timer(unsigned long data)
                {
                        spin_lock_bh(&vp->lock);
                        mii_status = mdio_read(dev, vp->phys[0], 1);
+                       mii_status = mdio_read(dev, vp->phys[0], 1);
                        ok = 1;
                        if (vortex_debug > 2)
                                printk(KERN_DEBUG "%s: MII transceiver has status %4.4x.\n",
index ae9e7a579b94984a978264a38d4f0ac3e1e9b6ed..6bb9232514b4e95a1b6506fe792e61a5f46779e5 100644 (file)
@@ -2058,6 +2058,13 @@ config BNX2
          To compile this driver as a module, choose M here: the module
          will be called bnx2.  This is recommended.
 
+config SPIDER_NET
+       tristate "Spider Gigabit Ethernet driver"
+       depends on PCI && PPC_BPA
+       help
+         This driver supports the Gigabit Ethernet chips present on the
+         Cell Processor-Based Blades from IBM.
+
 config GIANFAR
        tristate "Gianfar Ethernet"
        depends on 85xx || 83xx
index 5baafcd5561086de53a6b7c8dd54850ea5be32b4..8645c843cf4d0216c8e8e4a53b202d7a576c2b07 100644 (file)
@@ -54,6 +54,8 @@ obj-$(CONFIG_STNIC) += stnic.o 8390.o
 obj-$(CONFIG_FEALNX) += fealnx.o
 obj-$(CONFIG_TIGON3) += tg3.o
 obj-$(CONFIG_BNX2) += bnx2.o
+spidernet-y += spider_net.o spider_net_ethtool.o sungem_phy.o
+obj-$(CONFIG_SPIDER_NET) += spidernet.o
 obj-$(CONFIG_TC35815) += tc35815.o
 obj-$(CONFIG_SKGE) += skge.o
 obj-$(CONFIG_SK98LIN) += sk98lin/
index 91791ba3776930bb8354ad691680ac00e0882b85..8a0af5453e21c93ed6eb19e7d8d925b65cc16cee 100644 (file)
@@ -275,7 +275,7 @@ static int __init ac_probe1(int ioaddr, struct net_device *dev)
        return 0;
 out2:
        if (ei_status.reg0)
-               iounmap((void *)dev->mem_start);
+               iounmap(ei_status.mem);
 out1:
        free_irq(dev->irq, dev);
 out:
index 4f9f69e22c1bd3c2f63c17f245d95f67e3565ca3..12ef52c193a39a2e1743bda3292110c4f76279d8 100644 (file)
@@ -597,7 +597,7 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
        struct ArcProto *proto;
        int txbuf;
        unsigned long flags;
-       int freeskb = 0;
+       int freeskb, retval;
 
        BUGMSG(D_DURING,
               "transmit requested (status=%Xh, txbufs=%d/%d, len=%d, protocol %x)\n",
@@ -615,7 +615,7 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
        if (skb->len - ARC_HDR_SIZE > XMTU && !proto->continue_tx) {
                BUGMSG(D_NORMAL, "fixme: packet too large: compensating badly!\n");
                dev_kfree_skb(skb);
-               return 0;       /* don't try again */
+               return NETDEV_TX_OK;    /* don't try again */
        }
 
        /* We're busy transmitting a packet... */
@@ -623,8 +623,11 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
 
        spin_lock_irqsave(&lp->lock, flags);
        AINTMASK(0);
-
-       txbuf = get_arcbuf(dev);
+       if(lp->next_tx == -1)
+               txbuf = get_arcbuf(dev);
+       else {
+               txbuf = -1;
+       }
        if (txbuf != -1) {
                if (proto->prepare_tx(dev, pkt, skb->len, txbuf) &&
                    !proto->ack_tx) {
@@ -638,6 +641,8 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
                        lp->outgoing.skb = skb;
                        lp->outgoing.pkt = pkt;
 
+                       freeskb = 0;
+
                        if (proto->continue_tx &&
                            proto->continue_tx(dev, txbuf)) {
                          BUGMSG(D_NORMAL,
@@ -645,10 +650,12 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
                                 "(proto='%c')\n", proto->suffix);
                        }
                }
-
+               retval = NETDEV_TX_OK;
+               dev->trans_start = jiffies;
                lp->next_tx = txbuf;
        } else {
-               freeskb = 1;
+               retval = NETDEV_TX_BUSY;
+               freeskb = 0;
        }
 
        BUGMSG(D_DEBUG, "%s: %d: %s, status: %x\n",__FILE__,__LINE__,__FUNCTION__,ASTATUS());
@@ -664,7 +671,7 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
        if (freeskb) {
                dev_kfree_skb(skb);
        }
-       return 0;               /* no need to try again */
+       return retval;          /* no need to try again */
 }
 
 
@@ -690,7 +697,6 @@ static int go_tx(struct net_device *dev)
        /* start sending */
        ACOMMAND(TXcmd | (lp->cur_tx << 3));
 
-       dev->trans_start = jiffies;
        lp->stats.tx_packets++;
        lp->lasttrans_dest = lp->lastload_dest;
        lp->lastload_dest = 0;
@@ -917,6 +923,9 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
                        BUGMSG(D_RECON, "Network reconfiguration detected (status=%Xh)\n",
                               status);
+                       /* MYRECON bit is at bit 7 of diagstatus */
+                       if(diagstatus & 0x80)
+                               BUGMSG(D_RECON,"Put out that recon myself\n");
 
                        /* is the RECON info empty or old? */
                        if (!lp->first_recon || !lp->last_recon ||
index ad011214c7f2a0ffc19029642aacda83e3065e6a..e01b6a78ec6330115ce08a104498aeb3dbf91194 100644 (file)
@@ -235,7 +235,7 @@ struct lance_private {
 #define        MEM             lp->mem
 #define        DREG    IO->data
 #define        AREG    IO->addr
-#define        REGA(a) ( AREG = (a), DREG )
+#define        REGA(a) (*( AREG = (a), &DREG ))
 
 /* Definitions for packet buffer access: */
 #define PKT_BUF_SZ             1544
index 6440a892bb813ca4a08e0a1878cf0dedb43b254d..e54fc10f68467c7fd9bf92e11b9fb9d3fba3cee4 100644 (file)
@@ -1140,7 +1140,7 @@ dm9000_phy_write(struct net_device *dev, int phyaddr_unused, int reg, int value)
 }
 
 static int
-dm9000_drv_suspend(struct device *dev, u32 state, u32 level)
+dm9000_drv_suspend(struct device *dev, pm_message_t state, u32 level)
 {
        struct net_device *ndev = dev_get_drvdata(dev);
 
index 7d93948aec83410e2ba2100111b4e88bd74a4909..d6eefdb71c174889b6491635121fe33f9b789594 100644 (file)
@@ -1372,7 +1372,7 @@ static int nv_change_mtu(struct net_device *dev, int new_mtu)
 
        /* synchronized against open : rtnl_lock() held by caller */
        if (netif_running(dev)) {
-               u8 *base = get_hwbase(dev);
+               u8 __iomem *base = get_hwbase(dev);
                /*
                 * It seems that the nic preloads valid ring entries into an
                 * internal buffer. The procedure for flushing everything is
@@ -1423,7 +1423,7 @@ static int nv_change_mtu(struct net_device *dev, int new_mtu)
 
 static void nv_copy_mac_to_hw(struct net_device *dev)
 {
-       u8 *base = get_hwbase(dev);
+       u8 __iomem *base = get_hwbase(dev);
        u32 mac[2];
 
        mac[0] = (dev->dev_addr[0] << 0) + (dev->dev_addr[1] << 8) +
index d9df1d9a5739c471c82ec43186c8312c90f6b63f..bc9a3bf8d5605d2301ad300b9f848cfefa267465 100644 (file)
@@ -204,6 +204,10 @@ KERN_INFO "   Further modifications by Keith Underwood <keithu@parl.clemson.edu>
 
 #define RUN_AT(x) (jiffies + (x))
 
+#ifndef ADDRLEN
+#define ADDRLEN 32
+#endif
+
 /* Condensed bus+endian portability operations. */
 #if ADDRLEN == 64
 #define cpu_to_leXX(addr)      cpu_to_le64(addr)
index 10125a1dba22bb33bd941b258779bf4f9b486ba2..dd89bda1f1315914349fe692029108b30dd6262a 100644 (file)
@@ -4,10 +4,10 @@
  * Description:   Driver for the SMC Infrared Communications Controller
  * Status:        Experimental.
  * Author:        Daniele Peri (peri@csai.unipa.it)
- * Created at:    
- * Modified at:   
- * Modified by:   
- * 
+ * Created at:
+ * Modified at:
+ * Modified by:
+ *
  *     Copyright (c) 2002      Daniele Peri
  *     All Rights Reserved.
  *     Copyright (c) 2002      Jean Tourrilhes
  *
  *     Copyright (c) 2001      Stefani Seibold
  *     Copyright (c) 1999-2001 Dag Brattli
- *     Copyright (c) 1998-1999 Thomas Davis, 
+ *     Copyright (c) 1998-1999 Thomas Davis,
  *
  *     and irport.c:
  *
  *     Copyright (c) 1997, 1998, 1999-2000 Dag Brattli, 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 
+ *
+ *     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, 
+ *
+ *     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 "smsc-ircc2.h"
 #include "smsc-sio.h"
 
+
+MODULE_AUTHOR("Daniele Peri <peri@csai.unipa.it>");
+MODULE_DESCRIPTION("SMC IrCC SIR/FIR controller driver");
+MODULE_LICENSE("GPL");
+
+static int ircc_dma = 255;
+module_param(ircc_dma, int, 0);
+MODULE_PARM_DESC(ircc_dma, "DMA channel");
+
+static int ircc_irq = 255;
+module_param(ircc_irq, int, 0);
+MODULE_PARM_DESC(ircc_irq, "IRQ line");
+
+static int ircc_fir;
+module_param(ircc_fir, int, 0);
+MODULE_PARM_DESC(ircc_fir, "FIR Base Address");
+
+static int ircc_sir;
+module_param(ircc_sir, int, 0);
+MODULE_PARM_DESC(ircc_sir, "SIR Base Address");
+
+static int ircc_cfg;
+module_param(ircc_cfg, int, 0);
+MODULE_PARM_DESC(ircc_cfg, "Configuration register base address");
+
+static int ircc_transceiver;
+module_param(ircc_transceiver, int, 0);
+MODULE_PARM_DESC(ircc_transceiver, "Transceiver type");
+
 /* Types */
 
 struct smsc_transceiver {
        char *name;
-       void (*set_for_speed)(int fir_base, u32 speed); 
+       void (*set_for_speed)(int fir_base, u32 speed);
        int  (*probe)(int fir_base);
 };
-typedef struct smsc_transceiver smsc_transceiver_t;
-
-#if 0
-struct smc_chip {
-       char *name;
-       u16 flags;
-       u8 devid;
-       u8 rev;
-};
-typedef struct smc_chip smc_chip_t;
-#endif
 
 struct smsc_chip {
        char *name;
@@ -96,20 +114,18 @@ struct smsc_chip {
        u8 devid;
        u8 rev;
 };
-typedef struct smsc_chip smsc_chip_t;
 
 struct smsc_chip_address {
        unsigned int cfg_base;
        unsigned int type;
 };
-typedef struct smsc_chip_address smsc_chip_address_t;
 
 /* Private data for each instance */
 struct smsc_ircc_cb {
        struct net_device *netdev;     /* Yes! we are some kind of netdevice */
        struct net_device_stats stats;
        struct irlap_cb    *irlap; /* The link layer we are binded to */
-       
+
        chipio_t io;               /* IrDA controller information */
        iobuff_t tx_buff;          /* Transmit buffer */
        iobuff_t rx_buff;          /* Receive buffer */
@@ -119,7 +135,7 @@ struct smsc_ircc_cb {
        struct qos_info qos;       /* QoS capabilities for this device */
 
        spinlock_t lock;           /* For serializing operations */
-       
+
        __u32 new_speed;
        __u32 flags;               /* Interface flags */
 
@@ -127,18 +143,20 @@ struct smsc_ircc_cb {
        int tx_len;                /* Number of frames in tx_buff */
 
        int transceiver;
-       struct pm_dev *pmdev;
+       struct platform_device *pldev;
 };
 
 /* Constants */
 
-static const char *driver_name = "smsc-ircc2";
-#define        DIM(x)  (sizeof(x)/(sizeof(*(x))))
+#define SMSC_IRCC2_DRIVER_NAME                 "smsc-ircc2"
+
 #define SMSC_IRCC2_C_IRDA_FALLBACK_SPEED       9600
 #define SMSC_IRCC2_C_DEFAULT_TRANSCEIVER       1
-#define SMSC_IRCC2_C_NET_TIMEOUT                       0
+#define SMSC_IRCC2_C_NET_TIMEOUT               0
 #define SMSC_IRCC2_C_SIR_STOP                  0
 
+static const char *driver_name = SMSC_IRCC2_DRIVER_NAME;
+
 /* Prototypes */
 
 static int smsc_ircc_open(unsigned int firbase, unsigned int sirbase, u8 dma, u8 irq);
@@ -147,15 +165,15 @@ static void smsc_ircc_setup_io(struct smsc_ircc_cb *self, unsigned int fir_base,
 static void smsc_ircc_setup_qos(struct smsc_ircc_cb *self);
 static void smsc_ircc_init_chip(struct smsc_ircc_cb *self);
 static int __exit smsc_ircc_close(struct smsc_ircc_cb *self);
-static int  smsc_ircc_dma_receive(struct smsc_ircc_cb *self, int iobase); 
-static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self, int iobase);
+static int  smsc_ircc_dma_receive(struct smsc_ircc_cb *self);
+static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self);
 static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self);
 static int  smsc_ircc_hard_xmit_sir(struct sk_buff *skb, struct net_device *dev);
 static int  smsc_ircc_hard_xmit_fir(struct sk_buff *skb, struct net_device *dev);
-static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int iobase, int bofs);
-static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self, int iobase);
-static void smsc_ircc_change_speed(void *priv, u32 speed);
-static void smsc_ircc_set_sir_speed(void *priv, u32 speed);
+static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int bofs);
+static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self);
+static void smsc_ircc_change_speed(struct smsc_ircc_cb *self, u32 speed);
+static void smsc_ircc_set_sir_speed(struct smsc_ircc_cb *self, u32 speed);
 static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 static irqreturn_t smsc_ircc_interrupt_sir(struct net_device *dev);
 static void smsc_ircc_sir_start(struct smsc_ircc_cb *self);
@@ -171,7 +189,6 @@ static int  smsc_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cm
 static void smsc_ircc_timeout(struct net_device *dev);
 #endif
 static struct net_device_stats *smsc_ircc_net_get_stats(struct net_device *dev);
-static int  smsc_ircc_pmproc(struct pm_dev *dev, pm_request_t rqst, void *data);
 static int smsc_ircc_is_receiving(struct smsc_ircc_cb *self);
 static void smsc_ircc_probe_transceiver(struct smsc_ircc_cb *self);
 static void smsc_ircc_set_transceiver_for_speed(struct smsc_ircc_cb *self, u32 speed);
@@ -179,9 +196,9 @@ static void smsc_ircc_sir_wait_hw_transmitter_finish(struct smsc_ircc_cb *self);
 
 /* Probing */
 static int __init smsc_ircc_look_for_chips(void);
-static const smsc_chip_t * __init smsc_ircc_probe(unsigned short cfg_base,u8 reg,const smsc_chip_t *chip,char *type);
-static int __init smsc_superio_flat(const smsc_chip_t *chips, unsigned short cfg_base, char *type);
-static int __init smsc_superio_paged(const smsc_chip_t *chips, unsigned short cfg_base, char *type);
+static const struct smsc_chip * __init smsc_ircc_probe(unsigned short cfg_base, u8 reg, const struct smsc_chip *chip, char *type);
+static int __init smsc_superio_flat(const struct smsc_chip *chips, unsigned short cfg_base, char *type);
+static int __init smsc_superio_paged(const struct smsc_chip *chips, unsigned short cfg_base, char *type);
 static int __init smsc_superio_fdc(unsigned short cfg_base);
 static int __init smsc_superio_lpc(unsigned short cfg_base);
 
@@ -196,21 +213,26 @@ static int  smsc_ircc_probe_transceiver_smsc_ircc_atc(int fir_base);
 
 /* Power Management */
 
-static void smsc_ircc_suspend(struct smsc_ircc_cb *self);
-static void smsc_ircc_wakeup(struct smsc_ircc_cb *self);
-static int smsc_ircc_pmproc(struct pm_dev *dev, pm_request_t rqst, void *data);
+static int smsc_ircc_suspend(struct device *dev, pm_message_t state, u32 level);
+static int smsc_ircc_resume(struct device *dev, u32 level);
 
+static struct device_driver smsc_ircc_driver = {
+       .name           = SMSC_IRCC2_DRIVER_NAME,
+       .bus            = &platform_bus_type,
+       .suspend        = smsc_ircc_suspend,
+       .resume         = smsc_ircc_resume,
+};
 
 /* Transceivers for SMSC-ircc */
 
-static smsc_transceiver_t smsc_transceivers[]=
+static struct smsc_transceiver smsc_transceivers[] =
 {
-       { "Toshiba Satellite 1800 (GP data pin select)", smsc_ircc_set_transceiver_toshiba_sat1800, smsc_ircc_probe_transceiver_toshiba_sat1800},
-       { "Fast pin select", smsc_ircc_set_transceiver_smsc_ircc_fast_pin_select, smsc_ircc_probe_transceiver_smsc_ircc_fast_pin_select},
-       { "ATC IRMode", smsc_ircc_set_transceiver_smsc_ircc_atc, smsc_ircc_probe_transceiver_smsc_ircc_atc},
-       { NULL, NULL}
+       { "Toshiba Satellite 1800 (GP data pin select)", smsc_ircc_set_transceiver_toshiba_sat1800, smsc_ircc_probe_transceiver_toshiba_sat1800 },
+       { "Fast pin select", smsc_ircc_set_transceiver_smsc_ircc_fast_pin_select, smsc_ircc_probe_transceiver_smsc_ircc_fast_pin_select },
+       { "ATC IRMode", smsc_ircc_set_transceiver_smsc_ircc_atc, smsc_ircc_probe_transceiver_smsc_ircc_atc },
+       { NULL, NULL }
 };
-#define SMSC_IRCC2_C_NUMBER_OF_TRANSCEIVERS (DIM(smsc_transceivers)-1)
+#define SMSC_IRCC2_C_NUMBER_OF_TRANSCEIVERS (ARRAY_SIZE(smsc_transceivers) - 1)
 
 /*  SMC SuperIO chipsets definitions */
 
@@ -221,7 +243,7 @@ static smsc_transceiver_t smsc_transceivers[]=
 #define        FIR     4       /* SuperIO Chip has fast IRDA */
 #define        SERx4   8       /* SuperIO Chip supports 115,2 KBaud * 4=460,8 KBaud */
 
-static smsc_chip_t __initdata fdc_chips_flat[]=
+static struct smsc_chip __initdata fdc_chips_flat[] =
 {
        /* Base address 0x3f0 or 0x370 */
        { "37C44",      KEY55_1|NoIRDA,         0x00, 0x00 }, /* This chip cannot be detected */
@@ -235,7 +257,7 @@ static smsc_chip_t __initdata fdc_chips_flat[]=
        { NULL }
 };
 
-static smsc_chip_t __initdata fdc_chips_paged[]=
+static struct smsc_chip __initdata fdc_chips_paged[] =
 {
        /* Base address 0x3f0 or 0x370 */
        { "37B72X",     KEY55_1|SIR|SERx4,      0x4c, 0x00 },
@@ -254,7 +276,7 @@ static smsc_chip_t __initdata fdc_chips_paged[]=
        { NULL }
 };
 
-static smsc_chip_t __initdata lpc_chips_flat[]=
+static struct smsc_chip __initdata lpc_chips_flat[] =
 {
        /* Base address 0x2E or 0x4E */
        { "47N227",     KEY55_1|FIR|SERx4,      0x5a, 0x00 },
@@ -262,7 +284,7 @@ static smsc_chip_t __initdata lpc_chips_flat[]=
        { NULL }
 };
 
-static smsc_chip_t __initdata lpc_chips_paged[]=
+static struct smsc_chip __initdata lpc_chips_paged[] =
 {
        /* Base address 0x2E or 0x4E */
        { "47B27X",     KEY55_1|SIR|SERx4,      0x51, 0x00 },
@@ -281,33 +303,25 @@ static smsc_chip_t __initdata lpc_chips_paged[]=
 #define SMSCSIO_TYPE_FLAT      4
 #define SMSCSIO_TYPE_PAGED     8
 
-static smsc_chip_address_t __initdata possible_addresses[]=
+static struct smsc_chip_address __initdata possible_addresses[] =
 {
-       {0x3f0, SMSCSIO_TYPE_FDC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED},
-       {0x370, SMSCSIO_TYPE_FDC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED},
-       {0xe0, SMSCSIO_TYPE_FDC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED},
-       {0x2e, SMSCSIO_TYPE_LPC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED},
-       {0x4e, SMSCSIO_TYPE_LPC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED},
-       {0,0}
+       { 0x3f0, SMSCSIO_TYPE_FDC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED },
+       { 0x370, SMSCSIO_TYPE_FDC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED },
+       { 0xe0,  SMSCSIO_TYPE_FDC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED },
+       { 0x2e,  SMSCSIO_TYPE_LPC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED },
+       { 0x4e,  SMSCSIO_TYPE_LPC|SMSCSIO_TYPE_FLAT|SMSCSIO_TYPE_PAGED },
+       { 0, 0 }
 };
 
 /* Globals */
 
-static struct smsc_ircc_cb *dev_self[] = { NULL, 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 int ircc_transceiver=0;
-
-static unsigned short  dev_count=0;
+static struct smsc_ircc_cb *dev_self[] = { NULL, NULL };
+static unsigned short dev_count;
 
 static inline void register_bank(int iobase, int bank)
 {
-        outb(((inb(iobase+IRCC_MASTER) & 0xf0) | (bank & 0x07)),
-               iobase+IRCC_MASTER);
+        outb(((inb(iobase + IRCC_MASTER) & 0xf0) | (bank & 0x07)),
+               iobase + IRCC_MASTER);
 }
 
 
@@ -327,34 +341,44 @@ static inline void register_bank(int iobase, int bank)
  */
 static int __init smsc_ircc_init(void)
 {
-       int ret=-ENODEV;
+       int ret;
 
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
 
-       dev_count=0;
-       if ((ircc_fir>0)&&(ircc_sir>0)) {
+       ret = driver_register(&smsc_ircc_driver);
+       if (ret) {
+               IRDA_ERROR("%s, Can't register driver!\n", driver_name);
+               return ret;
+       }
+
+       dev_count = 0;
+
+       if (ircc_fir > 0 && ircc_sir > 0) {
                IRDA_MESSAGE(" Overriding FIR address 0x%04x\n", ircc_fir);
                IRDA_MESSAGE(" Overriding SIR address 0x%04x\n", ircc_sir);
 
-               if (smsc_ircc_open(ircc_fir, ircc_sir, ircc_dma, ircc_irq) == 0)
-                       return 0;
-
-               return -ENODEV;
-       }
+               if (smsc_ircc_open(ircc_fir, ircc_sir, ircc_dma, ircc_irq))
+                       ret = -ENODEV;
+       } else {
+               ret = -ENODEV;
+
+               /* try user provided configuration register base address */
+               if (ircc_cfg > 0) {
+                       IRDA_MESSAGE(" Overriding configuration address "
+                                    "0x%04x\n", ircc_cfg);
+                       if (!smsc_superio_fdc(ircc_cfg))
+                               ret = 0;
+                       if (!smsc_superio_lpc(ircc_cfg))
+                               ret = 0;
+               }
 
-       /* try user provided configuration register base address */
-       if (ircc_cfg>0) {
-               IRDA_MESSAGE(" Overriding configuration address 0x%04x\n",
-                            ircc_cfg);
-               if (!smsc_superio_fdc(ircc_cfg))
-                       ret = 0;
-               if (!smsc_superio_lpc(ircc_cfg))
+               if (smsc_ircc_look_for_chips() > 0)
                        ret = 0;
        }
-       
-       if(smsc_ircc_look_for_chips()>0) ret = 0;
-       
+
+       if (ret)
+               driver_unregister(&smsc_ircc_driver);
+
        return ret;
 }
 
@@ -369,15 +393,15 @@ static int __init smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, u
        struct smsc_ircc_cb *self;
        struct net_device *dev;
        int err;
-       
+
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
 
        err = smsc_ircc_present(fir_base, sir_base);
-       if(err) 
+       if (err)
                goto err_out;
-               
+
        err = -ENOMEM;
-       if (dev_count > DIM(dev_self)) {
+       if (dev_count >= ARRAY_SIZE(dev_self)) {
                IRDA_WARNING("%s(), too many devices!\n", __FUNCTION__);
                goto err_out1;
        }
@@ -396,14 +420,14 @@ static int __init smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, u
        dev->hard_start_xmit = smsc_ircc_hard_xmit_sir;
 #if SMSC_IRCC2_C_NET_TIMEOUT
        dev->tx_timeout      = smsc_ircc_timeout;
-       dev->watchdog_timeo  = HZ*2;  /* Allow enough time for speed change */
+       dev->watchdog_timeo  = HZ * 2;  /* Allow enough time for speed change */
 #endif
        dev->open            = smsc_ircc_net_open;
        dev->stop            = smsc_ircc_net_close;
        dev->do_ioctl        = smsc_ircc_net_ioctl;
        dev->get_stats       = smsc_ircc_net_get_stats;
-       
-       self = dev->priv;
+
+       self = netdev_priv(dev);
        self->netdev = dev;
 
        /* Make ifconfig display some details */
@@ -411,10 +435,10 @@ static int __init smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, u
        dev->irq = self->io.irq = irq;
 
        /* Need to store self somewhere */
-       dev_self[dev_count++] = self;
+       dev_self[dev_count] = self;
        spin_lock_init(&self->lock);
 
-       self->rx_buff.truesize = SMSC_IRCC2_RX_BUFF_TRUESIZE; 
+       self->rx_buff.truesize = SMSC_IRCC2_RX_BUFF_TRUESIZE;
        self->tx_buff.truesize = SMSC_IRCC2_TX_BUFF_TRUESIZE;
 
        self->rx_buff.head =
@@ -442,33 +466,40 @@ static int __init smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, u
        self->rx_buff.state = OUTSIDE_FRAME;
        self->tx_buff.data = self->tx_buff.head;
        self->rx_buff.data = self->rx_buff.head;
-          
-       smsc_ircc_setup_io(self, fir_base, sir_base, dma, irq);
 
+       smsc_ircc_setup_io(self, fir_base, sir_base, dma, irq);
        smsc_ircc_setup_qos(self);
-
        smsc_ircc_init_chip(self);
-       
-       if(ircc_transceiver > 0  && 
-          ircc_transceiver < SMSC_IRCC2_C_NUMBER_OF_TRANSCEIVERS)
+
+       if (ircc_transceiver > 0  &&
+           ircc_transceiver < SMSC_IRCC2_C_NUMBER_OF_TRANSCEIVERS)
                self->transceiver = ircc_transceiver;
        else
                smsc_ircc_probe_transceiver(self);
 
        err = register_netdev(self->netdev);
-       if(err) {
+       if (err) {
                IRDA_ERROR("%s, Network device registration failed!\n",
                           driver_name);
                goto err_out4;
        }
 
-       self->pmdev = pm_register(PM_SYS_DEV, PM_SYS_IRDA, smsc_ircc_pmproc);
-       if (self->pmdev)
-               self->pmdev->data = self;
+       self->pldev = platform_device_register_simple(SMSC_IRCC2_DRIVER_NAME,
+                                                     dev_count, NULL, 0);
+       if (IS_ERR(self->pldev)) {
+               err = PTR_ERR(self->pldev);
+               goto err_out5;
+       }
+       dev_set_drvdata(&self->pldev->dev, self);
 
        IRDA_MESSAGE("IrDA: Registered device %s\n", dev->name);
+       dev_count++;
 
        return 0;
+
+ err_out5:
+       unregister_netdev(self->netdev);
+
  err_out4:
        dma_free_coherent(NULL, self->tx_buff.truesize,
                          self->tx_buff.head, self->tx_buff_dma);
@@ -477,7 +508,7 @@ static int __init smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, u
                          self->rx_buff.head, self->rx_buff_dma);
  err_out2:
        free_netdev(self->netdev);
-       dev_self[--dev_count] = NULL;
+       dev_self[dev_count] = NULL;
  err_out1:
        release_region(fir_base, SMSC_IRCC2_FIR_CHIP_IO_EXTENT);
        release_region(sir_base, SMSC_IRCC2_SIR_CHIP_IO_EXTENT);
@@ -511,16 +542,16 @@ static int smsc_ircc_present(unsigned int fir_base, unsigned int sir_base)
 
        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);
+       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);
        dma     = config & IRCC_INTERFACE_DMA_MASK;
        irq     = (config & IRCC_INTERFACE_IRQ_MASK) >> 4;
 
-       if (high != 0x10 || low != 0xb8 || (chip != 0xf1 && chip != 0xf2)) { 
-               IRDA_WARNING("%s(), addr 0x%04x - no device found!\n",
+       if (high != 0x10 || low != 0xb8 || (chip != 0xf1 && chip != 0xf2)) {
+               IRDA_WARNING("%s(), addr 0x%04x - no device found!\n",
                             __FUNCTION__, fir_base);
                goto out3;
        }
@@ -529,6 +560,7 @@ static int smsc_ircc_present(unsigned int fir_base, unsigned int sir_base)
                     chip & 0x0f, version, fir_base, sir_base, dma, irq);
 
        return 0;
+
  out3:
        release_region(sir_base, SMSC_IRCC2_SIR_CHIP_IO_EXTENT);
  out2:
@@ -543,16 +575,16 @@ static int smsc_ircc_present(unsigned int fir_base, unsigned int sir_base)
  *    Setup I/O
  *
  */
-static void smsc_ircc_setup_io(struct smsc_ircc_cb *self, 
-                              unsigned int fir_base, unsigned int sir_base, 
+static void smsc_ircc_setup_io(struct smsc_ircc_cb *self,
+                              unsigned int fir_base, unsigned int sir_base,
                               u8 dma, u8 irq)
 {
        unsigned char config, chip_dma, chip_irq;
 
        register_bank(fir_base, 3);
-       config  = inb(fir_base+IRCC_INTERFACE);
-       chip_dma     = config & IRCC_INTERFACE_DMA_MASK;
-       chip_irq     = (config & IRCC_INTERFACE_IRQ_MASK) >> 4;
+       config = inb(fir_base + IRCC_INTERFACE);
+       chip_dma = config & IRCC_INTERFACE_DMA_MASK;
+       chip_irq = (config & IRCC_INTERFACE_IRQ_MASK) >> 4;
 
        self->io.fir_base  = fir_base;
        self->io.sir_base  = sir_base;
@@ -566,17 +598,15 @@ static void smsc_ircc_setup_io(struct smsc_ircc_cb *self,
                        IRDA_MESSAGE("%s, Overriding IRQ - chip says %d, using %d\n",
                                     driver_name, chip_irq, irq);
                self->io.irq = irq;
-       }
-       else
+       } else
                self->io.irq = chip_irq;
-       
+
        if (dma < 255) {
                if (dma != chip_dma)
                        IRDA_MESSAGE("%s, Overriding DMA - chip says %d, using %d\n",
                                     driver_name, chip_dma, dma);
                self->io.dma = dma;
-       }
-       else
+       } else
                self->io.dma = chip_dma;
 
 }
@@ -591,7 +621,7 @@ static void smsc_ircc_setup_qos(struct smsc_ircc_cb *self)
 {
        /* Initialize QoS for this device */
        irda_init_max_qos_capabilies(&self->qos);
-       
+
        self->qos.baud_rate.bits = IR_9600|IR_19200|IR_38400|IR_57600|
                IR_115200|IR_576000|IR_1152000|(IR_4000000 << 8);
 
@@ -608,43 +638,43 @@ static void smsc_ircc_setup_qos(struct smsc_ircc_cb *self)
  */
 static void smsc_ircc_init_chip(struct smsc_ircc_cb *self)
 {
-       int iobase, ir_mode, ctrl, fast; 
-       
-       IRDA_ASSERT( self != NULL, return; );
-       iobase = self->io.fir_base;
+       int iobase, ir_mode, ctrl, fast;
+
+       IRDA_ASSERT(self != NULL, return;);
 
+       iobase = self->io.fir_base;
        ir_mode = IRCC_CFGA_IRDA_SIR_A;
        ctrl = 0;
        fast = 0;
 
        register_bank(iobase, 0);
-       outb(IRCC_MASTER_RESET, iobase+IRCC_MASTER);
-       outb(0x00, iobase+IRCC_MASTER);
+       outb(IRCC_MASTER_RESET, iobase + IRCC_MASTER);
+       outb(0x00, iobase + IRCC_MASTER);
 
        register_bank(iobase, 1);
-       outb(((inb(iobase+IRCC_SCE_CFGA) & 0x87) | ir_mode), 
-            iobase+IRCC_SCE_CFGA);
+       outb(((inb(iobase + IRCC_SCE_CFGA) & 0x87) | ir_mode),
+            iobase + IRCC_SCE_CFGA);
 
 #ifdef smsc_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(SMSC_IRCC2_FIFO_THRESHOLD, iobase+IRCC_FIFO_THRESHOLD);
-       
+       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(SMSC_IRCC2_FIFO_THRESHOLD, iobase + IRCC_FIFO_THRESHOLD);
+
        register_bank(iobase, 4);
-       outb((inb(iobase+IRCC_CONTROL) & 0x30) | ctrl, iobase+IRCC_CONTROL);
-       
+       outb((inb(iobase + IRCC_CONTROL) & 0x30) | ctrl, iobase + IRCC_CONTROL);
+
        register_bank(iobase, 0);
-       outb(fast, iobase+IRCC_LCR_A);
+       outb(fast, iobase + IRCC_LCR_A);
 
        smsc_ircc_set_sir_speed(self, SMSC_IRCC2_C_IRDA_FALLBACK_SPEED);
-       
+
        /* Power on device */
-       outb(0x00, iobase+IRCC_MASTER);
+       outb(0x00, iobase + IRCC_MASTER);
 }
 
 /*
@@ -662,12 +692,12 @@ static int smsc_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd
 
        IRDA_ASSERT(dev != NULL, return -1;);
 
-       self = dev->priv;
+       self = netdev_priv(dev);
 
        IRDA_ASSERT(self != NULL, return -1;);
 
        IRDA_DEBUG(2, "%s(), %s, (cmd=0x%X)\n", __FUNCTION__, dev->name, cmd);
-       
+
        switch (cmd) {
        case SIOCSBANDWIDTH: /* Set bandwidth */
                if (!capable(CAP_NET_ADMIN))
@@ -703,14 +733,14 @@ static int smsc_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd
        default:
                ret = -EOPNOTSUPP;
        }
-       
+
        return ret;
 }
 
 static struct net_device_stats *smsc_ircc_net_get_stats(struct net_device *dev)
 {
-       struct smsc_ircc_cb *self = (struct smsc_ircc_cb *) dev->priv;
-       
+       struct smsc_ircc_cb *self = netdev_priv(dev);
+
        return &self->stats;
 }
 
@@ -724,11 +754,9 @@ static struct net_device_stats *smsc_ircc_net_get_stats(struct net_device *dev)
 
 static void smsc_ircc_timeout(struct net_device *dev)
 {
-       struct smsc_ircc_cb *self;
+       struct smsc_ircc_cb *self = netdev_priv(dev);
        unsigned long flags;
 
-       self = (struct smsc_ircc_cb *) dev->priv;
-       
        IRDA_WARNING("%s: transmit timed out, changing speed to: %d\n",
                     dev->name, self->io.speed);
        spin_lock_irqsave(&self->lock, flags);
@@ -751,26 +779,23 @@ int smsc_ircc_hard_xmit_sir(struct sk_buff *skb, struct net_device *dev)
 {
        struct smsc_ircc_cb *self;
        unsigned long flags;
-       int iobase;
        s32 speed;
 
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
 
        IRDA_ASSERT(dev != NULL, return 0;);
-       
-       self = (struct smsc_ircc_cb *) dev->priv;
-       IRDA_ASSERT(self != NULL, return 0;);
 
-       iobase = self->io.sir_base;
+       self = netdev_priv(dev);
+       IRDA_ASSERT(self != NULL, return 0;);
 
        netif_stop_queue(dev);
-       
+
        /* Make sure test of self->io.speed & speed change are atomic */
        spin_lock_irqsave(&self->lock, flags);
 
        /* Check if we need to change the speed */
        speed = irda_get_next_speed(skb);
-       if ((speed != self->io.speed) && (speed != -1)) {
+       if (speed != self->io.speed && speed != -1) {
                /* Check for empty frame */
                if (!skb->len) {
                        /*
@@ -787,27 +812,26 @@ int smsc_ircc_hard_xmit_sir(struct sk_buff *skb, struct net_device *dev)
                        spin_unlock_irqrestore(&self->lock, flags);
                        dev_kfree_skb(skb);
                        return 0;
-               } else {
-                       self->new_speed = speed;
                }
+               self->new_speed = speed;
        }
 
        /* Init tx buffer */
        self->tx_buff.data = self->tx_buff.head;
 
        /* Copy skb to tx_buff while wrapping, stuffing and making CRC */
-       self->tx_buff.len = async_wrap_skb(skb, self->tx_buff.data, 
+       self->tx_buff.len = async_wrap_skb(skb, self->tx_buff.data,
                                           self->tx_buff.truesize);
-       
+
        self->stats.tx_bytes += self->tx_buff.len;
 
        /* Turn on transmit finished interrupt. Will fire immediately!  */
-       outb(UART_IER_THRI, iobase+UART_IER); 
+       outb(UART_IER_THRI, self->io.sir_base + UART_IER);
 
        spin_unlock_irqrestore(&self->lock, flags);
 
        dev_kfree_skb(skb);
-       
+
        return 0;
 }
 
@@ -826,9 +850,9 @@ static void smsc_ircc_set_fir_speed(struct smsc_ircc_cb *self, u32 speed)
 
        self->io.speed = speed;
 
-       switch(speed) {
+       switch (speed) {
        default:
-       case 576000:            
+       case 576000:
                ir_mode = IRCC_CFGA_IRDA_HDLC;
                ctrl = IRCC_CRC;
                fast = 0;
@@ -853,14 +877,14 @@ static void smsc_ircc_set_fir_speed(struct smsc_ircc_cb *self, u32 speed)
        Now in tranceiver!
        /* This causes an interrupt */
        register_bank(fir_base, 0);
-       outb((inb(fir_base+IRCC_LCR_A) &  0xbf) | fast, fir_base+IRCC_LCR_A);
+       outb((inb(fir_base + IRCC_LCR_A) &  0xbf) | fast, fir_base + IRCC_LCR_A);
        #endif
-       
+
        register_bank(fir_base, 1);
-       outb(((inb(fir_base+IRCC_SCE_CFGA) & IRCC_SCE_CFGA_BLOCK_CTRL_BITS_MASK) | ir_mode), fir_base+IRCC_SCE_CFGA);
-       
+       outb(((inb(fir_base + IRCC_SCE_CFGA) & IRCC_SCE_CFGA_BLOCK_CTRL_BITS_MASK) | ir_mode), fir_base + IRCC_SCE_CFGA);
+
        register_bank(fir_base, 4);
-       outb((inb(fir_base+IRCC_CONTROL) & 0x30) | ctrl, fir_base+IRCC_CONTROL);
+       outb((inb(fir_base + IRCC_CONTROL) & 0x30) | ctrl, fir_base + IRCC_CONTROL);
 }
 
 /*
@@ -885,31 +909,31 @@ static void smsc_ircc_fir_start(struct smsc_ircc_cb *self)
        /* Reset everything */
 
        /* Install FIR transmit handler */
-       dev->hard_start_xmit = smsc_ircc_hard_xmit_fir; 
+       dev->hard_start_xmit = smsc_ircc_hard_xmit_fir;
 
        /* Clear FIFO */
-       outb(inb(fir_base+IRCC_LCR_A)|IRCC_LCR_A_FIFO_RESET, fir_base+IRCC_LCR_A);
+       outb(inb(fir_base + IRCC_LCR_A) | IRCC_LCR_A_FIFO_RESET, fir_base + IRCC_LCR_A);
 
        /* Enable interrupt */
-       /*outb(IRCC_IER_ACTIVE_FRAME|IRCC_IER_EOM, fir_base+IRCC_IER);*/
+       /*outb(IRCC_IER_ACTIVE_FRAME|IRCC_IER_EOM, fir_base + IRCC_IER);*/
 
        register_bank(fir_base, 1);
 
-       /* Select the TX/RX interface */        
+       /* Select the TX/RX interface */
 #ifdef SMSC_669 /* Uses pin 88/89 for Rx/Tx */
-       outb(((inb(fir_base+IRCC_SCE_CFGB) & 0x3f) | IRCC_CFGB_MUX_COM), 
-            fir_base+IRCC_SCE_CFGB);
-#else  
-       outb(((inb(fir_base+IRCC_SCE_CFGB) & 0x3f) | IRCC_CFGB_MUX_IR),
-            fir_base+IRCC_SCE_CFGB);
-#endif 
-       (void) inb(fir_base+IRCC_FIFO_THRESHOLD);
+       outb(((inb(fir_base + IRCC_SCE_CFGB) & 0x3f) | IRCC_CFGB_MUX_COM),
+            fir_base + IRCC_SCE_CFGB);
+#else
+       outb(((inb(fir_base + IRCC_SCE_CFGB) & 0x3f) | IRCC_CFGB_MUX_IR),
+            fir_base + IRCC_SCE_CFGB);
+#endif
+       (void) inb(fir_base + IRCC_FIFO_THRESHOLD);
 
        /* Enable SCE interrupts */
-       outb(0, fir_base+IRCC_MASTER);
+       outb(0, fir_base + IRCC_MASTER);
        register_bank(fir_base, 0);
-       outb(IRCC_IER_ACTIVE_FRAME|IRCC_IER_EOM, fir_base+IRCC_IER);
-       outb(IRCC_MASTER_INT_EN, fir_base+IRCC_MASTER);
+       outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, fir_base + IRCC_IER);
+       outb(IRCC_MASTER_INT_EN, fir_base + IRCC_MASTER);
 }
 
 /*
@@ -923,13 +947,13 @@ static void smsc_ircc_fir_stop(struct smsc_ircc_cb *self)
        int fir_base;
 
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
-       
+
        IRDA_ASSERT(self != NULL, return;);
 
        fir_base = self->io.fir_base;
        register_bank(fir_base, 0);
-       /*outb(IRCC_MASTER_RESET, fir_base+IRCC_MASTER);*/      
-       outb(inb(fir_base+IRCC_LCR_B) & IRCC_LCR_B_SIP_ENABLE, fir_base+IRCC_LCR_B);
+       /*outb(IRCC_MASTER_RESET, fir_base + IRCC_MASTER);*/
+       outb(inb(fir_base + IRCC_LCR_B) & IRCC_LCR_B_SIP_ENABLE, fir_base + IRCC_LCR_B);
 }
 
 
@@ -941,18 +965,15 @@ static void smsc_ircc_fir_stop(struct smsc_ircc_cb *self)
  * This function *must* be called with spinlock held, because it may
  * be called from the irq handler. - Jean II
  */
-static void smsc_ircc_change_speed(void *priv, u32 speed)
+static void smsc_ircc_change_speed(struct smsc_ircc_cb *self, u32 speed)
 {
-       struct smsc_ircc_cb *self = (struct smsc_ircc_cb *) priv;
        struct net_device *dev;
-       int iobase;
        int last_speed_was_sir;
-       
+
        IRDA_DEBUG(0, "%s() changing speed to: %d\n", __FUNCTION__, speed);
 
        IRDA_ASSERT(self != NULL, return;);
        dev = self->netdev;
-       iobase = self->io.fir_base;
 
        last_speed_was_sir = self->io.speed <= SMSC_IRCC2_MAX_SIR_SPEED;
 
@@ -961,30 +982,30 @@ static void smsc_ircc_change_speed(void *priv, u32 speed)
        speed= 1152000;
        self->io.speed = speed;
        last_speed_was_sir = 0;
-       smsc_ircc_fir_start(self);      
+       smsc_ircc_fir_start(self);
        #endif
-       
-       if(self->io.speed == 0)
+
+       if (self->io.speed == 0)
                smsc_ircc_sir_start(self);
 
        #if 0
-       if(!last_speed_was_sir) speed = self->io.speed;
+       if (!last_speed_was_sir) speed = self->io.speed;
        #endif
 
-       if(self->io.speed != speed) smsc_ircc_set_transceiver_for_speed(self, speed);
+       if (self->io.speed != speed)
+               smsc_ircc_set_transceiver_for_speed(self, speed);
 
        self->io.speed = speed;
-       
-       if(speed <= SMSC_IRCC2_MAX_SIR_SPEED) {
-               if(!last_speed_was_sir) {
+
+       if (speed <= SMSC_IRCC2_MAX_SIR_SPEED) {
+               if (!last_speed_was_sir) {
                        smsc_ircc_fir_stop(self);
                        smsc_ircc_sir_start(self);
                }
-               smsc_ircc_set_sir_speed(self, speed); 
-       }
-       else {
-               if(last_speed_was_sir) {
-                       #if SMSC_IRCC2_C_SIR_STOP               
+               smsc_ircc_set_sir_speed(self, speed);
+       } else {
+               if (last_speed_was_sir) {
+                       #if SMSC_IRCC2_C_SIR_STOP
                        smsc_ircc_sir_stop(self);
                        #endif
                        smsc_ircc_fir_start(self);
@@ -994,13 +1015,13 @@ static void smsc_ircc_change_speed(void *priv, u32 speed)
                #if 0
                self->tx_buff.len = 10;
                self->tx_buff.data = self->tx_buff.head;
-               
-               smsc_ircc_dma_xmit(self, iobase, 4000);
+
+               smsc_ircc_dma_xmit(self, 4000);
                #endif
                /* Be ready for incoming frames */
-               smsc_ircc_dma_receive(self, iobase);
+               smsc_ircc_dma_receive(self);
        }
-       
+
        netif_wake_queue(dev);
 }
 
@@ -1010,10 +1031,9 @@ static void smsc_ircc_change_speed(void *priv, u32 speed)
  *    Set speed of IrDA port to specified baudrate
  *
  */
-void smsc_ircc_set_sir_speed(void *priv, __u32 speed)
+void smsc_ircc_set_sir_speed(struct smsc_ircc_cb *self, __u32 speed)
 {
-       struct smsc_ircc_cb *self = (struct smsc_ircc_cb *) priv;
-       int iobase; 
+       int iobase;
        int fcr;    /* FIFO control reg */
        int lcr;    /* Line control reg */
        int divisor;
@@ -1022,38 +1042,36 @@ void smsc_ircc_set_sir_speed(void *priv, __u32 speed)
 
        IRDA_ASSERT(self != NULL, return;);
        iobase = self->io.sir_base;
-       
+
        /* Update accounting for new speed */
        self->io.speed = speed;
 
        /* Turn off interrupts */
-       outb(0, iobase+UART_IER); 
+       outb(0, iobase + UART_IER);
+
+       divisor = SMSC_IRCC2_MAX_SIR_SPEED / speed;
 
-       divisor = SMSC_IRCC2_MAX_SIR_SPEED/speed;
-       
        fcr = UART_FCR_ENABLE_FIFO;
 
-       /* 
+       /*
         * Use trigger level 1 to avoid 3 ms. timeout delay at 9600 bps, and
         * almost 1,7 ms at 19200 bps. At speeds above that we can just forget
-        * about this timeout since it will always be fast enough. 
+        * about this timeout since it will always be fast enough.
         */
-       if (self->io.speed < 38400)
-               fcr |= UART_FCR_TRIGGER_1;
-       else 
-               fcr |= UART_FCR_TRIGGER_14;
-        
+       fcr |= self->io.speed < 38400 ?
+               UART_FCR_TRIGGER_1 : UART_FCR_TRIGGER_14;
+
        /* IrDA ports use 8N1 */
        lcr = UART_LCR_WLEN8;
-       
-       outb(UART_LCR_DLAB | lcr, iobase+UART_LCR); /* Set DLAB */
-       outb(divisor & 0xff,      iobase+UART_DLL); /* Set speed */
-       outb(divisor >> 8,        iobase+UART_DLM);
-       outb(lcr,                 iobase+UART_LCR); /* Set 8N1  */
-       outb(fcr,                 iobase+UART_FCR); /* Enable FIFO's */
+
+       outb(UART_LCR_DLAB | lcr, iobase + UART_LCR); /* Set DLAB */
+       outb(divisor & 0xff,      iobase + UART_DLL); /* Set speed */
+       outb(divisor >> 8,        iobase + UART_DLM);
+       outb(lcr,                 iobase + UART_LCR); /* Set 8N1 */
+       outb(fcr,                 iobase + UART_FCR); /* Enable FIFO's */
 
        /* Turn on interrups */
-       outb(UART_IER_RLSI|UART_IER_RDI|UART_IER_THRI, iobase+UART_IER);
+       outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
 
        IRDA_DEBUG(2, "%s() speed changed to: %d\n", __FUNCTION__, speed);
 }
@@ -1070,15 +1088,12 @@ static int smsc_ircc_hard_xmit_fir(struct sk_buff *skb, struct net_device *dev)
        struct smsc_ircc_cb *self;
        unsigned long flags;
        s32 speed;
-       int iobase;
        int mtt;
 
        IRDA_ASSERT(dev != NULL, return 0;);
-       self = (struct smsc_ircc_cb *) dev->priv;
+       self = netdev_priv(dev);
        IRDA_ASSERT(self != NULL, return 0;);
 
-       iobase = self->io.fir_base;
-
        netif_stop_queue(dev);
 
        /* Make sure test of self->io.speed & speed change are atomic */
@@ -1086,30 +1101,31 @@ static int smsc_ircc_hard_xmit_fir(struct sk_buff *skb, struct net_device *dev)
 
        /* Check if we need to change the speed after this frame */
        speed = irda_get_next_speed(skb);
-       if ((speed != self->io.speed) && (speed != -1)) {
+       if (speed != self->io.speed && speed != -1) {
                /* Check for empty frame */
                if (!skb->len) {
                        /* 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 */
-                       smsc_ircc_change_speed(self, speed); 
+                       smsc_ircc_change_speed(self, speed);
                        spin_unlock_irqrestore(&self->lock, flags);
                        dev_kfree_skb(skb);
                        return 0;
-               } else
-                       self->new_speed = speed;
+               }
+
+               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);        
+
+       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.
                 */
@@ -1117,11 +1133,12 @@ static int smsc_ircc_hard_xmit_fir(struct sk_buff *skb, struct net_device *dev)
                if (bofs > 4095)
                        bofs = 4095;
 
-               smsc_ircc_dma_xmit(self, iobase, bofs);
+               smsc_ircc_dma_xmit(self, bofs);
        } else {
                /* Transmit frame */
-               smsc_ircc_dma_xmit(self, iobase, 0);
+               smsc_ircc_dma_xmit(self, 0);
        }
+
        spin_unlock_irqrestore(&self->lock, flags);
        dev_kfree_skb(skb);
 
@@ -1129,43 +1146,44 @@ static int smsc_ircc_hard_xmit_fir(struct sk_buff *skb, struct net_device *dev)
 }
 
 /*
- * Function smsc_ircc_dma_xmit (self, iobase)
+ * Function smsc_ircc_dma_xmit (self, bofs)
  *
  *    Transmit data using DMA
  *
  */
-static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int iobase, int bofs)
+static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int bofs)
 {
+       int iobase = self->io.fir_base;
        u8 ctrl;
 
        IRDA_DEBUG(3, "%s\n", __FUNCTION__);
 #if 1
        /* Disable Rx */
        register_bank(iobase, 0);
-       outb(0x00, iobase+IRCC_LCR_B);
+       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);
+       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);
+       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);
+       outb(self->tx_buff.len >> 8, iobase + IRCC_TX_SIZE_HI);
+       outb(self->tx_buff.len & 0xff, iobase + IRCC_TX_SIZE_LO);
 
        /*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);
+       outb(inb(iobase + IRCC_SCE_CFGB) | IRCC_CFGB_DMA_ENABLE |
+            IRCC_CFGB_DMA_BURST, iobase + IRCC_SCE_CFGB);
 
        /* Setup DMA controller (must be done after enabling chip DMA) */
        irda_setup_dma(self->io.dma, self->tx_buff_dma, self->tx_buff.len,
@@ -1174,50 +1192,52 @@ static void smsc_ircc_dma_xmit(struct smsc_ircc_cb *self, int iobase, int bofs)
        /* Enable interrupt */
 
        register_bank(iobase, 0);
-       outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, iobase+IRCC_IER);
-       outb(IRCC_MASTER_INT_EN, iobase+IRCC_MASTER);
-       
+       outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, iobase + IRCC_IER);
+       outb(IRCC_MASTER_INT_EN, iobase + IRCC_MASTER);
+
        /* Enable transmit */
-       outb(IRCC_LCR_B_SCE_TRANSMIT | IRCC_LCR_B_SIP_ENABLE, iobase+IRCC_LCR_B);
+       outb(IRCC_LCR_B_SCE_TRANSMIT | IRCC_LCR_B_SIP_ENABLE, iobase + IRCC_LCR_B);
 }
 
 /*
  * Function smsc_ircc_dma_xmit_complete (self)
  *
- *    The transfer of a frame in finished. This function will only be called 
+ *    The transfer of a frame in finished. This function will only be called
  *    by the interrupt handler
  *
  */
-static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self, int iobase)
+static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self)
 {
+       int iobase = self->io.fir_base;
+
        IRDA_DEBUG(3, "%s\n", __FUNCTION__);
 #if 0
        /* Disable Tx */
        register_bank(iobase, 0);
-       outb(0x00, iobase+IRCC_LCR_B);
+       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);
+       register_bank(iobase, 1);
+       outb(inb(iobase + IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE,
+            iobase + IRCC_SCE_CFGB);
 
        /* Check for underrun! */
        register_bank(iobase, 0);
-       if (inb(iobase+IRCC_LSR) & IRCC_LSR_UNDERRUN) {
+       if (inb(iobase + IRCC_LSR) & IRCC_LSR_UNDERRUN) {
                self->stats.tx_errors++;
                self->stats.tx_fifo_errors++;
 
                /* Reset error condition */
                register_bank(iobase, 0);
-               outb(IRCC_MASTER_ERROR_RESET, iobase+IRCC_MASTER);
-               outb(0x00, iobase+IRCC_MASTER);
+               outb(IRCC_MASTER_ERROR_RESET, iobase + IRCC_MASTER);
+               outb(0x00, iobase + IRCC_MASTER);
        } else {
                self->stats.tx_packets++;
-               self->stats.tx_bytes +=  self->tx_buff.len;
+               self->stats.tx_bytes += self->tx_buff.len;
        }
 
        /* Check if it's time to change the speed */
        if (self->new_speed) {
-               smsc_ircc_change_speed(self, self->new_speed);          
+               smsc_ircc_change_speed(self, self->new_speed);
                self->new_speed = 0;
        }
 
@@ -1231,31 +1251,32 @@ static void smsc_ircc_dma_xmit_complete(struct smsc_ircc_cb *self, int iobase)
  *    if it starts to receive a frame.
  *
  */
-static int smsc_ircc_dma_receive(struct smsc_ircc_cb *self, int iobase) 
+static int smsc_ircc_dma_receive(struct smsc_ircc_cb *self)
 {
+       int iobase = self->io.fir_base;
 #if 0
        /* Turn off chip DMA */
        register_bank(iobase, 1);
-       outb(inb(iobase+IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, 
-            iobase+IRCC_SCE_CFGB);
+       outb(inb(iobase + IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE,
+            iobase + IRCC_SCE_CFGB);
 #endif
-       
+
        /* Disable Tx */
        register_bank(iobase, 0);
-       outb(0x00, iobase+IRCC_LCR_B);
+       outb(0x00, iobase + IRCC_LCR_B);
 
        /* Turn off chip DMA */
        register_bank(iobase, 1);
-       outb(inb(iobase+IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE, 
-            iobase+IRCC_SCE_CFGB);
+       outb(inb(iobase + IRCC_SCE_CFGB) & ~IRCC_CFGB_DMA_ENABLE,
+            iobase + IRCC_SCE_CFGB);
 
        self->io.direction = IO_RECV;
        self->rx_buff.data = self->rx_buff.head;
 
        /* 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);
+       outb((2050 >> 8) & 0x0f, iobase + IRCC_RX_SIZE_HI);
+       outb(2050 & 0xff, iobase + IRCC_RX_SIZE_LO);
 
        /* Setup DMA controller */
        irda_setup_dma(self->io.dma, self->rx_buff_dma, self->rx_buff.truesize,
@@ -1263,83 +1284,83 @@ static int smsc_ircc_dma_receive(struct smsc_ircc_cb *self, int iobase)
 
        /* 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);
+       outb(inb(iobase + IRCC_SCE_CFGB) | IRCC_CFGB_DMA_ENABLE |
+            IRCC_CFGB_DMA_BURST, iobase + IRCC_SCE_CFGB);
 
        /* Enable interrupt */
        register_bank(iobase, 0);
-       outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, iobase+IRCC_IER);
-       outb(IRCC_MASTER_INT_EN, iobase+IRCC_MASTER);
-
+       outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, iobase + IRCC_IER);
+       outb(IRCC_MASTER_INT_EN, iobase + IRCC_MASTER);
 
        /* Enable receiver */
        register_bank(iobase, 0);
-       outb(IRCC_LCR_B_SCE_RECEIVE | IRCC_LCR_B_SIP_ENABLE, 
-            iobase+IRCC_LCR_B);
-       
+       outb(IRCC_LCR_B_SCE_RECEIVE | IRCC_LCR_B_SIP_ENABLE,
+            iobase + IRCC_LCR_B);
+
        return 0;
 }
 
 /*
- * Function smsc_ircc_dma_receive_complete(self, iobase)
+ * Function smsc_ircc_dma_receive_complete(self)
  *
  *    Finished with receiving frames
  *
  */
-static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self, int iobase)
+static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self)
 {
        struct sk_buff *skb;
        int len, msgcnt, lsr;
-       
+       int iobase = self->io.fir_base;
+
        register_bank(iobase, 0);
-       
+
        IRDA_DEBUG(3, "%s\n", __FUNCTION__);
 #if 0
        /* Disable Rx */
        register_bank(iobase, 0);
-       outb(0x00, iobase+IRCC_LCR_B);
+       outb(0x00, iobase + IRCC_LCR_B);
 #endif
        register_bank(iobase, 0);
-       outb(inb(iobase+IRCC_LSAR) & ~IRCC_LSAR_ADDRESS_MASK, iobase+IRCC_LSAR);
-       lsr= inb(iobase+IRCC_LSR);
-       msgcnt = inb(iobase+IRCC_LCR_B) & 0x08;
+       outb(inb(iobase + IRCC_LSAR) & ~IRCC_LSAR_ADDRESS_MASK, iobase + IRCC_LSAR);
+       lsr= inb(iobase + IRCC_LSR);
+       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);
 
-       /* Look for errors 
-        */     
-
-       if(lsr & (IRCC_LSR_FRAME_ERROR | IRCC_LSR_CRC_ERROR | IRCC_LSR_SIZE_ERROR)) {
+       /* Look for errors */
+       if (lsr & (IRCC_LSR_FRAME_ERROR | IRCC_LSR_CRC_ERROR | IRCC_LSR_SIZE_ERROR)) {
                self->stats.rx_errors++;
-               if(lsr & IRCC_LSR_FRAME_ERROR) self->stats.rx_frame_errors++;
-               if(lsr & IRCC_LSR_CRC_ERROR) self->stats.rx_crc_errors++;
-               if(lsr & IRCC_LSR_SIZE_ERROR) self->stats.rx_length_errors++;
-               if(lsr & (IRCC_LSR_UNDERRUN | IRCC_LSR_OVERRUN)) self->stats.rx_length_errors++;
+               if (lsr & IRCC_LSR_FRAME_ERROR)
+                       self->stats.rx_frame_errors++;
+               if (lsr & IRCC_LSR_CRC_ERROR)
+                       self->stats.rx_crc_errors++;
+               if (lsr & IRCC_LSR_SIZE_ERROR)
+                       self->stats.rx_length_errors++;
+               if (lsr & (IRCC_LSR_UNDERRUN | IRCC_LSR_OVERRUN))
+                       self->stats.rx_length_errors++;
                return;
        }
+
        /* Remove CRC */
-       if (self->io.speed < 4000000)
-               len -= 2;
-       else
-               len -= 4;
+       len -= self->io.speed < 4000000 ? 2 : 4;
 
-       if ((len < 2) || (len > 2050)) {
+       if (len < 2 || len > 2050) {
                IRDA_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)  {
+       skb = dev_alloc_skb(len + 1);
+       if (!skb) {
                IRDA_WARNING("%s(), memory squeeze, dropping frame.\n",
                             __FUNCTION__);
                return;
-       }                       
+       }
        /* Make sure IP header gets aligned */
-       skb_reserve(skb, 1); 
+       skb_reserve(skb, 1);
 
        memcpy(skb_put(skb, len), self->rx_buff.data, len);
        self->stats.rx_packets++;
@@ -1357,7 +1378,7 @@ static void smsc_ircc_dma_receive_complete(struct smsc_ircc_cb *self, int iobase
  *    Receive one frame from the infrared port
  *
  */
-static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self) 
+static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self)
 {
        int boguscount = 0;
        int iobase;
@@ -1366,20 +1387,20 @@ static void smsc_ircc_sir_receive(struct smsc_ircc_cb *self)
 
        iobase = self->io.sir_base;
 
-       /*  
-        * Receive all characters in Rx FIFO, unwrap and unstuff them. 
-         * async_unwrap_char will deliver all found frames  
+       /*
+        * Receive all characters in Rx FIFO, unwrap and unstuff them.
+         * async_unwrap_char will deliver all found frames
         */
        do {
-               async_unwrap_char(self->netdev, &self->stats, &self->rx_buff, 
-                                 inb(iobase+UART_RX));
+               async_unwrap_char(self->netdev, &self->stats, &self->rx_buff,
+                                 inb(iobase + UART_RX));
 
                /* Make sure we don't stay here to long */
                if (boguscount++ > 32) {
                        IRDA_DEBUG(2, "%s(), breaking!\n", __FUNCTION__);
                        break;
                }
-       } while (inb(iobase+UART_LSR) & UART_LSR_DR);   
+       } while (inb(iobase + UART_LSR) & UART_LSR_DR);
 }
 
 
@@ -1397,18 +1418,19 @@ static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id, struct pt_regs *re
        irqreturn_t ret = IRQ_NONE;
 
        if (dev == NULL) {
-               printk(KERN_WARNING "%s: irq %d for unknown device.\n", 
+               printk(KERN_WARNING "%s: irq %d for unknown device.\n",
                       driver_name, irq);
                goto irq_ret;
        }
-       self = (struct smsc_ircc_cb *) dev->priv;
+
+       self = netdev_priv(dev);
        IRDA_ASSERT(self != NULL, return IRQ_NONE;);
 
        /* Serialise the interrupt handler in various CPUs, stop Tx path */
-       spin_lock(&self->lock); 
+       spin_lock(&self->lock);
 
        /* Check if we should use the SIR interrupt handler */
-       if (self->io.speed <=  SMSC_IRCC2_MAX_SIR_SPEED) {
+       if (self->io.speed <= SMSC_IRCC2_MAX_SIR_SPEED) {
                ret = smsc_ircc_interrupt_sir(dev);
                goto irq_ret_unlock;
        }
@@ -1416,25 +1438,25 @@ static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id, struct pt_regs *re
        iobase = self->io.fir_base;
 
        register_bank(iobase, 0);
-       iir = inb(iobase+IRCC_IIR);
-       if (iir == 0) 
+       iir = inb(iobase + IRCC_IIR);
+       if (iir == 0)
                goto irq_ret_unlock;
        ret = IRQ_HANDLED;
 
        /* Disable interrupts */
-       outb(0, iobase+IRCC_IER);
-       lcra = inb(iobase+IRCC_LCR_A);
-       lsr = inb(iobase+IRCC_LSR);
-       
+       outb(0, iobase + IRCC_IER);
+       lcra = inb(iobase + IRCC_LCR_A);
+       lsr = inb(iobase + IRCC_LSR);
+
        IRDA_DEBUG(2, "%s(), iir = 0x%02x\n", __FUNCTION__, iir);
 
        if (iir & IRCC_IIR_EOM) {
                if (self->io.direction == IO_RECV)
-                       smsc_ircc_dma_receive_complete(self, iobase);
+                       smsc_ircc_dma_receive_complete(self);
                else
-                       smsc_ircc_dma_xmit_complete(self, iobase);
-               
-               smsc_ircc_dma_receive(self, iobase);
+                       smsc_ircc_dma_xmit_complete(self);
+
+               smsc_ircc_dma_receive(self);
        }
 
        if (iir & IRCC_IIR_ACTIVE_FRAME) {
@@ -1444,7 +1466,7 @@ static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id, struct pt_regs *re
        /* Enable interrupts again */
 
        register_bank(iobase, 0);
-       outb(IRCC_IER_ACTIVE_FRAME|IRCC_IER_EOM, iobase+IRCC_IER);
+       outb(IRCC_IER_ACTIVE_FRAME | IRCC_IER_EOM, iobase + IRCC_IER);
 
  irq_ret_unlock:
        spin_unlock(&self->lock);
@@ -1459,7 +1481,7 @@ static irqreturn_t smsc_ircc_interrupt(int irq, void *dev_id, struct pt_regs *re
  */
 static irqreturn_t smsc_ircc_interrupt_sir(struct net_device *dev)
 {
-       struct smsc_ircc_cb *self = dev->priv;
+       struct smsc_ircc_cb *self = netdev_priv(dev);
        int boguscount = 0;
        int iobase;
        int iir, lsr;
@@ -1469,14 +1491,14 @@ static irqreturn_t smsc_ircc_interrupt_sir(struct net_device *dev)
 
        iobase = self->io.sir_base;
 
-       iir = inb(iobase+UART_IIR) & UART_IIR_ID;
+       iir = inb(iobase + UART_IIR) & UART_IIR_ID;
        if (iir == 0)
                return IRQ_NONE;
        while (iir) {
                /* Clear interrupt */
-               lsr = inb(iobase+UART_LSR);
+               lsr = inb(iobase + UART_LSR);
 
-               IRDA_DEBUG(4, "%s(), iir=%02x, lsr=%02x, iobase=%#x\n", 
+               IRDA_DEBUG(4, "%s(), iir=%02x, lsr=%02x, iobase=%#x\n",
                            __FUNCTION__, iir, lsr, iobase);
 
                switch (iir) {
@@ -1496,13 +1518,13 @@ static irqreturn_t smsc_ircc_interrupt_sir(struct net_device *dev)
                        IRDA_DEBUG(0, "%s(), unhandled IIR=%#x\n",
                                   __FUNCTION__, iir);
                        break;
-               } 
-               
+               }
+
                /* Make sure we don't stay here to long */
                if (boguscount++ > 100)
                        break;
 
-               iir = inb(iobase + UART_IIR) & UART_IIR_ID;
+               iir = inb(iobase + UART_IIR) & UART_IIR_ID;
        }
        /*spin_unlock(&self->lock);*/
        return IRQ_HANDLED;
@@ -1529,7 +1551,7 @@ static int ircc_is_receiving(struct smsc_ircc_cb *self)
                   get_dma_residue(self->io.dma));
 
        status = (self->rx_buff.state != OUTSIDE_FRAME);
-       
+
        return status;
 }
 #endif /* unused */
@@ -1544,19 +1566,16 @@ static int ircc_is_receiving(struct smsc_ircc_cb *self)
 static int smsc_ircc_net_open(struct net_device *dev)
 {
        struct smsc_ircc_cb *self;
-       int iobase;
        char hwname[16];
        unsigned long flags;
 
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
-       
+
        IRDA_ASSERT(dev != NULL, return -1;);
-       self = (struct smsc_ircc_cb *) dev->priv;
+       self = netdev_priv(dev);
        IRDA_ASSERT(self != NULL, return 0;);
-       
-       iobase = self->io.fir_base;
 
-       if (request_irq(self->io.irq, smsc_ircc_interrupt, 0, dev->name, 
+       if (request_irq(self->io.irq, smsc_ircc_interrupt, 0, dev->name,
                        (void *) dev)) {
                IRDA_DEBUG(0, "%s(), unable to allocate irq=%d\n",
                           __FUNCTION__, self->io.irq);
@@ -1568,14 +1587,14 @@ static int smsc_ircc_net_open(struct net_device *dev)
        self->io.speed = 0;
        smsc_ircc_change_speed(self, SMSC_IRCC2_C_IRDA_FALLBACK_SPEED);
        spin_unlock_irqrestore(&self->lock, flags);
-       
+
        /* Give self a hardware name */
        /* It would be cool to offer the chip revision here - Jean II */
        sprintf(hwname, "SMSC @ 0x%03x", self->io.fir_base);
 
-       /* 
+       /*
         * Open new IrLAP layer instance, now that everything should be
-        * initialized properly 
+        * initialized properly
         */
        self->irlap = irlap_open(dev, &self->qos, hwname);
 
@@ -1590,7 +1609,7 @@ static int smsc_ircc_net_open(struct net_device *dev)
                             __FUNCTION__, self->io.dma);
                return -EAGAIN;
        }
-       
+
        netif_start_queue(dev);
 
        return 0;
@@ -1605,73 +1624,53 @@ static int smsc_ircc_net_open(struct net_device *dev)
 static int smsc_ircc_net_close(struct net_device *dev)
 {
        struct smsc_ircc_cb *self;
-       int iobase;
 
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
-       
+
        IRDA_ASSERT(dev != NULL, return -1;);
-       self = (struct smsc_ircc_cb *) dev->priv;       
+       self = netdev_priv(dev);
        IRDA_ASSERT(self != NULL, return 0;);
-       
-       iobase = self->io.fir_base;
 
        /* Stop device */
        netif_stop_queue(dev);
-       
+
        /* Stop and remove instance of IrLAP */
        if (self->irlap)
                irlap_close(self->irlap);
        self->irlap = NULL;
 
        free_irq(self->io.irq, dev);
-
        disable_dma(self->io.dma);
-
        free_dma(self->io.dma);
 
        return 0;
 }
 
-
-static void smsc_ircc_suspend(struct smsc_ircc_cb *self)
+static int smsc_ircc_suspend(struct device *dev, pm_message_t state, u32 level)
 {
-       IRDA_MESSAGE("%s, Suspending\n", driver_name);
+       struct smsc_ircc_cb *self = dev_get_drvdata(dev);
 
-       if (self->io.suspended)
-               return;
+       IRDA_MESSAGE("%s, Suspending\n", driver_name);
 
-       smsc_ircc_net_close(self->netdev);
+       if (level == SUSPEND_DISABLE && !self->io.suspended) {
+               smsc_ircc_net_close(self->netdev);
+               self->io.suspended = 1;
+       }
 
-       self->io.suspended = 1;
+       return 0;
 }
 
-static void smsc_ircc_wakeup(struct smsc_ircc_cb *self)
+static int smsc_ircc_resume(struct device *dev, u32 level)
 {
-       if (!self->io.suspended)
-               return;
+       struct smsc_ircc_cb *self = dev_get_drvdata(dev);
 
-       /* 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 */
+       if (level == RESUME_ENABLE && self->io.suspended) {
 
-       smsc_ircc_net_open(self->netdev);
-       
-       IRDA_MESSAGE("%s, Waking up\n", driver_name);
-}
+               smsc_ircc_net_open(self->netdev);
+               self->io.suspended = 0;
 
-static int smsc_ircc_pmproc(struct pm_dev *dev, pm_request_t rqst, void *data)
-{
-        struct smsc_ircc_cb *self = (struct smsc_ircc_cb*) dev->data;
-        if (self) {
-                switch (rqst) {
-                case PM_SUSPEND:
-                        smsc_ircc_suspend(self);
-                        break;
-                case PM_RESUME:
-                        smsc_ircc_wakeup(self);
-                        break;
-                }
-        }
+               IRDA_MESSAGE("%s, Waking up\n", driver_name);
+       }
        return 0;
 }
 
@@ -1690,10 +1689,7 @@ static int __exit smsc_ircc_close(struct smsc_ircc_cb *self)
 
        IRDA_ASSERT(self != NULL, return -1;);
 
-       iobase = self->io.fir_base;
-
-       if (self->pmdev)
-               pm_unregister(self->pmdev);
+       platform_device_unregister(self->pldev);
 
        /* Remove netdevice */
        unregister_netdev(self->netdev);
@@ -1702,15 +1698,16 @@ static int __exit smsc_ircc_close(struct smsc_ircc_cb *self)
        spin_lock_irqsave(&self->lock, flags);
 
        /* Stop interrupts */
+       iobase = self->io.fir_base;
        register_bank(iobase, 0);
-       outb(0, iobase+IRCC_IER);
-       outb(IRCC_MASTER_RESET, iobase+IRCC_MASTER);
-       outb(0x00, iobase+IRCC_MASTER);
+       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);
+        outb(IRCC_CFGA_IRDA_SIR_A|IRCC_CFGA_TX_POLARITY, iobase + IRCC_SCE_CFGA);
+        outb(IRCC_CFGB_IR, iobase + IRCC_SCE_CFGB);
 #endif
        spin_unlock_irqrestore(&self->lock, flags);
 
@@ -1720,7 +1717,7 @@ static int __exit smsc_ircc_close(struct smsc_ircc_cb *self)
 
        release_region(self->io.fir_base, self->io.fir_ext);
 
-       IRDA_DEBUG(0, "%s(), releasing 0x%03x\n", __FUNCTION__, 
+       IRDA_DEBUG(0, "%s(), releasing 0x%03x\n", __FUNCTION__,
                   self->io.sir_base);
 
        release_region(self->io.sir_base, self->io.sir_ext);
@@ -1728,7 +1725,7 @@ static int __exit smsc_ircc_close(struct smsc_ircc_cb *self)
        if (self->tx_buff.head)
                dma_free_coherent(NULL, self->tx_buff.truesize,
                                  self->tx_buff.head, self->tx_buff_dma);
-       
+
        if (self->rx_buff.head)
                dma_free_coherent(NULL, self->rx_buff.truesize,
                                  self->rx_buff.head, self->rx_buff_dma);
@@ -1744,10 +1741,12 @@ static void __exit smsc_ircc_cleanup(void)
 
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
 
-       for (i=0; i < 2; i++) {
+       for (i = 0; i < 2; i++) {
                if (dev_self[i])
                        smsc_ircc_close(dev_self[i]);
        }
+
+       driver_unregister(&smsc_ircc_driver);
 }
 
 /*
@@ -1763,34 +1762,34 @@ void smsc_ircc_sir_start(struct smsc_ircc_cb *self)
 
        IRDA_DEBUG(3, "%s\n", __FUNCTION__);
 
-       IRDA_ASSERT(self != NULL, return;);     
-       dev= self->netdev;
-       IRDA_ASSERT(dev != NULL, return;);              
+       IRDA_ASSERT(self != NULL, return;);
+       dev = self->netdev;
+       IRDA_ASSERT(dev != NULL, return;);
        dev->hard_start_xmit = &smsc_ircc_hard_xmit_sir;
 
        fir_base = self->io.fir_base;
        sir_base = self->io.sir_base;
 
        /* Reset everything */
-       outb(IRCC_MASTER_RESET, fir_base+IRCC_MASTER);
+       outb(IRCC_MASTER_RESET, fir_base + IRCC_MASTER);
 
        #if SMSC_IRCC2_C_SIR_STOP
        /*smsc_ircc_sir_stop(self);*/
        #endif
 
        register_bank(fir_base, 1);
-       outb(((inb(fir_base+IRCC_SCE_CFGA) & IRCC_SCE_CFGA_BLOCK_CTRL_BITS_MASK) | IRCC_CFGA_IRDA_SIR_A), fir_base+IRCC_SCE_CFGA);
+       outb(((inb(fir_base + IRCC_SCE_CFGA) & IRCC_SCE_CFGA_BLOCK_CTRL_BITS_MASK) | IRCC_CFGA_IRDA_SIR_A), fir_base + IRCC_SCE_CFGA);
 
        /* Initialize UART */
-       outb(UART_LCR_WLEN8, sir_base+UART_LCR);  /* Reset DLAB */
-       outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), sir_base+UART_MCR);
-       
+       outb(UART_LCR_WLEN8, sir_base + UART_LCR);  /* Reset DLAB */
+       outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), sir_base + UART_MCR);
+
        /* Turn on interrups */
-       outb(UART_IER_RLSI | UART_IER_RDI |UART_IER_THRI, sir_base+UART_IER);
+       outb(UART_IER_RLSI | UART_IER_RDI |UART_IER_THRI, sir_base + UART_IER);
 
        IRDA_DEBUG(3, "%s() - exit\n", __FUNCTION__);
 
-       outb(0x00, fir_base+IRCC_MASTER);
+       outb(0x00, fir_base + IRCC_MASTER);
 }
 
 #if SMSC_IRCC2_C_SIR_STOP
@@ -1802,10 +1801,10 @@ void smsc_ircc_sir_stop(struct smsc_ircc_cb *self)
        iobase = self->io.sir_base;
 
        /* Reset UART */
-       outb(0, iobase+UART_MCR);
-       
+       outb(0, iobase + UART_MCR);
+
        /* Turn off interrupts */
-       outb(0, iobase+UART_IER);
+       outb(0, iobase + UART_IER);
 }
 #endif
 
@@ -1831,16 +1830,16 @@ static void smsc_ircc_sir_write_wakeup(struct smsc_ircc_cb *self)
        /* Finished with frame?  */
        if (self->tx_buff.len > 0)  {
                /* Write data left in transmit buffer */
-               actual = smsc_ircc_sir_write(iobase, self->io.fifo_size, 
+               actual = smsc_ircc_sir_write(iobase, self->io.fifo_size,
                                      self->tx_buff.data, self->tx_buff.len);
                self->tx_buff.data += actual;
                self->tx_buff.len  -= actual;
        } else {
-       
+
        /*if (self->tx_buff.len ==0)  {*/
-               
-               /* 
-                *  Now serial buffer is almost free & we can start 
+
+               /*
+                *  Now serial buffer is almost free & we can start
                 *  transmission of another packet. But first we must check
                 *  if we need to change the speed of the hardware
                 */
@@ -1856,21 +1855,19 @@ static void smsc_ircc_sir_write_wakeup(struct smsc_ircc_cb *self)
                }
                self->stats.tx_packets++;
 
-               if(self->io.speed <= 115200) {
-               /* 
-                * Reset Rx FIFO to make sure that all reflected transmit data
-                * is discarded. This is needed for half duplex operation
-                */
-               fcr = UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR;
-               if (self->io.speed < 38400)
-                       fcr |= UART_FCR_TRIGGER_1;
-               else 
-                       fcr |= UART_FCR_TRIGGER_14;
+               if (self->io.speed <= 115200) {
+                       /*
+                        * Reset Rx FIFO to make sure that all reflected transmit data
+                        * is discarded. This is needed for half duplex operation
+                        */
+                       fcr = UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR;
+                       fcr |= self->io.speed < 38400 ?
+                                       UART_FCR_TRIGGER_1 : UART_FCR_TRIGGER_14;
 
-               outb(fcr, iobase+UART_FCR);
+                       outb(fcr, iobase + UART_FCR);
 
-               /* Turn on receive interrupts */
-               outb(UART_IER_RDI, iobase+UART_IER);
+                       /* Turn on receive interrupts */
+                       outb(UART_IER_RDI, iobase + UART_IER);
                }
        }
 }
@@ -1884,17 +1881,17 @@ static void smsc_ircc_sir_write_wakeup(struct smsc_ircc_cb *self)
 static int smsc_ircc_sir_write(int iobase, int fifo_size, __u8 *buf, int len)
 {
        int actual = 0;
-       
+
        /* Tx FIFO should be empty! */
-       if (!(inb(iobase+UART_LSR) & UART_LSR_THRE)) {
+       if (!(inb(iobase + UART_LSR) & UART_LSR_THRE)) {
                IRDA_WARNING("%s(), failed, fifo not empty!\n", __FUNCTION__);
                return 0;
        }
-        
+
        /* Fill FIFO with current frame */
-       while ((fifo_size-- > 0) && (actual < len)) {
+       while (fifo_size-- > 0 && actual < len) {
                /* Transmit next byte */
-               outb(buf[actual], iobase+UART_TX);
+               outb(buf[actual], iobase + UART_TX);
                actual++;
        }
        return actual;
@@ -1921,20 +1918,21 @@ static int smsc_ircc_is_receiving(struct smsc_ircc_cb *self)
 static void smsc_ircc_probe_transceiver(struct smsc_ircc_cb *self)
 {
        unsigned int    i;
-       
+
        IRDA_ASSERT(self != NULL, return;);
-       
-       for(i=0; smsc_transceivers[i].name!=NULL; i++) 
-               if((*smsc_transceivers[i].probe)(self->io.fir_base)) {
+
+       for (i = 0; smsc_transceivers[i].name != NULL; i++)
+               if (smsc_transceivers[i].probe(self->io.fir_base)) {
                        IRDA_MESSAGE(" %s transceiver found\n",
                                     smsc_transceivers[i].name);
-                       self->transceiver= i+1;
+                       self->transceiver= i + 1;
                        return;
                }
+
        IRDA_MESSAGE("No transceiver found. Defaulting to %s\n",
                     smsc_transceivers[SMSC_IRCC2_C_DEFAULT_TRANSCEIVER].name);
-                       
-       self->transceiver= SMSC_IRCC2_C_DEFAULT_TRANSCEIVER;
+
+       self->transceiver = SMSC_IRCC2_C_DEFAULT_TRANSCEIVER;
 }
 
 
@@ -1947,9 +1945,10 @@ static void smsc_ircc_probe_transceiver(struct smsc_ircc_cb *self)
 static void smsc_ircc_set_transceiver_for_speed(struct smsc_ircc_cb *self, u32 speed)
 {
        unsigned int trx;
-       
+
        trx = self->transceiver;
-       if(trx>0) (*smsc_transceivers[trx-1].set_for_speed)(self->io.fir_base, speed);
+       if (trx > 0)
+               smsc_transceivers[trx - 1].set_for_speed(self->io.fir_base, speed);
 }
 
 /*
@@ -1977,16 +1976,14 @@ static void smsc_ircc_set_transceiver_for_speed(struct smsc_ircc_cb *self, u32 s
 
 static void smsc_ircc_sir_wait_hw_transmitter_finish(struct smsc_ircc_cb *self)
 {
-       int iobase;
+       int iobase = self->io.sir_base;
        int count = SMSC_IRCC2_HW_TRANSMITTER_TIMEOUT_US;
-       
-       iobase = self->io.sir_base;
-       
+
        /* Calibrated busy loop */
-       while((count-- > 0) && !(inb(iobase+UART_LSR) & UART_LSR_TEMT))
+       while (count-- > 0 && !(inb(iobase + UART_LSR) & UART_LSR_TEMT))
                udelay(1);
 
-       if(count == 0)
+       if (count == 0)
                IRDA_DEBUG(0, "%s(): stuck transmitter\n", __FUNCTION__);
 }
 
@@ -1998,40 +1995,42 @@ static void smsc_ircc_sir_wait_hw_transmitter_finish(struct smsc_ircc_cb *self)
 
 static int __init smsc_ircc_look_for_chips(void)
 {
-       smsc_chip_address_t *address;
-       char    *type;
+       struct smsc_chip_address *address;
+       char *type;
        unsigned int cfg_base, found;
-       
+
        found = 0;
        address = possible_addresses;
-       
-       while(address->cfg_base){
+
+       while (address->cfg_base) {
                cfg_base = address->cfg_base;
-               
+
                /*printk(KERN_WARNING "%s(): probing: 0x%02x for: 0x%02x\n", __FUNCTION__, cfg_base, address->type);*/
-               
-               if( address->type & SMSCSIO_TYPE_FDC){
+
+               if (address->type & SMSCSIO_TYPE_FDC) {
                        type = "FDC";
-                       if((address->type) & SMSCSIO_TYPE_FLAT) {
-                               if(!smsc_superio_flat(fdc_chips_flat,cfg_base, type)) found++;
-                       }
-                       if((address->type) & SMSCSIO_TYPE_PAGED) {
-                               if(!smsc_superio_paged(fdc_chips_paged,cfg_base, type)) found++;                
-                       }                       
+                       if (address->type & SMSCSIO_TYPE_FLAT)
+                               if (!smsc_superio_flat(fdc_chips_flat, cfg_base, type))
+                                       found++;
+
+                       if (address->type & SMSCSIO_TYPE_PAGED)
+                               if (!smsc_superio_paged(fdc_chips_paged, cfg_base, type))
+                                       found++;
                }
-               if( address->type & SMSCSIO_TYPE_LPC){
+               if (address->type & SMSCSIO_TYPE_LPC) {
                        type = "LPC";
-                       if((address->type) & SMSCSIO_TYPE_FLAT) {
-                               if(!smsc_superio_flat(lpc_chips_flat,cfg_base,type)) found++;
-                       }
-                       if((address->type) & SMSCSIO_TYPE_PAGED) {
-                               if(!smsc_superio_paged(lpc_chips_paged,cfg_base,"LPC")) found++;                
-                       }                       
+                       if (address->type & SMSCSIO_TYPE_FLAT)
+                               if (!smsc_superio_flat(lpc_chips_flat, cfg_base, type))
+                                       found++;
+
+                       if (address->type & SMSCSIO_TYPE_PAGED)
+                               if (!smsc_superio_paged(lpc_chips_paged, cfg_base, type))
+                                       found++;
                }
                address++;
        }
        return found;
-} 
+}
 
 /*
  * Function smsc_superio_flat (chip, base, type)
@@ -2039,7 +2038,7 @@ static int __init smsc_ircc_look_for_chips(void)
  *    Try to get configuration of a smc SuperIO chip with flat register model
  *
  */
-static int __init smsc_superio_flat(const smsc_chip_t *chips, unsigned short cfgbase, char *type)
+static int __init smsc_superio_flat(const struct smsc_chip *chips, unsigned short cfgbase, char *type)
 {
        unsigned short firbase, sirbase;
        u8 mode, dma, irq;
@@ -2047,39 +2046,37 @@ static int __init smsc_superio_flat(const smsc_chip_t *chips, unsigned short cfg
 
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
 
-       if (smsc_ircc_probe(cfgbase, SMSCSIOFLAT_DEVICEID_REG, chips, type)==NULL)
+       if (smsc_ircc_probe(cfgbase, SMSCSIOFLAT_DEVICEID_REG, chips, type) == NULL)
                return ret;
 
        outb(SMSCSIOFLAT_UARTMODE0C_REG, cfgbase);
-       mode = inb(cfgbase+1);
-       
+       mode = inb(cfgbase + 1);
+
        /*printk(KERN_WARNING "%s(): mode: 0x%02x\n", __FUNCTION__, mode);*/
-       
-       if(!(mode & SMSCSIOFLAT_UART2MODE_VAL_IRDA))
+
+       if (!(mode & SMSCSIOFLAT_UART2MODE_VAL_IRDA))
                IRDA_WARNING("%s(): IrDA not enabled\n", __FUNCTION__);
 
        outb(SMSCSIOFLAT_UART2BASEADDR_REG, cfgbase);
-       sirbase = inb(cfgbase+1) << 2;
+       sirbase = inb(cfgbase + 1) << 2;
 
-       /* FIR iobase */
+       /* FIR iobase */
        outb(SMSCSIOFLAT_FIRBASEADDR_REG, cfgbase);
-       firbase = inb(cfgbase+1) << 3;
+       firbase = inb(cfgbase + 1) << 3;
 
        /* DMA */
        outb(SMSCSIOFLAT_FIRDMASELECT_REG, cfgbase);
-       dma = inb(cfgbase+1) & SMSCSIOFLAT_FIRDMASELECT_MASK;
-       
+       dma = inb(cfgbase + 1) & SMSCSIOFLAT_FIRDMASELECT_MASK;
+
        /* IRQ */
        outb(SMSCSIOFLAT_UARTIRQSELECT_REG, cfgbase);
-       irq = inb(cfgbase+1) & SMSCSIOFLAT_UART2IRQSELECT_MASK;
+       irq = inb(cfgbase + 1) & SMSCSIOFLAT_UART2IRQSELECT_MASK;
 
        IRDA_MESSAGE("%s(): fir: 0x%02x, sir: 0x%02x, dma: %02d, irq: %d, mode: 0x%02x\n", __FUNCTION__, firbase, sirbase, dma, irq, mode);
 
-       if (firbase) {
-               if (smsc_ircc_open(firbase, sirbase, dma, irq) == 0)
-                       ret=0; 
-       }
-       
+       if (firbase && smsc_ircc_open(firbase, sirbase, dma, irq) == 0)
+               ret = 0;
+
        /* Exit configuration */
        outb(SMSCSIO_CFGEXITKEY, cfgbase);
 
@@ -2092,26 +2089,26 @@ static int __init smsc_superio_flat(const smsc_chip_t *chips, unsigned short cfg
  *    Try  to get configuration of a smc SuperIO chip with paged register model
  *
  */
-static int __init smsc_superio_paged(const smsc_chip_t *chips, unsigned short cfg_base, char *type)
+static int __init smsc_superio_paged(const struct smsc_chip *chips, unsigned short cfg_base, char *type)
 {
        unsigned short fir_io, sir_io;
        int ret = -ENODEV;
-       
+
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
 
-       if (smsc_ircc_probe(cfg_base,0x20,chips,type)==NULL)
+       if (smsc_ircc_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;
+       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;
@@ -2119,11 +2116,9 @@ static int __init smsc_superio_paged(const smsc_chip_t *chips, unsigned short cf
        fir_io |= inb(cfg_base + 1);
        outb(0x2b, cfg_base); /* ??? */
 
-       if (fir_io) {
-               if (smsc_ircc_open(fir_io, sir_io, ircc_dma, ircc_irq) == 0)
-                       ret=0; 
-       }
-       
+       if (fir_io && smsc_ircc_open(fir_io, sir_io, ircc_dma, ircc_irq) == 0)
+               ret = 0;
+
        /* Exit configuration */
        outb(SMSCSIO_CFGEXITKEY, cfg_base);
 
@@ -2131,21 +2126,17 @@ static int __init smsc_superio_paged(const smsc_chip_t *chips, unsigned short cf
 }
 
 
-static int __init smsc_access(unsigned short cfg_base,unsigned char reg)
+static int __init smsc_access(unsigned short cfg_base, unsigned char reg)
 {
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
 
        outb(reg, cfg_base);
-
-       if (inb(cfg_base)!=reg)
-               return -1;
-
-       return 0;
+       return inb(cfg_base) != reg ? -1 : 0;
 }
 
-static const smsc_chip_t * __init smsc_ircc_probe(unsigned short cfg_base,u8 reg,const smsc_chip_t *chip,char *type)
+static const struct smsc_chip * __init smsc_ircc_probe(unsigned short cfg_base, u8 reg, const struct smsc_chip *chip, char *type)
 {
-       u8 devid,xdevid,rev; 
+       u8 devid, xdevid, rev;
 
        IRDA_DEBUG(1, "%s\n", __FUNCTION__);
 
@@ -2158,7 +2149,7 @@ static const smsc_chip_t * __init smsc_ircc_probe(unsigned short cfg_base,u8 reg
 
        outb(reg, cfg_base);
 
-       xdevid=inb(cfg_base+1);
+       xdevid = inb(cfg_base + 1);
 
        /* Enter configuration */
 
@@ -2168,51 +2159,49 @@ static const smsc_chip_t * __init smsc_ircc_probe(unsigned short cfg_base,u8 reg
        if (smsc_access(cfg_base,0x55)) /* send second key and check */
                return NULL;
        #endif
-       
+
        /* probe device ID */
 
-       if (smsc_access(cfg_base,reg))
+       if (smsc_access(cfg_base, reg))
                return NULL;
 
-       devid=inb(cfg_base+1);
-       
-       if (devid==0)                   /* typical value for unused port */
-               return NULL;
+       devid = inb(cfg_base + 1);
 
-       if (devid==0xff)                /* typical value for unused port */
+       if (devid == 0 || devid == 0xff)        /* typical values for unused port */
                return NULL;
 
        /* probe revision ID */
 
-       if (smsc_access(cfg_base,reg+1))
+       if (smsc_access(cfg_base, reg + 1))
                return NULL;
 
-       rev=inb(cfg_base+1);
+       rev = inb(cfg_base + 1);
 
-       if (rev>=128)                   /* i think this will make no sense */
+       if (rev >= 128)                 /* i think this will make no sense */
                return NULL;
 
-       if (devid==xdevid)              /* protection against false positives */        
+       if (devid == xdevid)            /* protection against false positives */
                return NULL;
 
        /* Check for expected device ID; are there others? */
 
-       while(chip->devid!=devid) {
+       while (chip->devid != devid) {
 
                chip++;
 
-               if (chip->name==NULL)
+               if (chip->name == NULL)
                        return NULL;
        }
 
-       IRDA_MESSAGE("found SMC SuperIO Chip (devid=0x%02x rev=%02X base=0x%04x): %s%s\n",devid,rev,cfg_base,type,chip->name);
+       IRDA_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->rev>rev){
-               IRDA_MESSAGE("Revision higher than expected\n");        
+       if (chip->rev > rev) {
+               IRDA_MESSAGE("Revision higher than expected\n");
                return NULL;
        }
-       
-       if (chip->flags&NoIRDA)
+
+       if (chip->flags & NoIRDA)
                IRDA_MESSAGE("chipset does not support IRDA\n");
 
        return chip;
@@ -2226,8 +2215,8 @@ static int __init smsc_superio_fdc(unsigned short cfg_base)
                IRDA_WARNING("%s: can't get cfg_base of 0x%03x\n",
                             __FUNCTION__, cfg_base);
        } else {
-               if (!smsc_superio_flat(fdc_chips_flat,cfg_base,"FDC")
-                   ||!smsc_superio_paged(fdc_chips_paged,cfg_base,"FDC"))
+               if (!smsc_superio_flat(fdc_chips_flat, cfg_base, "FDC") ||
+                   !smsc_superio_paged(fdc_chips_paged, cfg_base, "FDC"))
                        ret =  0;
 
                release_region(cfg_base, 2);
@@ -2244,9 +2233,10 @@ static int __init smsc_superio_lpc(unsigned short cfg_base)
                IRDA_WARNING("%s: can't get cfg_base of 0x%03x\n",
                             __FUNCTION__, cfg_base);
        } else {
-               if (!smsc_superio_flat(lpc_chips_flat,cfg_base,"LPC")
-                   ||!smsc_superio_paged(lpc_chips_paged,cfg_base,"LPC"))
+               if (!smsc_superio_flat(lpc_chips_flat, cfg_base, "LPC") ||
+                   !smsc_superio_paged(lpc_chips_paged, cfg_base, "LPC"))
                        ret = 0;
+
                release_region(cfg_base, 2);
        }
        return ret;
@@ -2269,18 +2259,23 @@ static int __init smsc_superio_lpc(unsigned short cfg_base)
 static void smsc_ircc_set_transceiver_smsc_ircc_atc(int fir_base, u32 speed)
 {
        unsigned long jiffies_now, jiffies_timeout;
-       u8      val;
-       
-       jiffies_now= jiffies;
-       jiffies_timeout= jiffies+SMSC_IRCC2_ATC_PROGRAMMING_TIMEOUT_JIFFIES;
-       
+       u8 val;
+
+       jiffies_now = jiffies;
+       jiffies_timeout = jiffies + SMSC_IRCC2_ATC_PROGRAMMING_TIMEOUT_JIFFIES;
+
        /* ATC */
        register_bank(fir_base, 4);
-       outb((inb(fir_base+IRCC_ATC) & IRCC_ATC_MASK) |IRCC_ATC_nPROGREADY|IRCC_ATC_ENABLE, fir_base+IRCC_ATC);
-       while((val=(inb(fir_base+IRCC_ATC) & IRCC_ATC_nPROGREADY)) && !time_after(jiffies, jiffies_timeout));
-       if(val)
+       outb((inb(fir_base + IRCC_ATC) & IRCC_ATC_MASK) | IRCC_ATC_nPROGREADY|IRCC_ATC_ENABLE,
+            fir_base + IRCC_ATC);
+
+       while ((val = (inb(fir_base + IRCC_ATC) & IRCC_ATC_nPROGREADY)) &&
+               !time_after(jiffies, jiffies_timeout))
+               /* empty */;
+
+       if (val)
                IRDA_WARNING("%s(): ATC: 0x%02x\n", __FUNCTION__,
-                            inb(fir_base+IRCC_ATC));
+                            inb(fir_base + IRCC_ATC));
 }
 
 /*
@@ -2298,34 +2293,32 @@ static int smsc_ircc_probe_transceiver_smsc_ircc_atc(int fir_base)
 /*
  * Function smsc_ircc_set_transceiver_smsc_ircc_fast_pin_select(self, speed)
  *
- *    Set transceiver 
+ *    Set transceiver
  *
  */
 
 static void smsc_ircc_set_transceiver_smsc_ircc_fast_pin_select(int fir_base, u32 speed)
 {
-       u8      fast_mode;
-       
-       switch(speed)
-       {
-               default:
-               case 576000 :
-               fast_mode = 0; 
+       u8 fast_mode;
+
+       switch (speed) {
+       default:
+       case 576000 :
+               fast_mode = 0;
                break;
-               case 1152000 :
-               case 4000000 :
+       case 1152000 :
+       case 4000000 :
                fast_mode = IRCC_LCR_A_FAST;
                break;
-               
        }
        register_bank(fir_base, 0);
-       outb((inb(fir_base+IRCC_LCR_A) &  0xbf) | fast_mode, fir_base+IRCC_LCR_A);
+       outb((inb(fir_base + IRCC_LCR_A) & 0xbf) | fast_mode, fir_base + IRCC_LCR_A);
 }
 
 /*
  * Function smsc_ircc_probe_transceiver_smsc_ircc_fast_pin_select(fir_base)
  *
- *    Probe transceiver 
+ *    Probe transceiver
  *
  */
 
@@ -2337,35 +2330,34 @@ static int smsc_ircc_probe_transceiver_smsc_ircc_fast_pin_select(int fir_base)
 /*
  * Function smsc_ircc_set_transceiver_toshiba_sat1800(fir_base, speed)
  *
- *    Set transceiver 
+ *    Set transceiver
  *
  */
 
 static void smsc_ircc_set_transceiver_toshiba_sat1800(int fir_base, u32 speed)
 {
-       u8      fast_mode;
-       
-       switch(speed)
-       {
-               default:
-               case 576000 :
-               fast_mode = 0; 
+       u8 fast_mode;
+
+       switch (speed) {
+       default:
+       case 576000 :
+               fast_mode = 0;
                break;
-               case 1152000 :
-               case 4000000 :
+       case 1152000 :
+       case 4000000 :
                fast_mode = /*IRCC_LCR_A_FAST |*/ IRCC_LCR_A_GP_DATA;
                break;
-               
+
        }
        /* This causes an interrupt */
        register_bank(fir_base, 0);
-       outb((inb(fir_base+IRCC_LCR_A) &  0xbf) | fast_mode, fir_base+IRCC_LCR_A);
+       outb((inb(fir_base + IRCC_LCR_A) &  0xbf) | fast_mode, fir_base + IRCC_LCR_A);
 }
 
 /*
  * Function smsc_ircc_probe_transceiver_toshiba_sat1800(fir_base)
  *
- *    Probe transceiver 
+ *    Probe transceiver
  *
  */
 
@@ -2377,20 +2369,3 @@ static int smsc_ircc_probe_transceiver_toshiba_sat1800(int fir_base)
 
 module_init(smsc_ircc_init);
 module_exit(smsc_ircc_cleanup);
-
-MODULE_AUTHOR("Daniele Peri <peri@csai.unipa.it>");
-MODULE_DESCRIPTION("SMC IrCC SIR/FIR controller driver");
-MODULE_LICENSE("GPL");
-
-module_param(ircc_dma, int, 0);
-MODULE_PARM_DESC(ircc_dma, "DMA channel");
-module_param(ircc_irq, int, 0);
-MODULE_PARM_DESC(ircc_irq, "IRQ line");
-module_param(ircc_fir, int, 0);
-MODULE_PARM_DESC(ircc_fir, "FIR Base Address");
-module_param(ircc_sir, int, 0);
-MODULE_PARM_DESC(ircc_sir, "SIR Base Address");
-module_param(ircc_cfg, int, 0);
-MODULE_PARM_DESC(ircc_cfg, "Configuration register base address");
-module_param(ircc_transceiver, int, 0);
-MODULE_PARM_DESC(ircc_transceiver, "Transceiver type");
index 458611cc0d40c8d027a8e3aacf2701e34854dd65..0c36286d87f7022f3530b0f13bfa9d0b37ae46ef 100644 (file)
@@ -1,5 +1,5 @@
 /*********************************************************************
- * $Id: smsc-ircc2.h,v 1.12.2.1 2002/10/27 10:52:37 dip Exp $               
+ * $Id: smsc-ircc2.h,v 1.12.2.1 2002/10/27 10:52:37 dip Exp $
  *
  * Description:   Definitions for the SMC IrCC chipset
  * Status:        Experimental.
@@ -9,25 +9,25 @@
  *     All Rights Reserved.
  *
  * Based on smc-ircc.h:
- * 
+ *
  *     Copyright (c) 1999-2000, Dag Brattli <dagb@cs.uit.no>
  *     Copyright (c) 1998-1999, Thomas Davis (tadavis@jps.net>
  *     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 
+ *
+ *     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, 
+ *
+ *     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
  *
  ********************************************************************/
 
 #define   IRCC_CFGA_COM                                0x00
 #define                IRCC_SCE_CFGA_BLOCK_CTRL_BITS_MASK      0x87
-#define        IRCC_CFGA_IRDA_SIR_A    0x08
-#define        IRCC_CFGA_ASK_SIR               0x10
-#define        IRCC_CFGA_IRDA_SIR_B    0x18
-#define        IRCC_CFGA_IRDA_HDLC             0x20
+#define                IRCC_CFGA_IRDA_SIR_A    0x08
+#define                IRCC_CFGA_ASK_SIR               0x10
+#define                IRCC_CFGA_IRDA_SIR_B    0x18
+#define                IRCC_CFGA_IRDA_HDLC             0x20
 #define                IRCC_CFGA_IRDA_4PPM             0x28
 #define                IRCC_CFGA_CONSUMER              0x30
 #define                IRCC_CFGA_RAW_IR                0x38
 #define IRCC_CFGB_LPBCK_TX_CRC    0x10
 #define IRCC_CFGB_NOWAIT          0x08
 #define IRCC_CFGB_STRING_MOVE     0x04
-#define IRCC_CFGB_DMA_BURST       0x02
+#define IRCC_CFGB_DMA_BURST       0x02
 #define IRCC_CFGB_DMA_ENABLE      0x01
 
 #define IRCC_CFGB_MUX_COM          0x00
 /* Register block 3 - Identification Registers! */
 #define IRCC_ID_HIGH              0x00   /* 0x10 */
 #define IRCC_ID_LOW               0x01   /* 0xB8 */
-#define IRCC_CHIP_ID              0x02   /* 0xF1 */
+#define IRCC_CHIP_ID              0x02   /* 0xF1 */
 #define IRCC_VERSION              0x03   /* 0x01 */
 #define IRCC_INTERFACE            0x04   /* low 4 = DMA, high 4 = IRQ */
-#define        IRCC_INTERFACE_DMA_MASK 0x0F   /* low 4 = DMA, high 4 = IRQ */
-#define        IRCC_INTERFACE_IRQ_MASK 0xF0   /* low 4 = DMA, high 4 = IRQ */
+#define                IRCC_INTERFACE_DMA_MASK 0x0F   /* low 4 = DMA, high 4 = IRQ */
+#define                IRCC_INTERFACE_IRQ_MASK 0xF0   /* low 4 = DMA, high 4 = IRQ */
 
 /* Register block 4 - IrDA */
 #define IRCC_CONTROL               0x00
 
 /* Register block 5 - IrDA */
 #define IRCC_ATC                                       0x00
-#define        IRCC_ATC_nPROGREADY             0x80
-#define        IRCC_ATC_SPEED                  0x40
-#define        IRCC_ATC_ENABLE                 0x20
-#define        IRCC_ATC_MASK                   0xE0
+#define                IRCC_ATC_nPROGREADY             0x80
+#define                IRCC_ATC_SPEED                  0x40
+#define                IRCC_ATC_ENABLE                 0x20
+#define                IRCC_ATC_MASK                   0xE0
 
 
 #define IRCC_IRHALFDUPLEX_TIMEOUT      0x01
  */
 
 #define SMSC_IRCC2_MAX_SIR_SPEED               115200
-#define SMSC_IRCC2_FIR_CHIP_IO_EXTENT  8
-#define SMSC_IRCC2_SIR_CHIP_IO_EXTENT  8
+#define SMSC_IRCC2_FIR_CHIP_IO_EXTENT  8
+#define SMSC_IRCC2_SIR_CHIP_IO_EXTENT  8
 #define SMSC_IRCC2_FIFO_SIZE                   16
 #define SMSC_IRCC2_FIFO_THRESHOLD              64
 /* Max DMA buffer size needed = (data_size + 6) * (window_size) + 6; */
index dc5d089bf184a8091c704de78d2c8fd6451c2224..3d56cf5a4e23964e8a960dfc8e53583e580abeec 100644 (file)
@@ -4,6 +4,7 @@
  * Copyright (C) 2001 Kyle A. Lucke (klucke@us.ibm.com), IBM Corp.
  * Substantially cleaned up by:
  * Copyright (C) 2003 David Gibson <dwg@au1.ibm.com>, IBM Corporation.
+ * Copyright (C) 2004-2005 Michael Ellerman, IBM Corporation.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
index 2234a8f05eb262a9f69bea7c2f47b4a7b053a321..7cefe5507b9e128bef1f621aeb29837105c254cf 100644 (file)
@@ -1,5 +1,5 @@
 /************************************************************************
- * regs.h: A Linux PCI-X Ethernet driver for S2IO 10GbE Server NIC
+ * regs.h: A Linux PCI-X Ethernet driver for Neterion 10GbE Server NIC
  * Copyright(c) 2002-2005 Neterion Inc.
 
  * This software may be used and distributed according to the terms of
@@ -713,13 +713,16 @@ typedef struct _XENA_dev_config {
        u64 mc_err_reg;
 #define MC_ERR_REG_ECC_DB_ERR_L            BIT(14)
 #define MC_ERR_REG_ECC_DB_ERR_U            BIT(15)
+#define MC_ERR_REG_MIRI_ECC_DB_ERR_0       BIT(18)
+#define MC_ERR_REG_MIRI_ECC_DB_ERR_1       BIT(20)
 #define MC_ERR_REG_MIRI_CRI_ERR_0          BIT(22)
 #define MC_ERR_REG_MIRI_CRI_ERR_1          BIT(23)
 #define MC_ERR_REG_SM_ERR                  BIT(31)
-#define MC_ERR_REG_ECC_ALL_SNG            (BIT(6) | \
-                                       BIT(7) | BIT(17) | BIT(19))
-#define MC_ERR_REG_ECC_ALL_DBL            (BIT(14) | \
-                                       BIT(15) | BIT(18) | BIT(20))
+#define MC_ERR_REG_ECC_ALL_SNG            (BIT(2) | BIT(3) | BIT(4) | BIT(5) |\
+                                           BIT(6) | BIT(7) | BIT(17) | BIT(19))
+#define MC_ERR_REG_ECC_ALL_DBL            (BIT(10) | BIT(11) | BIT(12) |\
+                                           BIT(13) | BIT(14) | BIT(15) |\
+                                           BIT(18) | BIT(20))
        u64 mc_err_mask;
        u64 mc_err_alarm;
 
index 5dda043bd9d73e0195f4c39657cc7d9285e6afbb..c829e6a2e8a681242b03fbcb6f26210c633aeb2e 100644 (file)
@@ -1,5 +1,5 @@
 /************************************************************************
- * s2io.c: A Linux PCI-X Ethernet driver for S2IO 10GbE Server NIC
+ * s2io.c: A Linux PCI-X Ethernet driver for Neterion 10GbE Server NIC
  * Copyright(c) 2002-2005 Neterion Inc.
 
  * This software may be used and distributed according to the terms of
@@ -28,7 +28,7 @@
  * explaination of all the variables.
  * rx_ring_num : This can be used to program the number of receive rings used
  * in the driver.
- * rx_ring_len: This defines the number of descriptors each ring can have. This
+ * rx_ring_sz: This defines the number of descriptors each ring can have. This
  * is also an array of size 8.
  * tx_fifo_num: This defines the number of Tx FIFOs thats used int the driver.
  * tx_fifo_len: This too is an array of 8. Each element defines the number of
@@ -67,7 +67,7 @@
 
 /* S2io Driver name & version. */
 static char s2io_driver_name[] = "Neterion";
-static char s2io_driver_version[] = "Version 2.0.3.1";
+static char s2io_driver_version[] = "Version 2.0.8.1";
 
 static inline int RXD_IS_UP2DT(RxD_t *rxdp)
 {
@@ -354,7 +354,7 @@ static int init_shared_mem(struct s2io_nic *nic)
        int lst_size, lst_per_page;
        struct net_device *dev = nic->dev;
 #ifdef CONFIG_2BUFF_MODE
-       u64 tmp;
+       unsigned long tmp;
        buffAdd_t *ba;
 #endif
 
@@ -404,7 +404,7 @@ static int init_shared_mem(struct s2io_nic *nic)
                    config->tx_cfg[i].fifo_len - 1;
                mac_control->fifos[i].fifo_no = i;
                mac_control->fifos[i].nic = nic;
-               mac_control->fifos[i].max_txds = MAX_SKB_FRAGS;
+               mac_control->fifos[i].max_txds = MAX_SKB_FRAGS + 1;
 
                for (j = 0; j < page_num; j++) {
                        int k = 0;
@@ -418,6 +418,26 @@ static int init_shared_mem(struct s2io_nic *nic)
                                DBG_PRINT(ERR_DBG, "failed for TxDL\n");
                                return -ENOMEM;
                        }
+                       /* If we got a zero DMA address(can happen on
+                        * certain platforms like PPC), reallocate.
+                        * Store virtual address of page we don't want,
+                        * to be freed later.
+                        */
+                       if (!tmp_p) {
+                               mac_control->zerodma_virt_addr = tmp_v;
+                               DBG_PRINT(INIT_DBG, 
+                               "%s: Zero DMA address for TxDL. ", dev->name);
+                               DBG_PRINT(INIT_DBG, 
+                               "Virtual address %llx\n", (u64)tmp_v);
+                               tmp_v = pci_alloc_consistent(nic->pdev,
+                                                    PAGE_SIZE, &tmp_p);
+                               if (!tmp_v) {
+                                       DBG_PRINT(ERR_DBG,
+                                         "pci_alloc_consistent ");
+                                       DBG_PRINT(ERR_DBG, "failed for TxDL\n");
+                                       return -ENOMEM;
+                               }
+                       }
                        while (k < lst_per_page) {
                                int l = (j * lst_per_page) + k;
                                if (l == config->tx_cfg[i].fifo_len)
@@ -542,18 +562,18 @@ static int init_shared_mem(struct s2io_nic *nic)
                                    (BUF0_LEN + ALIGN_SIZE, GFP_KERNEL);
                                if (!ba->ba_0_org)
                                        return -ENOMEM;
-                               tmp = (u64) ba->ba_0_org;
+                               tmp = (unsigned long) ba->ba_0_org;
                                tmp += ALIGN_SIZE;
-                               tmp &= ~((u64) ALIGN_SIZE);
+                               tmp &= ~((unsigned long) ALIGN_SIZE);
                                ba->ba_0 = (void *) tmp;
 
                                ba->ba_1_org = (void *) kmalloc
                                    (BUF1_LEN + ALIGN_SIZE, GFP_KERNEL);
                                if (!ba->ba_1_org)
                                        return -ENOMEM;
-                               tmp = (u64) ba->ba_1_org;
+                               tmp = (unsigned long) ba->ba_1_org;
                                tmp += ALIGN_SIZE;
-                               tmp &= ~((u64) ALIGN_SIZE);
+                               tmp &= ~((unsigned long) ALIGN_SIZE);
                                ba->ba_1 = (void *) tmp;
                                k++;
                        }
@@ -600,7 +620,7 @@ static void free_shared_mem(struct s2io_nic *nic)
        mac_info_t *mac_control;
        struct config_param *config;
        int lst_size, lst_per_page;
-
+       struct net_device *dev = nic->dev;
 
        if (!nic)
                return;
@@ -616,9 +636,10 @@ static void free_shared_mem(struct s2io_nic *nic)
                                                lst_per_page);
                for (j = 0; j < page_num; j++) {
                        int mem_blks = (j * lst_per_page);
-                       if ((!mac_control->fifos[i].list_info) ||
-                               (!mac_control->fifos[i].list_info[mem_blks].
-                                list_virt_addr))
+                       if (!mac_control->fifos[i].list_info)
+                               return; 
+                       if (!mac_control->fifos[i].list_info[mem_blks].
+                                list_virt_addr)
                                break;
                        pci_free_consistent(nic->pdev, PAGE_SIZE,
                                            mac_control->fifos[i].
@@ -628,6 +649,18 @@ static void free_shared_mem(struct s2io_nic *nic)
                                            list_info[mem_blks].
                                            list_phy_addr);
                }
+               /* If we got a zero DMA address during allocation,
+                * free the page now
+                */
+               if (mac_control->zerodma_virt_addr) {
+                       pci_free_consistent(nic->pdev, PAGE_SIZE,
+                                           mac_control->zerodma_virt_addr,
+                                           (dma_addr_t)0);
+                       DBG_PRINT(INIT_DBG, 
+                       "%s: Freeing TxDL with zero DMA addr. ", dev->name);
+                       DBG_PRINT(INIT_DBG, "Virtual address %llx\n",
+                       (u64)(mac_control->zerodma_virt_addr));
+               }
                kfree(mac_control->fifos[i].list_info);
        }
 
@@ -2479,9 +2512,10 @@ static void rx_intr_handler(ring_info_t *ring_data)
 #endif
        spin_lock(&nic->rx_lock);
        if (atomic_read(&nic->card_state) == CARD_DOWN) {
-               DBG_PRINT(ERR_DBG, "%s: %s going down for reset\n",
+               DBG_PRINT(INTR_DBG, "%s: %s going down for reset\n",
                          __FUNCTION__, dev->name);
                spin_unlock(&nic->rx_lock);
+               return;
        }
 
        get_info = ring_data->rx_curr_get_info;
@@ -2596,8 +2630,14 @@ static void tx_intr_handler(fifo_info_t *fifo_data)
                if (txdlp->Control_1 & TXD_T_CODE) {
                        unsigned long long err;
                        err = txdlp->Control_1 & TXD_T_CODE;
-                       DBG_PRINT(ERR_DBG, "***TxD error %llx\n",
-                                 err);
+                       if ((err >> 48) == 0xA) {
+                               DBG_PRINT(TX_DBG, "TxD returned due \
+                                               to loss of link\n");
+                       }
+                       else {
+                               DBG_PRINT(ERR_DBG, "***TxD error \
+                                               %llx\n", err);
+                       }
                }
 
                skb = (struct sk_buff *) ((unsigned long)
@@ -2689,12 +2729,16 @@ static void alarm_intr_handler(struct s2io_nic *nic)
                if (val64 & MC_ERR_REG_ECC_ALL_DBL) {
                        nic->mac_control.stats_info->sw_stat.
                                double_ecc_errs++;
-                       DBG_PRINT(ERR_DBG, "%s: Device indicates ",
+                       DBG_PRINT(INIT_DBG, "%s: Device indicates ",
                                  dev->name);
-                       DBG_PRINT(ERR_DBG, "double ECC error!!\n");
+                       DBG_PRINT(INIT_DBG, "double ECC error!!\n");
                        if (nic->device_type != XFRAME_II_DEVICE) {
-                               netif_stop_queue(dev);
-                               schedule_work(&nic->rst_timer_task);
+                               /* Reset XframeI only if critical error */
+                               if (val64 & (MC_ERR_REG_MIRI_ECC_DB_ERR_0 |
+                                            MC_ERR_REG_MIRI_ECC_DB_ERR_1)) {
+                                       netif_stop_queue(dev);
+                                       schedule_work(&nic->rst_timer_task);
+                               }
                        }
                } else {
                        nic->mac_control.stats_info->sw_stat.
@@ -2706,7 +2750,8 @@ static void alarm_intr_handler(struct s2io_nic *nic)
        val64 = readq(&bar0->serr_source);
        if (val64 & SERR_SOURCE_ANY) {
                DBG_PRINT(ERR_DBG, "%s: Device indicates ", dev->name);
-               DBG_PRINT(ERR_DBG, "serious error!!\n");
+               DBG_PRINT(ERR_DBG, "serious error %llx!!\n", 
+                         (unsigned long long)val64);
                netif_stop_queue(dev);
                schedule_work(&nic->rst_timer_task);
        }
@@ -3130,7 +3175,7 @@ int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
        queue_len = mac_control->fifos[queue].tx_curr_put_info.fifo_len + 1;
        /* Avoid "put" pointer going beyond "get" pointer */
        if (txdp->Host_Control || (((put_off + 1) % queue_len) == get_off)) {
-               DBG_PRINT(ERR_DBG, "Error in xmit, No free TXDs.\n");
+               DBG_PRINT(TX_DBG, "Error in xmit, No free TXDs.\n");
                netif_stop_queue(dev);
                dev_kfree_skb(skb);
                spin_unlock_irqrestore(&sp->tx_lock, flags);
@@ -3528,7 +3573,7 @@ static void s2io_set_multicast(struct net_device *dev)
 
                val64 = readq(&bar0->mac_cfg);
                sp->promisc_flg = 1;
-               DBG_PRINT(ERR_DBG, "%s: entered promiscuous mode\n",
+               DBG_PRINT(INFO_DBG, "%s: entered promiscuous mode\n",
                          dev->name);
        } else if (!(dev->flags & IFF_PROMISC) && (sp->promisc_flg)) {
                /*  Remove the NIC from promiscuous mode */
@@ -3543,7 +3588,7 @@ static void s2io_set_multicast(struct net_device *dev)
 
                val64 = readq(&bar0->mac_cfg);
                sp->promisc_flg = 0;
-               DBG_PRINT(ERR_DBG, "%s: left promiscuous mode\n",
+               DBG_PRINT(INFO_DBG, "%s: left promiscuous mode\n",
                          dev->name);
        }
 
@@ -5325,7 +5370,7 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
                        break;
                }
        }
-       config->max_txds = MAX_SKB_FRAGS;
+       config->max_txds = MAX_SKB_FRAGS + 1;
 
        /* Rx side parameters. */
        if (rx_ring_sz[0] == 0)
@@ -5525,9 +5570,14 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
        if (sp->device_type & XFRAME_II_DEVICE) {
                DBG_PRINT(ERR_DBG, "%s: Neterion Xframe II 10GbE adapter ",
                          dev->name);
-               DBG_PRINT(ERR_DBG, "(rev %d), Driver %s\n",
+               DBG_PRINT(ERR_DBG, "(rev %d), %s",
                                get_xena_rev_id(sp->pdev),
                                s2io_driver_version);
+#ifdef CONFIG_2BUFF_MODE
+               DBG_PRINT(ERR_DBG, ", Buffer mode %d",2);
+#endif
+
+               DBG_PRINT(ERR_DBG, "\nCopyright(c) 2002-2005 Neterion Inc.\n");
                DBG_PRINT(ERR_DBG, "MAC ADDR: %02x:%02x:%02x:%02x:%02x:%02x\n",
                          sp->def_mac_addr[0].mac_addr[0],
                          sp->def_mac_addr[0].mac_addr[1],
@@ -5544,9 +5594,13 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
        } else {
                DBG_PRINT(ERR_DBG, "%s: Neterion Xframe I 10GbE adapter ",
                          dev->name);
-               DBG_PRINT(ERR_DBG, "(rev %d), Driver %s\n",
+               DBG_PRINT(ERR_DBG, "(rev %d), %s",
                                        get_xena_rev_id(sp->pdev),
                                        s2io_driver_version);
+#ifdef CONFIG_2BUFF_MODE
+               DBG_PRINT(ERR_DBG, ", Buffer mode %d",2);
+#endif
+               DBG_PRINT(ERR_DBG, "\nCopyright(c) 2002-2005 Neterion Inc.\n");
                DBG_PRINT(ERR_DBG, "MAC ADDR: %02x:%02x:%02x:%02x:%02x:%02x\n",
                          sp->def_mac_addr[0].mac_addr[0],
                          sp->def_mac_addr[0].mac_addr[1],
index bc64d967f08094abc2a2145696d8b43be70aec85..89151cb5218132414efae178eddb05f6f0515d26 100644 (file)
@@ -1,5 +1,5 @@
 /************************************************************************
- * s2io.h: A Linux PCI-X Ethernet driver for S2IO 10GbE Server NIC
+ * s2io.h: A Linux PCI-X Ethernet driver for Neterion 10GbE Server NIC
  * Copyright(c) 2002-2005 Neterion Inc.
 
  * This software may be used and distributed according to the terms of
@@ -622,6 +622,9 @@ typedef struct mac_info {
        /* Fifo specific structure */
        fifo_info_t fifos[MAX_TX_FIFOS];
 
+       /* Save virtual address of TxD page with zero DMA addr(if any) */
+       void *zerodma_virt_addr;
+
 /* rx side stuff */
        /* Ring specific structure */
        ring_info_t rings[MAX_RX_RINGS];
index a9b06b8d8e3ff185ffbd9cb90ff00e1ee0528fc3..ac9ce6509eee78af13c014d184b27bb0f5922e64 100644 (file)
@@ -986,7 +986,7 @@ static const char * chip_ids[ 16 ] =  {
        })
 #endif
 
-#if SMC_CAN_USE_DATACS
+#ifdef SMC_CAN_USE_DATACS
 #define SMC_PUSH_DATA(p, l)                                            \
        if ( lp->datacs ) {                                             \
                unsigned char *__ptr = (p);                             \
diff --git a/drivers/net/spider_net.c b/drivers/net/spider_net.c
new file mode 100644 (file)
index 0000000..4e19220
--- /dev/null
@@ -0,0 +1,2334 @@
+/*
+ * Network device driver for Cell Processor-Based Blade
+ *
+ * (C) Copyright IBM Corp. 2005
+ *
+ * Authors : Utz Bacher <utz.bacher@de.ibm.com>
+ *           Jens Osterkamp <Jens.Osterkamp@de.ibm.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, 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 <linux/config.h>
+
+#include <linux/compiler.h>
+#include <linux/crc32.h>
+#include <linux/delay.h>
+#include <linux/etherdevice.h>
+#include <linux/ethtool.h>
+#include <linux/firmware.h>
+#include <linux/if_vlan.h>
+#include <linux/init.h>
+#include <linux/ioport.h>
+#include <linux/ip.h>
+#include <linux/kernel.h>
+#include <linux/mii.h>
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/device.h>
+#include <linux/pci.h>
+#include <linux/skbuff.h>
+#include <linux/slab.h>
+#include <linux/tcp.h>
+#include <linux/types.h>
+#include <linux/wait.h>
+#include <linux/workqueue.h>
+#include <asm/bitops.h>
+#include <asm/pci-bridge.h>
+#include <net/checksum.h>
+
+#include "spider_net.h"
+
+MODULE_AUTHOR("Utz Bacher <utz.bacher@de.ibm.com> and Jens Osterkamp " \
+             "<Jens.Osterkamp@de.ibm.com>");
+MODULE_DESCRIPTION("Spider Southbridge Gigabit Ethernet driver");
+MODULE_LICENSE("GPL");
+
+static int rx_descriptors = SPIDER_NET_RX_DESCRIPTORS_DEFAULT;
+static int tx_descriptors = SPIDER_NET_TX_DESCRIPTORS_DEFAULT;
+
+module_param(rx_descriptors, int, 0644);
+module_param(tx_descriptors, int, 0644);
+
+MODULE_PARM_DESC(rx_descriptors, "number of descriptors used " \
+                "in rx chains");
+MODULE_PARM_DESC(tx_descriptors, "number of descriptors used " \
+                "in tx chain");
+
+char spider_net_driver_name[] = "spidernet";
+
+static struct pci_device_id spider_net_pci_tbl[] = {
+       { PCI_VENDOR_ID_TOSHIBA_2, PCI_DEVICE_ID_TOSHIBA_SPIDER_NET,
+         PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
+       { 0, }
+};
+
+MODULE_DEVICE_TABLE(pci, spider_net_pci_tbl);
+
+/**
+ * spider_net_read_reg - reads an SMMIO register of a card
+ * @card: device structure
+ * @reg: register to read from
+ *
+ * returns the content of the specified SMMIO register.
+ */
+static u32
+spider_net_read_reg(struct spider_net_card *card, u32 reg)
+{
+       u32 value;
+
+       value = readl(card->regs + reg);
+       value = le32_to_cpu(value);
+
+       return value;
+}
+
+/**
+ * spider_net_write_reg - writes to an SMMIO register of a card
+ * @card: device structure
+ * @reg: register to write to
+ * @value: value to write into the specified SMMIO register
+ */
+static void
+spider_net_write_reg(struct spider_net_card *card, u32 reg, u32 value)
+{
+       value = cpu_to_le32(value);
+       writel(value, card->regs + reg);
+}
+
+/**
+ * spider_net_write_reg_sync - writes to an SMMIO register of a card
+ * @card: device structure
+ * @reg: register to write to
+ * @value: value to write into the specified SMMIO register
+ *
+ * Unlike spider_net_write_reg, this will also make sure the
+ * data arrives on the card by reading the reg again.
+ */
+static void
+spider_net_write_reg_sync(struct spider_net_card *card, u32 reg, u32 value)
+{
+       value = cpu_to_le32(value);
+       writel(value, card->regs + reg);
+       (void)readl(card->regs + reg);
+}
+
+/**
+ * spider_net_rx_irq_off - switch off rx irq on this spider card
+ * @card: device structure
+ *
+ * switches off rx irq by masking them out in the GHIINTnMSK register
+ */
+static void
+spider_net_rx_irq_off(struct spider_net_card *card)
+{
+       u32 regvalue;
+       unsigned long flags;
+
+       spin_lock_irqsave(&card->intmask_lock, flags);
+       regvalue = spider_net_read_reg(card, SPIDER_NET_GHIINT0MSK);
+       regvalue &= ~SPIDER_NET_RXINT;
+       spider_net_write_reg_sync(card, SPIDER_NET_GHIINT0MSK, regvalue);
+       spin_unlock_irqrestore(&card->intmask_lock, flags);
+}
+
+/** spider_net_write_phy - write to phy register
+ * @netdev: adapter to be written to
+ * @mii_id: id of MII
+ * @reg: PHY register
+ * @val: value to be written to phy register
+ *
+ * spider_net_write_phy_register writes to an arbitrary PHY
+ * register via the spider GPCWOPCMD register. We assume the queue does
+ * not run full (not more than 15 commands outstanding).
+ **/
+static void
+spider_net_write_phy(struct net_device *netdev, int mii_id,
+                    int reg, int val)
+{
+       struct spider_net_card *card = netdev_priv(netdev);
+       u32 writevalue;
+
+       writevalue = ((u32)mii_id << 21) |
+               ((u32)reg << 16) | ((u32)val);
+
+       spider_net_write_reg(card, SPIDER_NET_GPCWOPCMD, writevalue);
+}
+
+/** spider_net_read_phy - read from phy register
+ * @netdev: network device to be read from
+ * @mii_id: id of MII
+ * @reg: PHY register
+ *
+ * Returns value read from PHY register
+ *
+ * spider_net_write_phy reads from an arbitrary PHY
+ * register via the spider GPCROPCMD register
+ **/
+static int
+spider_net_read_phy(struct net_device *netdev, int mii_id, int reg)
+{
+       struct spider_net_card *card = netdev_priv(netdev);
+       u32 readvalue;
+
+       readvalue = ((u32)mii_id << 21) | ((u32)reg << 16);
+       spider_net_write_reg(card, SPIDER_NET_GPCROPCMD, readvalue);
+
+       /* we don't use semaphores to wait for an SPIDER_NET_GPROPCMPINT
+        * interrupt, as we poll for the completion of the read operation
+        * in spider_net_read_phy. Should take about 50 us */
+       do {
+               readvalue = spider_net_read_reg(card, SPIDER_NET_GPCROPCMD);
+       } while (readvalue & SPIDER_NET_GPREXEC);
+
+       readvalue &= SPIDER_NET_GPRDAT_MASK;
+
+       return readvalue;
+}
+
+/**
+ * spider_net_rx_irq_on - switch on rx irq on this spider card
+ * @card: device structure
+ *
+ * switches on rx irq by enabling them in the GHIINTnMSK register
+ */
+static void
+spider_net_rx_irq_on(struct spider_net_card *card)
+{
+       u32 regvalue;
+       unsigned long flags;
+
+       spin_lock_irqsave(&card->intmask_lock, flags);
+       regvalue = spider_net_read_reg(card, SPIDER_NET_GHIINT0MSK);
+       regvalue |= SPIDER_NET_RXINT;
+       spider_net_write_reg_sync(card, SPIDER_NET_GHIINT0MSK, regvalue);
+       spin_unlock_irqrestore(&card->intmask_lock, flags);
+}
+
+/**
+ * spider_net_tx_irq_off - switch off tx irq on this spider card
+ * @card: device structure
+ *
+ * switches off tx irq by masking them out in the GHIINTnMSK register
+ */
+static void
+spider_net_tx_irq_off(struct spider_net_card *card)
+{
+       u32 regvalue;
+       unsigned long flags;
+
+       spin_lock_irqsave(&card->intmask_lock, flags);
+       regvalue = spider_net_read_reg(card, SPIDER_NET_GHIINT0MSK);
+       regvalue &= ~SPIDER_NET_TXINT;
+       spider_net_write_reg_sync(card, SPIDER_NET_GHIINT0MSK, regvalue);
+       spin_unlock_irqrestore(&card->intmask_lock, flags);
+}
+
+/**
+ * spider_net_tx_irq_on - switch on tx irq on this spider card
+ * @card: device structure
+ *
+ * switches on tx irq by enabling them in the GHIINTnMSK register
+ */
+static void
+spider_net_tx_irq_on(struct spider_net_card *card)
+{
+       u32 regvalue;
+       unsigned long flags;
+
+       spin_lock_irqsave(&card->intmask_lock, flags);
+       regvalue = spider_net_read_reg(card, SPIDER_NET_GHIINT0MSK);
+       regvalue |= SPIDER_NET_TXINT;
+       spider_net_write_reg_sync(card, SPIDER_NET_GHIINT0MSK, regvalue);
+       spin_unlock_irqrestore(&card->intmask_lock, flags);
+}
+
+/**
+ * spider_net_set_promisc - sets the unicast address or the promiscuous mode
+ * @card: card structure
+ *
+ * spider_net_set_promisc sets the unicast destination address filter and
+ * thus either allows for non-promisc mode or promisc mode
+ */
+static void
+spider_net_set_promisc(struct spider_net_card *card)
+{
+       u32 macu, macl;
+       struct net_device *netdev = card->netdev;
+
+       if (netdev->flags & IFF_PROMISC) {
+               /* clear destination entry 0 */
+               spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR, 0);
+               spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR + 0x04, 0);
+               spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R,
+                                    SPIDER_NET_PROMISC_VALUE);
+       } else {
+               macu = netdev->dev_addr[0];
+               macu <<= 8;
+               macu |= netdev->dev_addr[1];
+               memcpy(&macl, &netdev->dev_addr[2], sizeof(macl));
+
+               macu |= SPIDER_NET_UA_DESCR_VALUE;
+               spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR, macu);
+               spider_net_write_reg(card, SPIDER_NET_GMRUAFILnR + 0x04, macl);
+               spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R,
+                                    SPIDER_NET_NONPROMISC_VALUE);
+       }
+}
+
+/**
+ * spider_net_get_mac_address - read mac address from spider card
+ * @card: device structure
+ *
+ * reads MAC address from GMACUNIMACU and GMACUNIMACL registers
+ */
+static int
+spider_net_get_mac_address(struct net_device *netdev)
+{
+       struct spider_net_card *card = netdev_priv(netdev);
+       u32 macl, macu;
+
+       macl = spider_net_read_reg(card, SPIDER_NET_GMACUNIMACL);
+       macu = spider_net_read_reg(card, SPIDER_NET_GMACUNIMACU);
+
+       netdev->dev_addr[0] = (macu >> 24) & 0xff;
+       netdev->dev_addr[1] = (macu >> 16) & 0xff;
+       netdev->dev_addr[2] = (macu >> 8) & 0xff;
+       netdev->dev_addr[3] = macu & 0xff;
+       netdev->dev_addr[4] = (macl >> 8) & 0xff;
+       netdev->dev_addr[5] = macl & 0xff;
+
+       if (!is_valid_ether_addr(&netdev->dev_addr[0]))
+               return -EINVAL;
+
+       return 0;
+}
+
+/**
+ * spider_net_get_descr_status -- returns the status of a descriptor
+ * @descr: descriptor to look at
+ *
+ * returns the status as in the dmac_cmd_status field of the descriptor
+ */
+static enum spider_net_descr_status
+spider_net_get_descr_status(struct spider_net_descr *descr)
+{
+       u32 cmd_status;
+       rmb();
+       cmd_status = descr->dmac_cmd_status;
+       rmb();
+       cmd_status >>= SPIDER_NET_DESCR_IND_PROC_SHIFT;
+       /* no need to mask out any bits, as cmd_status is 32 bits wide only
+        * (and unsigned) */
+       return cmd_status;
+}
+
+/**
+ * spider_net_set_descr_status -- sets the status of a descriptor
+ * @descr: descriptor to change
+ * @status: status to set in the descriptor
+ *
+ * changes the status to the specified value. Doesn't change other bits
+ * in the status
+ */
+static void
+spider_net_set_descr_status(struct spider_net_descr *descr,
+                           enum spider_net_descr_status status)
+{
+       u32 cmd_status;
+       /* read the status */
+       mb();
+       cmd_status = descr->dmac_cmd_status;
+       /* clean the upper 4 bits */
+       cmd_status &= SPIDER_NET_DESCR_IND_PROC_MASKO;
+       /* add the status to it */
+       cmd_status |= ((u32)status)<<SPIDER_NET_DESCR_IND_PROC_SHIFT;
+       /* and write it back */
+       descr->dmac_cmd_status = cmd_status;
+       wmb();
+}
+
+/**
+ * spider_net_free_chain - free descriptor chain
+ * @card: card structure
+ * @chain: address of chain
+ *
+ */
+static void
+spider_net_free_chain(struct spider_net_card *card,
+                     struct spider_net_descr_chain *chain)
+{
+       struct spider_net_descr *descr;
+
+       for (descr = chain->tail; !descr->bus_addr; descr = descr->next) {
+               pci_unmap_single(card->pdev, descr->bus_addr,
+                                SPIDER_NET_DESCR_SIZE, PCI_DMA_BIDIRECTIONAL);
+               descr->bus_addr = 0;
+       }
+}
+
+/**
+ * spider_net_init_chain - links descriptor chain
+ * @card: card structure
+ * @chain: address of chain
+ * @start_descr: address of descriptor array
+ * @no: number of descriptors
+ *
+ * we manage a circular list that mirrors the hardware structure,
+ * except that the hardware uses bus addresses.
+ *
+ * returns 0 on success, <0 on failure
+ */
+static int
+spider_net_init_chain(struct spider_net_card *card,
+                      struct spider_net_descr_chain *chain,
+                      struct spider_net_descr *start_descr, int no)
+{
+       int i;
+       struct spider_net_descr *descr;
+
+       spin_lock_init(&card->chain_lock);
+
+       descr = start_descr;
+       memset(descr, 0, sizeof(*descr) * no);
+
+       /* set up the hardware pointers in each descriptor */
+       for (i=0; i<no; i++, descr++) {
+               spider_net_set_descr_status(descr, SPIDER_NET_DESCR_NOT_IN_USE);
+
+               descr->bus_addr =
+                       pci_map_single(card->pdev, descr,
+                                      SPIDER_NET_DESCR_SIZE,
+                                      PCI_DMA_BIDIRECTIONAL);
+
+               if (descr->bus_addr == DMA_ERROR_CODE)
+                       goto iommu_error;
+
+               descr->next = descr + 1;
+               descr->prev = descr - 1;
+
+       }
+       /* do actual circular list */
+       (descr-1)->next = start_descr;
+       start_descr->prev = descr-1;
+
+       descr = start_descr;
+       for (i=0; i < no; i++, descr++) {
+               descr->next_descr_addr = descr->next->bus_addr;
+       }
+
+       chain->head = start_descr;
+       chain->tail = start_descr;
+
+       return 0;
+
+iommu_error:
+       descr = start_descr;
+       for (i=0; i < no; i++, descr++)
+               if (descr->bus_addr)
+                       pci_unmap_single(card->pdev, descr->bus_addr,
+                                        SPIDER_NET_DESCR_SIZE, PCI_DMA_BIDIRECTIONAL);
+       return -ENOMEM;
+}
+
+/**
+ * spider_net_free_rx_chain_contents - frees descr contents in rx chain
+ * @card: card structure
+ *
+ * returns 0 on success, <0 on failure
+ */
+static void
+spider_net_free_rx_chain_contents(struct spider_net_card *card)
+{
+       struct spider_net_descr *descr;
+
+       descr = card->rx_chain.head;
+       while (descr->next != card->rx_chain.head) {
+               if (descr->skb) {
+                       dev_kfree_skb(descr->skb);
+                       pci_unmap_single(card->pdev, descr->buf_addr,
+                                        SPIDER_NET_MAX_MTU,
+                                        PCI_DMA_BIDIRECTIONAL);
+               }
+               descr = descr->next;
+       }
+}
+
+/**
+ * spider_net_prepare_rx_descr - reinitializes a rx descriptor
+ * @card: card structure
+ * @descr: descriptor to re-init
+ *
+ * return 0 on succes, <0 on failure
+ *
+ * allocates a new rx skb, iommu-maps it and attaches it to the descriptor.
+ * Activate the descriptor state-wise
+ */
+static int
+spider_net_prepare_rx_descr(struct spider_net_card *card,
+                           struct spider_net_descr *descr)
+{
+       int error = 0;
+       int offset;
+       int bufsize;
+
+       /* we need to round up the buffer size to a multiple of 128 */
+       bufsize = (SPIDER_NET_MAX_MTU + SPIDER_NET_RXBUF_ALIGN - 1) &
+               (~(SPIDER_NET_RXBUF_ALIGN - 1));
+
+       /* and we need to have it 128 byte aligned, therefore we allocate a
+        * bit more */
+       /* allocate an skb */
+       descr->skb = dev_alloc_skb(bufsize + SPIDER_NET_RXBUF_ALIGN - 1);
+       if (!descr->skb) {
+               if (net_ratelimit())
+                       if (netif_msg_rx_err(card))
+                               pr_err("Not enough memory to allocate "
+                                       "rx buffer\n");
+               return -ENOMEM;
+       }
+       descr->buf_size = bufsize;
+       descr->result_size = 0;
+       descr->valid_size = 0;
+       descr->data_status = 0;
+       descr->data_error = 0;
+
+       offset = ((unsigned long)descr->skb->data) &
+               (SPIDER_NET_RXBUF_ALIGN - 1);
+       if (offset)
+               skb_reserve(descr->skb, SPIDER_NET_RXBUF_ALIGN - offset);
+       /* io-mmu-map the skb */
+       descr->buf_addr = pci_map_single(card->pdev, descr->skb->data,
+                                        SPIDER_NET_MAX_MTU,
+                                        PCI_DMA_BIDIRECTIONAL);
+       if (descr->buf_addr == DMA_ERROR_CODE) {
+               dev_kfree_skb_any(descr->skb);
+               if (netif_msg_rx_err(card))
+                       pr_err("Could not iommu-map rx buffer\n");
+               spider_net_set_descr_status(descr, SPIDER_NET_DESCR_NOT_IN_USE);
+       } else {
+               descr->dmac_cmd_status = SPIDER_NET_DMAC_RX_CARDOWNED;
+       }
+
+       return error;
+}
+
+/**
+ * spider_net_enable_rxctails - sets RX dmac chain tail addresses
+ * @card: card structure
+ *
+ * spider_net_enable_rxctails sets the RX DMAC chain tail adresses in the
+ * chip by writing to the appropriate register. DMA is enabled in
+ * spider_net_enable_rxdmac.
+ */
+static void
+spider_net_enable_rxchtails(struct spider_net_card *card)
+{
+       /* assume chain is aligned correctly */
+       spider_net_write_reg(card, SPIDER_NET_GDADCHA ,
+                            card->rx_chain.tail->bus_addr);
+}
+
+/**
+ * spider_net_enable_rxdmac - enables a receive DMA controller
+ * @card: card structure
+ *
+ * spider_net_enable_rxdmac enables the DMA controller by setting RX_DMA_EN
+ * in the GDADMACCNTR register
+ */
+static void
+spider_net_enable_rxdmac(struct spider_net_card *card)
+{
+       spider_net_write_reg(card, SPIDER_NET_GDADMACCNTR,
+                            SPIDER_NET_DMA_RX_VALUE);
+}
+
+/**
+ * spider_net_refill_rx_chain - refills descriptors/skbs in the rx chains
+ * @card: card structure
+ *
+ * refills descriptors in all chains (last used chain first): allocates skbs
+ * and iommu-maps them.
+ */
+static void
+spider_net_refill_rx_chain(struct spider_net_card *card)
+{
+       struct spider_net_descr_chain *chain;
+       int count = 0;
+       unsigned long flags;
+
+       chain = &card->rx_chain;
+
+       spin_lock_irqsave(&card->chain_lock, flags);
+       while (spider_net_get_descr_status(chain->head) ==
+                               SPIDER_NET_DESCR_NOT_IN_USE) {
+               if (spider_net_prepare_rx_descr(card, chain->head))
+                       break;
+               count++;
+               chain->head = chain->head->next;
+       }
+       spin_unlock_irqrestore(&card->chain_lock, flags);
+
+       /* could be optimized, only do that, if we know the DMA processing
+        * has terminated */
+       if (count)
+               spider_net_enable_rxdmac(card);
+}
+
+/**
+ * spider_net_alloc_rx_skbs - allocates rx skbs in rx descriptor chains
+ * @card: card structure
+ *
+ * returns 0 on success, <0 on failure
+ */
+static int
+spider_net_alloc_rx_skbs(struct spider_net_card *card)
+{
+       int result;
+       struct spider_net_descr_chain *chain;
+
+       result = -ENOMEM;
+
+       chain = &card->rx_chain;
+       /* put at least one buffer into the chain. if this fails,
+        * we've got a problem. if not, spider_net_refill_rx_chain
+        * will do the rest at the end of this function */
+       if (spider_net_prepare_rx_descr(card, chain->head))
+               goto error;
+       else
+               chain->head = chain->head->next;
+
+       /* this will allocate the rest of the rx buffers; if not, it's
+        * business as usual later on */
+       spider_net_refill_rx_chain(card);
+       return 0;
+
+error:
+       spider_net_free_rx_chain_contents(card);
+       return result;
+}
+
+/**
+ * spider_net_release_tx_descr - processes a used tx descriptor
+ * @card: card structure
+ * @descr: descriptor to release
+ *
+ * releases a used tx descriptor (unmapping, freeing of skb)
+ */
+static void
+spider_net_release_tx_descr(struct spider_net_card *card,
+                           struct spider_net_descr *descr)
+{
+       struct sk_buff *skb;
+
+       /* unmap the skb */
+       skb = descr->skb;
+       pci_unmap_single(card->pdev, descr->buf_addr, skb->len,
+                        PCI_DMA_BIDIRECTIONAL);
+
+       dev_kfree_skb_any(skb);
+
+       /* set status to not used */
+       spider_net_set_descr_status(descr, SPIDER_NET_DESCR_NOT_IN_USE);
+}
+
+/**
+ * spider_net_release_tx_chain - processes sent tx descriptors
+ * @card: adapter structure
+ * @brutal: if set, don't care about whether descriptor seems to be in use
+ *
+ * releases the tx descriptors that spider has finished with (if non-brutal)
+ * or simply release tx descriptors (if brutal)
+ */
+static void
+spider_net_release_tx_chain(struct spider_net_card *card, int brutal)
+{
+       struct spider_net_descr_chain *tx_chain = &card->tx_chain;
+       enum spider_net_descr_status status;
+
+       spider_net_tx_irq_off(card);
+
+       /* no lock for chain needed, if this is only executed once at a time */
+again:
+       for (;;) {
+               status = spider_net_get_descr_status(tx_chain->tail);
+               switch (status) {
+               case SPIDER_NET_DESCR_CARDOWNED:
+                       if (!brutal) goto out;
+                       /* fallthrough, if we release the descriptors
+                        * brutally (then we don't care about
+                        * SPIDER_NET_DESCR_CARDOWNED) */
+               case SPIDER_NET_DESCR_RESPONSE_ERROR:
+               case SPIDER_NET_DESCR_PROTECTION_ERROR:
+               case SPIDER_NET_DESCR_FORCE_END:
+                       if (netif_msg_tx_err(card))
+                               pr_err("%s: forcing end of tx descriptor "
+                                      "with status x%02x\n",
+                                      card->netdev->name, status);
+                       card->netdev_stats.tx_dropped++;
+                       break;
+
+               case SPIDER_NET_DESCR_COMPLETE:
+                       card->netdev_stats.tx_packets++;
+                       card->netdev_stats.tx_bytes +=
+                               tx_chain->tail->skb->len;
+                       break;
+
+               default: /* any other value (== SPIDER_NET_DESCR_NOT_IN_USE) */
+                       goto out;
+               }
+               spider_net_release_tx_descr(card, tx_chain->tail);
+               tx_chain->tail = tx_chain->tail->next;
+       }
+out:
+       netif_wake_queue(card->netdev);
+
+       if (!brutal) {
+               /* switch on tx irqs (while we are still in the interrupt
+                * handler, so we don't get an interrupt), check again
+                * for done descriptors. This results in fewer interrupts */
+               spider_net_tx_irq_on(card);
+               status = spider_net_get_descr_status(tx_chain->tail);
+               switch (status) {
+                       case SPIDER_NET_DESCR_RESPONSE_ERROR:
+                       case SPIDER_NET_DESCR_PROTECTION_ERROR:
+                       case SPIDER_NET_DESCR_FORCE_END:
+                       case SPIDER_NET_DESCR_COMPLETE:
+                               goto again;
+                       default:
+                               break;
+               }
+       }
+
+}
+
+/**
+ * spider_net_get_multicast_hash - generates hash for multicast filter table
+ * @addr: multicast address
+ *
+ * returns the hash value.
+ *
+ * spider_net_get_multicast_hash calculates a hash value for a given multicast
+ * address, that is used to set the multicast filter tables
+ */
+static u8
+spider_net_get_multicast_hash(struct net_device *netdev, __u8 *addr)
+{
+       /* FIXME: an addr of 01:00:5e:00:00:01 must result in 0xa9,
+        * ff:ff:ff:ff:ff:ff must result in 0xfd */
+       u32 crc;
+       u8 hash;
+
+       crc = crc32_be(~0, addr, netdev->addr_len);
+
+       hash = (crc >> 27);
+       hash <<= 3;
+       hash |= crc & 7;
+
+       return hash;
+}
+
+/**
+ * spider_net_set_multi - sets multicast addresses and promisc flags
+ * @netdev: interface device structure
+ *
+ * spider_net_set_multi configures multicast addresses as needed for the
+ * netdev interface. It also sets up multicast, allmulti and promisc
+ * flags appropriately
+ */
+static void
+spider_net_set_multi(struct net_device *netdev)
+{
+       struct dev_mc_list *mc;
+       u8 hash;
+       int i;
+       u32 reg;
+       struct spider_net_card *card = netdev_priv(netdev);
+       unsigned long bitmask[SPIDER_NET_MULTICAST_HASHES / BITS_PER_LONG] =
+               {0, };
+
+       spider_net_set_promisc(card);
+
+       if (netdev->flags & IFF_ALLMULTI) {
+               for (i = 0; i < SPIDER_NET_MULTICAST_HASHES; i++) {
+                       set_bit(i, bitmask);
+               }
+               goto write_hash;
+       }
+
+       /* well, we know, what the broadcast hash value is: it's xfd
+       hash = spider_net_get_multicast_hash(netdev, netdev->broadcast); */
+       set_bit(0xfd, bitmask);
+
+       for (mc = netdev->mc_list; mc; mc = mc->next) {
+               hash = spider_net_get_multicast_hash(netdev, mc->dmi_addr);
+               set_bit(hash, bitmask);
+       }
+
+write_hash:
+       for (i = 0; i < SPIDER_NET_MULTICAST_HASHES / 4; i++) {
+               reg = 0;
+               if (test_bit(i * 4, bitmask))
+                       reg += 0x08;
+               reg <<= 8;
+               if (test_bit(i * 4 + 1, bitmask))
+                       reg += 0x08;
+               reg <<= 8;
+               if (test_bit(i * 4 + 2, bitmask))
+                       reg += 0x08;
+               reg <<= 8;
+               if (test_bit(i * 4 + 3, bitmask))
+                       reg += 0x08;
+
+               spider_net_write_reg(card, SPIDER_NET_GMRMHFILnR + i * 4, reg);
+       }
+}
+
+/**
+ * spider_net_disable_rxdmac - disables the receive DMA controller
+ * @card: card structure
+ *
+ * spider_net_disable_rxdmac terminates processing on the DMA controller by
+ * turing off DMA and issueing a force end
+ */
+static void
+spider_net_disable_rxdmac(struct spider_net_card *card)
+{
+       spider_net_write_reg(card, SPIDER_NET_GDADMACCNTR,
+                            SPIDER_NET_DMA_RX_FEND_VALUE);
+}
+
+/**
+ * spider_net_stop - called upon ifconfig down
+ * @netdev: interface device structure
+ *
+ * always returns 0
+ */
+int
+spider_net_stop(struct net_device *netdev)
+{
+       struct spider_net_card *card = netdev_priv(netdev);
+
+       netif_poll_disable(netdev);
+       netif_carrier_off(netdev);
+       netif_stop_queue(netdev);
+
+       /* disable/mask all interrupts */
+       spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK, 0);
+       spider_net_write_reg(card, SPIDER_NET_GHIINT1MSK, 0);
+       spider_net_write_reg(card, SPIDER_NET_GHIINT2MSK, 0);
+
+       /* free_irq(netdev->irq, netdev);*/
+       free_irq(to_pci_dev(netdev->class_dev.dev)->irq, netdev);
+
+       spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR,
+                            SPIDER_NET_DMA_TX_FEND_VALUE);
+
+       /* turn off DMA, force end */
+       spider_net_disable_rxdmac(card);
+
+       /* release chains */
+       spider_net_release_tx_chain(card, 1);
+
+       spider_net_free_chain(card, &card->tx_chain);
+       spider_net_free_chain(card, &card->rx_chain);
+
+       return 0;
+}
+
+/**
+ * spider_net_get_next_tx_descr - returns the next available tx descriptor
+ * @card: device structure to get descriptor from
+ *
+ * returns the address of the next descriptor, or NULL if not available.
+ */
+static struct spider_net_descr *
+spider_net_get_next_tx_descr(struct spider_net_card *card)
+{
+       /* check, if head points to not-in-use descr */
+       if ( spider_net_get_descr_status(card->tx_chain.head) ==
+            SPIDER_NET_DESCR_NOT_IN_USE ) {
+               return card->tx_chain.head;
+       } else {
+               return NULL;
+       }
+}
+
+/**
+ * spider_net_set_txdescr_cmdstat - sets the tx descriptor command field
+ * @descr: descriptor structure to fill out
+ * @skb: packet to consider
+ *
+ * fills out the command and status field of the descriptor structure,
+ * depending on hardware checksum settings. This function assumes a wmb()
+ * has executed before.
+ */
+static void
+spider_net_set_txdescr_cmdstat(struct spider_net_descr *descr,
+                              struct sk_buff *skb)
+{
+       if (skb->ip_summed != CHECKSUM_HW) {
+               descr->dmac_cmd_status = SPIDER_NET_DMAC_CMDSTAT_NOCS;
+               return;
+       }
+
+       /* is packet ip?
+        * if yes: tcp? udp? */
+       if (skb->protocol == htons(ETH_P_IP)) {
+               if (skb->nh.iph->protocol == IPPROTO_TCP) {
+                       descr->dmac_cmd_status = SPIDER_NET_DMAC_CMDSTAT_TCPCS;
+               } else if (skb->nh.iph->protocol == IPPROTO_UDP) {
+                       descr->dmac_cmd_status = SPIDER_NET_DMAC_CMDSTAT_UDPCS;
+               } else { /* the stack should checksum non-tcp and non-udp
+                           packets on his own: NETIF_F_IP_CSUM */
+                       descr->dmac_cmd_status = SPIDER_NET_DMAC_CMDSTAT_NOCS;
+               }
+       }
+}
+
+/**
+ * spider_net_prepare_tx_descr - fill tx descriptor with skb data
+ * @card: card structure
+ * @descr: descriptor structure to fill out
+ * @skb: packet to use
+ *
+ * returns 0 on success, <0 on failure.
+ *
+ * fills out the descriptor structure with skb data and len. Copies data,
+ * if needed (32bit DMA!)
+ */
+static int
+spider_net_prepare_tx_descr(struct spider_net_card *card,
+                           struct spider_net_descr *descr,
+                           struct sk_buff *skb)
+{
+       descr->buf_addr = pci_map_single(card->pdev, skb->data,
+                                        skb->len, PCI_DMA_BIDIRECTIONAL);
+       if (descr->buf_addr == DMA_ERROR_CODE) {
+               if (netif_msg_tx_err(card))
+                       pr_err("could not iommu-map packet (%p, %i). "
+                                 "Dropping packet\n", skb->data, skb->len);
+               return -ENOMEM;
+       }
+
+       descr->buf_size = skb->len;
+       descr->skb = skb;
+       descr->data_status = 0;
+
+       /* make sure the above values are in memory before we change the
+        * status */
+       wmb();
+
+       spider_net_set_txdescr_cmdstat(descr,skb);
+
+       return 0;
+}
+
+/**
+ * spider_net_kick_tx_dma - enables TX DMA processing
+ * @card: card structure
+ * @descr: descriptor address to enable TX processing at
+ *
+ * spider_net_kick_tx_dma writes the current tx chain head as start address
+ * of the tx descriptor chain and enables the transmission DMA engine
+ */
+static void
+spider_net_kick_tx_dma(struct spider_net_card *card,
+                      struct spider_net_descr *descr)
+{
+       /* this is the only descriptor in the output chain.
+        * Enable TX DMA */
+
+       spider_net_write_reg(card, SPIDER_NET_GDTDCHA,
+                            descr->bus_addr);
+
+       spider_net_write_reg(card, SPIDER_NET_GDTDMACCNTR,
+                            SPIDER_NET_DMA_TX_VALUE);
+}
+
+/**
+ * spider_net_xmit - transmits a frame over the device
+ * @skb: packet to send out
+ * @netdev: interface device structure
+ *
+ * returns 0 on success, <0 on failure
+ */
+static int
+spider_net_xmit(struct sk_buff *skb, struct net_device *netdev)
+{
+       struct spider_net_card *card = netdev_priv(netdev);
+       struct spider_net_descr *descr;
+       int result;
+
+       descr = spider_net_get_next_tx_descr(card);
+
+       if (!descr) {
+               netif_stop_queue(netdev);
+
+               descr = spider_net_get_next_tx_descr(card);
+               if (!descr)
+                       goto error;
+               else
+                       netif_start_queue(netdev);
+       }
+
+       result = spider_net_prepare_tx_descr(card, descr, skb);
+       if (result)
+               goto error;
+
+       card->tx_chain.head = card->tx_chain.head->next;
+
+       /* make sure the status from spider_net_prepare_tx_descr is in
+        * memory before we check out the previous descriptor */
+       wmb();
+
+       if (spider_net_get_descr_status(descr->prev) !=
+           SPIDER_NET_DESCR_CARDOWNED)
+               spider_net_kick_tx_dma(card, descr);
+
+       return NETDEV_TX_OK;
+
+error:
+       card->netdev_stats.tx_dropped++;
+       return NETDEV_TX_LOCKED;
+}
+
+/**
+ * spider_net_do_ioctl - called for device ioctls
+ * @netdev: interface device structure
+ * @ifr: request parameter structure for ioctl
+ * @cmd: command code for ioctl
+ *
+ * returns 0 on success, <0 on failure. Currently, we have no special ioctls.
+ * -EOPNOTSUPP is returned, if an unknown ioctl was requested
+ */
+static int
+spider_net_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
+{
+       switch (cmd) {
+       default:
+               return -EOPNOTSUPP;
+       }
+}
+
+/**
+ * spider_net_pass_skb_up - takes an skb from a descriptor and passes it on
+ * @descr: descriptor to process
+ * @card: card structure
+ *
+ * returns 1 on success, 0 if no packet was passed to the stack
+ *
+ * iommu-unmaps the skb, fills out skb structure and passes the data to the
+ * stack. The descriptor state is not changed.
+ */
+static int
+spider_net_pass_skb_up(struct spider_net_descr *descr,
+                      struct spider_net_card *card)
+{
+       struct sk_buff *skb;
+       struct net_device *netdev;
+       u32 data_status, data_error;
+
+       data_status = descr->data_status;
+       data_error = descr->data_error;
+
+       netdev = card->netdev;
+
+       /* check for errors in the data_error flag */
+       if ((data_error & SPIDER_NET_DATA_ERROR_MASK) &&
+           netif_msg_rx_err(card))
+               pr_err("error in received descriptor found, "
+                      "data_status=x%08x, data_error=x%08x\n",
+                      data_status, data_error);
+
+       /* prepare skb, unmap descriptor */
+       skb = descr->skb;
+       pci_unmap_single(card->pdev, descr->buf_addr, SPIDER_NET_MAX_MTU,
+                        PCI_DMA_BIDIRECTIONAL);
+
+       /* the cases we'll throw away the packet immediately */
+       if (data_error & SPIDER_NET_DESTROY_RX_FLAGS)
+               return 0;
+
+       skb->dev = netdev;
+       skb_put(skb, descr->valid_size);
+
+       /* the card seems to add 2 bytes of junk in front
+        * of the ethernet frame */
+#define SPIDER_MISALIGN                2
+       skb_pull(skb, SPIDER_MISALIGN);
+       skb->protocol = eth_type_trans(skb, netdev);
+
+       /* checksum offload */
+       if (card->options.rx_csum) {
+               if ( (data_status & SPIDER_NET_DATA_STATUS_CHK_MASK) &&
+                    (!(data_error & SPIDER_NET_DATA_ERROR_CHK_MASK)) )
+                       skb->ip_summed = CHECKSUM_UNNECESSARY;
+               else
+                       skb->ip_summed = CHECKSUM_NONE;
+       } else {
+               skb->ip_summed = CHECKSUM_NONE;
+       }
+
+       if (data_status & SPIDER_NET_VLAN_PACKET) {
+               /* further enhancements: HW-accel VLAN
+                * vlan_hwaccel_receive_skb
+                */
+       }
+
+       /* pass skb up to stack */
+       netif_receive_skb(skb);
+
+       /* update netdevice statistics */
+       card->netdev_stats.rx_packets++;
+       card->netdev_stats.rx_bytes += skb->len;
+
+       return 1;
+}
+
+/**
+ * spider_net_decode_descr - processes an rx descriptor
+ * @card: card structure
+ *
+ * returns 1 if a packet has been sent to the stack, otherwise 0
+ *
+ * processes an rx descriptor by iommu-unmapping the data buffer and passing
+ * the packet up to the stack
+ */
+static int
+spider_net_decode_one_descr(struct spider_net_card *card)
+{
+       enum spider_net_descr_status status;
+       struct spider_net_descr *descr;
+       struct spider_net_descr_chain *chain;
+       int result;
+
+       chain = &card->rx_chain;
+       descr = chain->tail;
+
+       status = spider_net_get_descr_status(descr);
+
+       if (status == SPIDER_NET_DESCR_CARDOWNED) {
+               /* nothing in the descriptor yet */
+               return 0;
+       }
+
+       if (status == SPIDER_NET_DESCR_NOT_IN_USE) {
+               /* not initialized yet, I bet chain->tail == chain->head
+                * and the ring is empty */
+               spider_net_refill_rx_chain(card);
+               return 0;
+       }
+
+       /* descriptor definitively used -- move on head */
+       chain->tail = descr->next;
+
+       result = 0;
+       if ( (status == SPIDER_NET_DESCR_RESPONSE_ERROR) ||
+            (status == SPIDER_NET_DESCR_PROTECTION_ERROR) ||
+            (status == SPIDER_NET_DESCR_FORCE_END) ) {
+               if (netif_msg_rx_err(card))
+                       pr_err("%s: dropping RX descriptor with state %d\n",
+                              card->netdev->name, status);
+               card->netdev_stats.rx_dropped++;
+               goto refill;
+       }
+
+       if ( (status != SPIDER_NET_DESCR_COMPLETE) &&
+            (status != SPIDER_NET_DESCR_FRAME_END) ) {
+               if (netif_msg_rx_err(card))
+                       pr_err("%s: RX descriptor with state %d\n",
+                              card->netdev->name, status);
+               goto refill;
+       }
+
+       /* ok, we've got a packet in descr */
+       result = spider_net_pass_skb_up(descr, card);
+refill:
+       spider_net_set_descr_status(descr, SPIDER_NET_DESCR_NOT_IN_USE);
+       /* change the descriptor state: */
+       spider_net_refill_rx_chain(card);
+
+       return result;
+}
+
+/**
+ * spider_net_poll - NAPI poll function called by the stack to return packets
+ * @netdev: interface device structure
+ * @budget: number of packets we can pass to the stack at most
+ *
+ * returns 0 if no more packets available to the driver/stack. Returns 1,
+ * if the quota is exceeded, but the driver has still packets.
+ *
+ * spider_net_poll returns all packets from the rx descriptors to the stack
+ * (using netif_receive_skb). If all/enough packets are up, the driver
+ * reenables interrupts and returns 0. If not, 1 is returned.
+ */
+static int
+spider_net_poll(struct net_device *netdev, int *budget)
+{
+       struct spider_net_card *card = netdev_priv(netdev);
+       int packets_to_do, packets_done = 0;
+       int no_more_packets = 0;
+
+       packets_to_do = min(*budget, netdev->quota);
+
+       while (packets_to_do) {
+               if (spider_net_decode_one_descr(card)) {
+                       packets_done++;
+                       packets_to_do--;
+               } else {
+                       /* no more packets for the stack */
+                       no_more_packets = 1;
+                       break;
+               }
+       }
+
+       netdev->quota -= packets_done;
+       *budget -= packets_done;
+
+       /* if all packets are in the stack, enable interrupts and return 0 */
+       /* if not, return 1 */
+       if (no_more_packets) {
+               netif_rx_complete(netdev);
+               spider_net_rx_irq_on(card);
+               return 0;
+       }
+
+       return 1;
+}
+
+/**
+ * spider_net_vlan_rx_reg - initializes VLAN structures in the driver and card
+ * @netdev: interface device structure
+ * @grp: vlan_group structure that is registered (NULL on destroying interface)
+ */
+static void
+spider_net_vlan_rx_reg(struct net_device *netdev, struct vlan_group *grp)
+{
+       /* further enhancement... yet to do */
+       return;
+}
+
+/**
+ * spider_net_vlan_rx_add - adds VLAN id to the card filter
+ * @netdev: interface device structure
+ * @vid: VLAN id to add
+ */
+static void
+spider_net_vlan_rx_add(struct net_device *netdev, uint16_t vid)
+{
+       /* further enhancement... yet to do */
+       /* add vid to card's VLAN filter table */
+       return;
+}
+
+/**
+ * spider_net_vlan_rx_kill - removes VLAN id to the card filter
+ * @netdev: interface device structure
+ * @vid: VLAN id to remove
+ */
+static void
+spider_net_vlan_rx_kill(struct net_device *netdev, uint16_t vid)
+{
+       /* further enhancement... yet to do */
+       /* remove vid from card's VLAN filter table */
+}
+
+/**
+ * spider_net_get_stats - get interface statistics
+ * @netdev: interface device structure
+ *
+ * returns the interface statistics residing in the spider_net_card struct
+ */
+static struct net_device_stats *
+spider_net_get_stats(struct net_device *netdev)
+{
+       struct spider_net_card *card = netdev_priv(netdev);
+       struct net_device_stats *stats = &card->netdev_stats;
+       return stats;
+}
+
+/**
+ * spider_net_change_mtu - changes the MTU of an interface
+ * @netdev: interface device structure
+ * @new_mtu: new MTU value
+ *
+ * returns 0 on success, <0 on failure
+ */
+static int
+spider_net_change_mtu(struct net_device *netdev, int new_mtu)
+{
+       /* no need to re-alloc skbs or so -- the max mtu is about 2.3k
+        * and mtu is outbound only anyway */
+       if ( (new_mtu < SPIDER_NET_MIN_MTU ) ||
+               (new_mtu > SPIDER_NET_MAX_MTU) )
+               return -EINVAL;
+       netdev->mtu = new_mtu;
+       return 0;
+}
+
+/**
+ * spider_net_set_mac - sets the MAC of an interface
+ * @netdev: interface device structure
+ * @ptr: pointer to new MAC address
+ *
+ * Returns 0 on success, <0 on failure. Currently, we don't support this
+ * and will always return EOPNOTSUPP.
+ */
+static int
+spider_net_set_mac(struct net_device *netdev, void *p)
+{
+       struct spider_net_card *card = netdev_priv(netdev);
+       u32 macl, macu, regvalue;
+       struct sockaddr *addr = p;
+
+       if (!is_valid_ether_addr(addr->sa_data))
+               return -EADDRNOTAVAIL;
+
+       /* switch off GMACTPE and GMACRPE */
+       regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD);
+       regvalue &= ~((1 << 5) | (1 << 6));
+       spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue);
+
+       /* write mac */
+       macu = (addr->sa_data[0]<<24) + (addr->sa_data[1]<<16) +
+               (addr->sa_data[2]<<8) + (addr->sa_data[3]);
+       macl = (addr->sa_data[4]<<8) + (addr->sa_data[5]);
+       spider_net_write_reg(card, SPIDER_NET_GMACUNIMACU, macu);
+       spider_net_write_reg(card, SPIDER_NET_GMACUNIMACL, macl);
+
+       /* switch GMACTPE and GMACRPE back on */
+       regvalue = spider_net_read_reg(card, SPIDER_NET_GMACOPEMD);
+       regvalue |= ((1 << 5) | (1 << 6));
+       spider_net_write_reg(card, SPIDER_NET_GMACOPEMD, regvalue);
+
+       spider_net_set_promisc(card);
+
+       /* look up, whether we have been successful */
+       if (spider_net_get_mac_address(netdev))
+               return -EADDRNOTAVAIL;
+       if (memcmp(netdev->dev_addr,addr->sa_data,netdev->addr_len))
+               return -EADDRNOTAVAIL;
+
+       return 0;
+}
+
+/**
+ * spider_net_enable_txdmac - enables a TX DMA controller
+ * @card: card structure
+ *
+ * spider_net_enable_txdmac enables the TX DMA controller by setting the
+ * descriptor chain tail address
+ */
+static void
+spider_net_enable_txdmac(struct spider_net_card *card)
+{
+       /* assume chain is aligned correctly */
+       spider_net_write_reg(card, SPIDER_NET_GDTDCHA,
+                            card->tx_chain.tail->bus_addr);
+}
+
+/**
+ * spider_net_handle_error_irq - handles errors raised by an interrupt
+ * @card: card structure
+ * @status_reg: interrupt status register 0 (GHIINT0STS)
+ *
+ * spider_net_handle_error_irq treats or ignores all error conditions
+ * found when an interrupt is presented
+ */
+static void
+spider_net_handle_error_irq(struct spider_net_card *card, u32 status_reg)
+{
+       u32 error_reg1, error_reg2;
+       u32 i;
+       int show_error = 1;
+
+       error_reg1 = spider_net_read_reg(card, SPIDER_NET_GHIINT1STS);
+       error_reg2 = spider_net_read_reg(card, SPIDER_NET_GHIINT2STS);
+
+       /* check GHIINT0STS ************************************/
+       if (status_reg)
+               for (i = 0; i < 32; i++)
+                       if (status_reg & (1<<i))
+                               switch (i)
+       {
+       /* let error_reg1 and error_reg2 evaluation decide, what to do
+       case SPIDER_NET_PHYINT:
+       case SPIDER_NET_GMAC2INT:
+       case SPIDER_NET_GMAC1INT:
+       case SPIDER_NET_GIPSINT:
+       case SPIDER_NET_GFIFOINT:
+       case SPIDER_NET_DMACINT:
+       case SPIDER_NET_GSYSINT:
+               break; */
+
+       case SPIDER_NET_GPWOPCMPINT:
+               /* PHY write operation completed */
+               show_error = 0;
+               break;
+       case SPIDER_NET_GPROPCMPINT:
+               /* PHY read operation completed */
+               /* we don't use semaphores, as we poll for the completion
+                * of the read operation in spider_net_read_phy. Should take
+                * about 50 us */
+               show_error = 0;
+               break;
+       case SPIDER_NET_GPWFFINT:
+               /* PHY command queue full */
+               if (netif_msg_intr(card))
+                       pr_err("PHY write queue full\n");
+               show_error = 0;
+               break;
+
+       /* case SPIDER_NET_GRMDADRINT: not used. print a message */
+       /* case SPIDER_NET_GRMARPINT: not used. print a message */
+       /* case SPIDER_NET_GRMMPINT: not used. print a message */
+
+       case SPIDER_NET_GDTDEN0INT:
+               /* someone has set TX_DMA_EN to 0 */
+               show_error = 0;
+               break;
+
+       case SPIDER_NET_GDDDEN0INT: /* fallthrough */
+       case SPIDER_NET_GDCDEN0INT: /* fallthrough */
+       case SPIDER_NET_GDBDEN0INT: /* fallthrough */
+       case SPIDER_NET_GDADEN0INT:
+               /* someone has set RX_DMA_EN to 0 */
+               show_error = 0;
+               break;
+
+       /* RX interrupts */
+       case SPIDER_NET_GDDFDCINT:
+       case SPIDER_NET_GDCFDCINT:
+       case SPIDER_NET_GDBFDCINT:
+       case SPIDER_NET_GDAFDCINT:
+       /* case SPIDER_NET_GDNMINT: not used. print a message */
+       /* case SPIDER_NET_GCNMINT: not used. print a message */
+       /* case SPIDER_NET_GBNMINT: not used. print a message */
+       /* case SPIDER_NET_GANMINT: not used. print a message */
+       /* case SPIDER_NET_GRFNMINT: not used. print a message */
+               show_error = 0;
+               break;
+
+       /* TX interrupts */
+       case SPIDER_NET_GDTFDCINT:
+               show_error = 0;
+               break;
+       case SPIDER_NET_GTTEDINT:
+               show_error = 0;
+               break;
+       case SPIDER_NET_GDTDCEINT:
+               /* chain end. If a descriptor should be sent, kick off
+                * tx dma
+               if (card->tx_chain.tail == card->tx_chain.head)
+                       spider_net_kick_tx_dma(card);
+               show_error = 0; */
+               break;
+
+       /* case SPIDER_NET_G1TMCNTINT: not used. print a message */
+       /* case SPIDER_NET_GFREECNTINT: not used. print a message */
+       }
+
+       /* check GHIINT1STS ************************************/
+       if (error_reg1)
+               for (i = 0; i < 32; i++)
+                       if (error_reg1 & (1<<i))
+                               switch (i)
+       {
+       case SPIDER_NET_GTMFLLINT:
+               if (netif_msg_intr(card))
+                       pr_err("Spider TX RAM full\n");
+               show_error = 0;
+               break;
+       case SPIDER_NET_GRMFLLINT:
+               if (netif_msg_intr(card))
+                       pr_err("Spider RX RAM full, incoming packets "
+                              "might be discarded !\n");
+               netif_rx_schedule(card->netdev);
+               spider_net_enable_rxchtails(card);
+               spider_net_enable_rxdmac(card);
+               break;
+
+       /* case SPIDER_NET_GTMSHTINT: problem, print a message */
+       case SPIDER_NET_GDTINVDINT:
+               /* allrighty. tx from previous descr ok */
+               show_error = 0;
+               break;
+       /* case SPIDER_NET_GRFDFLLINT: print a message down there */
+       /* case SPIDER_NET_GRFCFLLINT: print a message down there */
+       /* case SPIDER_NET_GRFBFLLINT: print a message down there */
+       /* case SPIDER_NET_GRFAFLLINT: print a message down there */
+
+       /* chain end */
+       case SPIDER_NET_GDDDCEINT: /* fallthrough */
+       case SPIDER_NET_GDCDCEINT: /* fallthrough */
+       case SPIDER_NET_GDBDCEINT: /* fallthrough */
+       case SPIDER_NET_GDADCEINT:
+               if (netif_msg_intr(card))
+                       pr_err("got descriptor chain end interrupt, "
+                              "restarting DMAC %c.\n",
+                              'D'+i-SPIDER_NET_GDDDCEINT);
+               spider_net_refill_rx_chain(card);
+               show_error = 0;
+               break;
+
+       /* invalid descriptor */
+       case SPIDER_NET_GDDINVDINT: /* fallthrough */
+       case SPIDER_NET_GDCINVDINT: /* fallthrough */
+       case SPIDER_NET_GDBINVDINT: /* fallthrough */
+       case SPIDER_NET_GDAINVDINT:
+               /* could happen when rx chain is full */
+               spider_net_refill_rx_chain(card);
+               show_error = 0;
+               break;
+
+       /* case SPIDER_NET_GDTRSERINT: problem, print a message */
+       /* case SPIDER_NET_GDDRSERINT: problem, print a message */
+       /* case SPIDER_NET_GDCRSERINT: problem, print a message */
+       /* case SPIDER_NET_GDBRSERINT: problem, print a message */
+       /* case SPIDER_NET_GDARSERINT: problem, print a message */
+       /* case SPIDER_NET_GDSERINT: problem, print a message */
+       /* case SPIDER_NET_GDTPTERINT: problem, print a message */
+       /* case SPIDER_NET_GDDPTERINT: problem, print a message */
+       /* case SPIDER_NET_GDCPTERINT: problem, print a message */
+       /* case SPIDER_NET_GDBPTERINT: problem, print a message */
+       /* case SPIDER_NET_GDAPTERINT: problem, print a message */
+       default:
+               show_error = 1;
+               break;
+       }
+
+       /* check GHIINT2STS ************************************/
+       if (error_reg2)
+               for (i = 0; i < 32; i++)
+                       if (error_reg2 & (1<<i))
+                               switch (i)
+       {
+       /* there is nothing we can (want  to) do at this time. Log a
+        * message, we can switch on and off the specific values later on
+       case SPIDER_NET_GPROPERINT:
+       case SPIDER_NET_GMCTCRSNGINT:
+       case SPIDER_NET_GMCTLCOLINT:
+       case SPIDER_NET_GMCTTMOTINT:
+       case SPIDER_NET_GMCRCAERINT:
+       case SPIDER_NET_GMCRCALERINT:
+       case SPIDER_NET_GMCRALNERINT:
+       case SPIDER_NET_GMCROVRINT:
+       case SPIDER_NET_GMCRRNTINT:
+       case SPIDER_NET_GMCRRXERINT:
+       case SPIDER_NET_GTITCSERINT:
+       case SPIDER_NET_GTIFMTERINT:
+       case SPIDER_NET_GTIPKTRVKINT:
+       case SPIDER_NET_GTISPINGINT:
+       case SPIDER_NET_GTISADNGINT:
+       case SPIDER_NET_GTISPDNGINT:
+       case SPIDER_NET_GRIFMTERINT:
+       case SPIDER_NET_GRIPKTRVKINT:
+       case SPIDER_NET_GRISPINGINT:
+       case SPIDER_NET_GRISADNGINT:
+       case SPIDER_NET_GRISPDNGINT:
+               break;
+       */
+               default:
+                       break;
+       }
+
+       if ((show_error) && (netif_msg_intr(card)))
+               pr_err("Got error interrupt, GHIINT0STS = 0x%08x, "
+                      "GHIINT1STS = 0x%08x, GHIINT2STS = 0x%08x\n",
+                      status_reg, error_reg1, error_reg2);
+
+       /* clear interrupt sources */
+       spider_net_write_reg(card, SPIDER_NET_GHIINT1STS, error_reg1);
+       spider_net_write_reg(card, SPIDER_NET_GHIINT2STS, error_reg2);
+}
+
+/**
+ * spider_net_interrupt - interrupt handler for spider_net
+ * @irq: interupt number
+ * @ptr: pointer to net_device
+ * @regs: PU registers
+ *
+ * returns IRQ_HANDLED, if interrupt was for driver, or IRQ_NONE, if no
+ * interrupt found raised by card.
+ *
+ * This is the interrupt handler, that turns off
+ * interrupts for this device and makes the stack poll the driver
+ */
+static irqreturn_t
+spider_net_interrupt(int irq, void *ptr, struct pt_regs *regs)
+{
+       struct net_device *netdev = ptr;
+       struct spider_net_card *card = netdev_priv(netdev);
+       u32 status_reg;
+
+       status_reg = spider_net_read_reg(card, SPIDER_NET_GHIINT0STS);
+
+       if (!status_reg)
+               return IRQ_NONE;
+
+       if (status_reg & SPIDER_NET_TXINT)
+               spider_net_release_tx_chain(card, 0);
+
+       if (status_reg & SPIDER_NET_RXINT ) {
+               spider_net_rx_irq_off(card);
+               netif_rx_schedule(netdev);
+       }
+
+       /* we do this after rx and tx processing, as we want the tx chain
+        * processed to see, whether we should restart tx dma processing */
+       spider_net_handle_error_irq(card, status_reg);
+
+       /* clear interrupt sources */
+       spider_net_write_reg(card, SPIDER_NET_GHIINT0STS, status_reg);
+
+       return IRQ_HANDLED;
+}
+
+#ifdef CONFIG_NET_POLL_CONTROLLER
+/**
+ * spider_net_poll_controller - artificial interrupt for netconsole etc.
+ * @netdev: interface device structure
+ *
+ * see Documentation/networking/netconsole.txt
+ */
+static void
+spider_net_poll_controller(struct net_device *netdev)
+{
+       disable_irq(netdev->irq);
+       spider_net_interrupt(netdev->irq, netdev, NULL);
+       enable_irq(netdev->irq);
+}
+#endif /* CONFIG_NET_POLL_CONTROLLER */
+
+/**
+ * spider_net_init_card - initializes the card
+ * @card: card structure
+ *
+ * spider_net_init_card initializes the card so that other registers can
+ * be used
+ */
+static void
+spider_net_init_card(struct spider_net_card *card)
+{
+       spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
+                            SPIDER_NET_CKRCTRL_STOP_VALUE);
+
+       spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
+                            SPIDER_NET_CKRCTRL_RUN_VALUE);
+}
+
+/**
+ * spider_net_enable_card - enables the card by setting all kinds of regs
+ * @card: card structure
+ *
+ * spider_net_enable_card sets a lot of SMMIO registers to enable the device
+ */
+static void
+spider_net_enable_card(struct spider_net_card *card)
+{
+       int i;
+       /* the following array consists of (register),(value) pairs
+        * that are set in this function. A register of 0 ends the list */
+       u32 regs[][2] = {
+               { SPIDER_NET_GRESUMINTNUM, 0 },
+               { SPIDER_NET_GREINTNUM, 0 },
+
+               /* set interrupt frame number registers */
+               /* clear the single DMA engine registers first */
+               { SPIDER_NET_GFAFRMNUM, SPIDER_NET_GFXFRAMES_VALUE },
+               { SPIDER_NET_GFBFRMNUM, SPIDER_NET_GFXFRAMES_VALUE },
+               { SPIDER_NET_GFCFRMNUM, SPIDER_NET_GFXFRAMES_VALUE },
+               { SPIDER_NET_GFDFRMNUM, SPIDER_NET_GFXFRAMES_VALUE },
+               /* then set, what we really need */
+               { SPIDER_NET_GFFRMNUM, SPIDER_NET_FRAMENUM_VALUE },
+
+               /* timer counter registers and stuff */
+               { SPIDER_NET_GFREECNNUM, 0 },
+               { SPIDER_NET_GONETIMENUM, 0 },
+               { SPIDER_NET_GTOUTFRMNUM, 0 },
+
+               /* RX mode setting */
+               { SPIDER_NET_GRXMDSET, SPIDER_NET_RXMODE_VALUE },
+               /* TX mode setting */
+               { SPIDER_NET_GTXMDSET, SPIDER_NET_TXMODE_VALUE },
+               /* IPSEC mode setting */
+               { SPIDER_NET_GIPSECINIT, SPIDER_NET_IPSECINIT_VALUE },
+
+               { SPIDER_NET_GFTRESTRT, SPIDER_NET_RESTART_VALUE },
+
+               { SPIDER_NET_GMRWOLCTRL, 0 },
+               { SPIDER_NET_GTESTMD, 0 },
+
+               { SPIDER_NET_GMACINTEN, 0 },
+
+               /* flow control stuff */
+               { SPIDER_NET_GMACAPAUSE, SPIDER_NET_MACAPAUSE_VALUE },
+               { SPIDER_NET_GMACTXPAUSE, SPIDER_NET_TXPAUSE_VALUE },
+
+               { SPIDER_NET_GMACBSTLMT, SPIDER_NET_BURSTLMT_VALUE },
+               { 0, 0}
+       };
+
+       i = 0;
+       while (regs[i][0]) {
+               spider_net_write_reg(card, regs[i][0], regs[i][1]);
+               i++;
+       }
+
+       /* clear unicast filter table entries 1 to 14 */
+       for (i = 1; i <= 14; i++) {
+               spider_net_write_reg(card,
+                                    SPIDER_NET_GMRUAFILnR + i * 8,
+                                    0x00080000);
+               spider_net_write_reg(card,
+                                    SPIDER_NET_GMRUAFILnR + i * 8 + 4,
+                                    0x00000000);
+       }
+
+       spider_net_write_reg(card, SPIDER_NET_GMRUA0FIL15R, 0x08080000);
+
+       spider_net_write_reg(card, SPIDER_NET_ECMODE, SPIDER_NET_ECMODE_VALUE);
+
+       /* set chain tail adress for RX chains and
+        * enable DMA */
+       spider_net_enable_rxchtails(card);
+       spider_net_enable_rxdmac(card);
+
+       spider_net_write_reg(card, SPIDER_NET_GRXDMAEN, SPIDER_NET_WOL_VALUE);
+
+       /* set chain tail adress for TX chain */
+       spider_net_enable_txdmac(card);
+
+       spider_net_write_reg(card, SPIDER_NET_GMACLENLMT,
+                            SPIDER_NET_LENLMT_VALUE);
+       spider_net_write_reg(card, SPIDER_NET_GMACMODE,
+                            SPIDER_NET_MACMODE_VALUE);
+       spider_net_write_reg(card, SPIDER_NET_GMACOPEMD,
+                            SPIDER_NET_OPMODE_VALUE);
+
+       /* set interrupt mask registers */
+       spider_net_write_reg(card, SPIDER_NET_GHIINT0MSK,
+                            SPIDER_NET_INT0_MASK_VALUE);
+       spider_net_write_reg(card, SPIDER_NET_GHIINT1MSK,
+                            SPIDER_NET_INT1_MASK_VALUE);
+       spider_net_write_reg(card, SPIDER_NET_GHIINT2MSK,
+                            SPIDER_NET_INT2_MASK_VALUE);
+}
+
+/**
+ * spider_net_open - called upon ifonfig up
+ * @netdev: interface device structure
+ *
+ * returns 0 on success, <0 on failure
+ *
+ * spider_net_open allocates all the descriptors and memory needed for
+ * operation, sets up multicast list and enables interrupts
+ */
+int
+spider_net_open(struct net_device *netdev)
+{
+       struct spider_net_card *card = netdev_priv(netdev);
+       int result;
+
+       result = -ENOMEM;
+       if (spider_net_init_chain(card, &card->tx_chain,
+                         card->descr, tx_descriptors))
+               goto alloc_tx_failed;
+       if (spider_net_init_chain(card, &card->rx_chain,
+                         card->descr + tx_descriptors, rx_descriptors))
+               goto alloc_rx_failed;
+
+       /* allocate rx skbs */
+       if (spider_net_alloc_rx_skbs(card))
+               goto alloc_skbs_failed;
+
+       spider_net_set_multi(netdev);
+
+       /* further enhancement: setup hw vlan, if needed */
+
+       result = -EBUSY;
+       if (request_irq(netdev->irq, spider_net_interrupt,
+                            SA_SHIRQ, netdev->name, netdev))
+               goto register_int_failed;
+
+       spider_net_enable_card(card);
+
+       netif_start_queue(netdev);
+       netif_carrier_on(netdev);
+       netif_poll_enable(netdev);
+
+       return 0;
+
+register_int_failed:
+       spider_net_free_rx_chain_contents(card);
+alloc_skbs_failed:
+       spider_net_free_chain(card, &card->rx_chain);
+alloc_rx_failed:
+       spider_net_free_chain(card, &card->tx_chain);
+alloc_tx_failed:
+       return result;
+}
+
+/**
+ * spider_net_setup_phy - setup PHY
+ * @card: card structure
+ *
+ * returns 0 on success, <0 on failure
+ *
+ * spider_net_setup_phy is used as part of spider_net_probe. Sets
+ * the PHY to 1000 Mbps
+ **/
+static int
+spider_net_setup_phy(struct spider_net_card *card)
+{
+       struct mii_phy *phy = &card->phy;
+
+       spider_net_write_reg(card, SPIDER_NET_GDTDMASEL,
+                            SPIDER_NET_DMASEL_VALUE);
+       spider_net_write_reg(card, SPIDER_NET_GPCCTRL,
+                            SPIDER_NET_PHY_CTRL_VALUE);
+       phy->mii_id = 1;
+       phy->dev = card->netdev;
+       phy->mdio_read = spider_net_read_phy;
+       phy->mdio_write = spider_net_write_phy;
+
+       mii_phy_probe(phy, phy->mii_id);
+
+       if (phy->def->ops->setup_forced)
+               phy->def->ops->setup_forced(phy, SPEED_1000, DUPLEX_FULL);
+
+       /* the following two writes could be moved to sungem_phy.c */
+       /* enable fiber mode */
+       spider_net_write_phy(card->netdev, 1, MII_NCONFIG, 0x9020);
+       /* LEDs active in both modes, autosense prio = fiber */
+       spider_net_write_phy(card->netdev, 1, MII_NCONFIG, 0x945f);
+
+       phy->def->ops->read_link(phy);
+       pr_info("Found %s with %i Mbps, %s-duplex.\n", phy->def->name,
+               phy->speed, phy->duplex==1 ? "Full" : "Half");
+
+       return 0;
+}
+
+/**
+ * spider_net_download_firmware - loads firmware into the adapter
+ * @card: card structure
+ * @firmware: firmware pointer
+ *
+ * spider_net_download_firmware loads the firmware opened by
+ * spider_net_init_firmware into the adapter.
+ */
+static void
+spider_net_download_firmware(struct spider_net_card *card,
+                            const struct firmware *firmware)
+{
+       int sequencer, i;
+       u32 *fw_ptr = (u32 *)firmware->data;
+
+       /* stop sequencers */
+       spider_net_write_reg(card, SPIDER_NET_GSINIT,
+                            SPIDER_NET_STOP_SEQ_VALUE);
+
+       for (sequencer = 0; sequencer < 6; sequencer++) {
+               spider_net_write_reg(card,
+                                    SPIDER_NET_GSnPRGADR + sequencer * 8, 0);
+               for (i = 0; i < SPIDER_NET_FIRMWARE_LEN; i++) {
+                       spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT +
+                                            sequencer * 8, *fw_ptr);
+                       fw_ptr++;
+               }
+       }
+
+       spider_net_write_reg(card, SPIDER_NET_GSINIT,
+                            SPIDER_NET_RUN_SEQ_VALUE);
+}
+
+/**
+ * spider_net_init_firmware - reads in firmware parts
+ * @card: card structure
+ *
+ * Returns 0 on success, <0 on failure
+ *
+ * spider_net_init_firmware opens the sequencer firmware and does some basic
+ * checks. This function opens and releases the firmware structure. A call
+ * to download the firmware is performed before the release.
+ *
+ * Firmware format
+ * ===============
+ * spider_fw.bin is expected to be a file containing 6*1024*4 bytes, 4k being
+ * the program for each sequencer. Use the command
+ *    tail -q -n +2 Seq_code1_0x088.txt Seq_code2_0x090.txt              \
+ *         Seq_code3_0x098.txt Seq_code4_0x0A0.txt Seq_code5_0x0A8.txt   \
+ *         Seq_code6_0x0B0.txt | xxd -r -p -c4 > spider_fw.bin
+ *
+ * to generate spider_fw.bin, if you have sequencer programs with something
+ * like the following contents for each sequencer:
+ *    <ONE LINE COMMENT>
+ *    <FIRST 4-BYTES-WORD FOR SEQUENCER>
+ *    <SECOND 4-BYTES-WORD FOR SEQUENCER>
+ *     ...
+ *    <1024th 4-BYTES-WORD FOR SEQUENCER>
+ */
+static int
+spider_net_init_firmware(struct spider_net_card *card)
+{
+       const struct firmware *firmware;
+       int err = -EIO;
+
+       if (request_firmware(&firmware,
+                            SPIDER_NET_FIRMWARE_NAME, &card->pdev->dev) < 0) {
+               if (netif_msg_probe(card))
+                       pr_err("Couldn't read in sequencer data file %s.\n",
+                              SPIDER_NET_FIRMWARE_NAME);
+               firmware = NULL;
+               goto out;
+       }
+
+       if (firmware->size != 6 * SPIDER_NET_FIRMWARE_LEN * sizeof(u32)) {
+               if (netif_msg_probe(card))
+                       pr_err("Invalid size of sequencer data file %s.\n",
+                              SPIDER_NET_FIRMWARE_NAME);
+               goto out;
+       }
+
+       spider_net_download_firmware(card, firmware);
+
+       err = 0;
+out:
+       release_firmware(firmware);
+
+       return err;
+}
+
+/**
+ * spider_net_workaround_rxramfull - work around firmware bug
+ * @card: card structure
+ *
+ * no return value
+ **/
+static void
+spider_net_workaround_rxramfull(struct spider_net_card *card)
+{
+       int i, sequencer = 0;
+
+       /* cancel reset */
+       spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
+                            SPIDER_NET_CKRCTRL_RUN_VALUE);
+
+       /* empty sequencer data */
+       for (sequencer = 0; sequencer < 6; sequencer++) {
+               spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT +
+                                    sequencer * 8, 0x0);
+               for (i = 0; i < SPIDER_NET_FIRMWARE_LEN; i++) {
+                       spider_net_write_reg(card, SPIDER_NET_GSnPRGDAT +
+                                            sequencer * 8, 0x0);
+               }
+       }
+
+       /* set sequencer operation */
+       spider_net_write_reg(card, SPIDER_NET_GSINIT, 0x000000fe);
+
+       /* reset */
+       spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
+                            SPIDER_NET_CKRCTRL_STOP_VALUE);
+}
+
+/**
+ * spider_net_tx_timeout_task - task scheduled by the watchdog timeout
+ * function (to be called not under interrupt status)
+ * @data: data, is interface device structure
+ *
+ * called as task when tx hangs, resets interface (if interface is up)
+ */
+static void
+spider_net_tx_timeout_task(void *data)
+{
+       struct net_device *netdev = data;
+       struct spider_net_card *card = netdev_priv(netdev);
+
+       if (!(netdev->flags & IFF_UP))
+               goto out;
+
+       netif_device_detach(netdev);
+       spider_net_stop(netdev);
+
+       spider_net_workaround_rxramfull(card);
+       spider_net_init_card(card);
+
+       if (spider_net_setup_phy(card))
+               goto out;
+       if (spider_net_init_firmware(card))
+               goto out;
+
+       spider_net_open(netdev);
+       spider_net_kick_tx_dma(card, card->tx_chain.head);
+       netif_device_attach(netdev);
+
+out:
+       atomic_dec(&card->tx_timeout_task_counter);
+}
+
+/**
+ * spider_net_tx_timeout - called when the tx timeout watchdog kicks in.
+ * @netdev: interface device structure
+ *
+ * called, if tx hangs. Schedules a task that resets the interface
+ */
+static void
+spider_net_tx_timeout(struct net_device *netdev)
+{
+       struct spider_net_card *card;
+
+       card = netdev_priv(netdev);
+       atomic_inc(&card->tx_timeout_task_counter);
+       if (netdev->flags & IFF_UP)
+               schedule_work(&card->tx_timeout_task);
+       else
+               atomic_dec(&card->tx_timeout_task_counter);
+}
+
+/**
+ * spider_net_setup_netdev_ops - initialization of net_device operations
+ * @netdev: net_device structure
+ *
+ * fills out function pointers in the net_device structure
+ */
+static void
+spider_net_setup_netdev_ops(struct net_device *netdev)
+{
+       netdev->open = &spider_net_open;
+       netdev->stop = &spider_net_stop;
+       netdev->hard_start_xmit = &spider_net_xmit;
+       netdev->get_stats = &spider_net_get_stats;
+       netdev->set_multicast_list = &spider_net_set_multi;
+       netdev->set_mac_address = &spider_net_set_mac;
+       netdev->change_mtu = &spider_net_change_mtu;
+       netdev->do_ioctl = &spider_net_do_ioctl;
+       /* tx watchdog */
+       netdev->tx_timeout = &spider_net_tx_timeout;
+       netdev->watchdog_timeo = SPIDER_NET_WATCHDOG_TIMEOUT;
+       /* NAPI */
+       netdev->poll = &spider_net_poll;
+       netdev->weight = SPIDER_NET_NAPI_WEIGHT;
+       /* HW VLAN */
+       netdev->vlan_rx_register = &spider_net_vlan_rx_reg;
+       netdev->vlan_rx_add_vid = &spider_net_vlan_rx_add;
+       netdev->vlan_rx_kill_vid = &spider_net_vlan_rx_kill;
+#ifdef CONFIG_NET_POLL_CONTROLLER
+       /* poll controller */
+       netdev->poll_controller = &spider_net_poll_controller;
+#endif /* CONFIG_NET_POLL_CONTROLLER */
+       /* ethtool ops */
+       netdev->ethtool_ops = &spider_net_ethtool_ops;
+}
+
+/**
+ * spider_net_setup_netdev - initialization of net_device
+ * @card: card structure
+ *
+ * Returns 0 on success or <0 on failure
+ *
+ * spider_net_setup_netdev initializes the net_device structure
+ **/
+static int
+spider_net_setup_netdev(struct spider_net_card *card)
+{
+       int result;
+       struct net_device *netdev = card->netdev;
+       struct device_node *dn;
+       struct sockaddr addr;
+       u8 *mac;
+
+       SET_MODULE_OWNER(netdev);
+       SET_NETDEV_DEV(netdev, &card->pdev->dev);
+
+       pci_set_drvdata(card->pdev, netdev);
+       spin_lock_init(&card->intmask_lock);
+       netdev->irq = card->pdev->irq;
+
+       card->options.rx_csum = SPIDER_NET_RX_CSUM_DEFAULT;
+
+       spider_net_setup_netdev_ops(netdev);
+
+       netdev->features = 0;
+       /* some time: NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX |
+        *              NETIF_F_HW_VLAN_FILTER */
+
+       netdev->irq = card->pdev->irq;
+
+       dn = pci_device_to_OF_node(card->pdev);
+       if (!dn)
+               return -EIO;
+
+       mac = (u8 *)get_property(dn, "local-mac-address", NULL);
+       if (!mac)
+               return -EIO;
+       memcpy(addr.sa_data, mac, ETH_ALEN);
+
+       result = spider_net_set_mac(netdev, &addr);
+       if ((result) && (netif_msg_probe(card)))
+               pr_err("Failed to set MAC address: %i\n", result);
+
+       result = register_netdev(netdev);
+       if (result) {
+               if (netif_msg_probe(card))
+                       pr_err("Couldn't register net_device: %i\n",
+                                 result);
+               return result;
+       }
+
+       if (netif_msg_probe(card))
+               pr_info("Initialized device %s.\n", netdev->name);
+
+       return 0;
+}
+
+/**
+ * spider_net_alloc_card - allocates net_device and card structure
+ *
+ * returns the card structure or NULL in case of errors
+ *
+ * the card and net_device structures are linked to each other
+ */
+static struct spider_net_card *
+spider_net_alloc_card(void)
+{
+       struct net_device *netdev;
+       struct spider_net_card *card;
+       size_t alloc_size;
+
+       alloc_size = sizeof (*card) +
+               sizeof (struct spider_net_descr) * rx_descriptors +
+               sizeof (struct spider_net_descr) * tx_descriptors;
+       netdev = alloc_etherdev(alloc_size);
+       if (!netdev)
+               return NULL;
+
+       card = netdev_priv(netdev);
+       card->netdev = netdev;
+       card->msg_enable = SPIDER_NET_DEFAULT_MSG;
+       INIT_WORK(&card->tx_timeout_task, spider_net_tx_timeout_task, netdev);
+       init_waitqueue_head(&card->waitq);
+       atomic_set(&card->tx_timeout_task_counter, 0);
+
+       return card;
+}
+
+/**
+ * spider_net_undo_pci_setup - releases PCI ressources
+ * @card: card structure
+ *
+ * spider_net_undo_pci_setup releases the mapped regions
+ */
+static void
+spider_net_undo_pci_setup(struct spider_net_card *card)
+{
+       iounmap(card->regs);
+       pci_release_regions(card->pdev);
+}
+
+/**
+ * spider_net_setup_pci_dev - sets up the device in terms of PCI operations
+ * @card: card structure
+ * @pdev: PCI device
+ *
+ * Returns the card structure or NULL if any errors occur
+ *
+ * spider_net_setup_pci_dev initializes pdev and together with the
+ * functions called in spider_net_open configures the device so that
+ * data can be transferred over it
+ * The net_device structure is attached to the card structure, if the
+ * function returns without error.
+ **/
+static struct spider_net_card *
+spider_net_setup_pci_dev(struct pci_dev *pdev)
+{
+       struct spider_net_card *card;
+       unsigned long mmio_start, mmio_len;
+
+       if (pci_enable_device(pdev)) {
+               pr_err("Couldn't enable PCI device\n");
+               return NULL;
+       }
+
+       if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
+               pr_err("Couldn't find proper PCI device base address.\n");
+               goto out_disable_dev;
+       }
+
+       if (pci_request_regions(pdev, spider_net_driver_name)) {
+               pr_err("Couldn't obtain PCI resources, aborting.\n");
+               goto out_disable_dev;
+       }
+
+       pci_set_master(pdev);
+
+       card = spider_net_alloc_card();
+       if (!card) {
+               pr_err("Couldn't allocate net_device structure, "
+                         "aborting.\n");
+               goto out_release_regions;
+       }
+       card->pdev = pdev;
+
+       /* fetch base address and length of first resource */
+       mmio_start = pci_resource_start(pdev, 0);
+       mmio_len = pci_resource_len(pdev, 0);
+
+       card->netdev->mem_start = mmio_start;
+       card->netdev->mem_end = mmio_start + mmio_len;
+       card->regs = ioremap(mmio_start, mmio_len);
+
+       if (!card->regs) {
+               pr_err("Couldn't obtain PCI resources, aborting.\n");
+               goto out_release_regions;
+       }
+
+       return card;
+
+out_release_regions:
+       pci_release_regions(pdev);
+out_disable_dev:
+       pci_disable_device(pdev);
+       pci_set_drvdata(pdev, NULL);
+       return NULL;
+}
+
+/**
+ * spider_net_probe - initialization of a device
+ * @pdev: PCI device
+ * @ent: entry in the device id list
+ *
+ * Returns 0 on success, <0 on failure
+ *
+ * spider_net_probe initializes pdev and registers a net_device
+ * structure for it. After that, the device can be ifconfig'ed up
+ **/
+static int __devinit
+spider_net_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+{
+       int err = -EIO;
+       struct spider_net_card *card;
+
+       card = spider_net_setup_pci_dev(pdev);
+       if (!card)
+               goto out;
+
+       spider_net_workaround_rxramfull(card);
+       spider_net_init_card(card);
+
+       err = spider_net_setup_phy(card);
+       if (err)
+               goto out_undo_pci;
+
+       err = spider_net_init_firmware(card);
+       if (err)
+               goto out_undo_pci;
+
+       err = spider_net_setup_netdev(card);
+       if (err)
+               goto out_undo_pci;
+
+       return 0;
+
+out_undo_pci:
+       spider_net_undo_pci_setup(card);
+       free_netdev(card->netdev);
+out:
+       return err;
+}
+
+/**
+ * spider_net_remove - removal of a device
+ * @pdev: PCI device
+ *
+ * Returns 0 on success, <0 on failure
+ *
+ * spider_net_remove is called to remove the device and unregisters the
+ * net_device
+ **/
+static void __devexit
+spider_net_remove(struct pci_dev *pdev)
+{
+       struct net_device *netdev;
+       struct spider_net_card *card;
+
+       netdev = pci_get_drvdata(pdev);
+       card = netdev_priv(netdev);
+
+       wait_event(card->waitq,
+                  atomic_read(&card->tx_timeout_task_counter) == 0);
+
+       unregister_netdev(netdev);
+
+       /* switch off card */
+       spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
+                            SPIDER_NET_CKRCTRL_STOP_VALUE);
+       spider_net_write_reg(card, SPIDER_NET_CKRCTRL,
+                            SPIDER_NET_CKRCTRL_RUN_VALUE);
+
+       spider_net_undo_pci_setup(card);
+       free_netdev(netdev);
+}
+
+static struct pci_driver spider_net_driver = {
+       .owner          = THIS_MODULE,
+       .name           = spider_net_driver_name,
+       .id_table       = spider_net_pci_tbl,
+       .probe          = spider_net_probe,
+       .remove         = __devexit_p(spider_net_remove)
+};
+
+/**
+ * spider_net_init - init function when the driver is loaded
+ *
+ * spider_net_init registers the device driver
+ */
+static int __init spider_net_init(void)
+{
+       if (rx_descriptors < SPIDER_NET_RX_DESCRIPTORS_MIN) {
+               rx_descriptors = SPIDER_NET_RX_DESCRIPTORS_MIN;
+               pr_info("adjusting rx descriptors to %i.\n", rx_descriptors);
+       }
+       if (rx_descriptors > SPIDER_NET_RX_DESCRIPTORS_MAX) {
+               rx_descriptors = SPIDER_NET_RX_DESCRIPTORS_MAX;
+               pr_info("adjusting rx descriptors to %i.\n", rx_descriptors);
+       }
+       if (tx_descriptors < SPIDER_NET_TX_DESCRIPTORS_MIN) {
+               tx_descriptors = SPIDER_NET_TX_DESCRIPTORS_MIN;
+               pr_info("adjusting tx descriptors to %i.\n", tx_descriptors);
+       }
+       if (tx_descriptors > SPIDER_NET_TX_DESCRIPTORS_MAX) {
+               tx_descriptors = SPIDER_NET_TX_DESCRIPTORS_MAX;
+               pr_info("adjusting tx descriptors to %i.\n", tx_descriptors);
+       }
+
+       return pci_register_driver(&spider_net_driver);
+}
+
+/**
+ * spider_net_cleanup - exit function when driver is unloaded
+ *
+ * spider_net_cleanup unregisters the device driver
+ */
+static void __exit spider_net_cleanup(void)
+{
+       pci_unregister_driver(&spider_net_driver);
+}
+
+module_init(spider_net_init);
+module_exit(spider_net_cleanup);
diff --git a/drivers/net/spider_net.h b/drivers/net/spider_net.h
new file mode 100644 (file)
index 0000000..22b2f23
--- /dev/null
@@ -0,0 +1,469 @@
+/*
+ * Network device driver for Cell Processor-Based Blade
+ *
+ * (C) Copyright IBM Corp. 2005
+ *
+ * Authors : Utz Bacher <utz.bacher@de.ibm.com>
+ *           Jens Osterkamp <Jens.Osterkamp@de.ibm.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, 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.
+ */
+
+#ifndef _SPIDER_NET_H
+#define _SPIDER_NET_H
+
+#include "sungem_phy.h"
+
+extern int spider_net_stop(struct net_device *netdev);
+extern int spider_net_open(struct net_device *netdev);
+
+extern struct ethtool_ops spider_net_ethtool_ops;
+
+extern char spider_net_driver_name[];
+
+#define SPIDER_NET_MAX_MTU                     2308
+#define SPIDER_NET_MIN_MTU                     64
+
+#define SPIDER_NET_RXBUF_ALIGN                 128
+
+#define SPIDER_NET_RX_DESCRIPTORS_DEFAULT      64
+#define SPIDER_NET_RX_DESCRIPTORS_MIN          16
+#define SPIDER_NET_RX_DESCRIPTORS_MAX          256
+
+#define SPIDER_NET_TX_DESCRIPTORS_DEFAULT      64
+#define SPIDER_NET_TX_DESCRIPTORS_MIN          16
+#define SPIDER_NET_TX_DESCRIPTORS_MAX          256
+
+#define SPIDER_NET_RX_CSUM_DEFAULT             1
+
+#define SPIDER_NET_WATCHDOG_TIMEOUT 5*HZ
+#define SPIDER_NET_NAPI_WEIGHT 64
+
+#define SPIDER_NET_FIRMWARE_LEN                1024
+#define SPIDER_NET_FIRMWARE_NAME       "spider_fw.bin"
+
+/** spider_net SMMIO registers */
+#define SPIDER_NET_GHIINT0STS          0x00000000
+#define SPIDER_NET_GHIINT1STS          0x00000004
+#define SPIDER_NET_GHIINT2STS          0x00000008
+#define SPIDER_NET_GHIINT0MSK          0x00000010
+#define SPIDER_NET_GHIINT1MSK          0x00000014
+#define SPIDER_NET_GHIINT2MSK          0x00000018
+
+#define SPIDER_NET_GRESUMINTNUM                0x00000020
+#define SPIDER_NET_GREINTNUM           0x00000024
+
+#define SPIDER_NET_GFFRMNUM            0x00000028
+#define SPIDER_NET_GFAFRMNUM           0x0000002c
+#define SPIDER_NET_GFBFRMNUM           0x00000030
+#define SPIDER_NET_GFCFRMNUM           0x00000034
+#define SPIDER_NET_GFDFRMNUM           0x00000038
+
+/* clear them (don't use it) */
+#define SPIDER_NET_GFREECNNUM          0x0000003c
+#define SPIDER_NET_GONETIMENUM         0x00000040
+
+#define SPIDER_NET_GTOUTFRMNUM         0x00000044
+
+#define SPIDER_NET_GTXMDSET            0x00000050
+#define SPIDER_NET_GPCCTRL             0x00000054
+#define SPIDER_NET_GRXMDSET            0x00000058
+#define SPIDER_NET_GIPSECINIT          0x0000005c
+#define SPIDER_NET_GFTRESTRT           0x00000060
+#define SPIDER_NET_GRXDMAEN            0x00000064
+#define SPIDER_NET_GMRWOLCTRL          0x00000068
+#define SPIDER_NET_GPCWOPCMD           0x0000006c
+#define SPIDER_NET_GPCROPCMD           0x00000070
+#define SPIDER_NET_GTTFRMCNT           0x00000078
+#define SPIDER_NET_GTESTMD             0x0000007c
+
+#define SPIDER_NET_GSINIT              0x00000080
+#define SPIDER_NET_GSnPRGADR           0x00000084
+#define SPIDER_NET_GSnPRGDAT           0x00000088
+
+#define SPIDER_NET_GMACOPEMD           0x00000100
+#define SPIDER_NET_GMACLENLMT          0x00000108
+#define SPIDER_NET_GMACINTEN           0x00000118
+#define SPIDER_NET_GMACPHYCTRL         0x00000120
+
+#define SPIDER_NET_GMACAPAUSE          0x00000154
+#define SPIDER_NET_GMACTXPAUSE         0x00000164
+
+#define SPIDER_NET_GMACMODE            0x000001b0
+#define SPIDER_NET_GMACBSTLMT          0x000001b4
+
+#define SPIDER_NET_GMACUNIMACU         0x000001c0
+#define SPIDER_NET_GMACUNIMACL         0x000001c8
+
+#define SPIDER_NET_GMRMHFILnR          0x00000400
+#define SPIDER_NET_MULTICAST_HASHES    256
+
+#define SPIDER_NET_GMRUAFILnR          0x00000500
+#define SPIDER_NET_GMRUA0FIL15R                0x00000578
+
+/* RX DMA controller registers, all 0x00000a.. are for DMA controller A,
+ * 0x00000b.. for DMA controller B, etc. */
+#define SPIDER_NET_GDADCHA             0x00000a00
+#define SPIDER_NET_GDADMACCNTR         0x00000a04
+#define SPIDER_NET_GDACTDPA            0x00000a08
+#define SPIDER_NET_GDACTDCNT           0x00000a0c
+#define SPIDER_NET_GDACDBADDR          0x00000a20
+#define SPIDER_NET_GDACDBSIZE          0x00000a24
+#define SPIDER_NET_GDACNEXTDA          0x00000a28
+#define SPIDER_NET_GDACCOMST           0x00000a2c
+#define SPIDER_NET_GDAWBCOMST          0x00000a30
+#define SPIDER_NET_GDAWBRSIZE          0x00000a34
+#define SPIDER_NET_GDAWBVSIZE          0x00000a38
+#define SPIDER_NET_GDAWBTRST           0x00000a3c
+#define SPIDER_NET_GDAWBTRERR          0x00000a40
+
+/* TX DMA controller registers */
+#define SPIDER_NET_GDTDCHA             0x00000e00
+#define SPIDER_NET_GDTDMACCNTR         0x00000e04
+#define SPIDER_NET_GDTCDPA             0x00000e08
+#define SPIDER_NET_GDTDMASEL           0x00000e14
+
+#define SPIDER_NET_ECMODE              0x00000f00
+/* clock and reset control register */
+#define SPIDER_NET_CKRCTRL             0x00000ff0
+
+/** SCONFIG registers */
+#define SPIDER_NET_SCONFIG_IOACTE      0x00002810
+
+/** hardcoded register values */
+#define SPIDER_NET_INT0_MASK_VALUE     0x3f7fe3ff
+#define SPIDER_NET_INT1_MASK_VALUE     0xffffffff
+/* no MAC aborts -> auto retransmission */
+#define SPIDER_NET_INT2_MASK_VALUE     0xfffffff1
+
+/* clear counter when interrupt sources are cleared
+#define SPIDER_NET_FRAMENUM_VALUE      0x0001f001 */
+/* we rely on flagged descriptor interrupts */
+#define SPIDER_NET_FRAMENUM_VALUE      0x00000000
+/* set this first, then the FRAMENUM_VALUE */
+#define SPIDER_NET_GFXFRAMES_VALUE     0x00000000
+
+#define SPIDER_NET_STOP_SEQ_VALUE      0x00000000
+#define SPIDER_NET_RUN_SEQ_VALUE       0x0000007e
+
+#define SPIDER_NET_PHY_CTRL_VALUE      0x00040040
+/* #define SPIDER_NET_PHY_CTRL_VALUE   0x01070080*/
+#define SPIDER_NET_RXMODE_VALUE                0x00000011
+/* auto retransmission in case of MAC aborts */
+#define SPIDER_NET_TXMODE_VALUE                0x00010000
+#define SPIDER_NET_RESTART_VALUE       0x00000000
+#define SPIDER_NET_WOL_VALUE           0x00001111
+#if 0
+#define SPIDER_NET_WOL_VALUE           0x00000000
+#endif
+#define SPIDER_NET_IPSECINIT_VALUE     0x00f000f8
+
+/* pause frames: automatic, no upper retransmission count */
+/* outside loopback mode: ETOMOD signal dont matter, not connected */
+#define SPIDER_NET_OPMODE_VALUE                0x00000063
+/*#define SPIDER_NET_OPMODE_VALUE              0x001b0062*/
+#define SPIDER_NET_LENLMT_VALUE                0x00000908
+
+#define SPIDER_NET_MACAPAUSE_VALUE     0x00000800 /* about 1 ms */
+#define SPIDER_NET_TXPAUSE_VALUE       0x00000000
+
+#define SPIDER_NET_MACMODE_VALUE       0x00000001
+#define SPIDER_NET_BURSTLMT_VALUE      0x00000200 /* about 16 us */
+
+/* 1(0)                                        enable r/tx dma
+ *  0000000                            fixed to 0
+ *
+ *         000000                      fixed to 0
+ *               0(1)                  en/disable descr writeback on force end
+ *                0(1)                 force end
+ *
+ *                 000000              fixed to 0
+ *                       00            burst alignment: 128 bytes
+ *
+ *                         00000       fixed to 0
+ *                              0      descr writeback size 32 bytes
+ *                               0(1)  descr chain end interrupt enable
+ *                                0(1) descr status writeback enable */
+
+/* to set RX_DMA_EN */
+#define SPIDER_NET_DMA_RX_VALUE                0x80000000
+#define SPIDER_NET_DMA_RX_FEND_VALUE   0x00030003
+/* to set TX_DMA_EN */
+#define SPIDER_NET_DMA_TX_VALUE                0x80000000
+#define SPIDER_NET_DMA_TX_FEND_VALUE   0x00030003
+
+/* SPIDER_NET_UA_DESCR_VALUE is OR'ed with the unicast address */
+#define SPIDER_NET_UA_DESCR_VALUE      0x00080000
+#define SPIDER_NET_PROMISC_VALUE       0x00080000
+#define SPIDER_NET_NONPROMISC_VALUE    0x00000000
+
+#define SPIDER_NET_DMASEL_VALUE                0x00000001
+
+#define SPIDER_NET_ECMODE_VALUE                0x00000000
+
+#define SPIDER_NET_CKRCTRL_RUN_VALUE   0x1fff010f
+#define SPIDER_NET_CKRCTRL_STOP_VALUE  0x0000010f
+
+#define SPIDER_NET_SBIMSTATE_VALUE     0x00000000
+#define SPIDER_NET_SBTMSTATE_VALUE     0x00000000
+
+/* SPIDER_NET_GHIINT0STS bits, in reverse order so that they can be used
+ * with 1 << SPIDER_NET_... */
+enum spider_net_int0_status {
+       SPIDER_NET_GPHYINT = 0,
+       SPIDER_NET_GMAC2INT,
+       SPIDER_NET_GMAC1INT,
+       SPIDER_NET_GIPSINT,
+       SPIDER_NET_GFIFOINT,
+       SPIDER_NET_GDMACINT,
+       SPIDER_NET_GSYSINT,
+       SPIDER_NET_GPWOPCMPINT,
+       SPIDER_NET_GPROPCMPINT,
+       SPIDER_NET_GPWFFINT,
+       SPIDER_NET_GRMDADRINT,
+       SPIDER_NET_GRMARPINT,
+       SPIDER_NET_GRMMPINT,
+       SPIDER_NET_GDTDEN0INT,
+       SPIDER_NET_GDDDEN0INT,
+       SPIDER_NET_GDCDEN0INT,
+       SPIDER_NET_GDBDEN0INT,
+       SPIDER_NET_GDADEN0INT,
+       SPIDER_NET_GDTFDCINT,
+       SPIDER_NET_GDDFDCINT,
+       SPIDER_NET_GDCFDCINT,
+       SPIDER_NET_GDBFDCINT,
+       SPIDER_NET_GDAFDCINT,
+       SPIDER_NET_GTTEDINT,
+       SPIDER_NET_GDTDCEINT,
+       SPIDER_NET_GRFDNMINT,
+       SPIDER_NET_GRFCNMINT,
+       SPIDER_NET_GRFBNMINT,
+       SPIDER_NET_GRFANMINT,
+       SPIDER_NET_GRFNMINT,
+       SPIDER_NET_G1TMCNTINT,
+       SPIDER_NET_GFREECNTINT
+};
+/* GHIINT1STS bits */
+enum spider_net_int1_status {
+       SPIDER_NET_GTMFLLINT = 0,
+       SPIDER_NET_GRMFLLINT,
+       SPIDER_NET_GTMSHTINT,
+       SPIDER_NET_GDTINVDINT,
+       SPIDER_NET_GRFDFLLINT,
+       SPIDER_NET_GDDDCEINT,
+       SPIDER_NET_GDDINVDINT,
+       SPIDER_NET_GRFCFLLINT,
+       SPIDER_NET_GDCDCEINT,
+       SPIDER_NET_GDCINVDINT,
+       SPIDER_NET_GRFBFLLINT,
+       SPIDER_NET_GDBDCEINT,
+       SPIDER_NET_GDBINVDINT,
+       SPIDER_NET_GRFAFLLINT,
+       SPIDER_NET_GDADCEINT,
+       SPIDER_NET_GDAINVDINT,
+       SPIDER_NET_GDTRSERINT,
+       SPIDER_NET_GDDRSERINT,
+       SPIDER_NET_GDCRSERINT,
+       SPIDER_NET_GDBRSERINT,
+       SPIDER_NET_GDARSERINT,
+       SPIDER_NET_GDSERINT,
+       SPIDER_NET_GDTPTERINT,
+       SPIDER_NET_GDDPTERINT,
+       SPIDER_NET_GDCPTERINT,
+       SPIDER_NET_GDBPTERINT,
+       SPIDER_NET_GDAPTERINT
+};
+/* GHIINT2STS bits */
+enum spider_net_int2_status {
+       SPIDER_NET_GPROPERINT = 0,
+       SPIDER_NET_GMCTCRSNGINT,
+       SPIDER_NET_GMCTLCOLINT,
+       SPIDER_NET_GMCTTMOTINT,
+       SPIDER_NET_GMCRCAERINT,
+       SPIDER_NET_GMCRCALERINT,
+       SPIDER_NET_GMCRALNERINT,
+       SPIDER_NET_GMCROVRINT,
+       SPIDER_NET_GMCRRNTINT,
+       SPIDER_NET_GMCRRXERINT,
+       SPIDER_NET_GTITCSERINT,
+       SPIDER_NET_GTIFMTERINT,
+       SPIDER_NET_GTIPKTRVKINT,
+       SPIDER_NET_GTISPINGINT,
+       SPIDER_NET_GTISADNGINT,
+       SPIDER_NET_GTISPDNGINT,
+       SPIDER_NET_GRIFMTERINT,
+       SPIDER_NET_GRIPKTRVKINT,
+       SPIDER_NET_GRISPINGINT,
+       SPIDER_NET_GRISADNGINT,
+       SPIDER_NET_GRISPDNGINT
+};
+
+#define SPIDER_NET_TXINT       ( (1 << SPIDER_NET_GTTEDINT) | \
+                                 (1 << SPIDER_NET_GDTDCEINT) | \
+                                 (1 << SPIDER_NET_GDTFDCINT) )
+
+/* we rely on flagged descriptor interrupts*/
+#define SPIDER_NET_RXINT       ( (1 << SPIDER_NET_GDAFDCINT) | \
+                                 (1 << SPIDER_NET_GRMFLLINT) )
+
+#define SPIDER_NET_GPREXEC             0x80000000
+#define SPIDER_NET_GPRDAT_MASK         0x0000ffff
+
+/* descriptor bits
+ *
+ * 1010                                        descriptor ready
+ *     0                               descr in middle of chain
+ *      000                            fixed to 0
+ *
+ *         0                           no interrupt on completion
+ *          000                                fixed to 0
+ *             1                       no ipsec processing
+ *              1                      last descriptor for this frame
+ *               00                    no checksum
+ *               10                    tcp checksum
+ *               11                    udp checksum
+ *
+ *                 00                  fixed to 0
+ *                   0                 fixed to 0
+ *                    0                        no interrupt on response errors
+ *                     0               no interrupt on invalid descr
+ *                      0              no interrupt on dma process termination
+ *                       0             no interrupt on descr chain end
+ *                        0            no interrupt on descr complete
+ *
+ *                         000         fixed to 0
+ *                            0                response error interrupt status
+ *                             0       invalid descr status
+ *                              0      dma termination status
+ *                               0     descr chain end status
+ *                                0    descr complete status */
+#define SPIDER_NET_DMAC_CMDSTAT_NOCS   0xa00c0000
+#define SPIDER_NET_DMAC_CMDSTAT_TCPCS  0xa00e0000
+#define SPIDER_NET_DMAC_CMDSTAT_UDPCS  0xa00f0000
+#define SPIDER_NET_DESCR_IND_PROC_SHIFT        28
+#define SPIDER_NET_DESCR_IND_PROC_MASKO        0x0fffffff
+
+/* descr ready, descr is in middle of chain, get interrupt on completion */
+#define SPIDER_NET_DMAC_RX_CARDOWNED   0xa0800000
+
+/* multicast is no problem */
+#define SPIDER_NET_DATA_ERROR_MASK     0xffffbfff
+
+enum spider_net_descr_status {
+       SPIDER_NET_DESCR_COMPLETE               = 0x00, /* used in rx and tx */
+       SPIDER_NET_DESCR_RESPONSE_ERROR         = 0x01, /* used in rx and tx */
+       SPIDER_NET_DESCR_PROTECTION_ERROR       = 0x02, /* used in rx and tx */
+       SPIDER_NET_DESCR_FRAME_END              = 0x04, /* used in rx */
+       SPIDER_NET_DESCR_FORCE_END              = 0x05, /* used in rx and tx */
+       SPIDER_NET_DESCR_CARDOWNED              = 0x0a, /* used in rx and tx */
+       SPIDER_NET_DESCR_NOT_IN_USE /* any other value */
+};
+
+struct spider_net_descr {
+       /* as defined by the hardware */
+       dma_addr_t buf_addr;
+       u32 buf_size;
+       dma_addr_t next_descr_addr;
+       u32 dmac_cmd_status;
+       u32 result_size;
+       u32 valid_size; /* all zeroes for tx */
+       u32 data_status;
+       u32 data_error; /* all zeroes for tx */
+
+       /* used in the driver */
+       struct sk_buff *skb;
+       dma_addr_t bus_addr;
+       struct spider_net_descr *next;
+       struct spider_net_descr *prev;
+} __attribute__((aligned(32)));
+
+struct spider_net_descr_chain {
+       /* we walk from tail to head */
+       struct spider_net_descr *head;
+       struct spider_net_descr *tail;
+};
+
+/* descriptor data_status bits */
+#define SPIDER_NET_RXIPCHK             29
+#define SPIDER_NET_TCPUDPIPCHK         28
+#define SPIDER_NET_DATA_STATUS_CHK_MASK        (1 << SPIDER_NET_RXIPCHK | \
+                                        1 << SPIDER_NET_TCPUDPIPCHK)
+
+#define SPIDER_NET_VLAN_PACKET         21
+
+/* descriptor data_error bits */
+#define SPIDER_NET_RXIPCHKERR          27
+#define SPIDER_NET_RXTCPCHKERR         26
+#define SPIDER_NET_DATA_ERROR_CHK_MASK (1 << SPIDER_NET_RXIPCHKERR | \
+                                        1 << SPIDER_NET_RXTCPCHKERR)
+
+/* the cases we don't pass the packet to the stack */
+#define SPIDER_NET_DESTROY_RX_FLAGS    0x70138000
+
+#define SPIDER_NET_DESCR_SIZE          32
+
+/* this will be bigger some time */
+struct spider_net_options {
+       int rx_csum; /* for rx: if 0 ip_summed=NONE,
+                       if 1 and hw has verified, ip_summed=UNNECESSARY */
+};
+
+#define SPIDER_NET_DEFAULT_MSG         ( NETIF_MSG_DRV | \
+                                         NETIF_MSG_PROBE | \
+                                         NETIF_MSG_LINK | \
+                                         NETIF_MSG_TIMER | \
+                                         NETIF_MSG_IFDOWN | \
+                                         NETIF_MSG_IFUP | \
+                                         NETIF_MSG_RX_ERR | \
+                                         NETIF_MSG_TX_ERR | \
+                                         NETIF_MSG_TX_QUEUED | \
+                                         NETIF_MSG_INTR | \
+                                         NETIF_MSG_TX_DONE | \
+                                         NETIF_MSG_RX_STATUS | \
+                                         NETIF_MSG_PKTDATA | \
+                                         NETIF_MSG_HW | \
+                                         NETIF_MSG_WOL )
+
+struct spider_net_card {
+       struct net_device *netdev;
+       struct pci_dev *pdev;
+       struct mii_phy phy;
+
+       void __iomem *regs;
+
+       struct spider_net_descr_chain tx_chain;
+       struct spider_net_descr_chain rx_chain;
+       spinlock_t chain_lock;
+
+       struct net_device_stats netdev_stats;
+
+       struct spider_net_options options;
+
+       spinlock_t intmask_lock;
+
+       struct work_struct tx_timeout_task;
+       atomic_t tx_timeout_task_counter;
+       wait_queue_head_t waitq;
+
+       /* for ethtool */
+       int msg_enable;
+
+       struct spider_net_descr descr[0];
+};
+
+#define pr_err(fmt,arg...) \
+       printk(KERN_ERR fmt ,##arg)
+
+#endif
diff --git a/drivers/net/spider_net_ethtool.c b/drivers/net/spider_net_ethtool.c
new file mode 100644 (file)
index 0000000..d42e60b
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Network device driver for Cell Processor-Based Blade
+ *
+ * (C) Copyright IBM Corp. 2005
+ *
+ * Authors : Utz Bacher <utz.bacher@de.ibm.com>
+ *           Jens Osterkamp <Jens.Osterkamp@de.ibm.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, 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 <linux/netdevice.h>
+#include <linux/ethtool.h>
+#include <linux/pci.h>
+
+#include "spider_net.h"
+
+static int
+spider_net_ethtool_get_settings(struct net_device *netdev,
+                              struct ethtool_cmd *cmd)
+{
+       struct spider_net_card *card;
+       card = netdev_priv(netdev);
+
+       cmd->supported   = (SUPPORTED_1000baseT_Full |
+                            SUPPORTED_FIBRE);
+       cmd->advertising = (ADVERTISED_1000baseT_Full |
+                            ADVERTISED_FIBRE);
+       cmd->port = PORT_FIBRE;
+       cmd->speed = card->phy.speed;
+       cmd->duplex = DUPLEX_FULL;
+
+       return 0;
+}
+
+static void
+spider_net_ethtool_get_drvinfo(struct net_device *netdev,
+                              struct ethtool_drvinfo *drvinfo)
+{
+       struct spider_net_card *card;
+       card = netdev_priv(netdev);
+
+       /* clear and fill out info */
+       memset(drvinfo, 0, sizeof(struct ethtool_drvinfo));
+       strncpy(drvinfo->driver, spider_net_driver_name, 32);
+       strncpy(drvinfo->version, "0.1", 32);
+       strcpy(drvinfo->fw_version, "no information");
+       strncpy(drvinfo->bus_info, pci_name(card->pdev), 32);
+}
+
+static void
+spider_net_ethtool_get_wol(struct net_device *netdev,
+                          struct ethtool_wolinfo *wolinfo)
+{
+       /* no support for wol */
+       wolinfo->supported = 0;
+       wolinfo->wolopts = 0;
+}
+
+static u32
+spider_net_ethtool_get_msglevel(struct net_device *netdev)
+{
+       struct spider_net_card *card;
+       card = netdev_priv(netdev);
+       return card->msg_enable;
+}
+
+static void
+spider_net_ethtool_set_msglevel(struct net_device *netdev,
+                               u32 level)
+{
+       struct spider_net_card *card;
+       card = netdev_priv(netdev);
+       card->msg_enable = level;
+}
+
+static int
+spider_net_ethtool_nway_reset(struct net_device *netdev)
+{
+       if (netif_running(netdev)) {
+               spider_net_stop(netdev);
+               spider_net_open(netdev);
+       }
+       return 0;
+}
+
+static u32
+spider_net_ethtool_get_rx_csum(struct net_device *netdev)
+{
+       struct spider_net_card *card = netdev->priv;
+
+       return card->options.rx_csum;
+}
+
+static int
+spider_net_ethtool_set_rx_csum(struct net_device *netdev, u32 n)
+{
+       struct spider_net_card *card = netdev->priv;
+
+       card->options.rx_csum = n;
+       return 0;
+}
+
+struct ethtool_ops spider_net_ethtool_ops = {
+       .get_settings           = spider_net_ethtool_get_settings,
+       .get_drvinfo            = spider_net_ethtool_get_drvinfo,
+       .get_wol                = spider_net_ethtool_get_wol,
+       .get_msglevel           = spider_net_ethtool_get_msglevel,
+       .set_msglevel           = spider_net_ethtool_set_msglevel,
+       .nway_reset             = spider_net_ethtool_nway_reset,
+       .get_rx_csum            = spider_net_ethtool_get_rx_csum,
+       .set_rx_csum            = spider_net_ethtool_set_rx_csum,
+};
+
index 1f43bbfbc1c78af3a95902ed37d602623b1ab292..5c8fcd40ef4d29936fad6828d3fda9d9df58ffcd 100644 (file)
@@ -162,7 +162,7 @@ struct lance_private {
 #define        MEM     lp->mem
 #define        DREG    lp->iobase[0]
 #define        AREG    lp->iobase[1]
-#define        REGA(a) ( AREG = (a), DREG )
+#define        REGA(a) (*( AREG = (a), &DREG ))
 
 /* Definitions for the Lance */
 
index f58c794a963aed4fbe813d5ede9ff8cd913de807..b56a7b516d2479a228598bb3a3651f333f9ac89c 100644 (file)
@@ -1440,6 +1440,7 @@ static void sppp_print_bytes (u_char *p, u16 len)
  *     @skb:   The buffer to process
  *     @dev:   The device it arrived on
  *     @p: Unused
+ *     @orig_dev: Unused
  *
  *     Protocol glue. This drives the deferred processing mode the poorer
  *     cards use. This can be called directly by cards that do not have
index dbcb5a8a219401aeabaafad5387cc7114b156ad1..2be65d308fbeab14e24f759a2da5ebca6b90c8bf 100644 (file)
@@ -3258,7 +3258,7 @@ badrx:
                                wstats.noise = apriv->wstats.qual.noise;
                                wstats.updated = IW_QUAL_LEVEL_UPDATED
                                        | IW_QUAL_QUAL_UPDATED
-                                       | IW_QUAL_NOISE_UPDATED;
+                                       | IW_QUAL_DBM;
                                /* Update spy records */
                                wireless_spy_update(dev, sa, &wstats);
                        }
@@ -3604,7 +3604,7 @@ void mpi_receive_802_11 (struct airo_info *ai)
                wstats.noise = ai->wstats.qual.noise;
                wstats.updated = IW_QUAL_QUAL_UPDATED
                        | IW_QUAL_LEVEL_UPDATED
-                       | IW_QUAL_NOISE_UPDATED;
+                       | IW_QUAL_DBM;
                /* Update spy records */
                wireless_spy_update(ai->dev, sa, &wstats);
        }
@@ -6489,22 +6489,20 @@ static int airo_get_range(struct net_device *dev,
                range->max_qual.qual = 100;     /* % */
        else
                range->max_qual.qual = airo_get_max_quality(&cap_rid);
-       range->max_qual.level = 0;      /* 0 means we use dBm  */
-       range->max_qual.noise = 0;
-       range->max_qual.updated = 0;
+       range->max_qual.level = 0x100 - 120;    /* -120 dBm */
+       range->max_qual.noise = 0x100 - 120;    /* -120 dBm */
 
        /* Experimental measurements - boundary 11/5.5 Mb/s */
        /* Note : with or without the (local->rssi), results
         * are somewhat different. - Jean II */
        if (local->rssi) {
-               range->avg_qual.qual = 50;      /* % */
-               range->avg_qual.level = 186;    /* -70 dBm */
+               range->avg_qual.qual = 50;              /* % */
+               range->avg_qual.level = 0x100 - 70;     /* -70 dBm */
        } else {
                range->avg_qual.qual = airo_get_avg_quality(&cap_rid);
-               range->avg_qual.level = 176;    /* -80 dBm */
+               range->avg_qual.level = 0x100 - 80;     /* -80 dBm */
        }
-       range->avg_qual.noise = 0;
-       range->avg_qual.updated = 0;
+       range->avg_qual.noise = 0x100 - 85;             /* -85 dBm */
 
        for(i = 0 ; i < 8 ; i++) {
                range->bitrate[i] = cap_rid.supportedRates[i] * 500000;
@@ -6727,15 +6725,17 @@ static int airo_get_aplist(struct net_device *dev,
                if (local->rssi) {
                        qual[i].level = 0x100 - BSSList.dBm;
                        qual[i].qual = airo_dbm_to_pct( local->rssi, BSSList.dBm );
-                       qual[i].updated = IW_QUAL_QUAL_UPDATED;
+                       qual[i].updated = IW_QUAL_QUAL_UPDATED
+                                       | IW_QUAL_LEVEL_UPDATED
+                                       | IW_QUAL_DBM;
                } else {
                        qual[i].level = (BSSList.dBm + 321) / 2;
                        qual[i].qual = 0;
-                       qual[i].updated = IW_QUAL_QUAL_INVALID;
+                       qual[i].updated = IW_QUAL_QUAL_INVALID
+                                       | IW_QUAL_LEVEL_UPDATED
+                                       | IW_QUAL_DBM;
                }
                qual[i].noise = local->wstats.qual.noise;
-               qual[i].updated = IW_QUAL_LEVEL_UPDATED
-                               | IW_QUAL_NOISE_UPDATED;
                if (BSSList.index == 0xffff)
                        break;
        }
@@ -6861,15 +6861,17 @@ static inline char *airo_translate_scan(struct net_device *dev,
        if (ai->rssi) {
                iwe.u.qual.level = 0x100 - bss->dBm;
                iwe.u.qual.qual = airo_dbm_to_pct( ai->rssi, bss->dBm );
-               iwe.u.qual.updated = IW_QUAL_QUAL_UPDATED;
+               iwe.u.qual.updated = IW_QUAL_QUAL_UPDATED
+                               | IW_QUAL_LEVEL_UPDATED
+                               | IW_QUAL_DBM;
        } else {
                iwe.u.qual.level = (bss->dBm + 321) / 2;
                iwe.u.qual.qual = 0;
-               iwe.u.qual.updated = IW_QUAL_QUAL_INVALID;
+               iwe.u.qual.updated = IW_QUAL_QUAL_INVALID
+                               | IW_QUAL_LEVEL_UPDATED
+                               | IW_QUAL_DBM;
        }
        iwe.u.qual.noise = ai->wstats.qual.noise;
-       iwe.u.qual.updated = IW_QUAL_LEVEL_UPDATED
-                       | IW_QUAL_NOISE_UPDATED;
        current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, IW_EV_QUAL_LEN);
 
        /* Add encryption capability */
@@ -7222,13 +7224,12 @@ static void airo_read_wireless_stats(struct airo_info *local)
                local->wstats.qual.level = (status_rid.normalizedSignalStrength + 321) / 2;
                local->wstats.qual.qual = airo_get_quality(&status_rid, &cap_rid);
        }
-       local->wstats.qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_LEVEL_UPDATED;
        if (status_rid.len >= 124) {
                local->wstats.qual.noise = 0x100 - status_rid.noisedBm;
-               local->wstats.qual.updated |= IW_QUAL_NOISE_UPDATED;
+               local->wstats.qual.updated = IW_QUAL_ALL_UPDATED | IW_QUAL_DBM;
        } else {
                local->wstats.qual.noise = 0;
-               local->wstats.qual.updated |= IW_QUAL_NOISE_INVALID;
+               local->wstats.qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_LEVEL_UPDATED | IW_QUAL_NOISE_INVALID | IW_QUAL_DBM;
        }
 
        /* Packets discarded in the wireless adapter due to wireless
index f48a6e7292245298e3b73d7c31d7c1cd84b9b37c..587869d86eeea1ea195137619db5ec316bd4f774 100644 (file)
@@ -1593,7 +1593,6 @@ struct net_device *init_atmel_card( unsigned short irq, int port, const AtmelFWT
        dev->set_mac_address = atmel_set_mac_address;
        dev->hard_start_xmit = start_tx;
        dev->get_stats = atmel_get_stats;
-       dev->get_wireless_stats = atmel_get_wireless_stats;
        dev->wireless_handlers = (struct iw_handler_def *)&atmel_handler_def;
        dev->do_ioctl = atmel_ioctl;
        dev->irq = irq;
@@ -2411,7 +2410,8 @@ static const struct iw_handler_def        atmel_handler_def =
        .num_private_args = sizeof(atmel_private_args)/sizeof(struct iw_priv_args), 
        .standard       = (iw_handler *) atmel_handler,
        .private        = (iw_handler *) atmel_private_handler, 
-       .private_args   = (struct iw_priv_args *) atmel_private_args
+       .private_args   = (struct iw_priv_args *) atmel_private_args,
+       .get_wireless_stats = atmel_get_wireless_stats
 };
 
 static int atmel_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
@@ -2424,19 +2424,6 @@ static int atmel_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
        char domain[REGDOMAINSZ+1];
 
        switch (cmd) {
-       case SIOCGIWPRIV:
-               if(wrq->u.data.pointer) {
-                       /* Set the number of ioctl available */
-                       wrq->u.data.length = sizeof(atmel_private_args) / sizeof(atmel_private_args[0]);
-                       
-                       /* Copy structure to the user buffer */
-                       if (copy_to_user(wrq->u.data.pointer,
-                                        (u_char *) atmel_private_args,
-                                        sizeof(atmel_private_args)))
-                               rc = -EFAULT;
-               }
-               break;
-
        case ATMELIDIFC:
                wrq->u.param.value = ATMELMAGIC;                
                break;
index 2a3bd607a5cdad20b8d7d9fcc0cb47ab0cac6646..b7f275c00de3cecc592368e90183bb96a3067563 100644 (file)
@@ -72,7 +72,8 @@ static void ipw_rx_queue_replenish(void *);
 static int ipw_up(struct ipw_priv *);
 static void ipw_down(struct ipw_priv *);
 static int ipw_config(struct ipw_priv *);
-static int init_supported_rates(struct ipw_priv *priv, struct ipw_supported_rates *prates);
+static int init_supported_rates(struct ipw_priv *priv,
+                               struct ipw_supported_rates *prates);
 
 static u8 band_b_active_channel[MAX_B_CHANNELS] = {
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0
@@ -102,7 +103,7 @@ static int is_valid_channel(int mode_mask, int channel)
 }
 
 static char *snprint_line(char *buf, size_t count,
-                         const u8 *data, u32 len, u32 ofs)
+                         const u8 * data, u32 len, u32 ofs)
 {
        int out, i, j, l;
        char c;
@@ -136,7 +137,7 @@ static char *snprint_line(char *buf, size_t count,
        return buf;
 }
 
-static void printk_buf(int level, const u8 *data, u32 len)
+static void printk_buf(int level, const u8 * data, u32 len)
 {
        char line[81];
        u32 ofs = 0;
@@ -161,21 +162,24 @@ static u8 _ipw_read_reg8(struct ipw_priv *ipw, u32 reg);
 static void _ipw_write_reg8(struct ipw_priv *priv, u32 reg, u8 value);
 static inline void ipw_write_reg8(struct ipw_priv *a, u32 b, u8 c)
 {
-       IPW_DEBUG_IO("%s %d: write_indirect8(0x%08X, 0x%08X)\n", __FILE__, __LINE__, (u32)(b), (u32)(c));
+       IPW_DEBUG_IO("%s %d: write_indirect8(0x%08X, 0x%08X)\n", __FILE__,
+                    __LINE__, (u32) (b), (u32) (c));
        _ipw_write_reg8(a, b, c);
 }
 
 static void _ipw_write_reg16(struct ipw_priv *priv, u32 reg, u16 value);
 static inline void ipw_write_reg16(struct ipw_priv *a, u32 b, u16 c)
 {
-       IPW_DEBUG_IO("%s %d: write_indirect16(0x%08X, 0x%08X)\n", __FILE__, __LINE__, (u32)(b), (u32)(c));
+       IPW_DEBUG_IO("%s %d: write_indirect16(0x%08X, 0x%08X)\n", __FILE__,
+                    __LINE__, (u32) (b), (u32) (c));
        _ipw_write_reg16(a, b, c);
 }
 
 static void _ipw_write_reg32(struct ipw_priv *priv, u32 reg, u32 value);
 static inline void ipw_write_reg32(struct ipw_priv *a, u32 b, u32 c)
 {
-       IPW_DEBUG_IO("%s %d: write_indirect32(0x%08X, 0x%08X)\n", __FILE__, __LINE__, (u32)(b), (u32)(c));
+       IPW_DEBUG_IO("%s %d: write_indirect32(0x%08X, 0x%08X)\n", __FILE__,
+                    __LINE__, (u32) (b), (u32) (c));
        _ipw_write_reg32(a, b, c);
 }
 
@@ -195,24 +199,30 @@ static inline void ipw_write_reg32(struct ipw_priv *a, u32 b, u32 c)
  _ipw_write32(ipw, ofs, val)
 
 #define _ipw_read8(ipw, ofs) readb((ipw)->hw_base + (ofs))
-static inline u8 __ipw_read8(char *f, u32 l, struct ipw_priv *ipw, u32 ofs) {
-       IPW_DEBUG_IO("%s %d: read_direct8(0x%08X)\n", f, l, (u32)(ofs));
+static inline u8 __ipw_read8(char *f, u32 l, struct ipw_priv *ipw, u32 ofs)
+{
+       IPW_DEBUG_IO("%s %d: read_direct8(0x%08X)\n", f, l, (u32) (ofs));
        return _ipw_read8(ipw, ofs);
 }
+
 #define ipw_read8(ipw, ofs) __ipw_read8(__FILE__, __LINE__, ipw, ofs)
 
 #define _ipw_read16(ipw, ofs) readw((ipw)->hw_base + (ofs))
-static inline u16 __ipw_read16(char *f, u32 l, struct ipw_priv *ipw, u32 ofs) {
-       IPW_DEBUG_IO("%s %d: read_direct16(0x%08X)\n", f, l, (u32)(ofs));
+static inline u16 __ipw_read16(char *f, u32 l, struct ipw_priv *ipw, u32 ofs)
+{
+       IPW_DEBUG_IO("%s %d: read_direct16(0x%08X)\n", f, l, (u32) (ofs));
        return _ipw_read16(ipw, ofs);
 }
+
 #define ipw_read16(ipw, ofs) __ipw_read16(__FILE__, __LINE__, ipw, ofs)
 
 #define _ipw_read32(ipw, ofs) readl((ipw)->hw_base + (ofs))
-static inline u32 __ipw_read32(char *f, u32 l, struct ipw_priv *ipw, u32 ofs) {
-       IPW_DEBUG_IO("%s %d: read_direct32(0x%08X)\n", f, l, (u32)(ofs));
+static inline u32 __ipw_read32(char *f, u32 l, struct ipw_priv *ipw, u32 ofs)
+{
+       IPW_DEBUG_IO("%s %d: read_direct32(0x%08X)\n", f, l, (u32) (ofs));
        return _ipw_read32(ipw, ofs);
 }
+
 #define ipw_read32(ipw, ofs) __ipw_read32(__FILE__, __LINE__, ipw, ofs)
 
 static void _ipw_read_indirect(struct ipw_priv *, u32, u8 *, int);
@@ -220,34 +230,30 @@ static void _ipw_read_indirect(struct ipw_priv *, u32, u8 *, int);
        IPW_DEBUG_IO("%s %d: read_inddirect(0x%08X) %d bytes\n", __FILE__, __LINE__, (u32)(b), d); \
        _ipw_read_indirect(a, b, c, d)
 
-static void _ipw_write_indirect(struct ipw_priv *priv, u32 addr, u8 *data, int num);
+static void _ipw_write_indirect(struct ipw_priv *priv, u32 addr, u8 * data,
+                               int num);
 #define ipw_write_indirect(a, b, c, d) \
        IPW_DEBUG_IO("%s %d: write_indirect(0x%08X) %d bytes\n", __FILE__, __LINE__, (u32)(b), d); \
         _ipw_write_indirect(a, b, c, d)
 
 /* indirect write s */
-static void _ipw_write_reg32(struct ipw_priv *priv, u32 reg,
-                            u32 value)
+static void _ipw_write_reg32(struct ipw_priv *priv, u32 reg, u32 value)
 {
-       IPW_DEBUG_IO(" %p : reg = 0x%8X : value = 0x%8X\n",
-                    priv, reg, value);
+       IPW_DEBUG_IO(" %p : reg = 0x%8X : value = 0x%8X\n", priv, reg, value);
        _ipw_write32(priv, CX2_INDIRECT_ADDR, reg);
        _ipw_write32(priv, CX2_INDIRECT_DATA, value);
 }
 
-
 static void _ipw_write_reg8(struct ipw_priv *priv, u32 reg, u8 value)
 {
        IPW_DEBUG_IO(" reg = 0x%8X : value = 0x%8X\n", reg, value);
        _ipw_write32(priv, CX2_INDIRECT_ADDR, reg & CX2_INDIRECT_ADDR_MASK);
        _ipw_write8(priv, CX2_INDIRECT_DATA, value);
        IPW_DEBUG_IO(" reg = 0x%8lX : value = 0x%8X\n",
-                    (unsigned long)(priv->hw_base + CX2_INDIRECT_DATA),
-                    value);
+                    (unsigned long)(priv->hw_base + CX2_INDIRECT_DATA), value);
 }
 
-static void _ipw_write_reg16(struct ipw_priv *priv, u32 reg,
-                            u16 value)
+static void _ipw_write_reg16(struct ipw_priv *priv, u32 reg, u16 value)
 {
        IPW_DEBUG_IO(" reg = 0x%8X : value = 0x%8X\n", reg, value);
        _ipw_write32(priv, CX2_INDIRECT_ADDR, reg & CX2_INDIRECT_ADDR_MASK);
@@ -262,7 +268,7 @@ static u8 _ipw_read_reg8(struct ipw_priv *priv, u32 reg)
        _ipw_write32(priv, CX2_INDIRECT_ADDR, reg & CX2_INDIRECT_ADDR_MASK);
        IPW_DEBUG_IO(" reg = 0x%8X : \n", reg);
        word = _ipw_read32(priv, CX2_INDIRECT_DATA);
-       return (word >> ((reg & 0x3)*8)) & 0xff;
+       return (word >> ((reg & 0x3) * 8)) & 0xff;
 }
 
 static u32 _ipw_read_reg32(struct ipw_priv *priv, u32 reg)
@@ -302,7 +308,7 @@ static void _ipw_read_indirect(struct ipw_priv *priv, u32 addr, u8 * buf,
        _ipw_write32(priv, CX2_AUTOINC_ADDR, aligned_addr);
        aligned_len = num & CX2_INDIRECT_ADDR_MASK;
        for (i = 0; i < aligned_len; i += 4, buf += 4, aligned_addr += 4)
-               *(u32*)buf = ipw_read32(priv, CX2_AUTOINC_DATA);
+               *(u32 *) buf = ipw_read32(priv, CX2_AUTOINC_DATA);
 
        /* Copy the last nibble */
        dif_len = num - aligned_len;
@@ -311,7 +317,7 @@ static void _ipw_read_indirect(struct ipw_priv *priv, u32 addr, u8 * buf,
                *buf = ipw_read8(priv, CX2_INDIRECT_DATA + i);
 }
 
-static void _ipw_write_indirect(struct ipw_priv *priv, u32 addr, u8 *buf,
+static void _ipw_write_indirect(struct ipw_priv *priv, u32 addr, u8 * buf,
                                int num)
 {
        u32 aligned_addr = addr & CX2_INDIRECT_ADDR_MASK;
@@ -335,7 +341,7 @@ static void _ipw_write_indirect(struct ipw_priv *priv, u32 addr, u8 *buf,
        _ipw_write32(priv, CX2_AUTOINC_ADDR, aligned_addr);
        aligned_len = num & CX2_INDIRECT_ADDR_MASK;
        for (i = 0; i < aligned_len; i += 4, buf += 4, aligned_addr += 4)
-               _ipw_write32(priv, CX2_AUTOINC_DATA, *(u32*)buf);
+               _ipw_write32(priv, CX2_AUTOINC_DATA, *(u32 *) buf);
 
        /* Copy the last nibble */
        dif_len = num - aligned_len;
@@ -428,20 +434,18 @@ static void ipw_dump_nic_error_log(struct ipw_priv *priv)
        }
 
        for (i = ERROR_START_OFFSET;
-            i <= count * ERROR_ELEM_SIZE;
-            i += ERROR_ELEM_SIZE) {
-               desc   = ipw_read_reg32(priv, base + i);
-               time   = ipw_read_reg32(priv, base + i + 1*sizeof(u32));
-               blink1 = ipw_read_reg32(priv, base + i + 2*sizeof(u32));
-               blink2 = ipw_read_reg32(priv, base + i + 3*sizeof(u32));
-               ilink1 = ipw_read_reg32(priv, base + i + 4*sizeof(u32));
-               ilink2 = ipw_read_reg32(priv, base + i + 5*sizeof(u32));
-               idata =  ipw_read_reg32(priv, base + i + 6*sizeof(u32));
+            i <= count * ERROR_ELEM_SIZE; i += ERROR_ELEM_SIZE) {
+               desc = ipw_read_reg32(priv, base + i);
+               time = ipw_read_reg32(priv, base + i + 1 * sizeof(u32));
+               blink1 = ipw_read_reg32(priv, base + i + 2 * sizeof(u32));
+               blink2 = ipw_read_reg32(priv, base + i + 3 * sizeof(u32));
+               ilink1 = ipw_read_reg32(priv, base + i + 4 * sizeof(u32));
+               ilink2 = ipw_read_reg32(priv, base + i + 5 * sizeof(u32));
+               idata = ipw_read_reg32(priv, base + i + 6 * sizeof(u32));
 
-               IPW_ERROR(
-                       "%s %i 0x%08x  0x%08x  0x%08x  0x%08x  0x%08x\n",
-                       ipw_error_desc(desc), time, blink1, blink2,
-                       ilink1, ilink2, idata);
+               IPW_ERROR("%s %i 0x%08x  0x%08x  0x%08x  0x%08x  0x%08x\n",
+                         ipw_error_desc(desc), time, blink1, blink2,
+                         ilink1, ilink2, idata);
        }
 }
 
@@ -456,11 +460,10 @@ static void ipw_dump_nic_event_log(struct ipw_priv *priv)
                IPW_ERROR("Start IPW Event Log Dump:\n");
 
        for (i = EVENT_START_OFFSET;
-            i <= count * EVENT_ELEM_SIZE;
-            i += EVENT_ELEM_SIZE) {
+            i <= count * EVENT_ELEM_SIZE; i += EVENT_ELEM_SIZE) {
                ev = ipw_read_reg32(priv, base + i);
-               time  = ipw_read_reg32(priv, base + i + 1*sizeof(u32));
-               data  = ipw_read_reg32(priv, base + i + 2*sizeof(u32));
+               time = ipw_read_reg32(priv, base + i + 1 * sizeof(u32));
+               data = ipw_read_reg32(priv, base + i + 2 * sizeof(u32));
 
 #ifdef CONFIG_IPW_DEBUG
                IPW_ERROR("%i\t0x%08x\t%i\n", time, data, ev);
@@ -468,8 +471,7 @@ static void ipw_dump_nic_event_log(struct ipw_priv *priv)
        }
 }
 
-static int ipw_get_ordinal(struct ipw_priv *priv, u32 ord, void *val,
-                          u32 *len)
+static int ipw_get_ordinal(struct ipw_priv *priv, u32 ord, void *val, u32 * len)
 {
        u32 addr, field_info, field_len, field_count, total_len;
 
@@ -513,11 +515,11 @@ static int ipw_get_ordinal(struct ipw_priv *priv, u32 ord, void *val,
                }
 
                IPW_DEBUG_ORD("Reading TABLE0[%i] from offset 0x%08x\n",
-                             ord, priv->table0_addr + (ord  << 2));
+                             ord, priv->table0_addr + (ord << 2));
 
                *len = sizeof(u32);
                ord <<= 2;
-               *((u32 *)val) = ipw_read32(priv, priv->table0_addr + ord);
+               *((u32 *) val) = ipw_read32(priv, priv->table0_addr + ord);
                break;
 
        case IPW_ORD_TABLE_1_MASK:
@@ -545,7 +547,8 @@ static int ipw_get_ordinal(struct ipw_priv *priv, u32 ord, void *val,
                        return -EINVAL;
                }
 
-               *((u32 *)val) = ipw_read_reg32(priv, (priv->table1_addr + (ord << 2)));
+               *((u32 *) val) =
+                   ipw_read_reg32(priv, (priv->table1_addr + (ord << 2)));
                *len = sizeof(u32);
                break;
 
@@ -573,13 +576,16 @@ static int ipw_get_ordinal(struct ipw_priv *priv, u32 ord, void *val,
 
                /* get the second DW of statistics ;
                 * two 16-bit words - first is length, second is count */
-               field_info = ipw_read_reg32(priv, priv->table2_addr + (ord << 3) + sizeof(u32));
+               field_info =
+                   ipw_read_reg32(priv,
+                                  priv->table2_addr + (ord << 3) +
+                                  sizeof(u32));
 
                /* get each entry length */
-               field_len = *((u16 *)&field_info);
+               field_len = *((u16 *) & field_info);
 
                /* get number of entries */
-               field_count = *(((u16 *)&field_info) + 1);
+               field_count = *(((u16 *) & field_info) + 1);
 
                /* abort if not enought memory */
                total_len = field_len * field_count;
@@ -604,7 +610,6 @@ static int ipw_get_ordinal(struct ipw_priv *priv, u32 ord, void *val,
 
        }
 
-
        return 0;
 }
 
@@ -624,7 +629,7 @@ static void ipw_init_ordinals(struct ipw_priv *priv)
 
        priv->table2_addr = ipw_read32(priv, IPW_ORDINALS_TABLE_2);
        priv->table2_len = ipw_read_reg32(priv, priv->table2_addr);
-       priv->table2_len &= 0x0000ffff; /* use first two bytes */
+       priv->table2_len &= 0x0000ffff; /* use first two bytes */
 
        IPW_DEBUG_ORD("table 2 offset at 0x%08x, len = %i\n",
                      priv->table2_addr, priv->table2_len);
@@ -643,7 +648,7 @@ static ssize_t show_debug_level(struct device_driver *d, char *buf)
        return sprintf(buf, "0x%08X\n", ipw_debug_level);
 }
 static ssize_t store_debug_level(struct device_driver *d,
-                               const char *buf, size_t count)
+                                const char *buf, size_t count)
 {
        char *p = (char *)buf;
        u32 val;
@@ -668,11 +673,12 @@ static DRIVER_ATTR(debug_level, S_IWUSR | S_IRUGO,
                   show_debug_level, store_debug_level);
 
 static ssize_t show_status(struct device *d,
-                       struct device_attribute *attr, char *buf)
+                          struct device_attribute *attr, char *buf)
 {
        struct ipw_priv *p = d->driver_data;
        return sprintf(buf, "0x%08x\n", (int)p->status);
 }
+
 static DEVICE_ATTR(status, S_IRUGO, show_status, NULL);
 
 static ssize_t show_cfg(struct device *d, struct device_attribute *attr,
@@ -681,10 +687,11 @@ static ssize_t show_cfg(struct device *d, struct device_attribute *attr,
        struct ipw_priv *p = d->driver_data;
        return sprintf(buf, "0x%08x\n", (int)p->config);
 }
+
 static DEVICE_ATTR(cfg, S_IRUGO, show_cfg, NULL);
 
 static ssize_t show_nic_type(struct device *d,
-                       struct device_attribute *attr, char *buf)
+                            struct device_attribute *attr, char *buf)
 {
        struct ipw_priv *p = d->driver_data;
        u8 type = p->eeprom[EEPROM_NIC_TYPE];
@@ -704,44 +711,50 @@ static ssize_t show_nic_type(struct device *d,
 
        return sprintf(buf, "UNKNOWN\n");
 }
+
 static DEVICE_ATTR(nic_type, S_IRUGO, show_nic_type, NULL);
 
 static ssize_t dump_error_log(struct device *d,
-               struct device_attribute *attr, const char *buf, size_t count)
+                             struct device_attribute *attr, const char *buf,
+                             size_t count)
 {
        char *p = (char *)buf;
 
        if (p[0] == '1')
-               ipw_dump_nic_error_log((struct ipw_priv*)d->driver_data);
+               ipw_dump_nic_error_log((struct ipw_priv *)d->driver_data);
 
        return strnlen(buf, count);
 }
+
 static DEVICE_ATTR(dump_errors, S_IWUSR, NULL, dump_error_log);
 
 static ssize_t dump_event_log(struct device *d,
-               struct device_attribute *attr, const char *buf, size_t count)
+                             struct device_attribute *attr, const char *buf,
+                             size_t count)
 {
        char *p = (char *)buf;
 
        if (p[0] == '1')
-               ipw_dump_nic_event_log((struct ipw_priv*)d->driver_data);
+               ipw_dump_nic_event_log((struct ipw_priv *)d->driver_data);
 
        return strnlen(buf, count);
 }
+
 static DEVICE_ATTR(dump_events, S_IWUSR, NULL, dump_event_log);
 
 static ssize_t show_ucode_version(struct device *d,
-                       struct device_attribute *attr, char *buf)
+                                 struct device_attribute *attr, char *buf)
 {
        u32 len = sizeof(u32), tmp = 0;
        struct ipw_priv *p = d->driver_data;
 
-       if(ipw_get_ordinal(p, IPW_ORD_STAT_UCODE_VERSION, &tmp, &len))
+       if (ipw_get_ordinal(p, IPW_ORD_STAT_UCODE_VERSION, &tmp, &len))
                return 0;
 
        return sprintf(buf, "0x%08x\n", tmp);
 }
-static DEVICE_ATTR(ucode_version, S_IWUSR|S_IRUGO, show_ucode_version, NULL);
+
+static DEVICE_ATTR(ucode_version, S_IWUSR | S_IRUGO, show_ucode_version, NULL);
 
 static ssize_t show_rtc(struct device *d, struct device_attribute *attr,
                        char *buf)
@@ -749,36 +762,38 @@ static ssize_t show_rtc(struct device *d, struct device_attribute *attr,
        u32 len = sizeof(u32), tmp = 0;
        struct ipw_priv *p = d->driver_data;
 
-       if(ipw_get_ordinal(p, IPW_ORD_STAT_RTC, &tmp, &len))
+       if (ipw_get_ordinal(p, IPW_ORD_STAT_RTC, &tmp, &len))
                return 0;
 
        return sprintf(buf, "0x%08x\n", tmp);
 }
-static DEVICE_ATTR(rtc, S_IWUSR|S_IRUGO, show_rtc, NULL);
+
+static DEVICE_ATTR(rtc, S_IWUSR | S_IRUGO, show_rtc, NULL);
 
 /*
  * Add a device attribute to view/control the delay between eeprom
  * operations.
  */
 static ssize_t show_eeprom_delay(struct device *d,
-                       struct device_attribute *attr, char *buf)
+                                struct device_attribute *attr, char *buf)
 {
-       int n = ((struct ipw_priv*)d->driver_data)->eeprom_delay;
+       int n = ((struct ipw_priv *)d->driver_data)->eeprom_delay;
        return sprintf(buf, "%i\n", n);
 }
 static ssize_t store_eeprom_delay(struct device *d,
-                       struct device_attribute *attr, const char *buf,
-                       size_t count)
+                                 struct device_attribute *attr,
+                                 const char *buf, size_t count)
 {
        struct ipw_priv *p = d->driver_data;
        sscanf(buf, "%i", &p->eeprom_delay);
        return strnlen(buf, count);
 }
-static DEVICE_ATTR(eeprom_delay, S_IWUSR|S_IRUGO,
-                  show_eeprom_delay,store_eeprom_delay);
+
+static DEVICE_ATTR(eeprom_delay, S_IWUSR | S_IRUGO,
+                  show_eeprom_delay, store_eeprom_delay);
 
 static ssize_t show_command_event_reg(struct device *d,
-                       struct device_attribute *attr, char *buf)
+                                     struct device_attribute *attr, char *buf)
 {
        u32 reg = 0;
        struct ipw_priv *p = d->driver_data;
@@ -787,8 +802,8 @@ static ssize_t show_command_event_reg(struct device *d,
        return sprintf(buf, "0x%08x\n", reg);
 }
 static ssize_t store_command_event_reg(struct device *d,
-                               struct device_attribute *attr, const char *buf,
-                               size_t count)
+                                      struct device_attribute *attr,
+                                      const char *buf, size_t count)
 {
        u32 reg;
        struct ipw_priv *p = d->driver_data;
@@ -797,11 +812,12 @@ static ssize_t store_command_event_reg(struct device *d,
        ipw_write_reg32(p, CX2_INTERNAL_CMD_EVENT, reg);
        return strnlen(buf, count);
 }
-static DEVICE_ATTR(command_event_reg, S_IWUSR|S_IRUGO,
-                  show_command_event_reg,store_command_event_reg);
+
+static DEVICE_ATTR(command_event_reg, S_IWUSR | S_IRUGO,
+                  show_command_event_reg, store_command_event_reg);
 
 static ssize_t show_mem_gpio_reg(struct device *d,
-                               struct device_attribute *attr, char *buf)
+                                struct device_attribute *attr, char *buf)
 {
        u32 reg = 0;
        struct ipw_priv *p = d->driver_data;
@@ -810,8 +826,8 @@ static ssize_t show_mem_gpio_reg(struct device *d,
        return sprintf(buf, "0x%08x\n", reg);
 }
 static ssize_t store_mem_gpio_reg(struct device *d,
-                       struct device_attribute *attr, const char *buf,
-                       size_t count)
+                                 struct device_attribute *attr,
+                                 const char *buf, size_t count)
 {
        u32 reg;
        struct ipw_priv *p = d->driver_data;
@@ -820,11 +836,12 @@ static ssize_t store_mem_gpio_reg(struct device *d,
        ipw_write_reg32(p, 0x301100, reg);
        return strnlen(buf, count);
 }
-static DEVICE_ATTR(mem_gpio_reg, S_IWUSR|S_IRUGO,
-                  show_mem_gpio_reg,store_mem_gpio_reg);
+
+static DEVICE_ATTR(mem_gpio_reg, S_IWUSR | S_IRUGO,
+                  show_mem_gpio_reg, store_mem_gpio_reg);
 
 static ssize_t show_indirect_dword(struct device *d,
-                               struct device_attribute *attr, char *buf)
+                                  struct device_attribute *attr, char *buf)
 {
        u32 reg = 0;
        struct ipw_priv *priv = d->driver_data;
@@ -836,8 +853,8 @@ static ssize_t show_indirect_dword(struct device *d,
        return sprintf(buf, "0x%08x\n", reg);
 }
 static ssize_t store_indirect_dword(struct device *d,
-                               struct device_attribute *attr, const char *buf,
-                               size_t count)
+                                   struct device_attribute *attr,
+                                   const char *buf, size_t count)
 {
        struct ipw_priv *priv = d->driver_data;
 
@@ -845,11 +862,12 @@ static ssize_t store_indirect_dword(struct device *d,
        priv->status |= STATUS_INDIRECT_DWORD;
        return strnlen(buf, count);
 }
-static DEVICE_ATTR(indirect_dword, S_IWUSR|S_IRUGO,
-                  show_indirect_dword,store_indirect_dword);
+
+static DEVICE_ATTR(indirect_dword, S_IWUSR | S_IRUGO,
+                  show_indirect_dword, store_indirect_dword);
 
 static ssize_t show_indirect_byte(struct device *d,
-                       struct device_attribute *attr, char *buf)
+                                 struct device_attribute *attr, char *buf)
 {
        u8 reg = 0;
        struct ipw_priv *priv = d->driver_data;
@@ -861,8 +879,8 @@ static ssize_t show_indirect_byte(struct device *d,
        return sprintf(buf, "0x%02x\n", reg);
 }
 static ssize_t store_indirect_byte(struct device *d,
-                               struct device_attribute *attr, const char *buf,
-                               size_t count)
+                                  struct device_attribute *attr,
+                                  const char *buf, size_t count)
 {
        struct ipw_priv *priv = d->driver_data;
 
@@ -870,11 +888,12 @@ static ssize_t store_indirect_byte(struct device *d,
        priv->status |= STATUS_INDIRECT_BYTE;
        return strnlen(buf, count);
 }
-static DEVICE_ATTR(indirect_byte, S_IWUSR|S_IRUGO,
+
+static DEVICE_ATTR(indirect_byte, S_IWUSR | S_IRUGO,
                   show_indirect_byte, store_indirect_byte);
 
 static ssize_t show_direct_dword(struct device *d,
-                               struct device_attribute *attr, char *buf)
+                                struct device_attribute *attr, char *buf)
 {
        u32 reg = 0;
        struct ipw_priv *priv = d->driver_data;
@@ -887,8 +906,8 @@ static ssize_t show_direct_dword(struct device *d,
        return sprintf(buf, "0x%08x\n", reg);
 }
 static ssize_t store_direct_dword(struct device *d,
-                       struct device_attribute *attr, const char *buf,
-                       size_t count)
+                                 struct device_attribute *attr,
+                                 const char *buf, size_t count)
 {
        struct ipw_priv *priv = d->driver_data;
 
@@ -896,9 +915,9 @@ static ssize_t store_direct_dword(struct device *d,
        priv->status |= STATUS_DIRECT_DWORD;
        return strnlen(buf, count);
 }
-static DEVICE_ATTR(direct_dword, S_IWUSR|S_IRUGO,
-                  show_direct_dword,store_direct_dword);
 
+static DEVICE_ATTR(direct_dword, S_IWUSR | S_IRUGO,
+                  show_direct_dword, store_direct_dword);
 
 static inline int rf_kill_active(struct ipw_priv *priv)
 {
@@ -911,7 +930,7 @@ static inline int rf_kill_active(struct ipw_priv *priv)
 }
 
 static ssize_t show_rf_kill(struct device *d, struct device_attribute *attr,
-                               char *buf)
+                           char *buf)
 {
        /* 0 - RF kill not enabled
           1 - SW based RF kill active (sysfs)
@@ -919,7 +938,7 @@ static ssize_t show_rf_kill(struct device *d, struct device_attribute *attr,
           3 - Both HW and SW baed RF kill active */
        struct ipw_priv *priv = d->driver_data;
        int val = ((priv->status & STATUS_RF_KILL_SW) ? 0x1 : 0x0) |
-               (rf_kill_active(priv) ? 0x2 : 0x0);
+           (rf_kill_active(priv) ? 0x2 : 0x0);
        return sprintf(buf, "%i\n", val);
 }
 
@@ -927,7 +946,7 @@ static int ipw_radio_kill_sw(struct ipw_priv *priv, int disable_radio)
 {
        if ((disable_radio ? 1 : 0) ==
            (priv->status & STATUS_RF_KILL_SW ? 1 : 0))
-               return 0 ;
+               return 0;
 
        IPW_DEBUG_RF_KILL("Manual SW RF Kill set to: RADIO  %s\n",
                          disable_radio ? "OFF" : "ON");
@@ -956,8 +975,8 @@ static int ipw_radio_kill_sw(struct ipw_priv *priv, int disable_radio)
        return 1;
 }
 
-static ssize_t store_rf_kill(struct device *d,  struct device_attribute *attr,
-                               const char *buf, size_t count)
+static ssize_t store_rf_kill(struct device *d, struct device_attribute *attr,
+                            const char *buf, size_t count)
 {
        struct ipw_priv *priv = d->driver_data;
 
@@ -965,7 +984,8 @@ static ssize_t store_rf_kill(struct device *d,  struct device_attribute *attr,
 
        return count;
 }
-static DEVICE_ATTR(rf_kill, S_IWUSR|S_IRUGO, show_rf_kill, store_rf_kill);
+
+static DEVICE_ATTR(rf_kill, S_IWUSR | S_IRUGO, show_rf_kill, store_rf_kill);
 
 static void ipw_irq_tasklet(struct ipw_priv *priv)
 {
@@ -990,7 +1010,7 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
 
        if (inta & CX2_INTA_BIT_TX_CMD_QUEUE) {
                IPW_DEBUG_HC("Command completed.\n");
-               rc = ipw_queue_tx_reclaim( priv, &priv->txq_cmd, -1);
+               rc = ipw_queue_tx_reclaim(priv, &priv->txq_cmd, -1);
                priv->status &= ~STATUS_HCMD_ACTIVE;
                wake_up_interruptible(&priv->wait_command_queue);
                handled |= CX2_INTA_BIT_TX_CMD_QUEUE;
@@ -998,25 +1018,25 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
 
        if (inta & CX2_INTA_BIT_TX_QUEUE_1) {
                IPW_DEBUG_TX("TX_QUEUE_1\n");
-               rc = ipw_queue_tx_reclaim( priv, &priv->txq[0], 0);
+               rc = ipw_queue_tx_reclaim(priv, &priv->txq[0], 0);
                handled |= CX2_INTA_BIT_TX_QUEUE_1;
        }
 
        if (inta & CX2_INTA_BIT_TX_QUEUE_2) {
                IPW_DEBUG_TX("TX_QUEUE_2\n");
-               rc = ipw_queue_tx_reclaim( priv, &priv->txq[1], 1);
+               rc = ipw_queue_tx_reclaim(priv, &priv->txq[1], 1);
                handled |= CX2_INTA_BIT_TX_QUEUE_2;
        }
 
        if (inta & CX2_INTA_BIT_TX_QUEUE_3) {
                IPW_DEBUG_TX("TX_QUEUE_3\n");
-               rc = ipw_queue_tx_reclaim( priv, &priv->txq[2], 2);
+               rc = ipw_queue_tx_reclaim(priv, &priv->txq[2], 2);
                handled |= CX2_INTA_BIT_TX_QUEUE_3;
        }
 
        if (inta & CX2_INTA_BIT_TX_QUEUE_4) {
                IPW_DEBUG_TX("TX_QUEUE_4\n");
-               rc = ipw_queue_tx_reclaim( priv, &priv->txq[3], 3);
+               rc = ipw_queue_tx_reclaim(priv, &priv->txq[3], 3);
                handled |= CX2_INTA_BIT_TX_QUEUE_4;
        }
 
@@ -1074,8 +1094,7 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
        }
 
        if (handled != inta) {
-               IPW_ERROR("Unhandled INTA bits 0x%08x\n",
-                               inta & ~handled);
+               IPW_ERROR("Unhandled INTA bits 0x%08x\n", inta & ~handled);
        }
 
        /* enable all interrupts */
@@ -1143,7 +1162,7 @@ static char *get_cmd_string(u8 cmd)
                return "UNKNOWN";
        }
 }
-#endif /* CONFIG_IPW_DEBUG */
+#endif                         /* CONFIG_IPW_DEBUG */
 
 #define HOST_COMPLETE_TIMEOUT HZ
 static int ipw_send_cmd(struct ipw_priv *priv, struct host_cmd *cmd)
@@ -1159,15 +1178,16 @@ static int ipw_send_cmd(struct ipw_priv *priv, struct host_cmd *cmd)
 
        IPW_DEBUG_HC("Sending %s command (#%d), %d bytes\n",
                     get_cmd_string(cmd->cmd), cmd->cmd, cmd->len);
-       printk_buf(IPW_DL_HOST_COMMAND, (u8*)cmd->param, cmd->len);
+       printk_buf(IPW_DL_HOST_COMMAND, (u8 *) cmd->param, cmd->len);
 
        rc = ipw_queue_tx_hcmd(priv, cmd->cmd, &cmd->param, cmd->len, 0);
        if (rc)
                return rc;
 
-       rc = wait_event_interruptible_timeout(
-               priv->wait_command_queue, !(priv->status & STATUS_HCMD_ACTIVE),
-               HOST_COMPLETE_TIMEOUT);
+       rc = wait_event_interruptible_timeout(priv->wait_command_queue,
+                                             !(priv->
+                                               status & STATUS_HCMD_ACTIVE),
+                                             HOST_COMPLETE_TIMEOUT);
        if (rc == 0) {
                IPW_DEBUG_INFO("Command completion failed out after %dms.\n",
                               jiffies_to_msecs(HOST_COMPLETE_TIMEOUT));
@@ -1215,7 +1235,7 @@ static int ipw_send_system_config(struct ipw_priv *priv,
                return -1;
        }
 
-       memcpy(&cmd.param,config,sizeof(*config));
+       memcpy(&cmd.param, config, sizeof(*config));
        if (ipw_send_cmd(priv, &cmd)) {
                IPW_ERROR("failed to send SYSTEM_CONFIG command\n");
                return -1;
@@ -1224,7 +1244,7 @@ static int ipw_send_system_config(struct ipw_priv *priv,
        return 0;
 }
 
-static int ipw_send_ssid(struct ipw_priv *priv, u8 *ssid, int len)
+static int ipw_send_ssid(struct ipw_priv *priv, u8 * ssid, int len)
 {
        struct host_cmd cmd = {
                .cmd = IPW_CMD_SSID,
@@ -1245,7 +1265,7 @@ static int ipw_send_ssid(struct ipw_priv *priv, u8 *ssid, int len)
        return 0;
 }
 
-static int ipw_send_adapter_address(struct ipw_priv *priv, u8 *mac)
+static int ipw_send_adapter_address(struct ipw_priv *priv, u8 * mac)
 {
        struct host_cmd cmd = {
                .cmd = IPW_CMD_ADAPTER_ADDRESS,
@@ -1284,9 +1304,6 @@ static void ipw_adapter_restart(void *adapter)
        }
 }
 
-
-
-
 #define IPW_SCAN_CHECK_WATCHDOG (5 * HZ)
 
 static void ipw_scan_check(void *data)
@@ -1313,7 +1330,7 @@ static int ipw_send_scan_request_ext(struct ipw_priv *priv,
                return -1;
        }
 
-       memcpy(&cmd.param,request,sizeof(*request));
+       memcpy(&cmd.param, request, sizeof(*request));
        if (ipw_send_cmd(priv, &cmd)) {
                IPW_ERROR("failed to send SCAN_REQUEST_EXT command\n");
                return -1;
@@ -1351,7 +1368,7 @@ static int ipw_set_sensitivity(struct ipw_priv *priv, u16 sens)
                .len = sizeof(struct ipw_sensitivity_calib)
        };
        struct ipw_sensitivity_calib *calib = (struct ipw_sensitivity_calib *)
-               &cmd.param;
+           &cmd.param;
        calib->beacon_rssi_raw = sens;
        if (ipw_send_cmd(priv, &cmd)) {
                IPW_ERROR("failed to send SENSITIVITY CALIB command\n");
@@ -1374,7 +1391,7 @@ static int ipw_send_associate(struct ipw_priv *priv,
                return -1;
        }
 
-       memcpy(&cmd.param,associate,sizeof(*associate));
+       memcpy(&cmd.param, associate, sizeof(*associate));
        if (ipw_send_cmd(priv, &cmd)) {
                IPW_ERROR("failed to send ASSOCIATE command\n");
                return -1;
@@ -1396,7 +1413,7 @@ static int ipw_send_supported_rates(struct ipw_priv *priv,
                return -1;
        }
 
-       memcpy(&cmd.param,rates,sizeof(*rates));
+       memcpy(&cmd.param, rates, sizeof(*rates));
        if (ipw_send_cmd(priv, &cmd)) {
                IPW_ERROR("failed to send SUPPORTED_RATES command\n");
                return -1;
@@ -1440,7 +1457,7 @@ static int ipw_send_card_disable(struct ipw_priv *priv, u32 phy_off)
                return -1;
        }
 
-       *((u32*)&cmd.param) = phy_off;
+       *((u32 *) & cmd.param) = phy_off;
 
        if (ipw_send_cmd(priv, &cmd)) {
                IPW_ERROR("failed to send CARD_DISABLE command\n");
@@ -1451,8 +1468,7 @@ static int ipw_send_card_disable(struct ipw_priv *priv, u32 phy_off)
 }
 #endif
 
-static int ipw_send_tx_power(struct ipw_priv *priv,
-                            struct ipw_tx_power *power)
+static int ipw_send_tx_power(struct ipw_priv *priv, struct ipw_tx_power *power)
 {
        struct host_cmd cmd = {
                .cmd = IPW_CMD_TX_POWER,
@@ -1464,7 +1480,7 @@ static int ipw_send_tx_power(struct ipw_priv *priv,
                return -1;
        }
 
-       memcpy(&cmd.param,power,sizeof(*power));
+       memcpy(&cmd.param, power, sizeof(*power));
        if (ipw_send_cmd(priv, &cmd)) {
                IPW_ERROR("failed to send TX_POWER command\n");
                return -1;
@@ -1527,7 +1543,7 @@ static int ipw_send_power_mode(struct ipw_priv *priv, u32 mode)
                .cmd = IPW_CMD_POWER_MODE,
                .len = sizeof(u32)
        };
-       u32 *param = (u32*)(&cmd.param);
+       u32 *param = (u32 *) (&cmd.param);
 
        if (!priv) {
                IPW_ERROR("Invalid args\n");
@@ -1585,67 +1601,67 @@ static inline void eeprom_write_reg(struct ipw_priv *p, u32 data)
 }
 
 /* perform a chip select operation */
-static inline void eeprom_cs(struct ipw_privpriv)
+static inline void eeprom_cs(struct ipw_priv *priv)
 {
-       eeprom_write_reg(priv,0);
-       eeprom_write_reg(priv,EEPROM_BIT_CS);
-       eeprom_write_reg(priv,EEPROM_BIT_CS|EEPROM_BIT_SK);
-       eeprom_write_reg(priv,EEPROM_BIT_CS);
+       eeprom_write_reg(priv, 0);
+       eeprom_write_reg(priv, EEPROM_BIT_CS);
+       eeprom_write_reg(priv, EEPROM_BIT_CS | EEPROM_BIT_SK);
+       eeprom_write_reg(priv, EEPROM_BIT_CS);
 }
 
 /* perform a chip select operation */
-static inline void eeprom_disable_cs(struct ipw_privpriv)
+static inline void eeprom_disable_cs(struct ipw_priv *priv)
 {
-       eeprom_write_reg(priv,EEPROM_BIT_CS);
-       eeprom_write_reg(priv,0);
-       eeprom_write_reg(priv,EEPROM_BIT_SK);
+       eeprom_write_reg(priv, EEPROM_BIT_CS);
+       eeprom_write_reg(priv, 0);
+       eeprom_write_reg(priv, EEPROM_BIT_SK);
 }
 
 /* push a single bit down to the eeprom */
-static inline void eeprom_write_bit(struct ipw_priv *p,u8 bit)
+static inline void eeprom_write_bit(struct ipw_priv *p, u8 bit)
 {
-       int d = ( bit ? EEPROM_BIT_DI : 0);
-       eeprom_write_reg(p,EEPROM_BIT_CS|d);
-       eeprom_write_reg(p,EEPROM_BIT_CS|d|EEPROM_BIT_SK);
+       int d = (bit ? EEPROM_BIT_DI : 0);
+       eeprom_write_reg(p, EEPROM_BIT_CS | d);
+       eeprom_write_reg(p, EEPROM_BIT_CS | d | EEPROM_BIT_SK);
 }
 
 /* push an opcode followed by an address down to the eeprom */
-static void eeprom_op(struct ipw_privpriv, u8 op, u8 addr)
+static void eeprom_op(struct ipw_priv *priv, u8 op, u8 addr)
 {
        int i;
 
        eeprom_cs(priv);
-       eeprom_write_bit(priv,1);
-       eeprom_write_bit(priv,op&2);
-       eeprom_write_bit(priv,op&1);
-       for ( i=7; i>=0; i-- ) {
-               eeprom_write_bit(priv,addr&(1<<i));
+       eeprom_write_bit(priv, 1);
+       eeprom_write_bit(priv, op & 2);
+       eeprom_write_bit(priv, op & 1);
+       for (i = 7; i >= 0; i--) {
+               eeprom_write_bit(priv, addr & (1 << i));
        }
 }
 
 /* pull 16 bits off the eeprom, one bit at a time */
-static u16 eeprom_read_u16(struct ipw_privpriv, u8 addr)
+static u16 eeprom_read_u16(struct ipw_priv *priv, u8 addr)
 {
        int i;
-       u16 r=0;
+       u16 r = 0;
 
        /* Send READ Opcode */
-       eeprom_op(priv,EEPROM_CMD_READ,addr);
+       eeprom_op(priv, EEPROM_CMD_READ, addr);
 
        /* Send dummy bit */
-       eeprom_write_reg(priv,EEPROM_BIT_CS);
+       eeprom_write_reg(priv, EEPROM_BIT_CS);
 
        /* Read the byte off the eeprom one bit at a time */
-       for ( i=0; i<16; i++ ) {
+       for (i = 0; i < 16; i++) {
                u32 data = 0;
-               eeprom_write_reg(priv,EEPROM_BIT_CS|EEPROM_BIT_SK);
-               eeprom_write_reg(priv,EEPROM_BIT_CS);
-               data = ipw_read_reg32(priv,FW_MEM_REG_EEPROM_ACCESS);
-               r = (r<<1) | ((data & EEPROM_BIT_DO)?1:0);
+               eeprom_write_reg(priv, EEPROM_BIT_CS | EEPROM_BIT_SK);
+               eeprom_write_reg(priv, EEPROM_BIT_CS);
+               data = ipw_read_reg32(priv, FW_MEM_REG_EEPROM_ACCESS);
+               r = (r << 1) | ((data & EEPROM_BIT_DO) ? 1 : 0);
        }
 
        /* Send another dummy bit */
-       eeprom_write_reg(priv,0);
+       eeprom_write_reg(priv, 0);
        eeprom_disable_cs(priv);
 
        return r;
@@ -1653,9 +1669,9 @@ static u16 eeprom_read_u16(struct ipw_priv* priv, u8 addr)
 
 /* helper function for pulling the mac address out of the private */
 /* data's copy of the eeprom data                                 */
-static void eeprom_parse_mac(struct ipw_priv* priv, u8* mac)
+static void eeprom_parse_mac(struct ipw_priv *priv, u8 * mac)
 {
-       u8* ee = (u8*)priv->eeprom;
+       u8 *ee = (u8 *) priv->eeprom;
        memcpy(mac, &ee[EEPROM_MAC_ADDRESS], 6);
 }
 
@@ -1670,26 +1686,25 @@ static void eeprom_parse_mac(struct ipw_priv* priv, u8* mac)
 static void ipw_eeprom_init_sram(struct ipw_priv *priv)
 {
        int i;
-       u16 *eeprom = (u16 *)priv->eeprom;
+       u16 *eeprom = (u16 *) priv->eeprom;
 
        IPW_DEBUG_TRACE(">>\n");
 
        /* read entire contents of eeprom into private buffer */
-       for ( i=0; i<128; i++ )
-               eeprom[i] = eeprom_read_u16(priv,(u8)i);
+       for (i = 0; i < 128; i++)
+               eeprom[i] = eeprom_read_u16(priv, (u8) i);
 
        /*
           If the data looks correct, then copy it to our private
           copy.  Otherwise let the firmware know to perform the operation
           on it's own
-       */
+        */
        if ((priv->eeprom + EEPROM_VERSION) != 0) {
                IPW_DEBUG_INFO("Writing EEPROM data into SRAM\n");
 
                /* write the eeprom data to sram */
-               for( i=0; i<CX2_EEPROM_IMAGE_SIZE; i++ )
-                       ipw_write8(priv, IPW_EEPROM_DATA + i,
-                                  priv->eeprom[i]);
+               for (i = 0; i < CX2_EEPROM_IMAGE_SIZE; i++)
+                       ipw_write8(priv, IPW_EEPROM_DATA + i, priv->eeprom[i]);
 
                /* Do not load eeprom data on fatal error or suspend */
                ipw_write32(priv, IPW_EEPROM_LOAD_DISABLE, 0);
@@ -1703,11 +1718,11 @@ static void ipw_eeprom_init_sram(struct ipw_priv *priv)
        IPW_DEBUG_TRACE("<<\n");
 }
 
-
 static inline void ipw_zero_memory(struct ipw_priv *priv, u32 start, u32 count)
 {
        count >>= 2;
-       if (!count) return;
+       if (!count)
+               return;
        _ipw_write32(priv, CX2_AUTOINC_ADDR, start);
        while (count--)
                _ipw_write32(priv, CX2_AUTOINC_DATA, 0);
@@ -1721,7 +1736,7 @@ static inline void ipw_fw_dma_reset_command_blocks(struct ipw_priv *priv)
 }
 
 static int ipw_fw_dma_enable(struct ipw_priv *priv)
-{ /* start dma engine but no transfers yet*/
+{                              /* start dma engine but no transfers yet */
 
        IPW_DEBUG_FW(">> : \n");
 
@@ -1749,12 +1764,16 @@ static void ipw_fw_dma_abort(struct ipw_priv *priv)
        IPW_DEBUG_FW("<< \n");
 }
 
-static int ipw_fw_dma_write_command_block(struct ipw_priv *priv, int index, struct command_block *cb)
+static int ipw_fw_dma_write_command_block(struct ipw_priv *priv, int index,
+                                         struct command_block *cb)
 {
-       u32 address = CX2_SHARED_SRAM_DMA_CONTROL + (sizeof(struct command_block) * index);
+       u32 address =
+           CX2_SHARED_SRAM_DMA_CONTROL +
+           (sizeof(struct command_block) * index);
        IPW_DEBUG_FW(">> :\n");
 
-       ipw_write_indirect(priv, address, (u8*)cb, (int)sizeof(struct command_block));
+       ipw_write_indirect(priv, address, (u8 *) cb,
+                          (int)sizeof(struct command_block));
 
        IPW_DEBUG_FW("<< :\n");
        return 0;
@@ -1764,17 +1783,20 @@ static int ipw_fw_dma_write_command_block(struct ipw_priv *priv, int index, stru
 static int ipw_fw_dma_kick(struct ipw_priv *priv)
 {
        u32 control = 0;
-       u32 index=0;
+       u32 index = 0;
 
        IPW_DEBUG_FW(">> :\n");
 
        for (index = 0; index < priv->sram_desc.last_cb_index; index++)
-               ipw_fw_dma_write_command_block(priv, index, &priv->sram_desc.cb_list[index]);
+               ipw_fw_dma_write_command_block(priv, index,
+                                              &priv->sram_desc.cb_list[index]);
 
        /* Enable the DMA in the CSR register */
-       ipw_clear_bit(priv, CX2_RESET_REG,CX2_RESET_REG_MASTER_DISABLED | CX2_RESET_REG_STOP_MASTER);
+       ipw_clear_bit(priv, CX2_RESET_REG,
+                     CX2_RESET_REG_MASTER_DISABLED |
+                     CX2_RESET_REG_STOP_MASTER);
 
-        /* Set the Start bit. */
+       /* Set the Start bit. */
        control = DMA_CONTROL_SMALL_CB_CONST_VALUE | DMA_CB_START;
        ipw_write_reg32(priv, CX2_DMA_I_DMA_CONTROL, control);
 
@@ -1785,25 +1807,25 @@ static int ipw_fw_dma_kick(struct ipw_priv *priv)
 static void ipw_fw_dma_dump_command_block(struct ipw_priv *priv)
 {
        u32 address;
-       u32 register_value=0;
-       u32 cb_fields_address=0;
+       u32 register_value = 0;
+       u32 cb_fields_address = 0;
 
        IPW_DEBUG_FW(">> :\n");
-       address = ipw_read_reg32(priv,CX2_DMA_I_CURRENT_CB);
-       IPW_DEBUG_FW_INFO("Current CB is 0x%x \n",address);
+       address = ipw_read_reg32(priv, CX2_DMA_I_CURRENT_CB);
+       IPW_DEBUG_FW_INFO("Current CB is 0x%x \n", address);
 
        /* Read the DMA Controlor register */
        register_value = ipw_read_reg32(priv, CX2_DMA_I_DMA_CONTROL);
-       IPW_DEBUG_FW_INFO("CX2_DMA_I_DMA_CONTROL is 0x%x \n",register_value);
+       IPW_DEBUG_FW_INFO("CX2_DMA_I_DMA_CONTROL is 0x%x \n", register_value);
 
-       /* Print the CB values*/
+       /* Print the CB values */
        cb_fields_address = address;
        register_value = ipw_read_reg32(priv, cb_fields_address);
-       IPW_DEBUG_FW_INFO("Current CB ControlField is 0x%x \n",register_value);
+       IPW_DEBUG_FW_INFO("Current CB ControlField is 0x%x \n", register_value);
 
        cb_fields_address += sizeof(u32);
        register_value = ipw_read_reg32(priv, cb_fields_address);
-       IPW_DEBUG_FW_INFO("Current CB Source Field is 0x%x \n",register_value);
+       IPW_DEBUG_FW_INFO("Current CB Source Field is 0x%x \n", register_value);
 
        cb_fields_address += sizeof(u32);
        register_value = ipw_read_reg32(priv, cb_fields_address);
@@ -1812,7 +1834,7 @@ static void ipw_fw_dma_dump_command_block(struct ipw_priv *priv)
 
        cb_fields_address += sizeof(u32);
        register_value = ipw_read_reg32(priv, cb_fields_address);
-       IPW_DEBUG_FW_INFO("Current CB Status Field is 0x%x \n",register_value);
+       IPW_DEBUG_FW_INFO("Current CB Status Field is 0x%x \n", register_value);
 
        IPW_DEBUG_FW(">> :\n");
 }
@@ -1823,13 +1845,13 @@ static int ipw_fw_dma_command_block_index(struct ipw_priv *priv)
        u32 current_cb_index = 0;
 
        IPW_DEBUG_FW("<< :\n");
-       current_cb_address= ipw_read_reg32(priv, CX2_DMA_I_CURRENT_CB);
+       current_cb_address = ipw_read_reg32(priv, CX2_DMA_I_CURRENT_CB);
 
-       current_cb_index = (current_cb_address - CX2_SHARED_SRAM_DMA_CONTROL )/
-               sizeof (struct command_block);
+       current_cb_index = (current_cb_address - CX2_SHARED_SRAM_DMA_CONTROL/
+           sizeof(struct command_block);
 
        IPW_DEBUG_FW_INFO("Current CB index 0x%x address = 0x%X \n",
-                         current_cb_index, current_cb_address );
+                         current_cb_index, current_cb_address);
 
        IPW_DEBUG_FW(">> :\n");
        return current_cb_index;
@@ -1840,15 +1862,14 @@ static int ipw_fw_dma_add_command_block(struct ipw_priv *priv,
                                        u32 src_address,
                                        u32 dest_address,
                                        u32 length,
-                                       int interrupt_enabled,
-                                       int is_last)
+                                       int interrupt_enabled, int is_last)
 {
 
        u32 control = CB_VALID | CB_SRC_LE | CB_DEST_LE | CB_SRC_AUTOINC |
-               CB_SRC_IO_GATED | CB_DEST_AUTOINC | CB_SRC_SIZE_LONG |
-               CB_DEST_SIZE_LONG;
+           CB_SRC_IO_GATED | CB_DEST_AUTOINC | CB_SRC_SIZE_LONG |
+           CB_DEST_SIZE_LONG;
        struct command_block *cb;
-       u32 last_cb_element=0;
+       u32 last_cb_element = 0;
 
        IPW_DEBUG_FW_INFO("src_address=0x%x dest_address=0x%x length=0x%x\n",
                          src_address, dest_address, length);
@@ -1861,7 +1882,7 @@ static int ipw_fw_dma_add_command_block(struct ipw_priv *priv,
        priv->sram_desc.last_cb_index++;
 
        /* Calculate the new CB control word */
-       if (interrupt_enabled )
+       if (interrupt_enabled)
                control |= CB_INT_ENABLED;
 
        if (is_last)
@@ -1870,7 +1891,7 @@ static int ipw_fw_dma_add_command_block(struct ipw_priv *priv,
        control |= length;
 
        /* Calculate the CB Element's checksum value */
-       cb->status = control ^src_address ^dest_address;
+       cb->status = control ^ src_address ^ dest_address;
 
        /* Copy the Source and Destination addresses */
        cb->dest_addr = dest_address;
@@ -1883,22 +1904,21 @@ static int ipw_fw_dma_add_command_block(struct ipw_priv *priv,
 }
 
 static int ipw_fw_dma_add_buffer(struct ipw_priv *priv,
-                                u32 src_phys,
-                                u32 dest_address,
-                                u32 length)
+                                u32 src_phys, u32 dest_address, u32 length)
 {
        u32 bytes_left = length;
-       u32 src_offset=0;
-       u32 dest_offset=0;
+       u32 src_offset = 0;
+       u32 dest_offset = 0;
        int status = 0;
        IPW_DEBUG_FW(">> \n");
        IPW_DEBUG_FW_INFO("src_phys=0x%x dest_address=0x%x length=0x%x\n",
                          src_phys, dest_address, length);
        while (bytes_left > CB_MAX_LENGTH) {
-               status = ipw_fw_dma_add_command_block( priv,
-                                                      src_phys + src_offset,
-                                                      dest_address + dest_offset,
-                                                      CB_MAX_LENGTH, 0, 0);
+               status = ipw_fw_dma_add_command_block(priv,
+                                                     src_phys + src_offset,
+                                                     dest_address +
+                                                     dest_offset,
+                                                     CB_MAX_LENGTH, 0, 0);
                if (status) {
                        IPW_DEBUG_FW_INFO(": Failed\n");
                        return -1;
@@ -1912,18 +1932,18 @@ static int ipw_fw_dma_add_buffer(struct ipw_priv *priv,
 
        /* add the buffer tail */
        if (bytes_left > 0) {
-               status = ipw_fw_dma_add_command_block(
-                       priv, src_phys + src_offset,
-                       dest_address + dest_offset,
-                       bytes_left, 0, 0);
+               status =
+                   ipw_fw_dma_add_command_block(priv, src_phys + src_offset,
+                                                dest_address + dest_offset,
+                                                bytes_left, 0, 0);
                if (status) {
                        IPW_DEBUG_FW_INFO(": Failed on the buffer tail\n");
                        return -1;
                } else
-                       IPW_DEBUG_FW_INFO(": Adding new cb - the buffer tail\n");
+                       IPW_DEBUG_FW_INFO
+                           (": Adding new cb - the buffer tail\n");
        }
 
-
        IPW_DEBUG_FW("<< \n");
        return 0;
 }
@@ -1937,7 +1957,7 @@ static int ipw_fw_dma_wait(struct ipw_priv *priv)
 
        current_index = ipw_fw_dma_command_block_index(priv);
        IPW_DEBUG_FW_INFO("sram_desc.last_cb_index:0x%8X\n",
-                         (int) priv->sram_desc.last_cb_index);
+                         (int)priv->sram_desc.last_cb_index);
 
        while (current_index < priv->sram_desc.last_cb_index) {
                udelay(50);
@@ -1955,8 +1975,8 @@ static int ipw_fw_dma_wait(struct ipw_priv *priv)
 
        ipw_fw_dma_abort(priv);
 
-       /*Disable the DMA in the CSR register*/
-       ipw_set_bit(priv, CX2_RESET_REG,
+       /*Disable the DMA in the CSR register */
+       ipw_set_bit(priv, CX2_RESET_REG,
                    CX2_RESET_REG_MASTER_DISABLED | CX2_RESET_REG_STOP_MASTER);
 
        IPW_DEBUG_FW("<< dmaWaitSync \n");
@@ -2011,8 +2031,7 @@ static inline int ipw_poll_bit(struct ipw_priv *priv, u32 addr, u32 mask,
  * image and the caller is handling the memory allocation and clean up.
  */
 
-
-static int ipw_stop_master(struct ipw_priv * priv)
+static int ipw_stop_master(struct ipw_priv *priv)
 {
        int rc;
 
@@ -2071,14 +2090,13 @@ struct fw_chunk {
 #define IPW_FW_NAME(x) "ipw2200_" x ".fw"
 #endif
 
-static int ipw_load_ucode(struct ipw_priv *priv, u8 * data,
-                         size_t len)
+static int ipw_load_ucode(struct ipw_priv *priv, u8 * data, size_t len)
 {
        int rc = 0, i, addr;
        u8 cr = 0;
        u16 *image;
 
-       image = (u16 *)data;
+       image = (u16 *) data;
 
        IPW_DEBUG_TRACE(">> \n");
 
@@ -2087,7 +2105,7 @@ static int ipw_load_ucode(struct ipw_priv *priv, u8 * data,
        if (rc < 0)
                return rc;
 
-//     spin_lock_irqsave(&priv->lock, flags);
+//      spin_lock_irqsave(&priv->lock, flags);
 
        for (addr = CX2_SHARED_LOWER_BOUND;
             addr < CX2_REGISTER_DOMAIN1_END; addr += 4) {
@@ -2099,7 +2117,7 @@ static int ipw_load_ucode(struct ipw_priv *priv, u8 * data,
        /* destroy DMA queues */
        /* reset sequence */
 
-       ipw_write_reg32(priv, CX2_MEM_HALT_AND_RESET ,CX2_BIT_HALT_RESET_ON);
+       ipw_write_reg32(priv, CX2_MEM_HALT_AND_RESETCX2_BIT_HALT_RESET_ON);
        ipw_arc_release(priv);
        ipw_write_reg32(priv, CX2_MEM_HALT_AND_RESET, CX2_BIT_HALT_RESET_OFF);
        mdelay(1);
@@ -2128,13 +2146,11 @@ static int ipw_load_ucode(struct ipw_priv *priv, u8 * data,
        for (i = 0; i < len / 2; i++)
                ipw_write_reg16(priv, CX2_BASEBAND_CONTROL_STORE, image[i]);
 
-
        /* enable DINO */
        ipw_write_reg8(priv, CX2_BASEBAND_CONTROL_STATUS, 0);
-       ipw_write_reg8(priv, CX2_BASEBAND_CONTROL_STATUS,
-                      DINO_ENABLE_SYSTEM );
+       ipw_write_reg8(priv, CX2_BASEBAND_CONTROL_STATUS, DINO_ENABLE_SYSTEM);
 
-       /* this is where the igx / win driver deveates from the VAP driver.*/
+       /* this is where the igx / win driver deveates from the VAP driver. */
 
        /* wait for alive response */
        for (i = 0; i < 100; i++) {
@@ -2151,25 +2167,24 @@ static int ipw_load_ucode(struct ipw_priv *priv, u8 * data,
 
                for (i = 0; i < ARRAY_SIZE(response_buffer); i++)
                        response_buffer[i] =
-                               ipw_read_reg32(priv,
-                                              CX2_BASEBAND_RX_FIFO_READ);
+                           ipw_read_reg32(priv, CX2_BASEBAND_RX_FIFO_READ);
                memcpy(&priv->dino_alive, response_buffer,
                       sizeof(priv->dino_alive));
                if (priv->dino_alive.alive_command == 1
                    && priv->dino_alive.ucode_valid == 1) {
                        rc = 0;
-                       IPW_DEBUG_INFO(
-                               "Microcode OK, rev. %d (0x%x) dev. %d (0x%x) "
-                               "of %02d/%02d/%02d %02d:%02d\n",
-                               priv->dino_alive.software_revision,
-                               priv->dino_alive.software_revision,
-                               priv->dino_alive.device_identifier,
-                               priv->dino_alive.device_identifier,
-                               priv->dino_alive.time_stamp[0],
-                               priv->dino_alive.time_stamp[1],
-                               priv->dino_alive.time_stamp[2],
-                               priv->dino_alive.time_stamp[3],
-                               priv->dino_alive.time_stamp[4]);
+                       IPW_DEBUG_INFO
+                           ("Microcode OK, rev. %d (0x%x) dev. %d (0x%x) "
+                            "of %02d/%02d/%02d %02d:%02d\n",
+                            priv->dino_alive.software_revision,
+                            priv->dino_alive.software_revision,
+                            priv->dino_alive.device_identifier,
+                            priv->dino_alive.device_identifier,
+                            priv->dino_alive.time_stamp[0],
+                            priv->dino_alive.time_stamp[1],
+                            priv->dino_alive.time_stamp[2],
+                            priv->dino_alive.time_stamp[3],
+                            priv->dino_alive.time_stamp[4]);
                } else {
                        IPW_DEBUG_INFO("Microcode is not alive\n");
                        rc = -EINVAL;
@@ -2183,13 +2198,12 @@ static int ipw_load_ucode(struct ipw_priv *priv, u8 * data,
           firmware have problem getting alive resp. */
        ipw_write_reg8(priv, CX2_BASEBAND_CONTROL_STATUS, 0);
 
-//     spin_unlock_irqrestore(&priv->lock, flags);
+//      spin_unlock_irqrestore(&priv->lock, flags);
 
        return rc;
 }
 
-static int ipw_load_firmware(struct ipw_priv *priv, u8 * data,
-                            size_t len)
+static int ipw_load_firmware(struct ipw_priv *priv, u8 * data, size_t len)
 {
        int rc = -1;
        int offset = 0;
@@ -2231,7 +2245,7 @@ static int ipw_load_firmware(struct ipw_priv *priv, u8 * data,
                offset += chunk->length;
        } while (offset < len);
 
-       /* Run the DMA and wait for the answer*/
+       /* Run the DMA and wait for the answer */
        rc = ipw_fw_dma_kick(priv);
        if (rc) {
                IPW_ERROR("dmaKick Failed\n");
@@ -2243,8 +2257,8 @@ static int ipw_load_firmware(struct ipw_priv *priv, u8 * data,
                IPW_ERROR("dmaWaitSync Failed\n");
                goto out;
        }
- out:
-       pci_free_consistent( priv->pci_dev, len, shared_virt, shared_phys);
     out:
+       pci_free_consistent(priv->pci_dev, len, shared_virt, shared_phys);
        return rc;
 }
 
@@ -2253,7 +2267,7 @@ static int ipw_stop_nic(struct ipw_priv *priv)
 {
        int rc = 0;
 
-       /* stop*/
+       /* stop */
        ipw_write32(priv, CX2_RESET_REG, CX2_RESET_REG_STOP_MASTER);
 
        rc = ipw_poll_bit(priv, CX2_RESET_REG,
@@ -2272,14 +2286,15 @@ static void ipw_start_nic(struct ipw_priv *priv)
 {
        IPW_DEBUG_TRACE(">>\n");
 
-       /* prvHwStartNic  release ARC*/
+       /* prvHwStartNic  release ARC */
        ipw_clear_bit(priv, CX2_RESET_REG,
                      CX2_RESET_REG_MASTER_DISABLED |
                      CX2_RESET_REG_STOP_MASTER |
                      CBD_RESET_REG_PRINCETON_RESET);
 
        /* enable power management */
-       ipw_set_bit(priv, CX2_GP_CNTRL_RW, CX2_GP_CNTRL_BIT_HOST_ALLOWS_STANDBY);
+       ipw_set_bit(priv, CX2_GP_CNTRL_RW,
+                   CX2_GP_CNTRL_BIT_HOST_ALLOWS_STANDBY);
 
        IPW_DEBUG_TRACE("<<\n");
 }
@@ -2295,12 +2310,13 @@ static int ipw_init_nic(struct ipw_priv *priv)
        ipw_set_bit(priv, CX2_GP_CNTRL_RW, CX2_GP_CNTRL_BIT_INIT_DONE);
 
        /* low-level PLL activation */
-       ipw_write32(priv, CX2_READ_INT_REGISTER,  CX2_BIT_INT_HOST_SRAM_READ_INT_REGISTER);
+       ipw_write32(priv, CX2_READ_INT_REGISTER,
+                   CX2_BIT_INT_HOST_SRAM_READ_INT_REGISTER);
 
        /* wait for clock stabilization */
        rc = ipw_poll_bit(priv, CX2_GP_CNTRL_RW,
                          CX2_GP_CNTRL_BIT_CLOCK_READY, 250);
-       if (rc < 0 )
+       if (rc < 0)
                IPW_DEBUG_INFO("FAILED wait for clock stablization\n");
 
        /* assert SW reset */
@@ -2315,7 +2331,6 @@ static int ipw_init_nic(struct ipw_priv *priv)
        return 0;
 }
 
-
 /* Call this function from process context, it will sleep in request_firmware.
  * Probe is an ok place to call this from.
  */
@@ -2383,8 +2398,7 @@ static inline void ipw_rx_queue_reset(struct ipw_priv *priv,
                 * to an SKB, so we need to unmap and free potential storage */
                if (rxq->pool[i].skb != NULL) {
                        pci_unmap_single(priv->pci_dev, rxq->pool[i].dma_addr,
-                                        CX2_RX_BUF_SIZE,
-                                        PCI_DMA_FROMDEVICE);
+                                        CX2_RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
                        dev_kfree_skb(rxq->pool[i].skb);
                }
                list_add_tail(&rxq->pool[i].list, &rxq->rx_used);
@@ -2438,12 +2452,12 @@ static int ipw_load(struct ipw_priv *priv)
                        if (rc)
                                goto error;
 
-                       rc = ipw_get_fw(priv, &firmware, IPW_FW_NAME("sniffer"));
+                       rc = ipw_get_fw(priv, &firmware,
+                                       IPW_FW_NAME("sniffer"));
                        break;
 #endif
                case IW_MODE_INFRA:
-                       rc = ipw_get_fw(priv, &ucode,
-                                       IPW_FW_NAME("bss_ucode"));
+                       rc = ipw_get_fw(priv, &ucode, IPW_FW_NAME("bss_ucode"));
                        if (rc)
                                goto error;
 
@@ -2471,7 +2485,7 @@ static int ipw_load(struct ipw_priv *priv)
                goto error;
        }
 
- retry:
     retry:
        /* Ensure interrupts are disabled */
        ipw_write32(priv, CX2_INTA_MASK_R, ~CX2_INTA_MASK_ALL);
        priv->status &= ~STATUS_INT_ENABLED;
@@ -2528,7 +2542,7 @@ static int ipw_load(struct ipw_priv *priv)
        rc = ipw_load_firmware(priv, firmware->data +
                               sizeof(struct fw_header),
                               firmware->size - sizeof(struct fw_header));
-       if (rc < 0 ) {
+       if (rc < 0) {
                IPW_ERROR("Unable to load firmware\n");
                goto error;
        }
@@ -2593,7 +2607,7 @@ static int ipw_load(struct ipw_priv *priv)
 #endif
        return 0;
 
- error:
     error:
        if (priv->rxq) {
                ipw_rx_queue_free(priv, priv->rxq);
                priv->rxq = NULL;
@@ -2671,8 +2685,7 @@ static inline int ipw_queue_inc_wrap(int index, int n_bd)
  *                         (not offset within BAR, full address)
  */
 static void ipw_queue_init(struct ipw_priv *priv, struct clx2_queue *q,
-                          int count, u32 read, u32 write,
-                          u32 base, u32 size)
+                          int count, u32 read, u32 write, u32 base, u32 size)
 {
        q->n_bd = count;
 
@@ -2698,8 +2711,7 @@ static void ipw_queue_init(struct ipw_priv *priv, struct clx2_queue *q,
 
 static int ipw_queue_tx_init(struct ipw_priv *priv,
                             struct clx2_tx_queue *q,
-                            int count, u32 read, u32 write,
-                            u32 base, u32 size)
+                            int count, u32 read, u32 write, u32 base, u32 size)
 {
        struct pci_dev *dev = priv->pci_dev;
 
@@ -2709,10 +2721,11 @@ static int ipw_queue_tx_init(struct ipw_priv *priv,
                return -ENOMEM;
        }
 
-       q->bd = pci_alloc_consistent(dev,sizeof(q->bd[0])*count, &q->q.dma_addr);
+       q->bd =
+           pci_alloc_consistent(dev, sizeof(q->bd[0]) * count, &q->q.dma_addr);
        if (!q->bd) {
                IPW_ERROR("pci_alloc_consistent(%zd) failed\n",
-                               sizeof(q->bd[0]) * count);
+                         sizeof(q->bd[0]) * count);
                kfree(q->txb);
                q->txb = NULL;
                return -ENOMEM;
@@ -2768,8 +2781,7 @@ static void ipw_queue_tx_free_tfd(struct ipw_priv *priv,
  * @param dev
  * @param q
  */
-static void ipw_queue_tx_free(struct ipw_priv *priv,
-                           struct clx2_tx_queue *txq)
+static void ipw_queue_tx_free(struct ipw_priv *priv, struct clx2_tx_queue *txq)
 {
        struct clx2_queue *q = &txq->q;
        struct pci_dev *dev = priv->pci_dev;
@@ -2784,7 +2796,7 @@ static void ipw_queue_tx_free(struct ipw_priv *priv,
        }
 
        /* free buffers belonging to queue itself */
-       pci_free_consistent(dev, sizeof(txq->bd[0])*q->n_bd, txq->bd,
+       pci_free_consistent(dev, sizeof(txq->bd[0]) * q->n_bd, txq->bd,
                            q->dma_addr);
        kfree(txq->txb);
 
@@ -2792,7 +2804,6 @@ static void ipw_queue_tx_free(struct ipw_priv *priv,
        memset(txq, 0, sizeof(*txq));
 }
 
-
 /**
  * Destroy all DMA queues and structures
  *
@@ -2825,7 +2836,7 @@ static void inline __maybe_wake_tx(struct ipw_priv *priv)
 
 }
 
-static inline void ipw_create_bssid(struct ipw_priv *priv, u8 *bssid)
+static inline void ipw_create_bssid(struct ipw_priv *priv, u8 * bssid)
 {
        /* First 3 bytes are manufacturer */
        bssid[0] = priv->mac_addr[0];
@@ -2833,13 +2844,13 @@ static inline void ipw_create_bssid(struct ipw_priv *priv, u8 *bssid)
        bssid[2] = priv->mac_addr[2];
 
        /* Last bytes are random */
-        get_random_bytes(&bssid[3], ETH_ALEN-3);
+       get_random_bytes(&bssid[3], ETH_ALEN - 3);
 
-        bssid[0] &= 0xfe;       /* clear multicast bit */
-        bssid[0] |= 0x02;       /* set local assignment bit (IEEE802) */
+       bssid[0] &= 0xfe;       /* clear multicast bit */
+       bssid[0] |= 0x02;       /* set local assignment bit (IEEE802) */
 }
 
-static inline u8 ipw_add_station(struct ipw_priv *priv, u8 *bssid)
+static inline u8 ipw_add_station(struct ipw_priv *priv, u8 * bssid)
 {
        struct ipw_station_entry entry;
        int i;
@@ -2866,14 +2877,13 @@ static inline u8 ipw_add_station(struct ipw_priv *priv, u8 *bssid)
        memcpy(entry.mac_addr, bssid, ETH_ALEN);
        memcpy(priv->stations[i], bssid, ETH_ALEN);
        ipw_write_direct(priv, IPW_STATION_TABLE_LOWER + i * sizeof(entry),
-                        &entry,
-                        sizeof(entry));
+                        &entry, sizeof(entry));
        priv->num_stations++;
 
        return i;
 }
 
-static inline u8 ipw_find_station(struct ipw_priv *priv, u8 *bssid)
+static inline u8 ipw_find_station(struct ipw_priv *priv, u8 * bssid)
 {
        int i;
 
@@ -2944,26 +2954,34 @@ static const struct ipw_status_code ipw_status_codes[] = {
         "association exists"},
        {0x0C, "Association denied due to reason outside the scope of this "
         "standard"},
-       {0x0D, "Responding station does not support the specified authentication "
+       {0x0D,
+        "Responding station does not support the specified authentication "
         "algorithm"},
-       {0x0E, "Received an Authentication frame with authentication sequence "
+       {0x0E,
+        "Received an Authentication frame with authentication sequence "
         "transaction sequence number out of expected sequence"},
        {0x0F, "Authentication rejected because of challenge failure"},
        {0x10, "Authentication rejected due to timeout waiting for next "
         "frame in sequence"},
        {0x11, "Association denied because AP is unable to handle additional "
         "associated stations"},
-       {0x12, "Association denied due to requesting station not supporting all "
+       {0x12,
+        "Association denied due to requesting station not supporting all "
         "of the datarates in the BSSBasicServiceSet Parameter"},
-       {0x13, "Association denied due to requesting station not supporting "
+       {0x13,
+        "Association denied due to requesting station not supporting "
         "short preamble operation"},
-       {0x14, "Association denied due to requesting station not supporting "
+       {0x14,
+        "Association denied due to requesting station not supporting "
         "PBCC encoding"},
-       {0x15, "Association denied due to requesting station not supporting "
+       {0x15,
+        "Association denied due to requesting station not supporting "
         "channel agility"},
-       {0x19, "Association denied due to requesting station not supporting "
+       {0x19,
+        "Association denied due to requesting station not supporting "
         "short slot operation"},
-       {0x1A, "Association denied due to requesting station not supporting "
+       {0x1A,
+        "Association denied due to requesting station not supporting "
         "DSSS-OFDM operation"},
        {0x28, "Invalid Information Element"},
        {0x29, "Group Cipher is not valid"},
@@ -3043,7 +3061,6 @@ static void ipw_reset_stats(struct ipw_priv *priv)
 
 }
 
-
 static inline u32 ipw_get_max_rate(struct ipw_priv *priv)
 {
        u32 i = 0x80000000;
@@ -3056,20 +3073,21 @@ static inline u32 ipw_get_max_rate(struct ipw_priv *priv)
        /* TODO: Verify that the rate is supported by the current rates
         * list. */
 
-       while (i && !(mask & i)) i >>= 1;
+       while (i && !(mask & i))
+               i >>= 1;
        switch (i) {
-       case IEEE80211_CCK_RATE_1MB_MASK: return 1000000;
-       case IEEE80211_CCK_RATE_2MB_MASK: return 2000000;
-       case IEEE80211_CCK_RATE_5MB_MASK: return 5500000;
-       case IEEE80211_OFDM_RATE_6MB_MASK: return 6000000;
-       case IEEE80211_OFDM_RATE_9MB_MASK: return 9000000;
-       case IEEE80211_CCK_RATE_11MB_MASK: return 11000000;
-       case IEEE80211_OFDM_RATE_12MB_MASK: return 12000000;
-       case IEEE80211_OFDM_RATE_18MB_MASK: return 18000000;
-       case IEEE80211_OFDM_RATE_24MB_MASK: return 24000000;
-       case IEEE80211_OFDM_RATE_36MB_MASK: return 36000000;
-       case IEEE80211_OFDM_RATE_48MB_MASK: return 48000000;
-       case IEEE80211_OFDM_RATE_54MB_MASK: return 54000000;
+       case IEEE80211_CCK_RATE_1MB_MASK:       return 1000000;
+       case IEEE80211_CCK_RATE_2MB_MASK:       return 2000000;
+       case IEEE80211_CCK_RATE_5MB_MASK:       return 5500000;
+       case IEEE80211_OFDM_RATE_6MB_MASK:      return 6000000;
+       case IEEE80211_OFDM_RATE_9MB_MASK:      return 9000000;
+       case IEEE80211_CCK_RATE_11MB_MASK:      return 11000000;
+       case IEEE80211_OFDM_RATE_12MB_MASK:     return 12000000;
+       case IEEE80211_OFDM_RATE_18MB_MASK:     return 18000000;
+       case IEEE80211_OFDM_RATE_24MB_MASK:     return 24000000;
+       case IEEE80211_OFDM_RATE_36MB_MASK:     return 36000000;
+       case IEEE80211_OFDM_RATE_48MB_MASK:     return 48000000;
+       case IEEE80211_OFDM_RATE_54MB_MASK:     return 54000000;
        }
 
        if (priv->ieee->mode == IEEE_B)
@@ -3097,18 +3115,18 @@ static u32 ipw_get_current_rate(struct ipw_priv *priv)
                return ipw_get_max_rate(priv);
 
        switch (rate) {
-       case IPW_TX_RATE_1MB:  return  1000000;
-       case IPW_TX_RATE_2MB:  return  2000000;
-       case IPW_TX_RATE_5MB:  return  5500000;
-       case IPW_TX_RATE_6MB:  return  6000000;
-       case IPW_TX_RATE_9MB:  return  9000000;
-       case IPW_TX_RATE_11MB: return 11000000;
-       case IPW_TX_RATE_12MB: return 12000000;
-       case IPW_TX_RATE_18MB: return 18000000;
-       case IPW_TX_RATE_24MB: return 24000000;
-       case IPW_TX_RATE_36MB: return 36000000;
-       case IPW_TX_RATE_48MB: return 48000000;
-       case IPW_TX_RATE_54MB: return 54000000;
+       case IPW_TX_RATE_1MB:   return 1000000;
+       case IPW_TX_RATE_2MB:   return 2000000;
+       case IPW_TX_RATE_5MB:   return 5500000;
+       case IPW_TX_RATE_6MB:   return 6000000;
+       case IPW_TX_RATE_9MB:   return 9000000;
+       case IPW_TX_RATE_11MB:  return 11000000;
+       case IPW_TX_RATE_12MB:  return 12000000;
+       case IPW_TX_RATE_18MB:  return 18000000;
+       case IPW_TX_RATE_24MB:  return 24000000;
+       case IPW_TX_RATE_36MB:  return 36000000;
+       case IPW_TX_RATE_48MB:  return 48000000;
+       case IPW_TX_RATE_54MB:  return 54000000;
        }
 
        return 0;
@@ -3126,7 +3144,7 @@ static void ipw_gather_stats(struct ipw_priv *priv)
        u32 len = sizeof(u32);
        s16 rssi;
        u32 beacon_quality, signal_quality, tx_quality, rx_quality,
-               rate_quality;
+           rate_quality;
 
        if (!(priv->status & STATUS_ASSOCIATED)) {
                priv->quality = 0;
@@ -3136,13 +3154,12 @@ static void ipw_gather_stats(struct ipw_priv *priv)
        /* Update the statistics */
        ipw_get_ordinal(priv, IPW_ORD_STAT_MISSED_BEACONS,
                        &priv->missed_beacons, &len);
-       missed_beacons_delta = priv->missed_beacons -
-               priv->last_missed_beacons;
+       missed_beacons_delta = priv->missed_beacons - priv->last_missed_beacons;
        priv->last_missed_beacons = priv->missed_beacons;
        if (priv->assoc_request.beacon_interval) {
                missed_beacons_percent = missed_beacons_delta *
-                       (HZ * priv->assoc_request.beacon_interval) /
-                       (IPW_STATS_INTERVAL * 10);
+                   (HZ * priv->assoc_request.beacon_interval) /
+                   (IPW_STATS_INTERVAL * 10);
        } else {
                missed_beacons_percent = 0;
        }
@@ -3179,28 +3196,26 @@ static void ipw_gather_stats(struct ipw_priv *priv)
                beacon_quality = 0;
        else
                beacon_quality = (beacon_quality - BEACON_THRESHOLD) * 100 /
-                       (100 - BEACON_THRESHOLD);
+                   (100 - BEACON_THRESHOLD);
        IPW_DEBUG_STATS("Missed beacon: %3d%% (%d%%)\n",
                        beacon_quality, missed_beacons_percent);
 
        priv->last_rate = ipw_get_current_rate(priv);
-       rate_quality =  priv->last_rate * 40 / priv->last_rate + 60;
+       rate_quality = priv->last_rate * 40 / priv->last_rate + 60;
        IPW_DEBUG_STATS("Rate quality : %3d%% (%dMbs)\n",
                        rate_quality, priv->last_rate / 1000000);
 
-       if (rx_packets_delta > 100 &&
-           rx_packets_delta + rx_err_delta)
+       if (rx_packets_delta > 100 && rx_packets_delta + rx_err_delta)
                rx_quality = 100 - (rx_err_delta * 100) /
-                       (rx_packets_delta + rx_err_delta);
+                   (rx_packets_delta + rx_err_delta);
        else
                rx_quality = 100;
        IPW_DEBUG_STATS("Rx quality   : %3d%% (%u errors, %u packets)\n",
                        rx_quality, rx_err_delta, rx_packets_delta);
 
-       if (tx_packets_delta > 100 &&
-           tx_packets_delta + tx_failures_delta)
+       if (tx_packets_delta > 100 && tx_packets_delta + tx_failures_delta)
                tx_quality = 100 - (tx_failures_delta * 100) /
-                       (tx_packets_delta + tx_failures_delta);
+                   (tx_packets_delta + tx_failures_delta);
        else
                tx_quality = 100;
        IPW_DEBUG_STATS("Tx quality   : %3d%% (%u errors, %u packets)\n",
@@ -3213,7 +3228,7 @@ static void ipw_gather_stats(struct ipw_priv *priv)
                signal_quality = 0;
        else
                signal_quality = (rssi - WORST_RSSI) * 100 /
-                       (PERFECT_RSSI - WORST_RSSI);
+                   (PERFECT_RSSI - WORST_RSSI);
        IPW_DEBUG_STATS("Signal level : %3d%% (%d dBm)\n",
                        signal_quality, rssi);
 
@@ -3221,25 +3236,20 @@ static void ipw_gather_stats(struct ipw_priv *priv)
                      min(rate_quality,
                          min(tx_quality, min(rx_quality, signal_quality))));
        if (quality == beacon_quality)
-               IPW_DEBUG_STATS(
-                       "Quality (%d%%): Clamped to missed beacons.\n",
-                       quality);
+               IPW_DEBUG_STATS("Quality (%d%%): Clamped to missed beacons.\n",
+                               quality);
        if (quality == rate_quality)
-               IPW_DEBUG_STATS(
-                       "Quality (%d%%): Clamped to rate quality.\n",
-                       quality);
+               IPW_DEBUG_STATS("Quality (%d%%): Clamped to rate quality.\n",
+                               quality);
        if (quality == tx_quality)
-               IPW_DEBUG_STATS(
-                       "Quality (%d%%): Clamped to Tx quality.\n",
-                       quality);
+               IPW_DEBUG_STATS("Quality (%d%%): Clamped to Tx quality.\n",
+                               quality);
        if (quality == rx_quality)
-               IPW_DEBUG_STATS(
-                       "Quality (%d%%): Clamped to Rx quality.\n",
-                       quality);
+               IPW_DEBUG_STATS("Quality (%d%%): Clamped to Rx quality.\n",
+                               quality);
        if (quality == signal_quality)
-               IPW_DEBUG_STATS(
-                       "Quality (%d%%): Clamped to signal quality.\n",
-                       quality);
+               IPW_DEBUG_STATS("Quality (%d%%): Clamped to signal quality.\n",
+                               quality);
 
        priv->quality = quality;
 
@@ -3251,402 +3261,454 @@ static void ipw_gather_stats(struct ipw_priv *priv)
  * Handle host notification packet.
  * Called from interrupt routine
  */
-static inline void ipw_rx_notification(struct ipw_privpriv,
+static inline void ipw_rx_notification(struct ipw_priv *priv,
                                       struct ipw_rx_notification *notif)
 {
-       IPW_DEBUG_NOTIF("type = %i (%d bytes)\n",
-                       notif->subtype, notif->size);
+       IPW_DEBUG_NOTIF("type = %i (%d bytes)\n", notif->subtype, notif->size);
 
        switch (notif->subtype) {
-       case HOST_NOTIFICATION_STATUS_ASSOCIATED: {
-               struct notif_association *assoc = &notif->u.assoc;
-
-               switch (assoc->state) {
-               case CMAS_ASSOCIATED: {
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "associated: '%s' " MAC_FMT " \n",
-                                 escape_essid(priv->essid, priv->essid_len),
-                                 MAC_ARG(priv->bssid));
-
-                       switch (priv->ieee->iw_mode) {
-                       case IW_MODE_INFRA:
-                               memcpy(priv->ieee->bssid, priv->bssid,
-                                      ETH_ALEN);
-                               break;
-
-                       case IW_MODE_ADHOC:
-                               memcpy(priv->ieee->bssid, priv->bssid,
-                                      ETH_ALEN);
-
-                               /* clear out the station table */
-                               priv->num_stations = 0;
-
-                               IPW_DEBUG_ASSOC("queueing adhoc check\n");
-                               queue_delayed_work(priv->workqueue,
-                                                  &priv->adhoc_check,
-                                                  priv->assoc_request.beacon_interval);
-                               break;
-                       }
-
-                       priv->status &= ~STATUS_ASSOCIATING;
-                       priv->status |= STATUS_ASSOCIATED;
-
-                       netif_carrier_on(priv->net_dev);
-                       if (netif_queue_stopped(priv->net_dev)) {
-                               IPW_DEBUG_NOTIF("waking queue\n");
-                               netif_wake_queue(priv->net_dev);
-                       } else {
-                               IPW_DEBUG_NOTIF("starting queue\n");
-                               netif_start_queue(priv->net_dev);
-                       }
-
-                       ipw_reset_stats(priv);
-                       /* Ensure the rate is updated immediately */
-                       priv->last_rate = ipw_get_current_rate(priv);
-                       schedule_work(&priv->gather_stats);
-                       notify_wx_assoc_event(priv);
+       case HOST_NOTIFICATION_STATUS_ASSOCIATED:{
+                       struct notif_association *assoc = &notif->u.assoc;
+
+                       switch (assoc->state) {
+                       case CMAS_ASSOCIATED:{
+                                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                                 IPW_DL_ASSOC,
+                                                 "associated: '%s' " MAC_FMT
+                                                 " \n",
+                                                 escape_essid(priv->essid,
+                                                              priv->essid_len),
+                                                 MAC_ARG(priv->bssid));
+
+                                       switch (priv->ieee->iw_mode) {
+                                       case IW_MODE_INFRA:
+                                               memcpy(priv->ieee->bssid,
+                                                      priv->bssid, ETH_ALEN);
+                                               break;
+
+                                       case IW_MODE_ADHOC:
+                                               memcpy(priv->ieee->bssid,
+                                                      priv->bssid, ETH_ALEN);
+
+                                               /* clear out the station table */
+                                               priv->num_stations = 0;
+
+                                               IPW_DEBUG_ASSOC
+                                                   ("queueing adhoc check\n");
+                                               queue_delayed_work(priv->
+                                                                  workqueue,
+                                                                  &priv->
+                                                                  adhoc_check,
+                                                                  priv->
+                                                                  assoc_request.
+                                                                  beacon_interval);
+                                               break;
+                                       }
+
+                                       priv->status &= ~STATUS_ASSOCIATING;
+                                       priv->status |= STATUS_ASSOCIATED;
+
+                                       netif_carrier_on(priv->net_dev);
+                                       if (netif_queue_stopped(priv->net_dev)) {
+                                               IPW_DEBUG_NOTIF
+                                                   ("waking queue\n");
+                                               netif_wake_queue(priv->net_dev);
+                                       } else {
+                                               IPW_DEBUG_NOTIF
+                                                   ("starting queue\n");
+                                               netif_start_queue(priv->
+                                                                 net_dev);
+                                       }
+
+                                       ipw_reset_stats(priv);
+                                       /* Ensure the rate is updated immediately */
+                                       priv->last_rate =
+                                           ipw_get_current_rate(priv);
+                                       schedule_work(&priv->gather_stats);
+                                       notify_wx_assoc_event(priv);
 
 /*                     queue_delayed_work(priv->workqueue,
                                           &priv->request_scan,
                                           SCAN_ASSOCIATED_INTERVAL);
 */
-                       break;
-               }
+                                       break;
+                               }
 
-               case CMAS_AUTHENTICATED: {
-                       if (priv->status & (STATUS_ASSOCIATED | STATUS_AUTH)) {
+                       case CMAS_AUTHENTICATED:{
+                                       if (priv->
+                                           status & (STATUS_ASSOCIATED |
+                                                     STATUS_AUTH)) {
 #ifdef CONFIG_IPW_DEBUG
-                               struct notif_authenticate *auth = &notif->u.auth;
-                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                         "deauthenticated: '%s' " MAC_FMT ": (0x%04X) - %s \n",
-                                         escape_essid(priv->essid, priv->essid_len),
-                                         MAC_ARG(priv->bssid),
-                                         ntohs(auth->status),
-                                         ipw_get_status_code(ntohs(auth->status)));
+                                               struct notif_authenticate *auth
+                                                   = &notif->u.auth;
+                                               IPW_DEBUG(IPW_DL_NOTIF |
+                                                         IPW_DL_STATE |
+                                                         IPW_DL_ASSOC,
+                                                         "deauthenticated: '%s' "
+                                                         MAC_FMT
+                                                         ": (0x%04X) - %s \n",
+                                                         escape_essid(priv->
+                                                                      essid,
+                                                                      priv->
+                                                                      essid_len),
+                                                         MAC_ARG(priv->bssid),
+                                                         ntohs(auth->status),
+                                                         ipw_get_status_code
+                                                         (ntohs
+                                                          (auth->status)));
 #endif
 
-                               priv->status &= ~(STATUS_ASSOCIATING |
-                                                 STATUS_AUTH |
-                                                 STATUS_ASSOCIATED);
+                                               priv->status &=
+                                                   ~(STATUS_ASSOCIATING |
+                                                     STATUS_AUTH |
+                                                     STATUS_ASSOCIATED);
+
+                                               netif_carrier_off(priv->
+                                                                 net_dev);
+                                               netif_stop_queue(priv->net_dev);
+                                               queue_work(priv->workqueue,
+                                                          &priv->request_scan);
+                                               notify_wx_assoc_event(priv);
+                                               break;
+                                       }
+
+                                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                                 IPW_DL_ASSOC,
+                                                 "authenticated: '%s' " MAC_FMT
+                                                 "\n",
+                                                 escape_essid(priv->essid,
+                                                              priv->essid_len),
+                                                 MAC_ARG(priv->bssid));
+                                       break;
+                               }
+
+                       case CMAS_INIT:{
+                                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                                 IPW_DL_ASSOC,
+                                                 "disassociated: '%s' " MAC_FMT
+                                                 " \n",
+                                                 escape_essid(priv->essid,
+                                                              priv->essid_len),
+                                                 MAC_ARG(priv->bssid));
+
+                                       priv->status &=
+                                           ~(STATUS_DISASSOCIATING |
+                                             STATUS_ASSOCIATING |
+                                             STATUS_ASSOCIATED | STATUS_AUTH);
+
+                                       netif_stop_queue(priv->net_dev);
+                                       if (!(priv->status & STATUS_ROAMING)) {
+                                               netif_carrier_off(priv->
+                                                                 net_dev);
+                                               notify_wx_assoc_event(priv);
+
+                                               /* Cancel any queued work ... */
+                                               cancel_delayed_work(&priv->
+                                                                   request_scan);
+                                               cancel_delayed_work(&priv->
+                                                                   adhoc_check);
+
+                                               /* Queue up another scan... */
+                                               queue_work(priv->workqueue,
+                                                          &priv->request_scan);
+
+                                               cancel_delayed_work(&priv->
+                                                                   gather_stats);
+                                       } else {
+                                               priv->status |= STATUS_ROAMING;
+                                               queue_work(priv->workqueue,
+                                                          &priv->request_scan);
+                                       }
+
+                                       ipw_reset_stats(priv);
+                                       break;
+                               }
 
-                               netif_carrier_off(priv->net_dev);
-                               netif_stop_queue(priv->net_dev);
-                               queue_work(priv->workqueue, &priv->request_scan);
-                               notify_wx_assoc_event(priv);
+                       default:
+                               IPW_ERROR("assoc: unknown (%d)\n",
+                                         assoc->state);
                                break;
                        }
 
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "authenticated: '%s' " MAC_FMT "\n",
-                                 escape_essid(priv->essid, priv->essid_len),
-                                 MAC_ARG(priv->bssid));
                        break;
                }
 
-               case CMAS_INIT: {
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "disassociated: '%s' " MAC_FMT " \n",
-                                 escape_essid(priv->essid, priv->essid_len),
-                                 MAC_ARG(priv->bssid));
+       case HOST_NOTIFICATION_STATUS_AUTHENTICATE:{
+                       struct notif_authenticate *auth = &notif->u.auth;
+                       switch (auth->state) {
+                       case CMAS_AUTHENTICATED:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE,
+                                         "authenticated: '%s' " MAC_FMT " \n",
+                                         escape_essid(priv->essid,
+                                                      priv->essid_len),
+                                         MAC_ARG(priv->bssid));
+                               priv->status |= STATUS_AUTH;
+                               break;
 
-                       priv->status &= ~(
-                               STATUS_DISASSOCIATING |
-                               STATUS_ASSOCIATING |
-                               STATUS_ASSOCIATED |
-                               STATUS_AUTH);
+                       case CMAS_INIT:
+                               if (priv->status & STATUS_AUTH) {
+                                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                                 IPW_DL_ASSOC,
+                                                 "authentication failed (0x%04X): %s\n",
+                                                 ntohs(auth->status),
+                                                 ipw_get_status_code(ntohs
+                                                                     (auth->
+                                                                      status)));
+                               }
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC,
+                                         "deauthenticated: '%s' " MAC_FMT "\n",
+                                         escape_essid(priv->essid,
+                                                      priv->essid_len),
+                                         MAC_ARG(priv->bssid));
 
-                       netif_stop_queue(priv->net_dev);
-                       if (!(priv->status & STATUS_ROAMING)) {
-                               netif_carrier_off(priv->net_dev);
-                               notify_wx_assoc_event(priv);
-
-                               /* Cancel any queued work ... */
-                               cancel_delayed_work(&priv->request_scan);
-                               cancel_delayed_work(&priv->adhoc_check);
+                               priv->status &= ~(STATUS_ASSOCIATING |
+                                                 STATUS_AUTH |
+                                                 STATUS_ASSOCIATED);
 
-                               /* Queue up another scan... */
+                               netif_carrier_off(priv->net_dev);
+                               netif_stop_queue(priv->net_dev);
                                queue_work(priv->workqueue,
                                           &priv->request_scan);
+                               notify_wx_assoc_event(priv);
+                               break;
 
-                               cancel_delayed_work(&priv->gather_stats);
-                       } else {
-                               priv->status |= STATUS_ROAMING;
-                               queue_work(priv->workqueue,
-                                          &priv->request_scan);
+                       case CMAS_TX_AUTH_SEQ_1:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "AUTH_SEQ_1\n");
+                               break;
+                       case CMAS_RX_AUTH_SEQ_2:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "AUTH_SEQ_2\n");
+                               break;
+                       case CMAS_AUTH_SEQ_1_PASS:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "AUTH_SEQ_1_PASS\n");
+                               break;
+                       case CMAS_AUTH_SEQ_1_FAIL:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "AUTH_SEQ_1_FAIL\n");
+                               break;
+                       case CMAS_TX_AUTH_SEQ_3:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "AUTH_SEQ_3\n");
+                               break;
+                       case CMAS_RX_AUTH_SEQ_4:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "RX_AUTH_SEQ_4\n");
+                               break;
+                       case CMAS_AUTH_SEQ_2_PASS:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "AUTH_SEQ_2_PASS\n");
+                               break;
+                       case CMAS_AUTH_SEQ_2_FAIL:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "AUT_SEQ_2_FAIL\n");
+                               break;
+                       case CMAS_TX_ASSOC:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "TX_ASSOC\n");
+                               break;
+                       case CMAS_RX_ASSOC_RESP:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "RX_ASSOC_RESP\n");
+                               break;
+                       case CMAS_ASSOCIATED:
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
+                                         IPW_DL_ASSOC, "ASSOCIATED\n");
+                               break;
+                       default:
+                               IPW_DEBUG_NOTIF("auth: failure - %d\n",
+                                               auth->state);
+                               break;
                        }
-
-                       ipw_reset_stats(priv);
-                       break;
-               }
-
-               default:
-                       IPW_ERROR("assoc: unknown (%d)\n",
-                                 assoc->state);
                        break;
                }
 
-               break;
-       }
+       case HOST_NOTIFICATION_STATUS_SCAN_CHANNEL_RESULT:{
+                       struct notif_channel_result *x =
+                           &notif->u.channel_result;
 
-       case HOST_NOTIFICATION_STATUS_AUTHENTICATE: {
-               struct notif_authenticate *auth = &notif->u.auth;
-               switch (auth->state) {
-               case CMAS_AUTHENTICATED:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE,
-                                 "authenticated: '%s' " MAC_FMT " \n",
-                                 escape_essid(priv->essid, priv->essid_len),
-                                 MAC_ARG(priv->bssid));
-                       priv->status |= STATUS_AUTH;
-                       break;
-
-               case CMAS_INIT:
-                       if (priv->status & STATUS_AUTH) {
-                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                         "authentication failed (0x%04X): %s\n",
-                                         ntohs(auth->status),
-                                         ipw_get_status_code(ntohs(auth->status)));
+                       if (notif->size == sizeof(*x)) {
+                               IPW_DEBUG_SCAN("Scan result for channel %d\n",
+                                              x->channel_num);
+                       } else {
+                               IPW_DEBUG_SCAN("Scan result of wrong size %d "
+                                              "(should be %zd)\n",
+                                              notif->size, sizeof(*x));
                        }
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "deauthenticated: '%s' " MAC_FMT "\n",
-                                 escape_essid(priv->essid, priv->essid_len),
-                                 MAC_ARG(priv->bssid));
-
-                       priv->status &= ~(STATUS_ASSOCIATING |
-                                         STATUS_AUTH |
-                                         STATUS_ASSOCIATED);
-
-                       netif_carrier_off(priv->net_dev);
-                       netif_stop_queue(priv->net_dev);
-                       queue_work(priv->workqueue, &priv->request_scan);
-                       notify_wx_assoc_event(priv);
-                       break;
-
-               case CMAS_TX_AUTH_SEQ_1:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "AUTH_SEQ_1\n");
-                       break;
-               case CMAS_RX_AUTH_SEQ_2:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "AUTH_SEQ_2\n");
-                       break;
-               case CMAS_AUTH_SEQ_1_PASS:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "AUTH_SEQ_1_PASS\n");
-                       break;
-               case CMAS_AUTH_SEQ_1_FAIL:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "AUTH_SEQ_1_FAIL\n");
-                       break;
-               case CMAS_TX_AUTH_SEQ_3:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "AUTH_SEQ_3\n");
-                       break;
-               case CMAS_RX_AUTH_SEQ_4:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "RX_AUTH_SEQ_4\n");
-                       break;
-               case CMAS_AUTH_SEQ_2_PASS:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "AUTH_SEQ_2_PASS\n");
-                       break;
-               case CMAS_AUTH_SEQ_2_FAIL:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "AUT_SEQ_2_FAIL\n");
-                       break;
-               case CMAS_TX_ASSOC:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "TX_ASSOC\n");
-                       break;
-               case CMAS_RX_ASSOC_RESP:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "RX_ASSOC_RESP\n");
-                       break;
-               case CMAS_ASSOCIATED:
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
-                                 "ASSOCIATED\n");
-                       break;
-               default:
-                       IPW_DEBUG_NOTIF("auth: failure - %d\n", auth->state);
                        break;
                }
-               break;
-       }
-
-       case HOST_NOTIFICATION_STATUS_SCAN_CHANNEL_RESULT: {
-               struct notif_channel_result *x = &notif->u.channel_result;
-
-               if (notif->size == sizeof(*x)) {
-                       IPW_DEBUG_SCAN("Scan result for channel %d\n",
-                                      x->channel_num);
-               } else {
-                       IPW_DEBUG_SCAN("Scan result of wrong size %d "
-                                      "(should be %zd)\n",
-                                      notif->size, sizeof(*x));
-               }
-               break;
-       }
 
-       case HOST_NOTIFICATION_STATUS_SCAN_COMPLETED: {
-               struct notif_scan_complete* x = &notif->u.scan_complete;
-               if (notif->size == sizeof(*x)) {
-                       IPW_DEBUG_SCAN("Scan completed: type %d, %d channels, "
-                                      "%d status\n",
-                                      x->scan_type,
-                                      x->num_channels,
-                                      x->status);
-               } else {
-                       IPW_ERROR("Scan completed of wrong size %d "
-                                 "(should be %zd)\n",
-                                 notif->size, sizeof(*x));
-               }
-
-               priv->status &= ~(STATUS_SCANNING | STATUS_SCAN_ABORTING);
-
-               cancel_delayed_work(&priv->scan_check);
-
-               if (!(priv->status & (STATUS_ASSOCIATED |
-                                     STATUS_ASSOCIATING |
-                                     STATUS_ROAMING |
-                                     STATUS_DISASSOCIATING)))
-                       queue_work(priv->workqueue, &priv->associate);
-               else if (priv->status & STATUS_ROAMING) {
-                       /* If a scan completed and we are in roam mode, then
-                        * the scan that completed was the one requested as a
-                        * result of entering roam... so, schedule the
-                        * roam work */
-                       queue_work(priv->workqueue, &priv->roam);
-               } else if (priv->status & STATUS_SCAN_PENDING)
-                       queue_work(priv->workqueue, &priv->request_scan);
-
-               priv->ieee->scans++;
-               break;
-       }
+       case HOST_NOTIFICATION_STATUS_SCAN_COMPLETED:{
+                       struct notif_scan_complete *x = &notif->u.scan_complete;
+                       if (notif->size == sizeof(*x)) {
+                               IPW_DEBUG_SCAN
+                                   ("Scan completed: type %d, %d channels, "
+                                    "%d status\n", x->scan_type,
+                                    x->num_channels, x->status);
+                       } else {
+                               IPW_ERROR("Scan completed of wrong size %d "
+                                         "(should be %zd)\n",
+                                         notif->size, sizeof(*x));
+                       }
 
-       case HOST_NOTIFICATION_STATUS_FRAG_LENGTH: {
-               struct notif_frag_length *x = &notif->u.frag_len;
+                       priv->status &=
+                           ~(STATUS_SCANNING | STATUS_SCAN_ABORTING);
+
+                       cancel_delayed_work(&priv->scan_check);
+
+                       if (!(priv->status & (STATUS_ASSOCIATED |
+                                             STATUS_ASSOCIATING |
+                                             STATUS_ROAMING |
+                                             STATUS_DISASSOCIATING)))
+                               queue_work(priv->workqueue, &priv->associate);
+                       else if (priv->status & STATUS_ROAMING) {
+                               /* If a scan completed and we are in roam mode, then
+                                * the scan that completed was the one requested as a
+                                * result of entering roam... so, schedule the
+                                * roam work */
+                               queue_work(priv->workqueue, &priv->roam);
+                       } else if (priv->status & STATUS_SCAN_PENDING)
+                               queue_work(priv->workqueue,
+                                          &priv->request_scan);
 
-               if (notif->size == sizeof(*x)) {
-                       IPW_ERROR("Frag length: %d\n", x->frag_length);
-               } else {
-                       IPW_ERROR("Frag length of wrong size %d "
-                                 "(should be %zd)\n",
-                                 notif->size, sizeof(*x));
+                       priv->ieee->scans++;
+                       break;
                }
-               break;
-       }
 
-       case HOST_NOTIFICATION_STATUS_LINK_DETERIORATION: {
-               struct notif_link_deterioration *x =
-                       &notif->u.link_deterioration;
-               if (notif->size==sizeof(*x)) {
-                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE,
-                                 "link deterioration: '%s' " MAC_FMT " \n",
-                                 escape_essid(priv->essid, priv->essid_len),
-                                 MAC_ARG(priv->bssid));
-                       memcpy(&priv->last_link_deterioration, x, sizeof(*x));
-               } else {
-                       IPW_ERROR("Link Deterioration of wrong size %d "
-                                 "(should be %zd)\n",
-                                 notif->size, sizeof(*x));
-               }
-               break;
-       }
+       case HOST_NOTIFICATION_STATUS_FRAG_LENGTH:{
+                       struct notif_frag_length *x = &notif->u.frag_len;
 
-       case HOST_NOTIFICATION_DINO_CONFIG_RESPONSE: {
-               IPW_ERROR("Dino config\n");
-               if (priv->hcmd && priv->hcmd->cmd == HOST_CMD_DINO_CONFIG) {
-                       /* TODO: Do anything special? */
-               } else {
-                       IPW_ERROR("Unexpected DINO_CONFIG_RESPONSE\n");
+                       if (notif->size == sizeof(*x)) {
+                               IPW_ERROR("Frag length: %d\n", x->frag_length);
+                       } else {
+                               IPW_ERROR("Frag length of wrong size %d "
+                                         "(should be %zd)\n",
+                                         notif->size, sizeof(*x));
+                       }
+                       break;
                }
-               break;
-       }
 
-       case HOST_NOTIFICATION_STATUS_BEACON_STATE: {
-               struct notif_beacon_state *x = &notif->u.beacon_state;
-               if (notif->size != sizeof(*x)) {
-                       IPW_ERROR("Beacon state of wrong size %d (should "
-                                 "be %zd)\n", notif->size, sizeof(*x));
+       case HOST_NOTIFICATION_STATUS_LINK_DETERIORATION:{
+                       struct notif_link_deterioration *x =
+                           &notif->u.link_deterioration;
+                       if (notif->size == sizeof(*x)) {
+                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE,
+                                         "link deterioration: '%s' " MAC_FMT
+                                         " \n", escape_essid(priv->essid,
+                                                             priv->essid_len),
+                                         MAC_ARG(priv->bssid));
+                               memcpy(&priv->last_link_deterioration, x,
+                                      sizeof(*x));
+                       } else {
+                               IPW_ERROR("Link Deterioration of wrong size %d "
+                                         "(should be %zd)\n",
+                                         notif->size, sizeof(*x));
+                       }
                        break;
                }
 
-               if (x->state == HOST_NOTIFICATION_STATUS_BEACON_MISSING) {
-                       if (priv->status & STATUS_SCANNING) {
-                               /* Stop scan to keep fw from getting
-                                * stuck... */
-                               queue_work(priv->workqueue,
-                                          &priv->abort_scan);
+       case HOST_NOTIFICATION_DINO_CONFIG_RESPONSE:{
+                       IPW_ERROR("Dino config\n");
+                       if (priv->hcmd
+                           && priv->hcmd->cmd == HOST_CMD_DINO_CONFIG) {
+                               /* TODO: Do anything special? */
+                       } else {
+                               IPW_ERROR("Unexpected DINO_CONFIG_RESPONSE\n");
                        }
+                       break;
+               }
 
-                       if (x->number > priv->missed_beacon_threshold &&
-                           priv->status & STATUS_ASSOCIATED) {
-                               IPW_DEBUG(IPW_DL_INFO | IPW_DL_NOTIF |
-                                         IPW_DL_STATE,
-                                         "Missed beacon: %d - disassociate\n",
-                                         x->number);
-                               queue_work(priv->workqueue,
-                                          &priv->disassociate);
-                       } else if (x->number > priv->roaming_threshold) {
-                               IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE,
-                                         "Missed beacon: %d - initiate "
-                                         "roaming\n",
-                                         x->number);
-                               queue_work(priv->workqueue,
-                                          &priv->roam);
-                       } else {
-                               IPW_DEBUG_NOTIF("Missed beacon: %d\n",
-                                               x->number);
+       case HOST_NOTIFICATION_STATUS_BEACON_STATE:{
+                       struct notif_beacon_state *x = &notif->u.beacon_state;
+                       if (notif->size != sizeof(*x)) {
+                               IPW_ERROR
+                                   ("Beacon state of wrong size %d (should "
+                                    "be %zd)\n", notif->size, sizeof(*x));
+                               break;
                        }
 
-                       priv->notif_missed_beacons = x->number;
+                       if (x->state == HOST_NOTIFICATION_STATUS_BEACON_MISSING) {
+                               if (priv->status & STATUS_SCANNING) {
+                                       /* Stop scan to keep fw from getting
+                                        * stuck... */
+                                       queue_work(priv->workqueue,
+                                                  &priv->abort_scan);
+                               }
+
+                               if (x->number > priv->missed_beacon_threshold &&
+                                   priv->status & STATUS_ASSOCIATED) {
+                                       IPW_DEBUG(IPW_DL_INFO | IPW_DL_NOTIF |
+                                                 IPW_DL_STATE,
+                                                 "Missed beacon: %d - disassociate\n",
+                                                 x->number);
+                                       queue_work(priv->workqueue,
+                                                  &priv->disassociate);
+                               } else if (x->number > priv->roaming_threshold) {
+                                       IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE,
+                                                 "Missed beacon: %d - initiate "
+                                                 "roaming\n", x->number);
+                                       queue_work(priv->workqueue,
+                                                  &priv->roam);
+                               } else {
+                                       IPW_DEBUG_NOTIF("Missed beacon: %d\n",
+                                                       x->number);
+                               }
+
+                               priv->notif_missed_beacons = x->number;
 
-                }
+                       }
 
+                       break;
+               }
 
-               break;
-       }
+       case HOST_NOTIFICATION_STATUS_TGI_TX_KEY:{
+                       struct notif_tgi_tx_key *x = &notif->u.tgi_tx_key;
+                       if (notif->size == sizeof(*x)) {
+                               IPW_ERROR("TGi Tx Key: state 0x%02x sec type "
+                                         "0x%02x station %d\n",
+                                         x->key_state, x->security_type,
+                                         x->station_index);
+                               break;
+                       }
 
-       case HOST_NOTIFICATION_STATUS_TGI_TX_KEY: {
-               struct notif_tgi_tx_key *x = &notif->u.tgi_tx_key;
-               if (notif->size==sizeof(*x)) {
-                       IPW_ERROR("TGi Tx Key: state 0x%02x sec type "
-                                 "0x%02x station %d\n",
-                                 x->key_state,x->security_type,
-                                 x->station_index);
+                       IPW_ERROR
+                           ("TGi Tx Key of wrong size %d (should be %zd)\n",
+                            notif->size, sizeof(*x));
                        break;
                }
 
-               IPW_ERROR("TGi Tx Key of wrong size %d (should be %zd)\n",
-                         notif->size, sizeof(*x));
-               break;
-       }
+       case HOST_NOTIFICATION_CALIB_KEEP_RESULTS:{
+                       struct notif_calibration *x = &notif->u.calibration;
 
-       case HOST_NOTIFICATION_CALIB_KEEP_RESULTS: {
-               struct notif_calibration *x = &notif->u.calibration;
+                       if (notif->size == sizeof(*x)) {
+                               memcpy(&priv->calib, x, sizeof(*x));
+                               IPW_DEBUG_INFO("TODO: Calibration\n");
+                               break;
+                       }
 
-               if (notif->size == sizeof(*x)) {
-                       memcpy(&priv->calib, x, sizeof(*x));
-                       IPW_DEBUG_INFO("TODO: Calibration\n");
+                       IPW_ERROR
+                           ("Calibration of wrong size %d (should be %zd)\n",
+                            notif->size, sizeof(*x));
                        break;
                }
 
-               IPW_ERROR("Calibration of wrong size %d (should be %zd)\n",
-                         notif->size, sizeof(*x));
-               break;
-       }
+       case HOST_NOTIFICATION_NOISE_STATS:{
+                       if (notif->size == sizeof(u32)) {
+                               priv->last_noise =
+                                   (u8) (notif->u.noise.value & 0xff);
+                               average_add(&priv->average_noise,
+                                           priv->last_noise);
+                               break;
+                       }
 
-       case HOST_NOTIFICATION_NOISE_STATS: {
-               if (notif->size == sizeof(u32)) {
-                       priv->last_noise = (u8)(notif->u.noise.value & 0xff);
-                       average_add(&priv->average_noise, priv->last_noise);
+                       IPW_ERROR
+                           ("Noise stat is wrong size %d (should be %zd)\n",
+                            notif->size, sizeof(u32));
                        break;
                }
 
-               IPW_ERROR("Noise stat is wrong size %d (should be %zd)\n",
-                         notif->size, sizeof(u32));
-               break;
-       }
-
        default:
                IPW_ERROR("Unknown notification: "
                          "subtype=%d,flags=0x%2x,size=%d\n",
@@ -3680,8 +3742,7 @@ static int ipw_queue_reset(struct ipw_priv *priv)
        rc = ipw_queue_tx_init(priv, &priv->txq[0], nTx,
                               CX2_TX_QUEUE_0_READ_INDEX,
                               CX2_TX_QUEUE_0_WRITE_INDEX,
-                              CX2_TX_QUEUE_0_BD_BASE,
-                              CX2_TX_QUEUE_0_BD_SIZE);
+                              CX2_TX_QUEUE_0_BD_BASE, CX2_TX_QUEUE_0_BD_SIZE);
        if (rc) {
                IPW_ERROR("Tx 0 queue init failed\n");
                goto error;
@@ -3689,8 +3750,7 @@ static int ipw_queue_reset(struct ipw_priv *priv)
        rc = ipw_queue_tx_init(priv, &priv->txq[1], nTx,
                               CX2_TX_QUEUE_1_READ_INDEX,
                               CX2_TX_QUEUE_1_WRITE_INDEX,
-                              CX2_TX_QUEUE_1_BD_BASE,
-                              CX2_TX_QUEUE_1_BD_SIZE);
+                              CX2_TX_QUEUE_1_BD_BASE, CX2_TX_QUEUE_1_BD_SIZE);
        if (rc) {
                IPW_ERROR("Tx 1 queue init failed\n");
                goto error;
@@ -3698,8 +3758,7 @@ static int ipw_queue_reset(struct ipw_priv *priv)
        rc = ipw_queue_tx_init(priv, &priv->txq[2], nTx,
                               CX2_TX_QUEUE_2_READ_INDEX,
                               CX2_TX_QUEUE_2_WRITE_INDEX,
-                              CX2_TX_QUEUE_2_BD_BASE,
-                              CX2_TX_QUEUE_2_BD_SIZE);
+                              CX2_TX_QUEUE_2_BD_BASE, CX2_TX_QUEUE_2_BD_SIZE);
        if (rc) {
                IPW_ERROR("Tx 2 queue init failed\n");
                goto error;
@@ -3707,8 +3766,7 @@ static int ipw_queue_reset(struct ipw_priv *priv)
        rc = ipw_queue_tx_init(priv, &priv->txq[3], nTx,
                               CX2_TX_QUEUE_3_READ_INDEX,
                               CX2_TX_QUEUE_3_WRITE_INDEX,
-                              CX2_TX_QUEUE_3_BD_BASE,
-                              CX2_TX_QUEUE_3_BD_SIZE);
+                              CX2_TX_QUEUE_3_BD_BASE, CX2_TX_QUEUE_3_BD_SIZE);
        if (rc) {
                IPW_ERROR("Tx 3 queue init failed\n");
                goto error;
@@ -3718,7 +3776,7 @@ static int ipw_queue_reset(struct ipw_priv *priv)
        priv->rx_pend_max = 0;
        return rc;
 
- error:
     error:
        ipw_tx_queue_free(priv);
        return rc;
 }
@@ -3746,8 +3804,8 @@ static int ipw_queue_tx_reclaim(struct ipw_priv *priv,
        hw_tail = ipw_read32(priv, q->reg_r);
        if (hw_tail >= q->n_bd) {
                IPW_ERROR
-                       ("Read index for DMA queue (%d) is out of range [0-%d)\n",
-                        hw_tail, q->n_bd);
+                   ("Read index for DMA queue (%d) is out of range [0-%d)\n",
+                    hw_tail, q->n_bd);
                goto done;
        }
        for (; q->last_used != hw_tail;
@@ -3755,7 +3813,7 @@ static int ipw_queue_tx_reclaim(struct ipw_priv *priv,
                ipw_queue_tx_free_tfd(priv, txq);
                priv->tx_packets++;
        }
- done:
     done:
        if (ipw_queue_space(q) > q->low_mark && qindex >= 0) {
                __maybe_wake_tx(priv);
        }
@@ -3795,8 +3853,6 @@ static int ipw_queue_tx_hcmd(struct ipw_priv *priv, int hcmd, void *buf,
        return 0;
 }
 
-
-
 /*
  * Rx theory of operation
  *
@@ -3933,9 +3989,9 @@ static void ipw_rx_queue_replenish(void *data)
                list_del(element);
 
                rxb->rxb = (struct ipw_rx_buffer *)rxb->skb->data;
-               rxb->dma_addr = pci_map_single(
-                       priv->pci_dev, rxb->skb->data, CX2_RX_BUF_SIZE,
-                       PCI_DMA_FROMDEVICE);
+               rxb->dma_addr =
+                   pci_map_single(priv->pci_dev, rxb->skb->data,
+                                  CX2_RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
 
                list_add_tail(&rxb->list, &rxq->rx_free);
                rxq->free_count++;
@@ -3950,8 +4006,7 @@ static void ipw_rx_queue_replenish(void *data)
  * This free routine walks the list of POOL entries and if SKB is set to
  * non NULL it is unmapped and freed
  */
-static void ipw_rx_queue_free(struct ipw_priv *priv,
-                             struct ipw_rx_queue *rxq)
+static void ipw_rx_queue_free(struct ipw_priv *priv, struct ipw_rx_queue *rxq)
 {
        int i;
 
@@ -3961,8 +4016,7 @@ static void ipw_rx_queue_free(struct ipw_priv *priv,
        for (i = 0; i < RX_QUEUE_SIZE + RX_FREE_BUFFERS; i++) {
                if (rxq->pool[i].skb != NULL) {
                        pci_unmap_single(priv->pci_dev, rxq->pool[i].dma_addr,
-                                        CX2_RX_BUF_SIZE,
-                                        PCI_DMA_FROMDEVICE);
+                                        CX2_RX_BUF_SIZE, PCI_DMA_FROMDEVICE);
                        dev_kfree_skb(rxq->pool[i].skb);
                }
        }
@@ -4001,28 +4055,28 @@ static int ipw_is_rate_in_mask(struct ipw_priv *priv, int ieee_mode, u8 rate)
                switch (rate) {
                case IEEE80211_OFDM_RATE_6MB:
                        return priv->rates_mask & IEEE80211_OFDM_RATE_6MB_MASK ?
-                               1 : 0;
+                           1 : 0;
                case IEEE80211_OFDM_RATE_9MB:
                        return priv->rates_mask & IEEE80211_OFDM_RATE_9MB_MASK ?
-                               1 : 0;
+                           1 : 0;
                case IEEE80211_OFDM_RATE_12MB:
-                       return priv->rates_mask & IEEE80211_OFDM_RATE_12MB_MASK ?
-                               1 : 0;
+                       return priv->
+                           rates_mask & IEEE80211_OFDM_RATE_12MB_MASK ? 1 : 0;
                case IEEE80211_OFDM_RATE_18MB:
-                       return priv->rates_mask & IEEE80211_OFDM_RATE_18MB_MASK ?
-                               1 : 0;
+                       return priv->
+                           rates_mask & IEEE80211_OFDM_RATE_18MB_MASK ? 1 : 0;
                case IEEE80211_OFDM_RATE_24MB:
-                       return priv->rates_mask & IEEE80211_OFDM_RATE_24MB_MASK ?
-                               1 : 0;
+                       return priv->
+                           rates_mask & IEEE80211_OFDM_RATE_24MB_MASK ? 1 : 0;
                case IEEE80211_OFDM_RATE_36MB:
-                       return priv->rates_mask & IEEE80211_OFDM_RATE_36MB_MASK ?
-                               1 : 0;
+                       return priv->
+                           rates_mask & IEEE80211_OFDM_RATE_36MB_MASK ? 1 : 0;
                case IEEE80211_OFDM_RATE_48MB:
-                       return priv->rates_mask & IEEE80211_OFDM_RATE_48MB_MASK ?
-                               1 : 0;
+                       return priv->
+                           rates_mask & IEEE80211_OFDM_RATE_48MB_MASK ? 1 : 0;
                case IEEE80211_OFDM_RATE_54MB:
-                       return priv->rates_mask & IEEE80211_OFDM_RATE_54MB_MASK ?
-                               1 : 0;
+                       return priv->
+                           rates_mask & IEEE80211_OFDM_RATE_54MB_MASK ? 1 : 0;
                default:
                        return 0;
                }
@@ -4074,10 +4128,11 @@ static int ipw_compatible_rates(struct ipw_priv *priv,
        int num_rates, i;
 
        memset(rates, 0, sizeof(*rates));
-       num_rates = min(network->rates_len, (u8)IPW_MAX_RATES);
+       num_rates = min(network->rates_len, (u8) IPW_MAX_RATES);
        rates->num_rates = 0;
        for (i = 0; i < num_rates; i++) {
-               if (!ipw_is_rate_in_mask(priv, network->mode, network->rates[i])) {
+               if (!ipw_is_rate_in_mask
+                   (priv, network->mode, network->rates[i])) {
                        IPW_DEBUG_SCAN("Rate %02X masked : 0x%08X\n",
                                       network->rates[i], priv->rates_mask);
                        continue;
@@ -4086,15 +4141,18 @@ static int ipw_compatible_rates(struct ipw_priv *priv,
                rates->supported_rates[rates->num_rates++] = network->rates[i];
        }
 
-       num_rates = min(network->rates_ex_len, (u8)(IPW_MAX_RATES - num_rates));
+       num_rates =
+           min(network->rates_ex_len, (u8) (IPW_MAX_RATES - num_rates));
        for (i = 0; i < num_rates; i++) {
-               if (!ipw_is_rate_in_mask(priv, network->mode, network->rates_ex[i])) {
+               if (!ipw_is_rate_in_mask
+                   (priv, network->mode, network->rates_ex[i])) {
                        IPW_DEBUG_SCAN("Rate %02X masked : 0x%08X\n",
                                       network->rates_ex[i], priv->rates_mask);
                        continue;
                }
 
-               rates->supported_rates[rates->num_rates++] = network->rates_ex[i];
+               rates->supported_rates[rates->num_rates++] =
+                   network->rates_ex[i];
        }
 
        return rates->num_rates;
@@ -4113,65 +4171,65 @@ static inline void ipw_copy_rates(struct ipw_supported_rates *dest,
  * mask should ever be used -- right now all callers to add the scan rates are
  * set with the modulation = CCK, so BASIC_RATE_MASK is never set... */
 static void ipw_add_cck_scan_rates(struct ipw_supported_rates *rates,
-                              u8 modulation, u32 rate_mask)
+                                  u8 modulation, u32 rate_mask)
 {
        u8 basic_mask = (IEEE80211_OFDM_MODULATION == modulation) ?
-               IEEE80211_BASIC_RATE_MASK : 0;
+           IEEE80211_BASIC_RATE_MASK : 0;
 
        if (rate_mask & IEEE80211_CCK_RATE_1MB_MASK)
                rates->supported_rates[rates->num_rates++] =
-                       IEEE80211_BASIC_RATE_MASK | IEEE80211_CCK_RATE_1MB;
+                   IEEE80211_BASIC_RATE_MASK | IEEE80211_CCK_RATE_1MB;
 
        if (rate_mask & IEEE80211_CCK_RATE_2MB_MASK)
                rates->supported_rates[rates->num_rates++] =
-                       IEEE80211_BASIC_RATE_MASK | IEEE80211_CCK_RATE_2MB;
+                   IEEE80211_BASIC_RATE_MASK | IEEE80211_CCK_RATE_2MB;
 
        if (rate_mask & IEEE80211_CCK_RATE_5MB_MASK)
                rates->supported_rates[rates->num_rates++] = basic_mask |
-                       IEEE80211_CCK_RATE_5MB;
+                   IEEE80211_CCK_RATE_5MB;
 
        if (rate_mask & IEEE80211_CCK_RATE_11MB_MASK)
                rates->supported_rates[rates->num_rates++] = basic_mask |
-                       IEEE80211_CCK_RATE_11MB;
+                   IEEE80211_CCK_RATE_11MB;
 }
 
 static void ipw_add_ofdm_scan_rates(struct ipw_supported_rates *rates,
-                               u8 modulation, u32 rate_mask)
+                                   u8 modulation, u32 rate_mask)
 {
        u8 basic_mask = (IEEE80211_OFDM_MODULATION == modulation) ?
-               IEEE80211_BASIC_RATE_MASK : 0;
+           IEEE80211_BASIC_RATE_MASK : 0;
 
        if (rate_mask & IEEE80211_OFDM_RATE_6MB_MASK)
                rates->supported_rates[rates->num_rates++] = basic_mask |
-                       IEEE80211_OFDM_RATE_6MB;
+                   IEEE80211_OFDM_RATE_6MB;
 
        if (rate_mask & IEEE80211_OFDM_RATE_9MB_MASK)
                rates->supported_rates[rates->num_rates++] =
-                       IEEE80211_OFDM_RATE_9MB;
+                   IEEE80211_OFDM_RATE_9MB;
 
        if (rate_mask & IEEE80211_OFDM_RATE_12MB_MASK)
                rates->supported_rates[rates->num_rates++] = basic_mask |
-                       IEEE80211_OFDM_RATE_12MB;
+                   IEEE80211_OFDM_RATE_12MB;
 
        if (rate_mask & IEEE80211_OFDM_RATE_18MB_MASK)
                rates->supported_rates[rates->num_rates++] =
-                       IEEE80211_OFDM_RATE_18MB;
+                   IEEE80211_OFDM_RATE_18MB;
 
        if (rate_mask & IEEE80211_OFDM_RATE_24MB_MASK)
                rates->supported_rates[rates->num_rates++] = basic_mask |
-                       IEEE80211_OFDM_RATE_24MB;
+                   IEEE80211_OFDM_RATE_24MB;
 
        if (rate_mask & IEEE80211_OFDM_RATE_36MB_MASK)
                rates->supported_rates[rates->num_rates++] =
-                       IEEE80211_OFDM_RATE_36MB;
+                   IEEE80211_OFDM_RATE_36MB;
 
        if (rate_mask & IEEE80211_OFDM_RATE_48MB_MASK)
                rates->supported_rates[rates->num_rates++] =
-                       IEEE80211_OFDM_RATE_48MB;
+                   IEEE80211_OFDM_RATE_48MB;
 
        if (rate_mask & IEEE80211_OFDM_RATE_54MB_MASK)
                rates->supported_rates[rates->num_rates++] =
-                       IEEE80211_OFDM_RATE_54MB;
+                   IEEE80211_OFDM_RATE_54MB;
 }
 
 struct ipw_network_match {
@@ -4179,11 +4237,9 @@ struct ipw_network_match {
        struct ipw_supported_rates rates;
 };
 
-static int ipw_best_network(
-       struct ipw_priv *priv,
-       struct ipw_network_match *match,
-       struct ieee80211_network *network,
-       int roaming)
+static int ipw_best_network(struct ipw_priv *priv,
+                           struct ipw_network_match *match,
+                           struct ieee80211_network *network, int roaming)
 {
        struct ipw_supported_rates rates;
 
@@ -4231,21 +4287,21 @@ static int ipw_best_network(
                     memcmp(network->ssid, priv->essid,
                            min(network->ssid_len, priv->essid_len)))) {
                        char escaped[IW_ESSID_MAX_SIZE * 2 + 1];
-                       strncpy(escaped, escape_essid(
-                                       network->ssid, network->ssid_len),
+                       strncpy(escaped,
+                               escape_essid(network->ssid, network->ssid_len),
                                sizeof(escaped));
                        IPW_DEBUG_ASSOC("Network '%s (" MAC_FMT ")' excluded "
                                        "because of ESSID mismatch: '%s'.\n",
                                        escaped, MAC_ARG(network->bssid),
-                                       escape_essid(priv->essid, priv->essid_len));
+                                       escape_essid(priv->essid,
+                                                    priv->essid_len));
                        return 0;
                }
        }
 
        /* If the old network rate is better than this one, don't bother
         * testing everything else. */
-       if (match->network && match->network->stats.rssi >
-           network->stats.rssi) {
+       if (match->network && match->network->stats.rssi > network->stats.rssi) {
                char escaped[IW_ESSID_MAX_SIZE * 2 + 1];
                strncpy(escaped,
                        escape_essid(network->ssid, network->ssid_len),
@@ -4303,7 +4359,7 @@ static int ipw_best_network(
                                priv->capability & CAP_PRIVACY_ON ? "on" :
                                "off",
                                network->capability &
-                               WLAN_CAPABILITY_PRIVACY ?"on" : "off");
+                               WLAN_CAPABILITY_PRIVACY ? "on" : "off");
                return 0;
        }
 
@@ -4312,8 +4368,7 @@ static int ipw_best_network(
                IPW_DEBUG_ASSOC("Network '%s (" MAC_FMT ")' excluded "
                                "because of BSSID mismatch: " MAC_FMT ".\n",
                                escape_essid(network->ssid, network->ssid_len),
-                               MAC_ARG(network->bssid),
-                               MAC_ARG(priv->bssid));
+                               MAC_ARG(network->bssid), MAC_ARG(priv->bssid));
                return 0;
        }
 
@@ -4351,9 +4406,8 @@ static int ipw_best_network(
        return 1;
 }
 
-
 static void ipw_adhoc_create(struct ipw_priv *priv,
-                           struct ieee80211_network *network)
+                            struct ieee80211_network *network)
 {
        /*
         * For the purposes of scanning, we can set our wireless mode
@@ -4393,8 +4447,7 @@ static void ipw_adhoc_create(struct ipw_priv *priv,
        if (priv->capability & CAP_PRIVACY_ON)
                network->capability |= WLAN_CAPABILITY_PRIVACY;
        network->rates_len = min(priv->rates.num_rates, MAX_RATES_LENGTH);
-       memcpy(network->rates, priv->rates.supported_rates,
-              network->rates_len);
+       memcpy(network->rates, priv->rates.supported_rates, network->rates_len);
        network->rates_ex_len = priv->rates.num_rates - network->rates_len;
        memcpy(network->rates_ex,
               &priv->rates.supported_rates[network->rates_len],
@@ -4404,13 +4457,13 @@ static void ipw_adhoc_create(struct ipw_priv *priv,
        network->last_associate = 0;
        network->time_stamp[0] = 0;
        network->time_stamp[1] = 0;
-       network->beacon_interval = 100; /* Default */
-       network->listen_interval = 10;  /* Default */
-       network->atim_window = 0;       /* Default */
+       network->beacon_interval = 100; /* Default */
+       network->listen_interval = 10;  /* Default */
+       network->atim_window = 0;       /* Default */
 #ifdef CONFIG_IEEE80211_WPA
        network->wpa_ie_len = 0;
        network->rsn_ie_len = 0;
-#endif /* CONFIG_IEEE80211_WPA */
+#endif                         /* CONFIG_IEEE80211_WPA */
 }
 
 static void ipw_send_wep_keys(struct ipw_priv *priv)
@@ -4464,14 +4517,12 @@ static void ipw_debug_config(struct ipw_priv *priv)
        IPW_DEBUG_INFO("Scan completed, no valid APs matched "
                       "[CFG 0x%08X]\n", priv->config);
        if (priv->config & CFG_STATIC_CHANNEL)
-               IPW_DEBUG_INFO("Channel locked to %d\n",
-                              priv->channel);
+               IPW_DEBUG_INFO("Channel locked to %d\n", priv->channel);
        else
                IPW_DEBUG_INFO("Channel unlocked.\n");
        if (priv->config & CFG_STATIC_ESSID)
                IPW_DEBUG_INFO("ESSID locked to '%s'\n",
-                              escape_essid(priv->essid,
-                                           priv->essid_len));
+                              escape_essid(priv->essid, priv->essid_len));
        else
                IPW_DEBUG_INFO("ESSID unlocked.\n");
        if (priv->config & CFG_STATIC_BSSID)
@@ -4502,7 +4553,7 @@ static inline void ipw_set_fixed_rate(struct ipw_priv *priv,
         * Tx rates */
 
        switch (priv->ieee->freq_band) {
-       case IEEE80211_52GHZ_BAND: /* A only */
+       case IEEE80211_52GHZ_BAND:      /* A only */
                /* IEEE_A */
                if (priv->rates_mask & ~IEEE80211_OFDM_RATES_MASK) {
                        /* Invalid fixed rate mask */
@@ -4513,7 +4564,7 @@ static inline void ipw_set_fixed_rate(struct ipw_priv *priv,
                fr.tx_rates >>= IEEE80211_OFDM_SHIFT_MASK_A;
                break;
 
-       default: /* 2.4Ghz or Mixed */
+       default:                /* 2.4Ghz or Mixed */
                /* IEEE_B */
                if (network->mode == IEEE_B) {
                        if (fr.tx_rates & ~IEEE80211_CCK_RATES_MASK) {
@@ -4551,13 +4602,12 @@ static inline void ipw_set_fixed_rate(struct ipw_priv *priv,
        }
 
        reg = ipw_read32(priv, IPW_MEM_FIXED_OVERRIDE);
-       ipw_write_reg32(priv, reg, *(u32*)&fr);
+       ipw_write_reg32(priv, reg, *(u32 *) & fr);
 }
 
 static int ipw_associate_network(struct ipw_priv *priv,
                                 struct ieee80211_network *network,
-                                struct ipw_supported_rates *rates,
-                                int roaming)
+                                struct ipw_supported_rates *rates, int roaming)
 {
        int err;
 
@@ -4566,7 +4616,7 @@ static int ipw_associate_network(struct ipw_priv *priv,
 
        if (!(priv->config & CFG_STATIC_ESSID)) {
                priv->essid_len = min(network->ssid_len,
-                                     (u8)IW_ESSID_MAX_SIZE);
+                                     (u8) IW_ESSID_MAX_SIZE);
                memcpy(priv->essid, network->ssid, priv->essid_len);
        }
 
@@ -4612,13 +4662,11 @@ static int ipw_associate_network(struct ipw_priv *priv,
                        priv->capability & CAP_PRIVACY_ON ? " key=" : "",
                        priv->capability & CAP_PRIVACY_ON ?
                        '1' + priv->sec.active_key : '.',
-                       priv->capability & CAP_PRIVACY_ON ?
-                       '.' : ' ');
+                       priv->capability & CAP_PRIVACY_ON ? '.' : ' ');
 
        priv->assoc_request.beacon_interval = network->beacon_interval;
        if ((priv->ieee->iw_mode == IW_MODE_ADHOC) &&
-           (network->time_stamp[0] == 0) &&
-           (network->time_stamp[1] == 0)) {
+           (network->time_stamp[0] == 0) && (network->time_stamp[1] == 0)) {
                priv->assoc_request.assoc_type = HC_IBSS_START;
                priv->assoc_request.assoc_tsf_msw = 0;
                priv->assoc_request.assoc_tsf_lsw = 0;
@@ -4637,8 +4685,7 @@ static int ipw_associate_network(struct ipw_priv *priv,
                memset(&priv->assoc_request.dest, 0xFF, ETH_ALEN);
                priv->assoc_request.atim_window = network->atim_window;
        } else {
-               memcpy(&priv->assoc_request.dest, network->bssid,
-                      ETH_ALEN);
+               memcpy(&priv->assoc_request.dest, network->bssid, ETH_ALEN);
                priv->assoc_request.atim_window = 0;
        }
 
@@ -4772,14 +4819,13 @@ static void ipw_associate(void *data)
 
        if (!(priv->config & CFG_ASSOCIATE) &&
            !(priv->config & (CFG_STATIC_ESSID |
-                             CFG_STATIC_CHANNEL |
-                             CFG_STATIC_BSSID))) {
+                             CFG_STATIC_CHANNEL | CFG_STATIC_BSSID))) {
                IPW_DEBUG_ASSOC("Not attempting association (associate=0)\n");
                return;
        }
 
        list_for_each_entry(network, &priv->ieee->network_list, list)
-               ipw_best_network(priv, &match, network, 0);
+           ipw_best_network(priv, &match, network, 0);
 
        network = match.network;
        rates = &match.rates;
@@ -4790,8 +4836,7 @@ static void ipw_associate(void *data)
            priv->config & CFG_STATIC_ESSID &&
            !list_empty(&priv->ieee->network_free_list)) {
                element = priv->ieee->network_free_list.next;
-               network = list_entry(element, struct ieee80211_network,
-                                    list);
+               network = list_entry(element, struct ieee80211_network, list);
                ipw_adhoc_create(priv, network);
                rates = &priv->rates;
                list_del(element);
@@ -4813,8 +4858,8 @@ static void ipw_associate(void *data)
 }
 
 static inline void ipw_handle_data_packet(struct ipw_priv *priv,
-                                             struct ipw_rx_mem_buffer *rxb,
-                                             struct ieee80211_rx_stats *stats)
+                                         struct ipw_rx_mem_buffer *rxb,
+                                         struct ieee80211_rx_stats *stats)
 {
        struct ipw_rx_packet *pkt = (struct ipw_rx_packet *)rxb->skb->data;
 
@@ -4846,11 +4891,10 @@ static inline void ipw_handle_data_packet(struct ipw_priv *priv,
 
        if (!ieee80211_rx(priv->ieee, rxb->skb, stats))
                priv->ieee->stats.rx_errors++;
-       else /* ieee80211_rx succeeded, so it now owns the SKB */
+       else                    /* ieee80211_rx succeeded, so it now owns the SKB */
                rxb->skb = NULL;
 }
 
-
 /*
  * Main entry function for recieving a packet with 80211 headers.  This
  * should be called when ever the FW has notified us that there is a new
@@ -4885,125 +4929,152 @@ static void ipw_rx(struct ipw_priv *priv)
                pkt = (struct ipw_rx_packet *)rxb->skb->data;
                IPW_DEBUG_RX("Packet: type=%02X seq=%02X bits=%02X\n",
                             pkt->header.message_type,
-                            pkt->header.rx_seq_num,
-                            pkt->header.control_bits);
+                            pkt->header.rx_seq_num, pkt->header.control_bits);
 
                switch (pkt->header.message_type) {
-               case RX_FRAME_TYPE: /* 802.11 frame */ {
-                       struct ieee80211_rx_stats stats = {
-                               .rssi = pkt->u.frame.rssi_dbm -
-                               IPW_RSSI_TO_DBM,
-                               .signal = pkt->u.frame.signal,
-                               .rate = pkt->u.frame.rate,
-                               .mac_time = jiffies,
-                               .received_channel =
-                               pkt->u.frame.received_channel,
-                               .freq = (pkt->u.frame.control & (1<<0)) ?
-                               IEEE80211_24GHZ_BAND : IEEE80211_52GHZ_BAND,
-                               .len = pkt->u.frame.length,
-                       };
-
-                       if (stats.rssi != 0)
-                               stats.mask |= IEEE80211_STATMASK_RSSI;
-                       if (stats.signal != 0)
-                               stats.mask |= IEEE80211_STATMASK_SIGNAL;
-                       if (stats.rate != 0)
-                               stats.mask |= IEEE80211_STATMASK_RATE;
-
-                       priv->rx_packets++;
+               case RX_FRAME_TYPE:     /* 802.11 frame */  {
+                               struct ieee80211_rx_stats stats = {
+                                       .rssi = pkt->u.frame.rssi_dbm -
+                                           IPW_RSSI_TO_DBM,
+                                       .signal = pkt->u.frame.signal,
+                                       .rate = pkt->u.frame.rate,
+                                       .mac_time = jiffies,
+                                       .received_channel =
+                                           pkt->u.frame.received_channel,
+                                       .freq =
+                                           (pkt->u.frame.
+                                            control & (1 << 0)) ?
+                                           IEEE80211_24GHZ_BAND :
+                                           IEEE80211_52GHZ_BAND,
+                                       .len = pkt->u.frame.length,
+                               };
+
+                               if (stats.rssi != 0)
+                                       stats.mask |= IEEE80211_STATMASK_RSSI;
+                               if (stats.signal != 0)
+                                       stats.mask |= IEEE80211_STATMASK_SIGNAL;
+                               if (stats.rate != 0)
+                                       stats.mask |= IEEE80211_STATMASK_RATE;
+
+                               priv->rx_packets++;
 
 #ifdef CONFIG_IPW_PROMISC
-                       if (priv->ieee->iw_mode == IW_MODE_MONITOR) {
-                               ipw_handle_data_packet(priv, rxb, &stats);
-                               break;
-                       }
+                               if (priv->ieee->iw_mode == IW_MODE_MONITOR) {
+                                       ipw_handle_data_packet(priv, rxb,
+                                                              &stats);
+                                       break;
+                               }
 #endif
 
-                       header = (struct ieee80211_hdr *)(rxb->skb->data +
-                                                         IPW_RX_FRAME_SIZE);
+                               header =
+                                   (struct ieee80211_hdr *)(rxb->skb->data +
+                                                            IPW_RX_FRAME_SIZE);
                                /* TODO: Check Ad-Hoc dest/source and make sure
                                 * that we are actually parsing these packets
                                 * correctly -- we should probably use the
                                 * frame control of the packet and disregard
                                 * the current iw_mode */
-                       switch (priv->ieee->iw_mode) {
-                       case IW_MODE_ADHOC:
-                               network_packet =
-                                       !memcmp(header->addr1,
-                                               priv->net_dev->dev_addr,
-                                               ETH_ALEN) ||
-                                       !memcmp(header->addr3,
-                                               priv->bssid, ETH_ALEN) ||
-                                       is_broadcast_ether_addr(header->addr1) ||
-                                       is_multicast_ether_addr(header->addr1);
-                               break;
-
-                       case IW_MODE_INFRA:
-                       default:
-                               network_packet =
-                                       !memcmp(header->addr3,
-                                               priv->bssid, ETH_ALEN) ||
-                                       !memcmp(header->addr1,
-                                               priv->net_dev->dev_addr,
-                                               ETH_ALEN) ||
-                                       is_broadcast_ether_addr(header->addr1) ||
-                                       is_multicast_ether_addr(header->addr1);
+                               switch (priv->ieee->iw_mode) {
+                               case IW_MODE_ADHOC:
+                                       network_packet =
+                                           !memcmp(header->addr1,
+                                                   priv->net_dev->dev_addr,
+                                                   ETH_ALEN) ||
+                                           !memcmp(header->addr3,
+                                                   priv->bssid, ETH_ALEN) ||
+                                           is_broadcast_ether_addr(header->
+                                                                   addr1)
+                                           || is_multicast_ether_addr(header->
+                                                                      addr1);
+                                       break;
+
+                               case IW_MODE_INFRA:
+                               default:
+                                       network_packet =
+                                           !memcmp(header->addr3,
+                                                   priv->bssid, ETH_ALEN) ||
+                                           !memcmp(header->addr1,
+                                                   priv->net_dev->dev_addr,
+                                                   ETH_ALEN) ||
+                                           is_broadcast_ether_addr(header->
+                                                                   addr1)
+                                           || is_multicast_ether_addr(header->
+                                                                      addr1);
+                                       break;
+                               }
+
+                               if (network_packet && priv->assoc_network) {
+                                       priv->assoc_network->stats.rssi =
+                                           stats.rssi;
+                                       average_add(&priv->average_rssi,
+                                                   stats.rssi);
+                                       priv->last_rx_rssi = stats.rssi;
+                               }
+
+                               IPW_DEBUG_RX("Frame: len=%u\n",
+                                            pkt->u.frame.length);
+
+                               if (pkt->u.frame.length < frame_hdr_len(header)) {
+                                       IPW_DEBUG_DROP
+                                           ("Received packet is too small. "
+                                            "Dropping.\n");
+                                       priv->ieee->stats.rx_errors++;
+                                       priv->wstats.discard.misc++;
+                                       break;
+                               }
+
+                               switch (WLAN_FC_GET_TYPE(header->frame_ctl)) {
+                               case IEEE80211_FTYPE_MGMT:
+                                       ieee80211_rx_mgt(priv->ieee, header,
+                                                        &stats);
+                                       if (priv->ieee->iw_mode == IW_MODE_ADHOC
+                                           &&
+                                           ((WLAN_FC_GET_STYPE
+                                             (header->frame_ctl) ==
+                                             IEEE80211_STYPE_PROBE_RESP)
+                                            ||
+                                            (WLAN_FC_GET_STYPE
+                                             (header->frame_ctl) ==
+                                             IEEE80211_STYPE_BEACON))
+                                           && !memcmp(header->addr3,
+                                                      priv->bssid, ETH_ALEN))
+                                               ipw_add_station(priv,
+                                                               header->addr2);
+                                       break;
+
+                               case IEEE80211_FTYPE_CTL:
+                                       break;
+
+                               case IEEE80211_FTYPE_DATA:
+                                       if (network_packet)
+                                               ipw_handle_data_packet(priv,
+                                                                      rxb,
+                                                                      &stats);
+                                       else
+                                               IPW_DEBUG_DROP("Dropping: "
+                                                              MAC_FMT ", "
+                                                              MAC_FMT ", "
+                                                              MAC_FMT "\n",
+                                                              MAC_ARG(header->
+                                                                      addr1),
+                                                              MAC_ARG(header->
+                                                                      addr2),
+                                                              MAC_ARG(header->
+                                                                      addr3));
+                                       break;
+                               }
                                break;
                        }
 
-                       if (network_packet && priv->assoc_network) {
-                               priv->assoc_network->stats.rssi = stats.rssi;
-                               average_add(&priv->average_rssi,
-                                           stats.rssi);
-                               priv->last_rx_rssi = stats.rssi;
-                       }
-
-                       IPW_DEBUG_RX("Frame: len=%u\n", pkt->u.frame.length);
-
-                       if (pkt->u.frame.length < frame_hdr_len(header)) {
-                               IPW_DEBUG_DROP("Received packet is too small. "
-                                              "Dropping.\n");
-                               priv->ieee->stats.rx_errors++;
-                               priv->wstats.discard.misc++;
-                               break;
-                       }
-
-                       switch (WLAN_FC_GET_TYPE(header->frame_ctl)) {
-                       case IEEE80211_FTYPE_MGMT:
-                               ieee80211_rx_mgt(priv->ieee, header, &stats);
-                               if (priv->ieee->iw_mode == IW_MODE_ADHOC &&
-                                   ((WLAN_FC_GET_STYPE(header->frame_ctl) ==
-                                     IEEE80211_STYPE_PROBE_RESP) ||
-                                    (WLAN_FC_GET_STYPE(header->frame_ctl) ==
-                                     IEEE80211_STYPE_BEACON)) &&
-                                   !memcmp(header->addr3, priv->bssid, ETH_ALEN))
-                                       ipw_add_station(priv, header->addr2);
-                               break;
-
-                       case IEEE80211_FTYPE_CTL:
-                               break;
-
-                       case IEEE80211_FTYPE_DATA:
-                               if (network_packet)
-                                       ipw_handle_data_packet(priv, rxb, &stats);
-                               else
-                                       IPW_DEBUG_DROP("Dropping: " MAC_FMT
-                                                      ", " MAC_FMT ", " MAC_FMT "\n",
-                                                      MAC_ARG(header->addr1), MAC_ARG(header->addr2),
-                                                      MAC_ARG(header->addr3));
-                               break;
-                       }
-                       break;
-               }
-
-               case RX_HOST_NOTIFICATION_TYPE: {
-                       IPW_DEBUG_RX("Notification: subtype=%02X flags=%02X size=%d\n",
+               case RX_HOST_NOTIFICATION_TYPE:{
+                               IPW_DEBUG_RX
+                                   ("Notification: subtype=%02X flags=%02X size=%d\n",
                                     pkt->u.notification.subtype,
                                     pkt->u.notification.flags,
                                     pkt->u.notification.size);
-                       ipw_rx_notification(priv, &pkt->u.notification);
-                       break;
-               }
+                               ipw_rx_notification(priv, &pkt->u.notification);
+                               break;
+                       }
 
                default:
                        IPW_DEBUG_RX("Bad Rx packet of type %d\n",
@@ -5088,10 +5159,10 @@ static int ipw_request_scan(struct ipw_priv *priv)
        /* If we are roaming, then make this a directed scan for the current
         * network.  Otherwise, ensure that every other scan is a fast
         * channel hop scan */
-       if ((priv->status & STATUS_ROAMING) || (
-                   !(priv->status & STATUS_ASSOCIATED) &&
-                   (priv->config & CFG_STATIC_ESSID) &&
-                   (scan.full_scan_index % 2))) {
+       if ((priv->status & STATUS_ROAMING)
+           || (!(priv->status & STATUS_ASSOCIATED)
+               && (priv->config & CFG_STATIC_ESSID)
+               && (scan.full_scan_index % 2))) {
                err = ipw_send_ssid(priv, priv->essid, priv->essid_len);
                if (err) {
                        IPW_DEBUG_HC("Attempt to send SSID command failed.\n");
@@ -5103,7 +5174,7 @@ static int ipw_request_scan(struct ipw_priv *priv)
                scan_type = IPW_SCAN_ACTIVE_BROADCAST_SCAN;
        }
 
-        if (priv->ieee->freq_band & IEEE80211_52GHZ_BAND) {
+       if (priv->ieee->freq_band & IEEE80211_52GHZ_BAND) {
                int start = channel_index;
                for (i = 0; i < MAX_A_CHANNELS; i++) {
                        if (band_a_active_channel[i] == 0)
@@ -5113,18 +5184,18 @@ static int ipw_request_scan(struct ipw_priv *priv)
                                continue;
                        channel_index++;
                        scan.channels_list[channel_index] =
-                               band_a_active_channel[i];
+                           band_a_active_channel[i];
                        ipw_set_scan_type(&scan, channel_index, scan_type);
                }
 
                if (start != channel_index) {
-                       scan.channels_list[start] = (u8)(IPW_A_MODE << 6) |
-                               (channel_index - start);
+                       scan.channels_list[start] = (u8) (IPW_A_MODE << 6) |
+                           (channel_index - start);
                        channel_index++;
                }
        }
 
-        if (priv->ieee->freq_band & IEEE80211_24GHZ_BAND) {
+       if (priv->ieee->freq_band & IEEE80211_24GHZ_BAND) {
                int start = channel_index;
                for (i = 0; i < MAX_B_CHANNELS; i++) {
                        if (band_b_active_channel[i] == 0)
@@ -5134,20 +5205,19 @@ static int ipw_request_scan(struct ipw_priv *priv)
                                continue;
                        channel_index++;
                        scan.channels_list[channel_index] =
-                               band_b_active_channel[i];
+                           band_b_active_channel[i];
                        ipw_set_scan_type(&scan, channel_index, scan_type);
                }
 
                if (start != channel_index) {
-                       scan.channels_list[start] = (u8)(IPW_B_MODE << 6) |
-                               (channel_index - start);
+                       scan.channels_list[start] = (u8) (IPW_B_MODE << 6) |
+                           (channel_index - start);
                }
        }
 
        err = ipw_send_scan_request_ext(priv, &scan);
        if (err) {
-               IPW_DEBUG_HC("Sending scan command failed: %08X\n",
-                            err);
+               IPW_DEBUG_HC("Sending scan command failed: %08X\n", err);
                return -EIO;
        }
 
@@ -5199,9 +5269,8 @@ static int ipw_set_channel(struct ipw_priv *priv, u8 channel)
        priv->config |= CFG_STATIC_CHANNEL;
 
        if (priv->channel == channel) {
-               IPW_DEBUG_INFO(
-                       "Request to set channel to current value (%d)\n",
-                       channel);
+               IPW_DEBUG_INFO("Request to set channel to current value (%d)\n",
+                              channel);
                return 0;
        }
 
@@ -5229,8 +5298,7 @@ static int ipw_wx_set_freq(struct net_device *dev,
 
        /* if setting by freq convert to channel */
        if (fwrq->e == 1) {
-               if ((fwrq->m >= (int) 2.412e8 &&
-                    fwrq->m <= (int) 2.487e8)) {
+               if ((fwrq->m >= (int)2.412e8 && fwrq->m <= (int)2.487e8)) {
                        int f = fwrq->m / 100000;
                        int c = 0;
 
@@ -5248,12 +5316,11 @@ static int ipw_wx_set_freq(struct net_device *dev,
                return -EOPNOTSUPP;
 
        IPW_DEBUG_WX("SET Freq/Channel -> %d \n", fwrq->m);
-       return ipw_set_channel(priv, (u8)fwrq->m);
+       return ipw_set_channel(priv, (u8) fwrq->m);
 
        return 0;
 }
 
-
 static int ipw_wx_get_freq(struct net_device *dev,
                           struct iw_request_info *info,
                           union iwreq_data *wrqu, char *extra)
@@ -5306,7 +5373,7 @@ static int ipw_wx_set_mode(struct net_device *dev,
 
        if (wrqu->mode == IW_MODE_MONITOR)
                priv->net_dev->type = ARPHRD_IEEE80211;
-#endif /* CONFIG_IPW_PROMISC */
+#endif                         /* CONFIG_IPW_PROMISC */
 
 #ifdef CONFIG_PM
        /* Free the existing firmware and reset the fw_loaded
@@ -5324,12 +5391,12 @@ static int ipw_wx_set_mode(struct net_device *dev,
        priv->ieee->iw_mode = wrqu->mode;
        ipw_adapter_restart(priv);
 
-       return err;
+       return err;
 }
 
 static int ipw_wx_get_mode(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
+                          struct iw_request_info *info,
+                          union iwreq_data *wrqu, char *extra)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
 
@@ -5339,7 +5406,6 @@ static int ipw_wx_get_mode(struct net_device *dev,
        return 0;
 }
 
-
 #define DEFAULT_RTS_THRESHOLD     2304U
 #define MIN_RTS_THRESHOLD         1U
 #define MAX_RTS_THRESHOLD         2304U
@@ -5383,19 +5449,19 @@ static int ipw_wx_get_range(struct net_device *dev,
        /* TODO: Find real max RSSI and stick here */
        range->max_qual.level = 0;
        range->max_qual.noise = 0;
-       range->max_qual.updated = 7; /* Updated all three */
+       range->max_qual.updated = 7;    /* Updated all three */
 
        range->avg_qual.qual = 70;
        /* TODO: Find real 'good' to 'bad' threshol value for RSSI */
-       range->avg_qual.level = 0; /* FIXME to real average level */
+       range->avg_qual.level = 0;      /* FIXME to real average level */
        range->avg_qual.noise = 0;
-       range->avg_qual.updated = 7; /* Updated all three */
+       range->avg_qual.updated = 7;    /* Updated all three */
 
-       range->num_bitrates = min(priv->rates.num_rates, (u8)IW_MAX_BITRATES);
+       range->num_bitrates = min(priv->rates.num_rates, (u8) IW_MAX_BITRATES);
 
        for (i = 0; i < range->num_bitrates; i++)
                range->bitrate[i] = (priv->rates.supported_rates[i] & 0x7F) *
-                       500000;
+                   500000;
 
        range->max_rts = DEFAULT_RTS_THRESHOLD;
        range->min_frag = MIN_FRAG_THRESHOLD;
@@ -5410,7 +5476,7 @@ static int ipw_wx_get_range(struct net_device *dev,
        range->we_version_compiled = WIRELESS_EXT;
        range->we_version_source = 16;
 
-        range->num_channels = FREQ_COUNT;
+       range->num_channels = FREQ_COUNT;
 
        val = 0;
        for (i = 0; i < FREQ_COUNT; i++) {
@@ -5506,7 +5572,7 @@ static int ipw_wx_set_essid(struct net_device *dev,
                            union iwreq_data *wrqu, char *extra)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
-       char *essid = ""; /* ANY */
+       char *essid = "";       /* ANY */
        int length = 0;
 
        if (wrqu->essid.flags && wrqu->essid.length) {
@@ -5567,11 +5633,11 @@ static int ipw_wx_get_essid(struct net_device *dev,
                             escape_essid(priv->essid, priv->essid_len));
                memcpy(extra, priv->essid, priv->essid_len);
                wrqu->essid.length = priv->essid_len;
-               wrqu->essid.flags = 1; /* active */
+               wrqu->essid.flags = 1;  /* active */
        } else {
                IPW_DEBUG_WX("Getting essid: ANY\n");
                wrqu->essid.length = 0;
-               wrqu->essid.flags = 0; /* active */
+               wrqu->essid.flags = 0;  /* active */
        }
 
        return 0;
@@ -5587,15 +5653,14 @@ static int ipw_wx_set_nick(struct net_device *dev,
        if (wrqu->data.length > IW_ESSID_MAX_SIZE)
                return -E2BIG;
 
-       wrqu->data.length = min((size_t)wrqu->data.length, sizeof(priv->nick));
+       wrqu->data.length = min((size_t) wrqu->data.length, sizeof(priv->nick));
        memset(priv->nick, 0, sizeof(priv->nick));
-       memcpy(priv->nick, extra,  wrqu->data.length);
+       memcpy(priv->nick, extra, wrqu->data.length);
        IPW_DEBUG_TRACE("<<\n");
        return 0;
 
 }
 
-
 static int ipw_wx_get_nick(struct net_device *dev,
                           struct iw_request_info *info,
                           union iwreq_data *wrqu, char *extra)
@@ -5604,11 +5669,10 @@ static int ipw_wx_get_nick(struct net_device *dev,
        IPW_DEBUG_WX("Getting nick\n");
        wrqu->data.length = strlen(priv->nick) + 1;
        memcpy(extra, priv->nick, wrqu->data.length);
-       wrqu->data.flags = 1; /* active */
+       wrqu->data.flags = 1;   /* active */
        return 0;
 }
 
-
 static int ipw_wx_set_rate(struct net_device *dev,
                           struct iw_request_info *info,
                           union iwreq_data *wrqu, char *extra)
@@ -5621,14 +5685,13 @@ static int ipw_wx_get_rate(struct net_device *dev,
                           struct iw_request_info *info,
                           union iwreq_data *wrqu, char *extra)
 {
-       struct ipw_priv * priv = ieee80211_priv(dev);
+       struct ipw_priv *priv = ieee80211_priv(dev);
        wrqu->bitrate.value = priv->last_rate;
 
        IPW_DEBUG_WX("GET Rate -> %d \n", wrqu->bitrate.value);
        return 0;
 }
 
-
 static int ipw_wx_set_rts(struct net_device *dev,
                          struct iw_request_info *info,
                          union iwreq_data *wrqu, char *extra)
@@ -5657,14 +5720,12 @@ static int ipw_wx_get_rts(struct net_device *dev,
        struct ipw_priv *priv = ieee80211_priv(dev);
        wrqu->rts.value = priv->rts_threshold;
        wrqu->rts.fixed = 0;    /* no auto select */
-       wrqu->rts.disabled =
-               (wrqu->rts.value == DEFAULT_RTS_THRESHOLD);
+       wrqu->rts.disabled = (wrqu->rts.value == DEFAULT_RTS_THRESHOLD);
 
        IPW_DEBUG_WX("GET RTS Threshold -> %d \n", wrqu->rts.value);
        return 0;
 }
 
-
 static int ipw_wx_set_txpow(struct net_device *dev,
                            struct iw_request_info *info,
                            union iwreq_data *wrqu, char *extra)
@@ -5679,8 +5740,7 @@ static int ipw_wx_set_txpow(struct net_device *dev,
        if (wrqu->power.flags != IW_TXPOW_DBM)
                return -EINVAL;
 
-       if ((wrqu->power.value > 20) ||
-           (wrqu->power.value < -12))
+       if ((wrqu->power.value > 20) || (wrqu->power.value < -12))
                return -EINVAL;
 
        priv->tx_power = wrqu->power.value;
@@ -5704,11 +5764,10 @@ static int ipw_wx_set_txpow(struct net_device *dev,
 
        return 0;
 
- error:
     error:
        return -EIO;
 }
 
-
 static int ipw_wx_get_txpow(struct net_device *dev,
                            struct iw_request_info *info,
                            union iwreq_data *wrqu, char *extra)
@@ -5721,15 +5780,14 @@ static int ipw_wx_get_txpow(struct net_device *dev,
        wrqu->power.disabled = (priv->status & STATUS_RF_KILL_MASK) ? 1 : 0;
 
        IPW_DEBUG_WX("GET TX Power -> %s %d \n",
-                    wrqu->power.disabled ? "ON" : "OFF",
-                    wrqu->power.value);
+                    wrqu->power.disabled ? "ON" : "OFF", wrqu->power.value);
 
        return 0;
 }
 
 static int ipw_wx_set_frag(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
+                          struct iw_request_info *info,
+                          union iwreq_data *wrqu, char *extra)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
 
@@ -5749,14 +5807,13 @@ static int ipw_wx_set_frag(struct net_device *dev,
 }
 
 static int ipw_wx_get_frag(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
+                          struct iw_request_info *info,
+                          union iwreq_data *wrqu, char *extra)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
        wrqu->frag.value = priv->ieee->fts;
        wrqu->frag.fixed = 0;   /* no auto select */
-       wrqu->frag.disabled =
-               (wrqu->frag.value == DEFAULT_FTS);
+       wrqu->frag.disabled = (wrqu->frag.value == DEFAULT_FTS);
 
        IPW_DEBUG_WX("GET Frag Threshold -> %d \n", wrqu->frag.value);
 
@@ -5771,7 +5828,6 @@ static int ipw_wx_set_retry(struct net_device *dev,
        return -EOPNOTSUPP;
 }
 
-
 static int ipw_wx_get_retry(struct net_device *dev,
                            struct iw_request_info *info,
                            union iwreq_data *wrqu, char *extra)
@@ -5780,7 +5836,6 @@ static int ipw_wx_get_retry(struct net_device *dev,
        return -EOPNOTSUPP;
 }
 
-
 static int ipw_wx_set_scan(struct net_device *dev,
                           struct iw_request_info *info,
                           union iwreq_data *wrqu, char *extra)
@@ -5801,24 +5856,24 @@ static int ipw_wx_get_scan(struct net_device *dev,
 }
 
 static int ipw_wx_set_encode(struct net_device *dev,
-                                struct iw_request_info *info,
-                                union iwreq_data *wrqu, char *key)
+                            struct iw_request_info *info,
+                            union iwreq_data *wrqu, char *key)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
        return ieee80211_wx_set_encode(priv->ieee, info, wrqu, key);
 }
 
 static int ipw_wx_get_encode(struct net_device *dev,
-                                struct iw_request_info *info,
-                                union iwreq_data *wrqu, char *key)
+                            struct iw_request_info *info,
+                            union iwreq_data *wrqu, char *key)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
        return ieee80211_wx_get_encode(priv->ieee, info, wrqu, key);
 }
 
 static int ipw_wx_set_power(struct net_device *dev,
-                               struct iw_request_info *info,
-                               union iwreq_data *wrqu, char *extra)
+                           struct iw_request_info *info,
+                           union iwreq_data *wrqu, char *extra)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
        int err;
@@ -5837,11 +5892,11 @@ static int ipw_wx_set_power(struct net_device *dev,
        }
 
        switch (wrqu->power.flags & IW_POWER_MODE) {
-       case IW_POWER_ON:    /* If not specified */
-       case IW_POWER_MODE:  /* If set all mask */
-       case IW_POWER_ALL_R: /* If explicitely state all */
+       case IW_POWER_ON:       /* If not specified */
+       case IW_POWER_MODE:     /* If set all mask */
+       case IW_POWER_ALL_R:    /* If explicitely state all */
                break;
-       default: /* Otherwise we don't support it */
+       default:                /* Otherwise we don't support it */
                IPW_DEBUG_WX("SET PM Mode: %X not supported.\n",
                             wrqu->power.flags);
                return -EOPNOTSUPP;
@@ -5849,7 +5904,7 @@ static int ipw_wx_set_power(struct net_device *dev,
 
        /* If the user hasn't specified a power management mode yet, default
         * to BATTERY */
-        if (IPW_POWER_LEVEL(priv->power_mode) == IPW_POWER_AC)
+       if (IPW_POWER_LEVEL(priv->power_mode) == IPW_POWER_AC)
                priv->power_mode = IPW_POWER_ENABLED | IPW_POWER_BATTERY;
        else
                priv->power_mode = IPW_POWER_ENABLED | priv->power_mode;
@@ -5859,15 +5914,14 @@ static int ipw_wx_set_power(struct net_device *dev,
                return err;
        }
 
-       IPW_DEBUG_WX("SET Power Management Mode -> 0x%02X\n",
-                    priv->power_mode);
+       IPW_DEBUG_WX("SET Power Management Mode -> 0x%02X\n", priv->power_mode);
 
        return 0;
 }
 
 static int ipw_wx_get_power(struct net_device *dev,
-                               struct iw_request_info *info,
-                               union iwreq_data *wrqu, char *extra)
+                           struct iw_request_info *info,
+                           union iwreq_data *wrqu, char *extra)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
 
@@ -5883,8 +5937,8 @@ static int ipw_wx_get_power(struct net_device *dev,
 }
 
 static int ipw_wx_set_powermode(struct net_device *dev,
-                                   struct iw_request_info *info,
-                                   union iwreq_data *wrqu, char *extra)
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
        int mode = *(int *)extra;
@@ -5911,8 +5965,8 @@ static int ipw_wx_set_powermode(struct net_device *dev,
 
 #define MAX_WX_STRING 80
 static int ipw_wx_get_powermode(struct net_device *dev,
-                                   struct iw_request_info *info,
-                                   union iwreq_data *wrqu, char *extra)
+                               struct iw_request_info *info,
+                               union iwreq_data *wrqu, char *extra)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
        int level = IPW_POWER_LEVEL(priv->power_mode);
@@ -5935,7 +5989,7 @@ static int ipw_wx_get_powermode(struct net_device *dev,
        }
 
        if (!(priv->power_mode & IPW_POWER_ENABLED))
-               p += snprintf(p, MAX_WX_STRING - (p - extra)," OFF");
+               p += snprintf(p, MAX_WX_STRING - (p - extra), " OFF");
 
        wrqu->data.length = p - extra + 1;
 
@@ -5943,16 +5997,15 @@ static int ipw_wx_get_powermode(struct net_device *dev,
 }
 
 static int ipw_wx_set_wireless_mode(struct net_device *dev,
-                                    struct iw_request_info *info,
-                                    union iwreq_data *wrqu, char *extra)
+                                   struct iw_request_info *info,
+                                   union iwreq_data *wrqu, char *extra)
 {
-        struct ipw_priv *priv = ieee80211_priv(dev);
+       struct ipw_priv *priv = ieee80211_priv(dev);
        int mode = *(int *)extra;
        u8 band = 0, modulation = 0;
 
        if (mode == 0 || mode & ~IEEE_MODE_MASK) {
-               IPW_WARNING("Attempt to set invalid wireless mode: %d\n",
-                           mode);
+               IPW_WARNING("Attempt to set invalid wireless mode: %d\n", mode);
                return -EINVAL;
        }
 
@@ -5988,31 +6041,30 @@ static int ipw_wx_set_wireless_mode(struct net_device *dev,
        priv->ieee->mode = mode;
        priv->ieee->freq_band = band;
        priv->ieee->modulation = modulation;
-       init_supported_rates(priv, &priv->rates);
+       init_supported_rates(priv, &priv->rates);
 
        /* If we are currently associated, or trying to associate
-         * then see if this is a new configuration (causing us to
+        * then see if this is a new configuration (causing us to
         * disassociate) */
-        if (priv->status & (STATUS_ASSOCIATED | STATUS_ASSOCIATING)) {
+       if (priv->status & (STATUS_ASSOCIATED | STATUS_ASSOCIATING)) {
                /* The resulting association will trigger
                 * the new rates to be sent to the device */
-                IPW_DEBUG_ASSOC("Disassociating due to mode change.\n");
-                ipw_disassociate(priv);
+               IPW_DEBUG_ASSOC("Disassociating due to mode change.\n");
+               ipw_disassociate(priv);
        } else
                ipw_send_supported_rates(priv, &priv->rates);
 
        IPW_DEBUG_WX("PRIV SET MODE: %c%c%c\n",
                     mode & IEEE_A ? 'a' : '.',
-                    mode & IEEE_B ? 'b' : '.',
-                    mode & IEEE_G ? 'g' : '.');
+                    mode & IEEE_B ? 'b' : '.', mode & IEEE_G ? 'g' : '.');
        return 0;
 }
 
 static int ipw_wx_get_wireless_mode(struct net_device *dev,
-                                    struct iw_request_info *info,
-                                    union iwreq_data *wrqu, char *extra)
+                                   struct iw_request_info *info,
+                                   union iwreq_data *wrqu, char *extra)
 {
-        struct ipw_priv *priv = ieee80211_priv(dev);
+       struct ipw_priv *priv = ieee80211_priv(dev);
 
        switch (priv->ieee->freq_band) {
        case IEEE80211_24GHZ_BAND:
@@ -6033,7 +6085,7 @@ static int ipw_wx_get_wireless_mode(struct net_device *dev,
                strncpy(extra, "802.11a (1)", MAX_WX_STRING);
                break;
 
-       default: /* Mixed Band */
+       default:                /* Mixed Band */
                switch (priv->ieee->modulation) {
                case IEEE80211_CCK_MODULATION:
                        strncpy(extra, "802.11ab (3)", MAX_WX_STRING);
@@ -6050,9 +6102,9 @@ static int ipw_wx_get_wireless_mode(struct net_device *dev,
 
        IPW_DEBUG_WX("PRIV GET MODE: %s\n", extra);
 
-        wrqu->data.length = strlen(extra) + 1;
+       wrqu->data.length = strlen(extra) + 1;
 
-        return 0;
+       return 0;
 }
 
 #ifdef CONFIG_IPW_PROMISC
@@ -6081,7 +6133,6 @@ static int ipw_wx_set_promisc(struct net_device *dev,
        return 0;
 }
 
-
 static int ipw_wx_reset(struct net_device *dev,
                        struct iw_request_info *info,
                        union iwreq_data *wrqu, char *extra)
@@ -6091,40 +6142,39 @@ static int ipw_wx_reset(struct net_device *dev,
        ipw_adapter_restart(priv);
        return 0;
 }
-#endif // CONFIG_IPW_PROMISC
+#endif                         // CONFIG_IPW_PROMISC
 
 /* Rebase the WE IOCTLs to zero for the handler array */
 #define IW_IOCTL(x) [(x)-SIOCSIWCOMMIT]
-static iw_handler ipw_wx_handlers[] =
-{
-       IW_IOCTL(SIOCGIWNAME)   = ipw_wx_get_name,
-       IW_IOCTL(SIOCSIWFREQ)   = ipw_wx_set_freq,
-       IW_IOCTL(SIOCGIWFREQ)   = ipw_wx_get_freq,
-       IW_IOCTL(SIOCSIWMODE)   = ipw_wx_set_mode,
-       IW_IOCTL(SIOCGIWMODE)   = ipw_wx_get_mode,
-       IW_IOCTL(SIOCGIWRANGE)  = ipw_wx_get_range,
-       IW_IOCTL(SIOCSIWAP)     = ipw_wx_set_wap,
-       IW_IOCTL(SIOCGIWAP)     = ipw_wx_get_wap,
-       IW_IOCTL(SIOCSIWSCAN)   = ipw_wx_set_scan,
-       IW_IOCTL(SIOCGIWSCAN)   = ipw_wx_get_scan,
-       IW_IOCTL(SIOCSIWESSID)  = ipw_wx_set_essid,
-       IW_IOCTL(SIOCGIWESSID)  = ipw_wx_get_essid,
-       IW_IOCTL(SIOCSIWNICKN)  = ipw_wx_set_nick,
-       IW_IOCTL(SIOCGIWNICKN)  = ipw_wx_get_nick,
-       IW_IOCTL(SIOCSIWRATE)   = ipw_wx_set_rate,
-       IW_IOCTL(SIOCGIWRATE)   = ipw_wx_get_rate,
-       IW_IOCTL(SIOCSIWRTS)    = ipw_wx_set_rts,
-       IW_IOCTL(SIOCGIWRTS)    = ipw_wx_get_rts,
-       IW_IOCTL(SIOCSIWFRAG)   = ipw_wx_set_frag,
-       IW_IOCTL(SIOCGIWFRAG)   = ipw_wx_get_frag,
-       IW_IOCTL(SIOCSIWTXPOW)  = ipw_wx_set_txpow,
-       IW_IOCTL(SIOCGIWTXPOW)  = ipw_wx_get_txpow,
-       IW_IOCTL(SIOCSIWRETRY)  = ipw_wx_set_retry,
-       IW_IOCTL(SIOCGIWRETRY)  = ipw_wx_get_retry,
-       IW_IOCTL(SIOCSIWENCODE) = ipw_wx_set_encode,
-       IW_IOCTL(SIOCGIWENCODE) = ipw_wx_get_encode,
-       IW_IOCTL(SIOCSIWPOWER)  = ipw_wx_set_power,
-       IW_IOCTL(SIOCGIWPOWER)  = ipw_wx_get_power,
+static iw_handler ipw_wx_handlers[] = {
+       IW_IOCTL(SIOCGIWNAME)   = ipw_wx_get_name,
+       IW_IOCTL(SIOCSIWFREQ)   = ipw_wx_set_freq,
+       IW_IOCTL(SIOCGIWFREQ)   = ipw_wx_get_freq,
+       IW_IOCTL(SIOCSIWMODE)   = ipw_wx_set_mode,
+       IW_IOCTL(SIOCGIWMODE)   = ipw_wx_get_mode,
+       IW_IOCTL(SIOCGIWRANGE)  = ipw_wx_get_range,
+       IW_IOCTL(SIOCSIWAP)     = ipw_wx_set_wap,
+       IW_IOCTL(SIOCGIWAP)     = ipw_wx_get_wap,
+       IW_IOCTL(SIOCSIWSCAN)   = ipw_wx_set_scan,
+       IW_IOCTL(SIOCGIWSCAN)   = ipw_wx_get_scan,
+       IW_IOCTL(SIOCSIWESSID)  = ipw_wx_set_essid,
+       IW_IOCTL(SIOCGIWESSID)  = ipw_wx_get_essid,
+       IW_IOCTL(SIOCSIWNICKN)  = ipw_wx_set_nick,
+       IW_IOCTL(SIOCGIWNICKN)  = ipw_wx_get_nick,
+       IW_IOCTL(SIOCSIWRATE)   = ipw_wx_set_rate,
+       IW_IOCTL(SIOCGIWRATE)   = ipw_wx_get_rate,
+       IW_IOCTL(SIOCSIWRTS)    = ipw_wx_set_rts,
+       IW_IOCTL(SIOCGIWRTS)    = ipw_wx_get_rts,
+       IW_IOCTL(SIOCSIWFRAG)   = ipw_wx_set_frag,
+       IW_IOCTL(SIOCGIWFRAG)   = ipw_wx_get_frag,
+       IW_IOCTL(SIOCSIWTXPOW)  = ipw_wx_set_txpow,
+       IW_IOCTL(SIOCGIWTXPOW)  = ipw_wx_get_txpow,
+       IW_IOCTL(SIOCSIWRETRY)  = ipw_wx_set_retry,
+       IW_IOCTL(SIOCGIWRETRY)  = ipw_wx_get_retry,
+       IW_IOCTL(SIOCSIWENCODE) = ipw_wx_set_encode,
+       IW_IOCTL(SIOCGIWENCODE) = ipw_wx_get_encode,
+       IW_IOCTL(SIOCSIWPOWER)  = ipw_wx_set_power,
+       IW_IOCTL(SIOCGIWPOWER)  = ipw_wx_get_power,
 };
 
 #define IPW_PRIV_SET_POWER     SIOCIWFIRSTPRIV
@@ -6134,38 +6184,31 @@ static iw_handler ipw_wx_handlers[] =
 #define IPW_PRIV_SET_PROMISC   SIOCIWFIRSTPRIV+4
 #define IPW_PRIV_RESET         SIOCIWFIRSTPRIV+5
 
-
 static struct iw_priv_args ipw_priv_args[] = {
        {
-               .cmd = IPW_PRIV_SET_POWER,
-               .set_args = IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-               .name = "set_power"
-       },
+        .cmd = IPW_PRIV_SET_POWER,
+        .set_args = IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+        .name = "set_power"},
        {
-               .cmd = IPW_PRIV_GET_POWER,
-               .get_args = IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | MAX_WX_STRING,
-               .name = "get_power"
-       },
+        .cmd = IPW_PRIV_GET_POWER,
+        .get_args = IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | MAX_WX_STRING,
+        .name = "get_power"},
        {
-               .cmd = IPW_PRIV_SET_MODE,
-               .set_args = IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-               .name = "set_mode"
-       },
+        .cmd = IPW_PRIV_SET_MODE,
+        .set_args = IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+        .name = "set_mode"},
        {
-               .cmd = IPW_PRIV_GET_MODE,
-               .get_args = IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | MAX_WX_STRING,
-               .name = "get_mode"
-       },
+        .cmd = IPW_PRIV_GET_MODE,
+        .get_args = IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | MAX_WX_STRING,
+        .name = "get_mode"},
 #ifdef CONFIG_IPW_PROMISC
        {
-               IPW_PRIV_SET_PROMISC,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "monitor"
-       },
+        IPW_PRIV_SET_PROMISC,
+        IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "monitor"},
        {
-               IPW_PRIV_RESET,
-               IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 0, 0, "reset"
-       },
-#endif /* CONFIG_IPW_PROMISC */
+        IPW_PRIV_RESET,
+        IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 0, 0, "reset"},
+#endif                         /* CONFIG_IPW_PROMISC */
 };
 
 static iw_handler ipw_priv_handler[] = {
@@ -6179,25 +6222,21 @@ static iw_handler ipw_priv_handler[] = {
 #endif
 };
 
-static struct iw_handler_def ipw_wx_handler_def =
-{
-       .standard       = ipw_wx_handlers,
-       .num_standard   = ARRAY_SIZE(ipw_wx_handlers),
-       .num_private    = ARRAY_SIZE(ipw_priv_handler),
-       .num_private_args = ARRAY_SIZE(ipw_priv_args),
-       .private        = ipw_priv_handler,
-       .private_args   = ipw_priv_args,
+static struct iw_handler_def ipw_wx_handler_def = {
+       .standard               = ipw_wx_handlers,
+       .num_standard           = ARRAY_SIZE(ipw_wx_handlers),
+       .num_private            = ARRAY_SIZE(ipw_priv_handler),
+       .num_private_args       = ARRAY_SIZE(ipw_priv_args),
+       .private                = ipw_priv_handler,
+       .private_args           = ipw_priv_args,
 };
 
-
-
-
 /*
  * Get wireless statistics.
  * Called by /proc/net/wireless
  * Also called by SIOCGIWSTATS
  */
-static struct iw_statistics *ipw_get_wireless_stats(struct net_device * dev)
+static struct iw_statistics *ipw_get_wireless_stats(struct net_device *dev)
 {
        struct ipw_priv *priv = ieee80211_priv(dev);
        struct iw_statistics *wstats;
@@ -6217,7 +6256,7 @@ static struct iw_statistics *ipw_get_wireless_stats(struct net_device * dev)
                wstats->qual.noise = 0;
                wstats->qual.updated = 7;
                wstats->qual.updated |= IW_QUAL_NOISE_INVALID |
-                       IW_QUAL_QUAL_INVALID | IW_QUAL_LEVEL_INVALID;
+                   IW_QUAL_QUAL_INVALID | IW_QUAL_LEVEL_INVALID;
                return wstats;
        }
 
@@ -6225,7 +6264,7 @@ static struct iw_statistics *ipw_get_wireless_stats(struct net_device * dev)
        wstats->qual.level = average_value(&priv->average_rssi);
        wstats->qual.noise = average_value(&priv->average_noise);
        wstats->qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_LEVEL_UPDATED |
-               IW_QUAL_NOISE_UPDATED;
+           IW_QUAL_NOISE_UPDATED;
 
        wstats->miss.beacon = average_value(&priv->average_missed_beacons);
        wstats->discard.retries = priv->last_tx_failures;
@@ -6238,13 +6277,12 @@ static struct iw_statistics *ipw_get_wireless_stats(struct net_device * dev)
        return wstats;
 }
 
-
 /* net device stuff */
 
 static inline void init_sys_config(struct ipw_sys_config *sys_config)
 {
-        memset(sys_config, 0, sizeof(struct ipw_sys_config));
-       sys_config->bt_coexistence = 1; /* We may need to look into prvStaBtConfig */
+       memset(sys_config, 0, sizeof(struct ipw_sys_config));
+       sys_config->bt_coexistence = 1; /* We may need to look into prvStaBtConfig */
        sys_config->answer_broadcast_ssid_probe = 0;
        sys_config->accept_all_data_frames = 0;
        sys_config->accept_non_directed_frames = 1;
@@ -6253,7 +6291,7 @@ static inline void init_sys_config(struct ipw_sys_config *sys_config)
        sys_config->exclude_multicast_unencrypted = 0;
        sys_config->disable_multicast_decryption = 1;
        sys_config->antenna_diversity = CFG_SYS_ANTENNA_BOTH;
-       sys_config->pass_crc_to_host = 0; /* TODO: See if 1 gives us FCS */
+       sys_config->pass_crc_to_host = 0;       /* TODO: See if 1 gives us FCS */
        sys_config->dot11g_auto_detection = 0;
        sys_config->enable_cts_to_self = 0;
        sys_config->bt_coexist_collision_thr = 0;
@@ -6288,7 +6326,7 @@ we need to heavily modify the ieee80211_skb_to_txb.
 static inline void ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb)
 {
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)
-               txb->fragments[0]->data;
+           txb->fragments[0]->data;
        int i = 0;
        struct tfd_frame *tfd;
        struct clx2_tx_queue *txq = &priv->txq[0];
@@ -6300,7 +6338,7 @@ static inline void ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb)
        case IW_MODE_ADHOC:
                hdr_len = IEEE80211_3ADDR_LEN;
                unicast = !is_broadcast_ether_addr(hdr->addr1) &&
-                       !is_multicast_ether_addr(hdr->addr1);
+                   !is_multicast_ether_addr(hdr->addr1);
                id = ipw_find_station(priv, hdr->addr1);
                if (id == IPW_INVALID_STATION) {
                        id = ipw_add_station(priv, hdr->addr1);
@@ -6316,7 +6354,7 @@ static inline void ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb)
        case IW_MODE_INFRA:
        default:
                unicast = !is_broadcast_ether_addr(hdr->addr3) &&
-                       !is_multicast_ether_addr(hdr->addr3);
+                   !is_multicast_ether_addr(hdr->addr3);
                hdr_len = IEEE80211_3ADDR_LEN;
                id = 0;
                break;
@@ -6349,7 +6387,7 @@ static inline void ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb)
        memcpy(&tfd->u.data.tfd.tfd_24.mchdr, hdr, hdr_len);
 
        /* payload */
-       tfd->u.data.num_chunks = min((u8)(NUM_TFD_CHUNKS - 2), txb->nr_frags);
+       tfd->u.data.num_chunks = min((u8) (NUM_TFD_CHUNKS - 2), txb->nr_frags);
        for (i = 0; i < tfd->u.data.num_chunks; i++) {
                IPW_DEBUG_TX("Dumping TX packet frag %i of %i (%d bytes):\n",
                             i, tfd->u.data.num_chunks,
@@ -6357,9 +6395,11 @@ static inline void ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb)
                printk_buf(IPW_DL_TX, txb->fragments[i]->data + hdr_len,
                           txb->fragments[i]->len - hdr_len);
 
-               tfd->u.data.chunk_ptr[i] = pci_map_single(
-                       priv->pci_dev, txb->fragments[i]->data + hdr_len,
-                       txb->fragments[i]->len - hdr_len, PCI_DMA_TODEVICE);
+               tfd->u.data.chunk_ptr[i] =
+                   pci_map_single(priv->pci_dev,
+                                  txb->fragments[i]->data + hdr_len,
+                                  txb->fragments[i]->len - hdr_len,
+                                  PCI_DMA_TODEVICE);
                tfd->u.data.chunk_len[i] = txb->fragments[i]->len - hdr_len;
        }
 
@@ -6379,16 +6419,16 @@ static inline void ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb)
                        for (j = i; j < txb->nr_frags; j++) {
                                int size = txb->fragments[j]->len - hdr_len;
                                printk(KERN_INFO "Adding frag %d %d...\n",
-                                       j, size);
+                                      j, size);
                                memcpy(skb_put(skb, size),
-                                       txb->fragments[j]->data + hdr_len,
-                                       size);
+                                      txb->fragments[j]->data + hdr_len, size);
                        }
                        dev_kfree_skb_any(txb->fragments[i]);
                        txb->fragments[i] = skb;
-                       tfd->u.data.chunk_ptr[i] = pci_map_single(
-                               priv->pci_dev, skb->data,
-                               tfd->u.data.chunk_len[i], PCI_DMA_TODEVICE);
+                       tfd->u.data.chunk_ptr[i] =
+                           pci_map_single(priv->pci_dev, skb->data,
+                                          tfd->u.data.chunk_len[i],
+                                          PCI_DMA_TODEVICE);
                        tfd->u.data.num_chunks++;
                }
        }
@@ -6402,7 +6442,7 @@ static inline void ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb)
 
        return;
 
- drop:
     drop:
        IPW_DEBUG_DROP("Silently dropping Tx packet.\n");
        ieee80211_txb_free(txb);
 }
@@ -6429,7 +6469,7 @@ static int ipw_net_hard_start_xmit(struct ieee80211_txb *txb,
        spin_unlock_irqrestore(&priv->lock, flags);
        return 0;
 
- fail_unlock:
     fail_unlock:
        spin_unlock_irqrestore(&priv->lock, flags);
        return 1;
 }
@@ -6478,7 +6518,7 @@ static void ipw_ethtool_get_drvinfo(struct net_device *dev,
        len = sizeof(date);
        ipw_get_ordinal(p, IPW_ORD_STAT_FW_DATE, date, &len);
 
-       snprintf(info->fw_version, sizeof(info->fw_version),"%s (%s)",
+       snprintf(info->fw_version, sizeof(info->fw_version), "%s (%s)",
                 vers, date);
        strcpy(info->bus_info, pci_name(p->pci_dev));
        info->eedump_len = CX2_EEPROM_IMAGE_SIZE;
@@ -6496,19 +6536,19 @@ static int ipw_ethtool_get_eeprom_len(struct net_device *dev)
 }
 
 static int ipw_ethtool_get_eeprom(struct net_device *dev,
-                                 struct ethtool_eeprom *eeprom, u8 *bytes)
+                                 struct ethtool_eeprom *eeprom, u8 * bytes)
 {
        struct ipw_priv *p = ieee80211_priv(dev);
 
        if (eeprom->offset + eeprom->len > CX2_EEPROM_IMAGE_SIZE)
                return -EINVAL;
 
-       memcpy(bytes, &((u8 *)p->eeprom)[eeprom->offset], eeprom->len);
+       memcpy(bytes, &((u8 *) p->eeprom)[eeprom->offset], eeprom->len);
        return 0;
 }
 
 static int ipw_ethtool_set_eeprom(struct net_device *dev,
-                                 struct ethtool_eeprom *eeprom, u8 *bytes)
+                                 struct ethtool_eeprom *eeprom, u8 * bytes)
 {
        struct ipw_priv *p = ieee80211_priv(dev);
        int i;
@@ -6516,21 +6556,20 @@ static int ipw_ethtool_set_eeprom(struct net_device *dev,
        if (eeprom->offset + eeprom->len > CX2_EEPROM_IMAGE_SIZE)
                return -EINVAL;
 
-       memcpy(&((u8 *)p->eeprom)[eeprom->offset], bytes, eeprom->len);
+       memcpy(&((u8 *) p->eeprom)[eeprom->offset], bytes, eeprom->len);
        for (i = IPW_EEPROM_DATA;
-            i < IPW_EEPROM_DATA + CX2_EEPROM_IMAGE_SIZE;
-            i++)
+            i < IPW_EEPROM_DATA + CX2_EEPROM_IMAGE_SIZE; i++)
                ipw_write8(p, i, p->eeprom[i]);
 
        return 0;
 }
 
 static struct ethtool_ops ipw_ethtool_ops = {
-        .get_link       = ipw_ethtool_get_link,
-        .get_drvinfo    = ipw_ethtool_get_drvinfo,
-        .get_eeprom_len = ipw_ethtool_get_eeprom_len,
-        .get_eeprom     = ipw_ethtool_get_eeprom,
-        .set_eeprom     = ipw_ethtool_set_eeprom,
+       .get_link       = ipw_ethtool_get_link,
+       .get_drvinfo    = ipw_ethtool_get_drvinfo,
+       .get_eeprom_len = ipw_ethtool_get_eeprom_len,
+       .get_eeprom     = ipw_ethtool_get_eeprom,
+       .set_eeprom     = ipw_ethtool_set_eeprom,
 };
 
 static irqreturn_t ipw_isr(int irq, void *data, struct pt_regs *regs)
@@ -6574,10 +6613,10 @@ static irqreturn_t ipw_isr(int irq, void *data, struct pt_regs *regs)
 
        tasklet_schedule(&priv->irq_tasklet);
 
-       spin_unlock(&priv->lock);
+       spin_unlock(&priv->lock);
 
        return IRQ_HANDLED;
- none:
     none:
        spin_unlock(&priv->lock);
        return IRQ_NONE;
 }
@@ -6609,7 +6648,7 @@ static void ipw_rf_kill(void *adapter)
                IPW_DEBUG_RF_KILL("HW RF Kill deactivated.  SW RF Kill still "
                                  "enabled\n");
 
- exit_unlock:
     exit_unlock:
        spin_unlock_irqrestore(&priv->lock, flags);
 }
 
@@ -6642,7 +6681,6 @@ static int ipw_setup_deferred_work(struct ipw_priv *priv)
        return ret;
 }
 
-
 static void shim__set_security(struct net_device *dev,
                               struct ieee80211_security *sec)
 {
@@ -6683,8 +6721,7 @@ static void shim__set_security(struct net_device *dev,
                priv->status |= STATUS_SECURITY_UPDATED;
        }
 
-       if (sec->flags & SEC_ENABLED &&
-           priv->sec.enabled != sec->enabled) {
+       if (sec->flags & SEC_ENABLED && priv->sec.enabled != sec->enabled) {
                priv->sec.flags |= SEC_ENABLED;
                priv->sec.enabled = sec->enabled;
                priv->status |= STATUS_SECURITY_UPDATED;
@@ -6694,8 +6731,7 @@ static void shim__set_security(struct net_device *dev,
                        priv->capability &= ~CAP_PRIVACY_ON;
        }
 
-       if (sec->flags & SEC_LEVEL &&
-           priv->sec.level != sec->level) {
+       if (sec->flags & SEC_LEVEL && priv->sec.level != sec->level) {
                priv->sec.level = sec->level;
                priv->sec.flags |= SEC_LEVEL;
                priv->status |= STATUS_SECURITY_UPDATED;
@@ -6709,7 +6745,7 @@ static void shim__set_security(struct net_device *dev,
            (((priv->assoc_request.capability &
               WLAN_CAPABILITY_PRIVACY) && !sec->enabled) ||
             (!(priv->assoc_request.capability &
-                WLAN_CAPABILITY_PRIVACY) && sec->enabled))) {
+               WLAN_CAPABILITY_PRIVACY) && sec->enabled))) {
                IPW_DEBUG_ASSOC("Disassociating due to capability "
                                "change.\n");
                ipw_disassociate(priv);
@@ -6723,7 +6759,7 @@ static int init_supported_rates(struct ipw_priv *priv,
        /* TODO: Mask out rates based on priv->rates_mask */
 
        memset(rates, 0, sizeof(*rates));
-        /* configure supported rates */
+       /* configure supported rates */
        switch (priv->ieee->freq_band) {
        case IEEE80211_52GHZ_BAND:
                rates->ieee_mode = IPW_A_MODE;
@@ -6732,7 +6768,7 @@ static int init_supported_rates(struct ipw_priv *priv,
                                        IEEE80211_OFDM_DEFAULT_RATES_MASK);
                break;
 
-       default: /* Mixed or 2.4Ghz */
+       default:                /* Mixed or 2.4Ghz */
                rates->ieee_mode = IPW_G_MODE;
                rates->purpose = IPW_RATE_CAPABILITIES;
                ipw_add_cck_scan_rates(rates, IEEE80211_CCK_MODULATION,
@@ -6783,8 +6819,8 @@ static int ipw_config(struct ipw_priv *priv)
        if (ipw_send_system_config(priv, &priv->sys_config))
                goto error;
 
-        init_supported_rates(priv, &priv->rates);
-        if (ipw_send_supported_rates(priv, &priv->rates))
+       init_supported_rates(priv, &priv->rates);
+       if (ipw_send_supported_rates(priv, &priv->rates))
                goto error;
 
        /* Set request-to-send threshold */
@@ -6806,7 +6842,7 @@ static int ipw_config(struct ipw_priv *priv)
 
        return 0;
 
- error:
     error:
        return -EIO;
 }
 
@@ -6818,13 +6854,12 @@ static int ipw_up(struct ipw_priv *priv)
        if (priv->status & STATUS_EXIT_PENDING)
                return -EIO;
 
-       for (i = 0; i < MAX_HW_RESTARTS; i++ ) {
+       for (i = 0; i < MAX_HW_RESTARTS; i++) {
                /* Load the microcode, firmware, and eeprom.
                 * Also start the clocks. */
                rc = ipw_load(priv);
                if (rc) {
-                       IPW_ERROR("Unable to load firmware: 0x%08X\n",
-                                       rc);
+                       IPW_ERROR("Unable to load firmware: 0x%08X\n", rc);
                        return rc;
                }
 
@@ -6857,8 +6892,7 @@ static int ipw_up(struct ipw_priv *priv)
 
        /* tried to restart and config the device for as long as our
         * patience could withstand */
-       IPW_ERROR("Unable to initialize device after %d attempts.\n",
-                 i);
+       IPW_ERROR("Unable to initialize device after %d attempts.\n", i);
        return -EIO;
 }
 
@@ -6923,10 +6957,10 @@ static struct pci_device_id card_ids[] = {
        {PCI_VENDOR_ID_INTEL, 0x1043, 0x8086, 0x2761, 0, 0, 0},
        {PCI_VENDOR_ID_INTEL, 0x1043, 0x8086, 0x2762, 0, 0, 0},
        {PCI_VENDOR_ID_INTEL, 0x104f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-       {PCI_VENDOR_ID_INTEL, 0x4220, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, /* BG */
-       {PCI_VENDOR_ID_INTEL, 0x4221, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, /* 2225BG */
-       {PCI_VENDOR_ID_INTEL, 0x4223, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, /* ABG */
-       {PCI_VENDOR_ID_INTEL, 0x4224, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, /* ABG */
+       {PCI_VENDOR_ID_INTEL, 0x4220, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, /* BG */
+       {PCI_VENDOR_ID_INTEL, 0x4221, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, /* 2225BG */
+       {PCI_VENDOR_ID_INTEL, 0x4223, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, /* ABG */
+       {PCI_VENDOR_ID_INTEL, 0x4224, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, /* ABG */
 
        /* required last entry */
        {0,}
@@ -6954,11 +6988,10 @@ static struct attribute *ipw_sysfs_entries[] = {
 
 static struct attribute_group ipw_attribute_group = {
        .name = NULL,           /* put in device directory */
-       .attrs  = ipw_sysfs_entries,
+       .attrs = ipw_sysfs_entries,
 };
 
-static int ipw_pci_probe(struct pci_dev *pdev,
-                        const struct pci_device_id *ent)
+static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        int err = 0;
        struct net_device *net_dev;
@@ -7051,7 +7084,7 @@ static int ipw_pci_probe(struct pci_dev *pdev,
                priv->config |= CFG_STATIC_CHANNEL;
                priv->channel = channel;
                IPW_DEBUG_INFO("Bind to static channel %d\n", channel);
-               IPW_DEBUG_INFO("Bind to static channel %d\n", channel);
+               IPW_DEBUG_INFO("Bind to static channel %d\n", channel);
                /* TODO: Validate that provided channel is in range */
        }
 
@@ -7078,9 +7111,9 @@ static int ipw_pci_probe(struct pci_dev *pdev,
                priv->ieee->abg_ture = 1;
                band = IEEE80211_52GHZ_BAND | IEEE80211_24GHZ_BAND;
                modulation = IEEE80211_OFDM_MODULATION |
-                       IEEE80211_CCK_MODULATION;
+                   IEEE80211_CCK_MODULATION;
                priv->adapter = IPW_2915ABG;
-               priv->ieee->mode = IEEE_A|IEEE_G|IEEE_B;
+               priv->ieee->mode = IEEE_A | IEEE_G | IEEE_B;
        } else {
                if (priv->pci_dev->device == 0x4221)
                        printk(KERN_INFO DRV_NAME
@@ -7094,9 +7127,9 @@ static int ipw_pci_probe(struct pci_dev *pdev,
                priv->ieee->abg_ture = 0;
                band = IEEE80211_24GHZ_BAND;
                modulation = IEEE80211_OFDM_MODULATION |
-                       IEEE80211_CCK_MODULATION;
+                   IEEE80211_CCK_MODULATION;
                priv->adapter = IPW_2200BG;
-               priv->ieee->mode = IEEE_G|IEEE_B;
+               priv->ieee->mode = IEEE_G | IEEE_B;
        }
 
        priv->ieee->freq_band = band;
@@ -7110,11 +7143,10 @@ static int ipw_pci_probe(struct pci_dev *pdev,
        priv->rts_threshold = DEFAULT_RTS_THRESHOLD;
 
        /* If power management is turned on, default to AC mode */
-        priv->power_mode = IPW_POWER_AC;
+       priv->power_mode = IPW_POWER_AC;
        priv->tx_power = IPW_DEFAULT_TX_POWER;
 
-       err = request_irq(pdev->irq, ipw_isr, SA_SHIRQ, DRV_NAME,
-                         priv);
+       err = request_irq(pdev->irq, ipw_isr, SA_SHIRQ, DRV_NAME, priv);
        if (err) {
                IPW_ERROR("Error allocating IRQ %d\n", pdev->irq);
                goto out_destroy_workqueue;
@@ -7136,7 +7168,7 @@ static int ipw_pci_probe(struct pci_dev *pdev,
        net_dev->wireless_handlers = &ipw_wx_handler_def;
        net_dev->ethtool_ops = &ipw_ethtool_ops;
        net_dev->irq = pdev->irq;
-       net_dev->base_addr = (unsigned long )priv->hw_base;
+       net_dev->base_addr = (unsigned long)priv->hw_base;
        net_dev->mem_start = pci_resource_start(pdev, 0);
        net_dev->mem_end = net_dev->mem_start + pci_resource_len(pdev, 0) - 1;
 
@@ -7154,23 +7186,23 @@ static int ipw_pci_probe(struct pci_dev *pdev,
 
        return 0;
 
- out_remove_group:
     out_remove_group:
        sysfs_remove_group(&pdev->dev.kobj, &ipw_attribute_group);
- out_release_irq:
     out_release_irq:
        free_irq(pdev->irq, priv);
- out_destroy_workqueue:
     out_destroy_workqueue:
        destroy_workqueue(priv->workqueue);
        priv->workqueue = NULL;
- out_iounmap:
     out_iounmap:
        iounmap(priv->hw_base);
- out_pci_release_regions:
     out_pci_release_regions:
        pci_release_regions(pdev);
- out_pci_disable_device:
     out_pci_disable_device:
        pci_disable_device(pdev);
        pci_set_drvdata(pdev, NULL);
- out_free_ieee80211:
     out_free_ieee80211:
        free_ieee80211(priv->net_dev);
- out:
     out:
        return err;
 }
 
@@ -7223,7 +7255,6 @@ static void ipw_pci_remove(struct pci_dev *pdev)
 #endif
 }
 
-
 #ifdef CONFIG_PM
 static int ipw_pci_suspend(struct pci_dev *pdev, pm_message_t state)
 {
@@ -7232,7 +7263,7 @@ static int ipw_pci_suspend(struct pci_dev *pdev, pm_message_t state)
 
        printk(KERN_INFO "%s: Going into suspend...\n", dev->name);
 
-       /* Take down the device; powers it off, etc. */
+       /* Take down the device; powers it off, etc. */
        ipw_down(priv);
 
        /* Remove the PRESENT state of the device */
@@ -7306,8 +7337,7 @@ static int __init ipw_init(void)
                return ret;
        }
 
-       ret = driver_create_file(&ipw_driver.driver,
-                                &driver_attr_debug_level);
+       ret = driver_create_file(&ipw_driver.driver, &driver_attr_debug_level);
        if (ret) {
                IPW_ERROR("Unable to create driver sysfs file\n");
                pci_unregister_driver(&ipw_driver);
index 66bb5903537f1b06d823e8b6eea9cd564f76285a..5b00882133f919740cbe7e098a500e270ff8a5ff 100644 (file)
@@ -56,8 +56,7 @@
 #include <linux/workqueue.h>
 
 /* Authentication  and Association States */
-enum connection_manager_assoc_states
-{
+enum connection_manager_assoc_states {
        CMAS_INIT = 0,
        CMAS_TX_AUTH_SEQ_1,
        CMAS_RX_AUTH_SEQ_2,
@@ -74,7 +73,6 @@ enum connection_manager_assoc_states
        CMAS_LAST
 };
 
-
 #define IPW_WAIT                     (1<<0)
 #define IPW_QUIET                    (1<<1)
 #define IPW_ROAMING                  (1<<2)
@@ -190,7 +188,6 @@ enum connection_manager_assoc_states
 #define DCT_FLAG_EXT_MODE_CCK  0x01
 #define DCT_FLAG_EXT_MODE_OFDM 0x00
 
-
 #define TX_RX_TYPE_MASK                    0xFF
 #define TX_FRAME_TYPE                      0x00
 #define TX_HOST_COMMAND_TYPE               0x01
@@ -242,107 +239,97 @@ enum connection_manager_assoc_states
  * Contains common data for Rx and Tx queues
  */
 struct clx2_queue {
-       int n_bd;                      /**< number of BDs in this queue */
-       int first_empty;               /**< 1-st empty entry (index) */
-       int last_used;                 /**< last used entry (index) */
-       u32 reg_w;                   /**< 'write' reg (queue head), addr in domain 1 */
-       u32 reg_r;                   /**< 'read' reg (queue tail), addr in domain 1 */
-       dma_addr_t dma_addr;            /**< physical addr for BD's */
-       int low_mark;                  /**< low watermark, resume queue if free space more than this */
-       int high_mark;                 /**< high watermark, stop queue if free space less than this */
+       int n_bd;                      /**< number of BDs in this queue */
+       int first_empty;               /**< 1-st empty entry (index) */
+       int last_used;                 /**< last used entry (index) */
+       u32 reg_w;                   /**< 'write' reg (queue head), addr in domain 1 */
+       u32 reg_r;                   /**< 'read' reg (queue tail), addr in domain 1 */
+       dma_addr_t dma_addr;            /**< physical addr for BD's */
+       int low_mark;                  /**< low watermark, resume queue if free space more than this */
+       int high_mark;                 /**< high watermark, stop queue if free space less than this */
 } __attribute__ ((packed));
 
-struct machdr32
-{
+struct machdr32 {
        u16 frame_ctl;
-       u16 duration;     // watch out for endians!
-       u8 addr1[ MACADRR_BYTE_LEN ];
-       u8 addr2[ MACADRR_BYTE_LEN ];
-       u8 addr3[ MACADRR_BYTE_LEN ];
-       u16 seq_ctrl;     // more endians!
-       u8 addr4[ MACADRR_BYTE_LEN ];
+       u16 duration;           // watch out for endians!
+       u8 addr1[MACADRR_BYTE_LEN];
+       u8 addr2[MACADRR_BYTE_LEN];
+       u8 addr3[MACADRR_BYTE_LEN];
+       u16 seq_ctrl;           // more endians!
+       u8 addr4[MACADRR_BYTE_LEN];
        u16 qos_ctrl;
-} __attribute__ ((packed)) ;
+} __attribute__ ((packed));
 
-struct machdr30
-{
+struct machdr30 {
        u16 frame_ctl;
-       u16 duration;     // watch out for endians!
-       u8 addr1[ MACADRR_BYTE_LEN ];
-       u8 addr2[ MACADRR_BYTE_LEN ];
-       u8 addr3[ MACADRR_BYTE_LEN ];
-       u16 seq_ctrl;     // more endians!
-       u8 addr4[ MACADRR_BYTE_LEN ];
-} __attribute__ ((packed)) ;
-
-struct machdr26
-{
+       u16 duration;           // watch out for endians!
+       u8 addr1[MACADRR_BYTE_LEN];
+       u8 addr2[MACADRR_BYTE_LEN];
+       u8 addr3[MACADRR_BYTE_LEN];
+       u16 seq_ctrl;           // more endians!
+       u8 addr4[MACADRR_BYTE_LEN];
+} __attribute__ ((packed));
+
+struct machdr26 {
        u16 frame_ctl;
-       u16 duration;     // watch out for endians!
-       u8 addr1[ MACADRR_BYTE_LEN ];
-       u8 addr2[ MACADRR_BYTE_LEN ];
-       u8 addr3[ MACADRR_BYTE_LEN ];
-       u16 seq_ctrl;     // more endians!
+       u16 duration;           // watch out for endians!
+       u8 addr1[MACADRR_BYTE_LEN];
+       u8 addr2[MACADRR_BYTE_LEN];
+       u8 addr3[MACADRR_BYTE_LEN];
+       u16 seq_ctrl;           // more endians!
        u16 qos_ctrl;
-} __attribute__ ((packed)) ;
+} __attribute__ ((packed));
 
-struct machdr24
-{
+struct machdr24 {
        u16 frame_ctl;
-       u16 duration;     // watch out for endians!
-       u8 addr1[ MACADRR_BYTE_LEN ];
-       u8 addr2[ MACADRR_BYTE_LEN ];
-       u8 addr3[ MACADRR_BYTE_LEN ];
-       u16 seq_ctrl;     // more endians!
-} __attribute__ ((packed)) ;
+       u16 duration;           // watch out for endians!
+       u8 addr1[MACADRR_BYTE_LEN];
+       u8 addr2[MACADRR_BYTE_LEN];
+       u8 addr3[MACADRR_BYTE_LEN];
+       u16 seq_ctrl;           // more endians!
+} __attribute__ ((packed));
 
 // TX TFD with 32 byte MAC Header
-struct tx_tfd_32
-{
-       struct machdr32    mchdr;                      // 32
-       u32                uivplaceholder[2];          // 8
-} __attribute__ ((packed)) ;
+struct tx_tfd_32 {
+       struct machdr32 mchdr;  // 32
+       u32 uivplaceholder[2];  // 8
+} __attribute__ ((packed));
 
 // TX TFD with 30 byte MAC Header
-struct tx_tfd_30
-{
-       struct machdr30    mchdr;                      // 30
-       u8                 reserved[2];                // 2
-       u32                uivplaceholder[2];          // 8
-} __attribute__ ((packed)) ;
+struct tx_tfd_30 {
+       struct machdr30 mchdr;  // 30
+       u8 reserved[2];         // 2
+       u32 uivplaceholder[2];  // 8
+} __attribute__ ((packed));
 
 // tx tfd with 26 byte mac header
-struct tx_tfd_26
-{
-       struct machdr26    mchdr;                      // 26
-       u8                 reserved1[2];               // 2
-       u32                uivplaceholder[2];          // 8
-       u8                 reserved2[4];               // 4
-} __attribute__ ((packed)) ;
+struct tx_tfd_26 {
+       struct machdr26 mchdr;  // 26
+       u8 reserved1[2];        // 2
+       u32 uivplaceholder[2];  // 8
+       u8 reserved2[4];        // 4
+} __attribute__ ((packed));
 
 // tx tfd with 24 byte mac header
-struct tx_tfd_24
-{
-       struct machdr24    mchdr;                      // 24
-       u32                uivplaceholder[2];          // 8
-       u8                 reserved[8];                // 8
-} __attribute__ ((packed)) ;
-
+struct tx_tfd_24 {
+       struct machdr24 mchdr;  // 24
+       u32 uivplaceholder[2];  // 8
+       u8 reserved[8];         // 8
+} __attribute__ ((packed));
 
 #define DCT_WEP_KEY_FIELD_LENGTH 16
 
-struct tfd_command
-{
+struct tfd_command {
        u8 index;
        u8 length;
        u16 reserved;
        u8 payload[0];
-} __attribute__ ((packed)) ;
+} __attribute__ ((packed));
 
 struct tfd_data {
        /* Header */
        u32 work_area_ptr;
-       u8 station_number; /* 0 for BSS */
+       u8 station_number;      /* 0 for BSS */
        u8 reserved1;
        u16 reserved2;
 
@@ -359,14 +346,13 @@ struct tfd_data {
        u8 antenna;
        u16 next_packet_duration;
        u16 next_frag_len;
-       u16 back_off_counter; //////txop;
+       u16 back_off_counter;   //////txop;
        u8 retrylimit;
        u16 cwcurrent;
        u8 reserved3;
 
        /* 802.11 MAC Header */
-       union
-       {
+       union {
                struct tx_tfd_24 tfd_24;
                struct tx_tfd_26 tfd_26;
                struct tx_tfd_30 tfd_30;
@@ -379,8 +365,7 @@ struct tfd_data {
        u16 chunk_len[NUM_TFD_CHUNKS];
 } __attribute__ ((packed));
 
-struct txrx_control_flags
-{
+struct txrx_control_flags {
        u8 message_type;
        u8 rx_seq_num;
        u8 control_bits;
@@ -390,17 +375,16 @@ struct txrx_control_flags
 #define  TFD_SIZE                           128
 #define  TFD_CMD_IMMEDIATE_PAYLOAD_LENGTH   (TFD_SIZE - sizeof(struct txrx_control_flags))
 
-struct tfd_frame
-{
+struct tfd_frame {
        struct txrx_control_flags control_flags;
        union {
                struct tfd_data data;
                struct tfd_command cmd;
                u8 raw[TFD_CMD_IMMEDIATE_PAYLOAD_LENGTH];
        } u;
-} __attribute__ ((packed)) ;
+} __attribute__ ((packed));
 
-typedef void destructor_func(const void*);
+typedef void destructor_func(const void *);
 
 /**
  * Tx Queue for DMA. Queue consists of circular buffer of
@@ -408,7 +392,7 @@ typedef void destructor_func(const void*);
  */
 struct clx2_tx_queue {
        struct clx2_queue q;
-       struct tfd_framebd;
+       struct tfd_frame *bd;
        struct ieee80211_txb **txb;
 };
 
@@ -423,8 +407,7 @@ struct clx2_tx_queue {
 #define SUP_RATE_11G_MAX_NUM_CHANNELS  (12)
 
 // Used for passing to driver number of successes and failures per rate
-struct rate_histogram
-{
+struct rate_histogram {
        union {
                u32 a[SUP_RATE_11A_MAX_NUM_CHANNELS];
                u32 b[SUP_RATE_11B_MAX_NUM_CHANNELS];
@@ -475,12 +458,12 @@ struct notif_scan_complete {
        u8 num_channels;
        u8 status;
        u8 reserved;
-}  __attribute__ ((packed));
+} __attribute__ ((packed));
 
 struct notif_frag_length {
        u16 frag_length;
        u16 reserved;
-}  __attribute__ ((packed));
+} __attribute__ ((packed));
 
 struct notif_beacon_state {
        u32 state;
@@ -543,11 +526,11 @@ struct ipw_rx_notification {
 
 struct ipw_rx_frame {
        u32 reserved1;
-       u8 parent_tsf[4];     // fw_use[0] is boolean for OUR_TSF_IS_GREATER
-       u8 received_channel;  // The channel that this frame was received on.
-                             // Note that for .11b this does not have to be
-                             // the same as the channel that it was sent.
-                              // Filled by LMAC
+       u8 parent_tsf[4];       // fw_use[0] is boolean for OUR_TSF_IS_GREATER
+       u8 received_channel;    // The channel that this frame was received on.
+       // Note that for .11b this does not have to be
+       // the same as the channel that it was sent.
+       // Filled by LMAC
        u8 frameStatus;
        u8 rate;
        u8 rssi;
@@ -556,10 +539,10 @@ struct ipw_rx_frame {
        u16 signal;
        u16 noise;
        u8 antennaAndPhy;
-       u8 control;           // control bit should be on in bg
-       u8 rtscts_rate;       // rate of rts or cts (in rts cts sequence rate
-                             // is identical)
-       u8 rtscts_seen;       // 0x1 RTS seen ; 0x2 CTS seen
+       u8 control;             // control bit should be on in bg
+       u8 rtscts_rate;         // rate of rts or cts (in rts cts sequence rate
+       // is identical)
+       u8 rtscts_seen;         // 0x1 RTS seen ; 0x2 CTS seen
        u16 length;
        u8 data[0];
 } __attribute__ ((packed));
@@ -571,8 +554,7 @@ struct ipw_rx_header {
        u8 reserved;
 } __attribute__ ((packed));
 
-struct ipw_rx_packet
-{
+struct ipw_rx_packet {
        struct ipw_rx_header header;
        union {
                struct ipw_rx_frame frame;
@@ -589,21 +571,20 @@ struct ipw_rx_mem_buffer {
        struct ipw_rx_buffer *rxb;
        struct sk_buff *skb;
        struct list_head list;
-}; /* Not transferred over network, so not  __attribute__ ((packed)) */
+};                             /* Not transferred over network, so not  __attribute__ ((packed)) */
 
 struct ipw_rx_queue {
        struct ipw_rx_mem_buffer pool[RX_QUEUE_SIZE + RX_FREE_BUFFERS];
        struct ipw_rx_mem_buffer *queue[RX_QUEUE_SIZE];
-       u32 processed; /* Internal index to last handled Rx packet */
-       u32 read;      /* Shared index to newest available Rx buffer */
-       u32 write;     /* Shared index to oldest written Rx packet */
-       u32 free_count;/* Number of pre-allocated buffers in rx_free */
+       u32 processed;          /* Internal index to last handled Rx packet */
+       u32 read;               /* Shared index to newest available Rx buffer */
+       u32 write;              /* Shared index to oldest written Rx packet */
+       u32 free_count;         /* Number of pre-allocated buffers in rx_free */
        /* Each of these lists is used as a FIFO for ipw_rx_mem_buffers */
-       struct list_head rx_free;  /* Own an SKBs */
-       struct list_head rx_used;  /* No SKB allocated */
+       struct list_head rx_free;       /* Own an SKBs */
+       struct list_head rx_used;       /* No SKB allocated */
        spinlock_t lock;
-}; /* Not transferred over network, so not  __attribute__ ((packed)) */
-
+};                             /* Not transferred over network, so not  __attribute__ ((packed)) */
 
 struct alive_command_responce {
        u8 alive_command;
@@ -627,8 +608,7 @@ struct ipw_rates {
        u8 rates[IPW_MAX_RATES];
 } __attribute__ ((packed));
 
-struct command_block
-{
+struct command_block {
        unsigned int control;
        u32 source_addr;
        u32 dest_addr;
@@ -636,18 +616,16 @@ struct command_block
 } __attribute__ ((packed));
 
 #define CB_NUMBER_OF_ELEMENTS_SMALL 64
-struct fw_image_desc
-{
+struct fw_image_desc {
        unsigned long last_cb_index;
        unsigned long current_cb_index;
        struct command_block cb_list[CB_NUMBER_OF_ELEMENTS_SMALL];
-       void * v_addr;
+       void *v_addr;
        unsigned long p_addr;
        unsigned long len;
 };
 
-struct ipw_sys_config
-{
+struct ipw_sys_config {
        u8 bt_coexistence;
        u8 reserved1;
        u8 answer_broadcast_ssid_probe;
@@ -670,8 +648,7 @@ struct ipw_sys_config
        u8 reserved3;
 } __attribute__ ((packed));
 
-struct ipw_multicast_addr
-{
+struct ipw_multicast_addr {
        u8 num_of_multicast_addresses;
        u8 reserved[3];
        u8 mac1[6];
@@ -680,8 +657,7 @@ struct ipw_multicast_addr
        u8 mac4[6];
 } __attribute__ ((packed));
 
-struct ipw_wep_key
-{
+struct ipw_wep_key {
        u8 cmd_id;
        u8 seq_num;
        u8 key_index;
@@ -689,8 +665,7 @@ struct ipw_wep_key
        u8 key[16];
 } __attribute__ ((packed));
 
-struct ipw_tgi_tx_key
-{
+struct ipw_tgi_tx_key {
        u8 key_id;
        u8 security_type;
        u8 station_index;
@@ -701,8 +676,7 @@ struct ipw_tgi_tx_key
 
 #define IPW_SCAN_CHANNELS 54
 
-struct ipw_scan_request
-{
+struct ipw_scan_request {
        u8 scan_type;
        u16 dwell_time;
        u8 channels_list[IPW_SCAN_CHANNELS];
@@ -718,8 +692,7 @@ enum {
        IPW_SCAN_TYPES
 };
 
-struct ipw_scan_request_ext
-{
+struct ipw_scan_request_ext {
        u32 full_scan_index;
        u8 channels_list[IPW_SCAN_CHANNELS];
        u8 scan_type[IPW_SCAN_CHANNELS / 2];
@@ -740,19 +713,16 @@ extern inline void ipw_set_scan_type(struct ipw_scan_request_ext *scan,
 {
        if (index % 2)
                scan->scan_type[index / 2] =
-                       (scan->scan_type[index / 2] & 0xF0) |
-                       (scan_type & 0x0F);
+                   (scan->scan_type[index / 2] & 0xF0) | (scan_type & 0x0F);
        else
                scan->scan_type[index / 2] =
-                       (scan->scan_type[index / 2] & 0x0F) |
-                       ((scan_type & 0x0F) << 4);
+                   (scan->scan_type[index / 2] & 0x0F) |
+                   ((scan_type & 0x0F) << 4);
 }
 
-struct ipw_associate
-{
+struct ipw_associate {
        u8 channel;
-       u8 auth_type:4,
-          auth_key:4;
+       u8 auth_type:4, auth_key:4;
        u8 assoc_type;
        u8 reserved;
        u16 policy_support;
@@ -771,8 +741,7 @@ struct ipw_associate
        u16 reserved2;
 } __attribute__ ((packed));
 
-struct ipw_supported_rates
-{
+struct ipw_supported_rates {
        u8 ieee_mode;
        u8 num_rates;
        u8 purpose;
@@ -780,42 +749,36 @@ struct ipw_supported_rates
        u8 supported_rates[IPW_MAX_RATES];
 } __attribute__ ((packed));
 
-struct ipw_rts_threshold
-{
+struct ipw_rts_threshold {
        u16 rts_threshold;
        u16 reserved;
 } __attribute__ ((packed));
 
-struct ipw_frag_threshold
-{
+struct ipw_frag_threshold {
        u16 frag_threshold;
        u16 reserved;
 } __attribute__ ((packed));
 
-struct ipw_retry_limit
-{
+struct ipw_retry_limit {
        u8 short_retry_limit;
        u8 long_retry_limit;
        u16 reserved;
 } __attribute__ ((packed));
 
-struct ipw_dino_config
-{
+struct ipw_dino_config {
        u32 dino_config_addr;
        u16 dino_config_size;
        u8 dino_response;
        u8 reserved;
 } __attribute__ ((packed));
 
-struct ipw_aironet_info
-{
+struct ipw_aironet_info {
        u8 id;
        u8 length;
        u16 reserved;
 } __attribute__ ((packed));
 
-struct ipw_rx_key
-{
+struct ipw_rx_key {
        u8 station_index;
        u8 key_type;
        u8 key_id;
@@ -826,23 +789,20 @@ struct ipw_rx_key
        u8 reserved;
 } __attribute__ ((packed));
 
-struct ipw_country_channel_info
-{
+struct ipw_country_channel_info {
        u8 first_channel;
        u8 no_channels;
        s8 max_tx_power;
 } __attribute__ ((packed));
 
-struct ipw_country_info
-{
+struct ipw_country_info {
        u8 id;
        u8 length;
        u8 country_str[3];
        struct ipw_country_channel_info groups[7];
 } __attribute__ ((packed));
 
-struct ipw_channel_tx_power
-{
+struct ipw_channel_tx_power {
        u8 channel_number;
        s8 tx_power;
 } __attribute__ ((packed));
@@ -852,15 +812,13 @@ struct ipw_channel_tx_power
 #define MAX_A_CHANNELS  37
 #define MAX_B_CHANNELS  14
 
-struct ipw_tx_power
-{
+struct ipw_tx_power {
        u8 num_channels;
        u8 ieee_mode;
        struct ipw_channel_tx_power channels_tx_power[MAX_A_CHANNELS];
 } __attribute__ ((packed));
 
-struct ipw_qos_parameters
-{
+struct ipw_qos_parameters {
        u16 cw_min[4];
        u16 cw_max[4];
        u8 aifs[4];
@@ -868,15 +826,13 @@ struct ipw_qos_parameters
        u16 tx_op_limit[4];
 } __attribute__ ((packed));
 
-struct ipw_rsn_capabilities
-{
+struct ipw_rsn_capabilities {
        u8 id;
        u8 length;
        u16 version;
 } __attribute__ ((packed));
 
-struct ipw_sensitivity_calib
-{
+struct ipw_sensitivity_calib {
        u16 beacon_rssi_raw;
        u16 reserved;
 } __attribute__ ((packed));
@@ -895,10 +851,11 @@ struct ipw_sensitivity_calib
  * - \a param filled with status parameters.
  */
 struct ipw_cmd {
-  u32 cmd;         /**< Host command */
-  u32 status;      /**< Status */
-  u32 status_len;  /**< How many 32 bit parameters in the status */
-  u32 len;         /**< incoming parameters length, bytes */
+       u32 cmd;   /**< Host command */
+       u32 status;/**< Status */
+       u32 status_len;
+                  /**< How many 32 bit parameters in the status */
+       u32 len;   /**< incoming parameters length, bytes */
   /**
    * command parameters.
    * There should be enough space for incoming and
@@ -906,10 +863,10 @@ struct ipw_cmd {
    * Incoming parameters listed 1-st, followed by outcoming params.
    * nParams=(len+3)/4+status_len
    */
-  u32 param[0];
+       u32 param[0];
 } __attribute__ ((packed));
 
-#define STATUS_HCMD_ACTIVE      (1<<0)  /**< host command in progress */
+#define STATUS_HCMD_ACTIVE      (1<<0) /**< host command in progress */
 
 #define STATUS_INT_ENABLED      (1<<1)
 #define STATUS_RF_KILL_HW       (1<<2)
@@ -932,15 +889,15 @@ struct ipw_cmd {
 #define STATUS_SCANNING         (1<<21)
 #define STATUS_SCAN_ABORTING    (1<<22)
 
-#define STATUS_INDIRECT_BYTE    (1<<28) /* sysfs entry configured for access */
-#define STATUS_INDIRECT_DWORD   (1<<29) /* sysfs entry configured for access */
-#define STATUS_DIRECT_DWORD     (1<<30) /* sysfs entry configured for access */
+#define STATUS_INDIRECT_BYTE    (1<<28)        /* sysfs entry configured for access */
+#define STATUS_INDIRECT_DWORD   (1<<29)        /* sysfs entry configured for access */
+#define STATUS_DIRECT_DWORD     (1<<30)        /* sysfs entry configured for access */
 
-#define STATUS_SECURITY_UPDATED (1<<31) /* Security sync needed */
+#define STATUS_SECURITY_UPDATED (1<<31)        /* Security sync needed */
 
-#define CFG_STATIC_CHANNEL      (1<<0) /* Restrict assoc. to single channel */
-#define CFG_STATIC_ESSID        (1<<1) /* Restrict assoc. to single SSID */
-#define CFG_STATIC_BSSID        (1<<2) /* Restrict assoc. to single BSSID */
+#define CFG_STATIC_CHANNEL      (1<<0) /* Restrict assoc. to single channel */
+#define CFG_STATIC_ESSID        (1<<1) /* Restrict assoc. to single SSID */
+#define CFG_STATIC_BSSID        (1<<2) /* Restrict assoc. to single BSSID */
 #define CFG_CUSTOM_MAC          (1<<3)
 #define CFG_PREAMBLE            (1<<4)
 #define CFG_ADHOC_PERSIST       (1<<5)
@@ -948,8 +905,8 @@ struct ipw_cmd {
 #define CFG_FIXED_RATE          (1<<7)
 #define CFG_ADHOC_CREATE        (1<<8)
 
-#define CAP_SHARED_KEY          (1<<0) /* Off = OPEN */
-#define CAP_PRIVACY_ON          (1<<1) /* Off = No privacy */
+#define CAP_SHARED_KEY          (1<<0) /* Off = OPEN */
+#define CAP_PRIVACY_ON          (1<<1) /* Off = No privacy */
 
 #define MAX_STATIONS            32
 #define IPW_INVALID_STATION     (0xff)
@@ -989,8 +946,8 @@ struct ipw_priv {
        /* result of ucode download */
        struct alive_command_responce dino_alive;
 
-       wait_queue_head_t wait_command_queue;
-       wait_queue_head_t wait_state;
+       wait_queue_head_t wait_command_queue;
+       wait_queue_head_t wait_state;
 
        /* Rx and Tx DMA processing queues */
        struct ipw_rx_queue *rxq;
@@ -1006,9 +963,9 @@ struct ipw_priv {
        struct average average_rssi;
        struct average average_noise;
        u32 port_type;
-       int rx_bufs_min;          /**< minimum number of bufs in Rx queue */
-       int rx_pend_max;          /**< maximum pending buffers for one IRQ */
-       u32 hcmd_seq;             /**< sequence number for hcmd */
+       int rx_bufs_min;          /**< minimum number of bufs in Rx queue */
+       int rx_pend_max;          /**< maximum pending buffers for one IRQ */
+       u32 hcmd_seq;             /**< sequence number for hcmd */
        u32 missed_beacon_threshold;
        u32 roaming_threshold;
 
@@ -1017,17 +974,17 @@ struct ipw_priv {
 
        unsigned long ts_scan_abort;
        struct ipw_supported_rates rates;
-       struct ipw_rates phy[3];           /**< PHY restrictions, per band */
-       struct ipw_rates supp;             /**< software defined */
-       struct ipw_rates extended;         /**< use for corresp. IE, AP only */
+       struct ipw_rates phy[3];           /**< PHY restrictions, per band */
+       struct ipw_rates supp;             /**< software defined */
+       struct ipw_rates extended;         /**< use for corresp. IE, AP only */
 
        struct notif_link_deterioration last_link_deterioration; /** for statistics */
-       struct ipw_cmdhcmd; /**< host command currently executed */
+       struct ipw_cmd *hcmd; /**< host command currently executed */
 
        wait_queue_head_t hcmd_wq;     /**< host command waits for execution */
-       u32 tsf_bcn[2];              /**< TSF from latest beacon */
+       u32 tsf_bcn[2];              /**< TSF from latest beacon */
 
-       struct notif_calibration calib; /**< last calibration */
+       struct notif_calibration calib; /**< last calibration */
 
        /* ordinal interface with firmware */
        u32 table0_addr;
@@ -1067,8 +1024,8 @@ struct ipw_priv {
        u32 tx_packets;
        u32 quality;
 
-        /* eeprom */
-       u8 eeprom[0x100];  /* 256 bytes of eeprom */
+       /* eeprom */
+       u8 eeprom[0x100];       /* 256 bytes of eeprom */
        int eeprom_delay;
 
        struct iw_statistics wstats;
@@ -1091,7 +1048,6 @@ struct ipw_priv {
 
        struct tasklet_struct irq_tasklet;
 
-
 #define IPW_2200BG  1
 #define IPW_2915ABG 2
        u8 adapter;
@@ -1114,7 +1070,6 @@ struct ipw_priv {
        u32 indirect_byte;
 };                             /*ipw_priv */
 
-
 /* debug macros */
 
 #ifdef CONFIG_IPW_DEBUG
@@ -1170,7 +1125,6 @@ do { if (ipw_debug_level & (level)) \
 #define IPW_DL_RF_KILL       (1<<17)
 #define IPW_DL_FW_ERRORS     (1<<18)
 
-
 #define IPW_DL_ORD           (1<<20)
 
 #define IPW_DL_FRAG          (1<<21)
@@ -1184,7 +1138,6 @@ do { if (ipw_debug_level & (level)) \
 
 #define IPW_DL_STATS         (1<<29)
 
-
 #define IPW_ERROR(f, a...) printk(KERN_ERR DRV_NAME ": " f, ## a)
 #define IPW_WARNING(f, a...) printk(KERN_WARNING DRV_NAME ": " f, ## a)
 #define IPW_DEBUG_INFO(f, a...)    IPW_DEBUG(IPW_DL_INFO, f, ## a)
@@ -1253,12 +1206,12 @@ do { if (ipw_debug_level & (level)) \
 /*
  * RESET Register Bit Indexes
  */
-#define CBD_RESET_REG_PRINCETON_RESET 0x00000001  /* Bit 0 (LSB) */
-#define CX2_RESET_REG_SW_RESET        0x00000080  /* Bit 7       */
-#define CX2_RESET_REG_MASTER_DISABLED 0x00000100  /* Bit 8       */
-#define CX2_RESET_REG_STOP_MASTER     0x00000200  /* Bit 9       */
-#define CX2_ARC_KESHET_CONFIG         0x08000000  /* Bit 27      */
-#define CX2_START_STANDBY             0x00000004  /* Bit 2       */
+#define CBD_RESET_REG_PRINCETON_RESET 0x00000001       /* Bit 0 (LSB) */
+#define CX2_RESET_REG_SW_RESET        0x00000080       /* Bit 7       */
+#define CX2_RESET_REG_MASTER_DISABLED 0x00000100       /* Bit 8       */
+#define CX2_RESET_REG_STOP_MASTER     0x00000200       /* Bit 9       */
+#define CX2_ARC_KESHET_CONFIG         0x08000000       /* Bit 27      */
+#define CX2_START_STANDBY             0x00000004       /* Bit 2       */
 
 #define CX2_CSR_CIS_UPPER_BOUND        0x00000200
 #define CX2_DOMAIN_0_END 0x1000
@@ -1289,14 +1242,12 @@ do { if (ipw_debug_level & (level)) \
 #define CB_SRC_SIZE_LONG  0x00200000
 #define CB_DEST_SIZE_LONG 0x00020000
 
-
 /* DMA DEFINES */
 
 #define DMA_CONTROL_SMALL_CB_CONST_VALUE 0x00540000
 #define DMA_CB_STOP_AND_ABORT            0x00000C00
 #define DMA_CB_START                     0x00000100
 
-
 #define CX2_SHARED_SRAM_SIZE               0x00030000
 #define CX2_SHARED_SRAM_DMA_CONTROL        0x00027000
 #define CB_MAX_LENGTH                      0x1FFF
@@ -1304,7 +1255,6 @@ do { if (ipw_debug_level & (level)) \
 #define CX2_HOST_EEPROM_DATA_SRAM_SIZE 0xA18
 #define CX2_EEPROM_IMAGE_SIZE          0x100
 
-
 /* DMA defs */
 #define CX2_DMA_I_CURRENT_CB  0x003000D0
 #define CX2_DMA_O_CURRENT_CB  0x003000D4
@@ -1356,7 +1306,6 @@ do { if (ipw_debug_level & (level)) \
 #define IPW_WHO_IS_AWAKE             (CX2_SHARED_LOWER_BOUND + 0xB14)
 #define IPW_DURING_ATIM_WINDOW       (CX2_SHARED_LOWER_BOUND + 0xB18)
 
-
 #define MSB                             1
 #define LSB                             0
 #define WORD_TO_BYTE(_word)             ((_word) * sizeof(u16))
@@ -1365,16 +1314,16 @@ do { if (ipw_debug_level & (level)) \
     ( WORD_TO_BYTE(_wordoffset) + (_byteoffset) )
 
 /* EEPROM access by BYTE */
-#define EEPROM_PME_CAPABILITY   (GET_EEPROM_ADDR(0x09,MSB))     /* 1 byte   */
-#define EEPROM_MAC_ADDRESS      (GET_EEPROM_ADDR(0x21,LSB))     /* 6 byte   */
-#define EEPROM_VERSION          (GET_EEPROM_ADDR(0x24,MSB))     /* 1 byte   */
-#define EEPROM_NIC_TYPE         (GET_EEPROM_ADDR(0x25,LSB))     /* 1 byte   */
-#define EEPROM_SKU_CAPABILITY   (GET_EEPROM_ADDR(0x25,MSB))     /* 1 byte   */
-#define EEPROM_COUNTRY_CODE     (GET_EEPROM_ADDR(0x26,LSB))     /* 3 bytes  */
-#define EEPROM_IBSS_CHANNELS_BG (GET_EEPROM_ADDR(0x28,LSB))     /* 2 bytes  */
-#define EEPROM_IBSS_CHANNELS_A  (GET_EEPROM_ADDR(0x29,MSB))     /* 5 bytes  */
-#define EEPROM_BSS_CHANNELS_BG  (GET_EEPROM_ADDR(0x2c,LSB))     /* 2 bytes  */
-#define EEPROM_HW_VERSION       (GET_EEPROM_ADDR(0x72,LSB))     /* 2 bytes  */
+#define EEPROM_PME_CAPABILITY   (GET_EEPROM_ADDR(0x09,MSB))    /* 1 byte   */
+#define EEPROM_MAC_ADDRESS      (GET_EEPROM_ADDR(0x21,LSB))    /* 6 byte   */
+#define EEPROM_VERSION          (GET_EEPROM_ADDR(0x24,MSB))    /* 1 byte   */
+#define EEPROM_NIC_TYPE         (GET_EEPROM_ADDR(0x25,LSB))    /* 1 byte   */
+#define EEPROM_SKU_CAPABILITY   (GET_EEPROM_ADDR(0x25,MSB))    /* 1 byte   */
+#define EEPROM_COUNTRY_CODE     (GET_EEPROM_ADDR(0x26,LSB))    /* 3 bytes  */
+#define EEPROM_IBSS_CHANNELS_BG (GET_EEPROM_ADDR(0x28,LSB))    /* 2 bytes  */
+#define EEPROM_IBSS_CHANNELS_A  (GET_EEPROM_ADDR(0x29,MSB))    /* 5 bytes  */
+#define EEPROM_BSS_CHANNELS_BG  (GET_EEPROM_ADDR(0x2c,LSB))    /* 2 bytes  */
+#define EEPROM_HW_VERSION       (GET_EEPROM_ADDR(0x72,LSB))    /* 2 bytes  */
 
 /* NIC type as found in the one byte EEPROM_NIC_TYPE  offset*/
 #define EEPROM_NIC_TYPE_STANDARD        0
@@ -1479,7 +1428,6 @@ enum {
 #define IPW_RATE_CAPABILITIES 1
 #define IPW_RATE_CONNECT      0
 
-
 /*
  * Rate values and masks
  */
@@ -1524,12 +1472,6 @@ enum {
        IPW_ORD_STAT_TX_DIR_DATA_B_11,
        /* Hole */
 
-
-
-
-
-
-
        IPW_ORD_STAT_TX_DIR_DATA_G_1 = IPW_ORD_TABLE_0_MASK + 19,
        IPW_ORD_STAT_TX_DIR_DATA_G_2,
        IPW_ORD_STAT_TX_DIR_DATA_G_5_5,
@@ -1549,12 +1491,6 @@ enum {
        IPW_ORD_STAT_TX_NON_DIR_DATA_B_11,
        /* Hole */
 
-
-
-
-
-
-
        IPW_ORD_STAT_TX_NON_DIR_DATA_G_1 = IPW_ORD_TABLE_0_MASK + 44,
        IPW_ORD_STAT_TX_NON_DIR_DATA_G_2,
        IPW_ORD_STAT_TX_NON_DIR_DATA_G_5_5,
@@ -1685,7 +1621,7 @@ struct host_cmd {
 #define CFG_BT_COEXISTENCE_WME_OVER_BT          0x08
 #define CFG_BT_COEXISTENCE_OOB                  0x10
 #define CFG_BT_COEXISTENCE_MAX                  0xFF
-#define CFG_BT_COEXISTENCE_DEF                  0x80 /* read Bt from EEPROM*/
+#define CFG_BT_COEXISTENCE_DEF                  0x80   /* read Bt from EEPROM */
 
 #define CFG_CTS_TO_ITSELF_ENABLED_MIN  0x0
 #define CFG_CTS_TO_ITSELF_ENABLED_MAX  0x1
@@ -1727,11 +1663,11 @@ static inline u32 frame_hdr_len(struct ieee80211_hdr *hdr)
        fc = le16_to_cpu(hdr->frame_ctl);
 
        /*
-        * Function     ToDS    FromDS
-        * IBSS         0       0
-        * To AP        1       0
-        * From AP      0       1
-        * WDS (bridge) 1       1
+        * Function     ToDS    FromDS
+        * IBSS         0       0
+        * To AP        1       0
+        * From AP      0       1
+        * WDS (bridge) 1       1
         *
         * Only WDS frames use Address4 among them. --YZ
         */
@@ -1741,4 +1677,4 @@ static inline u32 frame_hdr_len(struct ieee80211_hdr *hdr)
        return retval;
 }
 
-#endif /* __ipw2200_h__ */
+#endif                         /* __ipw2200_h__ */
index 5f507c49907b34c80b466374aa42180c6541a101..ca6c03c89926ca89605c5b881a2ccabc0cb81411 100644 (file)
@@ -471,12 +471,12 @@ static dev_link_t *netwave_attach(void)
     dev->get_stats  = &netwave_get_stats;
     dev->set_multicast_list = &set_multicast_list;
     /* wireless extensions */
-#ifdef WIRELESS_EXT
+#if WIRELESS_EXT <= 16
     dev->get_wireless_stats = &netwave_get_wireless_stats;
+#endif /* WIRELESS_EXT <= 16 */
 #if WIRELESS_EXT > 12
     dev->wireless_handlers = (struct iw_handler_def *)&netwave_handler_def;
 #endif /* WIRELESS_EXT > 12 */
-#endif /* WIRELESS_EXT */
     dev->do_ioctl = &netwave_ioctl;
 
     dev->tx_timeout = &netwave_watchdog;
@@ -839,6 +839,9 @@ static const struct iw_handler_def  netwave_handler_def =
        .standard       = (iw_handler *) netwave_handler,
        .private        = (iw_handler *) netwave_private_handler,
        .private_args   = (struct iw_priv_args *) netwave_private_args,
+#if WIRELESS_EXT > 16
+       .get_wireless_stats = netwave_get_wireless_stats,
+#endif /* WIRELESS_EXT > 16 */
 };
 #endif /* WIRELESS_EXT > 12 */
 
index 0f29a9c7bc2cd6ded382198d06254f767f4e6e58..9a8790e3580c648d33f948717c38bc0d94a29728 100644 (file)
@@ -2727,6 +2727,9 @@ const struct iw_handler_def prism54_handler_def = {
        .standard = (iw_handler *) prism54_handler,
        .private = (iw_handler *) prism54_private_handler,
        .private_args = (struct iw_priv_args *) prism54_private_args,
+#if WIRELESS_EXT > 16
+       .get_wireless_stats = prism54_get_wireless_stats,
+#endif /* WIRELESS_EXT > 16 */
 #if WIRELESS_EXT == 16
        .spy_offset = offsetof(islpci_private, spy_data),
 #endif /* WIRELESS_EXT == 16 */
index efab07e9e24e0a37cfa624b57aa49060c9432e39..6f13d4a8e2d33805b93952d1663459afb7cd8995 100644 (file)
@@ -815,7 +815,6 @@ islpci_setup(struct pci_dev *pdev)
        ndev->open = &islpci_open;
        ndev->stop = &islpci_close;
        ndev->get_stats = &islpci_statistics;
-       ndev->get_wireless_stats = &prism54_get_wireless_stats;
        ndev->do_ioctl = &prism54_ioctl;
        ndev->wireless_handlers =
            (struct iw_handler_def *) &prism54_handler_def;
@@ -844,6 +843,8 @@ islpci_setup(struct pci_dev *pdev)
        /* Add pointers to enable iwspy support. */
        priv->wireless_data.spy_data = &priv->spy_data;
        ndev->wireless_data = &priv->wireless_data;
+#else  /* WIRELESS_EXT > 16 */
+       ndev->get_wireless_stats = &prism54_get_wireless_stats;
 #endif /* WIRELESS_EXT > 16 */
 
        /* save the start and end address of the PCI memory area */
index 0e0ba614259af78415767017af7e3e65c5890946..e9c5ea0f5535dada4e4416fdad26d81caa6de948 100644 (file)
@@ -53,6 +53,7 @@
 #include <pcmcia/ds.h>
 #include <pcmcia/mem_op.h>
 
+#include <net/ieee80211.h>
 #include <linux/wireless.h>
 
 #include <asm/io.h>
@@ -64,7 +65,6 @@
 #define WIRELESS_SPY           /* Enable spying addresses */
 /* Definitions we need for spy */
 typedef struct iw_statistics   iw_stats;
-typedef struct iw_quality      iw_qual;
 typedef u_char mac_addr[ETH_ALEN];     /* Hardware address */
 
 #include "rayctl.h"
@@ -101,7 +101,6 @@ static int ray_dev_close(struct net_device *dev);
 static int ray_dev_config(struct net_device *dev, struct ifmap *map);
 static struct net_device_stats *ray_get_stats(struct net_device *dev);
 static int ray_dev_init(struct net_device *dev);
-static int ray_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
 
 static struct ethtool_ops netdev_ethtool_ops;
 
@@ -114,9 +113,8 @@ static int translate_frame(ray_dev_t *local, struct tx_msg __iomem *ptx,
 static void ray_build_header(ray_dev_t *local, struct tx_msg __iomem *ptx, UCHAR msg_type,
                 unsigned char *data);
 static void untranslate(ray_dev_t *local, struct sk_buff *skb, int len);
-#if WIRELESS_EXT > 7   /* If wireless extension exist in the kernel */
 static iw_stats * ray_get_wireless_stats(struct net_device *   dev);
-#endif /* WIRELESS_EXT > 7 */
+static const struct iw_handler_def     ray_handler_def;
 
 /***** Prototypes for raylink functions **************************************/
 static int asc_to_int(char a);
@@ -373,11 +371,12 @@ static dev_link_t *ray_attach(void)
     dev->hard_start_xmit = &ray_dev_start_xmit;
     dev->set_config = &ray_dev_config;
     dev->get_stats  = &ray_get_stats;
-    dev->do_ioctl = &ray_dev_ioctl;
     SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
-#if WIRELESS_EXT > 7   /* If wireless extension exist in the kernel */
-    dev->get_wireless_stats = ray_get_wireless_stats;
-#endif
+    dev->wireless_handlers = &ray_handler_def;
+#ifdef WIRELESS_SPY
+    local->wireless_data.spy_data = &local->spy_data;
+    dev->wireless_data = &local->wireless_data;
+#endif /* WIRELESS_SPY */
 
     dev->set_multicast_list = &set_multicast_list;
 
@@ -1201,436 +1200,420 @@ static struct ethtool_ops netdev_ethtool_ops = {
 
 /*====================================================================*/
 
-static int ray_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : get protocol name
+ */
+static int ray_get_name(struct net_device *dev,
+                       struct iw_request_info *info,
+                       char *cwrq,
+                       char *extra)
 {
-    ray_dev_t *local = (ray_dev_t *)dev->priv;
-    dev_link_t *link = local->finder;
-    int err = 0;
-#if WIRELESS_EXT > 7
-    struct iwreq *wrq = (struct iwreq *) ifr;
-#endif /* WIRELESS_EXT > 7 */
-#ifdef WIRELESS_SPY
-    struct sockaddr    address[IW_MAX_SPY];
-#endif /* WIRELESS_SPY */
+       strcpy(cwrq, "IEEE 802.11-FH");
+       return 0;
+}
 
-    if (!(link->state & DEV_PRESENT)) {
-        DEBUG(2,"ray_dev_ioctl - device not present\n");
-        return -1;
-    }
-    DEBUG(2,"ray_cs IOCTL dev=%p, ifr=%p, cmd = 0x%x\n",dev,ifr,cmd);
-    /* Validate the command */
-    switch (cmd)
-    {
-#if WIRELESS_EXT > 7
-      /* --------------- WIRELESS EXTENSIONS --------------- */
-      /* Get name */
-    case SIOCGIWNAME:
-      strcpy(wrq->u.name, "IEEE 802.11-FH");
-      break;
-
-      /* Get frequency/channel */
-    case SIOCGIWFREQ:
-      wrq->u.freq.m = local->sparm.b5.a_hop_pattern;
-      wrq->u.freq.e = 0;
-      break;
-
-      /* Set frequency/channel */
-    case SIOCSIWFREQ:
-      /* Reject if card is already initialised */
-      if(local->card_status != CARD_AWAITING_PARAM)
-       {
-         err = -EBUSY;
-         break;
-       }
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : set frequency
+ */
+static int ray_set_freq(struct net_device *dev,
+                       struct iw_request_info *info,
+                       struct iw_freq *fwrq,
+                       char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
+       int err = -EINPROGRESS;         /* Call commit handler */
 
-      /* Setting by channel number */
-      if ((wrq->u.freq.m > USA_HOP_MOD) || (wrq->u.freq.e > 0))
-       err = -EOPNOTSUPP;
-      else
-         local->sparm.b5.a_hop_pattern = wrq->u.freq.m;
-      break;
+       /* Reject if card is already initialised */
+       if(local->card_status != CARD_AWAITING_PARAM)
+               return -EBUSY;
 
-      /* Get current network name (ESSID) */
-    case SIOCGIWESSID:
-      if (wrq->u.data.pointer)
-       {
-         char essid[IW_ESSID_MAX_SIZE + 1];
-         /* Get the essid that was set */
-         memcpy(essid, local->sparm.b5.a_current_ess_id,
-                IW_ESSID_MAX_SIZE);
-         essid[IW_ESSID_MAX_SIZE] = '\0';
-
-         /* Push it out ! */
-         wrq->u.data.length = strlen(essid) + 1;
-         wrq->u.data.flags = 1; /* active */
-         if (copy_to_user(wrq->u.data.pointer, essid, sizeof(essid)))
-                 err = -EFAULT;
-       }
-      break;
+       /* Setting by channel number */
+       if ((fwrq->m > USA_HOP_MOD) || (fwrq->e > 0))
+               err = -EOPNOTSUPP;
+       else
+               local->sparm.b5.a_hop_pattern = fwrq->m;
 
-      /* Set desired network name (ESSID) */
-    case SIOCSIWESSID:
-      /* Reject if card is already initialised */
-      if(local->card_status != CARD_AWAITING_PARAM)
-       {
-         err = -EBUSY;
-         break;
-       }
+       return err;
+}
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : get frequency
+ */
+static int ray_get_freq(struct net_device *dev,
+                       struct iw_request_info *info,
+                       struct iw_freq *fwrq,
+                       char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
 
-       if (wrq->u.data.pointer)
-       {
-           char        card_essid[IW_ESSID_MAX_SIZE + 1];
-           
-           /* Check if we asked for `any' */
-           if(wrq->u.data.flags == 0)
-           {
+       fwrq->m = local->sparm.b5.a_hop_pattern;
+       fwrq->e = 0;
+       return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : set ESSID
+ */
+static int ray_set_essid(struct net_device *dev,
+                        struct iw_request_info *info,
+                        struct iw_point *dwrq,
+                        char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
+
+       /* Reject if card is already initialised */
+       if(local->card_status != CARD_AWAITING_PARAM)
+               return -EBUSY;
+
+       /* Check if we asked for `any' */
+       if(dwrq->flags == 0) {
                /* Corey : can you do that ? */
-               err = -EOPNOTSUPP;
-           }
-           else
-           {
+               return -EOPNOTSUPP;
+       } else {
                /* Check the size of the string */
-               if(wrq->u.data.length >
-                  IW_ESSID_MAX_SIZE + 1)
-               {
-                   err = -E2BIG;
-                   break;
-               }
-               if (copy_from_user(card_essid,
-                                  wrq->u.data.pointer,
-                                  wrq->u.data.length)) {
-                       err = -EFAULT;
-                       break;
+               if(dwrq->length > IW_ESSID_MAX_SIZE + 1) {
+                       return -E2BIG;
                }
-               card_essid[IW_ESSID_MAX_SIZE] = '\0';
 
                /* Set the ESSID in the card */
-               memcpy(local->sparm.b5.a_current_ess_id, card_essid,
-                      IW_ESSID_MAX_SIZE);
-           }
+               memset(local->sparm.b5.a_current_ess_id, 0, IW_ESSID_MAX_SIZE);
+               memcpy(local->sparm.b5.a_current_ess_id, extra, dwrq->length);
        }
-       break;
-
-      /* Get current Access Point (BSSID in our case) */
-    case SIOCGIWAP:
-      memcpy(wrq->u.ap_addr.sa_data, local->bss_id, ETH_ALEN);
-      wrq->u.ap_addr.sa_family = ARPHRD_ETHER;
-      break;
-
-      /* Get the current bit-rate */
-    case SIOCGIWRATE:
-      if(local->net_default_tx_rate == 3)
-       wrq->u.bitrate.value = 2000000;         /* Hum... */
-      else
-       wrq->u.bitrate.value = local->net_default_tx_rate * 500000;
-      wrq->u.bitrate.fixed = 0;                /* We are in auto mode */
-      break;
-
-      /* Set the desired bit-rate */
-    case SIOCSIWRATE:
-      /* Check if rate is in range */
-      if((wrq->u.bitrate.value != 1000000) &&
-        (wrq->u.bitrate.value != 2000000))
-       {
-         err = -EINVAL;
-         break;
-       }
-      /* Hack for 1.5 Mb/s instead of 2 Mb/s */
-      if((local->fw_ver == 0x55) &&            /* Please check */
-        (wrq->u.bitrate.value == 2000000))
-       local->net_default_tx_rate = 3;
-      else
-       local->net_default_tx_rate = wrq->u.bitrate.value/500000;
-      break;
-
-      /* Get the current RTS threshold */
-    case SIOCGIWRTS:
-      wrq->u.rts.value = (local->sparm.b5.a_rts_threshold[0] << 8)
-       + local->sparm.b5.a_rts_threshold[1];
-#if WIRELESS_EXT > 8
-      wrq->u.rts.disabled = (wrq->u.rts.value == 32767);
-#endif /* WIRELESS_EXT > 8 */
-      wrq->u.rts.fixed = 1;
-      break;
-
-      /* Set the desired RTS threshold */
-    case SIOCSIWRTS:
-    {
-       int rthr = wrq->u.rts.value;
 
-      /* Reject if card is already initialised */
-      if(local->card_status != CARD_AWAITING_PARAM)
-       {
-         err = -EBUSY;
-         break;
-       }
+       return -EINPROGRESS;            /* Call commit handler */
+}
 
-       /* if(wrq->u.rts.fixed == 0) we should complain */
-#if WIRELESS_EXT > 8
-       if(wrq->u.rts.disabled)
-           rthr = 32767;
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : get ESSID
+ */
+static int ray_get_essid(struct net_device *dev,
+                        struct iw_request_info *info,
+                        struct iw_point *dwrq,
+                        char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
+
+       /* Get the essid that was set */
+       memcpy(extra, local->sparm.b5.a_current_ess_id, IW_ESSID_MAX_SIZE);
+       extra[IW_ESSID_MAX_SIZE] = '\0';
+
+       /* Push it out ! */
+       dwrq->length = strlen(extra) + 1;
+       dwrq->flags = 1; /* active */
+
+       return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : get AP address
+ */
+static int ray_get_wap(struct net_device *dev,
+                       struct iw_request_info *info,
+                       struct sockaddr *awrq,
+                       char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
+
+       memcpy(awrq->sa_data, local->bss_id, ETH_ALEN);
+       awrq->sa_family = ARPHRD_ETHER;
+
+       return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : set Bit-Rate
+ */
+static int ray_set_rate(struct net_device *dev,
+                       struct iw_request_info *info,
+                       struct iw_param *vwrq,
+                       char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
+
+       /* Reject if card is already initialised */
+       if(local->card_status != CARD_AWAITING_PARAM)
+               return -EBUSY;
+
+       /* Check if rate is in range */
+       if((vwrq->value != 1000000) && (vwrq->value != 2000000))
+               return -EINVAL;
+
+       /* Hack for 1.5 Mb/s instead of 2 Mb/s */
+       if((local->fw_ver == 0x55) &&           /* Please check */
+          (vwrq->value == 2000000))
+               local->net_default_tx_rate = 3;
        else
-#endif /* WIRELESS_EXT > 8 */
-           if((rthr < 0) || (rthr > 2347)) /* What's the max packet size ??? */
-           {
-               err = -EINVAL;
-               break;
-           }
+               local->net_default_tx_rate = vwrq->value/500000;
+
+       return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : get Bit-Rate
+ */
+static int ray_get_rate(struct net_device *dev,
+                       struct iw_request_info *info,
+                       struct iw_param *vwrq,
+                       char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
+
+       if(local->net_default_tx_rate == 3)
+               vwrq->value = 2000000;          /* Hum... */
+       else
+               vwrq->value = local->net_default_tx_rate * 500000;
+       vwrq->fixed = 0;                /* We are in auto mode */
+
+       return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : set RTS threshold
+ */
+static int ray_set_rts(struct net_device *dev,
+                      struct iw_request_info *info,
+                      struct iw_param *vwrq,
+                      char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
+       int rthr = vwrq->value;
+
+       /* Reject if card is already initialised */
+       if(local->card_status != CARD_AWAITING_PARAM)
+               return -EBUSY;
+
+       /* if(wrq->u.rts.fixed == 0) we should complain */
+       if(vwrq->disabled)
+               rthr = 32767;
+       else {
+               if((rthr < 0) || (rthr > 2347)) /* What's the max packet size ??? */
+                       return -EINVAL;
+       }
        local->sparm.b5.a_rts_threshold[0] = (rthr >> 8) & 0xFF;
        local->sparm.b5.a_rts_threshold[1] = rthr & 0xFF;
-    }
-    break;
 
-      /* Get the current fragmentation threshold */
-    case SIOCGIWFRAG:
-      wrq->u.frag.value = (local->sparm.b5.a_frag_threshold[0] << 8)
-       + local->sparm.b5.a_frag_threshold[1];
-#if WIRELESS_EXT > 8
-      wrq->u.frag.disabled = (wrq->u.frag.value == 32767);
-#endif /* WIRELESS_EXT > 8 */
-      wrq->u.frag.fixed = 1;
-      break;
+       return -EINPROGRESS;            /* Call commit handler */
+}
 
-      /* Set the desired fragmentation threshold */
-    case SIOCSIWFRAG:
-    {
-       int fthr = wrq->u.frag.value;
 
-      /* Reject if card is already initialised */
-      if(local->card_status != CARD_AWAITING_PARAM)
-       {
-         err = -EBUSY;
-         break;
-       }
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : get RTS threshold
+ */
+static int ray_get_rts(struct net_device *dev,
+                      struct iw_request_info *info,
+                      struct iw_param *vwrq,
+                      char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
+
+       vwrq->value = (local->sparm.b5.a_rts_threshold[0] << 8)
+               + local->sparm.b5.a_rts_threshold[1];
+       vwrq->disabled = (vwrq->value == 32767);
+       vwrq->fixed = 1;
+
+       return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : set Fragmentation threshold
+ */
+static int ray_set_frag(struct net_device *dev,
+                       struct iw_request_info *info,
+                       struct iw_param *vwrq,
+                       char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
+       int fthr = vwrq->value;
+
+       /* Reject if card is already initialised */
+       if(local->card_status != CARD_AWAITING_PARAM)
+               return -EBUSY;
 
        /* if(wrq->u.frag.fixed == 0) should complain */
-#if WIRELESS_EXT > 8
-       if(wrq->u.frag.disabled)
-           fthr = 32767;
-       else
-#endif /* WIRELESS_EXT > 8 */
-           if((fthr < 256) || (fthr > 2347)) /* To check out ! */
-           {
-               err = -EINVAL;
-               break;
-           }
+       if(vwrq->disabled)
+               fthr = 32767;
+       else {
+               if((fthr < 256) || (fthr > 2347)) /* To check out ! */
+                       return -EINVAL;
+       }
        local->sparm.b5.a_frag_threshold[0] = (fthr >> 8) & 0xFF;
        local->sparm.b5.a_frag_threshold[1] = fthr & 0xFF;
-    }
-    break;
 
-#endif /* WIRELESS_EXT > 7 */
-#if WIRELESS_EXT > 8
+       return -EINPROGRESS;            /* Call commit handler */
+}
 
-      /* Get the current mode of operation */
-    case SIOCGIWMODE:
-      if(local->sparm.b5.a_network_type)
-       wrq->u.mode = IW_MODE_INFRA;
-      else
-       wrq->u.mode = IW_MODE_ADHOC;
-      break;
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : get Fragmentation threshold
+ */
+static int ray_get_frag(struct net_device *dev,
+                       struct iw_request_info *info,
+                       struct iw_param *vwrq,
+                       char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
 
-      /* Set the current mode of operation */
-    case SIOCSIWMODE:
-    {
+       vwrq->value = (local->sparm.b5.a_frag_threshold[0] << 8)
+               + local->sparm.b5.a_frag_threshold[1];
+       vwrq->disabled = (vwrq->value == 32767);
+       vwrq->fixed = 1;
+
+       return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : set Mode of Operation
+ */
+static int ray_set_mode(struct net_device *dev,
+                       struct iw_request_info *info,
+                       __u32 *uwrq,
+                       char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
+       int err = -EINPROGRESS;         /* Call commit handler */
        char card_mode = 1;
-       
-      /* Reject if card is already initialised */
-      if(local->card_status != CARD_AWAITING_PARAM)
-       {
-         err = -EBUSY;
-         break;
-       }
 
-       switch (wrq->u.mode)
+       /* Reject if card is already initialised */
+       if(local->card_status != CARD_AWAITING_PARAM)
+               return -EBUSY;
+
+       switch (*uwrq)
        {
        case IW_MODE_ADHOC:
-           card_mode = 0;
-           // Fall through
+               card_mode = 0;
+               // Fall through
        case IW_MODE_INFRA:
-           local->sparm.b5.a_network_type = card_mode;
-           break;
+               local->sparm.b5.a_network_type = card_mode;
+               break;
        default:
-           err = -EINVAL;
+               err = -EINVAL;
        }
-    }
-    break;
 
-#endif /* WIRELESS_EXT > 8 */
-#if WIRELESS_EXT > 7
-      /* ------------------ IWSPY SUPPORT ------------------ */
-      /* Define the range (variations) of above parameters */
-    case SIOCGIWRANGE:
-      /* Basic checking... */
-      if(wrq->u.data.pointer != (caddr_t) 0)
-       {
-         struct iw_range       range;
-         memset((char *) &range, 0, sizeof(struct iw_range));
-
-         /* Set the length (very important for backward compatibility) */
-         wrq->u.data.length = sizeof(struct iw_range);
-
-#if WIRELESS_EXT > 10
-         /* Set the Wireless Extension versions */
-         range.we_version_compiled = WIRELESS_EXT;
-         range.we_version_source = 9;
-#endif /* WIRELESS_EXT > 10 */
-
-         /* Set information in the range struct */
-         range.throughput = 1.1 * 1000 * 1000; /* Put the right number here */
-         range.num_channels = hop_pattern_length[(int)country]; 
-         range.num_frequency = 0;
-         range.max_qual.qual = 0;
-         range.max_qual.level = 255;   /* What's the correct value ? */
-         range.max_qual.noise = 255;   /* Idem */
-         range.num_bitrates = 2;
-         range.bitrate[0] = 1000000;   /* 1 Mb/s */
-         range.bitrate[1] = 2000000;   /* 2 Mb/s */
-
-         /* Copy structure to the user buffer */
-         if(copy_to_user(wrq->u.data.pointer, &range,
-                         sizeof(struct iw_range)))
-           err = -EFAULT;
-       }
-      break;
+       return err;
+}
 
-#ifdef WIRELESS_SPY
-      /* Set addresses to spy */
-    case SIOCSIWSPY:
     /* Check the number of addresses */
-      if(wrq->u.data.length > IW_MAX_SPY)
-       {
-         err = -E2BIG;
-         break;
-       }
-      local->spy_number = wrq->u.data.length;
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : get Mode of Operation
+ */
+static int ray_get_mode(struct net_device *dev,
+                       struct iw_request_info *info,
+                       __u32 *uwrq,
+                       char *extra)
+{
+       ray_dev_t *local = (ray_dev_t *)dev->priv;
 
-      /* If there is some addresses to copy */
-      if(local->spy_number > 0)
-       {
-         int                   i;
-
-         /* Copy addresses to the driver */
-         if(copy_from_user(address, wrq->u.data.pointer,
-                           sizeof(struct sockaddr) * local->spy_number))
-           {
-             err = -EFAULT;
-             break;
-           }
-
-         /* Copy addresses to the lp structure */
-         for(i = 0; i < local->spy_number; i++)
-           memcpy(local->spy_address[i], address[i].sa_data, ETH_ALEN);
-
-         /* Reset structure... */
-         memset(local->spy_stat, 0x00, sizeof(iw_qual) * IW_MAX_SPY);
-
-#ifdef DEBUG_IOCTL_INFO
-         printk(KERN_DEBUG "SetSpy - Set of new addresses is :\n");
-         for(i = 0; i < local->spy_number; i++)
-           printk(KERN_DEBUG "%02X:%02X:%02X:%02X:%02X:%02X\n",
-                  local->spy_address[i][0],
-                  local->spy_address[i][1],
-                  local->spy_address[i][2],
-                  local->spy_address[i][3],
-                  local->spy_address[i][4],
-                  local->spy_address[i][5]);
-#endif /* DEBUG_IOCTL_INFO */
-       }
-      break;
+       if(local->sparm.b5.a_network_type)
+               *uwrq = IW_MODE_INFRA;
+       else
+               *uwrq = IW_MODE_ADHOC;
 
-      /* Get the spy list and spy stats */
-    case SIOCGIWSPY:
-      /* Set the number of addresses */
-      wrq->u.data.length = local->spy_number;
+       return 0;
+}
 
-      /* If the user want to have the addresses back... */
-      if((local->spy_number > 0) && (wrq->u.data.pointer != (caddr_t) 0))
-       {
-         int                   i;
-
-         /* Copy addresses from the lp structure */
-         for(i = 0; i < local->spy_number; i++)
-           {
-             memcpy(address[i].sa_data, local->spy_address[i], ETH_ALEN);
-             address[i].sa_family = ARPHRD_ETHER;
-           }
-
-         /* Copy addresses to the user buffer */
-         if(copy_to_user(wrq->u.data.pointer, address,
-                      sizeof(struct sockaddr) * local->spy_number))
-           {
-             err = -EFAULT;
-             break;
-           }
-
-         /* Copy stats to the user buffer (just after) */
-         if(copy_to_user(wrq->u.data.pointer +
-                      (sizeof(struct sockaddr) * local->spy_number),
-                      local->spy_stat, sizeof(iw_qual) * local->spy_number))
-           {
-             err = -EFAULT;
-             break;
-           }
-
-         /* Reset updated flags */
-         for(i = 0; i < local->spy_number; i++)
-           local->spy_stat[i].updated = 0x0;
-       }       /* if(pointer != NULL) */
-
-      break;
-#endif /* WIRELESS_SPY */
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Handler : get range info
+ */
+static int ray_get_range(struct net_device *dev,
+                        struct iw_request_info *info,
+                        struct iw_point *dwrq,
+                        char *extra)
+{
+       struct iw_range *range = (struct iw_range *) extra;
+
+       memset((char *) range, 0, sizeof(struct iw_range));
+
+       /* Set the length (very important for backward compatibility) */
+       dwrq->length = sizeof(struct iw_range);
+
+       /* Set the Wireless Extension versions */
+       range->we_version_compiled = WIRELESS_EXT;
+       range->we_version_source = 9;
+
+       /* Set information in the range struct */
+       range->throughput = 1.1 * 1000 * 1000;  /* Put the right number here */
+       range->num_channels = hop_pattern_length[(int)country]; 
+       range->num_frequency = 0;
+       range->max_qual.qual = 0;
+       range->max_qual.level = 255;    /* What's the correct value ? */
+       range->max_qual.noise = 255;    /* Idem */
+       range->num_bitrates = 2;
+       range->bitrate[0] = 1000000;    /* 1 Mb/s */
+       range->bitrate[1] = 2000000;    /* 2 Mb/s */
+       return 0;
+}
 
-      /* ------------------ PRIVATE IOCTL ------------------ */
-#ifndef SIOCIWFIRSTPRIV
-#define SIOCIWFIRSTPRIV        SIOCDEVPRIVATE
-#endif /* SIOCIWFIRSTPRIV */
-#define SIOCSIPFRAMING SIOCIWFIRSTPRIV         /* Set framing mode */
-#define SIOCGIPFRAMING SIOCIWFIRSTPRIV + 1     /* Get framing mode */
-#define SIOCGIPCOUNTRY SIOCIWFIRSTPRIV + 3     /* Get country code */
-    case SIOCSIPFRAMING:
-      if(!capable(CAP_NET_ADMIN))      /* For private IOCTLs, we need to check permissions */
-       {
-         err = -EPERM;
-         break;
-       }
-      translate = *(wrq->u.name);      /* Set framing mode */
-      break;
-    case SIOCGIPFRAMING:
-      *(wrq->u.name) = translate;
-      break;
-    case SIOCGIPCOUNTRY:
-      *(wrq->u.name) = country;
-      break;
-    case SIOCGIWPRIV:
-      /* Export our "private" intercace */
-      if(wrq->u.data.pointer != (caddr_t) 0)
-       {
-         struct iw_priv_args   priv[] =
-         {     /* cmd,         set_args,       get_args,       name */
-           { SIOCSIPFRAMING, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, 0, "set_framing" },
-           { SIOCGIPFRAMING, 0, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, "get_framing" },
-           { SIOCGIPCOUNTRY, 0, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, "get_country" },
-         };
-         /* Set the number of ioctl available */
-         wrq->u.data.length = 3;
-         /* Copy structure to the user buffer */
-         if(copy_to_user(wrq->u.data.pointer, (u_char *) priv,
-                      sizeof(priv)))
-           err = -EFAULT;
-       }
-      break;
-#endif /* WIRELESS_EXT > 7 */
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Private Handler : set framing mode
+ */
+static int ray_set_framing(struct net_device *dev,
+                          struct iw_request_info *info,
+                          union iwreq_data *wrqu,
+                          char *extra)
+{
+       translate = *(extra);   /* Set framing mode */
 
+       return 0;
+}
 
-        default:
-            DEBUG(0,"ray_dev_ioctl cmd = 0x%x\n", cmd);
-            err = -EOPNOTSUPP;
-    }
-    return err;
-} /* end ray_dev_ioctl */
-/*===========================================================================*/
-#if WIRELESS_EXT > 7   /* If wireless extension exist in the kernel */
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Private Handler : get framing mode
+ */
+static int ray_get_framing(struct net_device *dev,
+                          struct iw_request_info *info,
+                          union iwreq_data *wrqu,
+                          char *extra)
+{
+       *(extra) = translate;
+
+       return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wireless Private Handler : get country
+ */
+static int ray_get_country(struct net_device *dev,
+                          struct iw_request_info *info,
+                          union iwreq_data *wrqu,
+                          char *extra)
+{
+       *(extra) = country;
+
+       return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Commit handler : called after a bunch of SET operations
+ */
+static int ray_commit(struct net_device *dev,
+                     struct iw_request_info *info,     /* NULL */
+                     void *zwrq,                       /* NULL */
+                     char *extra)                      /* NULL */
+{
+       return 0;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Stats handler : return Wireless Stats
+ */
 static iw_stats * ray_get_wireless_stats(struct net_device *   dev)
 {
   ray_dev_t *  local = (ray_dev_t *) dev->priv;
@@ -1642,13 +1625,13 @@ static iw_stats * ray_get_wireless_stats(struct net_device *    dev)
 
   local->wstats.status = local->card_status;
 #ifdef WIRELESS_SPY
-  if((local->spy_number > 0) && (local->sparm.b5.a_network_type == 0))
+  if((local->spy_data.spy_number > 0) && (local->sparm.b5.a_network_type == 0))
     {
       /* Get it from the first node in spy list */
-      local->wstats.qual.qual = local->spy_stat[0].qual;
-      local->wstats.qual.level = local->spy_stat[0].level;
-      local->wstats.qual.noise = local->spy_stat[0].noise;
-      local->wstats.qual.updated = local->spy_stat[0].updated;
+      local->wstats.qual.qual = local->spy_data.spy_stat[0].qual;
+      local->wstats.qual.level = local->spy_data.spy_stat[0].level;
+      local->wstats.qual.noise = local->spy_data.spy_stat[0].noise;
+      local->wstats.qual.updated = local->spy_data.spy_stat[0].updated;
     }
 #endif /* WIRELESS_SPY */
 
@@ -1659,7 +1642,65 @@ static iw_stats * ray_get_wireless_stats(struct net_device *     dev)
 
   return &local->wstats;
 } /* end ray_get_wireless_stats */
-#endif /* WIRELESS_EXT > 7 */
+
+/*------------------------------------------------------------------*/
+/*
+ * Structures to export the Wireless Handlers
+ */
+
+static const iw_handler        ray_handler[] = {
+       [SIOCSIWCOMMIT-SIOCIWFIRST] (iw_handler) ray_commit,
+       [SIOCGIWNAME  -SIOCIWFIRST] (iw_handler) ray_get_name,
+       [SIOCSIWFREQ  -SIOCIWFIRST] (iw_handler) ray_set_freq,
+       [SIOCGIWFREQ  -SIOCIWFIRST] (iw_handler) ray_get_freq,
+       [SIOCSIWMODE  -SIOCIWFIRST] (iw_handler) ray_set_mode,
+       [SIOCGIWMODE  -SIOCIWFIRST] (iw_handler) ray_get_mode,
+       [SIOCGIWRANGE -SIOCIWFIRST] (iw_handler) ray_get_range,
+#ifdef WIRELESS_SPY
+       [SIOCSIWSPY   -SIOCIWFIRST] (iw_handler) iw_handler_set_spy,
+       [SIOCGIWSPY   -SIOCIWFIRST] (iw_handler) iw_handler_get_spy,
+       [SIOCSIWTHRSPY-SIOCIWFIRST] (iw_handler) iw_handler_set_thrspy,
+       [SIOCGIWTHRSPY-SIOCIWFIRST] (iw_handler) iw_handler_get_thrspy,
+#endif /* WIRELESS_SPY */
+       [SIOCGIWAP    -SIOCIWFIRST] (iw_handler) ray_get_wap,
+       [SIOCSIWESSID -SIOCIWFIRST] (iw_handler) ray_set_essid,
+       [SIOCGIWESSID -SIOCIWFIRST] (iw_handler) ray_get_essid,
+       [SIOCSIWRATE  -SIOCIWFIRST] (iw_handler) ray_set_rate,
+       [SIOCGIWRATE  -SIOCIWFIRST] (iw_handler) ray_get_rate,
+       [SIOCSIWRTS   -SIOCIWFIRST] (iw_handler) ray_set_rts,
+       [SIOCGIWRTS   -SIOCIWFIRST] (iw_handler) ray_get_rts,
+       [SIOCSIWFRAG  -SIOCIWFIRST] (iw_handler) ray_set_frag,
+       [SIOCGIWFRAG  -SIOCIWFIRST] (iw_handler) ray_get_frag,
+};
+
+#define SIOCSIPFRAMING SIOCIWFIRSTPRIV         /* Set framing mode */
+#define SIOCGIPFRAMING SIOCIWFIRSTPRIV + 1     /* Get framing mode */
+#define SIOCGIPCOUNTRY SIOCIWFIRSTPRIV + 3     /* Get country code */
+
+static const iw_handler        ray_private_handler[] = {
+       [0] (iw_handler) ray_set_framing,
+       [1] (iw_handler) ray_get_framing,
+       [3] (iw_handler) ray_get_country,
+};
+
+static const struct iw_priv_args       ray_private_args[] = {
+/* cmd,                set_args,       get_args,       name */
+{ SIOCSIPFRAMING, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, 0, "set_framing" },
+{ SIOCGIPFRAMING, 0, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, "get_framing" },
+{ SIOCGIPCOUNTRY, 0, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, "get_country" },
+};
+
+static const struct iw_handler_def     ray_handler_def =
+{
+       .num_standard   = sizeof(ray_handler)/sizeof(iw_handler),
+       .num_private    = sizeof(ray_private_handler)/sizeof(iw_handler),
+       .num_private_args = sizeof(ray_private_args)/sizeof(struct iw_priv_args),
+       .standard       = ray_handler,
+       .private        = ray_private_handler,
+       .private_args   = ray_private_args,
+       .get_wireless_stats = ray_get_wireless_stats,
+};
+
 /*===========================================================================*/
 static int ray_open(struct net_device *dev)
 {
@@ -2392,20 +2433,15 @@ static void rx_data(struct net_device *dev, struct rcs __iomem *prcs, unsigned i
        /*local->wstats.qual.noise = none ? */
        local->wstats.qual.updated = 0x2;
       }
-    /* Now, for the addresses in the spy list */
+    /* Now, update the spy stuff */
     {
-      int      i;
-      /* Look all addresses */
-      for(i = 0; i < local->spy_number; i++)
-       /* If match */
-       if(!memcmp(linksrcaddr, local->spy_address[i], ETH_ALEN))
-         {
-           /* Update statistics */
-           /*local->spy_stat[i].qual = none ? */
-           local->spy_stat[i].level = siglev;
-           /*local->spy_stat[i].noise = none ? */
-           local->spy_stat[i].updated = 0x2;
-         }
+       struct iw_quality wstats;
+       wstats.level = siglev;
+       /* wstats.noise = none ? */
+       /* wstats.qual = none ? */
+       wstats.updated = 0x2;
+       /* Update spy records */
+       wireless_spy_update(dev, linksrcaddr, &wstats);
     }
 #endif /* WIRELESS_SPY */
 } /* end rx_data */
index c77afa14fa86347a4eabc1eeffde559cecaa7367..42660fe64bfd900e8755a4a62dc8641581e13d4b 100644 (file)
@@ -63,13 +63,10 @@ typedef struct ray_dev_t {
     UCHAR last_rsl;
     int beacon_rxed;
     struct beacon_rx last_bcn;
-#ifdef WIRELESS_EXT
     iw_stats   wstats;         /* Wireless specific stats */
-#endif
 #ifdef WIRELESS_SPY
-    int                spy_number;             /* Number of addresses to spy */
-    mac_addr   spy_address[IW_MAX_SPY + 1];    /* The addresses to spy */
-    iw_qual    spy_stat[IW_MAX_SPY + 1];       /* Statistics gathered */
+    struct iw_spy_data         spy_data;
+    struct iw_public_data      wireless_data;
 #endif /* WIRELESS_SPY */
 
 } ray_dev_t;
index b5719437e981a680ec655863e89bed5ce88379ec..7fcbe589c3f2bf4808284e1dfc595c8127fb6589 100644 (file)
@@ -609,6 +609,7 @@ struct wl3501_card {
        struct net_device_stats         stats;
        struct iw_statistics            wstats;
        struct iw_spy_data              spy_data;
+       struct iw_public_data           wireless_data;
        struct dev_node_t               node;
 };
 #endif
index 7cc5edbf6edee7f4c41bfd8503319801c19a208c..3f8c27f0871be01905cf61458845304e8e4e210d 100644 (file)
@@ -1944,7 +1944,7 @@ static const iw_handler   wl3501_handler[] = {
 static const struct iw_handler_def wl3501_handler_def = {
        .num_standard   = sizeof(wl3501_handler) / sizeof(iw_handler),
        .standard       = (iw_handler *)wl3501_handler,
-       .spy_offset     = offsetof(struct wl3501_card, spy_data),
+       .get_wireless_stats = wl3501_get_wireless_stats,
 };
 
 /**
@@ -1961,6 +1961,7 @@ static dev_link_t *wl3501_attach(void)
        client_reg_t client_reg;
        dev_link_t *link;
        struct net_device *dev;
+       struct wl3501_card *this;
        int ret;
 
        /* Initialize the dev_link_t structure */
@@ -1995,7 +1996,9 @@ static dev_link_t *wl3501_attach(void)
        dev->tx_timeout         = wl3501_tx_timeout;
        dev->watchdog_timeo     = 5 * HZ;
        dev->get_stats          = wl3501_get_stats;
-       dev->get_wireless_stats = wl3501_get_wireless_stats;
+       this = dev->priv;
+       this->wireless_data.spy_data = &this->spy_data;
+       dev->wireless_data      = &this->wireless_data;
        dev->wireless_handlers  = (struct iw_handler_def *)&wl3501_handler_def;
        SET_ETHTOOL_OPS(dev, &ops);
        netif_stop_queue(dev);
index 4598c6a9212df977024db0fd43311a0f7dcf1530..97f723179f621d15ed3f9283a8a80446aa4a2cb0 100644 (file)
@@ -2739,6 +2739,7 @@ enum parport_pc_pci_cards {
        syba_2p_epp,
        syba_1p_ecp,
        titan_010l,
+       titan_1284p1,
        titan_1284p2,
        avlab_1p,
        avlab_2p,
@@ -2811,6 +2812,7 @@ static struct parport_pc_pci {
        /* syba_2p_epp AP138B */        { 2, { { 0, 0x078 }, { 0, 0x178 }, } },
        /* syba_1p_ecp W83787 */        { 1, { { 0, 0x078 }, } },
        /* titan_010l */                { 1, { { 3, -1 }, } },
+       /* titan_1284p1 */              { 1, { { 0, 1 }, } },
        /* titan_1284p2 */              { 2, { { 0, 1 }, { 2, 3 }, } },
        /* avlab_1p             */      { 1, { { 0, 1}, } },
        /* avlab_2p             */      { 2, { { 0, 1}, { 2, 3 },} },
@@ -2884,6 +2886,7 @@ static struct pci_device_id parport_pc_pci_tbl[] = {
          PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_1p_ecp },
        { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_010L,
          PCI_ANY_ID, PCI_ANY_ID, 0, 0, titan_010l },
+       { 0x9710, 0x9805, 0x1000, 0x0010, 0, 0, titan_1284p1 },
        { 0x9710, 0x9815, 0x1000, 0x0020, 0, 0, titan_1284p2 },
        /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/
        { 0x14db, 0x2120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1p}, /* AFAVLAB_TK9902 */
index 9c4a39ee89b57b5065f575b86b2798ed31dc2fc6..2f1289eebb3c5e597ec5ffa828606cdb1bd1ac85 100644 (file)
@@ -78,7 +78,7 @@ config HOTPLUG_PCI_IBM
 
 config HOTPLUG_PCI_ACPI
        tristate "ACPI PCI Hotplug driver"
-       depends on ACPI_BUS && HOTPLUG_PCI
+       depends on ACPI && HOTPLUG_PCI
        help
          Say Y here if you have a system that supports PCI Hotplug using
          ACPI.
@@ -157,7 +157,7 @@ config HOTPLUG_PCI_SHPC_POLL_EVENT_MODE
 
 config HOTPLUG_PCI_SHPC_PHPRM_LEGACY
        bool "For AMD SHPC only: Use $HRT for resource/configuration"
-       depends on HOTPLUG_PCI_SHPC && !ACPI_BUS 
+       depends on HOTPLUG_PCI_SHPC && !ACPI 
        help
          Say Y here for AMD SHPC. You have to select this option if you are 
          using this driver on platform with AMD SHPC.
index 31a307004b94404377dd15ab5dab210831d6b63b..246586a3d91a1bf5d9343ecae8ebbf749f3fcda2 100644 (file)
@@ -51,7 +51,7 @@ pciehp-objs           :=      pciehp_core.o   \
                                pciehp_ctrl.o   \
                                pciehp_pci.o    \
                                pciehp_hpc.o
-ifdef CONFIG_ACPI_BUS
+ifdef CONFIG_ACPI
        pciehp-objs += pciehprm_acpi.o
 else
        pciehp-objs += pciehprm_nonacpi.o
@@ -62,7 +62,7 @@ shpchp-objs           :=      shpchp_core.o   \
                                shpchp_pci.o    \
                                shpchp_sysfs.o  \
                                shpchp_hpc.o
-ifdef CONFIG_ACPI_BUS
+ifdef CONFIG_ACPI
        shpchp-objs += shpchprm_acpi.o
 else
        ifdef CONFIG_HOTPLUG_PCI_SHPC_PHPRM_LEGACY
index 2b85aa39f9544dd4069f5f9ef2b2abaca4ee145b..532f73bb2224af802af190aa0a38ea66242aa188 100644 (file)
@@ -91,6 +91,7 @@ static void set_msi_affinity(unsigned int vector, cpumask_t cpu_mask)
 {
        struct msi_desc *entry;
        struct msg_address address;
+       unsigned int irq = vector;
 
        entry = (struct msi_desc *)msi_desc[vector];
        if (!entry || !entry->dev)
@@ -112,6 +113,7 @@ static void set_msi_affinity(unsigned int vector, cpumask_t cpu_mask)
                entry->msi_attrib.current_cpu = cpu_mask_to_apicid(cpu_mask);
                pci_write_config_dword(entry->dev, msi_lower_address_reg(pos),
                        address.lo_address.value);
+               set_native_irq_info(irq, cpu_mask);
                break;
        }
        case PCI_CAP_ID_MSIX:
@@ -125,22 +127,13 @@ static void set_msi_affinity(unsigned int vector, cpumask_t cpu_mask)
                        MSI_TARGET_CPU_SHIFT);
                entry->msi_attrib.current_cpu = cpu_mask_to_apicid(cpu_mask);
                writel(address.lo_address.value, entry->mask_base + offset);
+               set_native_irq_info(irq, cpu_mask);
                break;
        }
        default:
                break;
        }
 }
-
-#ifdef CONFIG_IRQBALANCE
-static inline void move_msi(int vector)
-{
-       if (!cpus_empty(pending_irq_balance_cpumask[vector])) {
-               set_msi_affinity(vector, pending_irq_balance_cpumask[vector]);
-               cpus_clear(pending_irq_balance_cpumask[vector]);
-       }
-}
-#endif /* CONFIG_IRQBALANCE */
 #endif /* CONFIG_SMP */
 
 static void mask_MSI_irq(unsigned int vector)
@@ -191,13 +184,13 @@ static void shutdown_msi_irq(unsigned int vector)
 
 static void end_msi_irq_wo_maskbit(unsigned int vector)
 {
-       move_msi(vector);
+       move_native_irq(vector);
        ack_APIC_irq();
 }
 
 static void end_msi_irq_w_maskbit(unsigned int vector)
 {
-       move_msi(vector);
+       move_native_irq(vector);
        unmask_MSI_irq(vector);
        ack_APIC_irq();
 }
index 390f1851c0f11b4d88206f13f720bd0b8c1b5ffa..402136a5c9e43c1af7ff107e8e20cd992657c30c 100644 (file)
@@ -19,7 +19,6 @@
 #define NR_HP_RESERVED_VECTORS         20
 
 extern int vector_irq[NR_VECTORS];
-extern cpumask_t pending_irq_balance_cpumask[NR_IRQS];
 extern void (*interrupt[NR_IRQS])(void);
 extern int pci_vector_resources(int last, int nr_released);
 
@@ -29,10 +28,6 @@ extern int pci_vector_resources(int last, int nr_released);
 #define set_msi_irq_affinity   NULL
 #endif
 
-#ifndef CONFIG_IRQBALANCE
-static inline void move_msi(int vector) {}
-#endif
-
 /*
  * MSI-X Address Register
  */
index be420bb291135a8cee511c9df3edf91e79b1ea27..edccfa5bb40087b0a0b9cbefae7bdbae5d781348 100644 (file)
 #define  TOPIC97_AVS_AUDIO_CONTROL     0x02
 #define  TOPIC97_AVS_VIDEO_CONTROL     0x01
 
+#define TOPIC_EXCA_IF_CONTROL          0x3e    /* 8 bit */
+#define TOPIC_EXCA_IFC_33V_ENA         0x01
 
 static void topic97_zoom_video(struct pcmcia_socket *sock, int onoff)
 {
@@ -137,4 +139,19 @@ static int topic97_override(struct yenta_socket *socket)
        return 0;
 }
 
+
+static int topic95_override(struct yenta_socket *socket)
+{
+       u8 fctrl;
+
+       /* enable 3.3V support for 16bit cards */
+       fctrl = exca_readb(socket, TOPIC_EXCA_IF_CONTROL);
+       exca_writeb(socket, TOPIC_EXCA_IF_CONTROL, fctrl | TOPIC_EXCA_IFC_33V_ENA);
+
+       /* tell yenta to use exca registers to power 16bit cards */
+       socket->flags |= YENTA_16BIT_POWER_EXCA | YENTA_16BIT_POWER_DF;
+
+       return 0;
+}
+
 #endif /* _LINUX_TOPIC_H */
index 62fd705203fb0d48ecc55d16b8c68b6376fa852a..0347a29f297bea94f55df5f1ecc3db6795bb648f 100644 (file)
@@ -184,22 +184,52 @@ static int yenta_get_status(struct pcmcia_socket *sock, unsigned int *value)
        return 0;
 }
 
-static int yenta_Vcc_power(u32 control)
+static void yenta_get_power(struct yenta_socket *socket, socket_state_t *state)
 {
-       switch (control & CB_SC_VCC_MASK) {
-       case CB_SC_VCC_5V: return 50;
-       case CB_SC_VCC_3V: return 33;
-       default: return 0;
-       }
-}
+       if (!(cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) &&
+           (socket->flags & YENTA_16BIT_POWER_EXCA)) {
+               u8 reg, vcc, vpp;
+
+               reg = exca_readb(socket, I365_POWER);
+               vcc = reg & I365_VCC_MASK;
+               vpp = reg & I365_VPP1_MASK;
+               state->Vcc = state->Vpp = 0;
+
+               if (socket->flags & YENTA_16BIT_POWER_DF) {
+                       if (vcc == I365_VCC_3V)
+                               state->Vcc = 33;
+                       if (vcc == I365_VCC_5V)
+                               state->Vcc = 50;
+                       if (vpp == I365_VPP1_5V)
+                               state->Vpp = state->Vcc;
+                       if (vpp == I365_VPP1_12V)
+                               state->Vpp = 120;
+               } else {
+                       if (reg & I365_VCC_5V) {
+                               state->Vcc = 50;
+                               if (vpp == I365_VPP1_5V)
+                                       state->Vpp = 50;
+                               if (vpp == I365_VPP1_12V)
+                                       state->Vpp = 120;
+                       }
+               }
+       } else {
+               u32 control;
 
-static int yenta_Vpp_power(u32 control)
-{
-       switch (control & CB_SC_VPP_MASK) {
-       case CB_SC_VPP_12V: return 120;
-       case CB_SC_VPP_5V: return 50;
-       case CB_SC_VPP_3V: return 33;
-       default: return 0;
+               control = cb_readl(socket, CB_SOCKET_CONTROL);
+
+               switch (control & CB_SC_VCC_MASK) {
+               case CB_SC_VCC_5V: state->Vcc = 50; break;
+               case CB_SC_VCC_3V: state->Vcc = 33; break;
+               default: state->Vcc = 0;
+               }
+
+               switch (control & CB_SC_VPP_MASK) {
+               case CB_SC_VPP_12V: state->Vpp = 120; break;
+               case CB_SC_VPP_5V: state->Vpp = 50; break;
+               case CB_SC_VPP_3V: state->Vpp = 33; break;
+               default: state->Vpp = 0;
+               }
        }
 }
 
@@ -211,8 +241,7 @@ static int yenta_get_socket(struct pcmcia_socket *sock, socket_state_t *state)
 
        control = cb_readl(socket, CB_SOCKET_CONTROL);
 
-       state->Vcc = yenta_Vcc_power(control);
-       state->Vpp = yenta_Vpp_power(control);
+       yenta_get_power(socket, state);
        state->io_irq = socket->io_irq;
 
        if (cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) {
@@ -246,19 +275,54 @@ static int yenta_get_socket(struct pcmcia_socket *sock, socket_state_t *state)
 
 static void yenta_set_power(struct yenta_socket *socket, socket_state_t *state)
 {
-       u32 reg = 0;    /* CB_SC_STPCLK? */
-       switch (state->Vcc) {
-       case 33: reg = CB_SC_VCC_3V; break;
-       case 50: reg = CB_SC_VCC_5V; break;
-       default: reg = 0; break;
-       }
-       switch (state->Vpp) {
-       case 33:  reg |= CB_SC_VPP_3V; break;
-       case 50:  reg |= CB_SC_VPP_5V; break;
-       case 120: reg |= CB_SC_VPP_12V; break;
+       /* some birdges require to use the ExCA registers to power 16bit cards */
+       if (!(cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) &&
+           (socket->flags & YENTA_16BIT_POWER_EXCA)) {
+               u8 reg, old;
+               reg = old = exca_readb(socket, I365_POWER);
+               reg &= ~(I365_VCC_MASK | I365_VPP1_MASK | I365_VPP2_MASK);
+
+               /* i82365SL-DF style */
+               if (socket->flags & YENTA_16BIT_POWER_DF) {
+                       switch (state->Vcc) {
+                       case 33: reg |= I365_VCC_3V; break;
+                       case 50: reg |= I365_VCC_5V; break;
+                       default: reg = 0; break;
+                       }
+                       switch (state->Vpp) {
+                       case 33:
+                       case 50: reg |= I365_VPP1_5V; break;
+                       case 120: reg |= I365_VPP1_12V; break;
+                       }
+               } else {
+                       /* i82365SL-B style */
+                       switch (state->Vcc) {
+                       case 50: reg |= I365_VCC_5V; break;
+                       default: reg = 0; break;
+                       }
+                       switch (state->Vpp) {
+                       case 50: reg |= I365_VPP1_5V | I365_VPP2_5V; break;
+                       case 120: reg |= I365_VPP1_12V | I365_VPP2_12V; break;
+                       }
+               }
+
+               if (reg != old)
+                       exca_writeb(socket, I365_POWER, reg);
+       } else {
+               u32 reg = 0;    /* CB_SC_STPCLK? */
+               switch (state->Vcc) {
+               case 33: reg = CB_SC_VCC_3V; break;
+               case 50: reg = CB_SC_VCC_5V; break;
+               default: reg = 0; break;
+               }
+               switch (state->Vpp) {
+               case 33:  reg |= CB_SC_VPP_3V; break;
+               case 50:  reg |= CB_SC_VPP_5V; break;
+               case 120: reg |= CB_SC_VPP_12V; break;
+               }
+               if (reg != cb_readl(socket, CB_SOCKET_CONTROL))
+                       cb_writel(socket, CB_SOCKET_CONTROL, reg);
        }
-       if (reg != cb_readl(socket, CB_SOCKET_CONTROL))
-               cb_writel(socket, CB_SOCKET_CONTROL, reg);
 }
 
 static int yenta_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
@@ -751,6 +815,7 @@ enum {
        CARDBUS_TYPE_TI12XX,
        CARDBUS_TYPE_TI1250,
        CARDBUS_TYPE_RICOH,
+       CARDBUS_TYPE_TOPIC95,
        CARDBUS_TYPE_TOPIC97,
        CARDBUS_TYPE_O2MICRO,
 };
@@ -789,6 +854,9 @@ static struct cardbus_type cardbus_type[] = {
                .save_state     = ricoh_save_state,
                .restore_state  = ricoh_restore_state,
        },
+       [CARDBUS_TYPE_TOPIC95]  = {
+               .override       = topic95_override,
+       },
        [CARDBUS_TYPE_TOPIC97]  = {
                .override       = topic97_override,
        },
@@ -1196,6 +1264,7 @@ static struct pci_device_id yenta_table [] = {
        CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C476, RICOH),
        CB_ID(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_RL5C478, RICOH),
 
+       CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC95, TOPIC95),
        CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC97, TOPIC97),
        CB_ID(PCI_VENDOR_ID_TOSHIBA, PCI_DEVICE_ID_TOSHIBA_TOPIC100, TOPIC97),
 
index 4e637eef207652a33beaa752d1c6d6fdd2367ea3..4e75e9e258cd1419e105439ae7b995f79e2cff68 100644 (file)
  */
 #define CB_MEM_PAGE(map)       (0x40 + (map))
 
+
+/* control how 16bit cards are powered */
+#define YENTA_16BIT_POWER_EXCA 0x00000001
+#define YENTA_16BIT_POWER_DF   0x00000002
+
+
 struct yenta_socket;
 
 struct cardbus_type {
@@ -113,6 +119,8 @@ struct yenta_socket {
        struct pcmcia_socket socket;
        struct cardbus_type *type;
 
+       u32 flags;
+
        /* for PCI interrupt probing */
        unsigned int probe_status;
 
index 6776308a1fe5a80b7ee6d6a7c0985e8ae496fc9d..c5143201419aebdeff65e7a2ad3e121e6bbd503f 100644 (file)
@@ -6,7 +6,7 @@ menu "Plug and Play support"
 
 config PNP
        bool "Plug and Play support"
-       depends on ISA || ACPI_BUS
+       depends on ISA || ACPI
        ---help---
          Plug and Play (PnP) is a standard for peripherals which allows those
          peripherals to be configured by software, e.g. assign IRQ's or other
index 6e5229e92fbc7bc9fa6a443a9f78fff7f9867b32..e95ed67d4f050afddf5918d34628e4586ba70951 100644 (file)
@@ -8,13 +8,6 @@
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/slab.h>
-
-#ifdef CONFIG_PNP_DEBUG
-       #define DEBUG
-#else
-       #undef DEBUG
-#endif
-
 #include <linux/pnp.h>
 #include "base.h"
 
index 1d037c2a82acb0a5bfbd8002ae0274128fb01ee3..33da25f3213f4614a6dc338b9743034452dab3de 100644 (file)
 #include <linux/module.h>
 #include <linux/ctype.h>
 #include <linux/slab.h>
-
-#ifdef CONFIG_PNP_DEBUG
-       #define DEBUG
-#else
-       #undef DEBUG
-#endif
-
 #include <linux/pnp.h>
 #include "base.h"
 
index 82c5edd5b9ee016795b00116cd64f02f7f526dab..beedd86800f4e26093643ec765961a2fbd6f0e25 100644 (file)
@@ -142,17 +142,6 @@ static void isapnp_write_word(unsigned char idx, unsigned short val)
        isapnp_write_byte(idx+1, val);
 }
 
-static void *isapnp_alloc(long size)
-{
-       void *result;
-
-       result = kmalloc(size, GFP_KERNEL);
-       if (!result)
-               return NULL;
-       memset(result, 0, size);
-       return result;
-}
-
 static void isapnp_key(void)
 {
        unsigned char code = 0x6a, msb;
@@ -406,7 +395,7 @@ static void isapnp_parse_id(struct pnp_dev * dev, unsigned short vendor, unsigne
        struct pnp_id * id;
        if (!dev)
                return;
-       id = isapnp_alloc(sizeof(struct pnp_id));
+       id = kcalloc(1, sizeof(struct pnp_id), GFP_KERNEL);
        if (!id)
                return;
        sprintf(id->id, "%c%c%c%x%x%x%x",
@@ -430,7 +419,7 @@ static struct pnp_dev * __init isapnp_parse_device(struct pnp_card *card, int si
        struct pnp_dev *dev;
 
        isapnp_peek(tmp, size);
-       dev = isapnp_alloc(sizeof(struct pnp_dev));
+       dev = kcalloc(1, sizeof(struct pnp_dev), GFP_KERNEL);
        if (!dev)
                return NULL;
        dev->number = number;
@@ -461,7 +450,7 @@ static void __init isapnp_parse_irq_resource(struct pnp_option *option,
        unsigned long bits;
 
        isapnp_peek(tmp, size);
-       irq = isapnp_alloc(sizeof(struct pnp_irq));
+       irq = kcalloc(1, sizeof(struct pnp_irq), GFP_KERNEL);
        if (!irq)
                return;
        bits = (tmp[1] << 8) | tmp[0];
@@ -485,7 +474,7 @@ static void __init isapnp_parse_dma_resource(struct pnp_option *option,
        struct pnp_dma *dma;
 
        isapnp_peek(tmp, size);
-       dma = isapnp_alloc(sizeof(struct pnp_dma));
+       dma = kcalloc(1, sizeof(struct pnp_dma), GFP_KERNEL);
        if (!dma)
                return;
        dma->map = tmp[0];
@@ -505,7 +494,7 @@ static void __init isapnp_parse_port_resource(struct pnp_option *option,
        struct pnp_port *port;
 
        isapnp_peek(tmp, size);
-       port = isapnp_alloc(sizeof(struct pnp_port));
+       port = kcalloc(1, sizeof(struct pnp_port), GFP_KERNEL);
        if (!port)
                return;
        port->min = (tmp[2] << 8) | tmp[1];
@@ -528,7 +517,7 @@ static void __init isapnp_parse_fixed_port_resource(struct pnp_option *option,
        struct pnp_port *port;
 
        isapnp_peek(tmp, size);
-       port = isapnp_alloc(sizeof(struct pnp_port));
+       port = kcalloc(1, sizeof(struct pnp_port), GFP_KERNEL);
        if (!port)
                return;
        port->min = port->max = (tmp[1] << 8) | tmp[0];
@@ -550,7 +539,7 @@ static void __init isapnp_parse_mem_resource(struct pnp_option *option,
        struct pnp_mem *mem;
 
        isapnp_peek(tmp, size);
-       mem = isapnp_alloc(sizeof(struct pnp_mem));
+       mem = kcalloc(1, sizeof(struct pnp_mem), GFP_KERNEL);
        if (!mem)
                return;
        mem->min = ((tmp[2] << 8) | tmp[1]) << 8;
@@ -573,7 +562,7 @@ static void __init isapnp_parse_mem32_resource(struct pnp_option *option,
        struct pnp_mem *mem;
 
        isapnp_peek(tmp, size);
-       mem = isapnp_alloc(sizeof(struct pnp_mem));
+       mem = kcalloc(1, sizeof(struct pnp_mem), GFP_KERNEL);
        if (!mem)
                return;
        mem->min = (tmp[4] << 24) | (tmp[3] << 16) | (tmp[2] << 8) | tmp[1];
@@ -595,7 +584,7 @@ static void __init isapnp_parse_fixed_mem32_resource(struct pnp_option *option,
        struct pnp_mem *mem;
 
        isapnp_peek(tmp, size);
-       mem = isapnp_alloc(sizeof(struct pnp_mem));
+       mem = kcalloc(1, sizeof(struct pnp_mem), GFP_KERNEL);
        if (!mem)
                return;
        mem->min = mem->max = (tmp[4] << 24) | (tmp[3] << 16) | (tmp[2] << 8) | tmp[1];
@@ -838,7 +827,7 @@ static unsigned char __init isapnp_checksum(unsigned char *data)
 
 static void isapnp_parse_card_id(struct pnp_card * card, unsigned short vendor, unsigned short device)
 {
-       struct pnp_id * id = isapnp_alloc(sizeof(struct pnp_id));
+       struct pnp_id * id = kcalloc(1, sizeof(struct pnp_id), GFP_KERNEL);
        if (!id)
                return;
        sprintf(id->id, "%c%c%c%x%x%x%x",
@@ -874,7 +863,7 @@ static int __init isapnp_build_device_list(void)
                        header[4], header[5], header[6], header[7], header[8]);
                printk(KERN_DEBUG "checksum = 0x%x\n", checksum);
 #endif
-               if ((card = isapnp_alloc(sizeof(struct pnp_card))) == NULL)
+               if ((card = kcalloc(1, sizeof(struct pnp_card), GFP_KERNEL)) == NULL)
                        continue;
 
                card->number = csn;
index 6c510c19ad7d9097581d70ac25fd5983b13df76d..94442ffd4aeddcd100ba9d573c6a8866fdb21b1b 100644 (file)
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
-
-#ifdef CONFIG_PNP_DEBUG
-       #define DEBUG
-#else
-       #undef DEBUG
-#endif
-
 #include <linux/pnp.h>
 #include "base.h"
 
index 0782cdc5009f3694f7a3bea60295097f745dff66..b1854171b9632b8ef260cf34ab6f0d0641a0f487 100644 (file)
@@ -3,7 +3,7 @@
 #
 config PNPACPI
        bool "Plug and Play ACPI support (EXPERIMENTAL)"
-       depends on PNP && ACPI_BUS && EXPERIMENTAL
+       depends on PNP && ACPI && EXPERIMENTAL
        default y
        ---help---
          Linux uses the PNPACPI to autodetect built-in
index 8655dd2e5b83cea720d98b0c0e9d4e02220fb6b0..1a8915e74160bba5b0b4a94f2ecbe6322168b8e6 100644 (file)
@@ -19,6 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
  
+#include <linux/config.h>
 #include <linux/acpi.h>
 #include <linux/pnp.h>
 #include <acpi/acpi_bus.h>
@@ -41,14 +42,6 @@ static inline int is_exclusive_device(struct acpi_device *dev)
        return (!acpi_match_ids(dev, excluded_id_list));
 }
 
-void *pnpacpi_kmalloc(size_t size, int f)
-{
-       void *p = kmalloc(size, f);
-       if (p)
-               memset(p, 0, size);
-       return p;
-}
-
 /*
  * Compatible Device IDs
  */
@@ -143,7 +136,7 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
                return 0;
 
        pnp_dbg("ACPI device : hid %s", acpi_device_hid(device));
-       dev =  pnpacpi_kmalloc(sizeof(struct pnp_dev), GFP_KERNEL);
+       dev =  kcalloc(1, sizeof(struct pnp_dev), GFP_KERNEL);
        if (!dev) {
                pnp_err("Out of memory");
                return -ENOMEM;
@@ -173,7 +166,7 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
        dev->number = num;
        
        /* set the initial values for the PnP device */
-       dev_id = pnpacpi_kmalloc(sizeof(struct pnp_id), GFP_KERNEL);
+       dev_id = kcalloc(1, sizeof(struct pnp_id), GFP_KERNEL);
        if (!dev_id)
                goto err;
        pnpidacpi_to_pnpid(acpi_device_hid(device), dev_id->id);
@@ -205,8 +198,7 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
                for (i = 0; i < cid_list->count; i++) {
                        if (!ispnpidacpi(cid_list->id[i].value))
                                continue;
-                       dev_id = pnpacpi_kmalloc(sizeof(struct pnp_id), 
-                               GFP_KERNEL);
+                       dev_id = kcalloc(1, sizeof(struct pnp_id), GFP_KERNEL);
                        if (!dev_id)
                                continue;
 
index 76f907e09ee62af18e53c574e72c48efecdae2d9..f28e2ed66fa34e6e1d2de9fa8ea1262ad703103d 100644 (file)
@@ -5,7 +5,6 @@
 #include <linux/acpi.h>
 #include <linux/pnp.h>
 
-void *pnpacpi_kmalloc(size_t size, int f);
 acpi_status pnpacpi_parse_allocated_resource(acpi_handle, struct pnp_resource_table*);
 acpi_status pnpacpi_parse_resource_option_data(acpi_handle, struct pnp_dev*);
 int pnpacpi_encode_resources(struct pnp_resource_table *, struct acpi_buffer *);
index 75575f6c349c65919871f32afe3dc8e83fbc3219..416d30debe6c97a12582c7646d3bb6d3eab46ec8 100644 (file)
@@ -73,25 +73,35 @@ static void decode_irq_flags(int flag, int *edge_level, int *active_high_low)
 }
 
 static void
-pnpacpi_parse_allocated_irqresource(struct pnp_resource_table * res, int irq)
+pnpacpi_parse_allocated_irqresource(struct pnp_resource_table * res, u32 gsi,
+       int edge_level, int active_high_low)
 {
        int i = 0;
+       int irq;
+
+       if (!valid_IRQ(gsi))
+               return;
+
        while (!(res->irq_resource[i].flags & IORESOURCE_UNSET) &&
                        i < PNP_MAX_IRQ)
                i++;
-       if (i < PNP_MAX_IRQ) {
-               res->irq_resource[i].flags = IORESOURCE_IRQ;  //Also clears _UNSET flag
-               if (irq == -1) {
-                       res->irq_resource[i].flags |= IORESOURCE_DISABLED;
-                       return;
-               }
-               res->irq_resource[i].start =(unsigned long) irq;
-               res->irq_resource[i].end = (unsigned long) irq;
+       if (i >= PNP_MAX_IRQ)
+               return;
+
+       res->irq_resource[i].flags = IORESOURCE_IRQ;  // Also clears _UNSET flag
+       irq = acpi_register_gsi(gsi, edge_level, active_high_low);
+       if (irq < 0) {
+               res->irq_resource[i].flags |= IORESOURCE_DISABLED;
+               return;
        }
+
+       res->irq_resource[i].start = irq;
+       res->irq_resource[i].end = irq;
+       pcibios_penalize_isa_irq(irq, 1);
 }
 
 static void
-pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table * res, int dma)
+pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table * res, u32 dma)
 {
        int i = 0;
        while (i < PNP_MAX_DMA &&
@@ -103,14 +113,14 @@ pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table * res, int dma)
                        res->dma_resource[i].flags |= IORESOURCE_DISABLED;
                        return;
                }
-               res->dma_resource[i].start =(unsigned long) dma;
-               res->dma_resource[i].end = (unsigned long) dma;
+               res->dma_resource[i].start = dma;
+               res->dma_resource[i].end = dma;
        }
 }
 
 static void
 pnpacpi_parse_allocated_ioresource(struct pnp_resource_table * res,
-       int io, int len)
+       u32 io, u32 len)
 {
        int i = 0;
        while (!(res->port_resource[i].flags & IORESOURCE_UNSET) &&
@@ -122,14 +132,14 @@ pnpacpi_parse_allocated_ioresource(struct pnp_resource_table * res,
                        res->port_resource[i].flags |= IORESOURCE_DISABLED;
                        return;
                }
-               res->port_resource[i].start = (unsigned long) io;
-               res->port_resource[i].end = (unsigned long)(io + len - 1);
+               res->port_resource[i].start = io;
+               res->port_resource[i].end = io + len - 1;
        }
 }
 
 static void
 pnpacpi_parse_allocated_memresource(struct pnp_resource_table * res,
-       int mem, int len)
+       u64 mem, u64 len)
 {
        int i = 0;
        while (!(res->mem_resource[i].flags & IORESOURCE_UNSET) &&
@@ -141,8 +151,8 @@ pnpacpi_parse_allocated_memresource(struct pnp_resource_table * res,
                        res->mem_resource[i].flags |= IORESOURCE_DISABLED;
                        return;
                }
-               res->mem_resource[i].start = (unsigned long) mem;
-               res->mem_resource[i].end = (unsigned long)(mem + len - 1);
+               res->mem_resource[i].start = mem;
+               res->mem_resource[i].end = mem + len - 1;
        }
 }
 
@@ -151,27 +161,28 @@ static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
        void *data)
 {
        struct pnp_resource_table * res_table = (struct pnp_resource_table *)data;
+       int i;
 
        switch (res->id) {
        case ACPI_RSTYPE_IRQ:
-               if ((res->data.irq.number_of_interrupts > 0) &&
-                       valid_IRQ(res->data.irq.interrupts[0])) {
-                       pnpacpi_parse_allocated_irqresource(res_table, 
-                               acpi_register_gsi(res->data.irq.interrupts[0],
-                                       res->data.irq.edge_level,
-                                       res->data.irq.active_high_low));
-                       pcibios_penalize_isa_irq(res->data.irq.interrupts[0], 1);
+               /*
+                * Per spec, only one interrupt per descriptor is allowed in
+                * _CRS, but some firmware violates this, so parse them all.
+                */
+               for (i = 0; i < res->data.irq.number_of_interrupts; i++) {
+                       pnpacpi_parse_allocated_irqresource(res_table,
+                               res->data.irq.interrupts[i],
+                               res->data.irq.edge_level,
+                               res->data.irq.active_high_low);
                }
                break;
 
        case ACPI_RSTYPE_EXT_IRQ:
-               if ((res->data.extended_irq.number_of_interrupts > 0) &&
-                       valid_IRQ(res->data.extended_irq.interrupts[0])) {
-                       pnpacpi_parse_allocated_irqresource(res_table, 
-                               acpi_register_gsi(res->data.extended_irq.interrupts[0],
-                                       res->data.extended_irq.edge_level,
-                                       res->data.extended_irq.active_high_low));
-                       pcibios_penalize_isa_irq(res->data.extended_irq.interrupts[0], 1);
+               for (i = 0; i < res->data.extended_irq.number_of_interrupts; i++) {
+                       pnpacpi_parse_allocated_irqresource(res_table,
+                               res->data.extended_irq.interrupts[i],
+                               res->data.extended_irq.edge_level,
+                               res->data.extended_irq.active_high_low);
                }
                break;
        case ACPI_RSTYPE_DMA:
@@ -244,7 +255,7 @@ static void pnpacpi_parse_dma_option(struct pnp_option *option, struct acpi_reso
 
        if (p->number_of_channels == 0)
                return;
-       dma = pnpacpi_kmalloc(sizeof(struct pnp_dma), GFP_KERNEL);
+       dma = kcalloc(1, sizeof(struct pnp_dma), GFP_KERNEL);
        if (!dma)
                return;
 
@@ -300,7 +311,7 @@ static void pnpacpi_parse_irq_option(struct pnp_option *option,
        
        if (p->number_of_interrupts == 0)
                return;
-       irq = pnpacpi_kmalloc(sizeof(struct pnp_irq), GFP_KERNEL);
+       irq = kcalloc(1, sizeof(struct pnp_irq), GFP_KERNEL);
        if (!irq)
                return;
 
@@ -321,7 +332,7 @@ static void pnpacpi_parse_ext_irq_option(struct pnp_option *option,
 
        if (p->number_of_interrupts == 0)
                return;
-       irq = pnpacpi_kmalloc(sizeof(struct pnp_irq), GFP_KERNEL);
+       irq = kcalloc(1, sizeof(struct pnp_irq), GFP_KERNEL);
        if (!irq)
                return;
 
@@ -342,7 +353,7 @@ pnpacpi_parse_port_option(struct pnp_option *option,
 
        if (io->range_length == 0)
                return;
-       port = pnpacpi_kmalloc(sizeof(struct pnp_port), GFP_KERNEL);
+       port = kcalloc(1, sizeof(struct pnp_port), GFP_KERNEL);
        if (!port)
                return;
        port->min = io->min_base_address;
@@ -363,7 +374,7 @@ pnpacpi_parse_fixed_port_option(struct pnp_option *option,
 
        if (io->range_length == 0)
                return;
-       port = pnpacpi_kmalloc(sizeof(struct pnp_port), GFP_KERNEL);
+       port = kcalloc(1, sizeof(struct pnp_port), GFP_KERNEL);
        if (!port)
                return;
        port->min = port->max = io->base_address;
@@ -382,7 +393,7 @@ pnpacpi_parse_mem24_option(struct pnp_option *option,
 
        if (p->range_length == 0)
                return;
-       mem = pnpacpi_kmalloc(sizeof(struct pnp_mem), GFP_KERNEL);
+       mem = kcalloc(1, sizeof(struct pnp_mem), GFP_KERNEL);
        if (!mem)
                return;
        mem->min = p->min_base_address;
@@ -405,7 +416,7 @@ pnpacpi_parse_mem32_option(struct pnp_option *option,
 
        if (p->range_length == 0)
                return;
-       mem = pnpacpi_kmalloc(sizeof(struct pnp_mem), GFP_KERNEL);
+       mem = kcalloc(1, sizeof(struct pnp_mem), GFP_KERNEL);
        if (!mem)
                return;
        mem->min = p->min_base_address;
@@ -428,7 +439,7 @@ pnpacpi_parse_fixed_mem32_option(struct pnp_option *option,
 
        if (p->range_length == 0)
                return;
-       mem = pnpacpi_kmalloc(sizeof(struct pnp_mem), GFP_KERNEL);
+       mem = kcalloc(1, sizeof(struct pnp_mem), GFP_KERNEL);
        if (!mem)
                return;
        mem->min = mem->max = p->range_base_address;
@@ -612,7 +623,7 @@ int pnpacpi_build_resource_template(acpi_handle handle,
        if (!res_cnt)
                return -EINVAL;
        buffer->length = sizeof(struct acpi_resource) * (res_cnt + 1) + 1;
-       buffer->pointer = pnpacpi_kmalloc(buffer->length - 1, GFP_KERNEL);
+       buffer->pointer = kcalloc(1, buffer->length - 1, GFP_KERNEL);
        if (!buffer->pointer)
                return -ENOMEM;
        pnp_dbg("Res cnt %d", res_cnt);
index 778a324028f4135bdb90bb4e655bac513c17e43d..f49674f07949bcf505632d3d4c842a7c4b542e50 100644 (file)
@@ -86,16 +86,6 @@ int pnp_bios_present(void)
 
 struct pnp_dev_node_info node_info;
 
-void *pnpbios_kmalloc(size_t size, int f)
-{
-       void *p = kmalloc( size, f );
-       if ( p == NULL )
-               printk(KERN_ERR "PnPBIOS: kmalloc() failed\n");
-       else
-               memset(p, 0, size);
-       return p;
-}
-
 /*
  *
  * DOCKING FUNCTIONS
@@ -121,10 +111,10 @@ static int pnp_dock_event(int dock, struct pnp_docking_station_info *info)
        if (!current->fs->root) {
                return -EAGAIN;
        }
-       if (!(envp = (char **) pnpbios_kmalloc (20 * sizeof (char *), GFP_KERNEL))) {
+       if (!(envp = (char **) kcalloc (20, sizeof (char *), GFP_KERNEL))) {
                return -ENOMEM;
        }
-       if (!(buf = pnpbios_kmalloc (256, GFP_KERNEL))) {
+       if (!(buf = kcalloc (1, 256, GFP_KERNEL))) {
                kfree (envp);
                return -ENOMEM;
        }
@@ -231,7 +221,7 @@ static int pnpbios_get_resources(struct pnp_dev * dev, struct pnp_resource_table
        if(!pnpbios_is_dynamic(dev))
                return -EPERM;
 
-       node = pnpbios_kmalloc(node_info.max_node_size, GFP_KERNEL);
+       node = kcalloc(1, node_info.max_node_size, GFP_KERNEL);
        if (!node)
                return -1;
        if (pnp_bios_get_dev_node(&nodenum, (char )PNPMODE_DYNAMIC, node)) {
@@ -254,7 +244,7 @@ static int pnpbios_set_resources(struct pnp_dev * dev, struct pnp_resource_table
        if (!pnpbios_is_dynamic(dev))
                return -EPERM;
 
-       node = pnpbios_kmalloc(node_info.max_node_size, GFP_KERNEL);
+       node = kcalloc(1, node_info.max_node_size, GFP_KERNEL);
        if (!node)
                return -1;
        if (pnp_bios_get_dev_node(&nodenum, (char )PNPMODE_DYNAMIC, node)) {
@@ -305,7 +295,7 @@ static int pnpbios_disable_resources(struct pnp_dev *dev)
        if(dev->flags & PNPBIOS_NO_DISABLE || !pnpbios_is_dynamic(dev))
                return -EPERM;
 
-       node = pnpbios_kmalloc(node_info.max_node_size, GFP_KERNEL);
+       node = kcalloc(1, node_info.max_node_size, GFP_KERNEL);
        if (!node)
                return -ENOMEM;
 
@@ -347,7 +337,7 @@ static int insert_device(struct pnp_dev *dev, struct pnp_bios_node * node)
        }
 
        /* set the initial values for the PnP device */
-       dev_id = pnpbios_kmalloc(sizeof(struct pnp_id), GFP_KERNEL);
+       dev_id = kcalloc(1, sizeof(struct pnp_id), GFP_KERNEL);
        if (!dev_id)
                return -1;
        pnpid32_to_pnpid(node->eisa_id,id);
@@ -385,7 +375,7 @@ static void __init build_devlist(void)
        struct pnp_bios_node *node;
        struct pnp_dev *dev;
 
-       node = pnpbios_kmalloc(node_info.max_node_size, GFP_KERNEL);
+       node = kcalloc(1, node_info.max_node_size, GFP_KERNEL);
        if (!node)
                return;
 
@@ -402,7 +392,7 @@ static void __init build_devlist(void)
                                break;
                }
                nodes_got++;
-               dev =  pnpbios_kmalloc(sizeof (struct pnp_dev), GFP_KERNEL);
+               dev =  kcalloc(1, sizeof (struct pnp_dev), GFP_KERNEL);
                if (!dev)
                        break;
                if(insert_device(dev,node)<0)
index 01896e705ed45ad91348e34b60a27d7c6ad2fd40..d8cb2fd1f127a98a10673e937889802cf7d6b79b 100644 (file)
@@ -26,7 +26,6 @@ union pnp_bios_install_struct {
 
 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);
index 6bb8e1973fd497a8807992336ebd089c8ac7b3f0..5a3dfc97f5e90ef655aac0ce5a7c6576a6274a70 100644 (file)
@@ -87,7 +87,7 @@ static int proc_read_escd(char *buf, char **start, off_t pos,
                return -EFBIG;
        }
 
-       tmpbuf = pnpbios_kmalloc(escd.escd_size, GFP_KERNEL);
+       tmpbuf = kcalloc(1, escd.escd_size, GFP_KERNEL);
        if (!tmpbuf) return -ENOMEM;
 
        if (pnp_bios_read_escd(tmpbuf, escd.nv_storage_base)) {
@@ -133,7 +133,7 @@ static int proc_read_devices(char *buf, char **start, off_t pos,
        if (pos >= 0xff)
                return 0;
 
-       node = pnpbios_kmalloc(node_info.max_node_size, GFP_KERNEL);
+       node = kcalloc(1, node_info.max_node_size, GFP_KERNEL);
        if (!node) return -ENOMEM;
 
        for (nodenum=pos; nodenum<0xff; ) {
@@ -168,7 +168,7 @@ static int proc_read_node(char *buf, char **start, off_t pos,
        u8 nodenum = (long)data;
        int len;
 
-       node = pnpbios_kmalloc(node_info.max_node_size, GFP_KERNEL);
+       node = kcalloc(1, node_info.max_node_size, GFP_KERNEL);
        if (!node) return -ENOMEM;
        if (pnp_bios_get_dev_node(&nodenum, boot, node)) {
                kfree(node);
@@ -188,7 +188,7 @@ static int proc_write_node(struct file *file, const char __user *buf,
        u8 nodenum = (long)data;
        int ret = count;
 
-       node = pnpbios_kmalloc(node_info.max_node_size, GFP_KERNEL);
+       node = kcalloc(1, node_info.max_node_size, GFP_KERNEL);
        if (!node)
                return -ENOMEM;
        if (pnp_bios_get_dev_node(&nodenum, boot, node)) {
index e305bb132c24e30eb418b656e6a1e4118b68928d..b0ca65b68645624e1ddd78ac1f4de6d71c4156e4 100644 (file)
@@ -247,7 +247,7 @@ static void
 pnpbios_parse_mem_option(unsigned char *p, int size, struct pnp_option *option)
 {
        struct pnp_mem * mem;
-       mem = pnpbios_kmalloc(sizeof(struct pnp_mem), GFP_KERNEL);
+       mem = kcalloc(1, sizeof(struct pnp_mem), GFP_KERNEL);
        if (!mem)
                return;
        mem->min = ((p[5] << 8) | p[4]) << 8;
@@ -263,7 +263,7 @@ static void
 pnpbios_parse_mem32_option(unsigned char *p, int size, struct pnp_option *option)
 {
        struct pnp_mem * mem;
-       mem = pnpbios_kmalloc(sizeof(struct pnp_mem), GFP_KERNEL);
+       mem = kcalloc(1, sizeof(struct pnp_mem), GFP_KERNEL);
        if (!mem)
                return;
        mem->min = (p[7] << 24) | (p[6] << 16) | (p[5] << 8) | p[4];
@@ -279,7 +279,7 @@ static void
 pnpbios_parse_fixed_mem32_option(unsigned char *p, int size, struct pnp_option *option)
 {
        struct pnp_mem * mem;
-       mem = pnpbios_kmalloc(sizeof(struct pnp_mem), GFP_KERNEL);
+       mem = kcalloc(1, sizeof(struct pnp_mem), GFP_KERNEL);
        if (!mem)
                return;
        mem->min = mem->max = (p[7] << 24) | (p[6] << 16) | (p[5] << 8) | p[4];
@@ -296,7 +296,7 @@ pnpbios_parse_irq_option(unsigned char *p, int size, struct pnp_option *option)
        struct pnp_irq * irq;
        unsigned long bits;
 
-       irq = pnpbios_kmalloc(sizeof(struct pnp_irq), GFP_KERNEL);
+       irq = kcalloc(1, sizeof(struct pnp_irq), GFP_KERNEL);
        if (!irq)
                return;
        bits = (p[2] << 8) | p[1];
@@ -313,7 +313,7 @@ static void
 pnpbios_parse_dma_option(unsigned char *p, int size, struct pnp_option *option)
 {
        struct pnp_dma * dma;
-       dma = pnpbios_kmalloc(sizeof(struct pnp_dma), GFP_KERNEL);
+       dma = kcalloc(1, sizeof(struct pnp_dma), GFP_KERNEL);
        if (!dma)
                return;
        dma->map = p[1];
@@ -326,7 +326,7 @@ static void
 pnpbios_parse_port_option(unsigned char *p, int size, struct pnp_option *option)
 {
        struct pnp_port * port;
-       port = pnpbios_kmalloc(sizeof(struct pnp_port), GFP_KERNEL);
+       port = kcalloc(1, sizeof(struct pnp_port), GFP_KERNEL);
        if (!port)
                return;
        port->min = (p[3] << 8) | p[2];
@@ -342,7 +342,7 @@ static void
 pnpbios_parse_fixed_port_option(unsigned char *p, int size, struct pnp_option *option)
 {
        struct pnp_port * port;
-       port = pnpbios_kmalloc(sizeof(struct pnp_port), GFP_KERNEL);
+       port = kcalloc(1, sizeof(struct pnp_port), GFP_KERNEL);
        if (!port)
                return;
        port->min = port->max = (p[2] << 8) | p[1];
@@ -530,7 +530,7 @@ pnpbios_parse_compatible_ids(unsigned char *p, unsigned char *end, struct pnp_de
                case SMALL_TAG_COMPATDEVID: /* compatible ID */
                        if (len != 4)
                                goto len_err;
-                       dev_id =  pnpbios_kmalloc(sizeof (struct pnp_id), GFP_KERNEL);
+                       dev_id =  kcalloc(1, sizeof (struct pnp_id), GFP_KERNEL);
                        if (!dev_id)
                                return NULL;
                        memset(dev_id, 0, sizeof(struct pnp_id));
index 596a02d7e03d12308a6c6992f155eb73548cf101..8936b0cb2ec3718bc60937efcace3bc22c27b2fb 100644 (file)
 #include <linux/kernel.h>
 #include <linux/string.h>
 #include <linux/slab.h>
-
-#ifdef CONFIG_PNP_DEBUG
-       #define DEBUG
-#else
-       #undef DEBUG
-#endif
-
 #include <linux/pnp.h>
 #include "base.h"
 
index b952aec491899b7698dd0b808befd2945a0a8ed1..61fe998944bd1ce0d0f6816687f964861e8d8934 100644 (file)
@@ -8,13 +8,6 @@
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/ctype.h>
-
-#ifdef CONFIG_PNP_DEBUG
-       #define DEBUG
-#else
-       #undef DEBUG
-#endif
-
 #include <linux/pnp.h>
 #include "base.h"
 
index 24c0af49c25c8f416615b4a009af21e6045b5043..3092473991a7f7a934a7e242bd432de79c110b24 100644 (file)
@@ -2,9 +2,9 @@
  *  drivers/s390/net/claw.c
  *    ESCON CLAW network driver
  *
- *    $Revision: 1.35 $ $Date: 2005/03/24 12:25:38 $
+ *    $Revision: 1.38 $ $Date: 2005/08/29 09:47:04 $
  *
- *  Linux fo zSeries version
+ *  Linux for zSeries version
  *    Copyright (C) 2002,2005 IBM Corporation
  *  Author(s) Original code written by:
  *              Kazuo Iimura (iimura@jp.ibm.com)
@@ -431,12 +431,12 @@ claw_pack_skb(struct claw_privbk *privptr)
        if (!skb_queue_empty(&p_ch->collect_queue)) {
        /* some data */
                held_skb = skb_dequeue(&p_ch->collect_queue);
-               if (p_env->packing != DO_PACKED)
-                       return held_skb;
                if (held_skb)
-                       atomic_dec(&held_skb->users);
+                       dev_kfree_skb_any(held_skb);
                else
                        return NULL;
+               if (p_env->packing != DO_PACKED)
+                       return held_skb;
                /* get a new SKB we will pack at least one */
                new_skb = dev_alloc_skb(p_env->write_size);
                if (new_skb == NULL) {
@@ -455,7 +455,7 @@ claw_pack_skb(struct claw_privbk *privptr)
                                privptr->stats.tx_packets++;
                                so_far += held_skb->len;
                                pkt_cnt++;
-                               dev_kfree_skb_irq(held_skb);
+                               dev_kfree_skb_any(held_skb);
                                held_skb = skb_dequeue(&p_ch->collect_queue);
                                if (held_skb)
                                        atomic_dec(&held_skb->users);
@@ -1092,7 +1092,7 @@ claw_release(struct net_device *dev)
                 }
         }
        if (privptr->pk_skb != NULL) {
-               dev_kfree_skb(privptr->pk_skb);
+               dev_kfree_skb_any(privptr->pk_skb);
                privptr->pk_skb = NULL;
        }
        if(privptr->buffs_alloc != 1) {
@@ -2016,7 +2016,7 @@ claw_hw_tx(struct sk_buff *skb, struct net_device *dev, long linkid)
         p_buf=(struct ccwbk*)privptr->p_end_ccw;
         dumpit((char *)p_buf, sizeof(struct endccw));
 #endif
-        dev_kfree_skb(skb);
+        dev_kfree_skb_any(skb);
        if (linkid==0) {
                lock=LOCK_NO;
         }
@@ -4061,7 +4061,7 @@ claw_purge_skb_queue(struct sk_buff_head *q)
 
         while ((skb = skb_dequeue(q))) {
                 atomic_dec(&skb->users);
-                dev_kfree_skb_irq(skb);
+                dev_kfree_skb_any(skb);
         }
 }
 
@@ -4410,7 +4410,7 @@ claw_init(void)
 #else
                 "compiled into kernel "
 #endif
-                " $Revision: 1.35 $ $Date: 2005/03/24 12:25:38 $ \n");
+                " $Revision: 1.38 $ $Date: 2005/08/29 09:47:04 $ \n");
 
 
 #ifdef FUNCTRACE
index 973c51fb0fe22b45aeda77a98fc4800224797697..ae9e0203e9de8d540b261dc3821318e275253cd5 100644 (file)
@@ -1499,22 +1499,43 @@ static int tw_scsiop_inquiry(TW_Device_Extension *tw_dev, int request_id)
        return 0;
 } /* End tw_scsiop_inquiry() */
 
+static void tw_transfer_internal(TW_Device_Extension *tw_dev, int request_id,
+                                void *data, unsigned int len)
+{
+       struct scsi_cmnd *cmd = tw_dev->srb[request_id];
+       void *buf;
+       unsigned int transfer_len;
+
+       if (cmd->use_sg) {
+               struct scatterlist *sg =
+                       (struct scatterlist *)cmd->request_buffer;
+               buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
+               transfer_len = min(sg->length, len);
+       } else {
+               buf = cmd->request_buffer;
+               transfer_len = min(cmd->request_bufflen, len);
+       }
+
+       memcpy(buf, data, transfer_len);
+       
+       if (cmd->use_sg) {
+               struct scatterlist *sg;
+
+               sg = (struct scatterlist *)cmd->request_buffer;
+               kunmap_atomic(buf - sg->offset, KM_IRQ0);
+       }
+}
+
 /* This function is called by the isr to complete an inquiry command */
 static int tw_scsiop_inquiry_complete(TW_Device_Extension *tw_dev, int request_id)
 {
        unsigned char *is_unit_present;
-       unsigned char *request_buffer;
+       unsigned char request_buffer[36];
        TW_Param *param;
 
        dprintk(KERN_NOTICE "3w-xxxx: tw_scsiop_inquiry_complete()\n");
 
-       /* Fill request buffer */
-       if (tw_dev->srb[request_id]->request_buffer == NULL) {
-               printk(KERN_WARNING "3w-xxxx: tw_scsiop_inquiry_complete(): Request buffer NULL.\n");
-               return 1;
-       }
-       request_buffer = tw_dev->srb[request_id]->request_buffer;
-       memset(request_buffer, 0, tw_dev->srb[request_id]->request_bufflen);
+       memset(request_buffer, 0, sizeof(request_buffer));
        request_buffer[0] = TYPE_DISK; /* Peripheral device type */
        request_buffer[1] = 0;         /* Device type modifier */
        request_buffer[2] = 0;         /* No ansi/iso compliance */
@@ -1522,6 +1543,8 @@ static int tw_scsiop_inquiry_complete(TW_Device_Extension *tw_dev, int request_i
        memcpy(&request_buffer[8], "3ware   ", 8);       /* Vendor ID */
        sprintf(&request_buffer[16], "Logical Disk %-2d ", tw_dev->srb[request_id]->device->id);
        memcpy(&request_buffer[32], TW_DRIVER_VERSION, 3);
+       tw_transfer_internal(tw_dev, request_id, request_buffer,
+                            sizeof(request_buffer));
 
        param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
        if (param == NULL) {
@@ -1612,7 +1635,7 @@ static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int reques
 {
        TW_Param *param;
        unsigned char *flags;
-       unsigned char *request_buffer;
+       unsigned char request_buffer[8];
 
        dprintk(KERN_NOTICE "3w-xxxx: tw_scsiop_mode_sense_complete()\n");
 
@@ -1622,8 +1645,7 @@ static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int reques
                return 1;
        }
        flags = (char *)&(param->data[0]);
-       request_buffer = tw_dev->srb[request_id]->buffer;
-       memset(request_buffer, 0, tw_dev->srb[request_id]->request_bufflen);
+       memset(request_buffer, 0, sizeof(request_buffer));
 
        request_buffer[0] = 0xf;        /* mode data length */
        request_buffer[1] = 0;          /* default medium type */
@@ -1635,6 +1657,8 @@ static int tw_scsiop_mode_sense_complete(TW_Device_Extension *tw_dev, int reques
                request_buffer[6] = 0x4;        /* WCE on */
        else
                request_buffer[6] = 0x0;        /* WCE off */
+       tw_transfer_internal(tw_dev, request_id, request_buffer,
+                            sizeof(request_buffer));
 
        return 0;
 } /* End tw_scsiop_mode_sense_complete() */
@@ -1701,17 +1725,12 @@ static int tw_scsiop_read_capacity_complete(TW_Device_Extension *tw_dev, int req
 {
        unsigned char *param_data;
        u32 capacity;
-       char *buff;
+       char buff[8];
        TW_Param *param;
 
        dprintk(KERN_NOTICE "3w-xxxx: tw_scsiop_read_capacity_complete()\n");
 
-       buff = tw_dev->srb[request_id]->request_buffer;
-       if (buff == NULL) {
-               printk(KERN_WARNING "3w-xxxx: tw_scsiop_read_capacity_complete(): Request buffer NULL.\n");
-               return 1;
-       }
-       memset(buff, 0, tw_dev->srb[request_id]->request_bufflen);
+       memset(buff, 0, sizeof(buff));
        param = (TW_Param *)tw_dev->alignment_virtual_address[request_id];
        if (param == NULL) {
                printk(KERN_WARNING "3w-xxxx: tw_scsiop_read_capacity_complete(): Bad alignment virtual address.\n");
@@ -1739,6 +1758,8 @@ static int tw_scsiop_read_capacity_complete(TW_Device_Extension *tw_dev, int req
        buff[6] = (TW_BLOCK_SIZE >> 8) & 0xff;
        buff[7] = TW_BLOCK_SIZE & 0xff;
 
+       tw_transfer_internal(tw_dev, request_id, buff, sizeof(buff));
+
        return 0;
 } /* End tw_scsiop_read_capacity_complete() */
 
index 787ad00a2b739fd19232fe3ac6f9916a91759584..2d21265e650b2abc0d79bd1f2c50ef212d9b977b 100644 (file)
@@ -1,5 +1,11 @@
 menu "SCSI device support"
 
+config RAID_ATTRS
+       tristate "RAID Transport Class"
+       default n
+       ---help---
+         Provides RAID
+
 config SCSI
        tristate "SCSI device support"
        ---help---
@@ -459,6 +465,15 @@ config SCSI_ATA_PIIX
 
          If unsure, say N.
 
+config SCSI_SATA_MV
+       tristate "Marvell SATA support"
+       depends on SCSI_SATA && PCI && EXPERIMENTAL
+       help
+         This option enables support for the Marvell Serial ATA family.
+         Currently supports 88SX[56]0[48][01] chips.
+
+         If unsure, say N.
+
 config SCSI_SATA_NV
        tristate "NVIDIA SATA support"
        depends on SCSI_SATA && PCI && EXPERIMENTAL
index 3746fb9fa2f5b0518bd347447bd8d83d4ec20d1d..4b4fd94c2674cf6f3ac0b6c727ef2cd52f3d7be1 100644 (file)
@@ -22,6 +22,8 @@ subdir-$(CONFIG_PCMCIA)               += pcmcia
 
 obj-$(CONFIG_SCSI)             += scsi_mod.o
 
+obj-$(CONFIG_RAID_ATTRS)       += raid_class.o
+
 # --- NOTE ORDERING HERE ---
 # For kernel non-modular link, transport attributes need to
 # be initialised before drivers
@@ -132,6 +134,7 @@ obj-$(CONFIG_SCSI_SATA_SIS) += libata.o sata_sis.o
 obj-$(CONFIG_SCSI_SATA_SX4)    += libata.o sata_sx4.o
 obj-$(CONFIG_SCSI_SATA_NV)     += libata.o sata_nv.o
 obj-$(CONFIG_SCSI_SATA_ULI)    += libata.o sata_uli.o
+obj-$(CONFIG_SCSI_SATA_MV)     += libata.o sata_mv.o
 
 obj-$(CONFIG_ARM)              += arm/
 
index f8ec6fe7d85855a03457b0dabb80104f9f7d838f..d40ba0bd68a3b776699f62ff56e9b9ba89059950 100644 (file)
  */
 #include <scsi/scsi_dbg.h>
 
+#ifndef NDEBUG
+#define NDEBUG 0
+#endif
+#ifndef NDEBUG
+#define NDEBUG_ABORT 0
+#endif
+
 #if (NDEBUG & NDEBUG_LISTS)
 #define LIST(x,y) {printk("LINE:%d   Adding %p to %p\n", __LINE__, (void*)(x), (void*)(y)); if ((x)==(y)) udelay(5); }
 #define REMOVE(w,x,y,z) {printk("LINE:%d   Removing: %p->%p  %p->%p \n", __LINE__, (void*)(w), (void*)(x), (void*)(y), (void*)(z)); if ((x)==(y)) udelay(5); }
@@ -359,7 +366,7 @@ static struct {
        {PHASE_UNKNOWN, "UNKNOWN"}
 };
 
-#ifdef NDEBUG
+#if NDEBUG
 static struct {
        unsigned char mask;
        const char *name;
index 79ae73b2368029bb3fe35f3ce8ff0a5a3e0b93b0..e1f2246ee7cda1ca97360e913b9982b599f496a3 100644 (file)
@@ -62,7 +62,7 @@
 
 #define SYNC_MODE 0            /* Synchronous transfer mode */
 
-#if DEBUG
+#ifdef DEBUG
 #undef NCR53C406A_DEBUG
 #define NCR53C406A_DEBUG 1
 #endif
index ccdf440021fbe23c8997fc48f4e4928857b906a3..a8e3dfcd0dc758025a388a201f8eaddae5d23d58 100644 (file)
@@ -133,6 +133,7 @@ struct inquiry_data {
  
 static unsigned long aac_build_sg(struct scsi_cmnd* scsicmd, struct sgmap* sgmap);
 static unsigned long aac_build_sg64(struct scsi_cmnd* scsicmd, struct sgmap64* psg);
+static unsigned long aac_build_sgraw(struct scsi_cmnd* scsicmd, struct sgmapraw* psg);
 static int aac_send_srb_fib(struct scsi_cmnd* scsicmd);
 #ifdef AAC_DETAILED_STATUS_INFO
 static char *aac_get_status_string(u32 status);
@@ -348,6 +349,27 @@ static void aac_io_done(struct scsi_cmnd * scsicmd)
        spin_unlock_irqrestore(host->host_lock, cpu_flags);
 }
 
+static void aac_internal_transfer(struct scsi_cmnd *scsicmd, void *data, unsigned int offset, unsigned int len)
+{
+       void *buf;
+       unsigned int transfer_len;
+       struct scatterlist *sg = scsicmd->request_buffer;
+
+       if (scsicmd->use_sg) {
+               buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
+               transfer_len = min(sg->length, len + offset);
+       } else {
+               buf = scsicmd->request_buffer;
+               transfer_len = min(scsicmd->request_bufflen, len + offset);
+       }
+
+       memcpy(buf + offset, data, transfer_len - offset);
+
+       if (scsicmd->use_sg) 
+               kunmap_atomic(buf - sg->offset, KM_IRQ0);
+
+}
+
 static void get_container_name_callback(void *context, struct fib * fibptr)
 {
        struct aac_get_name_resp * get_name_reply;
@@ -363,18 +385,22 @@ static void get_container_name_callback(void *context, struct fib * fibptr)
        /* Failure is irrelevant, using default value instead */
        if ((le32_to_cpu(get_name_reply->status) == CT_OK)
         && (get_name_reply->data[0] != '\0')) {
-               int    count;
-               char * dp;
-               char * sp = get_name_reply->data;
+               char *sp = get_name_reply->data;
                sp[sizeof(((struct aac_get_name_resp *)NULL)->data)-1] = '\0';
                while (*sp == ' ')
                        ++sp;
-               count = sizeof(((struct inquiry_data *)NULL)->inqd_pid);
-               dp = ((struct inquiry_data *)scsicmd->request_buffer)->inqd_pid;
-               if (*sp) do {
-                       *dp++ = (*sp) ? *sp++ : ' ';
-               } while (--count > 0);
+               if (*sp) {
+                       char d[sizeof(((struct inquiry_data *)NULL)->inqd_pid)];
+                       int count = sizeof(d);
+                       char *dp = d;
+                       do {
+                               *dp++ = (*sp) ? *sp++ : ' ';
+                       } while (--count > 0);
+                       aac_internal_transfer(scsicmd, d, 
+                         offsetof(struct inquiry_data, inqd_pid), sizeof(d));
+               }
        }
+
        scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
 
        fib_complete(fibptr);
@@ -777,34 +803,36 @@ int aac_get_adapter_info(struct aac_dev* dev)
        /* 
         * 57 scatter gather elements 
         */
-       dev->scsi_host_ptr->sg_tablesize = (dev->max_fib_size -
-               sizeof(struct aac_fibhdr) -
-               sizeof(struct aac_write) + sizeof(struct sgmap)) /
-                       sizeof(struct sgmap);
-       if (dev->dac_support) {
-               /* 
-                * 38 scatter gather elements 
-                */
-               dev->scsi_host_ptr->sg_tablesize =
-                       (dev->max_fib_size -
+       if (!(dev->raw_io_interface)) {
+               dev->scsi_host_ptr->sg_tablesize = (dev->max_fib_size -
                        sizeof(struct aac_fibhdr) -
-                       sizeof(struct aac_write64) +
-                       sizeof(struct sgmap64)) /
-                               sizeof(struct sgmap64);
-       }
-       dev->scsi_host_ptr->max_sectors = AAC_MAX_32BIT_SGBCOUNT;
-       if(!(dev->adapter_info.options & AAC_OPT_NEW_COMM)) {
-               /*
-                * Worst case size that could cause sg overflow when
-                * we break up SG elements that are larger than 64KB.
-                * Would be nice if we could tell the SCSI layer what
-                * the maximum SG element size can be. Worst case is
-                * (sg_tablesize-1) 4KB elements with one 64KB
-                * element.
-                *      32bit -> 468 or 238KB   64bit -> 424 or 212KB
-                */
-               dev->scsi_host_ptr->max_sectors =
-                 (dev->scsi_host_ptr->sg_tablesize * 8) + 112;
+                       sizeof(struct aac_write) + sizeof(struct sgmap)) /
+                               sizeof(struct sgmap);
+               if (dev->dac_support) {
+                       /* 
+                        * 38 scatter gather elements 
+                        */
+                       dev->scsi_host_ptr->sg_tablesize =
+                               (dev->max_fib_size -
+                               sizeof(struct aac_fibhdr) -
+                               sizeof(struct aac_write64) +
+                               sizeof(struct sgmap64)) /
+                                       sizeof(struct sgmap64);
+               }
+               dev->scsi_host_ptr->max_sectors = AAC_MAX_32BIT_SGBCOUNT;
+               if(!(dev->adapter_info.options & AAC_OPT_NEW_COMM)) {
+                       /*
+                        * Worst case size that could cause sg overflow when
+                        * we break up SG elements that are larger than 64KB.
+                        * Would be nice if we could tell the SCSI layer what
+                        * the maximum SG element size can be. Worst case is
+                        * (sg_tablesize-1) 4KB elements with one 64KB
+                        * element.
+                        *      32bit -> 468 or 238KB   64bit -> 424 or 212KB
+                        */
+                       dev->scsi_host_ptr->max_sectors =
+                         (dev->scsi_host_ptr->sg_tablesize * 8) + 112;
+               }
        }
 
        fib_complete(fibptr);
@@ -814,12 +842,11 @@ int aac_get_adapter_info(struct aac_dev* dev)
 }
 
 
-static void read_callback(void *context, struct fib * fibptr)
+static void io_callback(void *context, struct fib * fibptr)
 {
        struct aac_dev *dev;
        struct aac_read_reply *readreply;
        struct scsi_cmnd *scsicmd;
-       u32 lba;
        u32 cid;
 
        scsicmd = (struct scsi_cmnd *) context;
@@ -827,8 +854,7 @@ static void read_callback(void *context, struct fib * fibptr)
        dev = (struct aac_dev *)scsicmd->device->host->hostdata;
        cid = ID_LUN_TO_CONTAINER(scsicmd->device->id, scsicmd->device->lun);
 
-       lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
-       dprintk((KERN_DEBUG "read_callback[cpu %d]: lba = %u, t = %ld.\n", smp_processor_id(), lba, jiffies));
+       dprintk((KERN_DEBUG "io_callback[cpu %d]: lba = %u, t = %ld.\n", smp_processor_id(), ((scsicmd->cmnd[1] & 0x1F) << 16) | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3], jiffies));
 
        if (fibptr == NULL)
                BUG();
@@ -847,7 +873,7 @@ static void read_callback(void *context, struct fib * fibptr)
                scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
        else {
 #ifdef AAC_DETAILED_STATUS_INFO
-               printk(KERN_WARNING "read_callback: io failed, status = %d\n",
+               printk(KERN_WARNING "io_callback: io failed, status = %d\n",
                  le32_to_cpu(readreply->status));
 #endif
                scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
@@ -867,53 +893,6 @@ static void read_callback(void *context, struct fib * fibptr)
        aac_io_done(scsicmd);
 }
 
-static void write_callback(void *context, struct fib * fibptr)
-{
-       struct aac_dev *dev;
-       struct aac_write_reply *writereply;
-       struct scsi_cmnd *scsicmd;
-       u32 lba;
-       u32 cid;
-
-       scsicmd = (struct scsi_cmnd *) context;
-       dev = (struct aac_dev *)scsicmd->device->host->hostdata;
-       cid = ID_LUN_TO_CONTAINER(scsicmd->device->id, scsicmd->device->lun);
-
-       lba = ((scsicmd->cmnd[1] & 0x1F) << 16) | (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];
-       dprintk((KERN_DEBUG "write_callback[cpu %d]: lba = %u, t = %ld.\n", smp_processor_id(), lba, jiffies));
-       if (fibptr == NULL)
-               BUG();
-
-       if(scsicmd->use_sg)
-               pci_unmap_sg(dev->pdev, 
-                       (struct scatterlist *)scsicmd->buffer,
-                       scsicmd->use_sg,
-                       scsicmd->sc_data_direction);
-       else if(scsicmd->request_bufflen)
-               pci_unmap_single(dev->pdev, scsicmd->SCp.dma_handle,
-                                scsicmd->request_bufflen,
-                                scsicmd->sc_data_direction);
-
-       writereply = (struct aac_write_reply *) fib_data(fibptr);
-       if (le32_to_cpu(writereply->status) == ST_OK)
-               scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
-       else {
-               printk(KERN_WARNING "write_callback: write failed, status = %d\n", writereply->status);
-               scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;
-               set_sense((u8 *) &dev->fsa_dev[cid].sense_data,
-                                   HARDWARE_ERROR,
-                                   SENCODE_INTERNAL_TARGET_FAILURE,
-                                   ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0,
-                                   0, 0);
-               memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data, 
-                               sizeof(struct sense_data));
-       }
-
-       fib_complete(fibptr);
-       fib_free(fibptr);
-       aac_io_done(scsicmd);
-}
-
 static int aac_read(struct scsi_cmnd * scsicmd, int cid)
 {
        u32 lba;
@@ -954,7 +933,32 @@ static int aac_read(struct scsi_cmnd * scsicmd, int cid)
 
        fib_init(cmd_fibcontext);
 
-       if (dev->dac_support == 1) {
+       if (dev->raw_io_interface) {
+               struct aac_raw_io *readcmd;
+               readcmd = (struct aac_raw_io *) fib_data(cmd_fibcontext);
+               readcmd->block[0] = cpu_to_le32(lba);
+               readcmd->block[1] = 0;
+               readcmd->count = cpu_to_le32(count<<9);
+               readcmd->cid = cpu_to_le16(cid);
+               readcmd->flags = cpu_to_le16(1);
+               readcmd->bpTotal = 0;
+               readcmd->bpComplete = 0;
+               
+               aac_build_sgraw(scsicmd, &readcmd->sg);
+               fibsize = sizeof(struct aac_raw_io) + ((le32_to_cpu(readcmd->sg.count) - 1) * sizeof (struct sgentryraw));
+               if (fibsize > (dev->max_fib_size - sizeof(struct aac_fibhdr)))
+                       BUG();
+               /*
+                *      Now send the Fib to the adapter
+                */
+               status = fib_send(ContainerRawIo,
+                         cmd_fibcontext, 
+                         fibsize, 
+                         FsaNormal, 
+                         0, 1, 
+                         (fib_callback) io_callback, 
+                         (void *) scsicmd);
+       } else if (dev->dac_support == 1) {
                struct aac_read64 *readcmd;
                readcmd = (struct aac_read64 *) fib_data(cmd_fibcontext);
                readcmd->command = cpu_to_le32(VM_CtHostRead64);
@@ -968,7 +972,7 @@ static int aac_read(struct scsi_cmnd * scsicmd, int cid)
                fibsize = sizeof(struct aac_read64) + 
                        ((le32_to_cpu(readcmd->sg.count) - 1) * 
                         sizeof (struct sgentry64));
-               BUG_ON (fibsize > (sizeof(struct hw_fib) - 
+               BUG_ON (fibsize > (dev->max_fib_size - 
                                        sizeof(struct aac_fibhdr)));
                /*
                 *      Now send the Fib to the adapter
@@ -978,7 +982,7 @@ static int aac_read(struct scsi_cmnd * scsicmd, int cid)
                          fibsize, 
                          FsaNormal, 
                          0, 1, 
-                         (fib_callback) read_callback, 
+                         (fib_callback) io_callback, 
                          (void *) scsicmd);
        } else {
                struct aac_read *readcmd;
@@ -1002,7 +1006,7 @@ static int aac_read(struct scsi_cmnd * scsicmd, int cid)
                          fibsize, 
                          FsaNormal, 
                          0, 1, 
-                         (fib_callback) read_callback, 
+                         (fib_callback) io_callback, 
                          (void *) scsicmd);
        }
 
@@ -1061,7 +1065,32 @@ static int aac_write(struct scsi_cmnd * scsicmd, int cid)
        }
        fib_init(cmd_fibcontext);
 
-       if(dev->dac_support == 1) {
+       if (dev->raw_io_interface) {
+               struct aac_raw_io *writecmd;
+               writecmd = (struct aac_raw_io *) fib_data(cmd_fibcontext);
+               writecmd->block[0] = cpu_to_le32(lba);
+               writecmd->block[1] = 0;
+               writecmd->count = cpu_to_le32(count<<9);
+               writecmd->cid = cpu_to_le16(cid);
+               writecmd->flags = 0; 
+               writecmd->bpTotal = 0;
+               writecmd->bpComplete = 0;
+               
+               aac_build_sgraw(scsicmd, &writecmd->sg);
+               fibsize = sizeof(struct aac_raw_io) + ((le32_to_cpu(writecmd->sg.count) - 1) * sizeof (struct sgentryraw));
+               if (fibsize > (dev->max_fib_size - sizeof(struct aac_fibhdr)))
+                       BUG();
+               /*
+                *      Now send the Fib to the adapter
+                */
+               status = fib_send(ContainerRawIo,
+                         cmd_fibcontext, 
+                         fibsize, 
+                         FsaNormal, 
+                         0, 1, 
+                         (fib_callback) io_callback, 
+                         (void *) scsicmd);
+       } else if (dev->dac_support == 1) {
                struct aac_write64 *writecmd;
                writecmd = (struct aac_write64 *) fib_data(cmd_fibcontext);
                writecmd->command = cpu_to_le32(VM_CtHostWrite64);
@@ -1085,7 +1114,7 @@ static int aac_write(struct scsi_cmnd * scsicmd, int cid)
                          fibsize, 
                          FsaNormal, 
                          0, 1, 
-                         (fib_callback) write_callback, 
+                         (fib_callback) io_callback, 
                          (void *) scsicmd);
        } else {
                struct aac_write *writecmd;
@@ -1111,7 +1140,7 @@ static int aac_write(struct scsi_cmnd * scsicmd, int cid)
                          fibsize, 
                          FsaNormal, 
                          0, 1, 
-                         (fib_callback) write_callback, 
+                         (fib_callback) io_callback, 
                          (void *) scsicmd);
        }
 
@@ -1340,44 +1369,45 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
        switch (scsicmd->cmnd[0]) {
        case INQUIRY:
        {
-               struct inquiry_data *inq_data_ptr;
+               struct inquiry_data inq_data;
 
                dprintk((KERN_DEBUG "INQUIRY command, ID: %d.\n", scsicmd->device->id));
-               inq_data_ptr = (struct inquiry_data *)scsicmd->request_buffer;
-               memset(inq_data_ptr, 0, sizeof (struct inquiry_data));
+               memset(&inq_data, 0, sizeof (struct inquiry_data));
 
-               inq_data_ptr->inqd_ver = 2;     /* claim compliance to SCSI-2 */
-               inq_data_ptr->inqd_dtq = 0x80;  /* set RMB bit to one indicating that the medium is removable */
-               inq_data_ptr->inqd_rdf = 2;     /* A response data format value of two indicates that the data shall be in the format specified in SCSI-2 */
-               inq_data_ptr->inqd_len = 31;
+               inq_data.inqd_ver = 2;  /* claim compliance to SCSI-2 */
+               inq_data.inqd_dtq = 0x80;       /* set RMB bit to one indicating that the medium is removable */
+               inq_data.inqd_rdf = 2;  /* A response data format value of two indicates that the data shall be in the format specified in SCSI-2 */
+               inq_data.inqd_len = 31;
                /*Format for "pad2" is  RelAdr | WBus32 | WBus16 |  Sync  | Linked |Reserved| CmdQue | SftRe */
-               inq_data_ptr->inqd_pad2= 0x32 ;  /*WBus16|Sync|CmdQue */
+               inq_data.inqd_pad2= 0x32 ;       /*WBus16|Sync|CmdQue */
                /*
                 *      Set the Vendor, Product, and Revision Level
                 *      see: <vendor>.c i.e. aac.c
                 */
                if (scsicmd->device->id == host->this_id) {
-                       setinqstr(cardtype, (void *) (inq_data_ptr->inqd_vid), (sizeof(container_types)/sizeof(char *)));
-                       inq_data_ptr->inqd_pdt = INQD_PDT_PROC; /* Processor device */
+                       setinqstr(cardtype, (void *) (inq_data.inqd_vid), (sizeof(container_types)/sizeof(char *)));
+                       inq_data.inqd_pdt = INQD_PDT_PROC;      /* Processor device */
+                       aac_internal_transfer(scsicmd, &inq_data, 0, sizeof(inq_data));
                        scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
                        scsicmd->scsi_done(scsicmd);
                        return 0;
                }
-               setinqstr(cardtype, (void *) (inq_data_ptr->inqd_vid), fsa_dev_ptr[cid].type);
-               inq_data_ptr->inqd_pdt = INQD_PDT_DA;   /* Direct/random access device */
+               setinqstr(cardtype, (void *) (inq_data.inqd_vid), fsa_dev_ptr[cid].type);
+               inq_data.inqd_pdt = INQD_PDT_DA;        /* Direct/random access device */
+               aac_internal_transfer(scsicmd, &inq_data, 0, sizeof(inq_data));
                return aac_get_container_name(scsicmd, cid);
        }
        case READ_CAPACITY:
        {
                u32 capacity;
-               char *cp;
+               char cp[8];
 
                dprintk((KERN_DEBUG "READ CAPACITY command.\n"));
                if (fsa_dev_ptr[cid].size <= 0x100000000LL)
                        capacity = fsa_dev_ptr[cid].size - 1;
                else
                        capacity = (u32)-1;
-               cp = scsicmd->request_buffer;
+
                cp[0] = (capacity >> 24) & 0xff;
                cp[1] = (capacity >> 16) & 0xff;
                cp[2] = (capacity >> 8) & 0xff;
@@ -1386,6 +1416,7 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
                cp[5] = 0;
                cp[6] = 2;
                cp[7] = 0;
+               aac_internal_transfer(scsicmd, cp, 0, sizeof(cp));
 
                scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
                scsicmd->scsi_done(scsicmd);
@@ -1395,15 +1426,15 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
 
        case MODE_SENSE:
        {
-               char *mode_buf;
+               char mode_buf[4];
 
                dprintk((KERN_DEBUG "MODE SENSE command.\n"));
-               mode_buf = scsicmd->request_buffer;
                mode_buf[0] = 3;        /* Mode data length */
                mode_buf[1] = 0;        /* Medium type - default */
                mode_buf[2] = 0;        /* Device-specific param, bit 8: 0/1 = write enabled/protected */
                mode_buf[3] = 0;        /* Block descriptor length */
 
+               aac_internal_transfer(scsicmd, mode_buf, 0, sizeof(mode_buf));
                scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
                scsicmd->scsi_done(scsicmd);
 
@@ -1411,10 +1442,9 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
        }
        case MODE_SENSE_10:
        {
-               char *mode_buf;
+               char mode_buf[8];
 
                dprintk((KERN_DEBUG "MODE SENSE 10 byte command.\n"));
-               mode_buf = scsicmd->request_buffer;
                mode_buf[0] = 0;        /* Mode data length (MSB) */
                mode_buf[1] = 6;        /* Mode data length (LSB) */
                mode_buf[2] = 0;        /* Medium type - default */
@@ -1423,6 +1453,7 @@ int aac_scsi_cmd(struct scsi_cmnd * scsicmd)
                mode_buf[5] = 0;        /* reserved */
                mode_buf[6] = 0;        /* Block descriptor length (MSB) */
                mode_buf[7] = 0;        /* Block descriptor length (LSB) */
+               aac_internal_transfer(scsicmd, mode_buf, 0, sizeof(mode_buf));
 
                scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;
                scsicmd->scsi_done(scsicmd);
@@ -1894,7 +1925,7 @@ static int aac_send_srb_fib(struct scsi_cmnd* scsicmd)
        srbcmd->id   = cpu_to_le32(scsicmd->device->id);
        srbcmd->lun      = cpu_to_le32(scsicmd->device->lun);
        srbcmd->flags    = cpu_to_le32(flag);
-       timeout = (scsicmd->timeout-jiffies)/HZ;
+       timeout = scsicmd->timeout_per_command/HZ;
        if(timeout == 0){
                timeout = 1;
        }
@@ -2077,6 +2108,76 @@ static unsigned long aac_build_sg64(struct scsi_cmnd* scsicmd, struct sgmap64* p
        return byte_count;
 }
 
+static unsigned long aac_build_sgraw(struct scsi_cmnd* scsicmd, struct sgmapraw* psg)
+{
+       struct Scsi_Host *host = scsicmd->device->host;
+       struct aac_dev *dev = (struct aac_dev *)host->hostdata;
+       unsigned long byte_count = 0;
+
+       // Get rid of old data
+       psg->count = 0;
+       psg->sg[0].next = 0;
+       psg->sg[0].prev = 0;
+       psg->sg[0].addr[0] = 0;
+       psg->sg[0].addr[1] = 0;
+       psg->sg[0].count = 0;
+       psg->sg[0].flags = 0;
+       if (scsicmd->use_sg) {
+               struct scatterlist *sg;
+               int i;
+               int sg_count;
+               sg = (struct scatterlist *) scsicmd->request_buffer;
+
+               sg_count = pci_map_sg(dev->pdev, sg, scsicmd->use_sg,
+                       scsicmd->sc_data_direction);
+
+               for (i = 0; i < sg_count; i++) {
+                       int count = sg_dma_len(sg);
+                       u64 addr = sg_dma_address(sg);
+                       psg->sg[i].next = 0;
+                       psg->sg[i].prev = 0;
+                       psg->sg[i].addr[1] = cpu_to_le32((u32)(addr>>32));
+                       psg->sg[i].addr[0] = cpu_to_le32((u32)(addr & 0xffffffff));
+                       psg->sg[i].count = cpu_to_le32(count);
+                       psg->sg[i].flags = 0;
+                       byte_count += count;
+                       sg++;
+               }
+               psg->count = cpu_to_le32(sg_count);
+               /* hba wants the size to be exact */
+               if(byte_count > scsicmd->request_bufflen){
+                       u32 temp = le32_to_cpu(psg->sg[i-1].count) - 
+                               (byte_count - scsicmd->request_bufflen);
+                       psg->sg[i-1].count = cpu_to_le32(temp);
+                       byte_count = scsicmd->request_bufflen;
+               }
+               /* Check for command underflow */
+               if(scsicmd->underflow && (byte_count < scsicmd->underflow)){
+                       printk(KERN_WARNING"aacraid: cmd len %08lX cmd underflow %08X\n",
+                                       byte_count, scsicmd->underflow);
+               }
+       }
+       else if(scsicmd->request_bufflen) {
+               int count;
+               u64 addr;
+               scsicmd->SCp.dma_handle = pci_map_single(dev->pdev,
+                               scsicmd->request_buffer,
+                               scsicmd->request_bufflen,
+                               scsicmd->sc_data_direction);
+               addr = scsicmd->SCp.dma_handle;
+               count = scsicmd->request_bufflen;
+               psg->count = cpu_to_le32(1);
+               psg->sg[0].next = 0;
+               psg->sg[0].prev = 0;
+               psg->sg[0].addr[1] = cpu_to_le32((u32)(addr>>32));
+               psg->sg[0].addr[0] = cpu_to_le32((u32)(addr & 0xffffffff));
+               psg->sg[0].count = cpu_to_le32(count);
+               psg->sg[0].flags = 0;
+               byte_count = scsicmd->request_bufflen;
+       }
+       return byte_count;
+}
+
 #ifdef AAC_DETAILED_STATUS_INFO
 
 struct aac_srb_status_info {
index 4ab07861b457fd80c1af736cb17dd633119228e6..e40528185d48fab70a6d5011ed1a4f6773073cef 100644 (file)
@@ -110,6 +110,22 @@ struct user_sgentry64 {
        u32     count;  /* Length. */
 };
 
+struct sgentryraw {
+       __le32          next;   /* reserved for F/W use */
+       __le32          prev;   /* reserved for F/W use */
+       __le32          addr[2];
+       __le32          count;
+       __le32          flags;  /* reserved for F/W use */
+};
+
+struct user_sgentryraw {
+       u32             next;   /* reserved for F/W use */
+       u32             prev;   /* reserved for F/W use */
+       u32             addr[2];
+       u32             count;
+       u32             flags;  /* reserved for F/W use */
+};
+
 /*
  *     SGMAP
  *
@@ -137,6 +153,16 @@ struct user_sgmap64 {
        struct user_sgentry64 sg[1];
 };
 
+struct sgmapraw {
+       __le32            count;
+       struct sgentryraw sg[1];
+};
+
+struct user_sgmapraw {
+       u32               count;
+       struct user_sgentryraw sg[1];
+};
+
 struct creation_info
 {
        u8              buildnum;               /* e.g., 588 */
@@ -351,6 +377,7 @@ struct hw_fib {
  */
 #define                ContainerCommand                500
 #define                ContainerCommand64              501
+#define                ContainerRawIo                  502
 /*
  *     Cluster Commands
  */
@@ -456,6 +483,7 @@ struct adapter_ops
 {
        void (*adapter_interrupt)(struct aac_dev *dev);
        void (*adapter_notify)(struct aac_dev *dev, u32 event);
+       void (*adapter_disable_int)(struct aac_dev *dev);
        int  (*adapter_sync_cmd)(struct aac_dev *dev, u32 command, u32 p1, u32 p2, u32 p3, u32 p4, u32 p5, u32 p6, u32 *status, u32 *r1, u32 *r2, u32 *r3, u32 *r4);
        int  (*adapter_check_health)(struct aac_dev *dev);
 };
@@ -981,6 +1009,9 @@ struct aac_dev
        u8                      nondasd_support; 
        u8                      dac_support;
        u8                      raid_scsi_mode;
+       /* macro side-effects BEWARE */
+#      define                  raw_io_interface \
+         init->InitStructRevision==cpu_to_le32(ADAPTER_INIT_STRUCT_REVISION_4)
        u8                      printf_enabled;
 };
 
@@ -990,6 +1021,9 @@ struct aac_dev
 #define aac_adapter_notify(dev, event) \
        (dev)->a_ops.adapter_notify(dev, event)
 
+#define aac_adapter_disable_int(dev) \
+       (dev)->a_ops.adapter_disable_int(dev)
+
 #define aac_adapter_sync_cmd(dev, command, p1, p2, p3, p4, p5, p6, status, r1, r2, r3, r4) \
        (dev)->a_ops.adapter_sync_cmd(dev, command, p1, p2, p3, p4, p5, p6, status, r1, r2, r3, r4)
 
@@ -1156,6 +1190,17 @@ struct aac_write_reply
        __le32          committed;
 };
 
+struct aac_raw_io
+{
+       __le32          block[2];
+       __le32          count;
+       __le16          cid;
+       __le16          flags;          /* 00 W, 01 R */
+       __le16          bpTotal;        /* reserved for F/W use */
+       __le16          bpComplete;     /* reserved for F/W use */
+       struct sgmapraw sg;
+};
+
 #define CT_FLUSH_CACHE 129
 struct aac_synchronize {
        __le32          command;        /* VM_ContainerConfig */
@@ -1196,7 +1241,7 @@ struct aac_srb
 };
 
 /*
- * This and assocated data structs are used by the 
+ * This and associated data structs are used by the
  * ioctl caller and are in cpu order.
  */
 struct user_aac_srb
@@ -1508,11 +1553,12 @@ struct fib_ioctl
 
 struct revision
 {
-       u32 compat;
-       u32 version;
-       u32 build;
+       __le32 compat;
+       __le32 version;
+       __le32 build;
 };
        
+
 /*
  *     Ugly - non Linux like ioctl coding for back compat.
  */
@@ -1733,3 +1779,4 @@ int aac_get_adapter_info(struct aac_dev* dev);
 int aac_send_shutdown(struct aac_dev *dev);
 extern int numacb;
 extern int acbsize;
+extern char aac_driver_version[];
index 85387099aab238db175a7b53a238a819f597ba3e..71f1cad9b5f077bf8e5ad1bb3024135e5875c3c7 100644 (file)
@@ -287,7 +287,6 @@ return_fib:
                kfree(fib->hw_fib);
                kfree(fib);
                status = 0;
-               fibctx->jiffies = jiffies/HZ;
        } else {
                spin_unlock_irqrestore(&dev->fib_lock, flags);
                if (f.wait) {
@@ -302,6 +301,7 @@ return_fib:
                        status = -EAGAIN;
                }       
        }
+       fibctx->jiffies = jiffies/HZ;
        return status;
 }
 
@@ -405,10 +405,20 @@ static int close_getadapter_fib(struct aac_dev * dev, void __user *arg)
 static int check_revision(struct aac_dev *dev, void __user *arg)
 {
        struct revision response;
-
-       response.compat = 1;
-       response.version = le32_to_cpu(dev->adapter_info.kernelrev);
-       response.build = le32_to_cpu(dev->adapter_info.kernelbuild);
+       char *driver_version = aac_driver_version;
+       u32 version;
+
+       response.compat = cpu_to_le32(1);
+       version = (simple_strtol(driver_version, 
+                               &driver_version, 10) << 24) | 0x00000400;
+       version += simple_strtol(driver_version + 1, &driver_version, 10) << 16;
+       version += simple_strtol(driver_version + 1, NULL, 10);
+       response.version = cpu_to_le32(version);
+#      if (defined(AAC_DRIVER_BUILD))
+               response.build = cpu_to_le32(AAC_DRIVER_BUILD);
+#      else
+               response.build = cpu_to_le32(9999);
+#      endif
 
        if (copy_to_user(arg, &response, sizeof(response)))
                return -EFAULT;
index 43557bf661f63098a2754c3fa255b693d02979c2..75abd04532890de2c7855e39bb1551c7886a0468 100644 (file)
@@ -44,7 +44,9 @@
 
 #include "aacraid.h"
 
-struct aac_common aac_config;
+struct aac_common aac_config = {
+       .irq_mod = 1
+};
 
 static int aac_alloc_comm(struct aac_dev *dev, void **commaddr, unsigned long commsize, unsigned long commalign)
 {
index 5322865942e28b1a3911d83a8d2d6104263dd869..a1d303f034808f3e31a2f44860355f1e240d7ee4 100644 (file)
@@ -254,6 +254,7 @@ static void fib_dealloc(struct fib * fibptr)
 static int aac_get_entry (struct aac_dev * dev, u32 qid, struct aac_entry **entry, u32 * index, unsigned long *nonotify)
 {
        struct aac_queue * q;
+       unsigned long idx;
 
        /*
         *      All of the queues wrap when they reach the end, so we check
@@ -263,10 +264,23 @@ static int aac_get_entry (struct aac_dev * dev, u32 qid, struct aac_entry **entr
         */
 
        q = &dev->queues->queue[qid];
-       
-       *index = le32_to_cpu(*(q->headers.producer));
-       if ((*index - 2) == le32_to_cpu(*(q->headers.consumer)))
+
+       idx = *index = le32_to_cpu(*(q->headers.producer));
+       /* Interrupt Moderation, only interrupt for first two entries */
+       if (idx != le32_to_cpu(*(q->headers.consumer))) {
+               if (--idx == 0) {
+                       if (qid == AdapHighCmdQueue)
+                               idx = ADAP_HIGH_CMD_ENTRIES;
+                       else if (qid == AdapNormCmdQueue)
+                               idx = ADAP_NORM_CMD_ENTRIES;
+                       else if (qid == AdapHighRespQueue) 
+                               idx = ADAP_HIGH_RESP_ENTRIES;
+                       else if (qid == AdapNormRespQueue) 
+                               idx = ADAP_NORM_RESP_ENTRIES;
+               }
+               if (idx != le32_to_cpu(*(q->headers.consumer)))
                        *nonotify = 1; 
+       }
 
        if (qid == AdapHighCmdQueue) {
                if (*index >= ADAP_HIGH_CMD_ENTRIES)
index 562da90480a1426346ceba19efe54108e4043826..4ff29d7f58252cb6b5fabb309aa84ad25eea64be 100644 (file)
  * Abstract: Linux Driver entry module for Adaptec RAID Array Controller
  */
 
-#define AAC_DRIVER_VERSION             "1.1.2-lk2"
-#define AAC_DRIVER_BUILD_DATE          __DATE__
+#define AAC_DRIVER_VERSION             "1.1-4"
+#ifndef AAC_DRIVER_BRANCH
+#define AAC_DRIVER_BRANCH              ""
+#endif
+#define AAC_DRIVER_BUILD_DATE          __DATE__ " " __TIME__
 #define AAC_DRIVERNAME                 "aacraid"
 
 #include <linux/compat.h>
 
 #include "aacraid.h"
 
+#ifdef AAC_DRIVER_BUILD
+#define _str(x) #x
+#define str(x) _str(x)
+#define AAC_DRIVER_FULL_VERSION        AAC_DRIVER_VERSION "[" str(AAC_DRIVER_BUILD) "]" AAC_DRIVER_BRANCH
+#else
+#define AAC_DRIVER_FULL_VERSION        AAC_DRIVER_VERSION AAC_DRIVER_BRANCH " " AAC_DRIVER_BUILD_DATE
+#endif
 
 MODULE_AUTHOR("Red Hat Inc and Adaptec");
 MODULE_DESCRIPTION("Dell PERC2, 2/Si, 3/Si, 3/Di, "
                   "Adaptec Advanced Raid Products, "
                   "and HP NetRAID-4M SCSI driver");
 MODULE_LICENSE("GPL");
-MODULE_VERSION(AAC_DRIVER_VERSION);
+MODULE_VERSION(AAC_DRIVER_FULL_VERSION);
 
 static LIST_HEAD(aac_devices);
 static int aac_cfg_major = -1;
+char aac_driver_version[] = AAC_DRIVER_FULL_VERSION;
 
 /*
  * Because of the way Linux names scsi devices, the order in this table has
@@ -109,36 +120,39 @@ static struct pci_device_id aac_pci_tbl[] = {
        { 0x9005, 0x0286, 0x9005, 0x02a3, 0, 0, 29 }, /* ICP5085AU (Hurricane) */
        { 0x9005, 0x0285, 0x9005, 0x02a4, 0, 0, 30 }, /* ICP9085LI (Marauder-X) */
        { 0x9005, 0x0285, 0x9005, 0x02a5, 0, 0, 31 }, /* ICP5085BR (Marauder-E) */
-       { 0x9005, 0x0287, 0x9005, 0x0800, 0, 0, 32 }, /* Themisto Jupiter Platform */
-       { 0x9005, 0x0200, 0x9005, 0x0200, 0, 0, 32 }, /* Themisto Jupiter Platform */
-       { 0x9005, 0x0286, 0x9005, 0x0800, 0, 0, 33 }, /* Callisto Jupiter Platform */
-       { 0x9005, 0x0285, 0x9005, 0x028e, 0, 0, 34 }, /* ASR-2020SA SATA PCI-X ZCR (Skyhawk) */
-       { 0x9005, 0x0285, 0x9005, 0x028f, 0, 0, 35 }, /* ASR-2025SA SATA SO-DIMM PCI-X ZCR (Terminator) */
-       { 0x9005, 0x0285, 0x9005, 0x0290, 0, 0, 36 }, /* AAR-2410SA PCI SATA 4ch (Jaguar II) */
-       { 0x9005, 0x0285, 0x1028, 0x0291, 0, 0, 37 }, /* CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) */
-       { 0x9005, 0x0285, 0x9005, 0x0292, 0, 0, 38 }, /* AAR-2810SA PCI SATA 8ch (Corsair-8) */
-       { 0x9005, 0x0285, 0x9005, 0x0293, 0, 0, 39 }, /* AAR-21610SA PCI SATA 16ch (Corsair-16) */
-       { 0x9005, 0x0285, 0x9005, 0x0294, 0, 0, 40 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
-       { 0x9005, 0x0285, 0x103C, 0x3227, 0, 0, 41 }, /* AAR-2610SA PCI SATA 6ch */
-       { 0x9005, 0x0285, 0x9005, 0x0296, 0, 0, 42 }, /* ASR-2240S (SabreExpress) */
-       { 0x9005, 0x0285, 0x9005, 0x0297, 0, 0, 43 }, /* ASR-4005SAS */
-       { 0x9005, 0x0285, 0x1014, 0x02F2, 0, 0, 44 }, /* IBM 8i (AvonPark) */
-       { 0x9005, 0x0285, 0x1014, 0x0312, 0, 0, 44 }, /* IBM 8i (AvonPark Lite) */
-       { 0x9005, 0x0285, 0x9005, 0x0298, 0, 0, 45 }, /* ASR-4000SAS (BlackBird) */
-       { 0x9005, 0x0285, 0x9005, 0x0299, 0, 0, 46 }, /* ASR-4800SAS (Marauder-X) */
-       { 0x9005, 0x0285, 0x9005, 0x029a, 0, 0, 47 }, /* ASR-4805SAS (Marauder-E) */
-       { 0x9005, 0x0286, 0x9005, 0x02a2, 0, 0, 48 }, /* ASR-4810SAS (Hurricane */
-
-       { 0x9005, 0x0285, 0x1028, 0x0287, 0, 0, 49 }, /* Perc 320/DC*/
-       { 0x1011, 0x0046, 0x9005, 0x0365, 0, 0, 50 }, /* Adaptec 5400S (Mustang)*/
-       { 0x1011, 0x0046, 0x9005, 0x0364, 0, 0, 51 }, /* Adaptec 5400S (Mustang)*/
-       { 0x1011, 0x0046, 0x9005, 0x1364, 0, 0, 52 }, /* Dell PERC2/QC */
-       { 0x1011, 0x0046, 0x103c, 0x10c2, 0, 0, 53 }, /* HP NetRAID-4M */
-
-       { 0x9005, 0x0285, 0x1028, PCI_ANY_ID, 0, 0, 54 }, /* Dell Catchall */
-       { 0x9005, 0x0285, 0x17aa, PCI_ANY_ID, 0, 0, 55 }, /* Legend Catchall */
-       { 0x9005, 0x0285, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 56 }, /* Adaptec Catch All */
-       { 0x9005, 0x0286, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 57 }, /* Adaptec Rocket Catch All */
+       { 0x9005, 0x0286, 0x9005, 0x02a6, 0, 0, 32 }, /* ICP9067MA (Intruder-6) */
+       { 0x9005, 0x0287, 0x9005, 0x0800, 0, 0, 33 }, /* Themisto Jupiter Platform */
+       { 0x9005, 0x0200, 0x9005, 0x0200, 0, 0, 33 }, /* Themisto Jupiter Platform */
+       { 0x9005, 0x0286, 0x9005, 0x0800, 0, 0, 34 }, /* Callisto Jupiter Platform */
+       { 0x9005, 0x0285, 0x9005, 0x028e, 0, 0, 35 }, /* ASR-2020SA SATA PCI-X ZCR (Skyhawk) */
+       { 0x9005, 0x0285, 0x9005, 0x028f, 0, 0, 36 }, /* ASR-2025SA SATA SO-DIMM PCI-X ZCR (Terminator) */
+       { 0x9005, 0x0285, 0x9005, 0x0290, 0, 0, 37 }, /* AAR-2410SA PCI SATA 4ch (Jaguar II) */
+       { 0x9005, 0x0285, 0x1028, 0x0291, 0, 0, 38 }, /* CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) */
+       { 0x9005, 0x0285, 0x9005, 0x0292, 0, 0, 39 }, /* AAR-2810SA PCI SATA 8ch (Corsair-8) */
+       { 0x9005, 0x0285, 0x9005, 0x0293, 0, 0, 40 }, /* AAR-21610SA PCI SATA 16ch (Corsair-16) */
+       { 0x9005, 0x0285, 0x9005, 0x0294, 0, 0, 41 }, /* ESD SO-DIMM PCI-X SATA ZCR (Prowler) */
+       { 0x9005, 0x0285, 0x103C, 0x3227, 0, 0, 42 }, /* AAR-2610SA PCI SATA 6ch */
+       { 0x9005, 0x0285, 0x9005, 0x0296, 0, 0, 43 }, /* ASR-2240S (SabreExpress) */
+       { 0x9005, 0x0285, 0x9005, 0x0297, 0, 0, 44 }, /* ASR-4005SAS */
+       { 0x9005, 0x0285, 0x1014, 0x02F2, 0, 0, 45 }, /* IBM 8i (AvonPark) */
+       { 0x9005, 0x0285, 0x1014, 0x0312, 0, 0, 45 }, /* IBM 8i (AvonPark Lite) */
+       { 0x9005, 0x0286, 0x1014, 0x9580, 0, 0, 46 }, /* IBM 8k/8k-l8 (Aurora) */
+       { 0x9005, 0x0286, 0x1014, 0x9540, 0, 0, 47 }, /* IBM 8k/8k-l4 (Aurora Lite) */
+       { 0x9005, 0x0285, 0x9005, 0x0298, 0, 0, 48 }, /* ASR-4000SAS (BlackBird) */
+       { 0x9005, 0x0285, 0x9005, 0x0299, 0, 0, 49 }, /* ASR-4800SAS (Marauder-X) */
+       { 0x9005, 0x0285, 0x9005, 0x029a, 0, 0, 50 }, /* ASR-4805SAS (Marauder-E) */
+       { 0x9005, 0x0286, 0x9005, 0x02a2, 0, 0, 51 }, /* ASR-4810SAS (Hurricane */
+
+       { 0x9005, 0x0285, 0x1028, 0x0287, 0, 0, 52 }, /* Perc 320/DC*/
+       { 0x1011, 0x0046, 0x9005, 0x0365, 0, 0, 53 }, /* Adaptec 5400S (Mustang)*/
+       { 0x1011, 0x0046, 0x9005, 0x0364, 0, 0, 54 }, /* Adaptec 5400S (Mustang)*/
+       { 0x1011, 0x0046, 0x9005, 0x1364, 0, 0, 55 }, /* Dell PERC2/QC */
+       { 0x1011, 0x0046, 0x103c, 0x10c2, 0, 0, 56 }, /* HP NetRAID-4M */
+
+       { 0x9005, 0x0285, 0x1028, PCI_ANY_ID, 0, 0, 57 }, /* Dell Catchall */
+       { 0x9005, 0x0285, 0x17aa, PCI_ANY_ID, 0, 0, 58 }, /* Legend Catchall */
+       { 0x9005, 0x0285, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 59 }, /* Adaptec Catch All */
+       { 0x9005, 0x0286, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 60 }, /* Adaptec Rocket Catch All */
        { 0,}
 };
 MODULE_DEVICE_TABLE(pci, aac_pci_tbl);
@@ -180,8 +194,9 @@ static struct aac_driver_ident aac_drivers[] = {
        { aac_rkt_init, "aacraid",  "ICP     ", "ICP9047MA       ", 1 }, /* ICP9047MA (Lancer) */
        { aac_rkt_init, "aacraid",  "ICP     ", "ICP9087MA       ", 1 }, /* ICP9087MA (Lancer) */
        { aac_rkt_init, "aacraid",  "ICP     ", "ICP5085AU       ", 1 }, /* ICP5085AU (Hurricane) */
-       { aac_rkt_init, "aacraid",  "ICP     ", "ICP9085LI       ", 1 }, /* ICP9085LI (Marauder-X) */
-       { aac_rkt_init, "aacraid",  "ICP     ", "ICP5085BR       ", 1 }, /* ICP5085BR (Marauder-E) */
+       { aac_rx_init, "aacraid",  "ICP     ", "ICP9085LI       ", 1 }, /* ICP9085LI (Marauder-X) */
+       { aac_rx_init, "aacraid",  "ICP     ", "ICP5085BR       ", 1 }, /* ICP5085BR (Marauder-E) */
+       { aac_rkt_init, "aacraid",  "ICP     ", "ICP9067MA       ", 1 }, /* ICP9067MA (Intruder-6) */
        { NULL        , "aacraid",  "ADAPTEC ", "Themisto        ", 0, AAC_QUIRK_SLAVE }, /* Jupiter Platform */
        { aac_rkt_init, "aacraid",  "ADAPTEC ", "Callisto        ", 2, AAC_QUIRK_MASTER }, /* Jupiter Platform */
        { aac_rx_init, "aacraid",  "ADAPTEC ", "ASR-2020SA       ", 1 }, /* ASR-2020SA SATA PCI-X ZCR (Skyhawk) */
@@ -195,10 +210,12 @@ static struct aac_driver_ident aac_drivers[] = {
        { aac_rx_init, "aacraid",  "ADAPTEC ", "ASR-2240S       ", 1 }, /* ASR-2240S (SabreExpress) */
        { aac_rx_init, "aacraid",  "ADAPTEC ", "ASR-4005SAS     ", 1 }, /* ASR-4005SAS */
        { aac_rx_init, "ServeRAID","IBM     ", "ServeRAID 8i    ", 1 }, /* IBM 8i (AvonPark) */
+       { aac_rkt_init, "ServeRAID","IBM     ", "ServeRAID 8k-l8 ", 1 }, /* IBM 8k/8k-l8 (Aurora) */
+       { aac_rkt_init, "ServeRAID","IBM     ", "ServeRAID 8k-l4 ", 1 }, /* IBM 8k/8k-l4 (Aurora Lite) */
        { aac_rx_init, "aacraid",  "ADAPTEC ", "ASR-4000SAS     ", 1 }, /* ASR-4000SAS (BlackBird & AvonPark) */
        { aac_rx_init, "aacraid",  "ADAPTEC ", "ASR-4800SAS     ", 1 }, /* ASR-4800SAS (Marauder-X) */
        { aac_rx_init, "aacraid",  "ADAPTEC ", "ASR-4805SAS     ", 1 }, /* ASR-4805SAS (Marauder-E) */
-       { aac_rx_init, "aacraid",  "ADAPTEC ", "ASR-4810SAS     ", 1 }, /* ASR-4810SAS (Hurricane) */
+       { aac_rkt_init, "aacraid",  "ADAPTEC ", "ASR-4810SAS     ", 1 }, /* ASR-4810SAS (Hurricane) */
 
        { aac_rx_init, "percraid", "DELL    ", "PERC 320/DC     ", 2, AAC_QUIRK_31BIT | AAC_QUIRK_34SG }, /* Perc 320/DC*/
        { aac_sa_init, "aacraid",  "ADAPTEC ", "Adaptec 5400S   ", 4, AAC_QUIRK_34SG }, /* Adaptec 5400S (Mustang)*/
@@ -839,11 +856,12 @@ static int __devinit aac_probe_one(struct pci_dev *pdev,
 
        return 0;
 
-out_deinit:
+ out_deinit:
        kill_proc(aac->thread_pid, SIGKILL, 0);
        wait_for_completion(&aac->aif_completion);
 
        aac_send_shutdown(aac);
+       aac_adapter_disable_int(aac);
        fib_map_free(aac);
        pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr, aac->comm_phys);
        kfree(aac->queues);
@@ -860,6 +878,13 @@ out_deinit:
        return error;
 }
 
+static void aac_shutdown(struct pci_dev *dev)
+{
+       struct Scsi_Host *shost = pci_get_drvdata(dev);
+       struct aac_dev *aac = (struct aac_dev *)shost->hostdata;
+       aac_send_shutdown(aac);
+}
+
 static void __devexit aac_remove_one(struct pci_dev *pdev)
 {
        struct Scsi_Host *shost = pci_get_drvdata(pdev);
@@ -871,6 +896,7 @@ static void __devexit aac_remove_one(struct pci_dev *pdev)
        wait_for_completion(&aac->aif_completion);
 
        aac_send_shutdown(aac);
+       aac_adapter_disable_int(aac);
        fib_map_free(aac);
        pci_free_consistent(aac->pdev, aac->comm_size, aac->comm_addr,
                        aac->comm_phys);
@@ -891,14 +917,15 @@ static struct pci_driver aac_pci_driver = {
        .id_table       = aac_pci_tbl,
        .probe          = aac_probe_one,
        .remove         = __devexit_p(aac_remove_one),
+       .shutdown       = aac_shutdown,
 };
 
 static int __init aac_init(void)
 {
        int error;
        
-       printk(KERN_INFO "Red Hat/Adaptec aacraid driver (%s %s)\n",
-                       AAC_DRIVER_VERSION, AAC_DRIVER_BUILD_DATE);
+       printk(KERN_INFO "Adaptec %s driver (%s)\n",
+         AAC_DRIVERNAME, aac_driver_version);
 
        error = pci_module_init(&aac_pci_driver);
        if (error)
@@ -909,6 +936,7 @@ static int __init aac_init(void)
                printk(KERN_WARNING
                       "aacraid: unable to register \"aac\" device.\n");
        }
+
        return 0;
 }
 
index 7d68b7825137506b07af8a83e52f4302f11e31ff..557287a0b80bdbfde17a349efb9aa7666cd7d7ca 100644 (file)
@@ -87,6 +87,16 @@ static irqreturn_t aac_rkt_intr(int irq, void *dev_id, struct pt_regs *regs)
        return IRQ_NONE;
 }
 
+/**
+ *     aac_rkt_disable_interrupt       -       Disable interrupts
+ *     @dev: Adapter
+ */
+
+static void aac_rkt_disable_interrupt(struct aac_dev *dev)
+{
+       rkt_writeb(dev, MUnit.OIMR, dev->OIMR = 0xff);
+}
+
 /**
  *     rkt_sync_cmd    -       send a command and wait
  *     @dev: Adapter
@@ -412,10 +422,19 @@ int aac_rkt_init(struct aac_dev *dev)
         *      Fill in the function dispatch table.
         */
        dev->a_ops.adapter_interrupt = aac_rkt_interrupt_adapter;
+       dev->a_ops.adapter_disable_int = aac_rkt_disable_interrupt;
        dev->a_ops.adapter_notify = aac_rkt_notify_adapter;
        dev->a_ops.adapter_sync_cmd = rkt_sync_cmd;
        dev->a_ops.adapter_check_health = aac_rkt_check_health;
 
+       /*
+        *      First clear out all interrupts.  Then enable the one's that we
+        *      can handle.
+        */
+       rkt_writeb(dev, MUnit.OIMR, 0xff);
+       rkt_writel(dev, MUnit.ODR, 0xffffffff);
+       rkt_writeb(dev, MUnit.OIMR, dev->OIMR = 0xfb);
+
        if (aac_init_adapter(dev) == NULL)
                goto error_irq;
        /*
@@ -438,6 +457,7 @@ error_kfree:
        kfree(dev->queues);
 
 error_irq:
+       rkt_writeb(dev, MUnit.OIMR, dev->OIMR = 0xff);
        free_irq(dev->scsi_host_ptr->irq, (void *)dev);
 
 error_iounmap:
index 1ff25f49fadace646d6a1c19073527a222087f61..a8459faf87caf88facabe65a6dee10982ac481f6 100644 (file)
@@ -87,6 +87,16 @@ static irqreturn_t aac_rx_intr(int irq, void *dev_id, struct pt_regs *regs)
        return IRQ_NONE;
 }
 
+/**
+ *     aac_rx_disable_interrupt        -       Disable interrupts
+ *     @dev: Adapter
+ */
+
+static void aac_rx_disable_interrupt(struct aac_dev *dev)
+{
+       rx_writeb(dev, MUnit.OIMR, dev->OIMR = 0xff);
+}
+
 /**
  *     rx_sync_cmd     -       send a command and wait
  *     @dev: Adapter
@@ -412,10 +422,19 @@ int aac_rx_init(struct aac_dev *dev)
         *      Fill in the function dispatch table.
         */
        dev->a_ops.adapter_interrupt = aac_rx_interrupt_adapter;
+       dev->a_ops.adapter_disable_int = aac_rx_disable_interrupt;
        dev->a_ops.adapter_notify = aac_rx_notify_adapter;
        dev->a_ops.adapter_sync_cmd = rx_sync_cmd;
        dev->a_ops.adapter_check_health = aac_rx_check_health;
 
+       /*
+        *      First clear out all interrupts.  Then enable the one's that we
+        *      can handle.
+        */
+       rx_writeb(dev, MUnit.OIMR, 0xff);
+       rx_writel(dev, MUnit.ODR, 0xffffffff);
+       rx_writeb(dev, MUnit.OIMR, dev->OIMR = 0xfb);
+
        if (aac_init_adapter(dev) == NULL)
                goto error_irq;
        /*
@@ -438,6 +457,7 @@ error_kfree:
        kfree(dev->queues);
 
 error_irq:
+       rx_writeb(dev, MUnit.OIMR, dev->OIMR = 0xff);
        free_irq(dev->scsi_host_ptr->irq, (void *)dev);
 
 error_iounmap:
index 0680249ab861600702d536bf92309e65ac23002d..3900abc5850d35e9d731f1c19840c912f63c98fe 100644 (file)
@@ -81,6 +81,16 @@ static irqreturn_t aac_sa_intr(int irq, void *dev_id, struct pt_regs *regs)
        return IRQ_NONE;
 }
 
+/**
+ *     aac_sa_disable_interrupt        -       disable interrupt
+ *     @dev: Which adapter to enable.
+ */
+
+static void aac_sa_disable_interrupt (struct aac_dev *dev)
+{
+       sa_writew(dev, SaDbCSR.PRISETIRQMASK, 0xffff);
+}
+
 /**
  *     aac_sa_notify_adapter           -       handle adapter notification
  *     @dev:   Adapter that notification is for
@@ -214,9 +224,8 @@ static int sa_sync_cmd(struct aac_dev *dev, u32 command,
  
 static void aac_sa_interrupt_adapter (struct aac_dev *dev)
 {
-       u32 ret;
        sa_sync_cmd(dev, BREAKPOINT_REQUEST, 0, 0, 0, 0, 0, 0,
-                       &ret, NULL, NULL, NULL, NULL);
+                       NULL, NULL, NULL, NULL, NULL);
 }
 
 /**
@@ -352,10 +361,18 @@ int aac_sa_init(struct aac_dev *dev)
         */
 
        dev->a_ops.adapter_interrupt = aac_sa_interrupt_adapter;
+       dev->a_ops.adapter_disable_int = aac_sa_disable_interrupt;
        dev->a_ops.adapter_notify = aac_sa_notify_adapter;
        dev->a_ops.adapter_sync_cmd = sa_sync_cmd;
        dev->a_ops.adapter_check_health = aac_sa_check_health;
 
+       /*
+        *      First clear out all interrupts.  Then enable the one's that 
+        *      we can handle.
+        */
+       sa_writew(dev, SaDbCSR.PRISETIRQMASK, 0xffff);
+       sa_writew(dev, SaDbCSR.PRICLEARIRQMASK, (PrintfReady | DOORBELL_1 | 
+                               DOORBELL_2 | DOORBELL_3 | DOORBELL_4));
 
        if(aac_init_adapter(dev) == NULL)
                goto error_irq;
@@ -381,6 +398,7 @@ error_kfree:
        kfree(dev->queues);
 
 error_irq:
+       sa_writew(dev, SaDbCSR.PRISETIRQMASK, 0xffff);
        free_irq(dev->scsi_host_ptr->irq, (void *)dev);
 
 error_iounmap:
index 0fb93363eb2236ba53f701972d317a23b334e97b..37ec5411e325578ff572429e4868efa44884789d 100644 (file)
@@ -9200,8 +9200,8 @@ asc_prt_scsi_cmnd(struct scsi_cmnd *s)
         (unsigned) s->serial_number, s->retries, s->allowed);
 
     printk(
-" timeout_per_command %d, timeout_total %d, timeout %d\n",
-        s->timeout_per_command, s->timeout_total, s->timeout);
+" timeout_per_command %d\n",
+        s->timeout_per_command);
 
     printk(
 " scsi_done 0x%lx, done 0x%lx, host_scribble 0x%lx, result 0x%x\n",
index 31065261de8e2c0b7656b86cef7e183b6aa76488..320df6cd3defd6195ffd3eb759ac11906b377586 100644 (file)
@@ -250,7 +250,7 @@ static struct ata_port_info ahci_port_info[] = {
                .host_flags     = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
                                  ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO |
                                  ATA_FLAG_PIO_DMA,
-               .pio_mask       = 0x03, /* pio3-4 */
+               .pio_mask       = 0x1f, /* pio0-4 */
                .udma_mask      = 0x7f, /* udma0-6 ; FIXME */
                .port_ops       = &ahci_ops,
        },
index c2523a30a7f5a7485ad710604bd2d0f00703de33..69ed77fcb71f9076213761b2a18025a16408d406 100644 (file)
@@ -5,6 +5,7 @@
 config SCSI_AIC79XX
        tristate "Adaptec AIC79xx U320 support"
        depends on PCI && SCSI
+       select SCSI_SPI_ATTRS
        help
        This driver supports all of Adaptec's Ultra 320 PCI-X
        based SCSI controllers.
index 00f3bd1e181e7bba9514583f4b2e45b8ab752a03..527efd36f5c18c2a373872e25840fadc178b855c 100644 (file)
@@ -126,7 +126,6 @@ aic7770_find_device(uint32_t id)
 int
 aic7770_config(struct ahc_softc *ahc, struct aic7770_identity *entry, u_int io)
 {
-       u_long  l;
        int     error;
        int     have_seeprom;
        u_int   hostconf;
index fd4b2f3eb0c2098df7dcf3fe81a8fd8278df1699..653fb0b42aeac3283a0796336588560b81c5a173 100644 (file)
@@ -1247,9 +1247,6 @@ struct ahd_softc {
        uint16_t                  user_tagenable;/* Tagged Queuing allowed */
 };
 
-TAILQ_HEAD(ahd_softc_tailq, ahd_softc);
-extern struct ahd_softc_tailq ahd_tailq;
-
 /*************************** IO Cell Configuration ****************************/
 #define        AHD_PRECOMP_SLEW_INDEX                                          \
     (AHD_ANNEXCOL_PRECOMP_SLEW - AHD_ANNEXCOL_PER_DEV0)
@@ -1374,8 +1371,6 @@ void                       ahd_enable_coalescing(struct ahd_softc *ahd,
 void                    ahd_pause_and_flushwork(struct ahd_softc *ahd);
 int                     ahd_suspend(struct ahd_softc *ahd); 
 int                     ahd_resume(struct ahd_softc *ahd);
-void                    ahd_softc_insert(struct ahd_softc *);
-struct ahd_softc       *ahd_find_softc(struct ahd_softc *ahd);
 void                    ahd_set_unit(struct ahd_softc *, int);
 void                    ahd_set_name(struct ahd_softc *, char *);
 struct scb             *ahd_get_scb(struct ahd_softc *ahd, u_int col_idx);
@@ -1524,7 +1519,6 @@ void                      ahd_print_scb(struct scb *scb);
 void                   ahd_print_devinfo(struct ahd_softc *ahd,
                                          struct ahd_devinfo *devinfo);
 void                   ahd_dump_sglist(struct scb *scb);
-void                   ahd_dump_all_cards_state(void);
 void                   ahd_dump_card_state(struct ahd_softc *ahd);
 int                    ahd_print_register(ahd_reg_parse_entry_t *table,
                                           u_int num_entries,
index 137fb1a37dd172c3f64bade86779689fdf3639fc..4e8f00df978dab2ad226e1566f118b7108165081 100644 (file)
@@ -52,8 +52,6 @@
 #include <dev/aic7xxx/aicasm/aicasm_insformat.h>
 #endif
 
-/******************************** Globals *************************************/
-struct ahd_softc_tailq ahd_tailq = TAILQ_HEAD_INITIALIZER(ahd_tailq);
 
 /***************************** Lookup Tables **********************************/
 char *ahd_chip_names[] =
@@ -5179,74 +5177,6 @@ ahd_softc_init(struct ahd_softc *ahd)
        return (0);
 }
 
-void
-ahd_softc_insert(struct ahd_softc *ahd)
-{
-       struct ahd_softc *list_ahd;
-
-#if AHD_PCI_CONFIG > 0
-       /*
-        * Second Function PCI devices need to inherit some
-        * settings from function 0.
-        */
-       if ((ahd->features & AHD_MULTI_FUNC) != 0) {
-               TAILQ_FOREACH(list_ahd, &ahd_tailq, links) {
-                       ahd_dev_softc_t list_pci;
-                       ahd_dev_softc_t pci;
-
-                       list_pci = list_ahd->dev_softc;
-                       pci = ahd->dev_softc;
-                       if (ahd_get_pci_slot(list_pci) == ahd_get_pci_slot(pci)
-                        && ahd_get_pci_bus(list_pci) == ahd_get_pci_bus(pci)) {
-                               struct ahd_softc *master;
-                               struct ahd_softc *slave;
-
-                               if (ahd_get_pci_function(list_pci) == 0) {
-                                       master = list_ahd;
-                                       slave = ahd;
-                               } else {
-                                       master = ahd;
-                                       slave = list_ahd;
-                               }
-                               slave->flags &= ~AHD_BIOS_ENABLED; 
-                               slave->flags |=
-                                   master->flags & AHD_BIOS_ENABLED;
-                               break;
-                       }
-               }
-       }
-#endif
-
-       /*
-        * Insertion sort into our list of softcs.
-        */
-       list_ahd = TAILQ_FIRST(&ahd_tailq);
-       while (list_ahd != NULL
-           && ahd_softc_comp(ahd, list_ahd) <= 0)
-               list_ahd = TAILQ_NEXT(list_ahd, links);
-       if (list_ahd != NULL)
-               TAILQ_INSERT_BEFORE(list_ahd, ahd, links);
-       else
-               TAILQ_INSERT_TAIL(&ahd_tailq, ahd, links);
-       ahd->init_level++;
-}
-
-/*
- * Verify that the passed in softc pointer is for a
- * controller that is still configured.
- */
-struct ahd_softc *
-ahd_find_softc(struct ahd_softc *ahd)
-{
-       struct ahd_softc *list_ahd;
-
-       TAILQ_FOREACH(list_ahd, &ahd_tailq, links) {
-               if (list_ahd == ahd)
-                       return (ahd);
-       }
-       return (NULL);
-}
-
 void
 ahd_set_unit(struct ahd_softc *ahd, int unit)
 {
@@ -7902,18 +7832,10 @@ ahd_reset_channel(struct ahd_softc *ahd, char channel, int initiate_reset)
 static void
 ahd_reset_poll(void *arg)
 {
-       struct  ahd_softc *ahd;
+       struct  ahd_softc *ahd = arg;
        u_int   scsiseq1;
-       u_long  l;
        u_long  s;
        
-       ahd_list_lock(&l);
-       ahd = ahd_find_softc((struct ahd_softc *)arg);
-       if (ahd == NULL) {
-               printf("ahd_reset_poll: Instance %p no longer exists\n", arg);
-               ahd_list_unlock(&l);
-               return;
-       }
        ahd_lock(ahd, &s);
        ahd_pause(ahd);
        ahd_update_modes(ahd);
@@ -7924,7 +7846,6 @@ ahd_reset_poll(void *arg)
                                ahd_reset_poll, ahd);
                ahd_unpause(ahd);
                ahd_unlock(ahd, &s);
-               ahd_list_unlock(&l);
                return;
        }
 
@@ -7936,25 +7857,16 @@ ahd_reset_poll(void *arg)
        ahd->flags &= ~AHD_RESET_POLL_ACTIVE;
        ahd_unlock(ahd, &s);
        ahd_release_simq(ahd);
-       ahd_list_unlock(&l);
 }
 
 /**************************** Statistics Processing ***************************/
 static void
 ahd_stat_timer(void *arg)
 {
-       struct  ahd_softc *ahd;
-       u_long  l;
+       struct  ahd_softc *ahd = arg;
        u_long  s;
        int     enint_coal;
        
-       ahd_list_lock(&l);
-       ahd = ahd_find_softc((struct ahd_softc *)arg);
-       if (ahd == NULL) {
-               printf("ahd_stat_timer: Instance %p no longer exists\n", arg);
-               ahd_list_unlock(&l);
-               return;
-       }
        ahd_lock(ahd, &s);
 
        enint_coal = ahd->hs_mailbox & ENINT_COALESCE;
@@ -7981,7 +7893,6 @@ ahd_stat_timer(void *arg)
        ahd_timer_reset(&ahd->stat_timer, AHD_STAT_UPDATE_US,
                        ahd_stat_timer, ahd);
        ahd_unlock(ahd, &s);
-       ahd_list_unlock(&l);
 }
 
 /****************************** Status Processing *****************************/
@@ -8745,16 +8656,6 @@ sized:
        return (last_probe);
 }
 
-void
-ahd_dump_all_cards_state(void)
-{
-       struct ahd_softc *list_ahd;
-
-       TAILQ_FOREACH(list_ahd, &ahd_tailq, links) {
-               ahd_dump_card_state(list_ahd);
-       }
-}
-
 int
 ahd_print_register(ahd_reg_parse_entry_t *table, u_int num_entries,
                   const char *name, u_int address, u_int value,
@@ -9039,7 +8940,6 @@ ahd_dump_card_state(struct ahd_softc *ahd)
                ahd_outb(ahd, STACK, (ahd->saved_stack[i] >> 8) & 0xFF);
        }
        printf("\n<<<<<<<<<<<<<<<<< Dump Card State Ends >>>>>>>>>>>>>>>>>>\n");
-       ahd_platform_dump_card_state(ahd);
        ahd_restore_modes(ahd, saved_modes);
        if (paused == 0)
                ahd_unpause(ahd);
index 329cb233133958ceddc71107daddda65ec57d3ed..6b6d4e287793acd5b3c044e7f80e7cf4ab7bba5f 100644 (file)
 #include "aic79xx_inline.h"
 #include <scsi/scsicam.h>
 
-/*
- * Include aiclib.c as part of our
- * "module dependencies are hard" work around.
- */
-#include "aiclib.c"
+static struct scsi_transport_template *ahd_linux_transport_template = NULL;
 
 #include <linux/init.h>                /* __setup */
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-#include "sd.h"                        /* For geometry detection */
-#endif
-
 #include <linux/mm.h>          /* For fetching system memory size */
+#include <linux/blkdev.h>              /* For block_size() */
 #include <linux/delay.h>       /* For ssleep/msleep */
 
-/*
- * Lock protecting manipulation of the ahd softc list.
- */
-spinlock_t ahd_list_spinlock;
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-/* For dynamic sglist size calculation. */
-u_int ahd_linux_nseg;
-#endif
-
 /*
  * Bucket size for counting good commands in between bad ones.
  */
@@ -187,71 +169,6 @@ static adapter_tag_info_t aic79xx_tag_info[] =
        {AIC79XX_CONFIGED_TAG_COMMANDS}
 };
 
-/*
- * By default, read streaming is disabled.  In theory,
- * read streaming should enhance performance, but early
- * U320 drive firmware actually performs slower with
- * read streaming enabled.
- */
-#ifdef CONFIG_AIC79XX_ENABLE_RD_STRM
-#define AIC79XX_CONFIGED_RD_STRM 0xFFFF
-#else
-#define AIC79XX_CONFIGED_RD_STRM 0
-#endif
-
-static uint16_t aic79xx_rd_strm_info[] =
-{
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM,
-       AIC79XX_CONFIGED_RD_STRM
-};
-
-/*
- * DV option:
- *
- * positive value = DV Enabled
- * zero                  = DV Disabled
- * negative value = DV Default for adapter type/seeprom
- */
-#ifdef CONFIG_AIC79XX_DV_SETTING
-#define AIC79XX_CONFIGED_DV CONFIG_AIC79XX_DV_SETTING
-#else
-#define AIC79XX_CONFIGED_DV -1
-#endif
-
-static int8_t aic79xx_dv_settings[] =
-{
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV,
-       AIC79XX_CONFIGED_DV
-};
-
 /*
  * The I/O cell on the chip is very configurable in respect to its analog
  * characteristics.  Set the defaults here; they can be overriden with
@@ -374,13 +291,6 @@ static uint32_t aic79xx_pci_parity = ~0;
  */
 uint32_t aic79xx_allow_memio = ~0;
 
-/*
- * aic79xx_detect() has been run, so register all device arrivals
- * immediately with the system rather than deferring to the sorted
- * attachment performed by aic79xx_detect().
- */
-int aic79xx_detect_complete;
-
 /*
  * So that we can set how long each device is given as a selection timeout.
  * The table of values goes like this:
@@ -412,7 +322,7 @@ MODULE_AUTHOR("Maintainer: Justin T. Gibbs <gibbs@scsiguy.com>");
 MODULE_DESCRIPTION("Adaptec Aic790X U320 SCSI Host Bus Adapter driver");
 MODULE_LICENSE("Dual BSD/GPL");
 MODULE_VERSION(AIC79XX_DRIVER_VERSION);
-module_param(aic79xx, charp, 0);
+module_param(aic79xx, charp, 0444);
 MODULE_PARM_DESC(aic79xx,
 "period delimited, options string.\n"
 "      verbose                 Enable verbose/diagnostic logging\n"
@@ -427,8 +337,6 @@ MODULE_PARM_DESC(aic79xx,
 "      reverse_scan            Sort PCI devices highest Bus/Slot to lowest\n"
 "      tag_info:<tag_str>      Set per-target tag depth\n"
 "      global_tag_depth:<int>  Global tag depth for all targets on all buses\n"
-"      rd_strm:<rd_strm_masks> Set per-target read streaming setting.\n"
-"      dv:<dv_settings>        Set per-controller Domain Validation Setting.\n"
 "      slewrate:<slewrate_list>Set the signal slew rate (0-15).\n"
 "      precomp:<pcomp_list>    Set the signal precompensation (0-7).\n"
 "      amplitude:<int>         Set the signal amplitude (0-7).\n"
@@ -441,249 +349,35 @@ MODULE_PARM_DESC(aic79xx,
 "              Shorten the selection timeout to 128ms\n"
 "\n"
 "      options aic79xx 'aic79xx=verbose.tag_info:{{}.{}.{..10}}.seltime:1'\n"
-"\n"
-"      Sample /etc/modprobe.conf line:\n"
-"              Change Read Streaming for Controller's 2 and 3\n"
-"\n"
-"      options aic79xx 'aic79xx=rd_strm:{..0xFFF0.0xC0F0}'");
+"\n");
 
 static void ahd_linux_handle_scsi_status(struct ahd_softc *,
-                                        struct ahd_linux_device *,
+                                        struct scsi_device *,
                                         struct scb *);
 static void ahd_linux_queue_cmd_complete(struct ahd_softc *ahd,
-                                        Scsi_Cmnd *cmd);
-static void ahd_linux_filter_inquiry(struct ahd_softc *ahd,
-                                    struct ahd_devinfo *devinfo);
-static void ahd_linux_dev_timed_unfreeze(u_long arg);
+                                        struct scsi_cmnd *cmd);
 static void ahd_linux_sem_timeout(u_long arg);
+static int  ahd_linux_queue_recovery_cmd(struct scsi_cmnd *cmd, scb_flag flag);
 static void ahd_linux_initialize_scsi_bus(struct ahd_softc *ahd);
-static void ahd_linux_size_nseg(void);
-static void ahd_linux_thread_run_complete_queue(struct ahd_softc *ahd);
-static void ahd_linux_start_dv(struct ahd_softc *ahd);
-static void ahd_linux_dv_timeout(struct scsi_cmnd *cmd);
-static int  ahd_linux_dv_thread(void *data);
-static void ahd_linux_kill_dv_thread(struct ahd_softc *ahd);
-static void ahd_linux_dv_target(struct ahd_softc *ahd, u_int target);
-static void ahd_linux_dv_transition(struct ahd_softc *ahd,
-                                   struct scsi_cmnd *cmd,
-                                   struct ahd_devinfo *devinfo,
-                                   struct ahd_linux_target *targ);
-static void ahd_linux_dv_fill_cmd(struct ahd_softc *ahd,
-                                 struct scsi_cmnd *cmd,
-                                 struct ahd_devinfo *devinfo);
-static void ahd_linux_dv_inq(struct ahd_softc *ahd,
-                            struct scsi_cmnd *cmd,
-                            struct ahd_devinfo *devinfo,
-                            struct ahd_linux_target *targ,
-                            u_int request_length);
-static void ahd_linux_dv_tur(struct ahd_softc *ahd,
-                            struct scsi_cmnd *cmd,
-                            struct ahd_devinfo *devinfo);
-static void ahd_linux_dv_rebd(struct ahd_softc *ahd,
-                             struct scsi_cmnd *cmd,
-                             struct ahd_devinfo *devinfo,
-                             struct ahd_linux_target *targ);
-static void ahd_linux_dv_web(struct ahd_softc *ahd,
-                            struct scsi_cmnd *cmd,
-                            struct ahd_devinfo *devinfo,
-                            struct ahd_linux_target *targ);
-static void ahd_linux_dv_reb(struct ahd_softc *ahd,
-                            struct scsi_cmnd *cmd,
-                            struct ahd_devinfo *devinfo,
-                            struct ahd_linux_target *targ);
-static void ahd_linux_dv_su(struct ahd_softc *ahd,
-                           struct scsi_cmnd *cmd,
-                           struct ahd_devinfo *devinfo,
-                           struct ahd_linux_target *targ);
-static int ahd_linux_fallback(struct ahd_softc *ahd,
-                             struct ahd_devinfo *devinfo);
-static __inline int ahd_linux_dv_fallback(struct ahd_softc *ahd,
-                                         struct ahd_devinfo *devinfo);
-static void ahd_linux_dv_complete(Scsi_Cmnd *cmd);
-static void ahd_linux_generate_dv_pattern(struct ahd_linux_target *targ);
 static u_int ahd_linux_user_tagdepth(struct ahd_softc *ahd,
                                     struct ahd_devinfo *devinfo);
-static u_int ahd_linux_user_dv_setting(struct ahd_softc *ahd);
-static void ahd_linux_setup_user_rd_strm_settings(struct ahd_softc *ahd);
-static void ahd_linux_device_queue_depth(struct ahd_softc *ahd,
-                                        struct ahd_linux_device *dev);
-static struct ahd_linux_target*        ahd_linux_alloc_target(struct ahd_softc*,
-                                                      u_int, u_int);
-static void                    ahd_linux_free_target(struct ahd_softc*,
-                                                     struct ahd_linux_target*);
-static struct ahd_linux_device*        ahd_linux_alloc_device(struct ahd_softc*,
-                                                      struct ahd_linux_target*,
-                                                      u_int);
-static void                    ahd_linux_free_device(struct ahd_softc*,
-                                                     struct ahd_linux_device*);
-static void ahd_linux_run_device_queue(struct ahd_softc*,
-                                      struct ahd_linux_device*);
+static void ahd_linux_device_queue_depth(struct scsi_device *);
+static int ahd_linux_run_command(struct ahd_softc*,
+                                struct ahd_linux_device *,
+                                struct scsi_cmnd *);
 static void ahd_linux_setup_tag_info_global(char *p);
-static aic_option_callback_t ahd_linux_setup_tag_info;
-static aic_option_callback_t ahd_linux_setup_rd_strm_info;
-static aic_option_callback_t ahd_linux_setup_dv;
-static aic_option_callback_t ahd_linux_setup_iocell_info;
-static int ahd_linux_next_unit(void);
-static void ahd_runq_tasklet(unsigned long data);
-static int aic79xx_setup(char *c);
-
-/****************************** Inlines ***************************************/
-static __inline void ahd_schedule_completeq(struct ahd_softc *ahd);
-static __inline void ahd_schedule_runq(struct ahd_softc *ahd);
-static __inline void ahd_setup_runq_tasklet(struct ahd_softc *ahd);
-static __inline void ahd_teardown_runq_tasklet(struct ahd_softc *ahd);
-static __inline struct ahd_linux_device*
-                    ahd_linux_get_device(struct ahd_softc *ahd, u_int channel,
-                                         u_int target, u_int lun, int alloc);
-static struct ahd_cmd *ahd_linux_run_complete_queue(struct ahd_softc *ahd);
-static __inline void ahd_linux_check_device_queue(struct ahd_softc *ahd,
-                                                 struct ahd_linux_device *dev);
-static __inline struct ahd_linux_device *
-                    ahd_linux_next_device_to_run(struct ahd_softc *ahd);
-static __inline void ahd_linux_run_device_queues(struct ahd_softc *ahd);
-static __inline void ahd_linux_unmap_scb(struct ahd_softc*, struct scb*);
-
-static __inline void
-ahd_schedule_completeq(struct ahd_softc *ahd)
-{
-       if ((ahd->platform_data->flags & AHD_RUN_CMPLT_Q_TIMER) == 0) {
-               ahd->platform_data->flags |= AHD_RUN_CMPLT_Q_TIMER;
-               ahd->platform_data->completeq_timer.expires = jiffies;
-               add_timer(&ahd->platform_data->completeq_timer);
-       }
-}
-
-/*
- * Must be called with our lock held.
- */
-static __inline void
-ahd_schedule_runq(struct ahd_softc *ahd)
-{
-       tasklet_schedule(&ahd->platform_data->runq_tasklet);
-}
-
-static __inline
-void ahd_setup_runq_tasklet(struct ahd_softc *ahd)
-{
-       tasklet_init(&ahd->platform_data->runq_tasklet, ahd_runq_tasklet,
-                    (unsigned long)ahd);
-}
-
-static __inline void
-ahd_teardown_runq_tasklet(struct ahd_softc *ahd)
-{
-       tasklet_kill(&ahd->platform_data->runq_tasklet);
-}
-
-static __inline struct ahd_linux_device*
-ahd_linux_get_device(struct ahd_softc *ahd, u_int channel, u_int target,
-                    u_int lun, int alloc)
-{
-       struct ahd_linux_target *targ;
-       struct ahd_linux_device *dev;
-       u_int target_offset;
-
-       target_offset = target;
-       if (channel != 0)
-               target_offset += 8;
-       targ = ahd->platform_data->targets[target_offset];
-       if (targ == NULL) {
-               if (alloc != 0) {
-                       targ = ahd_linux_alloc_target(ahd, channel, target);
-                       if (targ == NULL)
-                               return (NULL);
-               } else
-                       return (NULL);
-       }
-       dev = targ->devices[lun];
-       if (dev == NULL && alloc != 0)
-               dev = ahd_linux_alloc_device(ahd, targ, lun);
-       return (dev);
-}
+static int  aic79xx_setup(char *c);
 
-#define AHD_LINUX_MAX_RETURNED_ERRORS 4
-static struct ahd_cmd *
-ahd_linux_run_complete_queue(struct ahd_softc *ahd)
-{      
-       struct  ahd_cmd *acmd;
-       u_long  done_flags;
-       int     with_errors;
+static int ahd_linux_unit;
 
-       with_errors = 0;
-       ahd_done_lock(ahd, &done_flags);
-       while ((acmd = TAILQ_FIRST(&ahd->platform_data->completeq)) != NULL) {
-               Scsi_Cmnd *cmd;
 
-               if (with_errors > AHD_LINUX_MAX_RETURNED_ERRORS) {
-                       /*
-                        * Linux uses stack recursion to requeue
-                        * commands that need to be retried.  Avoid
-                        * blowing out the stack by "spoon feeding"
-                        * commands that completed with error back
-                        * the operating system in case they are going
-                        * to be retried. "ick"
-                        */
-                       ahd_schedule_completeq(ahd);
-                       break;
-               }
-               TAILQ_REMOVE(&ahd->platform_data->completeq,
-                            acmd, acmd_links.tqe);
-               cmd = &acmd_scsi_cmd(acmd);
-               cmd->host_scribble = NULL;
-               if (ahd_cmd_get_transaction_status(cmd) != DID_OK
-                || (cmd->result & 0xFF) != SCSI_STATUS_OK)
-                       with_errors++;
-
-               cmd->scsi_done(cmd);
-       }
-       ahd_done_unlock(ahd, &done_flags);
-       return (acmd);
-}
-
-static __inline void
-ahd_linux_check_device_queue(struct ahd_softc *ahd,
-                            struct ahd_linux_device *dev)
-{
-       if ((dev->flags & AHD_DEV_FREEZE_TIL_EMPTY) != 0
-        && dev->active == 0) {
-               dev->flags &= ~AHD_DEV_FREEZE_TIL_EMPTY;
-               dev->qfrozen--;
-       }
-
-       if (TAILQ_FIRST(&dev->busyq) == NULL
-        || dev->openings == 0 || dev->qfrozen != 0)
-               return;
-
-       ahd_linux_run_device_queue(ahd, dev);
-}
-
-static __inline struct ahd_linux_device *
-ahd_linux_next_device_to_run(struct ahd_softc *ahd)
-{
-       
-       if ((ahd->flags & AHD_RESOURCE_SHORTAGE) != 0
-        || (ahd->platform_data->qfrozen != 0
-         && AHD_DV_SIMQ_FROZEN(ahd) == 0))
-               return (NULL);
-       return (TAILQ_FIRST(&ahd->platform_data->device_runq));
-}
-
-static __inline void
-ahd_linux_run_device_queues(struct ahd_softc *ahd)
-{
-       struct ahd_linux_device *dev;
-
-       while ((dev = ahd_linux_next_device_to_run(ahd)) != NULL) {
-               TAILQ_REMOVE(&ahd->platform_data->device_runq, dev, links);
-               dev->flags &= ~AHD_DEV_ON_RUN_LIST;
-               ahd_linux_check_device_queue(ahd, dev);
-       }
-}
+/****************************** Inlines ***************************************/
+static __inline void ahd_linux_unmap_scb(struct ahd_softc*, struct scb*);
 
 static __inline void
 ahd_linux_unmap_scb(struct ahd_softc *ahd, struct scb *scb)
 {
-       Scsi_Cmnd *cmd;
+       struct scsi_cmnd *cmd;
        int direction;
 
        cmd = scb->io_ctx;
@@ -705,197 +399,6 @@ ahd_linux_unmap_scb(struct ahd_softc *ahd, struct scb *scb)
 #define BUILD_SCSIID(ahd, cmd)                                         \
        ((((cmd)->device->id << TID_SHIFT) & TID) | (ahd)->our_id)
 
-/************************  Host template entry points *************************/
-static int        ahd_linux_detect(Scsi_Host_Template *);
-static const char *ahd_linux_info(struct Scsi_Host *);
-static int        ahd_linux_queue(Scsi_Cmnd *, void (*)(Scsi_Cmnd *));
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-static int        ahd_linux_slave_alloc(Scsi_Device *);
-static int        ahd_linux_slave_configure(Scsi_Device *);
-static void       ahd_linux_slave_destroy(Scsi_Device *);
-#if defined(__i386__)
-static int        ahd_linux_biosparam(struct scsi_device*,
-                                      struct block_device*, sector_t, int[]);
-#endif
-#else
-static int        ahd_linux_release(struct Scsi_Host *);
-static void       ahd_linux_select_queue_depth(struct Scsi_Host *host,
-                                               Scsi_Device *scsi_devs);
-#if defined(__i386__)
-static int        ahd_linux_biosparam(Disk *, kdev_t, int[]);
-#endif
-#endif
-static int        ahd_linux_bus_reset(Scsi_Cmnd *);
-static int        ahd_linux_dev_reset(Scsi_Cmnd *);
-static int        ahd_linux_abort(Scsi_Cmnd *);
-
-/*
- * Calculate a safe value for AHD_NSEG (as expressed through ahd_linux_nseg).
- *
- * In pre-2.5.X...
- * The midlayer allocates an S/G array dynamically when a command is issued
- * using SCSI malloc.  This array, which is in an OS dependent format that
- * must later be copied to our private S/G list, is sized to house just the
- * number of segments needed for the current transfer.  Since the code that
- * sizes the SCSI malloc pool does not take into consideration fragmentation
- * of the pool, executing transactions numbering just a fraction of our
- * concurrent transaction limit with SG list lengths aproaching AHC_NSEG will
- * quickly depleat the SCSI malloc pool of usable space.  Unfortunately, the
- * mid-layer does not properly handle this scsi malloc failures for the S/G
- * array and the result can be a lockup of the I/O subsystem.  We try to size
- * our S/G list so that it satisfies our drivers allocation requirements in
- * addition to avoiding fragmentation of the SCSI malloc pool.
- */
-static void
-ahd_linux_size_nseg(void)
-{
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       u_int cur_size;
-       u_int best_size;
-
-       /*
-        * The SCSI allocator rounds to the nearest 512 bytes
-        * an cannot allocate across a page boundary.  Our algorithm
-        * is to start at 1K of scsi malloc space per-command and
-        * loop through all factors of the PAGE_SIZE and pick the best.
-        */
-       best_size = 0;
-       for (cur_size = 1024; cur_size <= PAGE_SIZE; cur_size *= 2) {
-               u_int nseg;
-
-               nseg = cur_size / sizeof(struct scatterlist);
-               if (nseg < AHD_LINUX_MIN_NSEG)
-                       continue;
-
-               if (best_size == 0) {
-                       best_size = cur_size;
-                       ahd_linux_nseg = nseg;
-               } else {
-                       u_int best_rem;
-                       u_int cur_rem;
-
-                       /*
-                        * Compare the traits of the current "best_size"
-                        * with the current size to determine if the
-                        * current size is a better size.
-                        */
-                       best_rem = best_size % sizeof(struct scatterlist);
-                       cur_rem = cur_size % sizeof(struct scatterlist);
-                       if (cur_rem < best_rem) {
-                               best_size = cur_size;
-                               ahd_linux_nseg = nseg;
-                       }
-               }
-       }
-#endif
-}
-
-/*
- * Try to detect an Adaptec 79XX controller.
- */
-static int
-ahd_linux_detect(Scsi_Host_Template *template)
-{
-       struct  ahd_softc *ahd;
-       int     found;
-       int     error = 0;
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       /*
-        * It is a bug that the upper layer takes
-        * this lock just prior to calling us.
-        */
-       spin_unlock_irq(&io_request_lock);
-#endif
-
-       /*
-        * Sanity checking of Linux SCSI data structures so
-        * that some of our hacks^H^H^H^H^Hassumptions aren't
-        * violated.
-        */
-       if (offsetof(struct ahd_cmd_internal, end)
-         > offsetof(struct scsi_cmnd, host_scribble)) {
-               printf("ahd_linux_detect: SCSI data structures changed.\n");
-               printf("ahd_linux_detect: Unable to attach\n");
-               return (0);
-       }
-       /*
-        * Determine an appropriate size for our Scatter Gatther lists.
-        */
-       ahd_linux_size_nseg();
-#ifdef MODULE
-       /*
-        * If we've been passed any parameters, process them now.
-        */
-       if (aic79xx)
-               aic79xx_setup(aic79xx);
-#endif
-
-       template->proc_name = "aic79xx";
-
-       /*
-        * Initialize our softc list lock prior to
-        * probing for any adapters.
-        */
-       ahd_list_lockinit();
-
-#ifdef CONFIG_PCI
-       error = ahd_linux_pci_init();
-       if (error)
-               return error;
-#endif
-
-       /*
-        * Register with the SCSI layer all
-        * controllers we've found.
-        */
-       found = 0;
-       TAILQ_FOREACH(ahd, &ahd_tailq, links) {
-
-               if (ahd_linux_register_host(ahd, template) == 0)
-                       found++;
-       }
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       spin_lock_irq(&io_request_lock);
-#endif
-       aic79xx_detect_complete++;
-       return 0;
-}
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-/*
- * Free the passed in Scsi_Host memory structures prior to unloading the
- * module.
- */
-static int
-ahd_linux_release(struct Scsi_Host * host)
-{
-       struct ahd_softc *ahd;
-       u_long l;
-
-       ahd_list_lock(&l);
-       if (host != NULL) {
-
-               /*
-                * We should be able to just perform
-                * the free directly, but check our
-                * list for extra sanity.
-                */
-               ahd = ahd_find_softc(*(struct ahd_softc **)host->hostdata);
-               if (ahd != NULL) {
-                       u_long s;
-
-                       ahd_lock(ahd, &s);
-                       ahd_intr_enable(ahd, FALSE);
-                       ahd_unlock(ahd, &s);
-                       ahd_free(ahd);
-               }
-       }
-       ahd_list_unlock(&l);
-       return (0);
-}
-#endif
-
 /*
  * Return a string describing the driver.
  */
@@ -928,220 +431,177 @@ ahd_linux_info(struct Scsi_Host *host)
  * Queue an SCB to the controller.
  */
 static int
-ahd_linux_queue(Scsi_Cmnd * cmd, void (*scsi_done) (Scsi_Cmnd *))
+ahd_linux_queue(struct scsi_cmnd * cmd, void (*scsi_done) (struct scsi_cmnd *))
 {
        struct   ahd_softc *ahd;
-       struct   ahd_linux_device *dev;
-       u_long   flags;
+       struct   ahd_linux_device *dev = scsi_transport_device_data(cmd->device);
 
        ahd = *(struct ahd_softc **)cmd->device->host->hostdata;
 
-       /*
-        * Save the callback on completion function.
-        */
-       cmd->scsi_done = scsi_done;
-
-       ahd_midlayer_entrypoint_lock(ahd, &flags);
-
        /*
         * Close the race of a command that was in the process of
         * being queued to us just as our simq was frozen.  Let
         * DV commands through so long as we are only frozen to
         * perform DV.
         */
-       if (ahd->platform_data->qfrozen != 0
-        && AHD_DV_CMD(cmd) == 0) {
-
-               ahd_cmd_set_transaction_status(cmd, CAM_REQUEUE_REQ);
-               ahd_linux_queue_cmd_complete(ahd, cmd);
-               ahd_schedule_completeq(ahd);
-               ahd_midlayer_entrypoint_unlock(ahd, &flags);
-               return (0);
-       }
-       dev = ahd_linux_get_device(ahd, cmd->device->channel,
-                                  cmd->device->id, cmd->device->lun,
-                                  /*alloc*/TRUE);
-       if (dev == NULL) {
-               ahd_cmd_set_transaction_status(cmd, CAM_RESRC_UNAVAIL);
-               ahd_linux_queue_cmd_complete(ahd, cmd);
-               ahd_schedule_completeq(ahd);
-               ahd_midlayer_entrypoint_unlock(ahd, &flags);
-               printf("%s: aic79xx_linux_queue - Unable to allocate device!\n",
-                      ahd_name(ahd));
-               return (0);
+       if (ahd->platform_data->qfrozen != 0) {
+               printf("%s: queue frozen\n", ahd_name(ahd));
+
+               return SCSI_MLQUEUE_HOST_BUSY;
        }
-       if (cmd->cmd_len > MAX_CDB_LEN)
-               return (-EINVAL);
+
+       /*
+        * Save the callback on completion function.
+        */
+       cmd->scsi_done = scsi_done;
+
        cmd->result = CAM_REQ_INPROG << 16;
-       TAILQ_INSERT_TAIL(&dev->busyq, (struct ahd_cmd *)cmd, acmd_links.tqe);
-       if ((dev->flags & AHD_DEV_ON_RUN_LIST) == 0) {
-               TAILQ_INSERT_TAIL(&ahd->platform_data->device_runq, dev, links);
-               dev->flags |= AHD_DEV_ON_RUN_LIST;
-               ahd_linux_run_device_queues(ahd);
-       }
-       ahd_midlayer_entrypoint_unlock(ahd, &flags);
-       return (0);
+
+       return ahd_linux_run_command(ahd, dev, cmd);
 }
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-static int
-ahd_linux_slave_alloc(Scsi_Device *device)
+static inline struct scsi_target **
+ahd_linux_target_in_softc(struct scsi_target *starget)
 {
-       struct  ahd_softc *ahd;
+       struct  ahd_softc *ahd =
+               *((struct ahd_softc **)dev_to_shost(&starget->dev)->hostdata);
+       unsigned int target_offset;
 
-       ahd = *((struct ahd_softc **)device->host->hostdata);
-       if (bootverbose)
-               printf("%s: Slave Alloc %d\n", ahd_name(ahd), device->id);
-       return (0);
+       target_offset = starget->id;
+       if (starget->channel != 0)
+               target_offset += 8;
+
+       return &ahd->platform_data->starget[target_offset];
 }
 
 static int
-ahd_linux_slave_configure(Scsi_Device *device)
+ahd_linux_target_alloc(struct scsi_target *starget)
 {
-       struct  ahd_softc *ahd;
-       struct  ahd_linux_device *dev;
-       u_long  flags;
+       struct  ahd_softc *ahd =
+               *((struct ahd_softc **)dev_to_shost(&starget->dev)->hostdata);
+       unsigned long flags;
+       struct scsi_target **ahd_targp = ahd_linux_target_in_softc(starget);
+       struct ahd_linux_target *targ = scsi_transport_target_data(starget);
+       struct ahd_devinfo devinfo;
+       struct ahd_initiator_tinfo *tinfo;
+       struct ahd_tmode_tstate *tstate;
+       char channel = starget->channel + 'A';
 
-       ahd = *((struct ahd_softc **)device->host->hostdata);
-       if (bootverbose)
-               printf("%s: Slave Configure %d\n", ahd_name(ahd), device->id);
-       ahd_midlayer_entrypoint_lock(ahd, &flags);
-       /*
-        * Since Linux has attached to the device, configure
-        * it so we don't free and allocate the device
-        * structure on every command.
-        */
-       dev = ahd_linux_get_device(ahd, device->channel,
-                                  device->id, device->lun,
-                                  /*alloc*/TRUE);
-       if (dev != NULL) {
-               dev->flags &= ~AHD_DEV_UNCONFIGURED;
-               dev->flags |= AHD_DEV_SLAVE_CONFIGURED;
-               dev->scsi_device = device;
-               ahd_linux_device_queue_depth(ahd, dev);
-       }
-       ahd_midlayer_entrypoint_unlock(ahd, &flags);
-       return (0);
+       ahd_lock(ahd, &flags);
+
+       BUG_ON(*ahd_targp != NULL);
+
+       *ahd_targp = starget;
+       memset(targ, 0, sizeof(*targ));
+
+       tinfo = ahd_fetch_transinfo(ahd, channel, ahd->our_id,
+                                   starget->id, &tstate);
+       ahd_compile_devinfo(&devinfo, ahd->our_id, starget->id,
+                           CAM_LUN_WILDCARD, channel,
+                           ROLE_INITIATOR);
+       spi_min_period(starget) = AHD_SYNCRATE_MAX; /* We can do U320 */
+       if ((ahd->bugs & AHD_PACED_NEGTABLE_BUG) != 0)
+               spi_max_offset(starget) = MAX_OFFSET_PACED_BUG;
+       else
+               spi_max_offset(starget) = MAX_OFFSET_PACED;
+       spi_max_width(starget) = ahd->features & AHD_WIDE;
+
+       ahd_set_syncrate(ahd, &devinfo, 0, 0, 0,
+                        AHD_TRANS_GOAL, /*paused*/FALSE);
+       ahd_set_width(ahd, &devinfo, MSG_EXT_WDTR_BUS_8_BIT,
+                     AHD_TRANS_GOAL, /*paused*/FALSE);
+       ahd_unlock(ahd, &flags);
+
+       return 0;
 }
 
 static void
-ahd_linux_slave_destroy(Scsi_Device *device)
+ahd_linux_target_destroy(struct scsi_target *starget)
 {
-       struct  ahd_softc *ahd;
-       struct  ahd_linux_device *dev;
-       u_long  flags;
+       struct scsi_target **ahd_targp = ahd_linux_target_in_softc(starget);
+
+       *ahd_targp = NULL;
+}
+
+static int
+ahd_linux_slave_alloc(struct scsi_device *sdev)
+{
+       struct  ahd_softc *ahd =
+               *((struct ahd_softc **)sdev->host->hostdata);
+       struct scsi_target *starget = sdev->sdev_target;
+       struct ahd_linux_target *targ = scsi_transport_target_data(starget);
+       struct ahd_linux_device *dev;
 
-       ahd = *((struct ahd_softc **)device->host->hostdata);
        if (bootverbose)
-               printf("%s: Slave Destroy %d\n", ahd_name(ahd), device->id);
-       ahd_midlayer_entrypoint_lock(ahd, &flags);
-       dev = ahd_linux_get_device(ahd, device->channel,
-                                  device->id, device->lun,
-                                          /*alloc*/FALSE);
+               printf("%s: Slave Alloc %d\n", ahd_name(ahd), sdev->id);
+
+       BUG_ON(targ->sdev[sdev->lun] != NULL);
+
+       dev = scsi_transport_device_data(sdev);
+       memset(dev, 0, sizeof(*dev));
 
        /*
-        * Filter out "silly" deletions of real devices by only
-        * deleting devices that have had slave_configure()
-        * called on them.  All other devices that have not
-        * been configured will automatically be deleted by
-        * the refcounting process.
+        * We start out life using untagged
+        * transactions of which we allow one.
         */
-       if (dev != NULL
-        && (dev->flags & AHD_DEV_SLAVE_CONFIGURED) != 0) {
-               dev->flags |= AHD_DEV_UNCONFIGURED;
-               if (TAILQ_EMPTY(&dev->busyq)
-                && dev->active == 0
-                && (dev->flags & AHD_DEV_TIMER_ACTIVE) == 0)
-                       ahd_linux_free_device(ahd, dev);
-       }
-       ahd_midlayer_entrypoint_unlock(ahd, &flags);
+       dev->openings = 1;
+
+       /*
+        * Set maxtags to 0.  This will be changed if we
+        * later determine that we are dealing with
+        * a tagged queuing capable device.
+        */
+       dev->maxtags = 0;
+       
+       targ->sdev[sdev->lun] = sdev;
+
+       return (0);
 }
-#else
-/*
- * Sets the queue depth for each SCSI device hanging
- * off the input host adapter.
- */
-static void
-ahd_linux_select_queue_depth(struct Scsi_Host * host,
-                            Scsi_Device * scsi_devs)
+
+static int
+ahd_linux_slave_configure(struct scsi_device *sdev)
 {
-       Scsi_Device *device;
-       Scsi_Device *ldev;
        struct  ahd_softc *ahd;
-       u_long  flags;
 
-       ahd = *((struct ahd_softc **)host->hostdata);
-       ahd_lock(ahd, &flags);
-       for (device = scsi_devs; device != NULL; device = device->next) {
+       ahd = *((struct ahd_softc **)sdev->host->hostdata);
+       if (bootverbose)
+               printf("%s: Slave Configure %d\n", ahd_name(ahd), sdev->id);
 
-               /*
-                * Watch out for duplicate devices.  This works around
-                * some quirks in how the SCSI scanning code does its
-                * device management.
-                */
-               for (ldev = scsi_devs; ldev != device; ldev = ldev->next) {
-                       if (ldev->host == device->host
-                        && ldev->channel == device->channel
-                        && ldev->id == device->id
-                        && ldev->lun == device->lun)
-                               break;
-               }
-               /* Skip duplicate. */
-               if (ldev != device)
-                       continue;
+       ahd_linux_device_queue_depth(sdev);
 
-               if (device->host == host) {
-                       struct   ahd_linux_device *dev;
+       /* Initial Domain Validation */
+       if (!spi_initial_dv(sdev->sdev_target))
+               spi_dv_device(sdev);
+
+       return 0;
+}
+
+static void
+ahd_linux_slave_destroy(struct scsi_device *sdev)
+{
+       struct  ahd_softc *ahd;
+       struct  ahd_linux_device *dev = scsi_transport_device_data(sdev);
+       struct  ahd_linux_target *targ = scsi_transport_target_data(sdev->sdev_target);
+
+       ahd = *((struct ahd_softc **)sdev->host->hostdata);
+       if (bootverbose)
+               printf("%s: Slave Destroy %d\n", ahd_name(ahd), sdev->id);
+
+       BUG_ON(dev->active);
+
+       targ->sdev[sdev->lun] = NULL;
 
-                       /*
-                        * Since Linux has attached to the device, configure
-                        * it so we don't free and allocate the device
-                        * structure on every command.
-                        */
-                       dev = ahd_linux_get_device(ahd, device->channel,
-                                                  device->id, device->lun,
-                                                  /*alloc*/TRUE);
-                       if (dev != NULL) {
-                               dev->flags &= ~AHD_DEV_UNCONFIGURED;
-                               dev->scsi_device = device;
-                               ahd_linux_device_queue_depth(ahd, dev);
-                               device->queue_depth = dev->openings
-                                                   + dev->active;
-                               if ((dev->flags & (AHD_DEV_Q_BASIC
-                                               | AHD_DEV_Q_TAGGED)) == 0) {
-                                       /*
-                                        * We allow the OS to queue 2 untagged
-                                        * transactions to us at any time even
-                                        * though we can only execute them
-                                        * serially on the controller/device.
-                                        * This should remove some latency.
-                                        */
-                                       device->queue_depth = 2;
-                               }
-                       }
-               }
-       }
-       ahd_unlock(ahd, &flags);
 }
-#endif
 
 #if defined(__i386__)
 /*
  * Return the disk geometry for the given SCSI device.
  */
 static int
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
 ahd_linux_biosparam(struct scsi_device *sdev, struct block_device *bdev,
                    sector_t capacity, int geom[])
 {
        uint8_t *bh;
-#else
-ahd_linux_biosparam(Disk *disk, kdev_t dev, int geom[])
-{
-       struct  scsi_device *sdev = disk->device;
-       u_long  capacity = disk->capacity;
-       struct  buffer_head *bh;
-#endif
        int      heads;
        int      sectors;
        int      cylinders;
@@ -1151,22 +611,11 @@ ahd_linux_biosparam(Disk *disk, kdev_t dev, int geom[])
 
        ahd = *((struct ahd_softc **)sdev->host->hostdata);
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
        bh = scsi_bios_ptable(bdev);
-#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,17)
-       bh = bread(MKDEV(MAJOR(dev), MINOR(dev) & ~0xf), 0, block_size(dev));
-#else
-       bh = bread(MKDEV(MAJOR(dev), MINOR(dev) & ~0xf), 0, 1024);
-#endif
-
        if (bh) {
                ret = scsi_partsize(bh, capacity,
                                    &geom[2], &geom[0], &geom[1]);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
                kfree(bh);
-#else
-               brelse(bh);
-#endif
                if (ret != -1)
                        return (ret);
        }
@@ -1194,2581 +643,727 @@ ahd_linux_biosparam(Disk *disk, kdev_t dev, int geom[])
  * Abort the current SCSI command(s).
  */
 static int
-ahd_linux_abort(Scsi_Cmnd *cmd)
+ahd_linux_abort(struct scsi_cmnd *cmd)
+{
+       int error;
+
+       error = ahd_linux_queue_recovery_cmd(cmd, SCB_ABORT);
+       if (error != 0)
+               printf("aic79xx_abort returns 0x%x\n", error);
+       return error;
+}
+
+/*
+ * Attempt to send a target reset message to the device that timed out.
+ */
+static int
+ahd_linux_dev_reset(struct scsi_cmnd *cmd)
+{
+       int error;
+
+       error = ahd_linux_queue_recovery_cmd(cmd, SCB_DEVICE_RESET);
+       if (error != 0)
+               printf("aic79xx_dev_reset returns 0x%x\n", error);
+       return error;
+}
+
+/*
+ * Reset the SCSI bus.
+ */
+static int
+ahd_linux_bus_reset(struct scsi_cmnd *cmd)
 {
        struct ahd_softc *ahd;
-       struct ahd_cmd *acmd;
-       struct ahd_cmd *list_acmd;
-       struct ahd_linux_device *dev;
-       struct scb *pending_scb;
        u_long s;
-       u_int  saved_scbptr;
-       u_int  active_scbptr;
-       u_int  last_phase;
-       u_int  cdb_byte;
-       int    retval;
-       int    was_paused;
-       int    paused;
-       int    wait;
-       int    disconnected;
-       ahd_mode_state saved_modes;
+       int    found;
 
-       pending_scb = NULL;
-       paused = FALSE;
-       wait = FALSE;
        ahd = *(struct ahd_softc **)cmd->device->host->hostdata;
-       acmd = (struct ahd_cmd *)cmd;
-
-       printf("%s:%d:%d:%d: Attempting to abort cmd %p:",
-              ahd_name(ahd), cmd->device->channel, cmd->device->id,
-              cmd->device->lun, cmd);
-       for (cdb_byte = 0; cdb_byte < cmd->cmd_len; cdb_byte++)
-               printf(" 0x%x", cmd->cmnd[cdb_byte]);
-       printf("\n");
+#ifdef AHD_DEBUG
+       if ((ahd_debug & AHD_SHOW_RECOVERY) != 0)
+               printf("%s: Bus reset called for cmd %p\n",
+                      ahd_name(ahd), cmd);
+#endif
+       ahd_lock(ahd, &s);
+       found = ahd_reset_channel(ahd, cmd->device->channel + 'A',
+                                 /*initiate reset*/TRUE);
+       ahd_unlock(ahd, &s);
 
-       /*
-        * In all versions of Linux, we have to work around
-        * a major flaw in how the mid-layer is locked down
-        * if we are to sleep successfully in our error handler
-        * while allowing our interrupt handler to run.  Since
-        * the midlayer acquires either the io_request_lock or
-        * our lock prior to calling us, we must use the
-        * spin_unlock_irq() method for unlocking our lock.
-        * This will force interrupts to be enabled on the
-        * current CPU.  Since the EH thread should not have
-        * been running with CPU interrupts disabled other than
-        * by acquiring either the io_request_lock or our own
-        * lock, this *should* be safe.
-        */
-       ahd_midlayer_entrypoint_lock(ahd, &s);
+       if (bootverbose)
+               printf("%s: SCSI bus reset delivered. "
+                      "%d SCBs aborted.\n", ahd_name(ahd), found);
 
-       /*
-        * First determine if we currently own this command.
-        * Start by searching the device queue.  If not found
-        * there, check the pending_scb list.  If not found
-        * at all, and the system wanted us to just abort the
-        * command, return success.
-        */
-       dev = ahd_linux_get_device(ahd, cmd->device->channel,
-                                  cmd->device->id, cmd->device->lun,
-                                  /*alloc*/FALSE);
+       return (SUCCESS);
+}
 
-       if (dev == NULL) {
-               /*
-                * No target device for this command exists,
-                * so we must not still own the command.
-                */
-               printf("%s:%d:%d:%d: Is not an active device\n",
-                      ahd_name(ahd), cmd->device->channel, cmd->device->id,
-                      cmd->device->lun);
-               retval = SUCCESS;
-               goto no_cmd;
-       }
+struct scsi_host_template aic79xx_driver_template = {
+       .module                 = THIS_MODULE,
+       .name                   = "aic79xx",
+       .proc_name              = "aic79xx",
+       .proc_info              = ahd_linux_proc_info,
+       .info                   = ahd_linux_info,
+       .queuecommand           = ahd_linux_queue,
+       .eh_abort_handler       = ahd_linux_abort,
+       .eh_device_reset_handler = ahd_linux_dev_reset,
+       .eh_bus_reset_handler   = ahd_linux_bus_reset,
+#if defined(__i386__)
+       .bios_param             = ahd_linux_biosparam,
+#endif
+       .can_queue              = AHD_MAX_QUEUE,
+       .this_id                = -1,
+       .cmd_per_lun            = 2,
+       .use_clustering         = ENABLE_CLUSTERING,
+       .slave_alloc            = ahd_linux_slave_alloc,
+       .slave_configure        = ahd_linux_slave_configure,
+       .slave_destroy          = ahd_linux_slave_destroy,
+       .target_alloc           = ahd_linux_target_alloc,
+       .target_destroy         = ahd_linux_target_destroy,
+};
 
-       TAILQ_FOREACH(list_acmd, &dev->busyq, acmd_links.tqe) {
-               if (list_acmd == acmd)
-                       break;
-       }
+/******************************** Bus DMA *************************************/
+int
+ahd_dma_tag_create(struct ahd_softc *ahd, bus_dma_tag_t parent,
+                  bus_size_t alignment, bus_size_t boundary,
+                  dma_addr_t lowaddr, dma_addr_t highaddr,
+                  bus_dma_filter_t *filter, void *filterarg,
+                  bus_size_t maxsize, int nsegments,
+                  bus_size_t maxsegsz, int flags, bus_dma_tag_t *ret_tag)
+{
+       bus_dma_tag_t dmat;
 
-       if (list_acmd != NULL) {
-               printf("%s:%d:%d:%d: Command found on device queue\n",
-                      ahd_name(ahd), cmd->device->channel, cmd->device->id,
-                      cmd->device->lun);
-               TAILQ_REMOVE(&dev->busyq, list_acmd, acmd_links.tqe);
-               cmd->result = DID_ABORT << 16;
-               ahd_linux_queue_cmd_complete(ahd, cmd);
-               retval = SUCCESS;
-               goto done;
-       }
+       dmat = malloc(sizeof(*dmat), M_DEVBUF, M_NOWAIT);
+       if (dmat == NULL)
+               return (ENOMEM);
 
        /*
-        * See if we can find a matching cmd in the pending list.
+        * Linux is very simplistic about DMA memory.  For now don't
+        * maintain all specification information.  Once Linux supplies
+        * better facilities for doing these operations, or the
+        * needs of this particular driver change, we might need to do
+        * more here.
         */
-       LIST_FOREACH(pending_scb, &ahd->pending_scbs, pending_links) {
-               if (pending_scb->io_ctx == cmd)
-                       break;
-       }
+       dmat->alignment = alignment;
+       dmat->boundary = boundary;
+       dmat->maxsize = maxsize;
+       *ret_tag = dmat;
+       return (0);
+}
 
-       if (pending_scb == NULL) {
-               printf("%s:%d:%d:%d: Command not found\n",
-                      ahd_name(ahd), cmd->device->channel, cmd->device->id,
-                      cmd->device->lun);
-               goto no_cmd;
-       }
+void
+ahd_dma_tag_destroy(struct ahd_softc *ahd, bus_dma_tag_t dmat)
+{
+       free(dmat, M_DEVBUF);
+}
 
-       if ((pending_scb->flags & SCB_RECOVERY_SCB) != 0) {
-               /*
-                * We can't queue two recovery actions using the same SCB
-                */
-               retval = FAILED;
-               goto  done;
-       }
+int
+ahd_dmamem_alloc(struct ahd_softc *ahd, bus_dma_tag_t dmat, void** vaddr,
+                int flags, bus_dmamap_t *mapp)
+{
+       *vaddr = pci_alloc_consistent(ahd->dev_softc,
+                                     dmat->maxsize, mapp);
+       if (*vaddr == NULL)
+               return (ENOMEM);
+       return(0);
+}
+
+void
+ahd_dmamem_free(struct ahd_softc *ahd, bus_dma_tag_t dmat,
+               void* vaddr, bus_dmamap_t map)
+{
+       pci_free_consistent(ahd->dev_softc, dmat->maxsize,
+                           vaddr, map);
+}
 
+int
+ahd_dmamap_load(struct ahd_softc *ahd, bus_dma_tag_t dmat, bus_dmamap_t map,
+               void *buf, bus_size_t buflen, bus_dmamap_callback_t *cb,
+               void *cb_arg, int flags)
+{
        /*
-        * Ensure that the card doesn't do anything
-        * behind our back.  Also make sure that we
-        * didn't "just" miss an interrupt that would
-        * affect this cmd.
+        * Assume for now that this will only be used during
+        * initialization and not for per-transaction buffer mapping.
         */
-       was_paused = ahd_is_paused(ahd);
-       ahd_pause_and_flushwork(ahd);
-       paused = TRUE;
+       bus_dma_segment_t stack_sg;
 
-       if ((pending_scb->flags & SCB_ACTIVE) == 0) {
-               printf("%s:%d:%d:%d: Command already completed\n",
-                      ahd_name(ahd), cmd->device->channel, cmd->device->id,
-                      cmd->device->lun);
-               goto no_cmd;
-       }
+       stack_sg.ds_addr = map;
+       stack_sg.ds_len = dmat->maxsize;
+       cb(cb_arg, &stack_sg, /*nseg*/1, /*error*/0);
+       return (0);
+}
 
-       printf("%s: At time of recovery, card was %spaused\n",
-              ahd_name(ahd), was_paused ? "" : "not ");
-       ahd_dump_card_state(ahd);
+void
+ahd_dmamap_destroy(struct ahd_softc *ahd, bus_dma_tag_t dmat, bus_dmamap_t map)
+{
+}
 
-       disconnected = TRUE;
-       if (ahd_search_qinfifo(ahd, cmd->device->id, cmd->device->channel + 'A',
-                              cmd->device->lun, SCB_GET_TAG(pending_scb),
-                              ROLE_INITIATOR, CAM_REQ_ABORTED,
-                              SEARCH_COMPLETE) > 0) {
-               printf("%s:%d:%d:%d: Cmd aborted from QINFIFO\n",
-                      ahd_name(ahd), cmd->device->channel, cmd->device->id,
-                               cmd->device->lun);
-               retval = SUCCESS;
-               goto done;
-       }
+int
+ahd_dmamap_unload(struct ahd_softc *ahd, bus_dma_tag_t dmat, bus_dmamap_t map)
+{
+       /* Nothing to do */
+       return (0);
+}
 
-       saved_modes = ahd_save_modes(ahd);
-       ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI);
-       last_phase = ahd_inb(ahd, LASTPHASE);
-       saved_scbptr = ahd_get_scbptr(ahd);
-       active_scbptr = saved_scbptr;
-       if (disconnected && (ahd_inb(ahd, SEQ_FLAGS) & NOT_IDENTIFIED) == 0) {
-               struct scb *bus_scb;
+/********************* Platform Dependent Functions ***************************/
+/*
+ * Compare "left hand" softc with "right hand" softc, returning:
+ * < 0 - lahd has a lower priority than rahd
+ *   0 - Softcs are equal
+ * > 0 - lahd has a higher priority than rahd
+ */
+int
+ahd_softc_comp(struct ahd_softc *lahd, struct ahd_softc *rahd)
+{
+       int     value;
 
-               bus_scb = ahd_lookup_scb(ahd, active_scbptr);
-               if (bus_scb == pending_scb)
-                       disconnected = FALSE;
-       }
-
-       /*
-        * At this point, pending_scb is the scb associated with the
-        * passed in command.  That command is currently active on the
-        * bus or is in the disconnected state.
-        */
-       if (last_phase != P_BUSFREE
-        && SCB_GET_TAG(pending_scb) == active_scbptr) {
-
-               /*
-                * We're active on the bus, so assert ATN
-                * and hope that the target responds.
-                */
-               pending_scb = ahd_lookup_scb(ahd, active_scbptr);
-               pending_scb->flags |= SCB_RECOVERY_SCB|SCB_ABORT;
-               ahd_outb(ahd, MSG_OUT, HOST_MSG);
-               ahd_outb(ahd, SCSISIGO, last_phase|ATNO);
-               printf("%s:%d:%d:%d: Device is active, asserting ATN\n",
-                      ahd_name(ahd), cmd->device->channel,
-                      cmd->device->id, cmd->device->lun);
-               wait = TRUE;
-       } else if (disconnected) {
-
-               /*
-                * Actually re-queue this SCB in an attempt
-                * to select the device before it reconnects.
-                */
-               pending_scb->flags |= SCB_RECOVERY_SCB|SCB_ABORT;
-               ahd_set_scbptr(ahd, SCB_GET_TAG(pending_scb));
-               pending_scb->hscb->cdb_len = 0;
-               pending_scb->hscb->task_attribute = 0;
-               pending_scb->hscb->task_management = SIU_TASKMGMT_ABORT_TASK;
-
-               if ((pending_scb->flags & SCB_PACKETIZED) != 0) {
-                       /*
-                        * Mark the SCB has having an outstanding
-                        * task management function.  Should the command
-                        * complete normally before the task management
-                        * function can be sent, the host will be notified
-                        * to abort our requeued SCB.
-                        */
-                       ahd_outb(ahd, SCB_TASK_MANAGEMENT,
-                                pending_scb->hscb->task_management);
-               } else {
-                       /*
-                        * If non-packetized, set the MK_MESSAGE control
-                        * bit indicating that we desire to send a message.
-                        * We also set the disconnected flag since there is
-                        * no guarantee that our SCB control byte matches
-                        * the version on the card.  We don't want the
-                        * sequencer to abort the command thinking an
-                        * unsolicited reselection occurred.
-                        */
-                       pending_scb->hscb->control |= MK_MESSAGE|DISCONNECTED;
-
-                       /*
-                        * The sequencer will never re-reference the
-                        * in-core SCB.  To make sure we are notified
-                        * during reslection, set the MK_MESSAGE flag in
-                        * the card's copy of the SCB.
-                        */
-                       ahd_outb(ahd, SCB_CONTROL,
-                                ahd_inb(ahd, SCB_CONTROL)|MK_MESSAGE);
-               }
-
-               /*
-                * Clear out any entries in the QINFIFO first
-                * so we are the next SCB for this target
-                * to run.
-                */
-               ahd_search_qinfifo(ahd, cmd->device->id,
-                                  cmd->device->channel + 'A', cmd->device->lun,
-                                  SCB_LIST_NULL, ROLE_INITIATOR,
-                                  CAM_REQUEUE_REQ, SEARCH_COMPLETE);
-               ahd_qinfifo_requeue_tail(ahd, pending_scb);
-               ahd_set_scbptr(ahd, saved_scbptr);
-               ahd_print_path(ahd, pending_scb);
-               printf("Device is disconnected, re-queuing SCB\n");
-               wait = TRUE;
-       } else {
-               printf("%s:%d:%d:%d: Unable to deliver message\n",
-                      ahd_name(ahd), cmd->device->channel,
-                      cmd->device->id, cmd->device->lun);
-               retval = FAILED;
-               goto done;
-       }
-
-no_cmd:
-       /*
-        * Our assumption is that if we don't have the command, no
-        * recovery action was required, so we return success.  Again,
-        * the semantics of the mid-layer recovery engine are not
-        * well defined, so this may change in time.
-        */
-       retval = SUCCESS;
-done:
-       if (paused)
-               ahd_unpause(ahd);
-       if (wait) {
-               struct timer_list timer;
-               int ret;
-
-               pending_scb->platform_data->flags |= AHD_SCB_UP_EH_SEM;
-               spin_unlock_irq(&ahd->platform_data->spin_lock);
-               init_timer(&timer);
-               timer.data = (u_long)pending_scb;
-               timer.expires = jiffies + (5 * HZ);
-               timer.function = ahd_linux_sem_timeout;
-               add_timer(&timer);
-               printf("Recovery code sleeping\n");
-               down(&ahd->platform_data->eh_sem);
-               printf("Recovery code awake\n");
-               ret = del_timer_sync(&timer);
-               if (ret == 0) {
-                       printf("Timer Expired\n");
-                       retval = FAILED;
-               }
-               spin_lock_irq(&ahd->platform_data->spin_lock);
-       }
-       ahd_schedule_runq(ahd);
-       ahd_linux_run_complete_queue(ahd);
-       ahd_midlayer_entrypoint_unlock(ahd, &s);
-       return (retval);
-}
-
-
-static void
-ahd_linux_dev_reset_complete(Scsi_Cmnd *cmd)
-{
-       free(cmd, M_DEVBUF);
-}
-
-/*
- * Attempt to send a target reset message to the device that timed out.
- */
-static int
-ahd_linux_dev_reset(Scsi_Cmnd *cmd)
-{
-       struct  ahd_softc *ahd;
-       struct  scsi_cmnd *recovery_cmd;
-       struct  ahd_linux_device *dev;
-       struct  ahd_initiator_tinfo *tinfo;
-       struct  ahd_tmode_tstate *tstate;
-       struct  scb *scb;
-       struct  hardware_scb *hscb;
-       u_long  s;
-       struct  timer_list timer;
-       int     retval;
-
-       ahd = *(struct ahd_softc **)cmd->device->host->hostdata;
-       recovery_cmd = malloc(sizeof(struct scsi_cmnd), M_DEVBUF, M_WAITOK);
-       if (!recovery_cmd)
-               return (FAILED);
-       memset(recovery_cmd, 0, sizeof(struct scsi_cmnd));
-       recovery_cmd->device = cmd->device;
-       recovery_cmd->scsi_done = ahd_linux_dev_reset_complete;
-#ifdef AHD_DEBUG
-       if ((ahd_debug & AHD_SHOW_RECOVERY) != 0)
-               printf("%s:%d:%d:%d: Device reset called for cmd %p\n",
-                      ahd_name(ahd), cmd->device->channel, cmd->device->id,
-                      cmd->device->lun, cmd);
-#endif
-       ahd_lock(ahd, &s);
-
-       dev = ahd_linux_get_device(ahd, cmd->device->channel, cmd->device->id,
-                                  cmd->device->lun, /*alloc*/FALSE);
-       if (dev == NULL) {
-               ahd_unlock(ahd, &s);
-               kfree(recovery_cmd);
-               return (FAILED);
-       }
-       if ((scb = ahd_get_scb(ahd, AHD_NEVER_COL_IDX)) == NULL) {
-               ahd_unlock(ahd, &s);
-               kfree(recovery_cmd);
-               return (FAILED);
-       }
-       tinfo = ahd_fetch_transinfo(ahd, 'A', ahd->our_id,
-                                   cmd->device->id, &tstate);
-       recovery_cmd->result = CAM_REQ_INPROG << 16;
-       recovery_cmd->host_scribble = (char *)scb;
-       scb->io_ctx = recovery_cmd;
-       scb->platform_data->dev = dev;
-       scb->sg_count = 0;
-       ahd_set_residual(scb, 0);
-       ahd_set_sense_residual(scb, 0);
-       hscb = scb->hscb;
-       hscb->control = 0;
-       hscb->scsiid = BUILD_SCSIID(ahd, cmd);
-       hscb->lun = cmd->device->lun;
-       hscb->cdb_len = 0;
-       hscb->task_management = SIU_TASKMGMT_LUN_RESET;
-       scb->flags |= SCB_DEVICE_RESET|SCB_RECOVERY_SCB|SCB_ACTIVE;
-       if ((tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ) != 0) {
-               scb->flags |= SCB_PACKETIZED;
-       } else {
-               hscb->control |= MK_MESSAGE;
-       }
-       dev->openings--;
-       dev->active++;
-       dev->commands_issued++;
-       LIST_INSERT_HEAD(&ahd->pending_scbs, scb, pending_links);
-       ahd_queue_scb(ahd, scb);
-
-       scb->platform_data->flags |= AHD_SCB_UP_EH_SEM;
-       ahd_unlock(ahd, &s);
-       init_timer(&timer);
-       timer.data = (u_long)scb;
-       timer.expires = jiffies + (5 * HZ);
-       timer.function = ahd_linux_sem_timeout;
-       add_timer(&timer);
-       printf("Recovery code sleeping\n");
-       down(&ahd->platform_data->eh_sem);
-       printf("Recovery code awake\n");
-       retval = SUCCESS;
-       if (del_timer_sync(&timer) == 0) {
-               printf("Timer Expired\n");
-               retval = FAILED;
-       }
-       ahd_lock(ahd, &s);
-       ahd_schedule_runq(ahd);
-       ahd_linux_run_complete_queue(ahd);
-       ahd_unlock(ahd, &s);
-       printf("%s: Device reset returning 0x%x\n", ahd_name(ahd), retval);
-       return (retval);
-}
-
-/*
- * Reset the SCSI bus.
- */
-static int
-ahd_linux_bus_reset(Scsi_Cmnd *cmd)
-{
-       struct ahd_softc *ahd;
-       u_long s;
-       int    found;
-
-       ahd = *(struct ahd_softc **)cmd->device->host->hostdata;
-#ifdef AHD_DEBUG
-       if ((ahd_debug & AHD_SHOW_RECOVERY) != 0)
-               printf("%s: Bus reset called for cmd %p\n",
-                      ahd_name(ahd), cmd);
-#endif
-       ahd_lock(ahd, &s);
-       found = ahd_reset_channel(ahd, cmd->device->channel + 'A',
-                                 /*initiate reset*/TRUE);
-       ahd_linux_run_complete_queue(ahd);
-       ahd_unlock(ahd, &s);
-
-       if (bootverbose)
-               printf("%s: SCSI bus reset delivered. "
-                      "%d SCBs aborted.\n", ahd_name(ahd), found);
-
-       return (SUCCESS);
-}
-
-Scsi_Host_Template aic79xx_driver_template = {
-       .module                 = THIS_MODULE,
-       .name                   = "aic79xx",
-       .proc_info              = ahd_linux_proc_info,
-       .info                   = ahd_linux_info,
-       .queuecommand           = ahd_linux_queue,
-       .eh_abort_handler       = ahd_linux_abort,
-       .eh_device_reset_handler = ahd_linux_dev_reset,
-       .eh_bus_reset_handler   = ahd_linux_bus_reset,
-#if defined(__i386__)
-       .bios_param             = ahd_linux_biosparam,
-#endif
-       .can_queue              = AHD_MAX_QUEUE,
-       .this_id                = -1,
-       .cmd_per_lun            = 2,
-       .use_clustering         = ENABLE_CLUSTERING,
-       .slave_alloc            = ahd_linux_slave_alloc,
-       .slave_configure        = ahd_linux_slave_configure,
-       .slave_destroy          = ahd_linux_slave_destroy,
-};
-
-/**************************** Tasklet Handler *********************************/
-
-/*
- * In 2.4.X and above, this routine is called from a tasklet,
- * so we must re-acquire our lock prior to executing this code.
- * In all prior kernels, ahd_schedule_runq() calls this routine
- * directly and ahd_schedule_runq() is called with our lock held.
- */
-static void
-ahd_runq_tasklet(unsigned long data)
-{
-       struct ahd_softc* ahd;
-       struct ahd_linux_device *dev;
-       u_long flags;
-
-       ahd = (struct ahd_softc *)data;
-       ahd_lock(ahd, &flags);
-       while ((dev = ahd_linux_next_device_to_run(ahd)) != NULL) {
-       
-               TAILQ_REMOVE(&ahd->platform_data->device_runq, dev, links);
-               dev->flags &= ~AHD_DEV_ON_RUN_LIST;
-               ahd_linux_check_device_queue(ahd, dev);
-               /* Yeild to our interrupt handler */
-               ahd_unlock(ahd, &flags);
-               ahd_lock(ahd, &flags);
-       }
-       ahd_unlock(ahd, &flags);
-}
-
-/******************************** Bus DMA *************************************/
-int
-ahd_dma_tag_create(struct ahd_softc *ahd, bus_dma_tag_t parent,
-                  bus_size_t alignment, bus_size_t boundary,
-                  dma_addr_t lowaddr, dma_addr_t highaddr,
-                  bus_dma_filter_t *filter, void *filterarg,
-                  bus_size_t maxsize, int nsegments,
-                  bus_size_t maxsegsz, int flags, bus_dma_tag_t *ret_tag)
-{
-       bus_dma_tag_t dmat;
-
-       dmat = malloc(sizeof(*dmat), M_DEVBUF, M_NOWAIT);
-       if (dmat == NULL)
-               return (ENOMEM);
-
-       /*
-        * Linux is very simplistic about DMA memory.  For now don't
-        * maintain all specification information.  Once Linux supplies
-        * better facilities for doing these operations, or the
-        * needs of this particular driver change, we might need to do
-        * more here.
-        */
-       dmat->alignment = alignment;
-       dmat->boundary = boundary;
-       dmat->maxsize = maxsize;
-       *ret_tag = dmat;
-       return (0);
-}
-
-void
-ahd_dma_tag_destroy(struct ahd_softc *ahd, bus_dma_tag_t dmat)
-{
-       free(dmat, M_DEVBUF);
-}
-
-int
-ahd_dmamem_alloc(struct ahd_softc *ahd, bus_dma_tag_t dmat, void** vaddr,
-                int flags, bus_dmamap_t *mapp)
-{
-       bus_dmamap_t map;
-
-       map = malloc(sizeof(*map), M_DEVBUF, M_NOWAIT);
-       if (map == NULL)
-               return (ENOMEM);
-       /*
-        * Although we can dma data above 4GB, our
-        * "consistent" memory is below 4GB for
-        * space efficiency reasons (only need a 4byte
-        * address).  For this reason, we have to reset
-        * our dma mask when doing allocations.
-        */
-       if (ahd->dev_softc != NULL)
-               if (pci_set_dma_mask(ahd->dev_softc, 0xFFFFFFFF)) {
-                       printk(KERN_WARNING "aic79xx: No suitable DMA available.\n");
-                       kfree(map);
-                       return (ENODEV);
-               }
-       *vaddr = pci_alloc_consistent(ahd->dev_softc,
-                                     dmat->maxsize, &map->bus_addr);
-       if (ahd->dev_softc != NULL)
-               if (pci_set_dma_mask(ahd->dev_softc,
-                                    ahd->platform_data->hw_dma_mask)) {
-                       printk(KERN_WARNING "aic79xx: No suitable DMA available.\n");
-                       kfree(map);
-                       return (ENODEV);
-               }
-       if (*vaddr == NULL)
-               return (ENOMEM);
-       *mapp = map;
-       return(0);
-}
-
-void
-ahd_dmamem_free(struct ahd_softc *ahd, bus_dma_tag_t dmat,
-               void* vaddr, bus_dmamap_t map)
-{
-       pci_free_consistent(ahd->dev_softc, dmat->maxsize,
-                           vaddr, map->bus_addr);
-}
-
-int
-ahd_dmamap_load(struct ahd_softc *ahd, bus_dma_tag_t dmat, bus_dmamap_t map,
-               void *buf, bus_size_t buflen, bus_dmamap_callback_t *cb,
-               void *cb_arg, int flags)
-{
-       /*
-        * Assume for now that this will only be used during
-        * initialization and not for per-transaction buffer mapping.
-        */
-       bus_dma_segment_t stack_sg;
-
-       stack_sg.ds_addr = map->bus_addr;
-       stack_sg.ds_len = dmat->maxsize;
-       cb(cb_arg, &stack_sg, /*nseg*/1, /*error*/0);
-       return (0);
-}
-
-void
-ahd_dmamap_destroy(struct ahd_softc *ahd, bus_dma_tag_t dmat, bus_dmamap_t map)
-{
-       /*
-        * The map may is NULL in our < 2.3.X implementation.
-        */
-       if (map != NULL)
-               free(map, M_DEVBUF);
-}
-
-int
-ahd_dmamap_unload(struct ahd_softc *ahd, bus_dma_tag_t dmat, bus_dmamap_t map)
-{
-       /* Nothing to do */
-       return (0);
-}
-
-/********************* Platform Dependent Functions ***************************/
-/*
- * Compare "left hand" softc with "right hand" softc, returning:
- * < 0 - lahd has a lower priority than rahd
- *   0 - Softcs are equal
- * > 0 - lahd has a higher priority than rahd
- */
-int
-ahd_softc_comp(struct ahd_softc *lahd, struct ahd_softc *rahd)
-{
-       int     value;
-
-       /*
-        * Under Linux, cards are ordered as follows:
-        *      1) PCI devices that are marked as the boot controller.
-        *      2) PCI devices with BIOS enabled sorted by bus/slot/func.
-        *      3) All remaining PCI devices sorted by bus/slot/func.
-        */
-#if 0
-       value = (lahd->flags & AHD_BOOT_CHANNEL)
-             - (rahd->flags & AHD_BOOT_CHANNEL);
-       if (value != 0)
-               /* Controllers set for boot have a *higher* priority */
-               return (value);
-#endif
-
-       value = (lahd->flags & AHD_BIOS_ENABLED)
-             - (rahd->flags & AHD_BIOS_ENABLED);
-       if (value != 0)
-               /* Controllers with BIOS enabled have a *higher* priority */
-               return (value);
-
-       /* Still equal.  Sort by bus/slot/func. */
-       if (aic79xx_reverse_scan != 0)
-               value = ahd_get_pci_bus(lahd->dev_softc)
-                     - ahd_get_pci_bus(rahd->dev_softc);
-       else
-               value = ahd_get_pci_bus(rahd->dev_softc)
-                     - ahd_get_pci_bus(lahd->dev_softc);
-       if (value != 0)
-               return (value);
-       if (aic79xx_reverse_scan != 0)
-               value = ahd_get_pci_slot(lahd->dev_softc)
-                     - ahd_get_pci_slot(rahd->dev_softc);
-       else
-               value = ahd_get_pci_slot(rahd->dev_softc)
-                     - ahd_get_pci_slot(lahd->dev_softc);
-       if (value != 0)
-               return (value);
-
-       value = rahd->channel - lahd->channel;
-       return (value);
-}
-
-static void
-ahd_linux_setup_tag_info(u_long arg, int instance, int targ, int32_t value)
-{
-
-       if ((instance >= 0) && (targ >= 0)
-        && (instance < NUM_ELEMENTS(aic79xx_tag_info))
-        && (targ < AHD_NUM_TARGETS)) {
-               aic79xx_tag_info[instance].tag_commands[targ] = value & 0x1FF;
-               if (bootverbose)
-                       printf("tag_info[%d:%d] = %d\n", instance, targ, value);
-       }
-}
-
-static void
-ahd_linux_setup_rd_strm_info(u_long arg, int instance, int targ, int32_t value)
-{
-       if ((instance >= 0)
-        && (instance < NUM_ELEMENTS(aic79xx_rd_strm_info))) {
-               aic79xx_rd_strm_info[instance] = value & 0xFFFF;
-               if (bootverbose)
-                       printf("rd_strm[%d] = 0x%x\n", instance, value);
-       }
-}
-
-static void
-ahd_linux_setup_dv(u_long arg, int instance, int targ, int32_t value)
-{
-       if ((instance >= 0)
-        && (instance < NUM_ELEMENTS(aic79xx_dv_settings))) {
-               aic79xx_dv_settings[instance] = value;
-               if (bootverbose)
-                       printf("dv[%d] = %d\n", instance, value);
-       }
-}
-
-static void
-ahd_linux_setup_iocell_info(u_long index, int instance, int targ, int32_t value)
-{
-
-       if ((instance >= 0)
-        && (instance < NUM_ELEMENTS(aic79xx_iocell_info))) {
-               uint8_t *iocell_info;
-
-               iocell_info = (uint8_t*)&aic79xx_iocell_info[instance];
-               iocell_info[index] = value & 0xFFFF;
-               if (bootverbose)
-                       printf("iocell[%d:%ld] = %d\n", instance, index, value);
-       }
-}
-
-static void
-ahd_linux_setup_tag_info_global(char *p)
-{
-       int tags, i, j;
-
-       tags = simple_strtoul(p + 1, NULL, 0) & 0xff;
-       printf("Setting Global Tags= %d\n", tags);
-
-       for (i = 0; i < NUM_ELEMENTS(aic79xx_tag_info); i++) {
-               for (j = 0; j < AHD_NUM_TARGETS; j++) {
-                       aic79xx_tag_info[i].tag_commands[j] = tags;
-               }
-       }
-}
-
-/*
- * Handle Linux boot parameters. This routine allows for assigning a value
- * to a parameter with a ':' between the parameter and the value.
- * ie. aic79xx=stpwlev:1,extended
- */
-static int
-aic79xx_setup(char *s)
-{
-       int     i, n;
-       char   *p;
-       char   *end;
-
-       static struct {
-               const char *name;
-               uint32_t *flag;
-       } options[] = {
-               { "extended", &aic79xx_extended },
-               { "no_reset", &aic79xx_no_reset },
-               { "verbose", &aic79xx_verbose },
-               { "allow_memio", &aic79xx_allow_memio},
-#ifdef AHD_DEBUG
-               { "debug", &ahd_debug },
-#endif
-               { "reverse_scan", &aic79xx_reverse_scan },
-               { "periodic_otag", &aic79xx_periodic_otag },
-               { "pci_parity", &aic79xx_pci_parity },
-               { "seltime", &aic79xx_seltime },
-               { "tag_info", NULL },
-               { "global_tag_depth", NULL},
-               { "rd_strm", NULL },
-               { "dv", NULL },
-               { "slewrate", NULL },
-               { "precomp", NULL },
-               { "amplitude", NULL },
-       };
-
-       end = strchr(s, '\0');
-
-       /*
-        * XXX ia64 gcc isn't smart enough to know that NUM_ELEMENTS
-        * will never be 0 in this case.
-        */      
-       n = 0;  
-
-       while ((p = strsep(&s, ",.")) != NULL) {
-               if (*p == '\0')
-                       continue;
-               for (i = 0; i < NUM_ELEMENTS(options); i++) {
-
-                       n = strlen(options[i].name);
-                       if (strncmp(options[i].name, p, n) == 0)
-                               break;
-               }
-               if (i == NUM_ELEMENTS(options))
-                       continue;
-
-               if (strncmp(p, "global_tag_depth", n) == 0) {
-                       ahd_linux_setup_tag_info_global(p + n);
-               } else if (strncmp(p, "tag_info", n) == 0) {
-                       s = aic_parse_brace_option("tag_info", p + n, end,
-                           2, ahd_linux_setup_tag_info, 0);
-               } else if (strncmp(p, "rd_strm", n) == 0) {
-                       s = aic_parse_brace_option("rd_strm", p + n, end,
-                           1, ahd_linux_setup_rd_strm_info, 0);
-               } else if (strncmp(p, "dv", n) == 0) {
-                       s = aic_parse_brace_option("dv", p + n, end, 1,
-                           ahd_linux_setup_dv, 0);
-               } else if (strncmp(p, "slewrate", n) == 0) {
-                       s = aic_parse_brace_option("slewrate",
-                           p + n, end, 1, ahd_linux_setup_iocell_info,
-                           AIC79XX_SLEWRATE_INDEX);
-               } else if (strncmp(p, "precomp", n) == 0) {
-                       s = aic_parse_brace_option("precomp",
-                           p + n, end, 1, ahd_linux_setup_iocell_info,
-                           AIC79XX_PRECOMP_INDEX);
-               } else if (strncmp(p, "amplitude", n) == 0) {
-                       s = aic_parse_brace_option("amplitude",
-                           p + n, end, 1, ahd_linux_setup_iocell_info,
-                           AIC79XX_AMPLITUDE_INDEX);
-               } else if (p[n] == ':') {
-                       *(options[i].flag) = simple_strtoul(p + n + 1, NULL, 0);
-               } else if (!strncmp(p, "verbose", n)) {
-                       *(options[i].flag) = 1;
-               } else {
-                       *(options[i].flag) ^= 0xFFFFFFFF;
-               }
-       }
-       return 1;
-}
-
-__setup("aic79xx=", aic79xx_setup);
-
-uint32_t aic79xx_verbose;
-
-int
-ahd_linux_register_host(struct ahd_softc *ahd, Scsi_Host_Template *template)
-{
-       char    buf[80];
-       struct  Scsi_Host *host;
-       char    *new_name;
-       u_long  s;
-       u_long  target;
-
-       template->name = ahd->description;
-       host = scsi_host_alloc(template, sizeof(struct ahd_softc *));
-       if (host == NULL)
-               return (ENOMEM);
-
-       *((struct ahd_softc **)host->hostdata) = ahd;
-       ahd_lock(ahd, &s);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-       scsi_assign_lock(host, &ahd->platform_data->spin_lock);
-#elif AHD_SCSI_HAS_HOST_LOCK != 0
-       host->lock = &ahd->platform_data->spin_lock;
-#endif
-       ahd->platform_data->host = host;
-       host->can_queue = AHD_MAX_QUEUE;
-       host->cmd_per_lun = 2;
-       host->sg_tablesize = AHD_NSEG;
-       host->this_id = ahd->our_id;
-       host->irq = ahd->platform_data->irq;
-       host->max_id = (ahd->features & AHD_WIDE) ? 16 : 8;
-       host->max_lun = AHD_NUM_LUNS;
-       host->max_channel = 0;
-       host->sg_tablesize = AHD_NSEG;
-       ahd_set_unit(ahd, ahd_linux_next_unit());
-       sprintf(buf, "scsi%d", host->host_no);
-       new_name = malloc(strlen(buf) + 1, M_DEVBUF, M_NOWAIT);
-       if (new_name != NULL) {
-               strcpy(new_name, buf);
-               ahd_set_name(ahd, new_name);
-       }
-       host->unique_id = ahd->unit;
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       scsi_set_pci_device(host, ahd->dev_softc);
-#endif
-       ahd_linux_setup_user_rd_strm_settings(ahd);
-       ahd_linux_initialize_scsi_bus(ahd);
-       ahd_unlock(ahd, &s);
-       ahd->platform_data->dv_pid = kernel_thread(ahd_linux_dv_thread, ahd, 0);
-       ahd_lock(ahd, &s);
-       if (ahd->platform_data->dv_pid < 0) {
-               printf("%s: Failed to create DV thread, error= %d\n",
-                      ahd_name(ahd), ahd->platform_data->dv_pid);
-               return (-ahd->platform_data->dv_pid);
-       }
-       /*
-        * Initially allocate *all* of our linux target objects
-        * so that the DV thread will scan them all in parallel
-        * just after driver initialization.  Any device that
-        * does not exist will have its target object destroyed
-        * by the selection timeout handler.  In the case of a
-        * device that appears after the initial DV scan, async
-        * negotiation will occur for the first command, and DV
-        * will comence should that first command be successful.
-        */
-       for (target = 0; target < host->max_id; target++) {
-
-               /*
-                * Skip our own ID.  Some Compaq/HP storage devices
-                * have enclosure management devices that respond to
-                * single bit selection (i.e. selecting ourselves).
-                * It is expected that either an external application
-                * or a modified kernel will be used to probe this
-                * ID if it is appropriate.  To accommodate these
-                * installations, ahc_linux_alloc_target() will allocate
-                * for our ID if asked to do so.
-                */
-               if (target == ahd->our_id) 
-                       continue;
-
-               ahd_linux_alloc_target(ahd, 0, target);
-       }
-       ahd_intr_enable(ahd, TRUE);
-       ahd_linux_start_dv(ahd);
-       ahd_unlock(ahd, &s);
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-       scsi_add_host(host, &ahd->dev_softc->dev); /* XXX handle failure */
-       scsi_scan_host(host);
-#endif
-       return (0);
-}
-
-uint64_t
-ahd_linux_get_memsize(void)
-{
-       struct sysinfo si;
-
-       si_meminfo(&si);
-       return ((uint64_t)si.totalram << PAGE_SHIFT);
-}
-
-/*
- * Find the smallest available unit number to use
- * for a new device.  We don't just use a static
- * count to handle the "repeated hot-(un)plug"
- * scenario.
- */
-static int
-ahd_linux_next_unit(void)
-{
-       struct ahd_softc *ahd;
-       int unit;
-
-       unit = 0;
-retry:
-       TAILQ_FOREACH(ahd, &ahd_tailq, links) {
-               if (ahd->unit == unit) {
-                       unit++;
-                       goto retry;
-               }
-       }
-       return (unit);
-}
-
-/*
- * Place the SCSI bus into a known state by either resetting it,
- * or forcing transfer negotiations on the next command to any
- * target.
- */
-static void
-ahd_linux_initialize_scsi_bus(struct ahd_softc *ahd)
-{
-       u_int target_id;
-       u_int numtarg;
-
-       target_id = 0;
-       numtarg = 0;
-
-       if (aic79xx_no_reset != 0)
-               ahd->flags &= ~AHD_RESET_BUS_A;
-
-       if ((ahd->flags & AHD_RESET_BUS_A) != 0)
-               ahd_reset_channel(ahd, 'A', /*initiate_reset*/TRUE);
-       else
-               numtarg = (ahd->features & AHD_WIDE) ? 16 : 8;
-
-       /*
-        * Force negotiation to async for all targets that
-        * will not see an initial bus reset.
-        */
-       for (; target_id < numtarg; target_id++) {
-               struct ahd_devinfo devinfo;
-               struct ahd_initiator_tinfo *tinfo;
-               struct ahd_tmode_tstate *tstate;
-
-               tinfo = ahd_fetch_transinfo(ahd, 'A', ahd->our_id,
-                                           target_id, &tstate);
-               ahd_compile_devinfo(&devinfo, ahd->our_id, target_id,
-                                   CAM_LUN_WILDCARD, 'A', ROLE_INITIATOR);
-               ahd_update_neg_request(ahd, &devinfo, tstate,
-                                      tinfo, AHD_NEG_ALWAYS);
-       }
-       /* Give the bus some time to recover */
-       if ((ahd->flags & AHD_RESET_BUS_A) != 0) {
-               ahd_freeze_simq(ahd);
-               init_timer(&ahd->platform_data->reset_timer);
-               ahd->platform_data->reset_timer.data = (u_long)ahd;
-               ahd->platform_data->reset_timer.expires =
-                   jiffies + (AIC79XX_RESET_DELAY * HZ)/1000;
-               ahd->platform_data->reset_timer.function =
-                   (ahd_linux_callback_t *)ahd_release_simq;
-               add_timer(&ahd->platform_data->reset_timer);
-       }
-}
-
-int
-ahd_platform_alloc(struct ahd_softc *ahd, void *platform_arg)
-{
-       ahd->platform_data =
-           malloc(sizeof(struct ahd_platform_data), M_DEVBUF, M_NOWAIT);
-       if (ahd->platform_data == NULL)
-               return (ENOMEM);
-       memset(ahd->platform_data, 0, sizeof(struct ahd_platform_data));
-       TAILQ_INIT(&ahd->platform_data->completeq);
-       TAILQ_INIT(&ahd->platform_data->device_runq);
-       ahd->platform_data->irq = AHD_LINUX_NOIRQ;
-       ahd->platform_data->hw_dma_mask = 0xFFFFFFFF;
-       ahd_lockinit(ahd);
-       ahd_done_lockinit(ahd);
-       init_timer(&ahd->platform_data->completeq_timer);
-       ahd->platform_data->completeq_timer.data = (u_long)ahd;
-       ahd->platform_data->completeq_timer.function =
-           (ahd_linux_callback_t *)ahd_linux_thread_run_complete_queue;
-       init_MUTEX_LOCKED(&ahd->platform_data->eh_sem);
-       init_MUTEX_LOCKED(&ahd->platform_data->dv_sem);
-       init_MUTEX_LOCKED(&ahd->platform_data->dv_cmd_sem);
-       ahd_setup_runq_tasklet(ahd);
-       ahd->seltime = (aic79xx_seltime & 0x3) << 4;
-       return (0);
-}
-
-void
-ahd_platform_free(struct ahd_softc *ahd)
-{
-       struct ahd_linux_target *targ;
-       struct ahd_linux_device *dev;
-       int i, j;
-
-       if (ahd->platform_data != NULL) {
-               del_timer_sync(&ahd->platform_data->completeq_timer);
-               ahd_linux_kill_dv_thread(ahd);
-               ahd_teardown_runq_tasklet(ahd);
-               if (ahd->platform_data->host != NULL) {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-                       scsi_remove_host(ahd->platform_data->host);
-#endif
-                       scsi_host_put(ahd->platform_data->host);
-               }
-
-               /* destroy all of the device and target objects */
-               for (i = 0; i < AHD_NUM_TARGETS; i++) {
-                       targ = ahd->platform_data->targets[i];
-                       if (targ != NULL) {
-                               /* Keep target around through the loop. */
-                               targ->refcount++;
-                               for (j = 0; j < AHD_NUM_LUNS; j++) {
-
-                                       if (targ->devices[j] == NULL)
-                                               continue;
-                                       dev = targ->devices[j];
-                                       ahd_linux_free_device(ahd, dev);
-                               }
-                               /*
-                                * Forcibly free the target now that
-                                * all devices are gone.
-                                */
-                               ahd_linux_free_target(ahd, targ);
-                       }
-               }
-
-               if (ahd->platform_data->irq != AHD_LINUX_NOIRQ)
-                       free_irq(ahd->platform_data->irq, ahd);
-               if (ahd->tags[0] == BUS_SPACE_PIO
-                && ahd->bshs[0].ioport != 0)
-                       release_region(ahd->bshs[0].ioport, 256);
-               if (ahd->tags[1] == BUS_SPACE_PIO
-                && ahd->bshs[1].ioport != 0)
-                       release_region(ahd->bshs[1].ioport, 256);
-               if (ahd->tags[0] == BUS_SPACE_MEMIO
-                && ahd->bshs[0].maddr != NULL) {
-                       iounmap(ahd->bshs[0].maddr);
-                       release_mem_region(ahd->platform_data->mem_busaddr,
-                                          0x1000);
-               }
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-               /*
-                * In 2.4 we detach from the scsi midlayer before the PCI
-                * layer invokes our remove callback.  No per-instance
-                * detach is provided, so we must reach inside the PCI
-                * subsystem's internals and detach our driver manually.
-                */
-               if (ahd->dev_softc != NULL)
-                       ahd->dev_softc->driver = NULL;
-#endif
-               free(ahd->platform_data, M_DEVBUF);
-       }
-}
-
-void
-ahd_platform_init(struct ahd_softc *ahd)
-{
-       /*
-        * Lookup and commit any modified IO Cell options.
-        */
-       if (ahd->unit < NUM_ELEMENTS(aic79xx_iocell_info)) {
-               struct ahd_linux_iocell_opts *iocell_opts;
-
-               iocell_opts = &aic79xx_iocell_info[ahd->unit];
-               if (iocell_opts->precomp != AIC79XX_DEFAULT_PRECOMP)
-                       AHD_SET_PRECOMP(ahd, iocell_opts->precomp);
-               if (iocell_opts->slewrate != AIC79XX_DEFAULT_SLEWRATE)
-                       AHD_SET_SLEWRATE(ahd, iocell_opts->slewrate);
-               if (iocell_opts->amplitude != AIC79XX_DEFAULT_AMPLITUDE)
-                       AHD_SET_AMPLITUDE(ahd, iocell_opts->amplitude);
-       }
-
-}
-
-void
-ahd_platform_freeze_devq(struct ahd_softc *ahd, struct scb *scb)
-{
-       ahd_platform_abort_scbs(ahd, SCB_GET_TARGET(ahd, scb),
-                               SCB_GET_CHANNEL(ahd, scb),
-                               SCB_GET_LUN(scb), SCB_LIST_NULL,
-                               ROLE_UNKNOWN, CAM_REQUEUE_REQ);
-}
-
-void
-ahd_platform_set_tags(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
-                     ahd_queue_alg alg)
-{
-       struct ahd_linux_device *dev;
-       int was_queuing;
-       int now_queuing;
-
-       dev = ahd_linux_get_device(ahd, devinfo->channel - 'A',
-                                  devinfo->target,
-                                  devinfo->lun, /*alloc*/FALSE);
-       if (dev == NULL)
-               return;
-       was_queuing = dev->flags & (AHD_DEV_Q_BASIC|AHD_DEV_Q_TAGGED);
-       switch (alg) {
-       default:
-       case AHD_QUEUE_NONE:
-               now_queuing = 0;
-               break; 
-       case AHD_QUEUE_BASIC:
-               now_queuing = AHD_DEV_Q_BASIC;
-               break;
-       case AHD_QUEUE_TAGGED:
-               now_queuing = AHD_DEV_Q_TAGGED;
-               break;
-       }
-       if ((dev->flags & AHD_DEV_FREEZE_TIL_EMPTY) == 0
-        && (was_queuing != now_queuing)
-        && (dev->active != 0)) {
-               dev->flags |= AHD_DEV_FREEZE_TIL_EMPTY;
-               dev->qfrozen++;
-       }
-
-       dev->flags &= ~(AHD_DEV_Q_BASIC|AHD_DEV_Q_TAGGED|AHD_DEV_PERIODIC_OTAG);
-       if (now_queuing) {
-               u_int usertags;
-
-               usertags = ahd_linux_user_tagdepth(ahd, devinfo);
-               if (!was_queuing) {
-                       /*
-                        * Start out agressively and allow our
-                        * dynamic queue depth algorithm to take
-                        * care of the rest.
-                        */
-                       dev->maxtags = usertags;
-                       dev->openings = dev->maxtags - dev->active;
-               }
-               if (dev->maxtags == 0) {
-                       /*
-                        * Queueing is disabled by the user.
-                        */
-                       dev->openings = 1;
-               } else if (alg == AHD_QUEUE_TAGGED) {
-                       dev->flags |= AHD_DEV_Q_TAGGED;
-                       if (aic79xx_periodic_otag != 0)
-                               dev->flags |= AHD_DEV_PERIODIC_OTAG;
-               } else
-                       dev->flags |= AHD_DEV_Q_BASIC;
-       } else {
-               /* We can only have one opening. */
-               dev->maxtags = 0;
-               dev->openings =  1 - dev->active;
-       }
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-       if (dev->scsi_device != NULL) {
-               switch ((dev->flags & (AHD_DEV_Q_BASIC|AHD_DEV_Q_TAGGED))) {
-               case AHD_DEV_Q_BASIC:
-                       scsi_adjust_queue_depth(dev->scsi_device,
-                                               MSG_SIMPLE_TASK,
-                                               dev->openings + dev->active);
-                       break;
-               case AHD_DEV_Q_TAGGED:
-                       scsi_adjust_queue_depth(dev->scsi_device,
-                                               MSG_ORDERED_TASK,
-                                               dev->openings + dev->active);
-                       break;
-               default:
-                       /*
-                        * We allow the OS to queue 2 untagged transactions to
-                        * us at any time even though we can only execute them
-                        * serially on the controller/device.  This should
-                        * remove some latency.
-                        */
-                       scsi_adjust_queue_depth(dev->scsi_device,
-                                               /*NON-TAGGED*/0,
-                                               /*queue depth*/2);
-                       break;
-               }
-       }
-#endif
-}
-
-int
-ahd_platform_abort_scbs(struct ahd_softc *ahd, int target, char channel,
-                       int lun, u_int tag, role_t role, uint32_t status)
-{
-       int targ;
-       int maxtarg;
-       int maxlun;
-       int clun;
-       int count;
-
-       if (tag != SCB_LIST_NULL)
-               return (0);
-
-       targ = 0;
-       if (target != CAM_TARGET_WILDCARD) {
-               targ = target;
-               maxtarg = targ + 1;
-       } else {
-               maxtarg = (ahd->features & AHD_WIDE) ? 16 : 8;
-       }
-       clun = 0;
-       if (lun != CAM_LUN_WILDCARD) {
-               clun = lun;
-               maxlun = clun + 1;
-       } else {
-               maxlun = AHD_NUM_LUNS;
-       }
-
-       count = 0;
-       for (; targ < maxtarg; targ++) {
-
-               for (; clun < maxlun; clun++) {
-                       struct ahd_linux_device *dev;
-                       struct ahd_busyq *busyq;
-                       struct ahd_cmd *acmd;
-
-                       dev = ahd_linux_get_device(ahd, /*chan*/0, targ,
-                                                  clun, /*alloc*/FALSE);
-                       if (dev == NULL)
-                               continue;
-
-                       busyq = &dev->busyq;
-                       while ((acmd = TAILQ_FIRST(busyq)) != NULL) {
-                               Scsi_Cmnd *cmd;
-
-                               cmd = &acmd_scsi_cmd(acmd);
-                               TAILQ_REMOVE(busyq, acmd,
-                                            acmd_links.tqe);
-                               count++;
-                               cmd->result = status << 16;
-                               ahd_linux_queue_cmd_complete(ahd, cmd);
-                       }
-               }
-       }
-
-       return (count);
-}
-
-static void
-ahd_linux_thread_run_complete_queue(struct ahd_softc *ahd)
-{
-       u_long flags;
-
-       ahd_lock(ahd, &flags);
-       del_timer(&ahd->platform_data->completeq_timer);
-       ahd->platform_data->flags &= ~AHD_RUN_CMPLT_Q_TIMER;
-       ahd_linux_run_complete_queue(ahd);
-       ahd_unlock(ahd, &flags);
-}
-
-static void
-ahd_linux_start_dv(struct ahd_softc *ahd)
-{
-
-       /*
-        * Freeze the simq and signal ahd_linux_queue to not let any
-        * more commands through
-        */
-       if ((ahd->platform_data->flags & AHD_DV_ACTIVE) == 0) {
-#ifdef AHD_DEBUG
-               if (ahd_debug & AHD_SHOW_DV)
-                       printf("%s: Starting DV\n", ahd_name(ahd));
-#endif
-
-               ahd->platform_data->flags |= AHD_DV_ACTIVE;
-               ahd_freeze_simq(ahd);
-
-               /* Wake up the DV kthread */
-               up(&ahd->platform_data->dv_sem);
-       }
-}
-
-static int
-ahd_linux_dv_thread(void *data)
-{
-       struct  ahd_softc *ahd;
-       int     target;
-       u_long  s;
-
-       ahd = (struct ahd_softc *)data;
-
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV)
-               printf("In DV Thread\n");
-#endif
-
-       /*
-        * Complete thread creation.
-        */
-       lock_kernel();
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,60)
        /*
-        * Don't care about any signals.
-        */
-       siginitsetinv(&current->blocked, 0);
-
-       daemonize();
-       sprintf(current->comm, "ahd_dv_%d", ahd->unit);
-#else
-       daemonize("ahd_dv_%d", ahd->unit);
-       current->flags |= PF_NOFREEZE;
-#endif
-       unlock_kernel();
-
-       while (1) {
-               /*
-                * Use down_interruptible() rather than down() to
-                * avoid inclusion in the load average.
-                */
-               down_interruptible(&ahd->platform_data->dv_sem);
-
-               /* Check to see if we've been signaled to exit */
-               ahd_lock(ahd, &s);
-               if ((ahd->platform_data->flags & AHD_DV_SHUTDOWN) != 0) {
-                       ahd_unlock(ahd, &s);
-                       break;
-               }
-               ahd_unlock(ahd, &s);
-
-#ifdef AHD_DEBUG
-               if (ahd_debug & AHD_SHOW_DV)
-                       printf("%s: Beginning Domain Validation\n",
-                              ahd_name(ahd));
-#endif
-
-               /*
-                * Wait for any pending commands to drain before proceeding.
-                */
-               ahd_lock(ahd, &s);
-               while (LIST_FIRST(&ahd->pending_scbs) != NULL) {
-                       ahd->platform_data->flags |= AHD_DV_WAIT_SIMQ_EMPTY;
-                       ahd_unlock(ahd, &s);
-                       down_interruptible(&ahd->platform_data->dv_sem);
-                       ahd_lock(ahd, &s);
-               }
-
-               /*
-                * Wait for the SIMQ to be released so that DV is the
-                * only reason the queue is frozen.
-                */
-               while (AHD_DV_SIMQ_FROZEN(ahd) == 0) {
-                       ahd->platform_data->flags |= AHD_DV_WAIT_SIMQ_RELEASE;
-                       ahd_unlock(ahd, &s);
-                       down_interruptible(&ahd->platform_data->dv_sem);
-                       ahd_lock(ahd, &s);
-               }
-               ahd_unlock(ahd, &s);
-
-               for (target = 0; target < AHD_NUM_TARGETS; target++)
-                       ahd_linux_dv_target(ahd, target);
-
-               ahd_lock(ahd, &s);
-               ahd->platform_data->flags &= ~AHD_DV_ACTIVE;
-               ahd_unlock(ahd, &s);
-
-               /*
-                * Release the SIMQ so that normal commands are
-                * allowed to continue on the bus.
-                */
-               ahd_release_simq(ahd);
-       }
-       up(&ahd->platform_data->eh_sem);
-       return (0);
-}
-
-static void
-ahd_linux_kill_dv_thread(struct ahd_softc *ahd)
-{
-       u_long s;
-
-       ahd_lock(ahd, &s);
-       if (ahd->platform_data->dv_pid != 0) {
-               ahd->platform_data->flags |= AHD_DV_SHUTDOWN;
-               ahd_unlock(ahd, &s);
-               up(&ahd->platform_data->dv_sem);
-
-               /*
-                * Use the eh_sem as an indicator that the
-                * dv thread is exiting.  Note that the dv
-                * thread must still return after performing
-                * the up on our semaphore before it has
-                * completely exited this module.  Unfortunately,
-                * there seems to be no easy way to wait for the
-                * exit of a thread for which you are not the
-                * parent (dv threads are parented by init).
-                * Cross your fingers...
-                */
-               down(&ahd->platform_data->eh_sem);
-
-               /*
-                * Mark the dv thread as already dead.  This
-                * avoids attempting to kill it a second time.
-                * This is necessary because we must kill the
-                * DV thread before calling ahd_free() in the
-                * module shutdown case to avoid bogus locking
-                * in the SCSI mid-layer, but we ahd_free() is
-                * called without killing the DV thread in the
-                * instance detach case, so ahd_platform_free()
-                * calls us again to verify that the DV thread
-                * is dead.
-                */
-               ahd->platform_data->dv_pid = 0;
-       } else {
-               ahd_unlock(ahd, &s);
-       }
-}
-
-#define AHD_LINUX_DV_INQ_SHORT_LEN     36
-#define AHD_LINUX_DV_INQ_LEN           256
-#define AHD_LINUX_DV_TIMEOUT           (HZ / 4)
-
-#define AHD_SET_DV_STATE(ahd, targ, newstate) \
-       ahd_set_dv_state(ahd, targ, newstate, __LINE__)
-
-static __inline void
-ahd_set_dv_state(struct ahd_softc *ahd, struct ahd_linux_target *targ,
-                ahd_dv_state newstate, u_int line)
-{
-       ahd_dv_state oldstate;
-
-       oldstate = targ->dv_state;
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV)
-               printf("%s:%d: Going from state %d to state %d\n",
-                      ahd_name(ahd), line, oldstate, newstate);
-#endif
-
-       if (oldstate == newstate)
-               targ->dv_state_retry++;
-       else
-               targ->dv_state_retry = 0;
-       targ->dv_state = newstate;
-}
-
-static void
-ahd_linux_dv_target(struct ahd_softc *ahd, u_int target_offset)
-{
-       struct   ahd_devinfo devinfo;
-       struct   ahd_linux_target *targ;
-       struct   scsi_cmnd *cmd;
-       struct   scsi_device *scsi_dev;
-       struct   scsi_sense_data *sense;
-       uint8_t *buffer;
-       u_long   s;
-       u_int    timeout;
-       int      echo_size;
-
-       sense = NULL;
-       buffer = NULL;
-       echo_size = 0;
-       ahd_lock(ahd, &s);
-       targ = ahd->platform_data->targets[target_offset];
-       if (targ == NULL || (targ->flags & AHD_DV_REQUIRED) == 0) {
-               ahd_unlock(ahd, &s);
-               return;
-       }
-       ahd_compile_devinfo(&devinfo, ahd->our_id, targ->target, /*lun*/0,
-                           targ->channel + 'A', ROLE_INITIATOR);
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               ahd_print_devinfo(ahd, &devinfo);
-               printf("Performing DV\n");
-       }
-#endif
-
-       ahd_unlock(ahd, &s);
-
-       cmd = malloc(sizeof(struct scsi_cmnd), M_DEVBUF, M_WAITOK);
-       scsi_dev = malloc(sizeof(struct scsi_device), M_DEVBUF, M_WAITOK);
-       scsi_dev->host = ahd->platform_data->host;
-       scsi_dev->id = devinfo.target;
-       scsi_dev->lun = devinfo.lun;
-       scsi_dev->channel = devinfo.channel - 'A';
-       ahd->platform_data->dv_scsi_dev = scsi_dev;
-
-       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_INQ_SHORT_ASYNC);
-
-       while (targ->dv_state != AHD_DV_STATE_EXIT) {
-               timeout = AHD_LINUX_DV_TIMEOUT;
-               switch (targ->dv_state) {
-               case AHD_DV_STATE_INQ_SHORT_ASYNC:
-               case AHD_DV_STATE_INQ_ASYNC:
-               case AHD_DV_STATE_INQ_ASYNC_VERIFY:
-                       /*
-                        * Set things to async narrow to reduce the
-                        * chance that the INQ will fail.
-                        */
-                       ahd_lock(ahd, &s);
-                       ahd_set_syncrate(ahd, &devinfo, 0, 0, 0,
-                                        AHD_TRANS_GOAL, /*paused*/FALSE);
-                       ahd_set_width(ahd, &devinfo, MSG_EXT_WDTR_BUS_8_BIT,
-                                     AHD_TRANS_GOAL, /*paused*/FALSE);
-                       ahd_unlock(ahd, &s);
-                       timeout = 10 * HZ;
-                       targ->flags &= ~AHD_INQ_VALID;
-                       /* FALLTHROUGH */
-               case AHD_DV_STATE_INQ_VERIFY:
-               {
-                       u_int inq_len;
-
-                       if (targ->dv_state == AHD_DV_STATE_INQ_SHORT_ASYNC)
-                               inq_len = AHD_LINUX_DV_INQ_SHORT_LEN;
-                       else
-                               inq_len = targ->inq_data->additional_length + 5;
-                       ahd_linux_dv_inq(ahd, cmd, &devinfo, targ, inq_len);
-                       break;
-               }
-               case AHD_DV_STATE_TUR:
-               case AHD_DV_STATE_BUSY:
-                       timeout = 5 * HZ;
-                       ahd_linux_dv_tur(ahd, cmd, &devinfo);
-                       break;
-               case AHD_DV_STATE_REBD:
-                       ahd_linux_dv_rebd(ahd, cmd, &devinfo, targ);
-                       break;
-               case AHD_DV_STATE_WEB:
-                       ahd_linux_dv_web(ahd, cmd, &devinfo, targ);
-                       break;
-
-               case AHD_DV_STATE_REB:
-                       ahd_linux_dv_reb(ahd, cmd, &devinfo, targ);
-                       break;
-
-               case AHD_DV_STATE_SU:
-                       ahd_linux_dv_su(ahd, cmd, &devinfo, targ);
-                       timeout = 50 * HZ;
-                       break;
-
-               default:
-                       ahd_print_devinfo(ahd, &devinfo);
-                       printf("Unknown DV state %d\n", targ->dv_state);
-                       goto out;
-               }
-
-               /* Queue the command and wait for it to complete */
-               /* Abuse eh_timeout in the scsi_cmnd struct for our purposes */
-               init_timer(&cmd->eh_timeout);
-#ifdef AHD_DEBUG
-               if ((ahd_debug & AHD_SHOW_MESSAGES) != 0)
-                       /*
-                        * All of the printfs during negotiation
-                        * really slow down the negotiation.
-                        * Add a bit of time just to be safe.
-                        */
-                       timeout += HZ;
-#endif
-               scsi_add_timer(cmd, timeout, ahd_linux_dv_timeout);
-               /*
-                * In 2.5.X, it is assumed that all calls from the
-                * "midlayer" (which we are emulating) will have the
-                * ahd host lock held.  For other kernels, the
-                * io_request_lock must be held.
-                */
-#if AHD_SCSI_HAS_HOST_LOCK != 0
-               ahd_lock(ahd, &s);
-#else
-               spin_lock_irqsave(&io_request_lock, s);
-#endif
-               ahd_linux_queue(cmd, ahd_linux_dv_complete);
-#if AHD_SCSI_HAS_HOST_LOCK != 0
-               ahd_unlock(ahd, &s);
-#else
-               spin_unlock_irqrestore(&io_request_lock, s);
+        * Under Linux, cards are ordered as follows:
+        *      1) PCI devices that are marked as the boot controller.
+        *      2) PCI devices with BIOS enabled sorted by bus/slot/func.
+        *      3) All remaining PCI devices sorted by bus/slot/func.
+        */
+#if 0
+       value = (lahd->flags & AHD_BOOT_CHANNEL)
+             - (rahd->flags & AHD_BOOT_CHANNEL);
+       if (value != 0)
+               /* Controllers set for boot have a *higher* priority */
+               return (value);
 #endif
-               down_interruptible(&ahd->platform_data->dv_cmd_sem);
-               /*
-                * Wait for the SIMQ to be released so that DV is the
-                * only reason the queue is frozen.
-                */
-               ahd_lock(ahd, &s);
-               while (AHD_DV_SIMQ_FROZEN(ahd) == 0) {
-                       ahd->platform_data->flags |= AHD_DV_WAIT_SIMQ_RELEASE;
-                       ahd_unlock(ahd, &s);
-                       down_interruptible(&ahd->platform_data->dv_sem);
-                       ahd_lock(ahd, &s);
-               }
-               ahd_unlock(ahd, &s);
-
-               ahd_linux_dv_transition(ahd, cmd, &devinfo, targ);
-       }
 
-out:
-       if ((targ->flags & AHD_INQ_VALID) != 0
-        && ahd_linux_get_device(ahd, devinfo.channel - 'A',
-                                devinfo.target, devinfo.lun,
-                                /*alloc*/FALSE) == NULL) {
-               /*
-                * The DV state machine failed to configure this device.  
-                * This is normal if DV is disabled.  Since we have inquiry
-                * data, filter it and use the "optimistic" negotiation
-                * parameters found in the inquiry string.
-                */
-               ahd_linux_filter_inquiry(ahd, &devinfo);
-               if ((targ->flags & (AHD_BASIC_DV|AHD_ENHANCED_DV)) != 0) {
-                       ahd_print_devinfo(ahd, &devinfo);
-                       printf("DV failed to configure device.  "
-                              "Please file a bug report against "
-                              "this driver.\n");
-               }
-       }
-
-       if (cmd != NULL)
-               free(cmd, M_DEVBUF);
+       value = (lahd->flags & AHD_BIOS_ENABLED)
+             - (rahd->flags & AHD_BIOS_ENABLED);
+       if (value != 0)
+               /* Controllers with BIOS enabled have a *higher* priority */
+               return (value);
 
-       if (ahd->platform_data->dv_scsi_dev != NULL) {
-               free(ahd->platform_data->dv_scsi_dev, M_DEVBUF);
-               ahd->platform_data->dv_scsi_dev = NULL;
-       }
+       /* Still equal.  Sort by bus/slot/func. */
+       if (aic79xx_reverse_scan != 0)
+               value = ahd_get_pci_bus(lahd->dev_softc)
+                     - ahd_get_pci_bus(rahd->dev_softc);
+       else
+               value = ahd_get_pci_bus(rahd->dev_softc)
+                     - ahd_get_pci_bus(lahd->dev_softc);
+       if (value != 0)
+               return (value);
+       if (aic79xx_reverse_scan != 0)
+               value = ahd_get_pci_slot(lahd->dev_softc)
+                     - ahd_get_pci_slot(rahd->dev_softc);
+       else
+               value = ahd_get_pci_slot(rahd->dev_softc)
+                     - ahd_get_pci_slot(lahd->dev_softc);
+       if (value != 0)
+               return (value);
 
-       ahd_lock(ahd, &s);
-       if (targ->dv_buffer != NULL) {
-               free(targ->dv_buffer, M_DEVBUF);
-               targ->dv_buffer = NULL;
-       }
-       if (targ->dv_buffer1 != NULL) {
-               free(targ->dv_buffer1, M_DEVBUF);
-               targ->dv_buffer1 = NULL;
-       }
-       targ->flags &= ~AHD_DV_REQUIRED;
-       if (targ->refcount == 0)
-               ahd_linux_free_target(ahd, targ);
-       ahd_unlock(ahd, &s);
+       value = rahd->channel - lahd->channel;
+       return (value);
 }
 
-static __inline int
-ahd_linux_dv_fallback(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
+static void
+ahd_linux_setup_iocell_info(u_long index, int instance, int targ, int32_t value)
 {
-       u_long s;
-       int retval;
 
-       ahd_lock(ahd, &s);
-       retval = ahd_linux_fallback(ahd, devinfo);
-       ahd_unlock(ahd, &s);
+       if ((instance >= 0)
+        && (instance < NUM_ELEMENTS(aic79xx_iocell_info))) {
+               uint8_t *iocell_info;
 
-       return (retval);
+               iocell_info = (uint8_t*)&aic79xx_iocell_info[instance];
+               iocell_info[index] = value & 0xFFFF;
+               if (bootverbose)
+                       printf("iocell[%d:%ld] = %d\n", instance, index, value);
+       }
 }
 
 static void
-ahd_linux_dv_transition(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
-                       struct ahd_devinfo *devinfo,
-                       struct ahd_linux_target *targ)
+ahd_linux_setup_tag_info_global(char *p)
 {
-       u_int32_t status;
-
-       status = aic_error_action(cmd, targ->inq_data,
-                                 ahd_cmd_get_transaction_status(cmd),
-                                 ahd_cmd_get_scsi_status(cmd));
-
-       
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               ahd_print_devinfo(ahd, devinfo);
-               printf("Entering ahd_linux_dv_transition, state= %d, "
-                      "status= 0x%x, cmd->result= 0x%x\n", targ->dv_state,
-                      status, cmd->result);
-       }
-#endif
-
-       switch (targ->dv_state) {
-       case AHD_DV_STATE_INQ_SHORT_ASYNC:
-       case AHD_DV_STATE_INQ_ASYNC:
-               switch (status & SS_MASK) {
-               case SS_NOP:
-               {
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state+1);
-                       break;
-               }
-               case SS_INQ_REFRESH:
-                       AHD_SET_DV_STATE(ahd, targ,
-                                        AHD_DV_STATE_INQ_SHORT_ASYNC);
-                       break;
-               case SS_TUR:
-               case SS_RETRY:
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state);
-                       if (ahd_cmd_get_transaction_status(cmd)
-                        == CAM_REQUEUE_REQ)
-                               targ->dv_state_retry--;
-                       if ((status & SS_ERRMASK) == EBUSY)
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_BUSY);
-                       if (targ->dv_state_retry < 10)
-                               break;
-                       /* FALLTHROUGH */
-               default:
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-#ifdef AHD_DEBUG
-                       if (ahd_debug & AHD_SHOW_DV) {
-                               ahd_print_devinfo(ahd, devinfo);
-                               printf("Failed DV inquiry, skipping\n");
-                       }
-#endif
-                       break;
-               }
-               break;
-       case AHD_DV_STATE_INQ_ASYNC_VERIFY:
-               switch (status & SS_MASK) {
-               case SS_NOP:
-               {
-                       u_int xportflags;
-                       u_int spi3data;
-
-                       if (memcmp(targ->inq_data, targ->dv_buffer,
-                                  AHD_LINUX_DV_INQ_LEN) != 0) {
-                               /*
-                                * Inquiry data must have changed.
-                                * Try from the top again.
-                                */
-                               AHD_SET_DV_STATE(ahd, targ,
-                                                AHD_DV_STATE_INQ_SHORT_ASYNC);
-                               break;
-                       }
-
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state+1);
-                       targ->flags |= AHD_INQ_VALID;
-                       if (ahd_linux_user_dv_setting(ahd) == 0)
-                               break;
+       int tags, i, j;
 
-                       xportflags = targ->inq_data->flags;
-                       if ((xportflags & (SID_Sync|SID_WBus16)) == 0)
-                               break;
+       tags = simple_strtoul(p + 1, NULL, 0) & 0xff;
+       printf("Setting Global Tags= %d\n", tags);
 
-                       spi3data = targ->inq_data->spi3data;
-                       switch (spi3data & SID_SPI_CLOCK_DT_ST) {
-                       default:
-                       case SID_SPI_CLOCK_ST:
-                               /* Assume only basic DV is supported. */
-                               targ->flags |= AHD_BASIC_DV;
-                               break;
-                       case SID_SPI_CLOCK_DT:
-                       case SID_SPI_CLOCK_DT_ST:
-                               targ->flags |= AHD_ENHANCED_DV;
-                               break;
-                       }
-                       break;
-               }
-               case SS_INQ_REFRESH:
-                       AHD_SET_DV_STATE(ahd, targ,
-                                        AHD_DV_STATE_INQ_SHORT_ASYNC);
-                       break;
-               case SS_TUR:
-               case SS_RETRY:
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state);
-                       if (ahd_cmd_get_transaction_status(cmd)
-                        == CAM_REQUEUE_REQ)
-                               targ->dv_state_retry--;
-
-                       if ((status & SS_ERRMASK) == EBUSY)
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_BUSY);
-                       if (targ->dv_state_retry < 10)
-                               break;
-                       /* FALLTHROUGH */
-               default:
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-#ifdef AHD_DEBUG
-                       if (ahd_debug & AHD_SHOW_DV) {
-                               ahd_print_devinfo(ahd, devinfo);
-                               printf("Failed DV inquiry, skipping\n");
-                       }
-#endif
-                       break;
+       for (i = 0; i < NUM_ELEMENTS(aic79xx_tag_info); i++) {
+               for (j = 0; j < AHD_NUM_TARGETS; j++) {
+                       aic79xx_tag_info[i].tag_commands[j] = tags;
                }
-               break;
-       case AHD_DV_STATE_INQ_VERIFY:
-               switch (status & SS_MASK) {
-               case SS_NOP:
-               {
-
-                       if (memcmp(targ->inq_data, targ->dv_buffer,
-                                  AHD_LINUX_DV_INQ_LEN) == 0) {
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                               break;
-                       }
+       }
+}
 
-#ifdef AHD_DEBUG
-                       if (ahd_debug & AHD_SHOW_DV) {
-                               int i;
+static void
+ahd_linux_setup_tag_info(u_long arg, int instance, int targ, int32_t value)
+{
 
-                               ahd_print_devinfo(ahd, devinfo);
-                               printf("Inquiry buffer mismatch:");
-                               for (i = 0; i < AHD_LINUX_DV_INQ_LEN; i++) {
-                                       if ((i & 0xF) == 0)
-                                               printf("\n        ");
-                                       printf("0x%x:0x0%x ",
-                                              ((uint8_t *)targ->inq_data)[i], 
-                                              targ->dv_buffer[i]);
-                               }
-                               printf("\n");
-                       }
-#endif
+       if ((instance >= 0) && (targ >= 0)
+        && (instance < NUM_ELEMENTS(aic79xx_tag_info))
+        && (targ < AHD_NUM_TARGETS)) {
+               aic79xx_tag_info[instance].tag_commands[targ] = value & 0x1FF;
+               if (bootverbose)
+                       printf("tag_info[%d:%d] = %d\n", instance, targ, value);
+       }
+}
 
-                       if (ahd_linux_dv_fallback(ahd, devinfo) != 0) {
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                               break;
-                       }
-                       /*
-                        * Do not count "falling back"
-                        * against our retries.
-                        */
-                       targ->dv_state_retry = 0;
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state);
-                       break;
-               }
-               case SS_INQ_REFRESH:
-                       AHD_SET_DV_STATE(ahd, targ,
-                                        AHD_DV_STATE_INQ_SHORT_ASYNC);
-                       break;
-               case SS_TUR:
-               case SS_RETRY:
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state);
-                       if (ahd_cmd_get_transaction_status(cmd)
-                        == CAM_REQUEUE_REQ) {
-                               targ->dv_state_retry--;
-                       } else if ((status & SSQ_FALLBACK) != 0) {
-                               if (ahd_linux_dv_fallback(ahd, devinfo) != 0) {
-                                       AHD_SET_DV_STATE(ahd, targ,
-                                                        AHD_DV_STATE_EXIT);
-                                       break;
-                               }
-                               /*
-                                * Do not count "falling back"
-                                * against our retries.
-                                */
-                               targ->dv_state_retry = 0;
-                       } else if ((status & SS_ERRMASK) == EBUSY)
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_BUSY);
-                       if (targ->dv_state_retry < 10)
-                               break;
-                       /* FALLTHROUGH */
-               default:
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-#ifdef AHD_DEBUG
-                       if (ahd_debug & AHD_SHOW_DV) {
-                               ahd_print_devinfo(ahd, devinfo);
-                               printf("Failed DV inquiry, skipping\n");
-                       }
-#endif
-                       break;
-               }
-               break;
+static char *
+ahd_parse_brace_option(char *opt_name, char *opt_arg, char *end, int depth,
+                      void (*callback)(u_long, int, int, int32_t),
+                      u_long callback_arg)
+{
+       char    *tok_end;
+       char    *tok_end2;
+       int      i;
+       int      instance;
+       int      targ;
+       int      done;
+       char     tok_list[] = {'.', ',', '{', '}', '\0'};
 
-       case AHD_DV_STATE_TUR:
-               switch (status & SS_MASK) {
-               case SS_NOP:
-                       if ((targ->flags & AHD_BASIC_DV) != 0) {
-                               ahd_linux_filter_inquiry(ahd, devinfo);
-                               AHD_SET_DV_STATE(ahd, targ,
-                                                AHD_DV_STATE_INQ_VERIFY);
-                       } else if ((targ->flags & AHD_ENHANCED_DV) != 0) {
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_REBD);
+       /* All options use a ':' name/arg separator */
+       if (*opt_arg != ':')
+               return (opt_arg);
+       opt_arg++;
+       instance = -1;
+       targ = -1;
+       done = FALSE;
+       /*
+        * Restore separator that may be in
+        * the middle of our option argument.
+        */
+       tok_end = strchr(opt_arg, '\0');
+       if (tok_end < end)
+               *tok_end = ',';
+       while (!done) {
+               switch (*opt_arg) {
+               case '{':
+                       if (instance == -1) {
+                               instance = 0;
                        } else {
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                       }
-                       break;
-               case SS_RETRY:
-               case SS_TUR:
-                       if ((status & SS_ERRMASK) == EBUSY) {
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_BUSY);
-                               break;
-                       }
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state);
-                       if (ahd_cmd_get_transaction_status(cmd)
-                        == CAM_REQUEUE_REQ) {
-                               targ->dv_state_retry--;
-                       } else if ((status & SSQ_FALLBACK) != 0) {
-                               if (ahd_linux_dv_fallback(ahd, devinfo) != 0) {
-                                       AHD_SET_DV_STATE(ahd, targ,
-                                                        AHD_DV_STATE_EXIT);
-                                       break;
-                               }
-                               /*
-                                * Do not count "falling back"
-                                * against our retries.
-                                */
-                               targ->dv_state_retry = 0;
-                       }
-                       if (targ->dv_state_retry >= 10) {
-#ifdef AHD_DEBUG
-                               if (ahd_debug & AHD_SHOW_DV) {
-                                       ahd_print_devinfo(ahd, devinfo);
-                                       printf("DV TUR reties exhausted\n");
+                               if (depth > 1) {
+                                       if (targ == -1)
+                                               targ = 0;
+                               } else {
+                                       printf("Malformed Option %s\n",
+                                              opt_name);
+                                       done = TRUE;
                                }
-#endif
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                               break;
                        }
-                       if (status & SSQ_DELAY)
-                               ssleep(1);
-
+                       opt_arg++;
+                       break;
+               case '}':
+                       if (targ != -1)
+                               targ = -1;
+                       else if (instance != -1)
+                               instance = -1;
+                       opt_arg++;
                        break;
-               case SS_START:
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_SU);
+               case ',':
+               case '.':
+                       if (instance == -1)
+                               done = TRUE;
+                       else if (targ >= 0)
+                               targ++;
+                       else if (instance >= 0)
+                               instance++;
+                       opt_arg++;
                        break;
-               case SS_INQ_REFRESH:
-                       AHD_SET_DV_STATE(ahd, targ,
-                                        AHD_DV_STATE_INQ_SHORT_ASYNC);
+               case '\0':
+                       done = TRUE;
                        break;
                default:
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
+                       tok_end = end;
+                       for (i = 0; tok_list[i]; i++) {
+                               tok_end2 = strchr(opt_arg, tok_list[i]);
+                               if ((tok_end2) && (tok_end2 < tok_end))
+                                       tok_end = tok_end2;
+                       }
+                       callback(callback_arg, instance, targ,
+                                simple_strtol(opt_arg, NULL, 0));
+                       opt_arg = tok_end;
                        break;
                }
-               break;
+       }
+       return (opt_arg);
+}
 
-       case AHD_DV_STATE_REBD:
-               switch (status & SS_MASK) {
-               case SS_NOP:
-               {
-                       uint32_t echo_size;
+/*
+ * Handle Linux boot parameters. This routine allows for assigning a value
+ * to a parameter with a ':' between the parameter and the value.
+ * ie. aic79xx=stpwlev:1,extended
+ */
+static int
+aic79xx_setup(char *s)
+{
+       int     i, n;
+       char   *p;
+       char   *end;
 
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_WEB);
-                       echo_size = scsi_3btoul(&targ->dv_buffer[1]);
-                       echo_size &= 0x1FFF;
+       static struct {
+               const char *name;
+               uint32_t *flag;
+       } options[] = {
+               { "extended", &aic79xx_extended },
+               { "no_reset", &aic79xx_no_reset },
+               { "verbose", &aic79xx_verbose },
+               { "allow_memio", &aic79xx_allow_memio},
 #ifdef AHD_DEBUG
-                       if (ahd_debug & AHD_SHOW_DV) {
-                               ahd_print_devinfo(ahd, devinfo);
-                               printf("Echo buffer size= %d\n", echo_size);
-                       }
+               { "debug", &ahd_debug },
 #endif
-                       if (echo_size == 0) {
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                               break;
-                       }
+               { "reverse_scan", &aic79xx_reverse_scan },
+               { "periodic_otag", &aic79xx_periodic_otag },
+               { "pci_parity", &aic79xx_pci_parity },
+               { "seltime", &aic79xx_seltime },
+               { "tag_info", NULL },
+               { "global_tag_depth", NULL},
+               { "slewrate", NULL },
+               { "precomp", NULL },
+               { "amplitude", NULL },
+       };
 
-                       /* Generate the buffer pattern */
-                       targ->dv_echo_size = echo_size;
-                       ahd_linux_generate_dv_pattern(targ);
-                       /*
-                        * Setup initial negotiation values.
-                        */
-                       ahd_linux_filter_inquiry(ahd, devinfo);
-                       break;
-               }
-               case SS_INQ_REFRESH:
-                       AHD_SET_DV_STATE(ahd, targ,
-                                        AHD_DV_STATE_INQ_SHORT_ASYNC);
-                       break;
-               case SS_RETRY:
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state);
-                       if (ahd_cmd_get_transaction_status(cmd)
-                        == CAM_REQUEUE_REQ)
-                               targ->dv_state_retry--;
-                       if (targ->dv_state_retry <= 10)
-                               break;
-#ifdef AHD_DEBUG
-                       if (ahd_debug & AHD_SHOW_DV) {
-                               ahd_print_devinfo(ahd, devinfo);
-                               printf("DV REBD reties exhausted\n");
-                       }
-#endif
-                       /* FALLTHROUGH */
-               case SS_FATAL:
-               default:
-                       /*
-                        * Setup initial negotiation values
-                        * and try level 1 DV.
-                        */
-                       ahd_linux_filter_inquiry(ahd, devinfo);
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_INQ_VERIFY);
-                       targ->dv_echo_size = 0;
-                       break;
-               }
-               break;
+       end = strchr(s, '\0');
 
-       case AHD_DV_STATE_WEB:
-               switch (status & SS_MASK) {
-               case SS_NOP:
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_REB);
-                       break;
-               case SS_INQ_REFRESH:
-                       AHD_SET_DV_STATE(ahd, targ,
-                                        AHD_DV_STATE_INQ_SHORT_ASYNC);
-                       break;
-               case SS_RETRY:
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state);
-                       if (ahd_cmd_get_transaction_status(cmd)
-                        == CAM_REQUEUE_REQ) {
-                               targ->dv_state_retry--;
-                       } else if ((status & SSQ_FALLBACK) != 0) {
-                               if (ahd_linux_dv_fallback(ahd, devinfo) != 0) {
-                                       AHD_SET_DV_STATE(ahd, targ,
-                                                        AHD_DV_STATE_EXIT);
-                                       break;
-                               }
-                               /*
-                                * Do not count "falling back"
-                                * against our retries.
-                                */
-                               targ->dv_state_retry = 0;
-                       }
-                       if (targ->dv_state_retry <= 10)
-                               break;
-                       /* FALLTHROUGH */
-#ifdef AHD_DEBUG
-                       if (ahd_debug & AHD_SHOW_DV) {
-                               ahd_print_devinfo(ahd, devinfo);
-                               printf("DV WEB reties exhausted\n");
-                       }
-#endif
-               default:
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                       break;
-               }
-               break;
+       /*
+        * XXX ia64 gcc isn't smart enough to know that NUM_ELEMENTS
+        * will never be 0 in this case.
+        */      
+       n = 0;  
 
-       case AHD_DV_STATE_REB:
-               switch (status & SS_MASK) {
-               case SS_NOP:
-                       if (memcmp(targ->dv_buffer, targ->dv_buffer1,
-                                  targ->dv_echo_size) != 0) {
-                               if (ahd_linux_dv_fallback(ahd, devinfo) != 0)
-                                       AHD_SET_DV_STATE(ahd, targ,
-                                                        AHD_DV_STATE_EXIT);
-                               else
-                                       AHD_SET_DV_STATE(ahd, targ,
-                                                        AHD_DV_STATE_WEB);
-                               break;
-                       }
-                       
-                       if (targ->dv_buffer != NULL) {
-                               free(targ->dv_buffer, M_DEVBUF);
-                               targ->dv_buffer = NULL;
-                       }
-                       if (targ->dv_buffer1 != NULL) {
-                               free(targ->dv_buffer1, M_DEVBUF);
-                               targ->dv_buffer1 = NULL;
-                       }
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                       break;
-               case SS_INQ_REFRESH:
-                       AHD_SET_DV_STATE(ahd, targ,
-                                        AHD_DV_STATE_INQ_SHORT_ASYNC);
-                       break;
-               case SS_RETRY:
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state);
-                       if (ahd_cmd_get_transaction_status(cmd)
-                        == CAM_REQUEUE_REQ) {
-                               targ->dv_state_retry--;
-                       } else if ((status & SSQ_FALLBACK) != 0) {
-                               if (ahd_linux_dv_fallback(ahd, devinfo) != 0) {
-                                       AHD_SET_DV_STATE(ahd, targ,
-                                                        AHD_DV_STATE_EXIT);
-                                       break;
-                               }
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_WEB);
-                       }
-                       if (targ->dv_state_retry <= 10) {
-                               if ((status & (SSQ_DELAY_RANDOM|SSQ_DELAY))!= 0)
-                                       msleep(ahd->our_id*1000/10);
-                               break;
-                       }
-#ifdef AHD_DEBUG
-                       if (ahd_debug & AHD_SHOW_DV) {
-                               ahd_print_devinfo(ahd, devinfo);
-                               printf("DV REB reties exhausted\n");
-                       }
-#endif
-                       /* FALLTHROUGH */
-               default:
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                       break;
-               }
-               break;
+       while ((p = strsep(&s, ",.")) != NULL) {
+               if (*p == '\0')
+                       continue;
+               for (i = 0; i < NUM_ELEMENTS(options); i++) {
 
-       case AHD_DV_STATE_SU:
-               switch (status & SS_MASK) {
-               case SS_NOP:
-               case SS_INQ_REFRESH:
-                       AHD_SET_DV_STATE(ahd, targ,
-                                        AHD_DV_STATE_INQ_SHORT_ASYNC);
-                       break;
-               default:
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                       break;
+                       n = strlen(options[i].name);
+                       if (strncmp(options[i].name, p, n) == 0)
+                               break;
                }
-               break;
+               if (i == NUM_ELEMENTS(options))
+                       continue;
 
-       case AHD_DV_STATE_BUSY:
-               switch (status & SS_MASK) {
-               case SS_NOP:
-               case SS_INQ_REFRESH:
-                       AHD_SET_DV_STATE(ahd, targ,
-                                        AHD_DV_STATE_INQ_SHORT_ASYNC);
-                       break;
-               case SS_TUR:
-               case SS_RETRY:
-                       AHD_SET_DV_STATE(ahd, targ, targ->dv_state);
-                       if (ahd_cmd_get_transaction_status(cmd)
-                        == CAM_REQUEUE_REQ) {
-                               targ->dv_state_retry--;
-                       } else if (targ->dv_state_retry < 60) {
-                               if ((status & SSQ_DELAY) != 0)
-                                       ssleep(1);
-                       } else {
-#ifdef AHD_DEBUG
-                               if (ahd_debug & AHD_SHOW_DV) {
-                                       ahd_print_devinfo(ahd, devinfo);
-                                       printf("DV BUSY reties exhausted\n");
-                               }
-#endif
-                               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                       }
-                       break;
-               default:
-                       AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-                       break;
+               if (strncmp(p, "global_tag_depth", n) == 0) {
+                       ahd_linux_setup_tag_info_global(p + n);
+               } else if (strncmp(p, "tag_info", n) == 0) {
+                       s = ahd_parse_brace_option("tag_info", p + n, end,
+                           2, ahd_linux_setup_tag_info, 0);
+               } else if (strncmp(p, "slewrate", n) == 0) {
+                       s = ahd_parse_brace_option("slewrate",
+                           p + n, end, 1, ahd_linux_setup_iocell_info,
+                           AIC79XX_SLEWRATE_INDEX);
+               } else if (strncmp(p, "precomp", n) == 0) {
+                       s = ahd_parse_brace_option("precomp",
+                           p + n, end, 1, ahd_linux_setup_iocell_info,
+                           AIC79XX_PRECOMP_INDEX);
+               } else if (strncmp(p, "amplitude", n) == 0) {
+                       s = ahd_parse_brace_option("amplitude",
+                           p + n, end, 1, ahd_linux_setup_iocell_info,
+                           AIC79XX_AMPLITUDE_INDEX);
+               } else if (p[n] == ':') {
+                       *(options[i].flag) = simple_strtoul(p + n + 1, NULL, 0);
+               } else if (!strncmp(p, "verbose", n)) {
+                       *(options[i].flag) = 1;
+               } else {
+                       *(options[i].flag) ^= 0xFFFFFFFF;
                }
-               break;
-
-       default:
-               printf("%s: Invalid DV completion state %d\n", ahd_name(ahd),
-                      targ->dv_state);
-               AHD_SET_DV_STATE(ahd, targ, AHD_DV_STATE_EXIT);
-               break;
        }
+       return 1;
 }
 
-static void
-ahd_linux_dv_fill_cmd(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
-                     struct ahd_devinfo *devinfo)
-{
-       memset(cmd, 0, sizeof(struct scsi_cmnd));
-       cmd->device = ahd->platform_data->dv_scsi_dev;
-       cmd->scsi_done = ahd_linux_dv_complete;
-}
+__setup("aic79xx=", aic79xx_setup);
 
-/*
- * Synthesize an inquiry command.  On the return trip, it'll be
- * sniffed and the device transfer settings set for us.
- */
-static void
-ahd_linux_dv_inq(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
-                struct ahd_devinfo *devinfo, struct ahd_linux_target *targ,
-                u_int request_length)
+uint32_t aic79xx_verbose;
+
+int
+ahd_linux_register_host(struct ahd_softc *ahd, struct scsi_host_template *template)
 {
+       char    buf[80];
+       struct  Scsi_Host *host;
+       char    *new_name;
+       u_long  s;
 
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               ahd_print_devinfo(ahd, devinfo);
-               printf("Sending INQ\n");
-       }
-#endif
-       if (targ->inq_data == NULL)
-               targ->inq_data = malloc(AHD_LINUX_DV_INQ_LEN,
-                                       M_DEVBUF, M_WAITOK);
-       if (targ->dv_state > AHD_DV_STATE_INQ_ASYNC) {
-               if (targ->dv_buffer != NULL)
-                       free(targ->dv_buffer, M_DEVBUF);
-               targ->dv_buffer = malloc(AHD_LINUX_DV_INQ_LEN,
-                                        M_DEVBUF, M_WAITOK);
+       template->name = ahd->description;
+       host = scsi_host_alloc(template, sizeof(struct ahd_softc *));
+       if (host == NULL)
+               return (ENOMEM);
+
+       *((struct ahd_softc **)host->hostdata) = ahd;
+       ahd_lock(ahd, &s);
+       scsi_assign_lock(host, &ahd->platform_data->spin_lock);
+       ahd->platform_data->host = host;
+       host->can_queue = AHD_MAX_QUEUE;
+       host->cmd_per_lun = 2;
+       host->sg_tablesize = AHD_NSEG;
+       host->this_id = ahd->our_id;
+       host->irq = ahd->platform_data->irq;
+       host->max_id = (ahd->features & AHD_WIDE) ? 16 : 8;
+       host->max_lun = AHD_NUM_LUNS;
+       host->max_channel = 0;
+       host->sg_tablesize = AHD_NSEG;
+       ahd_set_unit(ahd, ahd_linux_unit++);
+       sprintf(buf, "scsi%d", host->host_no);
+       new_name = malloc(strlen(buf) + 1, M_DEVBUF, M_NOWAIT);
+       if (new_name != NULL) {
+               strcpy(new_name, buf);
+               ahd_set_name(ahd, new_name);
        }
+       host->unique_id = ahd->unit;
+       ahd_linux_initialize_scsi_bus(ahd);
+       ahd_intr_enable(ahd, TRUE);
+       ahd_unlock(ahd, &s);
 
-       ahd_linux_dv_fill_cmd(ahd, cmd, devinfo);
-       cmd->sc_data_direction = DMA_FROM_DEVICE;
-       cmd->cmd_len = 6;
-       cmd->cmnd[0] = INQUIRY;
-       cmd->cmnd[4] = request_length;
-       cmd->request_bufflen = request_length;
-       if (targ->dv_state > AHD_DV_STATE_INQ_ASYNC)
-               cmd->request_buffer = targ->dv_buffer;
-       else
-               cmd->request_buffer = targ->inq_data;
-       memset(cmd->request_buffer, 0, AHD_LINUX_DV_INQ_LEN);
+       host->transportt = ahd_linux_transport_template;
+
+       scsi_add_host(host, &ahd->dev_softc->dev); /* XXX handle failure */
+       scsi_scan_host(host);
+       return (0);
 }
 
-static void
-ahd_linux_dv_tur(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
-                struct ahd_devinfo *devinfo)
+uint64_t
+ahd_linux_get_memsize(void)
 {
+       struct sysinfo si;
 
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               ahd_print_devinfo(ahd, devinfo);
-               printf("Sending TUR\n");
-       }
-#endif
-       /* Do a TUR to clear out any non-fatal transitional state */
-       ahd_linux_dv_fill_cmd(ahd, cmd, devinfo);
-       cmd->sc_data_direction = DMA_NONE;
-       cmd->cmd_len = 6;
-       cmd->cmnd[0] = TEST_UNIT_READY;
+       si_meminfo(&si);
+       return ((uint64_t)si.totalram << PAGE_SHIFT);
 }
 
-#define AHD_REBD_LEN 4
-
+/*
+ * Place the SCSI bus into a known state by either resetting it,
+ * or forcing transfer negotiations on the next command to any
+ * target.
+ */
 static void
-ahd_linux_dv_rebd(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
-                struct ahd_devinfo *devinfo, struct ahd_linux_target *targ)
+ahd_linux_initialize_scsi_bus(struct ahd_softc *ahd)
 {
+       u_int target_id;
+       u_int numtarg;
 
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               ahd_print_devinfo(ahd, devinfo);
-               printf("Sending REBD\n");
-       }
-#endif
-       if (targ->dv_buffer != NULL)
-               free(targ->dv_buffer, M_DEVBUF);
-       targ->dv_buffer = malloc(AHD_REBD_LEN, M_DEVBUF, M_WAITOK);
-       ahd_linux_dv_fill_cmd(ahd, cmd, devinfo);
-       cmd->sc_data_direction = DMA_FROM_DEVICE;
-       cmd->cmd_len = 10;
-       cmd->cmnd[0] = READ_BUFFER;
-       cmd->cmnd[1] = 0x0b;
-       scsi_ulto3b(AHD_REBD_LEN, &cmd->cmnd[6]);
-       cmd->request_bufflen = AHD_REBD_LEN;
-       cmd->underflow = cmd->request_bufflen;
-       cmd->request_buffer = targ->dv_buffer;
-}
+       target_id = 0;
+       numtarg = 0;
 
-static void
-ahd_linux_dv_web(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
-                struct ahd_devinfo *devinfo, struct ahd_linux_target *targ)
-{
+       if (aic79xx_no_reset != 0)
+               ahd->flags &= ~AHD_RESET_BUS_A;
 
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               ahd_print_devinfo(ahd, devinfo);
-               printf("Sending WEB\n");
-       }
-#endif
-       ahd_linux_dv_fill_cmd(ahd, cmd, devinfo);
-       cmd->sc_data_direction = DMA_TO_DEVICE;
-       cmd->cmd_len = 10;
-       cmd->cmnd[0] = WRITE_BUFFER;
-       cmd->cmnd[1] = 0x0a;
-       scsi_ulto3b(targ->dv_echo_size, &cmd->cmnd[6]);
-       cmd->request_bufflen = targ->dv_echo_size;
-       cmd->underflow = cmd->request_bufflen;
-       cmd->request_buffer = targ->dv_buffer;
-}
+       if ((ahd->flags & AHD_RESET_BUS_A) != 0)
+               ahd_reset_channel(ahd, 'A', /*initiate_reset*/TRUE);
+       else
+               numtarg = (ahd->features & AHD_WIDE) ? 16 : 8;
 
-static void
-ahd_linux_dv_reb(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
-                struct ahd_devinfo *devinfo, struct ahd_linux_target *targ)
-{
+       /*
+        * Force negotiation to async for all targets that
+        * will not see an initial bus reset.
+        */
+       for (; target_id < numtarg; target_id++) {
+               struct ahd_devinfo devinfo;
+               struct ahd_initiator_tinfo *tinfo;
+               struct ahd_tmode_tstate *tstate;
 
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               ahd_print_devinfo(ahd, devinfo);
-               printf("Sending REB\n");
+               tinfo = ahd_fetch_transinfo(ahd, 'A', ahd->our_id,
+                                           target_id, &tstate);
+               ahd_compile_devinfo(&devinfo, ahd->our_id, target_id,
+                                   CAM_LUN_WILDCARD, 'A', ROLE_INITIATOR);
+               ahd_update_neg_request(ahd, &devinfo, tstate,
+                                      tinfo, AHD_NEG_ALWAYS);
+       }
+       /* Give the bus some time to recover */
+       if ((ahd->flags & AHD_RESET_BUS_A) != 0) {
+               ahd_freeze_simq(ahd);
+               init_timer(&ahd->platform_data->reset_timer);
+               ahd->platform_data->reset_timer.data = (u_long)ahd;
+               ahd->platform_data->reset_timer.expires =
+                   jiffies + (AIC79XX_RESET_DELAY * HZ)/1000;
+               ahd->platform_data->reset_timer.function =
+                   (ahd_linux_callback_t *)ahd_release_simq;
+               add_timer(&ahd->platform_data->reset_timer);
        }
-#endif
-       ahd_linux_dv_fill_cmd(ahd, cmd, devinfo);
-       cmd->sc_data_direction = DMA_FROM_DEVICE;
-       cmd->cmd_len = 10;
-       cmd->cmnd[0] = READ_BUFFER;
-       cmd->cmnd[1] = 0x0a;
-       scsi_ulto3b(targ->dv_echo_size, &cmd->cmnd[6]);
-       cmd->request_bufflen = targ->dv_echo_size;
-       cmd->underflow = cmd->request_bufflen;
-       cmd->request_buffer = targ->dv_buffer1;
 }
 
-static void
-ahd_linux_dv_su(struct ahd_softc *ahd, struct scsi_cmnd *cmd,
-               struct ahd_devinfo *devinfo,
-               struct ahd_linux_target *targ)
+int
+ahd_platform_alloc(struct ahd_softc *ahd, void *platform_arg)
 {
-       u_int le;
-
-       le = SID_IS_REMOVABLE(targ->inq_data) ? SSS_LOEJ : 0;
-
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               ahd_print_devinfo(ahd, devinfo);
-               printf("Sending SU\n");
-       }
-#endif
-       ahd_linux_dv_fill_cmd(ahd, cmd, devinfo);
-       cmd->sc_data_direction = DMA_NONE;
-       cmd->cmd_len = 6;
-       cmd->cmnd[0] = START_STOP_UNIT;
-       cmd->cmnd[4] = le | SSS_START;
+       ahd->platform_data =
+           malloc(sizeof(struct ahd_platform_data), M_DEVBUF, M_NOWAIT);
+       if (ahd->platform_data == NULL)
+               return (ENOMEM);
+       memset(ahd->platform_data, 0, sizeof(struct ahd_platform_data));
+       ahd->platform_data->irq = AHD_LINUX_NOIRQ;
+       ahd_lockinit(ahd);
+       init_MUTEX_LOCKED(&ahd->platform_data->eh_sem);
+       ahd->seltime = (aic79xx_seltime & 0x3) << 4;
+       return (0);
 }
 
-static int
-ahd_linux_fallback(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
+void
+ahd_platform_free(struct ahd_softc *ahd)
 {
-       struct  ahd_linux_target *targ;
-       struct  ahd_initiator_tinfo *tinfo;
-       struct  ahd_transinfo *goal;
-       struct  ahd_tmode_tstate *tstate;
-       u_int   width;
-       u_int   period;
-       u_int   offset;
-       u_int   ppr_options;
-       u_int   cur_speed;
-       u_int   wide_speed;
-       u_int   narrow_speed;
-       u_int   fallback_speed;
-
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               ahd_print_devinfo(ahd, devinfo);
-               printf("Trying to fallback\n");
-       }
-#endif
-       targ = ahd->platform_data->targets[devinfo->target_offset];
-       tinfo = ahd_fetch_transinfo(ahd, devinfo->channel,
-                                   devinfo->our_scsiid,
-                                   devinfo->target, &tstate);
-       goal = &tinfo->goal;
-       width = goal->width;
-       period = goal->period;
-       offset = goal->offset;
-       ppr_options = goal->ppr_options;
-       if (offset == 0)
-               period = AHD_ASYNC_XFER_PERIOD;
-       if (targ->dv_next_narrow_period == 0)
-               targ->dv_next_narrow_period = MAX(period, AHD_SYNCRATE_ULTRA2);
-       if (targ->dv_next_wide_period == 0)
-               targ->dv_next_wide_period = period;
-       if (targ->dv_max_width == 0)
-               targ->dv_max_width = width;
-       if (targ->dv_max_ppr_options == 0)
-               targ->dv_max_ppr_options = ppr_options;
-       if (targ->dv_last_ppr_options == 0)
-               targ->dv_last_ppr_options = ppr_options;
-
-       cur_speed = aic_calc_speed(width, period, offset, AHD_SYNCRATE_MIN);
-       wide_speed = aic_calc_speed(MSG_EXT_WDTR_BUS_16_BIT,
-                                         targ->dv_next_wide_period,
-                                         MAX_OFFSET, AHD_SYNCRATE_MIN);
-       narrow_speed = aic_calc_speed(MSG_EXT_WDTR_BUS_8_BIT,
-                                           targ->dv_next_narrow_period,
-                                           MAX_OFFSET, AHD_SYNCRATE_MIN);
-       fallback_speed = aic_calc_speed(width, period+1, offset,
-                                             AHD_SYNCRATE_MIN);
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               printf("cur_speed= %d, wide_speed= %d, narrow_speed= %d, "
-                      "fallback_speed= %d\n", cur_speed, wide_speed,
-                      narrow_speed, fallback_speed);
-       }
-#endif
+       struct scsi_target *starget;
+       int i, j;
 
-       if (cur_speed > 160000) {
-               /*
-                * Paced/DT/IU_REQ only transfer speeds.  All we
-                * can do is fallback in terms of syncrate.
-                */
-               period++;
-       } else if (cur_speed > 80000) {
-               if ((ppr_options & MSG_EXT_PPR_IU_REQ) != 0) {
-                       /*
-                        * Try without IU_REQ as it may be confusing
-                        * an expander.
-                        */
-                       ppr_options &= ~MSG_EXT_PPR_IU_REQ;
-               } else {
-                       /*
-                        * Paced/DT only transfer speeds.  All we
-                        * can do is fallback in terms of syncrate.
-                        */
-                       period++;
-                       ppr_options = targ->dv_max_ppr_options;
+       if (ahd->platform_data != NULL) {
+               if (ahd->platform_data->host != NULL) {
+                       scsi_remove_host(ahd->platform_data->host);
+                       scsi_host_put(ahd->platform_data->host);
                }
-       } else if (cur_speed > 3300) {
 
-               /*
-                * In this range we the following
-                * options ordered from highest to
-                * lowest desireability:
-                *
-                * o Wide/DT
-                * o Wide/non-DT
-                * o Narrow at a potentally higher sync rate.
-                *
-                * All modes are tested with and without IU_REQ
-                * set since using IUs may confuse an expander.
-                */
-               if ((ppr_options & MSG_EXT_PPR_IU_REQ) != 0) {
-
-                       ppr_options &= ~MSG_EXT_PPR_IU_REQ;
-               } else if ((ppr_options & MSG_EXT_PPR_DT_REQ) != 0) {
-                       /*
-                        * Try going non-DT.
-                        */
-                       ppr_options = targ->dv_max_ppr_options;
-                       ppr_options &= ~MSG_EXT_PPR_DT_REQ;
-               } else if (targ->dv_last_ppr_options != 0) {
-                       /*
-                        * Try without QAS or any other PPR options.
-                        * We may need a non-PPR message to work with
-                        * an expander.  We look at the "last PPR options"
-                        * so we will perform this fallback even if the
-                        * target responded to our PPR negotiation with
-                        * no option bits set.
-                        */
-                       ppr_options = 0;
-               } else if (width == MSG_EXT_WDTR_BUS_16_BIT) {
-                       /*
-                        * If the next narrow speed is greater than
-                        * the next wide speed, fallback to narrow.
-                        * Otherwise fallback to the next DT/Wide setting.
-                        * The narrow async speed will always be smaller
-                        * than the wide async speed, so handle this case
-                        * specifically.
-                        */
-                       ppr_options = targ->dv_max_ppr_options;
-                       if (narrow_speed > fallback_speed
-                        || period >= AHD_ASYNC_XFER_PERIOD) {
-                               targ->dv_next_wide_period = period+1;
-                               width = MSG_EXT_WDTR_BUS_8_BIT;
-                               period = targ->dv_next_narrow_period;
-                       } else {
-                               period++;
+               /* destroy all of the device and target objects */
+               for (i = 0; i < AHD_NUM_TARGETS; i++) {
+                       starget = ahd->platform_data->starget[i];
+                       if (starget != NULL) {
+                               for (j = 0; j < AHD_NUM_LUNS; j++) {
+                                       struct ahd_linux_target *targ =
+                                               scsi_transport_target_data(starget);
+                                       if (targ->sdev[j] == NULL)
+                                               continue;
+                                       targ->sdev[j] = NULL;
+                               }
+                               ahd->platform_data->starget[i] = NULL;
                        }
-               } else if ((ahd->features & AHD_WIDE) != 0
-                       && targ->dv_max_width != 0
-                       && wide_speed >= fallback_speed
-                       && (targ->dv_next_wide_period <= AHD_ASYNC_XFER_PERIOD
-                        || period >= AHD_ASYNC_XFER_PERIOD)) {
+               }
 
-                       /*
-                        * We are narrow.  Try falling back
-                        * to the next wide speed with 
-                        * all supported ppr options set.
-                        */
-                       targ->dv_next_narrow_period = period+1;
-                       width = MSG_EXT_WDTR_BUS_16_BIT;
-                       period = targ->dv_next_wide_period;
-                       ppr_options = targ->dv_max_ppr_options;
-               } else {
-                       /* Only narrow fallback is allowed. */
-                       period++;
-                       ppr_options = targ->dv_max_ppr_options;
+               if (ahd->platform_data->irq != AHD_LINUX_NOIRQ)
+                       free_irq(ahd->platform_data->irq, ahd);
+               if (ahd->tags[0] == BUS_SPACE_PIO
+                && ahd->bshs[0].ioport != 0)
+                       release_region(ahd->bshs[0].ioport, 256);
+               if (ahd->tags[1] == BUS_SPACE_PIO
+                && ahd->bshs[1].ioport != 0)
+                       release_region(ahd->bshs[1].ioport, 256);
+               if (ahd->tags[0] == BUS_SPACE_MEMIO
+                && ahd->bshs[0].maddr != NULL) {
+                       iounmap(ahd->bshs[0].maddr);
+                       release_mem_region(ahd->platform_data->mem_busaddr,
+                                          0x1000);
                }
-       } else {
-               return (-1);
-       }
-       offset = MAX_OFFSET;
-       ahd_find_syncrate(ahd, &period, &ppr_options, AHD_SYNCRATE_PACED);
-       ahd_set_width(ahd, devinfo, width, AHD_TRANS_GOAL, FALSE);
-       if (period == 0) {
-               period = 0;
-               offset = 0;
-               ppr_options = 0;
-               if (width == MSG_EXT_WDTR_BUS_8_BIT)
-                       targ->dv_next_narrow_period = AHD_ASYNC_XFER_PERIOD;
-               else
-                       targ->dv_next_wide_period = AHD_ASYNC_XFER_PERIOD;
+               free(ahd->platform_data, M_DEVBUF);
        }
-       ahd_set_syncrate(ahd, devinfo, period, offset,
-                        ppr_options, AHD_TRANS_GOAL, FALSE);
-       targ->dv_last_ppr_options = ppr_options;
-       return (0);
 }
 
-static void
-ahd_linux_dv_timeout(struct scsi_cmnd *cmd)
+void
+ahd_platform_init(struct ahd_softc *ahd)
 {
-       struct  ahd_softc *ahd;
-       struct  scb *scb;
-       u_long  flags;
-
-       ahd = *((struct ahd_softc **)cmd->device->host->hostdata);
-       ahd_lock(ahd, &flags);
-
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV) {
-               printf("%s: Timeout while doing DV command %x.\n",
-                      ahd_name(ahd), cmd->cmnd[0]);
-               ahd_dump_card_state(ahd);
-       }
-#endif
-       
        /*
-        * Guard against "done race".  No action is
-        * required if we just completed.
+        * Lookup and commit any modified IO Cell options.
         */
-       if ((scb = (struct scb *)cmd->host_scribble) == NULL) {
-               ahd_unlock(ahd, &flags);
-               return;
+       if (ahd->unit < NUM_ELEMENTS(aic79xx_iocell_info)) {
+               struct ahd_linux_iocell_opts *iocell_opts;
+
+               iocell_opts = &aic79xx_iocell_info[ahd->unit];
+               if (iocell_opts->precomp != AIC79XX_DEFAULT_PRECOMP)
+                       AHD_SET_PRECOMP(ahd, iocell_opts->precomp);
+               if (iocell_opts->slewrate != AIC79XX_DEFAULT_SLEWRATE)
+                       AHD_SET_SLEWRATE(ahd, iocell_opts->slewrate);
+               if (iocell_opts->amplitude != AIC79XX_DEFAULT_AMPLITUDE)
+                       AHD_SET_AMPLITUDE(ahd, iocell_opts->amplitude);
        }
 
-       /*
-        * Command has not completed.  Mark this
-        * SCB as having failing status prior to
-        * resetting the bus, so we get the correct
-        * error code.
-        */
-       if ((scb->flags & SCB_SENSE) != 0)
-               ahd_set_transaction_status(scb, CAM_AUTOSENSE_FAIL);
-       else
-               ahd_set_transaction_status(scb, CAM_CMD_TIMEOUT);
-       ahd_reset_channel(ahd, cmd->device->channel + 'A', /*initiate*/TRUE);
+}
 
-       /*
-        * Add a minimal bus settle delay for devices that are slow to
-        * respond after bus resets.
-        */
-       ahd_freeze_simq(ahd);
-       init_timer(&ahd->platform_data->reset_timer);
-       ahd->platform_data->reset_timer.data = (u_long)ahd;
-       ahd->platform_data->reset_timer.expires = jiffies + HZ / 2;
-       ahd->platform_data->reset_timer.function =
-           (ahd_linux_callback_t *)ahd_release_simq;
-       add_timer(&ahd->platform_data->reset_timer);
-       if (ahd_linux_next_device_to_run(ahd) != NULL)
-               ahd_schedule_runq(ahd);
-       ahd_linux_run_complete_queue(ahd);
-       ahd_unlock(ahd, &flags);
+void
+ahd_platform_freeze_devq(struct ahd_softc *ahd, struct scb *scb)
+{
+       ahd_platform_abort_scbs(ahd, SCB_GET_TARGET(ahd, scb),
+                               SCB_GET_CHANNEL(ahd, scb),
+                               SCB_GET_LUN(scb), SCB_LIST_NULL,
+                               ROLE_UNKNOWN, CAM_REQUEUE_REQ);
 }
 
-static void
-ahd_linux_dv_complete(struct scsi_cmnd *cmd)
+void
+ahd_platform_set_tags(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
+                     ahd_queue_alg alg)
 {
-       struct ahd_softc *ahd;
+       struct scsi_target *starget;
+       struct ahd_linux_target *targ;
+       struct ahd_linux_device *dev;
+       struct scsi_device *sdev;
+       int was_queuing;
+       int now_queuing;
 
-       ahd = *((struct ahd_softc **)cmd->device->host->hostdata);
+       starget = ahd->platform_data->starget[devinfo->target];
+       targ = scsi_transport_target_data(starget);
+       BUG_ON(targ == NULL);
+       sdev = targ->sdev[devinfo->lun];
+       if (sdev == NULL)
+               return;
 
-       /* Delete the DV timer before it goes off! */
-       scsi_delete_timer(cmd);
+       dev = scsi_transport_device_data(sdev);
 
-#ifdef AHD_DEBUG
-       if (ahd_debug & AHD_SHOW_DV)
-               printf("%s:%c:%d: Command completed, status= 0x%x\n",
-                      ahd_name(ahd), cmd->device->channel, cmd->device->id,
-                      cmd->result);
-#endif
+       if (dev == NULL)
+               return;
+       was_queuing = dev->flags & (AHD_DEV_Q_BASIC|AHD_DEV_Q_TAGGED);
+       switch (alg) {
+       default:
+       case AHD_QUEUE_NONE:
+               now_queuing = 0;
+               break; 
+       case AHD_QUEUE_BASIC:
+               now_queuing = AHD_DEV_Q_BASIC;
+               break;
+       case AHD_QUEUE_TAGGED:
+               now_queuing = AHD_DEV_Q_TAGGED;
+               break;
+       }
+       if ((dev->flags & AHD_DEV_FREEZE_TIL_EMPTY) == 0
+        && (was_queuing != now_queuing)
+        && (dev->active != 0)) {
+               dev->flags |= AHD_DEV_FREEZE_TIL_EMPTY;
+               dev->qfrozen++;
+       }
 
-       /* Wake up the state machine */
-       up(&ahd->platform_data->dv_cmd_sem);
-}
+       dev->flags &= ~(AHD_DEV_Q_BASIC|AHD_DEV_Q_TAGGED|AHD_DEV_PERIODIC_OTAG);
+       if (now_queuing) {
+               u_int usertags;
 
-static void
-ahd_linux_generate_dv_pattern(struct ahd_linux_target *targ)
-{
-       uint16_t b;
-       u_int    i;
-       u_int    j;
-
-       if (targ->dv_buffer != NULL)
-               free(targ->dv_buffer, M_DEVBUF);
-       targ->dv_buffer = malloc(targ->dv_echo_size, M_DEVBUF, M_WAITOK);
-       if (targ->dv_buffer1 != NULL)
-               free(targ->dv_buffer1, M_DEVBUF);
-       targ->dv_buffer1 = malloc(targ->dv_echo_size, M_DEVBUF, M_WAITOK);
-
-       i = 0;
-
-       b = 0x0001;
-       for (j = 0 ; i < targ->dv_echo_size; j++) {
-               if (j < 32) {
-                       /*
-                        * 32bytes of sequential numbers.
-                        */
-                       targ->dv_buffer[i++] = j & 0xff;
-               } else if (j < 48) {
-                       /*
-                        * 32bytes of repeating 0x0000, 0xffff.
-                        */
-                       targ->dv_buffer[i++] = (j & 0x02) ? 0xff : 0x00;
-               } else if (j < 64) {
+               usertags = ahd_linux_user_tagdepth(ahd, devinfo);
+               if (!was_queuing) {
                        /*
-                        * 32bytes of repeating 0x5555, 0xaaaa.
+                        * Start out agressively and allow our
+                        * dynamic queue depth algorithm to take
+                        * care of the rest.
                         */
-                       targ->dv_buffer[i++] = (j & 0x02) ? 0xaa : 0x55;
-               } else {
+                       dev->maxtags = usertags;
+                       dev->openings = dev->maxtags - dev->active;
+               }
+               if (dev->maxtags == 0) {
                        /*
-                        * Remaining buffer is filled with a repeating
-                        * patter of:
-                        *
-                        *       0xffff
-                        *      ~0x0001 << shifted once in each loop.
+                        * Queueing is disabled by the user.
                         */
-                       if (j & 0x02) {
-                               if (j & 0x01) {
-                                       targ->dv_buffer[i++] = ~(b >> 8) & 0xff;
-                                       b <<= 1;
-                                       if (b == 0x0000)
-                                               b = 0x0001;
-                               } else {
-                                       targ->dv_buffer[i++] = (~b & 0xff);
-                               }
-                       } else {
-                               targ->dv_buffer[i++] = 0xff;
-                       }
-               }
+                       dev->openings = 1;
+               } else if (alg == AHD_QUEUE_TAGGED) {
+                       dev->flags |= AHD_DEV_Q_TAGGED;
+                       if (aic79xx_periodic_otag != 0)
+                               dev->flags |= AHD_DEV_PERIODIC_OTAG;
+               } else
+                       dev->flags |= AHD_DEV_Q_BASIC;
+       } else {
+               /* We can only have one opening. */
+               dev->maxtags = 0;
+               dev->openings =  1 - dev->active;
+       }
+
+       switch ((dev->flags & (AHD_DEV_Q_BASIC|AHD_DEV_Q_TAGGED))) {
+       case AHD_DEV_Q_BASIC:
+               scsi_adjust_queue_depth(sdev,
+                                       MSG_SIMPLE_TASK,
+                                       dev->openings + dev->active);
+               break;
+       case AHD_DEV_Q_TAGGED:
+               scsi_adjust_queue_depth(sdev,
+                                       MSG_ORDERED_TASK,
+                                       dev->openings + dev->active);
+               break;
+       default:
+               /*
+                * We allow the OS to queue 2 untagged transactions to
+                * us at any time even though we can only execute them
+                * serially on the controller/device.  This should
+                * remove some latency.
+                */
+               scsi_adjust_queue_depth(sdev,
+                                       /*NON-TAGGED*/0,
+                                       /*queue depth*/2);
+               break;
        }
 }
 
+int
+ahd_platform_abort_scbs(struct ahd_softc *ahd, int target, char channel,
+                       int lun, u_int tag, role_t role, uint32_t status)
+{
+       return 0;
+}
+
 static u_int
 ahd_linux_user_tagdepth(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
 {
@@ -3800,100 +1395,23 @@ ahd_linux_user_tagdepth(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
        return (tags);
 }
 
-static u_int
-ahd_linux_user_dv_setting(struct ahd_softc *ahd)
-{
-       static int warned_user;
-       int dv;
-
-       if (ahd->unit >= NUM_ELEMENTS(aic79xx_dv_settings)) {
-
-               if (warned_user == 0) {
-                       printf(KERN_WARNING
-"aic79xx: WARNING: Insufficient dv settings instances\n"
-"aic79xx: for installed controllers. Using defaults\n"
-"aic79xx: Please update the aic79xx_dv_settings array in"
-"aic79xx: the aic79xx_osm.c source file.\n");
-                       warned_user++;
-               }
-               dv = -1;
-       } else {
-
-               dv = aic79xx_dv_settings[ahd->unit];
-       }
-
-       if (dv < 0) {
-               /*
-                * Apply the default.
-                */
-               dv = 1;
-               if (ahd->seep_config != 0)
-                       dv = (ahd->seep_config->bios_control & CFENABLEDV);
-       }
-       return (dv);
-}
-
-static void
-ahd_linux_setup_user_rd_strm_settings(struct ahd_softc *ahd)
-{
-       static  int warned_user;
-       u_int   rd_strm_mask;
-       u_int   target_id;
-
-       /*
-        * If we have specific read streaming info for this controller,
-        * apply it.  Otherwise use the defaults.
-        */
-        if (ahd->unit >= NUM_ELEMENTS(aic79xx_rd_strm_info)) {
-
-               if (warned_user == 0) {
-
-                       printf(KERN_WARNING
-"aic79xx: WARNING: Insufficient rd_strm instances\n"
-"aic79xx: for installed controllers. Using defaults\n"
-"aic79xx: Please update the aic79xx_rd_strm_info array\n"
-"aic79xx: in the aic79xx_osm.c source file.\n");
-                       warned_user++;
-               }
-               rd_strm_mask = AIC79XX_CONFIGED_RD_STRM;
-       } else {
-
-               rd_strm_mask = aic79xx_rd_strm_info[ahd->unit];
-       }
-       for (target_id = 0; target_id < 16; target_id++) {
-               struct ahd_devinfo devinfo;
-               struct ahd_initiator_tinfo *tinfo;
-               struct ahd_tmode_tstate *tstate;
-
-               tinfo = ahd_fetch_transinfo(ahd, 'A', ahd->our_id,
-                                           target_id, &tstate);
-               ahd_compile_devinfo(&devinfo, ahd->our_id, target_id,
-                                   CAM_LUN_WILDCARD, 'A', ROLE_INITIATOR);
-               tinfo->user.ppr_options &= ~MSG_EXT_PPR_RD_STRM;
-               if ((rd_strm_mask & devinfo.target_mask) != 0)
-                       tinfo->user.ppr_options |= MSG_EXT_PPR_RD_STRM;
-       }
-}
-
 /*
  * Determines the queue depth for a given device.
  */
 static void
-ahd_linux_device_queue_depth(struct ahd_softc *ahd,
-                            struct ahd_linux_device *dev)
+ahd_linux_device_queue_depth(struct scsi_device *sdev)
 {
        struct  ahd_devinfo devinfo;
        u_int   tags;
+       struct ahd_softc *ahd = *((struct ahd_softc **)sdev->host->hostdata);
 
        ahd_compile_devinfo(&devinfo,
                            ahd->our_id,
-                           dev->target->target, dev->lun,
-                           dev->target->channel == 0 ? 'A' : 'B',
+                           sdev->sdev_target->id, sdev->lun,
+                           sdev->sdev_target->channel == 0 ? 'A' : 'B',
                            ROLE_INITIATOR);
        tags = ahd_linux_user_tagdepth(ahd, &devinfo);
-       if (tags != 0
-        && dev->scsi_device != NULL
-        && dev->scsi_device->tagged_supported != 0) {
+       if (tags != 0 && sdev->tagged_supported != 0) {
 
                ahd_set_tags(ahd, &devinfo, AHD_QUEUE_TAGGED);
                ahd_print_devinfo(ahd, &devinfo);
@@ -3903,11 +1421,10 @@ ahd_linux_device_queue_depth(struct ahd_softc *ahd,
        }
 }
 
-static void
-ahd_linux_run_device_queue(struct ahd_softc *ahd, struct ahd_linux_device *dev)
+static int
+ahd_linux_run_command(struct ahd_softc *ahd, struct ahd_linux_device *dev,
+                     struct scsi_cmnd *cmd)
 {
-       struct   ahd_cmd *acmd;
-       struct   scsi_cmnd *cmd;
        struct   scb *scb;
        struct   hardware_scb *hscb;
        struct   ahd_initiator_tinfo *tinfo;
@@ -3915,157 +1432,122 @@ ahd_linux_run_device_queue(struct ahd_softc *ahd, struct ahd_linux_device *dev)
        u_int    col_idx;
        uint16_t mask;
 
-       if ((dev->flags & AHD_DEV_ON_RUN_LIST) != 0)
-               panic("running device on run list");
-
-       while ((acmd = TAILQ_FIRST(&dev->busyq)) != NULL
-           && dev->openings > 0 && dev->qfrozen == 0) {
-
-               /*
-                * Schedule us to run later.  The only reason we are not
-                * running is because the whole controller Q is frozen.
-                */
-               if (ahd->platform_data->qfrozen != 0
-                && AHD_DV_SIMQ_FROZEN(ahd) == 0) {
-
-                       TAILQ_INSERT_TAIL(&ahd->platform_data->device_runq,
-                                         dev, links);
-                       dev->flags |= AHD_DEV_ON_RUN_LIST;
-                       return;
-               }
-
-               cmd = &acmd_scsi_cmd(acmd);
+       /*
+        * Get an scb to use.
+        */
+       tinfo = ahd_fetch_transinfo(ahd, 'A', ahd->our_id,
+                                   cmd->device->id, &tstate);
+       if ((dev->flags & (AHD_DEV_Q_TAGGED|AHD_DEV_Q_BASIC)) == 0
+        || (tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ) != 0) {
+               col_idx = AHD_NEVER_COL_IDX;
+       } else {
+               col_idx = AHD_BUILD_COL_IDX(cmd->device->id,
+                                           cmd->device->lun);
+       }
+       if ((scb = ahd_get_scb(ahd, col_idx)) == NULL) {
+               ahd->flags |= AHD_RESOURCE_SHORTAGE;
+               return SCSI_MLQUEUE_HOST_BUSY;
+       }
 
-               /*
-                * Get an scb to use.
-                */
-               tinfo = ahd_fetch_transinfo(ahd, 'A', ahd->our_id,
-                                           cmd->device->id, &tstate);
-               if ((dev->flags & (AHD_DEV_Q_TAGGED|AHD_DEV_Q_BASIC)) == 0
-                || (tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ) != 0) {
-                       col_idx = AHD_NEVER_COL_IDX;
-               } else {
-                       col_idx = AHD_BUILD_COL_IDX(cmd->device->id,
-                                                   cmd->device->lun);
-               }
-               if ((scb = ahd_get_scb(ahd, col_idx)) == NULL) {
-                       TAILQ_INSERT_TAIL(&ahd->platform_data->device_runq,
-                                        dev, links);
-                       dev->flags |= AHD_DEV_ON_RUN_LIST;
-                       ahd->flags |= AHD_RESOURCE_SHORTAGE;
-                       return;
-               }
-               TAILQ_REMOVE(&dev->busyq, acmd, acmd_links.tqe);
-               scb->io_ctx = cmd;
-               scb->platform_data->dev = dev;
-               hscb = scb->hscb;
-               cmd->host_scribble = (char *)scb;
+       scb->io_ctx = cmd;
+       scb->platform_data->dev = dev;
+       hscb = scb->hscb;
+       cmd->host_scribble = (char *)scb;
 
-               /*
-                * Fill out basics of the HSCB.
-                */
-               hscb->control = 0;
-               hscb->scsiid = BUILD_SCSIID(ahd, cmd);
-               hscb->lun = cmd->device->lun;
-               scb->hscb->task_management = 0;
-               mask = SCB_GET_TARGET_MASK(ahd, scb);
+       /*
+        * Fill out basics of the HSCB.
+        */
+       hscb->control = 0;
+       hscb->scsiid = BUILD_SCSIID(ahd, cmd);
+       hscb->lun = cmd->device->lun;
+       scb->hscb->task_management = 0;
+       mask = SCB_GET_TARGET_MASK(ahd, scb);
 
-               if ((ahd->user_discenable & mask) != 0)
-                       hscb->control |= DISCENB;
+       if ((ahd->user_discenable & mask) != 0)
+               hscb->control |= DISCENB;
 
-               if (AHD_DV_CMD(cmd) != 0)
-                       scb->flags |= SCB_SILENT;
+       if ((tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ) != 0)
+               scb->flags |= SCB_PACKETIZED;
 
-               if ((tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ) != 0)
-                       scb->flags |= SCB_PACKETIZED;
+       if ((tstate->auto_negotiate & mask) != 0) {
+               scb->flags |= SCB_AUTO_NEGOTIATE;
+               scb->hscb->control |= MK_MESSAGE;
+       }
 
-               if ((tstate->auto_negotiate & mask) != 0) {
-                       scb->flags |= SCB_AUTO_NEGOTIATE;
-                       scb->hscb->control |= MK_MESSAGE;
-               }
+       if ((dev->flags & (AHD_DEV_Q_TAGGED|AHD_DEV_Q_BASIC)) != 0) {
+               int     msg_bytes;
+               uint8_t tag_msgs[2];
 
-               if ((dev->flags & (AHD_DEV_Q_TAGGED|AHD_DEV_Q_BASIC)) != 0) {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-                       int     msg_bytes;
-                       uint8_t tag_msgs[2];
-
-                       msg_bytes = scsi_populate_tag_msg(cmd, tag_msgs);
-                       if (msg_bytes && tag_msgs[0] != MSG_SIMPLE_TASK) {
-                               hscb->control |= tag_msgs[0];
-                               if (tag_msgs[0] == MSG_ORDERED_TASK)
-                                       dev->commands_since_idle_or_otag = 0;
-                       } else
-#endif
-                       if (dev->commands_since_idle_or_otag == AHD_OTAG_THRESH
-                        && (dev->flags & AHD_DEV_Q_TAGGED) != 0) {
-                               hscb->control |= MSG_ORDERED_TASK;
+               msg_bytes = scsi_populate_tag_msg(cmd, tag_msgs);
+               if (msg_bytes && tag_msgs[0] != MSG_SIMPLE_TASK) {
+                       hscb->control |= tag_msgs[0];
+                       if (tag_msgs[0] == MSG_ORDERED_TASK)
                                dev->commands_since_idle_or_otag = 0;
-                       } else {
-                               hscb->control |= MSG_SIMPLE_TASK;
-                       }
+               } else
+               if (dev->commands_since_idle_or_otag == AHD_OTAG_THRESH
+                && (dev->flags & AHD_DEV_Q_TAGGED) != 0) {
+                       hscb->control |= MSG_ORDERED_TASK;
+                       dev->commands_since_idle_or_otag = 0;
+               } else {
+                       hscb->control |= MSG_SIMPLE_TASK;
                }
+       }
 
-               hscb->cdb_len = cmd->cmd_len;
-               memcpy(hscb->shared_data.idata.cdb, cmd->cmnd, hscb->cdb_len);
-
-               scb->sg_count = 0;
-               ahd_set_residual(scb, 0);
-               ahd_set_sense_residual(scb, 0);
-               if (cmd->use_sg != 0) {
-                       void    *sg;
-                       struct   scatterlist *cur_seg;
-                       u_int    nseg;
-                       int      dir;
-
-                       cur_seg = (struct scatterlist *)cmd->request_buffer;
-                       dir = cmd->sc_data_direction;
-                       nseg = pci_map_sg(ahd->dev_softc, cur_seg,
-                                         cmd->use_sg, dir);
-                       scb->platform_data->xfer_len = 0;
-                       for (sg = scb->sg_list; nseg > 0; nseg--, cur_seg++) {
-                               dma_addr_t addr;
-                               bus_size_t len;
-
-                               addr = sg_dma_address(cur_seg);
-                               len = sg_dma_len(cur_seg);
-                               scb->platform_data->xfer_len += len;
-                               sg = ahd_sg_setup(ahd, scb, sg, addr, len,
-                                                 /*last*/nseg == 1);
-                       }
-               } else if (cmd->request_bufflen != 0) {
-                       void *sg;
+       hscb->cdb_len = cmd->cmd_len;
+       memcpy(hscb->shared_data.idata.cdb, cmd->cmnd, hscb->cdb_len);
+
+       scb->platform_data->xfer_len = 0;
+       ahd_set_residual(scb, 0);
+       ahd_set_sense_residual(scb, 0);
+       scb->sg_count = 0;
+       if (cmd->use_sg != 0) {
+               void    *sg;
+               struct   scatterlist *cur_seg;
+               u_int    nseg;
+               int      dir;
+
+               cur_seg = (struct scatterlist *)cmd->request_buffer;
+               dir = cmd->sc_data_direction;
+               nseg = pci_map_sg(ahd->dev_softc, cur_seg,
+                                 cmd->use_sg, dir);
+               scb->platform_data->xfer_len = 0;
+               for (sg = scb->sg_list; nseg > 0; nseg--, cur_seg++) {
                        dma_addr_t addr;
-                       int dir;
-
-                       sg = scb->sg_list;
-                       dir = cmd->sc_data_direction;
-                       addr = pci_map_single(ahd->dev_softc,
-                                             cmd->request_buffer,
-                                             cmd->request_bufflen, dir);
-                       scb->platform_data->xfer_len = cmd->request_bufflen;
-                       scb->platform_data->buf_busaddr = addr;
-                       sg = ahd_sg_setup(ahd, scb, sg, addr,
-                                         cmd->request_bufflen, /*last*/TRUE);
-               }
+                       bus_size_t len;
 
-               LIST_INSERT_HEAD(&ahd->pending_scbs, scb, pending_links);
-               dev->openings--;
-               dev->active++;
-               dev->commands_issued++;
-
-               /* Update the error counting bucket and dump if needed */
-               if (dev->target->cmds_since_error) {
-                       dev->target->cmds_since_error++;
-                       if (dev->target->cmds_since_error >
-                           AHD_LINUX_ERR_THRESH)
-                               dev->target->cmds_since_error = 0;
+                       addr = sg_dma_address(cur_seg);
+                       len = sg_dma_len(cur_seg);
+                       scb->platform_data->xfer_len += len;
+                       sg = ahd_sg_setup(ahd, scb, sg, addr, len,
+                                         /*last*/nseg == 1);
                }
+       } else if (cmd->request_bufflen != 0) {
+               void *sg;
+               dma_addr_t addr;
+               int dir;
 
-               if ((dev->flags & AHD_DEV_PERIODIC_OTAG) != 0)
-                       dev->commands_since_idle_or_otag++;
-               scb->flags |= SCB_ACTIVE;
-               ahd_queue_scb(ahd, scb);
+               sg = scb->sg_list;
+               dir = cmd->sc_data_direction;
+               addr = pci_map_single(ahd->dev_softc,
+                                     cmd->request_buffer,
+                                     cmd->request_bufflen, dir);
+               scb->platform_data->xfer_len = cmd->request_bufflen;
+               scb->platform_data->buf_busaddr = addr;
+               sg = ahd_sg_setup(ahd, scb, sg, addr,
+                                 cmd->request_bufflen, /*last*/TRUE);
        }
+
+       LIST_INSERT_HEAD(&ahd->pending_scbs, scb, pending_links);
+       dev->openings--;
+       dev->active++;
+       dev->commands_issued++;
+
+       if ((dev->flags & AHD_DEV_PERIODIC_OTAG) != 0)
+               dev->commands_since_idle_or_otag++;
+       scb->flags |= SCB_ACTIVE;
+       ahd_queue_scb(ahd, scb);
+
+       return 0;
 }
 
 /*
@@ -4081,9 +1563,6 @@ ahd_linux_isr(int irq, void *dev_id, struct pt_regs * regs)
        ahd = (struct ahd_softc *) dev_id;
        ahd_lock(ahd, &flags); 
        ours = ahd_intr(ahd);
-       if (ahd_linux_next_device_to_run(ahd) != NULL)
-               ahd_schedule_runq(ahd);
-       ahd_linux_run_complete_queue(ahd);
        ahd_unlock(ahd, &flags);
        return IRQ_RETVAL(ours);
 }
@@ -4092,111 +1571,6 @@ void
 ahd_platform_flushwork(struct ahd_softc *ahd)
 {
 
-       while (ahd_linux_run_complete_queue(ahd) != NULL)
-               ;
-}
-
-static struct ahd_linux_target*
-ahd_linux_alloc_target(struct ahd_softc *ahd, u_int channel, u_int target)
-{
-       struct ahd_linux_target *targ;
-
-       targ = malloc(sizeof(*targ), M_DEVBUF, M_NOWAIT);
-       if (targ == NULL)
-               return (NULL);
-       memset(targ, 0, sizeof(*targ));
-       targ->channel = channel;
-       targ->target = target;
-       targ->ahd = ahd;
-       targ->flags = AHD_DV_REQUIRED;
-       ahd->platform_data->targets[target] = targ;
-       return (targ);
-}
-
-static void
-ahd_linux_free_target(struct ahd_softc *ahd, struct ahd_linux_target *targ)
-{
-       struct ahd_devinfo devinfo;
-       struct ahd_initiator_tinfo *tinfo;
-       struct ahd_tmode_tstate *tstate;
-       u_int our_id;
-       u_int target_offset;
-       char channel;
-
-       /*
-        * Force a negotiation to async/narrow on any
-        * future command to this device unless a bus
-        * reset occurs between now and that command.
-        */
-       channel = 'A' + targ->channel;
-       our_id = ahd->our_id;
-       target_offset = targ->target;
-       tinfo = ahd_fetch_transinfo(ahd, channel, our_id,
-                                   targ->target, &tstate);
-       ahd_compile_devinfo(&devinfo, our_id, targ->target, CAM_LUN_WILDCARD,
-                           channel, ROLE_INITIATOR);
-       ahd_set_syncrate(ahd, &devinfo, 0, 0, 0,
-                        AHD_TRANS_GOAL, /*paused*/FALSE);
-       ahd_set_width(ahd, &devinfo, MSG_EXT_WDTR_BUS_8_BIT,
-                     AHD_TRANS_GOAL, /*paused*/FALSE);
-       ahd_update_neg_request(ahd, &devinfo, tstate, tinfo, AHD_NEG_ALWAYS);
-       ahd->platform_data->targets[target_offset] = NULL;
-       if (targ->inq_data != NULL)
-               free(targ->inq_data, M_DEVBUF);
-       if (targ->dv_buffer != NULL)
-               free(targ->dv_buffer, M_DEVBUF);
-       if (targ->dv_buffer1 != NULL)
-               free(targ->dv_buffer1, M_DEVBUF);
-       free(targ, M_DEVBUF);
-}
-
-static struct ahd_linux_device*
-ahd_linux_alloc_device(struct ahd_softc *ahd,
-                struct ahd_linux_target *targ, u_int lun)
-{
-       struct ahd_linux_device *dev;
-
-       dev = malloc(sizeof(*dev), M_DEVBUG, M_NOWAIT);
-       if (dev == NULL)
-               return (NULL);
-       memset(dev, 0, sizeof(*dev));
-       init_timer(&dev->timer);
-       TAILQ_INIT(&dev->busyq);
-       dev->flags = AHD_DEV_UNCONFIGURED;
-       dev->lun = lun;
-       dev->target = targ;
-
-       /*
-        * We start out life using untagged
-        * transactions of which we allow one.
-        */
-       dev->openings = 1;
-
-       /*
-        * Set maxtags to 0.  This will be changed if we
-        * later determine that we are dealing with
-        * a tagged queuing capable device.
-        */
-       dev->maxtags = 0;
-       
-       targ->refcount++;
-       targ->devices[lun] = dev;
-       return (dev);
-}
-
-static void
-ahd_linux_free_device(struct ahd_softc *ahd, struct ahd_linux_device *dev)
-{
-       struct ahd_linux_target *targ;
-
-       del_timer(&dev->timer);
-       targ = dev->target;
-       targ->devices[dev->lun] = NULL;
-       free(dev, M_DEVBUF);
-       targ->refcount--;
-       if (targ->refcount == 0
-        && (targ->flags & AHD_DV_REQUIRED) == 0)
-               ahd_linux_free_target(ahd, targ);
 }
 
 void
@@ -4207,10 +1581,14 @@ ahd_send_async(struct ahd_softc *ahd, char channel,
        case AC_TRANSFER_NEG:
        {
                char    buf[80];
+               struct  scsi_target *starget;
                struct  ahd_linux_target *targ;
                struct  info_str info;
                struct  ahd_initiator_tinfo *tinfo;
                struct  ahd_tmode_tstate *tstate;
+               unsigned int target_ppr_options;
+
+               BUG_ON(target == CAM_TARGET_WILDCARD);
 
                info.buffer = buf;
                info.length = sizeof(buf);
@@ -4234,58 +1612,47 @@ ahd_send_async(struct ahd_softc *ahd, char channel,
                 * Don't bother reporting results that
                 * are identical to those last reported.
                 */
-               targ = ahd->platform_data->targets[target];
-               if (targ == NULL)
+               starget = ahd->platform_data->starget[target];
+               if (starget == NULL)
                        break;
-               if (tinfo->curr.period == targ->last_tinfo.period
-                && tinfo->curr.width == targ->last_tinfo.width
-                && tinfo->curr.offset == targ->last_tinfo.offset
-                && tinfo->curr.ppr_options == targ->last_tinfo.ppr_options)
+               targ = scsi_transport_target_data(starget);
+
+               target_ppr_options =
+                       (spi_dt(starget) ? MSG_EXT_PPR_DT_REQ : 0)
+                       + (spi_qas(starget) ? MSG_EXT_PPR_QAS_REQ : 0)
+                       + (spi_iu(starget) ?  MSG_EXT_PPR_IU_REQ : 0)
+                       + (spi_rd_strm(starget) ? MSG_EXT_PPR_RD_STRM : 0)
+                       + (spi_pcomp_en(starget) ? MSG_EXT_PPR_PCOMP_EN : 0)
+                       + (spi_rti(starget) ? MSG_EXT_PPR_RTI : 0)
+                       + (spi_wr_flow(starget) ? MSG_EXT_PPR_WR_FLOW : 0)
+                       + (spi_hold_mcs(starget) ? MSG_EXT_PPR_HOLD_MCS : 0);
+
+               if (tinfo->curr.period == spi_period(starget)
+                   && tinfo->curr.width == spi_width(starget)
+                   && tinfo->curr.offset == spi_offset(starget)
+                && tinfo->curr.ppr_options == target_ppr_options)
                        if (bootverbose == 0)
                                break;
 
-               targ->last_tinfo.period = tinfo->curr.period;
-               targ->last_tinfo.width = tinfo->curr.width;
-               targ->last_tinfo.offset = tinfo->curr.offset;
-               targ->last_tinfo.ppr_options = tinfo->curr.ppr_options;
-
-               printf("(%s:%c:", ahd_name(ahd), channel);
-               if (target == CAM_TARGET_WILDCARD)
-                       printf("*): ");
-               else
-                       printf("%d): ", target);
-               ahd_format_transinfo(&info, &tinfo->curr);
-               if (info.pos < info.length)
-                       *info.buffer = '\0';
-               else
-                       buf[info.length - 1] = '\0';
-               printf("%s", buf);
+               spi_period(starget) = tinfo->curr.period;
+               spi_width(starget) = tinfo->curr.width;
+               spi_offset(starget) = tinfo->curr.offset;
+               spi_dt(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_DT_REQ ? 1 : 0;
+               spi_qas(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_QAS_REQ ? 1 : 0;
+               spi_iu(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_IU_REQ ? 1 : 0;
+               spi_rd_strm(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_RD_STRM ? 1 : 0;
+               spi_pcomp_en(starget) =  tinfo->curr.ppr_options & MSG_EXT_PPR_PCOMP_EN ? 1 : 0;
+               spi_rti(starget) =  tinfo->curr.ppr_options &  MSG_EXT_PPR_RTI ? 1 : 0;
+               spi_wr_flow(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_WR_FLOW ? 1 : 0;
+               spi_hold_mcs(starget) = tinfo->curr.ppr_options & MSG_EXT_PPR_HOLD_MCS ? 1 : 0;
+               spi_display_xfer_agreement(starget);
                break;
        }
         case AC_SENT_BDR:
        {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
                WARN_ON(lun != CAM_LUN_WILDCARD);
                scsi_report_device_reset(ahd->platform_data->host,
                                         channel - 'A', target);
-#else
-               Scsi_Device *scsi_dev;
-
-               /*
-                * Find the SCSI device associated with this
-                * request and indicate that a UA is expected.
-                */
-               for (scsi_dev = ahd->platform_data->host->host_queue;
-                    scsi_dev != NULL; scsi_dev = scsi_dev->next) {
-                       if (channel - 'A' == scsi_dev->channel
-                        && target == scsi_dev->id
-                        && (lun == CAM_LUN_WILDCARD
-                         || lun == scsi_dev->lun)) {
-                               scsi_dev->was_reset = 1;
-                               scsi_dev->expecting_cc_ua = 1;
-                       }
-               }
-#endif
                break;
        }
         case AC_BUS_RESET:
@@ -4305,7 +1672,7 @@ ahd_send_async(struct ahd_softc *ahd, char channel,
 void
 ahd_done(struct ahd_softc *ahd, struct scb *scb)
 {
-       Scsi_Cmnd *cmd;
+       struct scsi_cmnd *cmd;
        struct    ahd_linux_device *dev;
 
        if ((scb->flags & SCB_ACTIVE) == 0) {
@@ -4373,19 +1740,8 @@ ahd_done(struct ahd_softc *ahd, struct scb *scb)
                        ahd_set_transaction_status(scb, CAM_REQ_CMP);
                }
        } else if (ahd_get_transaction_status(scb) == CAM_SCSI_STATUS_ERROR) {
-               ahd_linux_handle_scsi_status(ahd, dev, scb);
-       } else if (ahd_get_transaction_status(scb) == CAM_SEL_TIMEOUT) {
-               dev->flags |= AHD_DEV_UNCONFIGURED;
-               if (AHD_DV_CMD(cmd) == FALSE)
-                       dev->target->flags &= ~AHD_DV_REQUIRED;
+               ahd_linux_handle_scsi_status(ahd, cmd->device, scb);
        }
-       /*
-        * Start DV for devices that require it assuming the first command
-        * sent does not result in a selection timeout.
-        */
-       if (ahd_get_transaction_status(scb) != CAM_SEL_TIMEOUT
-        && (dev->target->flags & AHD_DV_REQUIRED) != 0)
-               ahd_linux_start_dv(ahd);
 
        if (dev->openings == 1
         && ahd_get_transaction_status(scb) == CAM_REQ_CMP
@@ -4406,47 +1762,32 @@ ahd_done(struct ahd_softc *ahd, struct scb *scb)
        if (dev->active == 0)
                dev->commands_since_idle_or_otag = 0;
 
-       if (TAILQ_EMPTY(&dev->busyq)) {
-               if ((dev->flags & AHD_DEV_UNCONFIGURED) != 0
-                && dev->active == 0
-                && (dev->flags & AHD_DEV_TIMER_ACTIVE) == 0)
-                       ahd_linux_free_device(ahd, dev);
-       } else if ((dev->flags & AHD_DEV_ON_RUN_LIST) == 0) {
-               TAILQ_INSERT_TAIL(&ahd->platform_data->device_runq, dev, links);
-               dev->flags |= AHD_DEV_ON_RUN_LIST;
-       }
-
        if ((scb->flags & SCB_RECOVERY_SCB) != 0) {
                printf("Recovery SCB completes\n");
                if (ahd_get_transaction_status(scb) == CAM_BDR_SENT
                 || ahd_get_transaction_status(scb) == CAM_REQ_ABORTED)
                        ahd_set_transaction_status(scb, CAM_CMD_TIMEOUT);
-               if ((scb->platform_data->flags & AHD_SCB_UP_EH_SEM) != 0) {
-                       scb->platform_data->flags &= ~AHD_SCB_UP_EH_SEM;
+               if ((ahd->platform_data->flags & AHD_SCB_UP_EH_SEM) != 0) {
+                       ahd->platform_data->flags &= ~AHD_SCB_UP_EH_SEM;
                        up(&ahd->platform_data->eh_sem);
                }
        }
 
        ahd_free_scb(ahd, scb);
        ahd_linux_queue_cmd_complete(ahd, cmd);
-
-       if ((ahd->platform_data->flags & AHD_DV_WAIT_SIMQ_EMPTY) != 0
-        && LIST_FIRST(&ahd->pending_scbs) == NULL) {
-               ahd->platform_data->flags &= ~AHD_DV_WAIT_SIMQ_EMPTY;
-               up(&ahd->platform_data->dv_sem);
-       }
 }
 
 static void
 ahd_linux_handle_scsi_status(struct ahd_softc *ahd,
-                            struct ahd_linux_device *dev, struct scb *scb)
+                            struct scsi_device *sdev, struct scb *scb)
 {
        struct  ahd_devinfo devinfo;
+       struct ahd_linux_device *dev = scsi_transport_device_data(sdev);
 
        ahd_compile_devinfo(&devinfo,
                            ahd->our_id,
-                           dev->target->target, dev->lun,
-                           dev->target->channel == 0 ? 'A' : 'B',
+                           sdev->sdev_target->id, sdev->lun,
+                           sdev->sdev_target->channel == 0 ? 'A' : 'B',
                            ROLE_INITIATOR);
        
        /*
@@ -4465,7 +1806,7 @@ ahd_linux_handle_scsi_status(struct ahd_softc *ahd,
        case SCSI_STATUS_CHECK_COND:
        case SCSI_STATUS_CMD_TERMINATED:
        {
-               Scsi_Cmnd *cmd;
+               struct scsi_cmnd *cmd;
 
                /*
                 * Copy sense information to the OS's cmd
@@ -4518,7 +1859,6 @@ ahd_linux_handle_scsi_status(struct ahd_softc *ahd,
                break;
        }
        case SCSI_STATUS_QUEUE_FULL:
-       {
                /*
                 * By the time the core driver has returned this
                 * command, all other commands that were queued
@@ -4579,98 +1919,23 @@ ahd_linux_handle_scsi_status(struct ahd_softc *ahd,
                             (dev->flags & AHD_DEV_Q_BASIC)
                           ? AHD_QUEUE_BASIC : AHD_QUEUE_TAGGED);
                ahd_set_scsi_status(scb, SCSI_STATUS_BUSY);
-               /* FALLTHROUGH */
-       }
-       case SCSI_STATUS_BUSY:
-               /*
-                * Set a short timer to defer sending commands for
-                * a bit since Linux will not delay in this case.
-                */
-               if ((dev->flags & AHD_DEV_TIMER_ACTIVE) != 0) {
-                       printf("%s:%c:%d: Device Timer still active during "
-                              "busy processing\n", ahd_name(ahd),
-                               dev->target->channel, dev->target->target);
-                       break;
-               }
-               dev->flags |= AHD_DEV_TIMER_ACTIVE;
-               dev->qfrozen++;
-               init_timer(&dev->timer);
-               dev->timer.data = (u_long)dev;
-               dev->timer.expires = jiffies + (HZ/2);
-               dev->timer.function = ahd_linux_dev_timed_unfreeze;
-               add_timer(&dev->timer);
-               break;
        }
 }
 
 static void
-ahd_linux_queue_cmd_complete(struct ahd_softc *ahd, Scsi_Cmnd *cmd)
+ahd_linux_queue_cmd_complete(struct ahd_softc *ahd, struct scsi_cmnd *cmd)
 {
-       /*
-        * Typically, the complete queue has very few entries
-        * queued to it before the queue is emptied by
-        * ahd_linux_run_complete_queue, so sorting the entries
-        * by generation number should be inexpensive.
-        * We perform the sort so that commands that complete
-        * with an error are retuned in the order origionally
-        * queued to the controller so that any subsequent retries
-        * are performed in order.  The underlying ahd routines do
-        * not guarantee the order that aborted commands will be
-        * returned to us.
-        */
-       struct ahd_completeq *completeq;
-       struct ahd_cmd *list_cmd;
-       struct ahd_cmd *acmd;
-
        /*
         * Map CAM error codes into Linux Error codes.  We
         * avoid the conversion so that the DV code has the
         * full error information available when making
         * state change decisions.
         */
-       if (AHD_DV_CMD(cmd) == FALSE) {
+       {
                uint32_t status;
                u_int new_status;
 
                status = ahd_cmd_get_transaction_status(cmd);
-               if (status != CAM_REQ_CMP) {
-                       struct ahd_linux_device *dev;
-                       struct ahd_devinfo devinfo;
-                       cam_status cam_status;
-                       uint32_t action;
-                       u_int scsi_status;
-
-                       dev = ahd_linux_get_device(ahd, cmd->device->channel,
-                                                  cmd->device->id,
-                                                  cmd->device->lun,
-                                                  /*alloc*/FALSE);
-
-                       if (dev == NULL)
-                               goto no_fallback;
-
-                       ahd_compile_devinfo(&devinfo,
-                                           ahd->our_id,
-                                           dev->target->target, dev->lun,
-                                           dev->target->channel == 0 ? 'A':'B',
-                                           ROLE_INITIATOR);
-
-                       scsi_status = ahd_cmd_get_scsi_status(cmd);
-                       cam_status = ahd_cmd_get_transaction_status(cmd);
-                       action = aic_error_action(cmd, dev->target->inq_data,
-                                                 cam_status, scsi_status);
-                       if ((action & SSQ_FALLBACK) != 0) {
-
-                               /* Update stats */
-                               dev->target->errors_detected++;
-                               if (dev->target->cmds_since_error == 0)
-                                       dev->target->cmds_since_error++;
-                               else {
-                                       dev->target->cmds_since_error = 0;
-                                       ahd_linux_fallback(ahd, &devinfo);
-                               }
-                       }
-               }
-no_fallback:
                switch (status) {
                case CAM_REQ_INPROG:
                case CAM_REQ_CMP:
@@ -4715,26 +1980,7 @@ no_fallback:
                        new_status = DID_ERROR;
                        break;
                case CAM_REQUEUE_REQ:
-                       /*
-                        * If we want the request requeued, make sure there
-                        * are sufficent retries.  In the old scsi error code,
-                        * we used to be able to specify a result code that
-                        * bypassed the retry count.  Now we must use this
-                        * hack.  We also "fake" a check condition with
-                        * a sense code of ABORTED COMMAND.  This seems to
-                        * evoke a retry even if this command is being sent
-                        * via the eh thread.  Ick!  Ick!  Ick!
-                        */
-                       if (cmd->retries > 0)
-                               cmd->retries--;
-                       new_status = DID_OK;
-                       ahd_cmd_set_scsi_status(cmd, SCSI_STATUS_CHECK_COND);
-                       cmd->result |= (DRIVER_SENSE << 24);
-                       memset(cmd->sense_buffer, 0,
-                              sizeof(cmd->sense_buffer));
-                       cmd->sense_buffer[0] = SSD_ERRCODE_VALID
-                                            | SSD_CURRENT_ERROR;
-                       cmd->sense_buffer[2] = SSD_KEY_ABORTED_COMMAND;
+                       new_status = DID_REQUEUE;
                        break;
                default:
                        /* We should never get here */
@@ -4745,272 +1991,798 @@ no_fallback:
                ahd_cmd_set_transaction_status(cmd, new_status);
        }
 
-       completeq = &ahd->platform_data->completeq;
-       list_cmd = TAILQ_FIRST(completeq);
-       acmd = (struct ahd_cmd *)cmd;
-       while (list_cmd != NULL
-           && acmd_scsi_cmd(list_cmd).serial_number
-            < acmd_scsi_cmd(acmd).serial_number)
-               list_cmd = TAILQ_NEXT(list_cmd, acmd_links.tqe);
-       if (list_cmd != NULL)
-               TAILQ_INSERT_BEFORE(list_cmd, acmd, acmd_links.tqe);
-       else
-               TAILQ_INSERT_TAIL(completeq, acmd, acmd_links.tqe);
+       cmd->scsi_done(cmd);
+}
+
+static void
+ahd_linux_sem_timeout(u_long arg)
+{
+       struct  ahd_softc *ahd;
+       u_long  s;
+
+       ahd = (struct ahd_softc *)arg;
+
+       ahd_lock(ahd, &s);
+       if ((ahd->platform_data->flags & AHD_SCB_UP_EH_SEM) != 0) {
+               ahd->platform_data->flags &= ~AHD_SCB_UP_EH_SEM;
+               up(&ahd->platform_data->eh_sem);
+       }
+       ahd_unlock(ahd, &s);
+}
+
+void
+ahd_freeze_simq(struct ahd_softc *ahd)
+{
+       ahd->platform_data->qfrozen++;
+       if (ahd->platform_data->qfrozen == 1) {
+               scsi_block_requests(ahd->platform_data->host);
+               ahd_platform_abort_scbs(ahd, CAM_TARGET_WILDCARD, ALL_CHANNELS,
+                                       CAM_LUN_WILDCARD, SCB_LIST_NULL,
+                                       ROLE_INITIATOR, CAM_REQUEUE_REQ);
+       }
+}
+
+void
+ahd_release_simq(struct ahd_softc *ahd)
+{
+       u_long s;
+       int    unblock_reqs;
+
+       unblock_reqs = 0;
+       ahd_lock(ahd, &s);
+       if (ahd->platform_data->qfrozen > 0)
+               ahd->platform_data->qfrozen--;
+       if (ahd->platform_data->qfrozen == 0) {
+               unblock_reqs = 1;
+       }
+       ahd_unlock(ahd, &s);
+       /*
+        * There is still a race here.  The mid-layer
+        * should keep its own freeze count and use
+        * a bottom half handler to run the queues
+        * so we can unblock with our own lock held.
+        */
+       if (unblock_reqs)
+               scsi_unblock_requests(ahd->platform_data->host);
+}
+
+static int
+ahd_linux_queue_recovery_cmd(struct scsi_cmnd *cmd, scb_flag flag)
+{
+       struct ahd_softc *ahd;
+       struct ahd_linux_device *dev;
+       struct scb *pending_scb;
+       u_int  saved_scbptr;
+       u_int  active_scbptr;
+       u_int  last_phase;
+       u_int  saved_scsiid;
+       u_int  cdb_byte;
+       int    retval;
+       int    was_paused;
+       int    paused;
+       int    wait;
+       int    disconnected;
+       ahd_mode_state saved_modes;
+
+       pending_scb = NULL;
+       paused = FALSE;
+       wait = FALSE;
+       ahd = *(struct ahd_softc **)cmd->device->host->hostdata;
+
+       printf("%s:%d:%d:%d: Attempting to queue a%s message:",
+              ahd_name(ahd), cmd->device->channel,
+              cmd->device->id, cmd->device->lun,
+              flag == SCB_ABORT ? "n ABORT" : " TARGET RESET");
+
+       printf("CDB:");
+       for (cdb_byte = 0; cdb_byte < cmd->cmd_len; cdb_byte++)
+               printf(" 0x%x", cmd->cmnd[cdb_byte]);
+       printf("\n");
+
+       spin_lock_irq(&ahd->platform_data->spin_lock);
+
+       /*
+        * First determine if we currently own this command.
+        * Start by searching the device queue.  If not found
+        * there, check the pending_scb list.  If not found
+        * at all, and the system wanted us to just abort the
+        * command, return success.
+        */
+       dev = scsi_transport_device_data(cmd->device);
+
+       if (dev == NULL) {
+               /*
+                * No target device for this command exists,
+                * so we must not still own the command.
+                */
+               printf("%s:%d:%d:%d: Is not an active device\n",
+                      ahd_name(ahd), cmd->device->channel, cmd->device->id,
+                      cmd->device->lun);
+               retval = SUCCESS;
+               goto no_cmd;
+       }
+
+       /*
+        * See if we can find a matching cmd in the pending list.
+        */
+       LIST_FOREACH(pending_scb, &ahd->pending_scbs, pending_links) {
+               if (pending_scb->io_ctx == cmd)
+                       break;
+       }
+
+       if (pending_scb == NULL && flag == SCB_DEVICE_RESET) {
+
+               /* Any SCB for this device will do for a target reset */
+               LIST_FOREACH(pending_scb, &ahd->pending_scbs, pending_links) {
+                       if (ahd_match_scb(ahd, pending_scb, cmd->device->id,
+                                         cmd->device->channel + 'A',
+                                         CAM_LUN_WILDCARD,
+                                         SCB_LIST_NULL, ROLE_INITIATOR) == 0)
+                               break;
+               }
+       }
+
+       if (pending_scb == NULL) {
+               printf("%s:%d:%d:%d: Command not found\n",
+                      ahd_name(ahd), cmd->device->channel, cmd->device->id,
+                      cmd->device->lun);
+               goto no_cmd;
+       }
+
+       if ((pending_scb->flags & SCB_RECOVERY_SCB) != 0) {
+               /*
+                * We can't queue two recovery actions using the same SCB
+                */
+               retval = FAILED;
+               goto  done;
+       }
+
+       /*
+        * Ensure that the card doesn't do anything
+        * behind our back.  Also make sure that we
+        * didn't "just" miss an interrupt that would
+        * affect this cmd.
+        */
+       was_paused = ahd_is_paused(ahd);
+       ahd_pause_and_flushwork(ahd);
+       paused = TRUE;
+
+       if ((pending_scb->flags & SCB_ACTIVE) == 0) {
+               printf("%s:%d:%d:%d: Command already completed\n",
+                      ahd_name(ahd), cmd->device->channel, cmd->device->id,
+                      cmd->device->lun);
+               goto no_cmd;
+       }
+
+       printf("%s: At time of recovery, card was %spaused\n",
+              ahd_name(ahd), was_paused ? "" : "not ");
+       ahd_dump_card_state(ahd);
+
+       disconnected = TRUE;
+       if (flag == SCB_ABORT) {
+               if (ahd_search_qinfifo(ahd, cmd->device->id, 
+                                      cmd->device->channel + 'A',
+                                      cmd->device->lun, 
+                                      pending_scb->hscb->tag,
+                                      ROLE_INITIATOR, CAM_REQ_ABORTED,
+                                      SEARCH_COMPLETE) > 0) {
+                       printf("%s:%d:%d:%d: Cmd aborted from QINFIFO\n",
+                              ahd_name(ahd), cmd->device->channel, 
+                              cmd->device->id, cmd->device->lun);
+                       retval = SUCCESS;
+                       goto done;
+               }
+       } else if (ahd_search_qinfifo(ahd, cmd->device->id,
+                                     cmd->device->channel + 'A',
+                                     cmd->device->lun, pending_scb->hscb->tag,
+                                     ROLE_INITIATOR, /*status*/0,
+                                     SEARCH_COUNT) > 0) {
+               disconnected = FALSE;
+       }
+
+       saved_modes = ahd_save_modes(ahd);
+       ahd_set_modes(ahd, AHD_MODE_SCSI, AHD_MODE_SCSI);
+       last_phase = ahd_inb(ahd, LASTPHASE);
+       saved_scbptr = ahd_get_scbptr(ahd);
+       active_scbptr = saved_scbptr;
+       if (disconnected && (ahd_inb(ahd, SEQ_FLAGS) & NOT_IDENTIFIED) == 0) {
+               struct scb *bus_scb;
+
+               bus_scb = ahd_lookup_scb(ahd, active_scbptr);
+               if (bus_scb == pending_scb)
+                       disconnected = FALSE;
+               else if (flag != SCB_ABORT
+                        && ahd_inb(ahd, SAVED_SCSIID) == pending_scb->hscb->scsiid
+                        && ahd_inb(ahd, SAVED_LUN) == SCB_GET_LUN(pending_scb))
+                       disconnected = FALSE;
+       }
+
+       /*
+        * At this point, pending_scb is the scb associated with the
+        * passed in command.  That command is currently active on the
+        * bus or is in the disconnected state.
+        */
+       saved_scsiid = ahd_inb(ahd, SAVED_SCSIID);
+       if (last_phase != P_BUSFREE
+        && (SCB_GET_TAG(pending_scb) == active_scbptr
+            || (flag == SCB_DEVICE_RESET
+                && SCSIID_TARGET(ahd, saved_scsiid) == cmd->device->id))) {
+
+               /*
+                * We're active on the bus, so assert ATN
+                * and hope that the target responds.
+                */
+               pending_scb = ahd_lookup_scb(ahd, active_scbptr);
+               pending_scb->flags |= SCB_RECOVERY_SCB|flag;
+               ahd_outb(ahd, MSG_OUT, HOST_MSG);
+               ahd_outb(ahd, SCSISIGO, last_phase|ATNO);
+               printf("%s:%d:%d:%d: Device is active, asserting ATN\n",
+                      ahd_name(ahd), cmd->device->channel,
+                      cmd->device->id, cmd->device->lun);
+               wait = TRUE;
+       } else if (disconnected) {
+
+               /*
+                * Actually re-queue this SCB in an attempt
+                * to select the device before it reconnects.
+                */
+               pending_scb->flags |= SCB_RECOVERY_SCB|SCB_ABORT;
+               ahd_set_scbptr(ahd, SCB_GET_TAG(pending_scb));
+               pending_scb->hscb->cdb_len = 0;
+               pending_scb->hscb->task_attribute = 0;
+               pending_scb->hscb->task_management = SIU_TASKMGMT_ABORT_TASK;
+
+               if ((pending_scb->flags & SCB_PACKETIZED) != 0) {
+                       /*
+                        * Mark the SCB has having an outstanding
+                        * task management function.  Should the command
+                        * complete normally before the task management
+                        * function can be sent, the host will be notified
+                        * to abort our requeued SCB.
+                        */
+                       ahd_outb(ahd, SCB_TASK_MANAGEMENT,
+                                pending_scb->hscb->task_management);
+               } else {
+                       /*
+                        * If non-packetized, set the MK_MESSAGE control
+                        * bit indicating that we desire to send a message.
+                        * We also set the disconnected flag since there is
+                        * no guarantee that our SCB control byte matches
+                        * the version on the card.  We don't want the
+                        * sequencer to abort the command thinking an
+                        * unsolicited reselection occurred.
+                        */
+                       pending_scb->hscb->control |= MK_MESSAGE|DISCONNECTED;
+
+                       /*
+                        * The sequencer will never re-reference the
+                        * in-core SCB.  To make sure we are notified
+                        * during reslection, set the MK_MESSAGE flag in
+                        * the card's copy of the SCB.
+                        */
+                       ahd_outb(ahd, SCB_CONTROL,
+                                ahd_inb(ahd, SCB_CONTROL)|MK_MESSAGE);
+               }
+
+               /*
+                * Clear out any entries in the QINFIFO first
+                * so we are the next SCB for this target
+                * to run.
+                */
+               ahd_search_qinfifo(ahd, cmd->device->id,
+                                  cmd->device->channel + 'A', cmd->device->lun,
+                                  SCB_LIST_NULL, ROLE_INITIATOR,
+                                  CAM_REQUEUE_REQ, SEARCH_COMPLETE);
+               ahd_qinfifo_requeue_tail(ahd, pending_scb);
+               ahd_set_scbptr(ahd, saved_scbptr);
+               ahd_print_path(ahd, pending_scb);
+               printf("Device is disconnected, re-queuing SCB\n");
+               wait = TRUE;
+       } else {
+               printf("%s:%d:%d:%d: Unable to deliver message\n",
+                      ahd_name(ahd), cmd->device->channel,
+                      cmd->device->id, cmd->device->lun);
+               retval = FAILED;
+               goto done;
+       }
+
+no_cmd:
+       /*
+        * Our assumption is that if we don't have the command, no
+        * recovery action was required, so we return success.  Again,
+        * the semantics of the mid-layer recovery engine are not
+        * well defined, so this may change in time.
+        */
+       retval = SUCCESS;
+done:
+       if (paused)
+               ahd_unpause(ahd);
+       if (wait) {
+               struct timer_list timer;
+               int ret;
+
+               ahd->platform_data->flags |= AHD_SCB_UP_EH_SEM;
+               spin_unlock_irq(&ahd->platform_data->spin_lock);
+               init_timer(&timer);
+               timer.data = (u_long)ahd;
+               timer.expires = jiffies + (5 * HZ);
+               timer.function = ahd_linux_sem_timeout;
+               add_timer(&timer);
+               printf("Recovery code sleeping\n");
+               down(&ahd->platform_data->eh_sem);
+               printf("Recovery code awake\n");
+               ret = del_timer_sync(&timer);
+               if (ret == 0) {
+                       printf("Timer Expired\n");
+                       retval = FAILED;
+               }
+               spin_lock_irq(&ahd->platform_data->spin_lock);
+       }
+       spin_unlock_irq(&ahd->platform_data->spin_lock);
+       return (retval);
 }
 
-static void
-ahd_linux_filter_inquiry(struct ahd_softc *ahd, struct ahd_devinfo *devinfo)
+static void ahd_linux_set_width(struct scsi_target *starget, int width)
 {
-       struct  scsi_inquiry_data *sid;
-       struct  ahd_initiator_tinfo *tinfo;
-       struct  ahd_transinfo *user;
-       struct  ahd_transinfo *goal;
-       struct  ahd_transinfo *curr;
-       struct  ahd_tmode_tstate *tstate;
-       struct  ahd_linux_device *dev;
-       u_int   width;
-       u_int   period;
-       u_int   offset;
-       u_int   ppr_options;
-       u_int   trans_version;
-       u_int   prot_version;
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_devinfo devinfo;
+       unsigned long flags;
 
-       /*
-        * Determine if this lun actually exists.  If so,
-        * hold on to its corresponding device structure.
-        * If not, make sure we release the device and
-        * don't bother processing the rest of this inquiry
-        * command.
-        */
-       dev = ahd_linux_get_device(ahd, devinfo->channel - 'A',
-                                  devinfo->target, devinfo->lun,
-                                  /*alloc*/TRUE);
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+       ahd_lock(ahd, &flags);
+       ahd_set_width(ahd, &devinfo, width, AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
+}
 
-       sid = (struct scsi_inquiry_data *)dev->target->inq_data;
-       if (SID_QUAL(sid) == SID_QUAL_LU_CONNECTED) {
+static void ahd_linux_set_period(struct scsi_target *starget, int period)
+{
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_tmode_tstate *tstate;
+       struct ahd_initiator_tinfo *tinfo 
+               = ahd_fetch_transinfo(ahd,
+                                     starget->channel + 'A',
+                                     shost->this_id, starget->id, &tstate);
+       struct ahd_devinfo devinfo;
+       unsigned int ppr_options = tinfo->goal.ppr_options;
+       unsigned int dt;
+       unsigned long flags;
+       unsigned long offset = tinfo->goal.offset;
 
-               dev->flags &= ~AHD_DEV_UNCONFIGURED;
-       } else {
-               dev->flags |= AHD_DEV_UNCONFIGURED;
-               return;
+#ifdef AHD_DEBUG
+       if ((ahd_debug & AHD_SHOW_DV) != 0)
+               printf("%s: set period to %d\n", ahd_name(ahd), period);
+#endif
+       if (offset == 0)
+               offset = MAX_OFFSET;
+
+       if (period < 8)
+               period = 8;
+       if (period < 10) {
+               ppr_options |= MSG_EXT_PPR_DT_REQ;
+               if (period == 8)
+                       ppr_options |= MSG_EXT_PPR_IU_REQ;
        }
 
-       /*
-        * Update our notion of this device's transfer
-        * negotiation capabilities.
-        */
-       tinfo = ahd_fetch_transinfo(ahd, devinfo->channel,
-                                   devinfo->our_scsiid,
-                                   devinfo->target, &tstate);
-       user = &tinfo->user;
-       goal = &tinfo->goal;
-       curr = &tinfo->curr;
-       width = user->width;
-       period = user->period;
-       offset = user->offset;
-       ppr_options = user->ppr_options;
-       trans_version = user->transport_version;
-       prot_version = MIN(user->protocol_version, SID_ANSI_REV(sid));
+       dt = ppr_options & MSG_EXT_PPR_DT_REQ;
 
-       /*
-        * Only attempt SPI3/4 once we've verified that
-        * the device claims to support SPI3/4 features.
-        */
-       if (prot_version < SCSI_REV_2)
-               trans_version = SID_ANSI_REV(sid);
-       else
-               trans_version = SCSI_REV_2;
-
-       if ((sid->flags & SID_WBus16) == 0)
-               width = MSG_EXT_WDTR_BUS_8_BIT;
-       if ((sid->flags & SID_Sync) == 0) {
-               period = 0;
-               offset = 0;
-               ppr_options = 0;
-       }
-       if ((sid->spi3data & SID_SPI_QAS) == 0)
-               ppr_options &= ~MSG_EXT_PPR_QAS_REQ;
-       if ((sid->spi3data & SID_SPI_CLOCK_DT) == 0)
-               ppr_options &= MSG_EXT_PPR_QAS_REQ;
-       if ((sid->spi3data & SID_SPI_IUS) == 0)
-               ppr_options &= (MSG_EXT_PPR_DT_REQ
-                             | MSG_EXT_PPR_QAS_REQ);
-
-       if (prot_version > SCSI_REV_2
-        && ppr_options != 0)
-               trans_version = user->transport_version;
-
-       ahd_validate_width(ahd, /*tinfo limit*/NULL, &width, ROLE_UNKNOWN);
-       ahd_find_syncrate(ahd, &period, &ppr_options, AHD_SYNCRATE_MAX);
-       ahd_validate_offset(ahd, /*tinfo limit*/NULL, period,
-                           &offset, width, ROLE_UNKNOWN);
-       if (offset == 0 || period == 0) {
-               period = 0;
-               offset = 0;
-               ppr_options = 0;
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+
+       /* all PPR requests apart from QAS require wide transfers */
+       if (ppr_options & ~MSG_EXT_PPR_QAS_REQ) {
+               if (spi_width(starget) == 0)
+                       ppr_options &= MSG_EXT_PPR_QAS_REQ;
        }
-       /* Apply our filtered user settings. */
-       curr->transport_version = trans_version;
-       curr->protocol_version = prot_version;
-       ahd_set_width(ahd, devinfo, width, AHD_TRANS_GOAL, /*paused*/FALSE);
-       ahd_set_syncrate(ahd, devinfo, period, offset, ppr_options,
-                        AHD_TRANS_GOAL, /*paused*/FALSE);
+
+       ahd_find_syncrate(ahd, &period, &ppr_options,
+                         dt ? AHD_SYNCRATE_MAX : AHD_SYNCRATE_ULTRA2);
+
+       ahd_lock(ahd, &flags);
+       ahd_set_syncrate(ahd, &devinfo, period, offset,
+                        ppr_options, AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
 }
 
-void
-ahd_freeze_simq(struct ahd_softc *ahd)
+static void ahd_linux_set_offset(struct scsi_target *starget, int offset)
 {
-       ahd->platform_data->qfrozen++;
-       if (ahd->platform_data->qfrozen == 1) {
-               scsi_block_requests(ahd->platform_data->host);
-               ahd_platform_abort_scbs(ahd, CAM_TARGET_WILDCARD, ALL_CHANNELS,
-                                       CAM_LUN_WILDCARD, SCB_LIST_NULL,
-                                       ROLE_INITIATOR, CAM_REQUEUE_REQ);
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_tmode_tstate *tstate;
+       struct ahd_initiator_tinfo *tinfo 
+               = ahd_fetch_transinfo(ahd,
+                                     starget->channel + 'A',
+                                     shost->this_id, starget->id, &tstate);
+       struct ahd_devinfo devinfo;
+       unsigned int ppr_options = 0;
+       unsigned int period = 0;
+       unsigned int dt = ppr_options & MSG_EXT_PPR_DT_REQ;
+       unsigned long flags;
+
+#ifdef AHD_DEBUG
+       if ((ahd_debug & AHD_SHOW_DV) != 0)
+               printf("%s: set offset to %d\n", ahd_name(ahd), offset);
+#endif
+
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+       if (offset != 0) {
+               period = tinfo->goal.period;
+               ppr_options = tinfo->goal.ppr_options;
+               ahd_find_syncrate(ahd, &period, &ppr_options, 
+                                 dt ? AHD_SYNCRATE_MAX : AHD_SYNCRATE_ULTRA2);
        }
+
+       ahd_lock(ahd, &flags);
+       ahd_set_syncrate(ahd, &devinfo, period, offset, ppr_options,
+                        AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
 }
 
-void
-ahd_release_simq(struct ahd_softc *ahd)
+static void ahd_linux_set_dt(struct scsi_target *starget, int dt)
 {
-       u_long s;
-       int    unblock_reqs;
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_tmode_tstate *tstate;
+       struct ahd_initiator_tinfo *tinfo 
+               = ahd_fetch_transinfo(ahd,
+                                     starget->channel + 'A',
+                                     shost->this_id, starget->id, &tstate);
+       struct ahd_devinfo devinfo;
+       unsigned int ppr_options = tinfo->goal.ppr_options
+               & ~MSG_EXT_PPR_DT_REQ;
+       unsigned int period = tinfo->goal.period;
+       unsigned int width = tinfo->goal.width;
+       unsigned long flags;
 
-       unblock_reqs = 0;
-       ahd_lock(ahd, &s);
-       if (ahd->platform_data->qfrozen > 0)
-               ahd->platform_data->qfrozen--;
-       if (ahd->platform_data->qfrozen == 0) {
-               unblock_reqs = 1;
+#ifdef AHD_DEBUG
+       if ((ahd_debug & AHD_SHOW_DV) != 0)
+               printf("%s: %s DT\n", ahd_name(ahd), 
+                      dt ? "enabling" : "disabling");
+#endif
+       if (dt) {
+               ppr_options |= MSG_EXT_PPR_DT_REQ;
+               if (!width)
+                       ahd_linux_set_width(starget, 1);
+       } else {
+               if (period <= 9)
+                       period = 10; /* If resetting DT, period must be >= 25ns */
+               /* IU is invalid without DT set */
+               ppr_options &= ~MSG_EXT_PPR_IU_REQ;
        }
-       if (AHD_DV_SIMQ_FROZEN(ahd)
-        && ((ahd->platform_data->flags & AHD_DV_WAIT_SIMQ_RELEASE) != 0)) {
-               ahd->platform_data->flags &= ~AHD_DV_WAIT_SIMQ_RELEASE;
-               up(&ahd->platform_data->dv_sem);
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+       ahd_find_syncrate(ahd, &period, &ppr_options,
+                         dt ? AHD_SYNCRATE_MAX : AHD_SYNCRATE_ULTRA2);
+
+       ahd_lock(ahd, &flags);
+       ahd_set_syncrate(ahd, &devinfo, period, tinfo->goal.offset,
+                        ppr_options, AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
+}
+
+static void ahd_linux_set_qas(struct scsi_target *starget, int qas)
+{
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_tmode_tstate *tstate;
+       struct ahd_initiator_tinfo *tinfo 
+               = ahd_fetch_transinfo(ahd,
+                                     starget->channel + 'A',
+                                     shost->this_id, starget->id, &tstate);
+       struct ahd_devinfo devinfo;
+       unsigned int ppr_options = tinfo->goal.ppr_options
+               & ~MSG_EXT_PPR_QAS_REQ;
+       unsigned int period = tinfo->goal.period;
+       unsigned int dt;
+       unsigned long flags;
+
+#ifdef AHD_DEBUG
+       if ((ahd_debug & AHD_SHOW_DV) != 0)
+               printf("%s: %s QAS\n", ahd_name(ahd), 
+                      qas ? "enabling" : "disabling");
+#endif
+
+       if (qas) {
+               ppr_options |= MSG_EXT_PPR_QAS_REQ; 
        }
-       ahd_schedule_runq(ahd);
-       ahd_unlock(ahd, &s);
-       /*
-        * There is still a race here.  The mid-layer
-        * should keep its own freeze count and use
-        * a bottom half handler to run the queues
-        * so we can unblock with our own lock held.
-        */
-       if (unblock_reqs)
-               scsi_unblock_requests(ahd->platform_data->host);
+
+       dt = ppr_options & MSG_EXT_PPR_DT_REQ;
+
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+       ahd_find_syncrate(ahd, &period, &ppr_options,
+                         dt ? AHD_SYNCRATE_MAX : AHD_SYNCRATE_ULTRA2);
+
+       ahd_lock(ahd, &flags);
+       ahd_set_syncrate(ahd, &devinfo, period, tinfo->goal.offset,
+                        ppr_options, AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
 }
 
-static void
-ahd_linux_sem_timeout(u_long arg)
+static void ahd_linux_set_iu(struct scsi_target *starget, int iu)
 {
-       struct  scb *scb;
-       struct  ahd_softc *ahd;
-       u_long  s;
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_tmode_tstate *tstate;
+       struct ahd_initiator_tinfo *tinfo 
+               = ahd_fetch_transinfo(ahd,
+                                     starget->channel + 'A',
+                                     shost->this_id, starget->id, &tstate);
+       struct ahd_devinfo devinfo;
+       unsigned int ppr_options = tinfo->goal.ppr_options
+               & ~MSG_EXT_PPR_IU_REQ;
+       unsigned int period = tinfo->goal.period;
+       unsigned int dt;
+       unsigned long flags;
 
-       scb = (struct scb *)arg;
-       ahd = scb->ahd_softc;
-       ahd_lock(ahd, &s);
-       if ((scb->platform_data->flags & AHD_SCB_UP_EH_SEM) != 0) {
-               scb->platform_data->flags &= ~AHD_SCB_UP_EH_SEM;
-               up(&ahd->platform_data->eh_sem);
+#ifdef AHD_DEBUG
+       if ((ahd_debug & AHD_SHOW_DV) != 0)
+               printf("%s: %s IU\n", ahd_name(ahd),
+                      iu ? "enabling" : "disabling");
+#endif
+
+       if (iu) {
+               ppr_options |= MSG_EXT_PPR_IU_REQ;
+               ppr_options |= MSG_EXT_PPR_DT_REQ; /* IU requires DT */
        }
-       ahd_unlock(ahd, &s);
+
+       dt = ppr_options & MSG_EXT_PPR_DT_REQ;
+
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+       ahd_find_syncrate(ahd, &period, &ppr_options,
+                         dt ? AHD_SYNCRATE_MAX : AHD_SYNCRATE_ULTRA2);
+
+       ahd_lock(ahd, &flags);
+       ahd_set_syncrate(ahd, &devinfo, period, tinfo->goal.offset,
+                        ppr_options, AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
 }
 
-static void
-ahd_linux_dev_timed_unfreeze(u_long arg)
+static void ahd_linux_set_rd_strm(struct scsi_target *starget, int rdstrm)
 {
-       struct ahd_linux_device *dev;
-       struct ahd_softc *ahd;
-       u_long s;
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_tmode_tstate *tstate;
+       struct ahd_initiator_tinfo *tinfo 
+               = ahd_fetch_transinfo(ahd,
+                                     starget->channel + 'A',
+                                     shost->this_id, starget->id, &tstate);
+       struct ahd_devinfo devinfo;
+       unsigned int ppr_options = tinfo->goal.ppr_options
+               & ~MSG_EXT_PPR_RD_STRM;
+       unsigned int period = tinfo->goal.period;
+       unsigned int dt = ppr_options & MSG_EXT_PPR_DT_REQ;
+       unsigned long flags;
 
-       dev = (struct ahd_linux_device *)arg;
-       ahd = dev->target->ahd;
-       ahd_lock(ahd, &s);
-       dev->flags &= ~AHD_DEV_TIMER_ACTIVE;
-       if (dev->qfrozen > 0)
-               dev->qfrozen--;
-       if (dev->qfrozen == 0
-        && (dev->flags & AHD_DEV_ON_RUN_LIST) == 0)
-               ahd_linux_run_device_queue(ahd, dev);
-       if ((dev->flags & AHD_DEV_UNCONFIGURED) != 0
-        && dev->active == 0)
-               ahd_linux_free_device(ahd, dev);
-       ahd_unlock(ahd, &s);
+#ifdef AHD_DEBUG
+       if ((ahd_debug & AHD_SHOW_DV) != 0)
+               printf("%s: %s Read Streaming\n", ahd_name(ahd), 
+                      rdstrm  ? "enabling" : "disabling");
+#endif
+
+       if (rdstrm)
+               ppr_options |= MSG_EXT_PPR_RD_STRM;
+
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+       ahd_find_syncrate(ahd, &period, &ppr_options,
+                         dt ? AHD_SYNCRATE_MAX : AHD_SYNCRATE_ULTRA2);
+
+       ahd_lock(ahd, &flags);
+       ahd_set_syncrate(ahd, &devinfo, period, tinfo->goal.offset,
+                        ppr_options, AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
 }
 
-void
-ahd_platform_dump_card_state(struct ahd_softc *ahd)
+static void ahd_linux_set_wr_flow(struct scsi_target *starget, int wrflow)
 {
-       struct ahd_linux_device *dev;
-       int target;
-       int maxtarget;
-       int lun;
-       int i;
-
-       maxtarget = (ahd->features & AHD_WIDE) ? 15 : 7;
-       for (target = 0; target <=maxtarget; target++) {
-
-               for (lun = 0; lun < AHD_NUM_LUNS; lun++) {
-                       struct ahd_cmd *acmd;
-
-                       dev = ahd_linux_get_device(ahd, 0, target,
-                                                  lun, /*alloc*/FALSE);
-                       if (dev == NULL)
-                               continue;
-
-                       printf("DevQ(%d:%d:%d): ", 0, target, lun);
-                       i = 0;
-                       TAILQ_FOREACH(acmd, &dev->busyq, acmd_links.tqe) {
-                               if (i++ > AHD_SCB_MAX)
-                                       break;
-                       }
-                       printf("%d waiting\n", i);
-               }
-       }
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_tmode_tstate *tstate;
+       struct ahd_initiator_tinfo *tinfo 
+               = ahd_fetch_transinfo(ahd,
+                                     starget->channel + 'A',
+                                     shost->this_id, starget->id, &tstate);
+       struct ahd_devinfo devinfo;
+       unsigned int ppr_options = tinfo->goal.ppr_options
+               & ~MSG_EXT_PPR_WR_FLOW;
+       unsigned int period = tinfo->goal.period;
+       unsigned int dt = ppr_options & MSG_EXT_PPR_DT_REQ;
+       unsigned long flags;
+
+#ifdef AHD_DEBUG
+       if ((ahd_debug & AHD_SHOW_DV) != 0)
+               printf("%s: %s Write Flow Control\n", ahd_name(ahd),
+                      wrflow ? "enabling" : "disabling");
+#endif
+
+       if (wrflow)
+               ppr_options |= MSG_EXT_PPR_WR_FLOW;
+
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+       ahd_find_syncrate(ahd, &period, &ppr_options,
+                         dt ? AHD_SYNCRATE_MAX : AHD_SYNCRATE_ULTRA2);
+
+       ahd_lock(ahd, &flags);
+       ahd_set_syncrate(ahd, &devinfo, period, tinfo->goal.offset,
+                        ppr_options, AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
 }
 
-static int __init
-ahd_linux_init(void)
+static void ahd_linux_set_rti(struct scsi_target *starget, int rti)
 {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-       return ahd_linux_detect(&aic79xx_driver_template);
-#else
-       scsi_register_module(MODULE_SCSI_HA, &aic79xx_driver_template);
-       if (aic79xx_driver_template.present == 0) {
-               scsi_unregister_module(MODULE_SCSI_HA,
-                                      &aic79xx_driver_template);
-               return (-ENODEV);
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_tmode_tstate *tstate;
+       struct ahd_initiator_tinfo *tinfo 
+               = ahd_fetch_transinfo(ahd,
+                                     starget->channel + 'A',
+                                     shost->this_id, starget->id, &tstate);
+       struct ahd_devinfo devinfo;
+       unsigned int ppr_options = tinfo->goal.ppr_options
+               & ~MSG_EXT_PPR_RTI;
+       unsigned int period = tinfo->goal.period;
+       unsigned int dt = ppr_options & MSG_EXT_PPR_DT_REQ;
+       unsigned long flags;
+
+       if ((ahd->features & AHD_RTI) == 0) {
+#ifdef AHD_DEBUG
+               if ((ahd_debug & AHD_SHOW_DV) != 0)
+                       printf("%s: RTI not available\n", ahd_name(ahd));
+#endif
+               return;
        }
 
-       return (0);
+#ifdef AHD_DEBUG
+       if ((ahd_debug & AHD_SHOW_DV) != 0)
+               printf("%s: %s RTI\n", ahd_name(ahd),
+                      rti ? "enabling" : "disabling");
 #endif
+
+       if (rti)
+               ppr_options |= MSG_EXT_PPR_RTI;
+
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+       ahd_find_syncrate(ahd, &period, &ppr_options,
+                         dt ? AHD_SYNCRATE_MAX : AHD_SYNCRATE_ULTRA2);
+
+       ahd_lock(ahd, &flags);
+       ahd_set_syncrate(ahd, &devinfo, period, tinfo->goal.offset,
+                        ppr_options, AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
 }
 
-static void __exit
-ahd_linux_exit(void)
+static void ahd_linux_set_pcomp_en(struct scsi_target *starget, int pcomp)
 {
-       struct ahd_softc *ahd;
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_tmode_tstate *tstate;
+       struct ahd_initiator_tinfo *tinfo 
+               = ahd_fetch_transinfo(ahd,
+                                     starget->channel + 'A',
+                                     shost->this_id, starget->id, &tstate);
+       struct ahd_devinfo devinfo;
+       unsigned int ppr_options = tinfo->goal.ppr_options
+               & ~MSG_EXT_PPR_PCOMP_EN;
+       unsigned int period = tinfo->goal.period;
+       unsigned int dt = ppr_options & MSG_EXT_PPR_DT_REQ;
+       unsigned long flags;
 
-       /*
-        * Shutdown DV threads before going into the SCSI mid-layer.
-        * This avoids situations where the mid-layer locks the entire
-        * kernel so that waiting for our DV threads to exit leads
-        * to deadlock.
-        */
-       TAILQ_FOREACH(ahd, &ahd_tailq, links) {
+#ifdef AHD_DEBUG
+       if ((ahd_debug & AHD_SHOW_DV) != 0)
+               printf("%s: %s Precompensation\n", ahd_name(ahd), 
+                      pcomp ? "Enable" : "Disable");
+#endif
 
-               ahd_linux_kill_dv_thread(ahd);
-       }
+       if (pcomp)
+               ppr_options |= MSG_EXT_PPR_PCOMP_EN;
+
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+       ahd_find_syncrate(ahd, &period, &ppr_options,
+                         dt ? AHD_SYNCRATE_MAX : AHD_SYNCRATE_ULTRA2);
+
+       ahd_lock(ahd, &flags);
+       ahd_set_syncrate(ahd, &devinfo, period, tinfo->goal.offset,
+                        ppr_options, AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
+}
+
+static void ahd_linux_set_hold_mcs(struct scsi_target *starget, int hold)
+{
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct ahd_softc *ahd = *((struct ahd_softc **)shost->hostdata);
+       struct ahd_tmode_tstate *tstate;
+       struct ahd_initiator_tinfo *tinfo 
+               = ahd_fetch_transinfo(ahd,
+                                     starget->channel + 'A',
+                                     shost->this_id, starget->id, &tstate);
+       struct ahd_devinfo devinfo;
+       unsigned int ppr_options = tinfo->goal.ppr_options
+               & ~MSG_EXT_PPR_HOLD_MCS;
+       unsigned int period = tinfo->goal.period;
+       unsigned int dt = ppr_options & MSG_EXT_PPR_DT_REQ;
+       unsigned long flags;
+
+       if (hold)
+               ppr_options |= MSG_EXT_PPR_HOLD_MCS;
+
+       ahd_compile_devinfo(&devinfo, shost->this_id, starget->id, 0,
+                           starget->channel + 'A', ROLE_INITIATOR);
+       ahd_find_syncrate(ahd, &period, &ppr_options,
+                         dt ? AHD_SYNCRATE_MAX : AHD_SYNCRATE_ULTRA2);
+
+       ahd_lock(ahd, &flags);
+       ahd_set_syncrate(ahd, &devinfo, period, tinfo->goal.offset,
+                        ppr_options, AHD_TRANS_GOAL, FALSE);
+       ahd_unlock(ahd, &flags);
+}
+
+
+
+static struct spi_function_template ahd_linux_transport_functions = {
+       .set_offset     = ahd_linux_set_offset,
+       .show_offset    = 1,
+       .set_period     = ahd_linux_set_period,
+       .show_period    = 1,
+       .set_width      = ahd_linux_set_width,
+       .show_width     = 1,
+       .set_dt         = ahd_linux_set_dt,
+       .show_dt        = 1,
+       .set_iu         = ahd_linux_set_iu,
+       .show_iu        = 1,
+       .set_qas        = ahd_linux_set_qas,
+       .show_qas       = 1,
+       .set_rd_strm    = ahd_linux_set_rd_strm,
+       .show_rd_strm   = 1,
+       .set_wr_flow    = ahd_linux_set_wr_flow,
+       .show_wr_flow   = 1,
+       .set_rti        = ahd_linux_set_rti,
+       .show_rti       = 1,
+       .set_pcomp_en   = ahd_linux_set_pcomp_en,
+       .show_pcomp_en  = 1,
+       .set_hold_mcs   = ahd_linux_set_hold_mcs,
+       .show_hold_mcs  = 1,
+};
+
+static int __init
+ahd_linux_init(void)
+{
+       int     error = 0;
 
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
        /*
-        * In 2.4 we have to unregister from the PCI core _after_
-        * unregistering from the scsi midlayer to avoid dangling
-        * references.
+        * If we've been passed any parameters, process them now.
         */
-       scsi_unregister_module(MODULE_SCSI_HA, &aic79xx_driver_template);
-#endif
+       if (aic79xx)
+               aic79xx_setup(aic79xx);
+
+       ahd_linux_transport_template =
+               spi_attach_transport(&ahd_linux_transport_functions);
+       if (!ahd_linux_transport_template)
+               return -ENODEV;
+
+       scsi_transport_reserve_target(ahd_linux_transport_template,
+                                     sizeof(struct ahd_linux_target));
+       scsi_transport_reserve_device(ahd_linux_transport_template,
+                                     sizeof(struct ahd_linux_device));
+
+       error = ahd_linux_pci_init();
+       if (error)
+               spi_release_transport(ahd_linux_transport_template);
+       return error;
+}
+
+static void __exit
+ahd_linux_exit(void)
+{
        ahd_linux_pci_exit();
+       spi_release_transport(ahd_linux_transport_template);
 }
 
 module_init(ahd_linux_init);
index 7823e52e99abb8e47f6a7d8148b89ab28a7a47b6..052c6619accc33c0aaee5b59b6f6acd8fd0c42b3 100644 (file)
@@ -42,6 +42,7 @@
 #ifndef _AIC79XX_LINUX_H_
 #define _AIC79XX_LINUX_H_
 
+#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/blkdev.h>
 #include <linux/delay.h>
 #include <linux/pci.h>
 #include <linux/smp_lock.h>
 #include <linux/version.h>
+#include <linux/interrupt.h>
 #include <linux/module.h>
+#include <linux/slab.h>
 #include <asm/byteorder.h>
 #include <asm/io.h>
 
-#include <linux/interrupt.h> /* For tasklet support. */
-#include <linux/config.h>
-#include <linux/slab.h>
+#include <scsi/scsi.h>
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_eh.h>
+#include <scsi/scsi_device.h>
+#include <scsi/scsi_host.h>
+#include <scsi/scsi_tcq.h>
+#include <scsi/scsi_transport.h>
+#include <scsi/scsi_transport_spi.h>
 
 /* Core SCSI definitions */
 #define AIC_LIB_PREFIX ahd
-#include "scsi.h"
-#include <scsi/scsi_host.h>
 
 /* Name space conflict with BSD queue macros */
 #ifdef LIST_HEAD
 /************************* Forward Declarations *******************************/
 struct ahd_softc;
 typedef struct pci_dev *ahd_dev_softc_t;
-typedef Scsi_Cmnd      *ahd_io_ctx_t;
+typedef struct scsi_cmnd      *ahd_io_ctx_t;
 
 /******************************* Byte Order ***********************************/
 #define ahd_htobe16(x) cpu_to_be16(x)
@@ -114,8 +120,7 @@ typedef Scsi_Cmnd      *ahd_io_ctx_t;
 
 /************************* Configuration Data *********************************/
 extern uint32_t aic79xx_allow_memio;
-extern int aic79xx_detect_complete;
-extern Scsi_Host_Template aic79xx_driver_template;
+extern struct scsi_host_template aic79xx_driver_template;
 
 /***************************** Bus Space/DMA **********************************/
 
@@ -145,11 +150,7 @@ struct ahd_linux_dma_tag
 };
 typedef struct ahd_linux_dma_tag* bus_dma_tag_t;
 
-struct ahd_linux_dmamap
-{
-       dma_addr_t      bus_addr;
-};
-typedef struct ahd_linux_dmamap* bus_dmamap_t;
+typedef dma_addr_t bus_dmamap_t;
 
 typedef int bus_dma_filter_t(void*, dma_addr_t);
 typedef void bus_dmamap_callback_t(void *, bus_dma_segment_t *, int, int);
@@ -226,12 +227,12 @@ typedef struct timer_list ahd_timer_t;
 #define ahd_timer_init init_timer
 #define ahd_timer_stop del_timer_sync
 typedef void ahd_linux_callback_t (u_long);  
-static __inline void ahd_timer_reset(ahd_timer_t *timer, u_int usec,
+static __inline void ahd_timer_reset(ahd_timer_t *timer, int usec,
                                     ahd_callback_t *func, void *arg);
 static __inline void ahd_scb_timer_reset(struct scb *scb, u_int usec);
 
 static __inline void
-ahd_timer_reset(ahd_timer_t *timer, u_int usec, ahd_callback_t *func, void *arg)
+ahd_timer_reset(ahd_timer_t *timer, int usec, ahd_callback_t *func, void *arg)
 {
        struct ahd_softc *ahd;
 
@@ -252,43 +253,8 @@ ahd_scb_timer_reset(struct scb *scb, u_int usec)
 /***************************** SMP support ************************************/
 #include <linux/spinlock.h>
 
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) || defined(SCSI_HAS_HOST_LOCK))
-#define AHD_SCSI_HAS_HOST_LOCK 1
-#else
-#define AHD_SCSI_HAS_HOST_LOCK 0
-#endif
-
 #define AIC79XX_DRIVER_VERSION "1.3.11"
 
-/**************************** Front End Queues ********************************/
-/*
- * Data structure used to cast the Linux struct scsi_cmnd to something
- * that allows us to use the queue macros.  The linux structure has
- * plenty of space to hold the links fields as required by the queue
- * macros, but the queue macors require them to have the correct type.
- */
-struct ahd_cmd_internal {
-       /* Area owned by the Linux scsi layer. */
-       uint8_t private[offsetof(struct scsi_cmnd, SCp.Status)];
-       union {
-               STAILQ_ENTRY(ahd_cmd)   ste;
-               LIST_ENTRY(ahd_cmd)     le;
-               TAILQ_ENTRY(ahd_cmd)    tqe;
-       } links;
-       uint32_t                        end;
-};
-
-struct ahd_cmd {
-       union {
-               struct ahd_cmd_internal icmd;
-               struct scsi_cmnd        scsi_cmd;
-       } un;
-};
-
-#define acmd_icmd(cmd) ((cmd)->un.icmd)
-#define acmd_scsi_cmd(cmd) ((cmd)->un.scsi_cmd)
-#define acmd_links un.icmd.links
-
 /*************************** Device Data Structures ***************************/
 /*
  * A per probed device structure used to deal with some error recovery
@@ -297,22 +263,17 @@ struct ahd_cmd {
  * after a successfully completed inquiry command to the target when
  * that inquiry data indicates a lun is present.
  */
-TAILQ_HEAD(ahd_busyq, ahd_cmd);
+
 typedef enum {
-       AHD_DEV_UNCONFIGURED     = 0x01,
        AHD_DEV_FREEZE_TIL_EMPTY = 0x02, /* Freeze queue until active == 0 */
-       AHD_DEV_TIMER_ACTIVE     = 0x04, /* Our timer is active */
-       AHD_DEV_ON_RUN_LIST      = 0x08, /* Queued to be run later */
        AHD_DEV_Q_BASIC          = 0x10, /* Allow basic device queuing */
        AHD_DEV_Q_TAGGED         = 0x20, /* Allow full SCSI2 command queueing */
        AHD_DEV_PERIODIC_OTAG    = 0x40, /* Send OTAG to prevent starvation */
-       AHD_DEV_SLAVE_CONFIGURED = 0x80  /* slave_configure() has been called */
 } ahd_linux_dev_flags;
 
 struct ahd_linux_target;
 struct ahd_linux_device {
        TAILQ_ENTRY(ahd_linux_device) links;
-       struct                  ahd_busyq busyq;
 
        /*
         * The number of transactions currently
@@ -388,62 +349,12 @@ struct ahd_linux_device {
         */
        u_int                   commands_since_idle_or_otag;
 #define AHD_OTAG_THRESH        500
-
-       int                     lun;
-       Scsi_Device            *scsi_device;
-       struct                  ahd_linux_target *target;
 };
 
-typedef enum {
-       AHD_DV_REQUIRED          = 0x01,
-       AHD_INQ_VALID            = 0x02,
-       AHD_BASIC_DV             = 0x04,
-       AHD_ENHANCED_DV          = 0x08
-} ahd_linux_targ_flags;
-
-/* DV States */
-typedef enum {
-       AHD_DV_STATE_EXIT = 0,
-       AHD_DV_STATE_INQ_SHORT_ASYNC,
-       AHD_DV_STATE_INQ_ASYNC,
-       AHD_DV_STATE_INQ_ASYNC_VERIFY,
-       AHD_DV_STATE_TUR,
-       AHD_DV_STATE_REBD,
-       AHD_DV_STATE_INQ_VERIFY,
-       AHD_DV_STATE_WEB,
-       AHD_DV_STATE_REB,
-       AHD_DV_STATE_SU,
-       AHD_DV_STATE_BUSY
-} ahd_dv_state;
-
 struct ahd_linux_target {
-       struct ahd_linux_device  *devices[AHD_NUM_LUNS];
-       int                       channel;
-       int                       target;
-       int                       refcount;
+       struct scsi_device       *sdev[AHD_NUM_LUNS];
        struct ahd_transinfo      last_tinfo;
        struct ahd_softc         *ahd;
-       ahd_linux_targ_flags      flags;
-       struct scsi_inquiry_data *inq_data;
-       /*
-        * The next "fallback" period to use for narrow/wide transfers.
-        */
-       uint8_t                   dv_next_narrow_period;
-       uint8_t                   dv_next_wide_period;
-       uint8_t                   dv_max_width;
-       uint8_t                   dv_max_ppr_options;
-       uint8_t                   dv_last_ppr_options;
-       u_int                     dv_echo_size;
-       ahd_dv_state              dv_state;
-       u_int                     dv_state_retry;
-       uint8_t                  *dv_buffer;
-       uint8_t                  *dv_buffer1;
-
-       /*
-        * Cumulative counter of errors.
-        */
-       u_long                  errors_detected;
-       u_long                  cmds_since_error;
 };
 
 /********************* Definitions Required by the Core ***********************/
@@ -453,32 +364,16 @@ struct ahd_linux_target {
  * manner and are allocated below 4GB, the number of S/G segments is
  * unrestricted.
  */
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-/*
- * We dynamically adjust the number of segments in pre-2.5 kernels to
- * avoid fragmentation issues in the SCSI mid-layer's private memory
- * allocator.  See aic79xx_osm.c ahd_linux_size_nseg() for details.
- */
-extern u_int ahd_linux_nseg;
-#define        AHD_NSEG ahd_linux_nseg
-#define        AHD_LINUX_MIN_NSEG 64
-#else
 #define        AHD_NSEG 128
-#endif
 
 /*
  * Per-SCB OSM storage.
  */
-typedef enum {
-       AHD_SCB_UP_EH_SEM = 0x1
-} ahd_linux_scb_flags;
-
 struct scb_platform_data {
        struct ahd_linux_device *dev;
        dma_addr_t               buf_busaddr;
        uint32_t                 xfer_len;
        uint32_t                 sense_resid;   /* Auto-Sense residual */
-       ahd_linux_scb_flags      flags;
 };
 
 /*
@@ -487,44 +382,23 @@ struct scb_platform_data {
  * alignment restrictions of the various platforms supported by
  * this driver.
  */
-typedef enum {
-       AHD_DV_WAIT_SIMQ_EMPTY   = 0x01,
-       AHD_DV_WAIT_SIMQ_RELEASE = 0x02,
-       AHD_DV_ACTIVE            = 0x04,
-       AHD_DV_SHUTDOWN          = 0x08,
-       AHD_RUN_CMPLT_Q_TIMER    = 0x10
-} ahd_linux_softc_flags;
-
-TAILQ_HEAD(ahd_completeq, ahd_cmd);
-
 struct ahd_platform_data {
        /*
         * Fields accessed from interrupt context.
         */
-       struct ahd_linux_target *targets[AHD_NUM_TARGETS]; 
-       TAILQ_HEAD(, ahd_linux_device) device_runq;
-       struct ahd_completeq     completeq;
+       struct scsi_target *starget[AHD_NUM_TARGETS]; 
 
        spinlock_t               spin_lock;
-       struct tasklet_struct    runq_tasklet;
        u_int                    qfrozen;
-       pid_t                    dv_pid;
-       struct timer_list        completeq_timer;
        struct timer_list        reset_timer;
-       struct timer_list        stats_timer;
        struct semaphore         eh_sem;
-       struct semaphore         dv_sem;
-       struct semaphore         dv_cmd_sem;    /* XXX This needs to be in
-                                                * the target struct
-                                                */
-       struct scsi_device      *dv_scsi_dev;
        struct Scsi_Host        *host;          /* pointer to scsi host */
 #define AHD_LINUX_NOIRQ        ((uint32_t)~0)
        uint32_t                 irq;           /* IRQ for this adapter */
        uint32_t                 bios_address;
        uint32_t                 mem_busaddr;   /* Mem Base Addr */
-       uint64_t                 hw_dma_mask;
-       ahd_linux_softc_flags    flags;
+#define        AHD_SCB_UP_EH_SEM 0x1
+       uint32_t                 flags;
 };
 
 /************************** OS Utility Wrappers *******************************/
@@ -641,7 +515,7 @@ ahd_insb(struct ahd_softc * ahd, long port, uint8_t *array, int count)
 
 /**************************** Initialization **********************************/
 int            ahd_linux_register_host(struct ahd_softc *,
-                                       Scsi_Host_Template *);
+                                       struct scsi_host_template *);
 
 uint64_t       ahd_linux_get_memsize(void);
 
@@ -657,28 +531,6 @@ void       ahd_format_transinfo(struct info_str *info,
                             struct ahd_transinfo *tinfo);
 
 /******************************** Locking *************************************/
-/* Lock protecting internal data structures */
-static __inline void ahd_lockinit(struct ahd_softc *);
-static __inline void ahd_lock(struct ahd_softc *, unsigned long *flags);
-static __inline void ahd_unlock(struct ahd_softc *, unsigned long *flags);
-
-/* Lock acquisition and release of the above lock in midlayer entry points. */
-static __inline void ahd_midlayer_entrypoint_lock(struct ahd_softc *,
-                                                 unsigned long *flags);
-static __inline void ahd_midlayer_entrypoint_unlock(struct ahd_softc *,
-                                                   unsigned long *flags);
-
-/* Lock held during command compeletion to the upper layer */
-static __inline void ahd_done_lockinit(struct ahd_softc *);
-static __inline void ahd_done_lock(struct ahd_softc *, unsigned long *flags);
-static __inline void ahd_done_unlock(struct ahd_softc *, unsigned long *flags);
-
-/* Lock held during ahd_list manipulation and ahd softc frees */
-extern spinlock_t ahd_list_spinlock;
-static __inline void ahd_list_lockinit(void);
-static __inline void ahd_list_lock(unsigned long *flags);
-static __inline void ahd_list_unlock(unsigned long *flags);
-
 static __inline void
 ahd_lockinit(struct ahd_softc *ahd)
 {
@@ -697,75 +549,6 @@ ahd_unlock(struct ahd_softc *ahd, unsigned long *flags)
        spin_unlock_irqrestore(&ahd->platform_data->spin_lock, *flags);
 }
 
-static __inline void
-ahd_midlayer_entrypoint_lock(struct ahd_softc *ahd, unsigned long *flags)
-{
-       /*
-        * In 2.5.X and some 2.4.X versions, the midlayer takes our
-        * lock just before calling us, so we avoid locking again.
-        * For other kernel versions, the io_request_lock is taken
-        * just before our entry point is called.  In this case, we
-        * trade the io_request_lock for our per-softc lock.
-        */
-#if AHD_SCSI_HAS_HOST_LOCK == 0
-       spin_unlock(&io_request_lock);
-       spin_lock(&ahd->platform_data->spin_lock);
-#endif
-}
-
-static __inline void
-ahd_midlayer_entrypoint_unlock(struct ahd_softc *ahd, unsigned long *flags)
-{
-#if AHD_SCSI_HAS_HOST_LOCK == 0
-       spin_unlock(&ahd->platform_data->spin_lock);
-       spin_lock(&io_request_lock);
-#endif
-}
-
-static __inline void
-ahd_done_lockinit(struct ahd_softc *ahd)
-{
-       /*
-        * In 2.5.X, our own lock is held during completions.
-        * In previous versions, the io_request_lock is used.
-        * In either case, we can't initialize this lock again.
-        */
-}
-
-static __inline void
-ahd_done_lock(struct ahd_softc *ahd, unsigned long *flags)
-{
-#if AHD_SCSI_HAS_HOST_LOCK == 0
-       spin_lock(&io_request_lock);
-#endif
-}
-
-static __inline void
-ahd_done_unlock(struct ahd_softc *ahd, unsigned long *flags)
-{
-#if AHD_SCSI_HAS_HOST_LOCK == 0
-       spin_unlock(&io_request_lock);
-#endif
-}
-
-static __inline void
-ahd_list_lockinit(void)
-{
-       spin_lock_init(&ahd_list_spinlock);
-}
-
-static __inline void
-ahd_list_lock(unsigned long *flags)
-{
-       spin_lock_irqsave(&ahd_list_spinlock, *flags);
-}
-
-static __inline void
-ahd_list_unlock(unsigned long *flags)
-{
-       spin_unlock_irqrestore(&ahd_list_spinlock, *flags);
-}
-
 /******************************* PCI Definitions ******************************/
 /*
  * PCIM_xxx: mask to locate subfield in register
@@ -925,27 +708,17 @@ ahd_flush_device_writes(struct ahd_softc *ahd)
 }
 
 /**************************** Proc FS Support *********************************/
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-int    ahd_linux_proc_info(char *, char **, off_t, int, int, int);
-#else
 int    ahd_linux_proc_info(struct Scsi_Host *, char *, char **,
                            off_t, int, int);
-#endif
-
-/*************************** Domain Validation ********************************/
-#define AHD_DV_CMD(cmd) ((cmd)->scsi_done == ahd_linux_dv_complete)
-#define AHD_DV_SIMQ_FROZEN(ahd)                                        \
-       ((((ahd)->platform_data->flags & AHD_DV_ACTIVE) != 0)   \
-        && (ahd)->platform_data->qfrozen == 1)
 
 /*********************** Transaction Access Wrappers **************************/
-static __inline void ahd_cmd_set_transaction_status(Scsi_Cmnd *, uint32_t);
+static __inline void ahd_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t);
 static __inline void ahd_set_transaction_status(struct scb *, uint32_t);
-static __inline void ahd_cmd_set_scsi_status(Scsi_Cmnd *, uint32_t);
+static __inline void ahd_cmd_set_scsi_status(struct scsi_cmnd *, uint32_t);
 static __inline void ahd_set_scsi_status(struct scb *, uint32_t);
-static __inline uint32_t ahd_cmd_get_transaction_status(Scsi_Cmnd *cmd);
+static __inline uint32_t ahd_cmd_get_transaction_status(struct scsi_cmnd *cmd);
 static __inline uint32_t ahd_get_transaction_status(struct scb *);
-static __inline uint32_t ahd_cmd_get_scsi_status(Scsi_Cmnd *cmd);
+static __inline uint32_t ahd_cmd_get_scsi_status(struct scsi_cmnd *cmd);
 static __inline uint32_t ahd_get_scsi_status(struct scb *);
 static __inline void ahd_set_transaction_tag(struct scb *, int, u_int);
 static __inline u_long ahd_get_transfer_length(struct scb *);
@@ -964,7 +737,7 @@ static __inline void ahd_platform_scb_free(struct ahd_softc *ahd,
 static __inline void ahd_freeze_scb(struct scb *scb);
 
 static __inline
-void ahd_cmd_set_transaction_status(Scsi_Cmnd *cmd, uint32_t status)
+void ahd_cmd_set_transaction_status(struct scsi_cmnd *cmd, uint32_t status)
 {
        cmd->result &= ~(CAM_STATUS_MASK << 16);
        cmd->result |= status << 16;
@@ -977,7 +750,7 @@ void ahd_set_transaction_status(struct scb *scb, uint32_t status)
 }
 
 static __inline
-void ahd_cmd_set_scsi_status(Scsi_Cmnd *cmd, uint32_t status)
+void ahd_cmd_set_scsi_status(struct scsi_cmnd *cmd, uint32_t status)
 {
        cmd->result &= ~0xFFFF;
        cmd->result |= status;
@@ -990,7 +763,7 @@ void ahd_set_scsi_status(struct scb *scb, uint32_t status)
 }
 
 static __inline
-uint32_t ahd_cmd_get_transaction_status(Scsi_Cmnd *cmd)
+uint32_t ahd_cmd_get_transaction_status(struct scsi_cmnd *cmd)
 {
        return ((cmd->result >> 16) & CAM_STATUS_MASK);
 }
@@ -1002,7 +775,7 @@ uint32_t ahd_get_transaction_status(struct scb *scb)
 }
 
 static __inline
-uint32_t ahd_cmd_get_scsi_status(Scsi_Cmnd *cmd)
+uint32_t ahd_cmd_get_scsi_status(struct scsi_cmnd *cmd)
 {
        return (cmd->result & 0xFFFF);
 }
@@ -1117,7 +890,6 @@ void       ahd_done(struct ahd_softc*, struct scb*);
 void   ahd_send_async(struct ahd_softc *, char channel,
                       u_int target, u_int lun, ac_code, void *);
 void   ahd_print_path(struct ahd_softc *, struct scb *);
-void   ahd_platform_dump_card_state(struct ahd_softc *ahd);
 
 #ifdef CONFIG_PCI
 #define AHD_PCI_CONFIG 1
index 91daf0c7fb10be18e6325bc680f254ae5cb9ca97..390b53852d4b9cfdfd6644d57f6f3881d7528502 100644 (file)
@@ -92,27 +92,31 @@ struct pci_driver aic79xx_pci_driver = {
 static void
 ahd_linux_pci_dev_remove(struct pci_dev *pdev)
 {
-       struct ahd_softc *ahd;
-       u_long l;
+       struct ahd_softc *ahd = pci_get_drvdata(pdev);
+       u_long s;
 
-       /*
-        * We should be able to just perform
-        * the free directly, but check our
-        * list for extra sanity.
-        */
-       ahd_list_lock(&l);
-       ahd = ahd_find_softc((struct ahd_softc *)pci_get_drvdata(pdev));
-       if (ahd != NULL) {
-               u_long s;
-
-               TAILQ_REMOVE(&ahd_tailq, ahd, links);
-               ahd_list_unlock(&l);
-               ahd_lock(ahd, &s);
-               ahd_intr_enable(ahd, FALSE);
-               ahd_unlock(ahd, &s);
-               ahd_free(ahd);
-       } else
-               ahd_list_unlock(&l);
+       ahd_lock(ahd, &s);
+       ahd_intr_enable(ahd, FALSE);
+       ahd_unlock(ahd, &s);
+       ahd_free(ahd);
+}
+
+static void
+ahd_linux_pci_inherit_flags(struct ahd_softc *ahd)
+{
+       struct pci_dev *pdev = ahd->dev_softc, *master_pdev;
+       unsigned int master_devfn = PCI_DEVFN(PCI_SLOT(pdev->devfn), 0);
+
+       master_pdev = pci_get_slot(pdev->bus, master_devfn);
+       if (master_pdev) {
+               struct ahd_softc *master = pci_get_drvdata(master_pdev);
+               if (master) {
+                       ahd->flags &= ~AHD_BIOS_ENABLED;
+                       ahd->flags |= master->flags & AHD_BIOS_ENABLED;
+               } else
+                       printk(KERN_ERR "aic79xx: no multichannel peer found!\n");
+               pci_dev_put(master_pdev);
+       }
 }
 
 static int
@@ -125,22 +129,6 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        char            *name;
        int              error;
 
-       /*
-        * Some BIOSen report the same device multiple times.
-        */
-       TAILQ_FOREACH(ahd, &ahd_tailq, links) {
-               struct pci_dev *probed_pdev;
-
-               probed_pdev = ahd->dev_softc;
-               if (probed_pdev->bus->number == pdev->bus->number
-                && probed_pdev->devfn == pdev->devfn)
-                       break;
-       }
-       if (ahd != NULL) {
-               /* Skip duplicate. */
-               return (-ENODEV);
-       }
-
        pci = pdev;
        entry = ahd_find_pci_device(pci);
        if (entry == NULL)
@@ -177,15 +165,12 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                if (memsize >= 0x8000000000ULL
                 && pci_set_dma_mask(pdev, DMA_64BIT_MASK) == 0) {
                        ahd->flags |= AHD_64BIT_ADDRESSING;
-                       ahd->platform_data->hw_dma_mask = DMA_64BIT_MASK;
                } else if (memsize > 0x80000000
                        && pci_set_dma_mask(pdev, mask_39bit) == 0) {
                        ahd->flags |= AHD_39BIT_ADDRESSING;
-                       ahd->platform_data->hw_dma_mask = mask_39bit;
                }
        } else {
                pci_set_dma_mask(pdev, DMA_32BIT_MASK);
-               ahd->platform_data->hw_dma_mask = DMA_32BIT_MASK;
        }
        ahd->dev_softc = pci;
        error = ahd_pci_config(ahd, entry);
@@ -193,16 +178,17 @@ ahd_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                ahd_free(ahd);
                return (-error);
        }
+
+       /*
+        * Second Function PCI devices need to inherit some
+        * * settings from function 0.
+        */
+       if ((ahd->features & AHD_MULTI_FUNC) && PCI_FUNC(pdev->devfn) != 0)
+               ahd_linux_pci_inherit_flags(ahd);
+
        pci_set_drvdata(pdev, ahd);
-       if (aic79xx_detect_complete) {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-               ahd_linux_register_host(ahd, &aic79xx_driver_template);
-#else
-               printf("aic79xx: ignoring PCI device found after "
-                      "initialization\n");
-               return (-ENODEV);
-#endif
-       }
+
+       ahd_linux_register_host(ahd, &aic79xx_driver_template);
        return (0);
 }
 
index 703f6e44889d837318eb4211217a61b84f95cfd6..2131db60018a3242592344d69b6b794233b041a1 100644 (file)
@@ -283,7 +283,6 @@ int
 ahd_pci_config(struct ahd_softc *ahd, struct ahd_pci_identity *entry)
 {
        struct scb_data *shared_scb_data;
-       u_long           l;
        u_int            command;
        uint32_t         devconfig;
        uint16_t         subvendor; 
@@ -373,16 +372,9 @@ ahd_pci_config(struct ahd_softc *ahd, struct ahd_pci_identity *entry)
         * Allow interrupts now that we are completely setup.
         */
        error = ahd_pci_map_int(ahd);
-       if (error != 0)
-               return (error);
-
-       ahd_list_lock(&l);
-       /*
-        * Link this softc in with all other ahd instances.
-        */
-       ahd_softc_insert(ahd);
-       ahd_list_unlock(&l);
-       return (0);
+       if (!error)
+               ahd->init_level++;
+       return error;
 }
 
 /*
index e01cd6175e34d36d83d6d1b29534daf0aaa54198..39a27840fce66220935fba62116ff44072c92f94 100644 (file)
@@ -49,10 +49,53 @@ static void ahd_dump_target_state(struct ahd_softc *ahd,
                                      u_int our_id, char channel,
                                      u_int target_id, u_int target_offset);
 static void    ahd_dump_device_state(struct info_str *info,
-                                     struct ahd_linux_device *dev);
+                                     struct scsi_device *sdev);
 static int     ahd_proc_write_seeprom(struct ahd_softc *ahd,
                                       char *buffer, int length);
 
+/*
+ * Table of syncrates that don't follow the "divisible by 4"
+ * rule. This table will be expanded in future SCSI specs.
+ */
+static struct {
+       u_int period_factor;
+       u_int period;   /* in 100ths of ns */
+} scsi_syncrates[] = {
+       { 0x08, 625 },  /* FAST-160 */
+       { 0x09, 1250 }, /* FAST-80 */
+       { 0x0a, 2500 }, /* FAST-40 40MHz */
+       { 0x0b, 3030 }, /* FAST-40 33MHz */
+       { 0x0c, 5000 }  /* FAST-20 */
+};
+
+/*
+ * Return the frequency in kHz corresponding to the given
+ * sync period factor.
+ */
+static u_int
+ahd_calc_syncsrate(u_int period_factor)
+{
+       int i;
+       int num_syncrates;
+
+       num_syncrates = sizeof(scsi_syncrates) / sizeof(scsi_syncrates[0]);
+       /* See if the period is in the "exception" table */
+       for (i = 0; i < num_syncrates; i++) {
+
+               if (period_factor == scsi_syncrates[i].period_factor) {
+                       /* Period in kHz */
+                       return (100000000 / scsi_syncrates[i].period);
+               }
+       }
+
+       /*
+        * Wasn't in the table, so use the standard
+        * 4 times conversion.
+        */
+       return (10000000 / (period_factor * 4 * 10));
+}
+
+
 static void
 copy_mem_info(struct info_str *info, char *data, int len)
 {
@@ -109,7 +152,7 @@ ahd_format_transinfo(struct info_str *info, struct ahd_transinfo *tinfo)
         speed = 3300;
         freq = 0;
        if (tinfo->offset != 0) {
-               freq = aic_calc_syncsrate(tinfo->period);
+               freq = ahd_calc_syncsrate(tinfo->period);
                speed = freq;
        }
        speed *= (0x01 << tinfo->width);
@@ -167,6 +210,7 @@ ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info,
                      u_int target_offset)
 {
        struct  ahd_linux_target *targ;
+       struct  scsi_target *starget;
        struct  ahd_initiator_tinfo *tinfo;
        struct  ahd_tmode_tstate *tstate;
        int     lun;
@@ -176,20 +220,20 @@ ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info,
        copy_info(info, "Target %d Negotiation Settings\n", target_id);
        copy_info(info, "\tUser: ");
        ahd_format_transinfo(info, &tinfo->user);
-       targ = ahd->platform_data->targets[target_offset];
-       if (targ == NULL)
+       starget = ahd->platform_data->starget[target_offset];
+       if (starget == NULL)
                return;
+       targ = scsi_transport_target_data(starget);
 
        copy_info(info, "\tGoal: ");
        ahd_format_transinfo(info, &tinfo->goal);
        copy_info(info, "\tCurr: ");
        ahd_format_transinfo(info, &tinfo->curr);
-       copy_info(info, "\tTransmission Errors %ld\n", targ->errors_detected);
 
        for (lun = 0; lun < AHD_NUM_LUNS; lun++) {
-               struct ahd_linux_device *dev;
+               struct scsi_device *dev;
 
-               dev = targ->devices[lun];
+               dev = targ->sdev[lun];
 
                if (dev == NULL)
                        continue;
@@ -199,10 +243,13 @@ ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info,
 }
 
 static void
-ahd_dump_device_state(struct info_str *info, struct ahd_linux_device *dev)
+ahd_dump_device_state(struct info_str *info, struct scsi_device *sdev)
 {
+       struct ahd_linux_device *dev = scsi_transport_device_data(sdev);
+
        copy_info(info, "\tChannel %c Target %d Lun %d Settings\n",
-                 dev->target->channel + 'A', dev->target->target, dev->lun);
+                 sdev->sdev_target->channel + 'A',
+                 sdev->sdev_target->id, sdev->lun);
 
        copy_info(info, "\t\tCommands Queued %ld\n", dev->commands_issued);
        copy_info(info, "\t\tCommands Active %d\n", dev->active);
@@ -278,36 +325,16 @@ done:
  * Return information to handle /proc support for the driver.
  */
 int
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-ahd_linux_proc_info(char *buffer, char **start, off_t offset,
-                   int length, int hostno, int inout)
-#else
 ahd_linux_proc_info(struct Scsi_Host *shost, char *buffer, char **start,
                    off_t offset, int length, int inout)
-#endif
 {
-       struct  ahd_softc *ahd;
+       struct  ahd_softc *ahd = *(struct ahd_softc **)shost->hostdata;
        struct  info_str info;
        char    ahd_info[256];
-       u_long  l;
        u_int   max_targ;
        u_int   i;
        int     retval;
 
-       retval = -EINVAL;
-       ahd_list_lock(&l);
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-       TAILQ_FOREACH(ahd, &ahd_tailq, links) {
-               if (ahd->platform_data->host->host_no == hostno)
-                       break;
-       }
-#else
-       ahd = ahd_find_softc(*(struct ahd_softc **)shost->hostdata);
-#endif
-
-       if (ahd == NULL)
-               goto done;
-
         /* Has data been written to the file? */ 
        if (inout == TRUE) {
                retval = ahd_proc_write_seeprom(ahd, buffer, length);
@@ -357,6 +384,5 @@ ahd_linux_proc_info(struct Scsi_Host *shost, char *buffer, char **start,
        }
        retval = info.pos > info.offset ? info.pos - info.offset : 0;
 done:
-       ahd_list_unlock(&l);
        return (retval);
 }
index 088cbc23743d56070c47e0e8c828b690bd83c2a0..91d294c6334efd26853ee4e0074dbd7788cfde94 100644 (file)
@@ -37,7 +37,7 @@
  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGES.
  *
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.h#79 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.h#85 $
  *
  * $FreeBSD$
  */
@@ -243,7 +243,7 @@ typedef enum {
         */
        AHC_AIC7850_FE  = AHC_SPIOCAP|AHC_AUTOPAUSE|AHC_TARGETMODE|AHC_ULTRA,
        AHC_AIC7860_FE  = AHC_AIC7850_FE,
-       AHC_AIC7870_FE  = AHC_TARGETMODE,
+       AHC_AIC7870_FE  = AHC_TARGETMODE|AHC_AUTOPAUSE,
        AHC_AIC7880_FE  = AHC_AIC7870_FE|AHC_ULTRA,
        /*
         * Although we have space for both the initiator and
index 810ec700d9fc2b08d813c96c4e83c8a5dc5bc148..e196d83b93c7a49fc8fcf1828afbc1da2c16a7b0 100644 (file)
@@ -39,7 +39,7 @@
  *
  * $FreeBSD$
  */
-VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#39 $"
+VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#40 $"
 
 /*
  * This file is processed by the aic7xxx_asm utility for use in assembling
@@ -1306,7 +1306,6 @@ scratch_ram {
         */
        MWI_RESIDUAL {
                size            1
-               alias   TARG_IMMEDIATE_SCB
        }
        /*
         * SCBID of the next SCB to be started by the controller.
@@ -1461,6 +1460,7 @@ scratch_ram {
         */
        LAST_MSG {
                size            1
+               alias   TARG_IMMEDIATE_SCB
        }
 
        /*
index d84b741fbab56e5486882d08d530a367ab8f3d40..15196390e28d3052700449cddf90f918f185e41c 100644 (file)
@@ -40,7 +40,7 @@
  * $FreeBSD$
  */
 
-VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#56 $"
+VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#58 $"
 PATCH_ARG_LIST = "struct ahc_softc *ahc"
 PREFIX = "ahc_"
 
@@ -679,6 +679,7 @@ await_busfree:
                clr     SCSIBUSL;       /* Prevent bit leakage durint SELTO */
        }
        and     SXFRCTL0, ~SPIOEN;
+       mvi     SEQ_FLAGS, NOT_IDENTIFIED|NO_CDB_SENT;
        test    SSTAT1,REQINIT|BUSFREE  jz .;
        test    SSTAT1, BUSFREE jnz poll_for_work;
        mvi     MISSED_BUSFREE call set_seqint;
@@ -1097,7 +1098,7 @@ ultra2_dmahalt:
                test    SCB_RESIDUAL_DATACNT[3], SG_LAST_SEG jz dma_mid_sg;
                if ((ahc->flags & AHC_TARGETROLE) != 0) {
                        test    SSTAT0, TARGET jz dma_last_sg;
-                       if ((ahc->flags & AHC_TMODE_WIDEODD_BUG) != 0) {
+                       if ((ahc->bugs & AHC_TMODE_WIDEODD_BUG) != 0) {
                                test    DMAPARAMS, DIRECTION jz dma_mid_sg;
                        }
                }
index 468d612a44f66a3b0c86165cc89534001e8a217b..3cb07e114e89cd6e83e9753594dc741dd63fe03c 100644 (file)
@@ -28,9 +28,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_93cx6.c#17 $
- *
- * $FreeBSD$
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx_93cx6.c#19 $
  */
 
 /*
@@ -64,7 +62,6 @@
  *   is preceded by an initial zero (leading 0, followed by 16-bits, MSB
  *   first).  The clock cycling from low to high initiates the next data
  *   bit to be sent from the chip.
- *
  */
 
 #ifdef __linux__
  * Right now, we only have to read the SEEPROM.  But we make it easier to
  * add other 93Cx6 functions.
  */
-static struct seeprom_cmd {
+struct seeprom_cmd {
        uint8_t len;
-       uint8_t bits[9];
-} seeprom_read = {3, {1, 1, 0}};
+       uint8_t bits[11];
+};
 
+/* Short opcodes for the c46 */
 static struct seeprom_cmd seeprom_ewen = {9, {1, 0, 0, 1, 1, 0, 0, 0, 0}};
 static struct seeprom_cmd seeprom_ewds = {9, {1, 0, 0, 0, 0, 0, 0, 0, 0}};
+
+/* Long opcodes for the C56/C66 */
+static struct seeprom_cmd seeprom_long_ewen = {11, {1, 0, 0, 1, 1, 0, 0, 0, 0}};
+static struct seeprom_cmd seeprom_long_ewds = {11, {1, 0, 0, 0, 0, 0, 0, 0, 0}};
+
+/* Common opcodes */
 static struct seeprom_cmd seeprom_write = {3, {1, 0, 1}};
+static struct seeprom_cmd seeprom_read  = {3, {1, 1, 0}};
 
 /*
  * Wait for the SEERDY to go high; about 800 ns.
@@ -222,12 +227,25 @@ int
 ahc_write_seeprom(struct seeprom_descriptor *sd, uint16_t *buf,
                  u_int start_addr, u_int count)
 {
+       struct seeprom_cmd *ewen, *ewds;
        uint16_t v;
        uint8_t temp;
        int i, k;
 
        /* Place the chip into write-enable mode */
-       send_seeprom_cmd(sd, &seeprom_ewen);
+       if (sd->sd_chip == C46) {
+               ewen = &seeprom_ewen;
+               ewds = &seeprom_ewds;
+       } else if (sd->sd_chip == C56_66) {
+               ewen = &seeprom_long_ewen;
+               ewds = &seeprom_long_ewds;
+       } else {
+               printf("ahc_write_seeprom: unsupported seeprom type %d\n",
+                      sd->sd_chip);
+               return (0);
+       }
+
+       send_seeprom_cmd(sd, ewen);
        reset_seeprom(sd);
 
        /* Write all requested data out to the seeprom. */
@@ -277,7 +295,7 @@ ahc_write_seeprom(struct seeprom_descriptor *sd, uint16_t *buf,
        }
 
        /* Put the chip back into write-protect mode */
-       send_seeprom_cmd(sd, &seeprom_ewds);
+       send_seeprom_cmd(sd, ewds);
        reset_seeprom(sd);
 
        return (1);
index 7bc01e41bcce79a070348e5ab1138db5154384ef..58ac46103eb66d3db45242f5c06c5ef78fcbb40b 100644 (file)
@@ -37,9 +37,7 @@
  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGES.
  *
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#134 $
- *
- * $FreeBSD$
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.c#155 $
  */
 
 #ifdef __linux__
@@ -287,10 +285,19 @@ ahc_restart(struct ahc_softc *ahc)
                ahc_outb(ahc, SEQ_FLAGS2,
                         ahc_inb(ahc, SEQ_FLAGS2) & ~SCB_DMA);
        }
+
+       /*
+        * Clear any pending sequencer interrupt.  It is no
+        * longer relevant since we're resetting the Program
+        * Counter.
+        */
+       ahc_outb(ahc, CLRINT, CLRSEQINT);
+
        ahc_outb(ahc, MWI_RESIDUAL, 0);
        ahc_outb(ahc, SEQCTL, ahc->seqctl);
        ahc_outb(ahc, SEQADDR0, 0);
        ahc_outb(ahc, SEQADDR1, 0);
+
        ahc_unpause(ahc);
 }
 
@@ -1174,19 +1181,20 @@ ahc_handle_scsiint(struct ahc_softc *ahc, u_int intstat)
                                       scb_index);
                        }
 #endif
-                       /*
-                        * Force a renegotiation with this target just in
-                        * case the cable was pulled and will later be
-                        * re-attached.  The target may forget its negotiation
-                        * settings with us should it attempt to reselect
-                        * during the interruption.  The target will not issue
-                        * a unit attention in this case, so we must always
-                        * renegotiate.
-                        */
                        ahc_scb_devinfo(ahc, &devinfo, scb);
-                       ahc_force_renegotiation(ahc, &devinfo);
                        ahc_set_transaction_status(scb, CAM_SEL_TIMEOUT);
                        ahc_freeze_devq(ahc, scb);
+
+                       /*
+                        * Cancel any pending transactions on the device
+                        * now that it seems to be missing.  This will
+                        * also revert us to async/narrow transfers until
+                        * we can renegotiate with the device.
+                        */
+                       ahc_handle_devreset(ahc, &devinfo,
+                                           CAM_SEL_TIMEOUT,
+                                           "Selection Timeout",
+                                           /*verbose_level*/1);
                }
                ahc_outb(ahc, CLRINT, CLRSCSIINT);
                ahc_restart(ahc);
@@ -3763,8 +3771,9 @@ ahc_handle_devreset(struct ahc_softc *ahc, struct ahc_devinfo *devinfo,
                         /*period*/0, /*offset*/0, /*ppr_options*/0,
                         AHC_TRANS_CUR, /*paused*/TRUE);
        
-       ahc_send_async(ahc, devinfo->channel, devinfo->target,
-                      CAM_LUN_WILDCARD, AC_SENT_BDR, NULL);
+       if (status != CAM_SEL_TIMEOUT)
+               ahc_send_async(ahc, devinfo->channel, devinfo->target,
+                              CAM_LUN_WILDCARD, AC_SENT_BDR, NULL);
 
        if (message != NULL
         && (verbose_level <= bootverbose))
@@ -4003,14 +4012,6 @@ ahc_reset(struct ahc_softc *ahc, int reinit)
         * to disturb the integrity of the bus.
         */
        ahc_pause(ahc);
-       if ((ahc_inb(ahc, HCNTRL) & CHIPRST) != 0) {
-               /*
-                * The chip has not been initialized since
-                * PCI/EISA/VLB bus reset.  Don't trust
-                * "left over BIOS data".
-                */
-               ahc->flags |= AHC_NO_BIOS_INIT;
-       }
        sxfrctl1_b = 0;
        if ((ahc->chip & AHC_CHIPID_MASK) == AHC_AIC7770) {
                u_int sblkctl;
@@ -5036,14 +5037,23 @@ ahc_pause_and_flushwork(struct ahc_softc *ahc)
        ahc->flags |= AHC_ALL_INTERRUPTS;
        paused = FALSE;
        do {
-               if (paused)
+               if (paused) {
                        ahc_unpause(ahc);
+                       /*
+                        * Give the sequencer some time to service
+                        * any active selections.
+                        */
+                       ahc_delay(500);
+               }
                ahc_intr(ahc);
                ahc_pause(ahc);
                paused = TRUE;
                ahc_outb(ahc, SCSISEQ, ahc_inb(ahc, SCSISEQ) & ~ENSELO);
-               ahc_clear_critical_section(ahc);
                intstat = ahc_inb(ahc, INTSTAT);
+               if ((intstat & INT_PEND) == 0) {
+                       ahc_clear_critical_section(ahc);
+                       intstat = ahc_inb(ahc, INTSTAT);
+               }
        } while (--maxloops
              && (intstat != 0xFF || (ahc->features & AHC_REMOVABLE) == 0)
              && ((intstat & INT_PEND) != 0
index 687f19e9cf03a179d6671163509176c3350fdc1f..c932b3b94490833a1f306a4c418985aa5749431a 100644 (file)
 
 static struct scsi_transport_template *ahc_linux_transport_template = NULL;
 
-/*
- * Include aiclib.c as part of our
- * "module dependencies are hard" work around.
- */
-#include "aiclib.c"
-
 #include <linux/init.h>                /* __setup */
 #include <linux/mm.h>          /* For fetching system memory size */
 #include <linux/blkdev.h>              /* For block_size() */
@@ -391,7 +385,6 @@ static int ahc_linux_run_command(struct ahc_softc*,
                                 struct ahc_linux_device *,
                                 struct scsi_cmnd *);
 static void ahc_linux_setup_tag_info_global(char *p);
-static aic_option_callback_t ahc_linux_setup_tag_info;
 static int  aic7xxx_setup(char *s);
 
 static int ahc_linux_unit;
@@ -635,6 +628,8 @@ ahc_linux_slave_alloc(struct scsi_device *sdev)
        
        targ->sdev[sdev->lun] = sdev;
 
+       spi_period(starget) = 0;
+
        return 0;
 }
 
@@ -918,6 +913,86 @@ ahc_linux_setup_tag_info(u_long arg, int instance, int targ, int32_t value)
        }
 }
 
+static char *
+ahc_parse_brace_option(char *opt_name, char *opt_arg, char *end, int depth,
+                      void (*callback)(u_long, int, int, int32_t),
+                      u_long callback_arg)
+{
+       char    *tok_end;
+       char    *tok_end2;
+       int      i;
+       int      instance;
+       int      targ;
+       int      done;
+       char     tok_list[] = {'.', ',', '{', '}', '\0'};
+
+       /* All options use a ':' name/arg separator */
+       if (*opt_arg != ':')
+               return (opt_arg);
+       opt_arg++;
+       instance = -1;
+       targ = -1;
+       done = FALSE;
+       /*
+        * Restore separator that may be in
+        * the middle of our option argument.
+        */
+       tok_end = strchr(opt_arg, '\0');
+       if (tok_end < end)
+               *tok_end = ',';
+       while (!done) {
+               switch (*opt_arg) {
+               case '{':
+                       if (instance == -1) {
+                               instance = 0;
+                       } else {
+                               if (depth > 1) {
+                                       if (targ == -1)
+                                               targ = 0;
+                               } else {
+                                       printf("Malformed Option %s\n",
+                                              opt_name);
+                                       done = TRUE;
+                               }
+                       }
+                       opt_arg++;
+                       break;
+               case '}':
+                       if (targ != -1)
+                               targ = -1;
+                       else if (instance != -1)
+                               instance = -1;
+                       opt_arg++;
+                       break;
+               case ',':
+               case '.':
+                       if (instance == -1)
+                               done = TRUE;
+                       else if (targ >= 0)
+                               targ++;
+                       else if (instance >= 0)
+                               instance++;
+                       opt_arg++;
+                       break;
+               case '\0':
+                       done = TRUE;
+                       break;
+               default:
+                       tok_end = end;
+                       for (i = 0; tok_list[i]; i++) {
+                               tok_end2 = strchr(opt_arg, tok_list[i]);
+                               if ((tok_end2) && (tok_end2 < tok_end))
+                                       tok_end = tok_end2;
+                       }
+                       callback(callback_arg, instance, targ,
+                                simple_strtol(opt_arg, NULL, 0));
+                       opt_arg = tok_end;
+                       break;
+               }
+       }
+       return (opt_arg);
+}
+
 /*
  * Handle Linux boot parameters. This routine allows for assigning a value
  * to a parameter with a ':' between the parameter and the value.
@@ -972,7 +1047,7 @@ aic7xxx_setup(char *s)
                if (strncmp(p, "global_tag_depth", n) == 0) {
                        ahc_linux_setup_tag_info_global(p + n);
                } else if (strncmp(p, "tag_info", n) == 0) {
-                       s = aic_parse_brace_option("tag_info", p + n, end,
+                       s = ahc_parse_brace_option("tag_info", p + n, end,
                            2, ahc_linux_setup_tag_info, 0);
                } else if (p[n] == ':') {
                        *(options[i].flag) = simple_strtoul(p + n + 1, NULL, 0);
@@ -1612,9 +1687,9 @@ ahc_send_async(struct ahc_softc *ahc, char channel,
                if (channel == 'B')
                        target_offset += 8;
                starget = ahc->platform_data->starget[target_offset];
-               targ = scsi_transport_target_data(starget);
-               if (targ == NULL)
+               if (starget == NULL)
                        break;
+               targ = scsi_transport_target_data(starget);
 
                target_ppr_options =
                        (spi_dt(starget) ? MSG_EXT_PPR_DT_REQ : 0)
@@ -2329,8 +2404,6 @@ ahc_platform_dump_card_state(struct ahc_softc *ahc)
 {
 }
 
-static void ahc_linux_exit(void);
-
 static void ahc_linux_set_width(struct scsi_target *starget, int width)
 {
        struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
index 0e47ac21754954132612b8c3d2bd41a840b21a46..c5299626924024a6852dd713990546829bf74ce2 100644 (file)
@@ -265,7 +265,7 @@ ahc_scb_timer_reset(struct scb *scb, u_int usec)
 /***************************** SMP support ************************************/
 #include <linux/spinlock.h>
 
-#define AIC7XXX_DRIVER_VERSION "6.2.36"
+#define AIC7XXX_DRIVER_VERSION "7.0"
 
 /*************************** Device Data Structures ***************************/
 /*
index 9d318ce2c993189412982d5dea1ffea994fe5ccc..0d44a6907dd25546ac17a1f12d911da5e79952f0 100644 (file)
@@ -149,6 +149,27 @@ ahc_linux_pci_dev_remove(struct pci_dev *pdev)
        ahc_free(ahc);
 }
 
+static void
+ahc_linux_pci_inherit_flags(struct ahc_softc *ahc)
+{
+       struct pci_dev *pdev = ahc->dev_softc, *master_pdev;
+       unsigned int master_devfn = PCI_DEVFN(PCI_SLOT(pdev->devfn), 0);
+
+       master_pdev = pci_get_slot(pdev->bus, master_devfn);
+       if (master_pdev) {
+               struct ahc_softc *master = pci_get_drvdata(master_pdev);
+               if (master) {
+                       ahc->flags &= ~AHC_BIOS_ENABLED; 
+                       ahc->flags |= master->flags & AHC_BIOS_ENABLED;
+
+                       ahc->flags &= ~AHC_PRIMARY_CHANNEL; 
+                       ahc->flags |= master->flags & AHC_PRIMARY_CHANNEL;
+               } else
+                       printk(KERN_ERR "aic7xxx: no multichannel peer found!\n");
+               pci_dev_put(master_pdev);
+       } 
+}
+
 static int
 ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
@@ -203,6 +224,14 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                ahc_free(ahc);
                return (-error);
        }
+
+       /*
+        * Second Function PCI devices need to inherit some
+        * settings from function 0.
+        */
+       if ((ahc->features & AHC_MULTI_FUNC) && PCI_FUNC(pdev->devfn) != 0)
+               ahc_linux_pci_inherit_flags(ahc);
+
        pci_set_drvdata(pdev, ahc);
        ahc_linux_register_host(ahc, &aic7xxx_driver_template);
        return (0);
index 3802c91f0b07489a2dc3b04a01e9963880abaed8..04a3506cf340691d10a8dfcea0d417da762ec0a5 100644 (file)
@@ -54,6 +54,49 @@ static void  ahc_dump_device_state(struct info_str *info,
 static int     ahc_proc_write_seeprom(struct ahc_softc *ahc,
                                       char *buffer, int length);
 
+/*
+ * Table of syncrates that don't follow the "divisible by 4"
+ * rule. This table will be expanded in future SCSI specs.
+ */
+static struct {
+       u_int period_factor;
+       u_int period;   /* in 100ths of ns */
+} scsi_syncrates[] = {
+       { 0x08, 625 },  /* FAST-160 */
+       { 0x09, 1250 }, /* FAST-80 */
+       { 0x0a, 2500 }, /* FAST-40 40MHz */
+       { 0x0b, 3030 }, /* FAST-40 33MHz */
+       { 0x0c, 5000 }  /* FAST-20 */
+};
+
+/*
+ * Return the frequency in kHz corresponding to the given
+ * sync period factor.
+ */
+static u_int
+ahc_calc_syncsrate(u_int period_factor)
+{
+       int i;
+       int num_syncrates;
+
+       num_syncrates = sizeof(scsi_syncrates) / sizeof(scsi_syncrates[0]);
+       /* See if the period is in the "exception" table */
+       for (i = 0; i < num_syncrates; i++) {
+
+               if (period_factor == scsi_syncrates[i].period_factor) {
+                       /* Period in kHz */
+                       return (100000000 / scsi_syncrates[i].period);
+               }
+       }
+
+       /*
+        * Wasn't in the table, so use the standard
+        * 4 times conversion.
+        */
+       return (10000000 / (period_factor * 4 * 10));
+}
+
+
 static void
 copy_mem_info(struct info_str *info, char *data, int len)
 {
@@ -106,7 +149,7 @@ ahc_format_transinfo(struct info_str *info, struct ahc_transinfo *tinfo)
         speed = 3300;
         freq = 0;
        if (tinfo->offset != 0) {
-               freq = aic_calc_syncsrate(tinfo->period);
+               freq = ahc_calc_syncsrate(tinfo->period);
                speed = freq;
        }
        speed *= (0x01 << tinfo->width);
index 7c1390ed1179a8f55538a3c9852ac760380be003..2ce1febca207c27d5695626a5316c6d1ceb8c17c 100644 (file)
@@ -2,8 +2,8 @@
  * DO NOT EDIT - This file is automatically generated
  *              from the following source files:
  *
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#56 $
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#39 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#58 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#40 $
  */
 typedef int (ahc_reg_print_t)(u_int, u_int *, u_int);
 typedef struct ahc_reg_parse_entry {
@@ -1298,7 +1298,6 @@ ahc_reg_print_t ahc_sg_cache_pre_print;
 #define        CMDSIZE_TABLE_TAIL              0x34
 
 #define        MWI_RESIDUAL                    0x38
-#define        TARG_IMMEDIATE_SCB              0x38
 
 #define        NEXT_QUEUED_SCB                 0x39
 
@@ -1380,6 +1379,7 @@ ahc_reg_print_t ahc_sg_cache_pre_print;
 #define        RETURN_2                        0x52
 
 #define        LAST_MSG                        0x53
+#define        TARG_IMMEDIATE_SCB              0x53
 
 #define        SCSISEQ_TEMPLATE                0x54
 #define                ENSELO                  0x40
index 9c713775d44a9bd1caadfbb1e201b66eed32fb69..88bfd767c51c2e7be9f2fa757b5e2362c8f9b720 100644 (file)
@@ -2,8 +2,8 @@
  * DO NOT EDIT - This file is automatically generated
  *              from the following source files:
  *
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#56 $
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#39 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#58 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#40 $
  */
 
 #include "aic7xxx_osm.h"
index cf411368a8716e5aa14a51e8223562865852d155..4cee08521e75f6cb0c9f1a00580ce9ac683958c2 100644 (file)
@@ -2,13 +2,13 @@
  * DO NOT EDIT - This file is automatically generated
  *              from the following source files:
  *
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#56 $
- * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#39 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.seq#58 $
+ * $Id: //depot/aic7xxx/aic7xxx/aic7xxx.reg#40 $
  */
 static uint8_t seqprog[] = {
        0xb2, 0x00, 0x00, 0x08,
        0xf7, 0x11, 0x22, 0x08,
-       0x00, 0x65, 0xec, 0x59,
+       0x00, 0x65, 0xee, 0x59,
        0xf7, 0x01, 0x02, 0x08,
        0xff, 0x6a, 0x24, 0x08,
        0x40, 0x00, 0x40, 0x68,
@@ -21,15 +21,15 @@ static uint8_t seqprog[] = {
        0x01, 0x4d, 0xc8, 0x30,
        0x00, 0x4c, 0x12, 0x70,
        0x01, 0x39, 0xa2, 0x30,
-       0x00, 0x6a, 0xc0, 0x5e,
+       0x00, 0x6a, 0xc2, 0x5e,
        0x01, 0x51, 0x20, 0x31,
        0x01, 0x57, 0xae, 0x00,
        0x0d, 0x6a, 0x76, 0x00,
-       0x00, 0x51, 0x12, 0x5e,
+       0x00, 0x51, 0x14, 0x5e,
        0x01, 0x51, 0xc8, 0x30,
        0x00, 0x39, 0xc8, 0x60,
        0x00, 0xbb, 0x30, 0x70,
-       0xc1, 0x6a, 0xd8, 0x5e,
+       0xc1, 0x6a, 0xda, 0x5e,
        0x01, 0xbf, 0x72, 0x30,
        0x01, 0x40, 0x7e, 0x31,
        0x01, 0x90, 0x80, 0x30,
@@ -49,10 +49,10 @@ static uint8_t seqprog[] = {
        0x08, 0x6a, 0x78, 0x00,
        0x01, 0x50, 0xc8, 0x30,
        0xe0, 0x6a, 0xcc, 0x00,
-       0x48, 0x6a, 0xfc, 0x5d,
+       0x48, 0x6a, 0xfe, 0x5d,
        0x01, 0x6a, 0xdc, 0x01,
        0x88, 0x6a, 0xcc, 0x00,
-       0x48, 0x6a, 0xfc, 0x5d,
+       0x48, 0x6a, 0xfe, 0x5d,
        0x01, 0x6a, 0x26, 0x01,
        0xf0, 0x19, 0x7a, 0x08,
        0x0f, 0x18, 0xc8, 0x08,
@@ -93,7 +93,7 @@ static uint8_t seqprog[] = {
        0x00, 0x65, 0x20, 0x41,
        0x02, 0x57, 0xae, 0x00,
        0x00, 0x65, 0x9e, 0x40,
-       0x61, 0x6a, 0xd8, 0x5e,
+       0x61, 0x6a, 0xda, 0x5e,
        0x08, 0x51, 0x20, 0x71,
        0x02, 0x0b, 0xb2, 0x78,
        0x00, 0x65, 0xae, 0x40,
@@ -106,7 +106,7 @@ static uint8_t seqprog[] = {
        0x80, 0x3d, 0x7a, 0x00,
        0x20, 0x6a, 0x16, 0x00,
        0x00, 0x65, 0xcc, 0x41,
-       0x00, 0x65, 0xb2, 0x5e,
+       0x00, 0x65, 0xb4, 0x5e,
        0x00, 0x65, 0x12, 0x40,
        0x20, 0x11, 0xd2, 0x68,
        0x20, 0x6a, 0x18, 0x00,
@@ -140,27 +140,27 @@ static uint8_t seqprog[] = {
        0x80, 0x0b, 0xc4, 0x79,
        0x12, 0x01, 0x02, 0x00,
        0x01, 0xab, 0xac, 0x30,
-       0xe4, 0x6a, 0x6e, 0x5d,
+       0xe4, 0x6a, 0x70, 0x5d,
        0x40, 0x6a, 0x16, 0x00,
-       0x80, 0x3e, 0x84, 0x5d,
+       0x80, 0x3e, 0x86, 0x5d,
        0x20, 0xb8, 0x18, 0x79,
-       0x20, 0x6a, 0x84, 0x5d,
-       0x00, 0xab, 0x84, 0x5d,
+       0x20, 0x6a, 0x86, 0x5d,
+       0x00, 0xab, 0x86, 0x5d,
        0x01, 0xa9, 0x78, 0x30,
        0x10, 0xb8, 0x20, 0x79,
-       0xe4, 0x6a, 0x6e, 0x5d,
+       0xe4, 0x6a, 0x70, 0x5d,
        0x00, 0x65, 0xae, 0x40,
        0x10, 0x03, 0x3c, 0x69,
        0x08, 0x3c, 0x5a, 0x69,
        0x04, 0x3c, 0x92, 0x69,
        0x02, 0x3c, 0x98, 0x69,
        0x01, 0x3c, 0x44, 0x79,
-       0xff, 0x6a, 0x70, 0x00,
+       0xff, 0x6a, 0xa6, 0x00,
        0x00, 0x65, 0xa4, 0x59,
-       0x00, 0x6a, 0xc0, 0x5e,
-       0xff, 0x38, 0x30, 0x71,
+       0x00, 0x6a, 0xc2, 0x5e,
+       0xff, 0x53, 0x30, 0x71,
        0x0d, 0x6a, 0x76, 0x00,
-       0x00, 0x38, 0x12, 0x5e,
+       0x00, 0x53, 0x14, 0x5e,
        0x00, 0x65, 0xea, 0x58,
        0x12, 0x01, 0x02, 0x00,
        0x00, 0x65, 0x18, 0x41,
@@ -168,10 +168,10 @@ static uint8_t seqprog[] = {
        0x00, 0x65, 0xf2, 0x58,
        0xfd, 0x57, 0xae, 0x08,
        0x00, 0x65, 0xae, 0x40,
-       0xe4, 0x6a, 0x6e, 0x5d,
+       0xe4, 0x6a, 0x70, 0x5d,
        0x20, 0x3c, 0x4a, 0x79,
-       0x02, 0x6a, 0x84, 0x5d,
-       0x04, 0x6a, 0x84, 0x5d,
+       0x02, 0x6a, 0x86, 0x5d,
+       0x04, 0x6a, 0x86, 0x5d,
        0x01, 0x03, 0x4c, 0x69,
        0xf7, 0x11, 0x22, 0x08,
        0xff, 0x6a, 0x24, 0x08,
@@ -182,13 +182,13 @@ static uint8_t seqprog[] = {
        0x80, 0x86, 0xc8, 0x08,
        0x01, 0x4f, 0xc8, 0x30,
        0x00, 0x50, 0x6c, 0x61,
-       0xc4, 0x6a, 0x6e, 0x5d,
+       0xc4, 0x6a, 0x70, 0x5d,
        0x40, 0x3c, 0x68, 0x79,
-       0x28, 0x6a, 0x84, 0x5d,
+       0x28, 0x6a, 0x86, 0x5d,
        0x00, 0x65, 0x4c, 0x41,
-       0x08, 0x6a, 0x84, 0x5d,
+       0x08, 0x6a, 0x86, 0x5d,
        0x00, 0x65, 0x4c, 0x41,
-       0x84, 0x6a, 0x6e, 0x5d,
+       0x84, 0x6a, 0x70, 0x5d,
        0x00, 0x65, 0xf2, 0x58,
        0x01, 0x66, 0xc8, 0x30,
        0x01, 0x64, 0xd8, 0x31,
@@ -208,16 +208,16 @@ static uint8_t seqprog[] = {
        0xf7, 0x3c, 0x78, 0x08,
        0x00, 0x65, 0x20, 0x41,
        0x40, 0xaa, 0x7e, 0x10,
-       0x04, 0xaa, 0x6e, 0x5d,
-       0x00, 0x65, 0x56, 0x42,
-       0xc4, 0x6a, 0x6e, 0x5d,
+       0x04, 0xaa, 0x70, 0x5d,
+       0x00, 0x65, 0x58, 0x42,
+       0xc4, 0x6a, 0x70, 0x5d,
        0xc0, 0x6a, 0x7e, 0x00,
-       0x00, 0xa8, 0x84, 0x5d,
+       0x00, 0xa8, 0x86, 0x5d,
        0xe4, 0x6a, 0x06, 0x00,
-       0x00, 0x6a, 0x84, 0x5d,
+       0x00, 0x6a, 0x86, 0x5d,
        0x00, 0x65, 0x4c, 0x41,
        0x10, 0x3c, 0xa8, 0x69,
-       0x00, 0xbb, 0x8a, 0x44,
+       0x00, 0xbb, 0x8c, 0x44,
        0x18, 0x6a, 0xda, 0x01,
        0x01, 0x69, 0xd8, 0x31,
        0x1c, 0x6a, 0xd0, 0x01,
@@ -227,31 +227,32 @@ static uint8_t seqprog[] = {
        0x01, 0x93, 0x26, 0x01,
        0x03, 0x6a, 0x2a, 0x01,
        0x01, 0x69, 0x32, 0x31,
-       0x1c, 0x6a, 0xe0, 0x5d,
+       0x1c, 0x6a, 0xe2, 0x5d,
        0x0a, 0x93, 0x26, 0x01,
-       0x00, 0x65, 0xa8, 0x5e,
+       0x00, 0x65, 0xaa, 0x5e,
        0x01, 0x50, 0xa0, 0x18,
        0x02, 0x6a, 0x22, 0x05,
        0x1a, 0x01, 0x02, 0x00,
        0x80, 0x6a, 0x74, 0x00,
        0x40, 0x6a, 0x78, 0x00,
        0x40, 0x6a, 0x16, 0x00,
-       0x00, 0x65, 0xd8, 0x5d,
+       0x00, 0x65, 0xda, 0x5d,
        0x01, 0x3f, 0xc8, 0x30,
-       0xbf, 0x64, 0x56, 0x7a,
-       0x80, 0x64, 0x9e, 0x73,
-       0xa0, 0x64, 0x00, 0x74,
-       0xc0, 0x64, 0xf4, 0x73,
-       0xe0, 0x64, 0x30, 0x74,
-       0x01, 0x6a, 0xd8, 0x5e,
+       0xbf, 0x64, 0x58, 0x7a,
+       0x80, 0x64, 0xa0, 0x73,
+       0xa0, 0x64, 0x02, 0x74,
+       0xc0, 0x64, 0xf6, 0x73,
+       0xe0, 0x64, 0x32, 0x74,
+       0x01, 0x6a, 0xda, 0x5e,
        0x00, 0x65, 0xcc, 0x41,
        0xf7, 0x11, 0x22, 0x08,
        0x01, 0x06, 0xd4, 0x30,
        0xff, 0x6a, 0x24, 0x08,
        0xf7, 0x01, 0x02, 0x08,
-       0x09, 0x0c, 0xe6, 0x79,
+       0xc0, 0x6a, 0x78, 0x00,
+       0x09, 0x0c, 0xe8, 0x79,
        0x08, 0x0c, 0x04, 0x68,
-       0xb1, 0x6a, 0xd8, 0x5e,
+       0xb1, 0x6a, 0xda, 0x5e,
        0xff, 0x6a, 0x26, 0x09,
        0x12, 0x01, 0x02, 0x00,
        0x02, 0x6a, 0x08, 0x30,
@@ -264,29 +265,29 @@ static uint8_t seqprog[] = {
        0x00, 0xa5, 0x4a, 0x21,
        0x00, 0xa6, 0x4c, 0x21,
        0x00, 0xa7, 0x4e, 0x25,
-       0x08, 0xeb, 0xdc, 0x7e,
-       0x80, 0xeb, 0x06, 0x7a,
+       0x08, 0xeb, 0xde, 0x7e,
+       0x80, 0xeb, 0x08, 0x7a,
        0xff, 0x6a, 0xd6, 0x09,
-       0x08, 0xeb, 0x0a, 0x6a,
+       0x08, 0xeb, 0x0c, 0x6a,
        0xff, 0x6a, 0xd4, 0x0c,
-       0x80, 0xa3, 0xdc, 0x6e,
-       0x88, 0xeb, 0x20, 0x72,
-       0x08, 0xeb, 0xdc, 0x6e,
-       0x04, 0xea, 0x24, 0xe2,
-       0x08, 0xee, 0xdc, 0x6e,
+       0x80, 0xa3, 0xde, 0x6e,
+       0x88, 0xeb, 0x22, 0x72,
+       0x08, 0xeb, 0xde, 0x6e,
+       0x04, 0xea, 0x26, 0xe2,
+       0x08, 0xee, 0xde, 0x6e,
        0x04, 0x6a, 0xd0, 0x81,
        0x05, 0xa4, 0xc0, 0x89,
        0x03, 0xa5, 0xc2, 0x31,
        0x09, 0x6a, 0xd6, 0x05,
-       0x00, 0x65, 0x08, 0x5a,
+       0x00, 0x65, 0x0a, 0x5a,
        0x06, 0xa4, 0xd4, 0x89,
-       0x80, 0x94, 0xdc, 0x7e,
+       0x80, 0x94, 0xde, 0x7e,
        0x07, 0xe9, 0x10, 0x31,
        0x01, 0xe9, 0x46, 0x31,
-       0x00, 0xa3, 0xba, 0x5e,
-       0x00, 0x65, 0xfa, 0x59,
+       0x00, 0xa3, 0xbc, 0x5e,
+       0x00, 0x65, 0xfc, 0x59,
        0x01, 0xa4, 0xca, 0x30,
-       0x80, 0xa3, 0x34, 0x7a,
+       0x80, 0xa3, 0x36, 0x7a,
        0x02, 0x65, 0xca, 0x00,
        0x01, 0x65, 0xf8, 0x31,
        0x80, 0x93, 0x26, 0x01,
@@ -294,162 +295,162 @@ static uint8_t seqprog[] = {
        0x01, 0x8c, 0xc8, 0x30,
        0x00, 0x88, 0xc8, 0x18,
        0x02, 0x64, 0xc8, 0x88,
-       0xff, 0x64, 0xdc, 0x7e,
-       0xff, 0x8d, 0x4a, 0x6a,
-       0xff, 0x8e, 0x4a, 0x6a,
+       0xff, 0x64, 0xde, 0x7e,
+       0xff, 0x8d, 0x4c, 0x6a,
+       0xff, 0x8e, 0x4c, 0x6a,
        0x03, 0x8c, 0xd4, 0x98,
-       0x00, 0x65, 0xdc, 0x56,
+       0x00, 0x65, 0xde, 0x56,
        0x01, 0x64, 0x70, 0x30,
        0xff, 0x64, 0xc8, 0x10,
        0x01, 0x64, 0xc8, 0x18,
        0x00, 0x8c, 0x18, 0x19,
        0xff, 0x8d, 0x1a, 0x21,
        0xff, 0x8e, 0x1c, 0x25,
-       0xc0, 0x3c, 0x5a, 0x7a,
-       0x21, 0x6a, 0xd8, 0x5e,
+       0xc0, 0x3c, 0x5c, 0x7a,
+       0x21, 0x6a, 0xda, 0x5e,
        0xa8, 0x6a, 0x76, 0x00,
        0x79, 0x6a, 0x76, 0x00,
-       0x40, 0x3f, 0x62, 0x6a,
+       0x40, 0x3f, 0x64, 0x6a,
        0x04, 0x3b, 0x76, 0x00,
        0x04, 0x6a, 0xd4, 0x81,
-       0x20, 0x3c, 0x6a, 0x7a,
-       0x51, 0x6a, 0xd8, 0x5e,
-       0x00, 0x65, 0x82, 0x42,
+       0x20, 0x3c, 0x6c, 0x7a,
+       0x51, 0x6a, 0xda, 0x5e,
+       0x00, 0x65, 0x84, 0x42,
        0x20, 0x3c, 0x78, 0x00,
-       0x00, 0xb3, 0xba, 0x5e,
+       0x00, 0xb3, 0xbc, 0x5e,
        0x07, 0xac, 0x10, 0x31,
        0x05, 0xb3, 0x46, 0x31,
        0x88, 0x6a, 0xcc, 0x00,
-       0xac, 0x6a, 0xee, 0x5d,
+       0xac, 0x6a, 0xf0, 0x5d,
        0xa3, 0x6a, 0xcc, 0x00,
-       0xb3, 0x6a, 0xf2, 0x5d,
-       0x00, 0x65, 0x3a, 0x5a,
+       0xb3, 0x6a, 0xf4, 0x5d,
+       0x00, 0x65, 0x3c, 0x5a,
        0xfd, 0xa4, 0x48, 0x09,
        0x03, 0x8c, 0x10, 0x30,
-       0x00, 0x65, 0xe6, 0x5d,
-       0x01, 0xa4, 0x94, 0x7a,
+       0x00, 0x65, 0xe8, 0x5d,
+       0x01, 0xa4, 0x96, 0x7a,
        0x04, 0x3b, 0x76, 0x08,
        0x01, 0x3b, 0x26, 0x31,
        0x80, 0x02, 0x04, 0x00,
-       0x10, 0x0c, 0x8a, 0x7a,
-       0x03, 0x9e, 0x8c, 0x6a,
+       0x10, 0x0c, 0x8c, 0x7a,
+       0x03, 0x9e, 0x8e, 0x6a,
        0x7f, 0x02, 0x04, 0x08,
-       0x91, 0x6a, 0xd8, 0x5e,
+       0x91, 0x6a, 0xda, 0x5e,
        0x00, 0x65, 0xcc, 0x41,
        0x01, 0xa4, 0xca, 0x30,
-       0x80, 0xa3, 0x9a, 0x7a,
+       0x80, 0xa3, 0x9c, 0x7a,
        0x02, 0x65, 0xca, 0x00,
        0x01, 0x65, 0xf8, 0x31,
        0x01, 0x3b, 0x26, 0x31,
-       0x00, 0x65, 0x0e, 0x5a,
-       0x01, 0xfc, 0xa8, 0x6a,
-       0x80, 0x0b, 0x9e, 0x6a,
-       0x10, 0x0c, 0x9e, 0x7a,
-       0x20, 0x93, 0x9e, 0x6a,
+       0x00, 0x65, 0x10, 0x5a,
+       0x01, 0xfc, 0xaa, 0x6a,
+       0x80, 0x0b, 0xa0, 0x6a,
+       0x10, 0x0c, 0xa0, 0x7a,
+       0x20, 0x93, 0xa0, 0x6a,
        0x02, 0x93, 0x26, 0x01,
-       0x02, 0xfc, 0xb2, 0x7a,
-       0x40, 0x0d, 0xc6, 0x6a,
+       0x02, 0xfc, 0xb4, 0x7a,
+       0x40, 0x0d, 0xc8, 0x6a,
        0x01, 0xa4, 0x48, 0x01,
-       0x00, 0x65, 0xc6, 0x42,
-       0x40, 0x0d, 0xb8, 0x6a,
-       0x00, 0x65, 0x0e, 0x5a,
-       0x00, 0x65, 0xaa, 0x42,
-       0x80, 0xfc, 0xc2, 0x7a,
-       0x80, 0xa4, 0xc2, 0x6a,
+       0x00, 0x65, 0xc8, 0x42,
+       0x40, 0x0d, 0xba, 0x6a,
+       0x00, 0x65, 0x10, 0x5a,
+       0x00, 0x65, 0xac, 0x42,
+       0x80, 0xfc, 0xc4, 0x7a,
+       0x80, 0xa4, 0xc4, 0x6a,
        0xff, 0xa5, 0x4a, 0x19,
        0xff, 0xa6, 0x4c, 0x21,
        0xff, 0xa7, 0x4e, 0x21,
        0xf8, 0xfc, 0x48, 0x09,
        0x7f, 0xa3, 0x46, 0x09,
-       0x04, 0x3b, 0xe2, 0x6a,
+       0x04, 0x3b, 0xe4, 0x6a,
        0x02, 0x93, 0x26, 0x01,
-       0x01, 0x94, 0xc8, 0x7a,
-       0x01, 0x94, 0xc8, 0x7a,
-       0x01, 0x94, 0xc8, 0x7a,
-       0x01, 0x94, 0xc8, 0x7a,
-       0x01, 0x94, 0xc8, 0x7a,
-       0x01, 0xa4, 0xe0, 0x7a,
-       0x01, 0xfc, 0xd6, 0x7a,
-       0x01, 0x94, 0xe2, 0x6a,
-       0x01, 0x94, 0xe2, 0x6a,
-       0x01, 0x94, 0xe2, 0x6a,
-       0x00, 0x65, 0x82, 0x42,
-       0x01, 0x94, 0xe0, 0x7a,
-       0x10, 0x94, 0xe2, 0x6a,
+       0x01, 0x94, 0xca, 0x7a,
+       0x01, 0x94, 0xca, 0x7a,
+       0x01, 0x94, 0xca, 0x7a,
+       0x01, 0x94, 0xca, 0x7a,
+       0x01, 0x94, 0xca, 0x7a,
+       0x01, 0xa4, 0xe2, 0x7a,
+       0x01, 0xfc, 0xd8, 0x7a,
+       0x01, 0x94, 0xe4, 0x6a,
+       0x01, 0x94, 0xe4, 0x6a,
+       0x01, 0x94, 0xe4, 0x6a,
+       0x00, 0x65, 0x84, 0x42,
+       0x01, 0x94, 0xe2, 0x7a,
+       0x10, 0x94, 0xe4, 0x6a,
        0xd7, 0x93, 0x26, 0x09,
-       0x28, 0x93, 0xe6, 0x6a,
+       0x28, 0x93, 0xe8, 0x6a,
        0x01, 0x85, 0x0a, 0x01,
-       0x02, 0xfc, 0xee, 0x6a,
+       0x02, 0xfc, 0xf0, 0x6a,
        0x01, 0x14, 0x46, 0x31,
        0xff, 0x6a, 0x10, 0x09,
        0xfe, 0x85, 0x0a, 0x09,
-       0xff, 0x38, 0xfc, 0x6a,
-       0x80, 0xa3, 0xfc, 0x7a,
-       0x80, 0x0b, 0xfa, 0x7a,
-       0x04, 0x3b, 0xfc, 0x7a,
+       0xff, 0x38, 0xfe, 0x6a,
+       0x80, 0xa3, 0xfe, 0x7a,
+       0x80, 0x0b, 0xfc, 0x7a,
+       0x04, 0x3b, 0xfe, 0x7a,
        0xbf, 0x3b, 0x76, 0x08,
        0x01, 0x3b, 0x26, 0x31,
-       0x00, 0x65, 0x0e, 0x5a,
-       0x01, 0x0b, 0x0a, 0x6b,
-       0x10, 0x0c, 0xfe, 0x7a,
-       0x04, 0x93, 0x08, 0x6b,
-       0x01, 0x94, 0x06, 0x7b,
-       0x10, 0x94, 0x08, 0x6b,
+       0x00, 0x65, 0x10, 0x5a,
+       0x01, 0x0b, 0x0c, 0x6b,
+       0x10, 0x0c, 0x00, 0x7b,
+       0x04, 0x93, 0x0a, 0x6b,
+       0x01, 0x94, 0x08, 0x7b,
+       0x10, 0x94, 0x0a, 0x6b,
        0xc7, 0x93, 0x26, 0x09,
        0x01, 0x99, 0xd4, 0x30,
-       0x38, 0x93, 0x0c, 0x6b,
-       0xff, 0x08, 0x5a, 0x6b,
-       0xff, 0x09, 0x5a, 0x6b,
-       0xff, 0x0a, 0x5a, 0x6b,
-       0xff, 0x38, 0x28, 0x7b,
+       0x38, 0x93, 0x0e, 0x6b,
+       0xff, 0x08, 0x5c, 0x6b,
+       0xff, 0x09, 0x5c, 0x6b,
+       0xff, 0x0a, 0x5c, 0x6b,
+       0xff, 0x38, 0x2a, 0x7b,
        0x04, 0x14, 0x10, 0x31,
        0x01, 0x38, 0x18, 0x31,
        0x02, 0x6a, 0x1a, 0x31,
        0x88, 0x6a, 0xcc, 0x00,
-       0x14, 0x6a, 0xf4, 0x5d,
-       0x00, 0x38, 0xe0, 0x5d,
+       0x14, 0x6a, 0xf6, 0x5d,
+       0x00, 0x38, 0xe2, 0x5d,
        0xff, 0x6a, 0x70, 0x08,
-       0x00, 0x65, 0x54, 0x43,
-       0x80, 0xa3, 0x2e, 0x7b,
+       0x00, 0x65, 0x56, 0x43,
+       0x80, 0xa3, 0x30, 0x7b,
        0x01, 0xa4, 0x48, 0x01,
-       0x00, 0x65, 0x5a, 0x43,
-       0x08, 0xeb, 0x34, 0x7b,
-       0x00, 0x65, 0x0e, 0x5a,
-       0x08, 0xeb, 0x30, 0x6b,
+       0x00, 0x65, 0x5c, 0x43,
+       0x08, 0xeb, 0x36, 0x7b,
+       0x00, 0x65, 0x10, 0x5a,
+       0x08, 0xeb, 0x32, 0x6b,
        0x07, 0xe9, 0x10, 0x31,
        0x01, 0xe9, 0xca, 0x30,
        0x01, 0x65, 0x46, 0x31,
-       0x00, 0x6a, 0xba, 0x5e,
+       0x00, 0x6a, 0xbc, 0x5e,
        0x88, 0x6a, 0xcc, 0x00,
-       0xa4, 0x6a, 0xf4, 0x5d,
-       0x08, 0x6a, 0xe0, 0x5d,
+       0xa4, 0x6a, 0xf6, 0x5d,
+       0x08, 0x6a, 0xe2, 0x5d,
        0x0d, 0x93, 0x26, 0x01,
-       0x00, 0x65, 0xa8, 0x5e,
+       0x00, 0x65, 0xaa, 0x5e,
        0x88, 0x6a, 0xcc, 0x00,
-       0x00, 0x65, 0x8a, 0x5e,
+       0x00, 0x65, 0x8c, 0x5e,
        0x01, 0x99, 0x46, 0x31,
-       0x00, 0xa3, 0xba, 0x5e,
+       0x00, 0xa3, 0xbc, 0x5e,
        0x01, 0x88, 0x10, 0x31,
-       0x00, 0x65, 0x3a, 0x5a,
-       0x00, 0x65, 0xfa, 0x59,
+       0x00, 0x65, 0x3c, 0x5a,
+       0x00, 0x65, 0xfc, 0x59,
        0x03, 0x8c, 0x10, 0x30,
-       0x00, 0x65, 0xe6, 0x5d,
-       0x80, 0x0b, 0x82, 0x6a,
-       0x80, 0x0b, 0x62, 0x6b,
-       0x01, 0x0c, 0x5c, 0x7b,
-       0x10, 0x0c, 0x82, 0x7a,
-       0x03, 0x9e, 0x82, 0x6a,
-       0x00, 0x65, 0x04, 0x5a,
-       0x00, 0x6a, 0xba, 0x5e,
-       0x01, 0xa4, 0x82, 0x6b,
-       0xff, 0x38, 0x78, 0x7b,
+       0x00, 0x65, 0xe8, 0x5d,
+       0x80, 0x0b, 0x84, 0x6a,
+       0x80, 0x0b, 0x64, 0x6b,
+       0x01, 0x0c, 0x5e, 0x7b,
+       0x10, 0x0c, 0x84, 0x7a,
+       0x03, 0x9e, 0x84, 0x6a,
+       0x00, 0x65, 0x06, 0x5a,
+       0x00, 0x6a, 0xbc, 0x5e,
+       0x01, 0xa4, 0x84, 0x6b,
+       0xff, 0x38, 0x7a, 0x7b,
        0x01, 0x38, 0xc8, 0x30,
        0x00, 0x08, 0x40, 0x19,
        0xff, 0x6a, 0xc8, 0x08,
        0x00, 0x09, 0x42, 0x21,
        0x00, 0x0a, 0x44, 0x21,
        0xff, 0x6a, 0x70, 0x08,
-       0x00, 0x65, 0x7a, 0x43,
+       0x00, 0x65, 0x7c, 0x43,
        0x03, 0x08, 0x40, 0x31,
        0x03, 0x08, 0x40, 0x31,
        0x01, 0x08, 0x40, 0x31,
@@ -461,16 +462,16 @@ static uint8_t seqprog[] = {
        0x04, 0x3c, 0xcc, 0x79,
        0xfb, 0x3c, 0x78, 0x08,
        0x04, 0x93, 0x20, 0x79,
-       0x01, 0x0c, 0x8e, 0x6b,
+       0x01, 0x0c, 0x90, 0x6b,
        0x80, 0xba, 0x20, 0x79,
        0x80, 0x04, 0x20, 0x79,
-       0xe4, 0x6a, 0x6e, 0x5d,
-       0x23, 0x6a, 0x84, 0x5d,
-       0x01, 0x6a, 0x84, 0x5d,
+       0xe4, 0x6a, 0x70, 0x5d,
+       0x23, 0x6a, 0x86, 0x5d,
+       0x01, 0x6a, 0x86, 0x5d,
        0x00, 0x65, 0x20, 0x41,
        0x00, 0x65, 0xcc, 0x41,
-       0x80, 0x3c, 0xa2, 0x7b,
-       0x21, 0x6a, 0xd8, 0x5e,
+       0x80, 0x3c, 0xa4, 0x7b,
+       0x21, 0x6a, 0xda, 0x5e,
        0x01, 0xbc, 0x18, 0x31,
        0x02, 0x6a, 0x1a, 0x31,
        0x02, 0x6a, 0xf8, 0x01,
@@ -480,16 +481,16 @@ static uint8_t seqprog[] = {
        0xff, 0x6a, 0x12, 0x08,
        0xff, 0x6a, 0x14, 0x08,
        0xf3, 0xbc, 0xd4, 0x18,
-       0xa0, 0x6a, 0xc8, 0x53,
+       0xa0, 0x6a, 0xca, 0x53,
        0x04, 0xa0, 0x10, 0x31,
        0xac, 0x6a, 0x26, 0x01,
        0x04, 0xa0, 0x10, 0x31,
        0x03, 0x08, 0x18, 0x31,
        0x88, 0x6a, 0xcc, 0x00,
-       0xa0, 0x6a, 0xf4, 0x5d,
-       0x00, 0xbc, 0xe0, 0x5d,
+       0xa0, 0x6a, 0xf6, 0x5d,
+       0x00, 0xbc, 0xe2, 0x5d,
        0x3d, 0x6a, 0x26, 0x01,
-       0x00, 0x65, 0xe0, 0x43,
+       0x00, 0x65, 0xe2, 0x43,
        0xff, 0x6a, 0x10, 0x09,
        0xa4, 0x6a, 0x26, 0x01,
        0x0c, 0xa0, 0x32, 0x31,
@@ -499,128 +500,128 @@ static uint8_t seqprog[] = {
        0x36, 0x6a, 0x26, 0x01,
        0x02, 0x93, 0x26, 0x01,
        0x35, 0x6a, 0x26, 0x01,
-       0x00, 0x65, 0x9c, 0x5e,
-       0x00, 0x65, 0x9c, 0x5e,
+       0x00, 0x65, 0x9e, 0x5e,
+       0x00, 0x65, 0x9e, 0x5e,
        0x02, 0x93, 0x26, 0x01,
        0xbf, 0x3c, 0x78, 0x08,
-       0x04, 0x0b, 0xe6, 0x6b,
-       0x10, 0x0c, 0xe2, 0x7b,
-       0x01, 0x03, 0xe6, 0x6b,
-       0x20, 0x93, 0xe8, 0x6b,
-       0x04, 0x0b, 0xee, 0x6b,
+       0x04, 0x0b, 0xe8, 0x6b,
+       0x10, 0x0c, 0xe4, 0x7b,
+       0x01, 0x03, 0xe8, 0x6b,
+       0x20, 0x93, 0xea, 0x6b,
+       0x04, 0x0b, 0xf0, 0x6b,
        0x40, 0x3c, 0x78, 0x00,
        0xc7, 0x93, 0x26, 0x09,
-       0x38, 0x93, 0xf0, 0x6b,
+       0x38, 0x93, 0xf2, 0x6b,
        0x00, 0x65, 0xcc, 0x41,
-       0x80, 0x3c, 0x56, 0x6c,
+       0x80, 0x3c, 0x58, 0x6c,
        0x01, 0x06, 0x50, 0x31,
        0x80, 0xb8, 0x70, 0x01,
        0x00, 0x65, 0xcc, 0x41,
        0x10, 0x3f, 0x06, 0x00,
        0x10, 0x6a, 0x06, 0x00,
        0x01, 0x3a, 0xca, 0x30,
-       0x80, 0x65, 0x1c, 0x64,
-       0x10, 0xb8, 0x40, 0x6c,
+       0x80, 0x65, 0x1e, 0x64,
+       0x10, 0xb8, 0x42, 0x6c,
        0xc0, 0x3e, 0xca, 0x00,
-       0x40, 0xb8, 0x0c, 0x6c,
+       0x40, 0xb8, 0x0e, 0x6c,
        0xbf, 0x65, 0xca, 0x08,
-       0x20, 0xb8, 0x20, 0x7c,
+       0x20, 0xb8, 0x22, 0x7c,
        0x01, 0x65, 0x0c, 0x30,
-       0x00, 0x65, 0xd8, 0x5d,
-       0xa0, 0x3f, 0x28, 0x64,
+       0x00, 0x65, 0xda, 0x5d,
+       0xa0, 0x3f, 0x2a, 0x64,
        0x23, 0xb8, 0x0c, 0x08,
-       0x00, 0x65, 0xd8, 0x5d,
-       0xa0, 0x3f, 0x28, 0x64,
-       0x00, 0xbb, 0x20, 0x44,
-       0xff, 0x65, 0x20, 0x64,
-       0x00, 0x65, 0x40, 0x44,
+       0x00, 0x65, 0xda, 0x5d,
+       0xa0, 0x3f, 0x2a, 0x64,
+       0x00, 0xbb, 0x22, 0x44,
+       0xff, 0x65, 0x22, 0x64,
+       0x00, 0x65, 0x42, 0x44,
        0x40, 0x6a, 0x18, 0x00,
        0x01, 0x65, 0x0c, 0x30,
-       0x00, 0x65, 0xd8, 0x5d,
-       0xa0, 0x3f, 0xfc, 0x73,
+       0x00, 0x65, 0xda, 0x5d,
+       0xa0, 0x3f, 0xfe, 0x73,
        0x40, 0x6a, 0x18, 0x00,
        0x01, 0x3a, 0xa6, 0x30,
        0x08, 0x6a, 0x74, 0x00,
        0x00, 0x65, 0xcc, 0x41,
-       0x64, 0x6a, 0x68, 0x5d,
-       0x80, 0x64, 0xd8, 0x6c,
-       0x04, 0x64, 0x9a, 0x74,
-       0x02, 0x64, 0xaa, 0x74,
-       0x00, 0x6a, 0x60, 0x74,
-       0x03, 0x64, 0xc8, 0x74,
-       0x23, 0x64, 0x48, 0x74,
-       0x08, 0x64, 0x5c, 0x74,
-       0x61, 0x6a, 0xd8, 0x5e,
-       0x00, 0x65, 0xd8, 0x5d,
+       0x64, 0x6a, 0x6a, 0x5d,
+       0x80, 0x64, 0xda, 0x6c,
+       0x04, 0x64, 0x9c, 0x74,
+       0x02, 0x64, 0xac, 0x74,
+       0x00, 0x6a, 0x62, 0x74,
+       0x03, 0x64, 0xca, 0x74,
+       0x23, 0x64, 0x4a, 0x74,
+       0x08, 0x64, 0x5e, 0x74,
+       0x61, 0x6a, 0xda, 0x5e,
+       0x00, 0x65, 0xda, 0x5d,
        0x08, 0x51, 0xce, 0x71,
-       0x00, 0x65, 0x40, 0x44,
-       0x80, 0x04, 0x5a, 0x7c,
-       0x51, 0x6a, 0x5e, 0x5d,
-       0x01, 0x51, 0x5a, 0x64,
-       0x01, 0xa4, 0x52, 0x7c,
-       0x80, 0xba, 0x5c, 0x6c,
-       0x41, 0x6a, 0xd8, 0x5e,
-       0x00, 0x65, 0x5c, 0x44,
-       0x21, 0x6a, 0xd8, 0x5e,
-       0x00, 0x65, 0x5c, 0x44,
-       0x07, 0x6a, 0x54, 0x5d,
+       0x00, 0x65, 0x42, 0x44,
+       0x80, 0x04, 0x5c, 0x7c,
+       0x51, 0x6a, 0x60, 0x5d,
+       0x01, 0x51, 0x5c, 0x64,
+       0x01, 0xa4, 0x54, 0x7c,
+       0x80, 0xba, 0x5e, 0x6c,
+       0x41, 0x6a, 0xda, 0x5e,
+       0x00, 0x65, 0x5e, 0x44,
+       0x21, 0x6a, 0xda, 0x5e,
+       0x00, 0x65, 0x5e, 0x44,
+       0x07, 0x6a, 0x56, 0x5d,
        0x01, 0x06, 0xd4, 0x30,
        0x00, 0x65, 0xcc, 0x41,
-       0x80, 0xb8, 0x56, 0x7c,
-       0xc0, 0x3c, 0x6a, 0x7c,
-       0x80, 0x3c, 0x56, 0x6c,
-       0xff, 0xa8, 0x6a, 0x6c,
-       0x40, 0x3c, 0x56, 0x6c,
-       0x10, 0xb8, 0x6e, 0x7c,
-       0xa1, 0x6a, 0xd8, 0x5e,
-       0x01, 0xb4, 0x74, 0x6c,
-       0x02, 0xb4, 0x76, 0x6c,
-       0x01, 0xa4, 0x76, 0x7c,
-       0xff, 0xa8, 0x86, 0x7c,
+       0x80, 0xb8, 0x58, 0x7c,
+       0xc0, 0x3c, 0x6c, 0x7c,
+       0x80, 0x3c, 0x58, 0x6c,
+       0xff, 0xa8, 0x6c, 0x6c,
+       0x40, 0x3c, 0x58, 0x6c,
+       0x10, 0xb8, 0x70, 0x7c,
+       0xa1, 0x6a, 0xda, 0x5e,
+       0x01, 0xb4, 0x76, 0x6c,
+       0x02, 0xb4, 0x78, 0x6c,
+       0x01, 0xa4, 0x78, 0x7c,
+       0xff, 0xa8, 0x88, 0x7c,
        0x04, 0xb4, 0x68, 0x01,
        0x01, 0x6a, 0x76, 0x00,
-       0x00, 0xbb, 0x12, 0x5e,
-       0xff, 0xa8, 0x86, 0x7c,
-       0x71, 0x6a, 0xd8, 0x5e,
-       0x40, 0x51, 0x86, 0x64,
-       0x00, 0x65, 0xb2, 0x5e,
+       0x00, 0xbb, 0x14, 0x5e,
+       0xff, 0xa8, 0x88, 0x7c,
+       0x71, 0x6a, 0xda, 0x5e,
+       0x40, 0x51, 0x88, 0x64,
+       0x00, 0x65, 0xb4, 0x5e,
        0x00, 0x65, 0xde, 0x41,
-       0x00, 0xbb, 0x8a, 0x5c,
+       0x00, 0xbb, 0x8c, 0x5c,
        0x00, 0x65, 0xde, 0x41,
-       0x00, 0x65, 0xb2, 0x5e,
+       0x00, 0x65, 0xb4, 0x5e,
        0x01, 0x65, 0xa2, 0x30,
        0x01, 0xf8, 0xc8, 0x30,
        0x01, 0x4e, 0xc8, 0x30,
-       0x00, 0x6a, 0xb6, 0xdd,
-       0x00, 0x51, 0xc8, 0x5d,
+       0x00, 0x6a, 0xb8, 0xdd,
+       0x00, 0x51, 0xca, 0x5d,
        0x01, 0x4e, 0x9c, 0x18,
        0x02, 0x6a, 0x22, 0x05,
-       0xc0, 0x3c, 0x56, 0x6c,
+       0xc0, 0x3c, 0x58, 0x6c,
        0x04, 0xb8, 0x70, 0x01,
-       0x00, 0x65, 0xd4, 0x5e,
+       0x00, 0x65, 0xd6, 0x5e,
        0x20, 0xb8, 0xde, 0x69,
        0x01, 0xbb, 0xa2, 0x30,
        0x3f, 0xba, 0x7c, 0x08,
-       0x00, 0xb9, 0xce, 0x5c,
+       0x00, 0xb9, 0xd0, 0x5c,
        0x00, 0x65, 0xde, 0x41,
        0x01, 0x06, 0xd4, 0x30,
        0x20, 0x3c, 0xcc, 0x79,
-       0x20, 0x3c, 0x5c, 0x7c,
-       0x01, 0xa4, 0xb8, 0x7c,
+       0x20, 0x3c, 0x5e, 0x7c,
+       0x01, 0xa4, 0xba, 0x7c,
        0x01, 0xb4, 0x68, 0x01,
        0x00, 0x65, 0xcc, 0x41,
-       0x00, 0x65, 0x5c, 0x44,
+       0x00, 0x65, 0x5e, 0x44,
        0x04, 0x14, 0x58, 0x31,
        0x01, 0x06, 0xd4, 0x30,
        0x08, 0xa0, 0x60, 0x31,
        0xac, 0x6a, 0xcc, 0x00,
-       0x14, 0x6a, 0xf4, 0x5d,
+       0x14, 0x6a, 0xf6, 0x5d,
        0x01, 0x06, 0xd4, 0x30,
-       0xa0, 0x6a, 0xec, 0x5d,
+       0xa0, 0x6a, 0xee, 0x5d,
        0x00, 0x65, 0xcc, 0x41,
        0xdf, 0x3c, 0x78, 0x08,
        0x12, 0x01, 0x02, 0x00,
-       0x00, 0x65, 0x5c, 0x44,
+       0x00, 0x65, 0x5e, 0x44,
        0x4c, 0x65, 0xcc, 0x28,
        0x01, 0x3e, 0x20, 0x31,
        0xd0, 0x66, 0xcc, 0x18,
@@ -631,102 +632,102 @@ static uint8_t seqprog[] = {
        0xd0, 0x65, 0xca, 0x18,
        0x01, 0x3e, 0x20, 0x31,
        0x30, 0x65, 0xd4, 0x18,
-       0x00, 0x65, 0xe6, 0x4c,
+       0x00, 0x65, 0xe8, 0x4c,
        0xe1, 0x6a, 0x22, 0x01,
        0xff, 0x6a, 0xd4, 0x08,
        0x20, 0x65, 0xd4, 0x18,
-       0x00, 0x65, 0xee, 0x54,
+       0x00, 0x65, 0xf0, 0x54,
        0xe1, 0x6a, 0x22, 0x01,
        0xff, 0x6a, 0xd4, 0x08,
        0x20, 0x65, 0xca, 0x18,
        0xe0, 0x65, 0xd4, 0x18,
-       0x00, 0x65, 0xf8, 0x4c,
+       0x00, 0x65, 0xfa, 0x4c,
        0xe1, 0x6a, 0x22, 0x01,
        0xff, 0x6a, 0xd4, 0x08,
        0xd0, 0x65, 0xd4, 0x18,
-       0x00, 0x65, 0x00, 0x55,
+       0x00, 0x65, 0x02, 0x55,
        0xe1, 0x6a, 0x22, 0x01,
        0xff, 0x6a, 0xd4, 0x08,
        0x01, 0x6c, 0xa2, 0x30,
-       0xff, 0x51, 0x12, 0x75,
-       0x00, 0x51, 0x8e, 0x5d,
+       0xff, 0x51, 0x14, 0x75,
+       0x00, 0x51, 0x90, 0x5d,
        0x01, 0x51, 0x20, 0x31,
-       0x00, 0x65, 0x34, 0x45,
+       0x00, 0x65, 0x36, 0x45,
        0x3f, 0xba, 0xc8, 0x08,
-       0x00, 0x3e, 0x34, 0x75,
-       0x00, 0x65, 0xb0, 0x5e,
+       0x00, 0x3e, 0x36, 0x75,
+       0x00, 0x65, 0xb2, 0x5e,
        0x80, 0x3c, 0x78, 0x00,
        0x01, 0x06, 0xd4, 0x30,
-       0x00, 0x65, 0xd8, 0x5d,
+       0x00, 0x65, 0xda, 0x5d,
        0x01, 0x3c, 0x78, 0x00,
-       0xe0, 0x3f, 0x50, 0x65,
+       0xe0, 0x3f, 0x52, 0x65,
        0x02, 0x3c, 0x78, 0x00,
-       0x20, 0x12, 0x50, 0x65,
-       0x51, 0x6a, 0x5e, 0x5d,
-       0x00, 0x51, 0x8e, 0x5d,
-       0x51, 0x6a, 0x5e, 0x5d,
+       0x20, 0x12, 0x52, 0x65,
+       0x51, 0x6a, 0x60, 0x5d,
+       0x00, 0x51, 0x90, 0x5d,
+       0x51, 0x6a, 0x60, 0x5d,
        0x01, 0x51, 0x20, 0x31,
        0x04, 0x3c, 0x78, 0x00,
        0x01, 0xb9, 0xc8, 0x30,
-       0x00, 0x3d, 0x4e, 0x65,
+       0x00, 0x3d, 0x50, 0x65,
        0x08, 0x3c, 0x78, 0x00,
        0x3f, 0xba, 0xc8, 0x08,
-       0x00, 0x3e, 0x4e, 0x65,
+       0x00, 0x3e, 0x50, 0x65,
        0x10, 0x3c, 0x78, 0x00,
-       0x04, 0xb8, 0x4e, 0x7d,
+       0x04, 0xb8, 0x50, 0x7d,
        0xfb, 0xb8, 0x70, 0x09,
-       0x20, 0xb8, 0x44, 0x6d,
+       0x20, 0xb8, 0x46, 0x6d,
        0x01, 0x90, 0xc8, 0x30,
        0xff, 0x6a, 0xa2, 0x00,
-       0x00, 0x3d, 0xce, 0x5c,
+       0x00, 0x3d, 0xd0, 0x5c,
        0x01, 0x64, 0x20, 0x31,
        0xff, 0x6a, 0x78, 0x08,
        0x00, 0x65, 0xea, 0x58,
-       0x10, 0xb8, 0x5c, 0x7c,
-       0xff, 0x6a, 0x54, 0x5d,
-       0x00, 0x65, 0x5c, 0x44,
-       0x00, 0x65, 0xb0, 0x5e,
-       0x31, 0x6a, 0xd8, 0x5e,
-       0x00, 0x65, 0x5c, 0x44,
+       0x10, 0xb8, 0x5e, 0x7c,
+       0xff, 0x6a, 0x56, 0x5d,
+       0x00, 0x65, 0x5e, 0x44,
+       0x00, 0x65, 0xb2, 0x5e,
+       0x31, 0x6a, 0xda, 0x5e,
+       0x00, 0x65, 0x5e, 0x44,
        0x10, 0x3f, 0x06, 0x00,
        0x10, 0x6a, 0x06, 0x00,
        0x01, 0x65, 0x74, 0x34,
-       0x81, 0x6a, 0xd8, 0x5e,
-       0x00, 0x65, 0x60, 0x45,
+       0x81, 0x6a, 0xda, 0x5e,
+       0x00, 0x65, 0x62, 0x45,
        0x01, 0x06, 0xd4, 0x30,
-       0x01, 0x0c, 0x60, 0x7d,
-       0x04, 0x0c, 0x5a, 0x6d,
+       0x01, 0x0c, 0x62, 0x7d,
+       0x04, 0x0c, 0x5c, 0x6d,
        0xe0, 0x03, 0x7e, 0x08,
        0xe0, 0x3f, 0xcc, 0x61,
        0x01, 0x65, 0xcc, 0x30,
        0x01, 0x12, 0xda, 0x34,
        0x01, 0x06, 0xd4, 0x34,
-       0x01, 0x03, 0x6e, 0x6d,
+       0x01, 0x03, 0x70, 0x6d,
        0x40, 0x03, 0xcc, 0x08,
        0x01, 0x65, 0x06, 0x30,
        0x40, 0x65, 0xc8, 0x08,
-       0x00, 0x66, 0x7c, 0x75,
-       0x40, 0x65, 0x7c, 0x7d,
-       0x00, 0x65, 0x7c, 0x5d,
+       0x00, 0x66, 0x7e, 0x75,
+       0x40, 0x65, 0x7e, 0x7d,
+       0x00, 0x65, 0x7e, 0x5d,
        0xff, 0x6a, 0xd4, 0x08,
        0xff, 0x6a, 0xd4, 0x08,
        0xff, 0x6a, 0xd4, 0x08,
        0xff, 0x6a, 0xd4, 0x0c,
        0x08, 0x01, 0x02, 0x00,
-       0x02, 0x0b, 0x86, 0x7d,
+       0x02, 0x0b, 0x88, 0x7d,
        0x01, 0x65, 0x0c, 0x30,
-       0x02, 0x0b, 0x8a, 0x7d,
+       0x02, 0x0b, 0x8c, 0x7d,
        0xf7, 0x01, 0x02, 0x0c,
        0x01, 0x65, 0xc8, 0x30,
-       0xff, 0x41, 0xae, 0x75,
+       0xff, 0x41, 0xb0, 0x75,
        0x01, 0x41, 0x20, 0x31,
        0xff, 0x6a, 0xa4, 0x00,
-       0x00, 0x65, 0x9e, 0x45,
-       0xff, 0xbf, 0xae, 0x75,
+       0x00, 0x65, 0xa0, 0x45,
+       0xff, 0xbf, 0xb0, 0x75,
        0x01, 0x90, 0xa4, 0x30,
        0x01, 0xbf, 0x20, 0x31,
-       0x00, 0xbb, 0x98, 0x65,
-       0xff, 0x52, 0xac, 0x75,
+       0x00, 0xbb, 0x9a, 0x65,
+       0xff, 0x52, 0xae, 0x75,
        0x01, 0xbf, 0xcc, 0x30,
        0x01, 0x90, 0xca, 0x30,
        0x01, 0x52, 0x20, 0x31,
@@ -734,28 +735,28 @@ static uint8_t seqprog[] = {
        0x01, 0x65, 0x20, 0x35,
        0x01, 0xbf, 0x82, 0x34,
        0x01, 0x64, 0xa2, 0x30,
-       0x00, 0x6a, 0xc0, 0x5e,
+       0x00, 0x6a, 0xc2, 0x5e,
        0x0d, 0x6a, 0x76, 0x00,
-       0x00, 0x51, 0x12, 0x46,
+       0x00, 0x51, 0x14, 0x46,
        0x01, 0x65, 0xa4, 0x30,
        0xe0, 0x6a, 0xcc, 0x00,
-       0x48, 0x6a, 0x06, 0x5e,
+       0x48, 0x6a, 0x08, 0x5e,
        0x01, 0x6a, 0xd0, 0x01,
        0x01, 0x6a, 0xdc, 0x05,
        0x88, 0x6a, 0xcc, 0x00,
-       0x48, 0x6a, 0x06, 0x5e,
-       0x01, 0x6a, 0xe0, 0x5d,
+       0x48, 0x6a, 0x08, 0x5e,
+       0x01, 0x6a, 0xe2, 0x5d,
        0x01, 0x6a, 0x26, 0x05,
        0x01, 0x65, 0xd8, 0x31,
        0x09, 0xee, 0xdc, 0x01,
-       0x80, 0xee, 0xcc, 0x7d,
+       0x80, 0xee, 0xce, 0x7d,
        0xff, 0x6a, 0xdc, 0x0d,
        0x01, 0x65, 0x32, 0x31,
        0x0a, 0x93, 0x26, 0x01,
-       0x00, 0x65, 0xa8, 0x46,
-       0x81, 0x6a, 0xd8, 0x5e,
-       0x01, 0x0c, 0xd8, 0x7d,
-       0x04, 0x0c, 0xd6, 0x6d,
+       0x00, 0x65, 0xaa, 0x46,
+       0x81, 0x6a, 0xda, 0x5e,
+       0x01, 0x0c, 0xda, 0x7d,
+       0x04, 0x0c, 0xd8, 0x6d,
        0xe0, 0x03, 0x06, 0x08,
        0xe0, 0x03, 0x7e, 0x0c,
        0x01, 0x65, 0x18, 0x31,
@@ -774,7 +775,7 @@ static uint8_t seqprog[] = {
        0x01, 0x6c, 0xda, 0x34,
        0x3d, 0x64, 0xa4, 0x28,
        0x55, 0x64, 0xc8, 0x28,
-       0x00, 0x65, 0x06, 0x46,
+       0x00, 0x65, 0x08, 0x46,
        0x2e, 0x64, 0xa4, 0x28,
        0x66, 0x64, 0xc8, 0x28,
        0x00, 0x6c, 0xda, 0x18,
@@ -785,63 +786,63 @@ static uint8_t seqprog[] = {
        0x00, 0x6c, 0xda, 0x24,
        0x01, 0x65, 0xc8, 0x30,
        0xe0, 0x6a, 0xcc, 0x00,
-       0x44, 0x6a, 0x02, 0x5e,
+       0x44, 0x6a, 0x04, 0x5e,
        0x01, 0x90, 0xe2, 0x31,
-       0x04, 0x3b, 0x26, 0x7e,
+       0x04, 0x3b, 0x28, 0x7e,
        0x30, 0x6a, 0xd0, 0x01,
        0x20, 0x6a, 0xd0, 0x01,
        0x1d, 0x6a, 0xdc, 0x01,
-       0xdc, 0xee, 0x22, 0x66,
-       0x00, 0x65, 0x3e, 0x46,
+       0xdc, 0xee, 0x24, 0x66,
+       0x00, 0x65, 0x40, 0x46,
        0x20, 0x6a, 0xd0, 0x01,
        0x01, 0x6a, 0xdc, 0x01,
        0x20, 0xa0, 0xd8, 0x31,
        0x09, 0xee, 0xdc, 0x01,
-       0x80, 0xee, 0x2e, 0x7e,
+       0x80, 0xee, 0x30, 0x7e,
        0x11, 0x6a, 0xdc, 0x01,
-       0x50, 0xee, 0x32, 0x66,
+       0x50, 0xee, 0x34, 0x66,
        0x20, 0x6a, 0xd0, 0x01,
        0x09, 0x6a, 0xdc, 0x01,
-       0x88, 0xee, 0x38, 0x66,
+       0x88, 0xee, 0x3a, 0x66,
        0x19, 0x6a, 0xdc, 0x01,
-       0xd8, 0xee, 0x3c, 0x66,
+       0xd8, 0xee, 0x3e, 0x66,
        0xff, 0x6a, 0xdc, 0x09,
-       0x18, 0xee, 0x40, 0x6e,
+       0x18, 0xee, 0x42, 0x6e,
        0xff, 0x6a, 0xd4, 0x0c,
        0x88, 0x6a, 0xcc, 0x00,
-       0x44, 0x6a, 0x02, 0x5e,
-       0x20, 0x6a, 0xe0, 0x5d,
+       0x44, 0x6a, 0x04, 0x5e,
+       0x20, 0x6a, 0xe2, 0x5d,
        0x01, 0x3b, 0x26, 0x31,
-       0x04, 0x3b, 0x5a, 0x6e,
+       0x04, 0x3b, 0x5c, 0x6e,
        0xa0, 0x6a, 0xca, 0x00,
        0x20, 0x65, 0xc8, 0x18,
-       0x00, 0x65, 0x98, 0x5e,
-       0x00, 0x65, 0x52, 0x66,
+       0x00, 0x65, 0x9a, 0x5e,
+       0x00, 0x65, 0x54, 0x66,
        0x0a, 0x93, 0x26, 0x01,
-       0x00, 0x65, 0xa8, 0x46,
+       0x00, 0x65, 0xaa, 0x46,
        0xa0, 0x6a, 0xcc, 0x00,
        0xff, 0x6a, 0xc8, 0x08,
-       0x20, 0x94, 0x5e, 0x6e,
-       0x10, 0x94, 0x60, 0x6e,
-       0x08, 0x94, 0x7a, 0x6e,
-       0x08, 0x94, 0x7a, 0x6e,
-       0x08, 0x94, 0x7a, 0x6e,
+       0x20, 0x94, 0x60, 0x6e,
+       0x10, 0x94, 0x62, 0x6e,
+       0x08, 0x94, 0x7c, 0x6e,
+       0x08, 0x94, 0x7c, 0x6e,
+       0x08, 0x94, 0x7c, 0x6e,
        0xff, 0x8c, 0xc8, 0x10,
        0xc1, 0x64, 0xc8, 0x18,
        0xf8, 0x64, 0xc8, 0x08,
        0x01, 0x99, 0xda, 0x30,
-       0x00, 0x66, 0x6e, 0x66,
-       0xc0, 0x66, 0xaa, 0x76,
+       0x00, 0x66, 0x70, 0x66,
+       0xc0, 0x66, 0xac, 0x76,
        0x60, 0x66, 0xc8, 0x18,
        0x3d, 0x64, 0xc8, 0x28,
-       0x00, 0x65, 0x5e, 0x46,
+       0x00, 0x65, 0x60, 0x46,
        0xf7, 0x93, 0x26, 0x09,
-       0x08, 0x93, 0x7c, 0x6e,
+       0x08, 0x93, 0x7e, 0x6e,
        0x00, 0x62, 0xc4, 0x18,
-       0x00, 0x65, 0xa8, 0x5e,
-       0x00, 0x65, 0x88, 0x5e,
-       0x00, 0x65, 0x88, 0x5e,
-       0x00, 0x65, 0x88, 0x5e,
+       0x00, 0x65, 0xaa, 0x5e,
+       0x00, 0x65, 0x8a, 0x5e,
+       0x00, 0x65, 0x8a, 0x5e,
+       0x00, 0x65, 0x8a, 0x5e,
        0x01, 0x99, 0xda, 0x30,
        0x01, 0x99, 0xda, 0x30,
        0x01, 0x99, 0xda, 0x30,
@@ -858,11 +859,11 @@ static uint8_t seqprog[] = {
        0x01, 0x6c, 0x32, 0x31,
        0x01, 0x6c, 0x32, 0x31,
        0x01, 0x6c, 0x32, 0x35,
-       0x08, 0x94, 0xa8, 0x7e,
+       0x08, 0x94, 0xaa, 0x7e,
        0xf7, 0x93, 0x26, 0x09,
-       0x08, 0x93, 0xac, 0x6e,
+       0x08, 0x93, 0xae, 0x6e,
        0xff, 0x6a, 0xd4, 0x0c,
-       0x04, 0xb8, 0xd4, 0x6e,
+       0x04, 0xb8, 0xd6, 0x6e,
        0x01, 0x42, 0x7e, 0x31,
        0xff, 0x6a, 0x76, 0x01,
        0x01, 0x90, 0x84, 0x34,
@@ -870,14 +871,14 @@ static uint8_t seqprog[] = {
        0x01, 0x85, 0x0a, 0x01,
        0x7f, 0x65, 0x10, 0x09,
        0xfe, 0x85, 0x0a, 0x0d,
-       0xff, 0x42, 0xd0, 0x66,
-       0xff, 0x41, 0xc8, 0x66,
-       0xd1, 0x6a, 0xd8, 0x5e,
+       0xff, 0x42, 0xd2, 0x66,
+       0xff, 0x41, 0xca, 0x66,
+       0xd1, 0x6a, 0xda, 0x5e,
        0xff, 0x6a, 0xca, 0x04,
        0x01, 0x41, 0x20, 0x31,
        0x01, 0xbf, 0x82, 0x30,
        0x01, 0x6a, 0x76, 0x00,
-       0x00, 0xbb, 0x12, 0x46,
+       0x00, 0xbb, 0x14, 0x46,
        0x01, 0x42, 0x20, 0x31,
        0x01, 0xbf, 0x84, 0x34,
        0x01, 0x41, 0x7e, 0x31,
@@ -941,7 +942,7 @@ static ahc_patch_func_t ahc_patch17_func;
 static int
 ahc_patch17_func(struct ahc_softc *ahc)
 {
-       return ((ahc->flags & AHC_TMODE_WIDEODD_BUG) != 0);
+       return ((ahc->bugs & AHC_TMODE_WIDEODD_BUG) != 0);
 }
 
 static ahc_patch_func_t ahc_patch16_func;
@@ -1142,152 +1143,152 @@ static struct patch {
        { ahc_patch0_func, 196, 1, 1 },
        { ahc_patch9_func, 212, 6, 2 },
        { ahc_patch0_func, 218, 6, 1 },
-       { ahc_patch8_func, 226, 20, 2 },
+       { ahc_patch8_func, 226, 21, 2 },
        { ahc_patch1_func, 241, 1, 1 },
-       { ahc_patch1_func, 248, 1, 2 },
-       { ahc_patch0_func, 249, 2, 2 },
-       { ahc_patch11_func, 250, 1, 1 },
-       { ahc_patch9_func, 258, 27, 3 },
-       { ahc_patch1_func, 274, 10, 2 },
-       { ahc_patch13_func, 277, 1, 1 },
-       { ahc_patch14_func, 285, 14, 1 },
-       { ahc_patch1_func, 301, 1, 2 },
-       { ahc_patch0_func, 302, 1, 1 },
-       { ahc_patch9_func, 305, 1, 1 },
-       { ahc_patch13_func, 310, 1, 1 },
-       { ahc_patch9_func, 311, 2, 2 },
-       { ahc_patch0_func, 313, 4, 1 },
-       { ahc_patch14_func, 317, 1, 1 },
-       { ahc_patch15_func, 319, 2, 3 },
-       { ahc_patch9_func, 319, 1, 2 },
-       { ahc_patch0_func, 320, 1, 1 },
-       { ahc_patch6_func, 325, 1, 2 },
-       { ahc_patch0_func, 326, 1, 1 },
-       { ahc_patch1_func, 330, 47, 11 },
-       { ahc_patch6_func, 337, 2, 4 },
-       { ahc_patch7_func, 337, 1, 1 },
-       { ahc_patch8_func, 338, 1, 1 },
-       { ahc_patch0_func, 339, 1, 1 },
-       { ahc_patch16_func, 340, 1, 1 },
-       { ahc_patch6_func, 356, 6, 3 },
-       { ahc_patch16_func, 356, 5, 1 },
-       { ahc_patch0_func, 362, 7, 1 },
-       { ahc_patch13_func, 372, 5, 1 },
-       { ahc_patch0_func, 377, 52, 17 },
-       { ahc_patch14_func, 377, 1, 1 },
-       { ahc_patch7_func, 379, 2, 2 },
-       { ahc_patch17_func, 380, 1, 1 },
-       { ahc_patch9_func, 383, 1, 1 },
-       { ahc_patch18_func, 390, 1, 1 },
-       { ahc_patch14_func, 395, 9, 3 },
-       { ahc_patch9_func, 396, 3, 2 },
-       { ahc_patch0_func, 399, 3, 1 },
-       { ahc_patch9_func, 407, 6, 2 },
-       { ahc_patch0_func, 413, 9, 2 },
-       { ahc_patch13_func, 413, 1, 1 },
-       { ahc_patch13_func, 422, 2, 1 },
-       { ahc_patch14_func, 424, 1, 1 },
-       { ahc_patch9_func, 426, 1, 2 },
-       { ahc_patch0_func, 427, 1, 1 },
-       { ahc_patch7_func, 428, 1, 1 },
+       { ahc_patch1_func, 249, 1, 2 },
+       { ahc_patch0_func, 250, 2, 2 },
+       { ahc_patch11_func, 251, 1, 1 },
+       { ahc_patch9_func, 259, 27, 3 },
+       { ahc_patch1_func, 275, 10, 2 },
+       { ahc_patch13_func, 278, 1, 1 },
+       { ahc_patch14_func, 286, 14, 1 },
+       { ahc_patch1_func, 302, 1, 2 },
+       { ahc_patch0_func, 303, 1, 1 },
+       { ahc_patch9_func, 306, 1, 1 },
+       { ahc_patch13_func, 311, 1, 1 },
+       { ahc_patch9_func, 312, 2, 2 },
+       { ahc_patch0_func, 314, 4, 1 },
+       { ahc_patch14_func, 318, 1, 1 },
+       { ahc_patch15_func, 320, 2, 3 },
+       { ahc_patch9_func, 320, 1, 2 },
+       { ahc_patch0_func, 321, 1, 1 },
+       { ahc_patch6_func, 326, 1, 2 },
+       { ahc_patch0_func, 327, 1, 1 },
+       { ahc_patch1_func, 331, 47, 11 },
+       { ahc_patch6_func, 338, 2, 4 },
+       { ahc_patch7_func, 338, 1, 1 },
+       { ahc_patch8_func, 339, 1, 1 },
+       { ahc_patch0_func, 340, 1, 1 },
+       { ahc_patch16_func, 341, 1, 1 },
+       { ahc_patch6_func, 357, 6, 3 },
+       { ahc_patch16_func, 357, 5, 1 },
+       { ahc_patch0_func, 363, 7, 1 },
+       { ahc_patch13_func, 373, 5, 1 },
+       { ahc_patch0_func, 378, 52, 17 },
+       { ahc_patch14_func, 378, 1, 1 },
+       { ahc_patch7_func, 380, 2, 2 },
+       { ahc_patch17_func, 381, 1, 1 },
+       { ahc_patch9_func, 384, 1, 1 },
+       { ahc_patch18_func, 391, 1, 1 },
+       { ahc_patch14_func, 396, 9, 3 },
+       { ahc_patch9_func, 397, 3, 2 },
+       { ahc_patch0_func, 400, 3, 1 },
+       { ahc_patch9_func, 408, 6, 2 },
+       { ahc_patch0_func, 414, 9, 2 },
+       { ahc_patch13_func, 414, 1, 1 },
+       { ahc_patch13_func, 423, 2, 1 },
+       { ahc_patch14_func, 425, 1, 1 },
+       { ahc_patch9_func, 427, 1, 2 },
+       { ahc_patch0_func, 428, 1, 1 },
        { ahc_patch7_func, 429, 1, 1 },
-       { ahc_patch8_func, 430, 3, 3 },
-       { ahc_patch6_func, 431, 1, 2 },
-       { ahc_patch0_func, 432, 1, 1 },
-       { ahc_patch9_func, 433, 1, 1 },
-       { ahc_patch15_func, 434, 1, 2 },
-       { ahc_patch13_func, 434, 1, 1 },
-       { ahc_patch14_func, 436, 9, 4 },
-       { ahc_patch9_func, 436, 1, 1 },
-       { ahc_patch9_func, 443, 2, 1 },
-       { ahc_patch0_func, 445, 4, 3 },
-       { ahc_patch9_func, 445, 1, 2 },
-       { ahc_patch0_func, 446, 3, 1 },
-       { ahc_patch1_func, 450, 2, 1 },
-       { ahc_patch7_func, 452, 10, 2 },
-       { ahc_patch0_func, 462, 1, 1 },
-       { ahc_patch8_func, 463, 118, 22 },
-       { ahc_patch1_func, 465, 3, 2 },
-       { ahc_patch0_func, 468, 5, 3 },
-       { ahc_patch9_func, 468, 2, 2 },
-       { ahc_patch0_func, 470, 3, 1 },
-       { ahc_patch1_func, 475, 2, 2 },
-       { ahc_patch0_func, 477, 6, 3 },
-       { ahc_patch9_func, 477, 2, 2 },
-       { ahc_patch0_func, 479, 3, 1 },
-       { ahc_patch1_func, 485, 2, 2 },
-       { ahc_patch0_func, 487, 9, 7 },
-       { ahc_patch9_func, 487, 5, 6 },
-       { ahc_patch19_func, 487, 1, 2 },
-       { ahc_patch0_func, 488, 1, 1 },
-       { ahc_patch19_func, 490, 1, 2 },
-       { ahc_patch0_func, 491, 1, 1 },
-       { ahc_patch0_func, 492, 4, 1 },
-       { ahc_patch6_func, 497, 3, 2 },
-       { ahc_patch0_func, 500, 1, 1 },
-       { ahc_patch6_func, 510, 1, 2 },
-       { ahc_patch0_func, 511, 1, 1 },
-       { ahc_patch20_func, 548, 7, 1 },
-       { ahc_patch3_func, 583, 1, 2 },
-       { ahc_patch0_func, 584, 1, 1 },
-       { ahc_patch21_func, 587, 1, 1 },
-       { ahc_patch8_func, 589, 106, 33 },
-       { ahc_patch4_func, 591, 1, 1 },
-       { ahc_patch1_func, 597, 2, 2 },
-       { ahc_patch0_func, 599, 1, 1 },
-       { ahc_patch1_func, 602, 1, 2 },
-       { ahc_patch0_func, 603, 1, 1 },
-       { ahc_patch9_func, 604, 3, 3 },
-       { ahc_patch15_func, 605, 1, 1 },
-       { ahc_patch0_func, 607, 4, 1 },
-       { ahc_patch19_func, 616, 2, 2 },
-       { ahc_patch0_func, 618, 1, 1 },
-       { ahc_patch19_func, 622, 10, 3 },
-       { ahc_patch5_func, 624, 8, 1 },
-       { ahc_patch0_func, 632, 9, 2 },
-       { ahc_patch5_func, 633, 8, 1 },
-       { ahc_patch4_func, 643, 1, 2 },
-       { ahc_patch0_func, 644, 1, 1 },
-       { ahc_patch19_func, 645, 1, 2 },
-       { ahc_patch0_func, 646, 3, 2 },
-       { ahc_patch4_func, 648, 1, 1 },
-       { ahc_patch5_func, 649, 1, 1 },
-       { ahc_patch5_func, 652, 1, 1 },
-       { ahc_patch5_func, 654, 1, 1 },
-       { ahc_patch4_func, 656, 2, 2 },
-       { ahc_patch0_func, 658, 2, 1 },
-       { ahc_patch5_func, 660, 1, 1 },
-       { ahc_patch5_func, 663, 1, 1 },
-       { ahc_patch5_func, 666, 1, 1 },
-       { ahc_patch19_func, 670, 1, 1 },
-       { ahc_patch19_func, 673, 1, 1 },
-       { ahc_patch4_func, 679, 1, 1 },
-       { ahc_patch6_func, 682, 1, 2 },
-       { ahc_patch0_func, 683, 1, 1 },
-       { ahc_patch7_func, 695, 16, 1 },
-       { ahc_patch4_func, 711, 20, 1 },
-       { ahc_patch9_func, 732, 4, 2 },
-       { ahc_patch0_func, 736, 4, 1 },
-       { ahc_patch9_func, 740, 4, 2 },
-       { ahc_patch0_func, 744, 3, 1 },
-       { ahc_patch6_func, 750, 1, 1 },
-       { ahc_patch22_func, 752, 14, 1 },
-       { ahc_patch7_func, 766, 3, 1 },
-       { ahc_patch9_func, 778, 24, 8 },
-       { ahc_patch19_func, 782, 1, 2 },
-       { ahc_patch0_func, 783, 1, 1 },
-       { ahc_patch15_func, 788, 4, 2 },
-       { ahc_patch0_func, 792, 7, 3 },
-       { ahc_patch23_func, 792, 5, 2 },
-       { ahc_patch0_func, 797, 2, 1 },
-       { ahc_patch0_func, 802, 42, 3 },
-       { ahc_patch18_func, 814, 18, 2 },
-       { ahc_patch0_func, 832, 1, 1 },
-       { ahc_patch4_func, 856, 1, 1 },
-       { ahc_patch4_func, 857, 3, 2 },
-       { ahc_patch0_func, 860, 1, 1 },
-       { ahc_patch13_func, 861, 3, 1 },
-       { ahc_patch4_func, 864, 12, 1 }
+       { ahc_patch7_func, 430, 1, 1 },
+       { ahc_patch8_func, 431, 3, 3 },
+       { ahc_patch6_func, 432, 1, 2 },
+       { ahc_patch0_func, 433, 1, 1 },
+       { ahc_patch9_func, 434, 1, 1 },
+       { ahc_patch15_func, 435, 1, 2 },
+       { ahc_patch13_func, 435, 1, 1 },
+       { ahc_patch14_func, 437, 9, 4 },
+       { ahc_patch9_func, 437, 1, 1 },
+       { ahc_patch9_func, 444, 2, 1 },
+       { ahc_patch0_func, 446, 4, 3 },
+       { ahc_patch9_func, 446, 1, 2 },
+       { ahc_patch0_func, 447, 3, 1 },
+       { ahc_patch1_func, 451, 2, 1 },
+       { ahc_patch7_func, 453, 10, 2 },
+       { ahc_patch0_func, 463, 1, 1 },
+       { ahc_patch8_func, 464, 118, 22 },
+       { ahc_patch1_func, 466, 3, 2 },
+       { ahc_patch0_func, 469, 5, 3 },
+       { ahc_patch9_func, 469, 2, 2 },
+       { ahc_patch0_func, 471, 3, 1 },
+       { ahc_patch1_func, 476, 2, 2 },
+       { ahc_patch0_func, 478, 6, 3 },
+       { ahc_patch9_func, 478, 2, 2 },
+       { ahc_patch0_func, 480, 3, 1 },
+       { ahc_patch1_func, 486, 2, 2 },
+       { ahc_patch0_func, 488, 9, 7 },
+       { ahc_patch9_func, 488, 5, 6 },
+       { ahc_patch19_func, 488, 1, 2 },
+       { ahc_patch0_func, 489, 1, 1 },
+       { ahc_patch19_func, 491, 1, 2 },
+       { ahc_patch0_func, 492, 1, 1 },
+       { ahc_patch0_func, 493, 4, 1 },
+       { ahc_patch6_func, 498, 3, 2 },
+       { ahc_patch0_func, 501, 1, 1 },
+       { ahc_patch6_func, 511, 1, 2 },
+       { ahc_patch0_func, 512, 1, 1 },
+       { ahc_patch20_func, 549, 7, 1 },
+       { ahc_patch3_func, 584, 1, 2 },
+       { ahc_patch0_func, 585, 1, 1 },
+       { ahc_patch21_func, 588, 1, 1 },
+       { ahc_patch8_func, 590, 106, 33 },
+       { ahc_patch4_func, 592, 1, 1 },
+       { ahc_patch1_func, 598, 2, 2 },
+       { ahc_patch0_func, 600, 1, 1 },
+       { ahc_patch1_func, 603, 1, 2 },
+       { ahc_patch0_func, 604, 1, 1 },
+       { ahc_patch9_func, 605, 3, 3 },
+       { ahc_patch15_func, 606, 1, 1 },
+       { ahc_patch0_func, 608, 4, 1 },
+       { ahc_patch19_func, 617, 2, 2 },
+       { ahc_patch0_func, 619, 1, 1 },
+       { ahc_patch19_func, 623, 10, 3 },
+       { ahc_patch5_func, 625, 8, 1 },
+       { ahc_patch0_func, 633, 9, 2 },
+       { ahc_patch5_func, 634, 8, 1 },
+       { ahc_patch4_func, 644, 1, 2 },
+       { ahc_patch0_func, 645, 1, 1 },
+       { ahc_patch19_func, 646, 1, 2 },
+       { ahc_patch0_func, 647, 3, 2 },
+       { ahc_patch4_func, 649, 1, 1 },
+       { ahc_patch5_func, 650, 1, 1 },
+       { ahc_patch5_func, 653, 1, 1 },
+       { ahc_patch5_func, 655, 1, 1 },
+       { ahc_patch4_func, 657, 2, 2 },
+       { ahc_patch0_func, 659, 2, 1 },
+       { ahc_patch5_func, 661, 1, 1 },
+       { ahc_patch5_func, 664, 1, 1 },
+       { ahc_patch5_func, 667, 1, 1 },
+       { ahc_patch19_func, 671, 1, 1 },
+       { ahc_patch19_func, 674, 1, 1 },
+       { ahc_patch4_func, 680, 1, 1 },
+       { ahc_patch6_func, 683, 1, 2 },
+       { ahc_patch0_func, 684, 1, 1 },
+       { ahc_patch7_func, 696, 16, 1 },
+       { ahc_patch4_func, 712, 20, 1 },
+       { ahc_patch9_func, 733, 4, 2 },
+       { ahc_patch0_func, 737, 4, 1 },
+       { ahc_patch9_func, 741, 4, 2 },
+       { ahc_patch0_func, 745, 3, 1 },
+       { ahc_patch6_func, 751, 1, 1 },
+       { ahc_patch22_func, 753, 14, 1 },
+       { ahc_patch7_func, 767, 3, 1 },
+       { ahc_patch9_func, 779, 24, 8 },
+       { ahc_patch19_func, 783, 1, 2 },
+       { ahc_patch0_func, 784, 1, 1 },
+       { ahc_patch15_func, 789, 4, 2 },
+       { ahc_patch0_func, 793, 7, 3 },
+       { ahc_patch23_func, 793, 5, 2 },
+       { ahc_patch0_func, 798, 2, 1 },
+       { ahc_patch0_func, 803, 42, 3 },
+       { ahc_patch18_func, 815, 18, 2 },
+       { ahc_patch0_func, 833, 1, 1 },
+       { ahc_patch4_func, 857, 1, 1 },
+       { ahc_patch4_func, 858, 3, 2 },
+       { ahc_patch0_func, 861, 1, 1 },
+       { ahc_patch13_func, 862, 3, 1 },
+       { ahc_patch4_func, 865, 12, 1 }
 };
 
 static struct cs {
@@ -1296,11 +1297,11 @@ static struct cs {
 } critical_sections[] = {
        { 11, 18 },
        { 21, 30 },
-       { 711, 727 },
-       { 857, 860 },
-       { 864, 870 },
-       { 872, 874 },
-       { 874, 876 }
+       { 712, 728 },
+       { 858, 861 },
+       { 865, 871 },
+       { 873, 875 },
+       { 875, 877 }
 };
 
 static const int num_critical_sections = sizeof(critical_sections)
index 7c5a6db0e6724c5a0aa933575f57bc603090609b..828ae3d9a510f1a6861e57ca0ae6720082949005 100644 (file)
  * $Id$
  */
 
-#include <linux/blkdev.h>
-#include <linux/delay.h>
-#include <linux/version.h>
-
-/* Core SCSI definitions */
-#include <scsi/scsi_host.h>
 #include "aiclib.h"
-#include "cam.h"
-
-#ifndef FALSE
-#define FALSE   0
-#endif /* FALSE */
-#ifndef TRUE
-#define TRUE    1
-#endif /* TRUE */
-#ifndef ERESTART
-#define ERESTART        -1              /* restart syscall */
-#endif
-#ifndef EJUSTRETURN
-#define EJUSTRETURN     -2              /* don't modify regs, just return */
-#endif
-
-static int     ascentrycomp(const void *key, const void *member);
-static int     senseentrycomp(const void *key, const void *member);
-static void    fetchtableentries(int sense_key, int asc, int ascq,
-                                 struct scsi_inquiry_data *,
-                                 const struct sense_key_table_entry **,
-                                 const struct asc_table_entry **);
-static void *  scsibsearch(const void *key, const void *base, size_t nmemb,
-                           size_t size,
-                           int (*compar)(const void *, const void *));
-typedef int (cam_quirkmatch_t)(caddr_t, caddr_t);
-static int     cam_strmatch(const u_int8_t *str, const u_int8_t *pattern,
-                            int str_len);
-static caddr_t cam_quirkmatch(caddr_t target, caddr_t quirk_table,
-                              int num_entries, int entry_size,
-                              cam_quirkmatch_t *comp_func);
-
-#define SCSI_NO_SENSE_STRINGS 1
-#if !defined(SCSI_NO_SENSE_STRINGS)
-#define SST(asc, ascq, action, desc) \
-       asc, ascq, action, desc
-#else 
-static const char empty_string[] = "";
-
-#define SST(asc, ascq, action, desc) \
-       asc, ascq, action, empty_string
-#endif 
-
-static const struct sense_key_table_entry sense_key_table[] = 
-{
-       { SSD_KEY_NO_SENSE, SS_NOP, "NO SENSE" },
-       { SSD_KEY_RECOVERED_ERROR, SS_NOP|SSQ_PRINT_SENSE, "RECOVERED ERROR" },
-       {
-         SSD_KEY_NOT_READY, SS_TUR|SSQ_MANY|SSQ_DECREMENT_COUNT|EBUSY,
-         "NOT READY"
-       },
-       { SSD_KEY_MEDIUM_ERROR, SS_RDEF, "MEDIUM ERROR" },
-       { SSD_KEY_HARDWARE_ERROR, SS_RDEF, "HARDWARE FAILURE" },
-       { SSD_KEY_ILLEGAL_REQUEST, SS_FATAL|EINVAL, "ILLEGAL REQUEST" },
-       { SSD_KEY_UNIT_ATTENTION, SS_FATAL|ENXIO, "UNIT ATTENTION" },
-       { SSD_KEY_DATA_PROTECT, SS_FATAL|EACCES, "DATA PROTECT" },
-       { SSD_KEY_BLANK_CHECK, SS_FATAL|ENOSPC, "BLANK CHECK" },
-       { SSD_KEY_Vendor_Specific, SS_FATAL|EIO, "Vendor Specific" },
-       { SSD_KEY_COPY_ABORTED, SS_FATAL|EIO, "COPY ABORTED" },
-       { SSD_KEY_ABORTED_COMMAND, SS_RDEF, "ABORTED COMMAND" },
-       { SSD_KEY_EQUAL, SS_NOP, "EQUAL" },
-       { SSD_KEY_VOLUME_OVERFLOW, SS_FATAL|EIO, "VOLUME OVERFLOW" },
-       { SSD_KEY_MISCOMPARE, SS_NOP, "MISCOMPARE" },
-       { SSD_KEY_RESERVED, SS_FATAL|EIO, "RESERVED" }
-};
-
-static const int sense_key_table_size =
-    sizeof(sense_key_table)/sizeof(sense_key_table[0]);
-
-static struct asc_table_entry quantum_fireball_entries[] = {
-       {SST(0x04, 0x0b, SS_START|SSQ_DECREMENT_COUNT|ENXIO, 
-            "Logical unit not ready, initializing cmd. required")}
-};
-
-static struct asc_table_entry sony_mo_entries[] = {
-       {SST(0x04, 0x00, SS_START|SSQ_DECREMENT_COUNT|ENXIO,
-            "Logical unit not ready, cause not reportable")}
-};
-
-static struct scsi_sense_quirk_entry sense_quirk_table[] = {
-       {
-               /*
-                * The Quantum Fireball ST and SE like to return 0x04 0x0b when
-                * they really should return 0x04 0x02.  0x04,0x0b isn't
-                * defined in any SCSI spec, and it isn't mentioned in the
-                * hardware manual for these drives.
-                */
-               {T_DIRECT, SIP_MEDIA_FIXED, "QUANTUM", "FIREBALL S*", "*"},
-               /*num_sense_keys*/0,
-               sizeof(quantum_fireball_entries)/sizeof(struct asc_table_entry),
-               /*sense key entries*/NULL,
-               quantum_fireball_entries
-       },
-       {
-               /*
-                * This Sony MO drive likes to return 0x04, 0x00 when it
-                * isn't spun up.
-                */
-               {T_DIRECT, SIP_MEDIA_REMOVABLE, "SONY", "SMO-*", "*"},
-               /*num_sense_keys*/0,
-               sizeof(sony_mo_entries)/sizeof(struct asc_table_entry),
-               /*sense key entries*/NULL,
-               sony_mo_entries
-       }
-};
-
-static const int sense_quirk_table_size =
-    sizeof(sense_quirk_table)/sizeof(sense_quirk_table[0]);
-
-static struct asc_table_entry asc_table[] = {
-/*
- * From File: ASC-NUM.TXT
- * SCSI ASC/ASCQ Assignments
- * Numeric Sorted Listing
- * as of  5/12/97
- *
- * D - DIRECT ACCESS DEVICE (SBC)                     device column key
- * .T - SEQUENTIAL ACCESS DEVICE (SSC)               -------------------
- * . L - PRINTER DEVICE (SSC)                           blank = reserved
- * .  P - PROCESSOR DEVICE (SPC)                     not blank = allowed
- * .  .W - WRITE ONCE READ MULTIPLE DEVICE (SBC)
- * .  . R - CD DEVICE (MMC)
- * .  .  S - SCANNER DEVICE (SGC)
- * .  .  .O - OPTICAL MEMORY DEVICE (SBC)
- * .  .  . M - MEDIA CHANGER DEVICE (SMC)
- * .  .  .  C - COMMUNICATION DEVICE (SSC)
- * .  .  .  .A - STORAGE ARRAY DEVICE (SCC)
- * .  .  .  . E - ENCLOSURE SERVICES DEVICE (SES)
- * DTLPWRSOMCAE        ASC   ASCQ  Action  Description
- * ------------        ----  ----  ------  -----------------------------------*/
-/* DTLPWRSOMCAE */{SST(0x00, 0x00, SS_NOP,
-                       "No additional sense information") },
-/*  T    S      */{SST(0x00, 0x01, SS_RDEF,
-                       "Filemark detected") },
-/*  T    S      */{SST(0x00, 0x02, SS_RDEF,
-                       "End-of-partition/medium detected") },
-/*  T           */{SST(0x00, 0x03, SS_RDEF,
-                       "Setmark detected") },
-/*  T    S      */{SST(0x00, 0x04, SS_RDEF,
-                       "Beginning-of-partition/medium detected") },
-/*  T    S      */{SST(0x00, 0x05, SS_RDEF,
-                       "End-of-data detected") },
-/* DTLPWRSOMCAE */{SST(0x00, 0x06, SS_RDEF,
-                       "I/O process terminated") },
-/*      R       */{SST(0x00, 0x11, SS_FATAL|EBUSY,
-                       "Audio play operation in progress") },
-/*      R       */{SST(0x00, 0x12, SS_NOP,
-                       "Audio play operation paused") },
-/*      R       */{SST(0x00, 0x13, SS_NOP,
-                       "Audio play operation successfully completed") },
-/*      R       */{SST(0x00, 0x14, SS_RDEF,
-                       "Audio play operation stopped due to error") },
-/*      R       */{SST(0x00, 0x15, SS_NOP,
-                       "No current audio status to return") },
-/* DTLPWRSOMCAE */{SST(0x00, 0x16, SS_FATAL|EBUSY,
-                       "Operation in progress") },
-/* DTL WRSOM AE */{SST(0x00, 0x17, SS_RDEF,
-                       "Cleaning requested") },
-/* D   W  O     */{SST(0x01, 0x00, SS_RDEF,
-                       "No index/sector signal") },
-/* D   WR OM    */{SST(0x02, 0x00, SS_RDEF,
-                       "No seek complete") },
-/* DTL W SO     */{SST(0x03, 0x00, SS_RDEF,
-                       "Peripheral device write fault") },
-/*  T           */{SST(0x03, 0x01, SS_RDEF,
-                       "No write current") },
-/*  T           */{SST(0x03, 0x02, SS_RDEF,
-                       "Excessive write errors") },
-/* DTLPWRSOMCAE */{SST(0x04, 0x00,
-                       SS_TUR|SSQ_DELAY|SSQ_MANY|SSQ_DECREMENT_COUNT|EIO,
-                       "Logical unit not ready, cause not reportable") },
-/* DTLPWRSOMCAE */{SST(0x04, 0x01,
-                       SS_TUR|SSQ_DELAY|SSQ_MANY|SSQ_DECREMENT_COUNT|EBUSY,
-                       "Logical unit is in process of becoming ready") },
-/* DTLPWRSOMCAE */{SST(0x04, 0x02, SS_START|SSQ_DECREMENT_COUNT|ENXIO,
-                       "Logical unit not ready, initializing cmd. required") },
-/* DTLPWRSOMCAE */{SST(0x04, 0x03, SS_FATAL|ENXIO,
-                       "Logical unit not ready, manual intervention required")},
-/* DTL    O     */{SST(0x04, 0x04, SS_FATAL|EBUSY,
-                       "Logical unit not ready, format in progress") },
-/* DT  W  OMCA  */{SST(0x04, 0x05, SS_FATAL|EBUSY,
-                       "Logical unit not ready, rebuild in progress") },
-/* DT  W  OMCA  */{SST(0x04, 0x06, SS_FATAL|EBUSY,
-                       "Logical unit not ready, recalculation in progress") },
-/* DTLPWRSOMCAE */{SST(0x04, 0x07, SS_FATAL|EBUSY,
-                       "Logical unit not ready, operation in progress") },
-/*      R       */{SST(0x04, 0x08, SS_FATAL|EBUSY,
-                       "Logical unit not ready, long write in progress") },
-/* DTL WRSOMCAE */{SST(0x05, 0x00, SS_RDEF,
-                       "Logical unit does not respond to selection") },
-/* D   WR OM    */{SST(0x06, 0x00, SS_RDEF,
-                       "No reference position found") },
-/* DTL WRSOM    */{SST(0x07, 0x00, SS_RDEF,
-                       "Multiple peripheral devices selected") },
-/* DTL WRSOMCAE */{SST(0x08, 0x00, SS_RDEF,
-                       "Logical unit communication failure") },
-/* DTL WRSOMCAE */{SST(0x08, 0x01, SS_RDEF,
-                       "Logical unit communication time-out") },
-/* DTL WRSOMCAE */{SST(0x08, 0x02, SS_RDEF,
-                       "Logical unit communication parity error") },
-/* DT   R OM    */{SST(0x08, 0x03, SS_RDEF,
-                       "Logical unit communication crc error (ultra-dma/32)")},
-/* DT  WR O     */{SST(0x09, 0x00, SS_RDEF,
-                       "Track following error") },
-/*     WR O     */{SST(0x09, 0x01, SS_RDEF,
-                       "Tracking servo failure") },
-/*     WR O     */{SST(0x09, 0x02, SS_RDEF,
-                       "Focus servo failure") },
-/*     WR O     */{SST(0x09, 0x03, SS_RDEF,
-                       "Spindle servo failure") },
-/* DT  WR O     */{SST(0x09, 0x04, SS_RDEF,
-                       "Head select fault") },
-/* DTLPWRSOMCAE */{SST(0x0A, 0x00, SS_FATAL|ENOSPC,
-                       "Error log overflow") },
-/* DTLPWRSOMCAE */{SST(0x0B, 0x00, SS_RDEF,
-                       "Warning") },
-/* DTLPWRSOMCAE */{SST(0x0B, 0x01, SS_RDEF,
-                       "Specified temperature exceeded") },
-/* DTLPWRSOMCAE */{SST(0x0B, 0x02, SS_RDEF,
-                       "Enclosure degraded") },
-/*  T   RS      */{SST(0x0C, 0x00, SS_RDEF,
-                       "Write error") },
-/* D   W  O     */{SST(0x0C, 0x01, SS_NOP|SSQ_PRINT_SENSE,
-                       "Write error - recovered with auto reallocation") },
-/* D   W  O     */{SST(0x0C, 0x02, SS_RDEF,
-                       "Write error - auto reallocation failed") },
-/* D   W  O     */{SST(0x0C, 0x03, SS_RDEF,
-                       "Write error - recommend reassignment") },
-/* DT  W  O     */{SST(0x0C, 0x04, SS_RDEF,
-                       "Compression check miscompare error") },
-/* DT  W  O     */{SST(0x0C, 0x05, SS_RDEF,
-                       "Data expansion occurred during compression") },
-/* DT  W  O     */{SST(0x0C, 0x06, SS_RDEF,
-                       "Block not compressible") },
-/*      R       */{SST(0x0C, 0x07, SS_RDEF,
-                       "Write error - recovery needed") },
-/*      R       */{SST(0x0C, 0x08, SS_RDEF,
-                       "Write error - recovery failed") },
-/*      R       */{SST(0x0C, 0x09, SS_RDEF,
-                       "Write error - loss of streaming") },
-/*      R       */{SST(0x0C, 0x0A, SS_RDEF,
-                       "Write error - padding blocks added") },
-/* D   W  O     */{SST(0x10, 0x00, SS_RDEF,
-                       "ID CRC or ECC error") },
-/* DT  WRSO     */{SST(0x11, 0x00, SS_RDEF,
-                       "Unrecovered read error") },
-/* DT  W SO     */{SST(0x11, 0x01, SS_RDEF,
-                       "Read retries exhausted") },
-/* DT  W SO     */{SST(0x11, 0x02, SS_RDEF,
-                       "Error too long to correct") },
-/* DT  W SO     */{SST(0x11, 0x03, SS_RDEF,
-                       "Multiple read errors") },
-/* D   W  O     */{SST(0x11, 0x04, SS_RDEF,
-                       "Unrecovered read error - auto reallocate failed") },
-/*     WR O     */{SST(0x11, 0x05, SS_RDEF,
-                       "L-EC uncorrectable error") },
-/*     WR O     */{SST(0x11, 0x06, SS_RDEF,
-                       "CIRC unrecovered error") },
-/*     W  O     */{SST(0x11, 0x07, SS_RDEF,
-                       "Data re-synchronization error") },
-/*  T           */{SST(0x11, 0x08, SS_RDEF,
-                       "Incomplete block read") },
-/*  T           */{SST(0x11, 0x09, SS_RDEF,
-                       "No gap found") },
-/* DT     O     */{SST(0x11, 0x0A, SS_RDEF,
-                       "Miscorrected error") },
-/* D   W  O     */{SST(0x11, 0x0B, SS_RDEF,
-                       "Unrecovered read error - recommend reassignment") },
-/* D   W  O     */{SST(0x11, 0x0C, SS_RDEF,
-                       "Unrecovered read error - recommend rewrite the data")},
-/* DT  WR O     */{SST(0x11, 0x0D, SS_RDEF,
-                       "De-compression CRC error") },
-/* DT  WR O     */{SST(0x11, 0x0E, SS_RDEF,
-                       "Cannot decompress using declared algorithm") },
-/*      R       */{SST(0x11, 0x0F, SS_RDEF,
-                       "Error reading UPC/EAN number") },
-/*      R       */{SST(0x11, 0x10, SS_RDEF,
-                       "Error reading ISRC number") },
-/*      R       */{SST(0x11, 0x11, SS_RDEF,
-                       "Read error - loss of streaming") },
-/* D   W  O     */{SST(0x12, 0x00, SS_RDEF,
-                       "Address mark not found for id field") },
-/* D   W  O     */{SST(0x13, 0x00, SS_RDEF,
-                       "Address mark not found for data field") },
-/* DTL WRSO     */{SST(0x14, 0x00, SS_RDEF,
-                       "Recorded entity not found") },
-/* DT  WR O     */{SST(0x14, 0x01, SS_RDEF,
-                       "Record not found") },
-/*  T           */{SST(0x14, 0x02, SS_RDEF,
-                       "Filemark or setmark not found") },
-/*  T           */{SST(0x14, 0x03, SS_RDEF,
-                       "End-of-data not found") },
-/*  T           */{SST(0x14, 0x04, SS_RDEF,
-                       "Block sequence error") },
-/* DT  W  O     */{SST(0x14, 0x05, SS_RDEF,
-                       "Record not found - recommend reassignment") },
-/* DT  W  O     */{SST(0x14, 0x06, SS_RDEF,
-                       "Record not found - data auto-reallocated") },
-/* DTL WRSOM    */{SST(0x15, 0x00, SS_RDEF,
-                       "Random positioning error") },
-/* DTL WRSOM    */{SST(0x15, 0x01, SS_RDEF,
-                       "Mechanical positioning error") },
-/* DT  WR O     */{SST(0x15, 0x02, SS_RDEF,
-                       "Positioning error detected by read of medium") },
-/* D   W  O     */{SST(0x16, 0x00, SS_RDEF,
-                       "Data synchronization mark error") },
-/* D   W  O     */{SST(0x16, 0x01, SS_RDEF,
-                       "Data sync error - data rewritten") },
-/* D   W  O     */{SST(0x16, 0x02, SS_RDEF,
-                       "Data sync error - recommend rewrite") },
-/* D   W  O     */{SST(0x16, 0x03, SS_NOP|SSQ_PRINT_SENSE,
-                       "Data sync error - data auto-reallocated") },
-/* D   W  O     */{SST(0x16, 0x04, SS_RDEF,
-                       "Data sync error - recommend reassignment") },
-/* DT  WRSO     */{SST(0x17, 0x00, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data with no error correction applied") },
-/* DT  WRSO     */{SST(0x17, 0x01, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data with retries") },
-/* DT  WR O     */{SST(0x17, 0x02, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data with positive head offset") },
-/* DT  WR O     */{SST(0x17, 0x03, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data with negative head offset") },
-/*     WR O     */{SST(0x17, 0x04, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data with retries and/or CIRC applied") },
-/* D   WR O     */{SST(0x17, 0x05, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data using previous sector id") },
-/* D   W  O     */{SST(0x17, 0x06, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data without ECC - data auto-reallocated") },
-/* D   W  O     */{SST(0x17, 0x07, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data without ECC - recommend reassignment")},
-/* D   W  O     */{SST(0x17, 0x08, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data without ECC - recommend rewrite") },
-/* D   W  O     */{SST(0x17, 0x09, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data without ECC - data rewritten") },
-/* D   W  O     */{SST(0x18, 0x00, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data with error correction applied") },
-/* D   WR O     */{SST(0x18, 0x01, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data with error corr. & retries applied") },
-/* D   WR O     */{SST(0x18, 0x02, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data - data auto-reallocated") },
-/*      R       */{SST(0x18, 0x03, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data with CIRC") },
-/*      R       */{SST(0x18, 0x04, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data with L-EC") },
-/* D   WR O     */{SST(0x18, 0x05, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data - recommend reassignment") },
-/* D   WR O     */{SST(0x18, 0x06, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data - recommend rewrite") },
-/* D   W  O     */{SST(0x18, 0x07, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered data with ECC - data rewritten") },
-/* D      O     */{SST(0x19, 0x00, SS_RDEF,
-                       "Defect list error") },
-/* D      O     */{SST(0x19, 0x01, SS_RDEF,
-                       "Defect list not available") },
-/* D      O     */{SST(0x19, 0x02, SS_RDEF,
-                       "Defect list error in primary list") },
-/* D      O     */{SST(0x19, 0x03, SS_RDEF,
-                       "Defect list error in grown list") },
-/* DTLPWRSOMCAE */{SST(0x1A, 0x00, SS_RDEF,
-                       "Parameter list length error") },
-/* DTLPWRSOMCAE */{SST(0x1B, 0x00, SS_RDEF,
-                       "Synchronous data transfer error") },
-/* D      O     */{SST(0x1C, 0x00, SS_RDEF,
-                       "Defect list not found") },
-/* D      O     */{SST(0x1C, 0x01, SS_RDEF,
-                       "Primary defect list not found") },
-/* D      O     */{SST(0x1C, 0x02, SS_RDEF,
-                       "Grown defect list not found") },
-/* D   W  O     */{SST(0x1D, 0x00, SS_FATAL,
-                       "Miscompare during verify operation" )},
-/* D   W  O     */{SST(0x1E, 0x00, SS_NOP|SSQ_PRINT_SENSE,
-                       "Recovered id with ecc correction") },
-/* D      O     */{SST(0x1F, 0x00, SS_RDEF,
-                       "Partial defect list transfer") },
-/* DTLPWRSOMCAE */{SST(0x20, 0x00, SS_FATAL|EINVAL,
-                       "Invalid command operation code") },
-/* DT  WR OM    */{SST(0x21, 0x00, SS_FATAL|EINVAL,
-                       "Logical block address out of range" )},
-/* DT  WR OM    */{SST(0x21, 0x01, SS_FATAL|EINVAL,
-                       "Invalid element address") },
-/* D            */{SST(0x22, 0x00, SS_FATAL|EINVAL,
-                       "Illegal function") }, /* Deprecated. Use 20 00, 24 00, or 26 00 instead */
-/* DTLPWRSOMCAE */{SST(0x24, 0x00, SS_FATAL|EINVAL,
-                       "Invalid field in CDB") },
-/* DTLPWRSOMCAE */{SST(0x25, 0x00, SS_FATAL|ENXIO,
-                       "Logical unit not supported") },
-/* DTLPWRSOMCAE */{SST(0x26, 0x00, SS_FATAL|EINVAL,
-                       "Invalid field in parameter list") },
-/* DTLPWRSOMCAE */{SST(0x26, 0x01, SS_FATAL|EINVAL,
-                       "Parameter not supported") },
-/* DTLPWRSOMCAE */{SST(0x26, 0x02, SS_FATAL|EINVAL,
-                       "Parameter value invalid") },
-/* DTLPWRSOMCAE */{SST(0x26, 0x03, SS_FATAL|EINVAL,
-                       "Threshold parameters not supported") },
-/* DTLPWRSOMCAE */{SST(0x26, 0x04, SS_FATAL|EINVAL,
-                       "Invalid release of active persistent reservation") },
-/* DT  W  O     */{SST(0x27, 0x00, SS_FATAL|EACCES,
-                       "Write protected") },
-/* DT  W  O     */{SST(0x27, 0x01, SS_FATAL|EACCES,
-                       "Hardware write protected") },
-/* DT  W  O     */{SST(0x27, 0x02, SS_FATAL|EACCES,
-                       "Logical unit software write protected") },
-/*  T           */{SST(0x27, 0x03, SS_FATAL|EACCES,
-                       "Associated write protect") },
-/*  T           */{SST(0x27, 0x04, SS_FATAL|EACCES,
-                       "Persistent write protect") },
-/*  T           */{SST(0x27, 0x05, SS_FATAL|EACCES,
-                       "Permanent write protect") },
-/* DTLPWRSOMCAE */{SST(0x28, 0x00, SS_RDEF,
-                       "Not ready to ready change, medium may have changed") },
-/* DTLPWRSOMCAE */{SST(0x28, 0x01, SS_FATAL|ENXIO,
-                       "Import or export element accessed") },
-/*
- * XXX JGibbs - All of these should use the same errno, but I don't think
- * ENXIO is the correct choice.  Should we borrow from the networking
- * errnos?  ECONNRESET anyone?
- */
-/* DTLPWRSOMCAE */{SST(0x29, 0x00, SS_RDEF,
-                       "Power on, reset, or bus device reset occurred") },
-/* DTLPWRSOMCAE */{SST(0x29, 0x01, SS_RDEF,
-                       "Power on occurred") },
-/* DTLPWRSOMCAE */{SST(0x29, 0x02, SS_RDEF,
-                       "Scsi bus reset occurred") },
-/* DTLPWRSOMCAE */{SST(0x29, 0x03, SS_RDEF,
-                       "Bus device reset function occurred") },
-/* DTLPWRSOMCAE */{SST(0x29, 0x04, SS_RDEF,
-                       "Device internal reset") },
-/* DTLPWRSOMCAE */{SST(0x29, 0x05, SS_RDEF,
-                       "Transceiver mode changed to single-ended") },
-/* DTLPWRSOMCAE */{SST(0x29, 0x06, SS_RDEF,
-                       "Transceiver mode changed to LVD") },
-/* DTL WRSOMCAE */{SST(0x2A, 0x00, SS_RDEF,
-                       "Parameters changed") },
-/* DTL WRSOMCAE */{SST(0x2A, 0x01, SS_RDEF,
-                       "Mode parameters changed") },
-/* DTL WRSOMCAE */{SST(0x2A, 0x02, SS_RDEF,
-                       "Log parameters changed") },
-/* DTLPWRSOMCAE */{SST(0x2A, 0x03, SS_RDEF,
-                       "Reservations preempted") },
-/* DTLPWRSO C   */{SST(0x2B, 0x00, SS_RDEF,
-                       "Copy cannot execute since host cannot disconnect") },
-/* DTLPWRSOMCAE */{SST(0x2C, 0x00, SS_RDEF,
-                       "Command sequence error") },
-/*       S      */{SST(0x2C, 0x01, SS_RDEF,
-                       "Too many windows specified") },
-/*       S      */{SST(0x2C, 0x02, SS_RDEF,
-                       "Invalid combination of windows specified") },
-/*      R       */{SST(0x2C, 0x03, SS_RDEF,
-                       "Current program area is not empty") },
-/*      R       */{SST(0x2C, 0x04, SS_RDEF,
-                       "Current program area is empty") },
-/*  T           */{SST(0x2D, 0x00, SS_RDEF,
-                       "Overwrite error on update in place") },
-/* DTLPWRSOMCAE */{SST(0x2F, 0x00, SS_RDEF,
-                       "Commands cleared by another initiator") },
-/* DT  WR OM    */{SST(0x30, 0x00, SS_RDEF,
-                       "Incompatible medium installed") },
-/* DT  WR O     */{SST(0x30, 0x01, SS_RDEF,
-                       "Cannot read medium - unknown format") },
-/* DT  WR O     */{SST(0x30, 0x02, SS_RDEF,
-                       "Cannot read medium - incompatible format") },
-/* DT           */{SST(0x30, 0x03, SS_RDEF,
-                       "Cleaning cartridge installed") },
-/* DT  WR O     */{SST(0x30, 0x04, SS_RDEF,
-                       "Cannot write medium - unknown format") },
-/* DT  WR O     */{SST(0x30, 0x05, SS_RDEF,
-                       "Cannot write medium - incompatible format") },
-/* DT  W  O     */{SST(0x30, 0x06, SS_RDEF,
-                       "Cannot format medium - incompatible medium") },
-/* DTL WRSOM AE */{SST(0x30, 0x07, SS_RDEF,
-                       "Cleaning failure") },
-/*      R       */{SST(0x30, 0x08, SS_RDEF,
-                       "Cannot write - application code mismatch") },
-/*      R       */{SST(0x30, 0x09, SS_RDEF,
-                       "Current session not fixated for append") },
-/* DT  WR O     */{SST(0x31, 0x00, SS_RDEF,
-                       "Medium format corrupted") },
-/* D L  R O     */{SST(0x31, 0x01, SS_RDEF,
-                       "Format command failed") },
-/* D   W  O     */{SST(0x32, 0x00, SS_RDEF,
-                       "No defect spare location available") },
-/* D   W  O     */{SST(0x32, 0x01, SS_RDEF,
-                       "Defect list update failure") },
-/*  T           */{SST(0x33, 0x00, SS_RDEF,
-                       "Tape length error") },
-/* DTLPWRSOMCAE */{SST(0x34, 0x00, SS_RDEF,
-                       "Enclosure failure") },
-/* DTLPWRSOMCAE */{SST(0x35, 0x00, SS_RDEF,
-                       "Enclosure services failure") },
-/* DTLPWRSOMCAE */{SST(0x35, 0x01, SS_RDEF,
-                       "Unsupported enclosure function") },
-/* DTLPWRSOMCAE */{SST(0x35, 0x02, SS_RDEF,
-                       "Enclosure services unavailable") },
-/* DTLPWRSOMCAE */{SST(0x35, 0x03, SS_RDEF,
-                       "Enclosure services transfer failure") },
-/* DTLPWRSOMCAE */{SST(0x35, 0x04, SS_RDEF,
-                       "Enclosure services transfer refused") },
-/*   L          */{SST(0x36, 0x00, SS_RDEF,
-                       "Ribbon, ink, or toner failure") },
-/* DTL WRSOMCAE */{SST(0x37, 0x00, SS_RDEF,
-                       "Rounded parameter") },
-/* DTL WRSOMCAE */{SST(0x39, 0x00, SS_RDEF,
-                       "Saving parameters not supported") },
-/* DTL WRSOM    */{SST(0x3A, 0x00, SS_NOP,
-                       "Medium not present") },
-/* DT  WR OM    */{SST(0x3A, 0x01, SS_NOP,
-                       "Medium not present - tray closed") },
-/* DT  WR OM    */{SST(0x3A, 0x01, SS_NOP,
-                       "Medium not present - tray open") },
-/* DT  WR OM    */{SST(0x3A, 0x03, SS_NOP,
-                       "Medium not present - Loadable") },
-/* DT  WR OM    */{SST(0x3A, 0x04, SS_NOP,
-                       "Medium not present - medium auxiliary "
-                       "memory accessible") },
-/* DT  WR OM    */{SST(0x3A, 0xFF, SS_NOP, NULL) },/* Range 0x05->0xFF */
-/*  TL          */{SST(0x3B, 0x00, SS_RDEF,
-                       "Sequential positioning error") },
-/*  T           */{SST(0x3B, 0x01, SS_RDEF,
-                       "Tape position error at beginning-of-medium") },
-/*  T           */{SST(0x3B, 0x02, SS_RDEF,
-                       "Tape position error at end-of-medium") },
-/*   L          */{SST(0x3B, 0x03, SS_RDEF,
-                       "Tape or electronic vertical forms unit not ready") },
-/*   L          */{SST(0x3B, 0x04, SS_RDEF,
-                       "Slew failure") },
-/*   L          */{SST(0x3B, 0x05, SS_RDEF,
-                       "Paper jam") },
-/*   L          */{SST(0x3B, 0x06, SS_RDEF,
-                       "Failed to sense top-of-form") },
-/*   L          */{SST(0x3B, 0x07, SS_RDEF,
-                       "Failed to sense bottom-of-form") },
-/*  T           */{SST(0x3B, 0x08, SS_RDEF,
-                       "Reposition error") },
-/*       S      */{SST(0x3B, 0x09, SS_RDEF,
-                       "Read past end of medium") },
-/*       S      */{SST(0x3B, 0x0A, SS_RDEF,
-                       "Read past beginning of medium") },
-/*       S      */{SST(0x3B, 0x0B, SS_RDEF,
-                       "Position past end of medium") },
-/*  T    S      */{SST(0x3B, 0x0C, SS_RDEF,
-                       "Position past beginning of medium") },
-/* DT  WR OM    */{SST(0x3B, 0x0D, SS_FATAL|ENOSPC,
-                       "Medium destination element full") },
-/* DT  WR OM    */{SST(0x3B, 0x0E, SS_RDEF,
-                       "Medium source element empty") },
-/*      R       */{SST(0x3B, 0x0F, SS_RDEF,
-                       "End of medium reached") },
-/* DT  WR OM    */{SST(0x3B, 0x11, SS_RDEF,
-                       "Medium magazine not accessible") },
-/* DT  WR OM    */{SST(0x3B, 0x12, SS_RDEF,
-                       "Medium magazine removed") },
-/* DT  WR OM    */{SST(0x3B, 0x13, SS_RDEF,
-                       "Medium magazine inserted") },
-/* DT  WR OM    */{SST(0x3B, 0x14, SS_RDEF,
-                       "Medium magazine locked") },
-/* DT  WR OM    */{SST(0x3B, 0x15, SS_RDEF,
-                       "Medium magazine unlocked") },
-/* DTLPWRSOMCAE */{SST(0x3D, 0x00, SS_RDEF,
-                       "Invalid bits in identify message") },
-/* DTLPWRSOMCAE */{SST(0x3E, 0x00, SS_RDEF,
-                       "Logical unit has not self-configured yet") },
-/* DTLPWRSOMCAE */{SST(0x3E, 0x01, SS_RDEF,
-                       "Logical unit failure") },
-/* DTLPWRSOMCAE */{SST(0x3E, 0x02, SS_RDEF,
-                       "Timeout on logical unit") },
-/* DTLPWRSOMCAE */{SST(0x3F, 0x00, SS_RDEF,
-                       "Target operating conditions have changed") },
-/* DTLPWRSOMCAE */{SST(0x3F, 0x01, SS_RDEF,
-                       "Microcode has been changed") },
-/* DTLPWRSOMC   */{SST(0x3F, 0x02, SS_RDEF,
-                       "Changed operating definition") },
-/* DTLPWRSOMCAE */{SST(0x3F, 0x03, SS_INQ_REFRESH|SSQ_DECREMENT_COUNT,
-                       "Inquiry data has changed") },
-/* DT  WR OMCAE */{SST(0x3F, 0x04, SS_RDEF,
-                       "Component device attached") },
-/* DT  WR OMCAE */{SST(0x3F, 0x05, SS_RDEF,
-                       "Device identifier changed") },
-/* DT  WR OMCAE */{SST(0x3F, 0x06, SS_RDEF,
-                       "Redundancy group created or modified") },
-/* DT  WR OMCAE */{SST(0x3F, 0x07, SS_RDEF,
-                       "Redundancy group deleted") },
-/* DT  WR OMCAE */{SST(0x3F, 0x08, SS_RDEF,
-                       "Spare created or modified") },
-/* DT  WR OMCAE */{SST(0x3F, 0x09, SS_RDEF,
-                       "Spare deleted") },
-/* DT  WR OMCAE */{SST(0x3F, 0x0A, SS_RDEF,
-                       "Volume set created or modified") },
-/* DT  WR OMCAE */{SST(0x3F, 0x0B, SS_RDEF,
-                       "Volume set deleted") },
-/* DT  WR OMCAE */{SST(0x3F, 0x0C, SS_RDEF,
-                       "Volume set deassigned") },
-/* DT  WR OMCAE */{SST(0x3F, 0x0D, SS_RDEF,
-                       "Volume set reassigned") },
-/* DTLPWRSOMCAE */{SST(0x3F, 0x0E, SS_RDEF,
-                       "Reported luns data has changed") },
-/* DTLPWRSOMCAE */{SST(0x3F, 0x0F, SS_RETRY|SSQ_DECREMENT_COUNT
-                                | SSQ_DELAY_RANDOM|EBUSY,
-                       "Echo buffer overwritten") },
-/* DT  WR OM   B*/{SST(0x3F, 0x0F, SS_RDEF, "Medium Loadable") },
-/* DT  WR OM   B*/{SST(0x3F, 0x0F, SS_RDEF,
-                       "Medium auxiliary memory accessible") },
-/* D            */{SST(0x40, 0x00, SS_RDEF,
-                       "Ram failure") }, /* deprecated - use 40 NN instead */
-/* DTLPWRSOMCAE */{SST(0x40, 0x80, SS_RDEF,
-                       "Diagnostic failure: ASCQ = Component ID") },
-/* DTLPWRSOMCAE */{SST(0x40, 0xFF, SS_RDEF|SSQ_RANGE,
-                       NULL) },/* Range 0x80->0xFF */
-/* D            */{SST(0x41, 0x00, SS_RDEF,
-                       "Data path failure") }, /* deprecated - use 40 NN instead */
-/* D            */{SST(0x42, 0x00, SS_RDEF,
-                       "Power-on or self-test failure") }, /* deprecated - use 40 NN instead */
-/* DTLPWRSOMCAE */{SST(0x43, 0x00, SS_RDEF,
-                       "Message error") },
-/* DTLPWRSOMCAE */{SST(0x44, 0x00, SS_RDEF,
-                       "Internal target failure") },
-/* DTLPWRSOMCAE */{SST(0x45, 0x00, SS_RDEF,
-                       "Select or reselect failure") },
-/* DTLPWRSOMC   */{SST(0x46, 0x00, SS_RDEF,
-                       "Unsuccessful soft reset") },
-/* DTLPWRSOMCAE */{SST(0x47, 0x00, SS_RDEF|SSQ_FALLBACK,
-                       "SCSI parity error") },
-/* DTLPWRSOMCAE */{SST(0x47, 0x01, SS_RDEF|SSQ_FALLBACK,
-                       "Data Phase CRC error detected") },
-/* DTLPWRSOMCAE */{SST(0x47, 0x02, SS_RDEF|SSQ_FALLBACK,
-                       "SCSI parity error detected during ST data phase") },
-/* DTLPWRSOMCAE */{SST(0x47, 0x03, SS_RDEF|SSQ_FALLBACK,
-                       "Information Unit iuCRC error") },
-/* DTLPWRSOMCAE */{SST(0x47, 0x04, SS_RDEF|SSQ_FALLBACK,
-                       "Asynchronous information protection error detected") },
-/* DTLPWRSOMCAE */{SST(0x47, 0x05, SS_RDEF|SSQ_FALLBACK,
-                       "Protocol server CRC error") },
-/* DTLPWRSOMCAE */{SST(0x48, 0x00, SS_RDEF|SSQ_FALLBACK,
-                       "Initiator detected error message received") },
-/* DTLPWRSOMCAE */{SST(0x49, 0x00, SS_RDEF,
-                       "Invalid message error") },
-/* DTLPWRSOMCAE */{SST(0x4A, 0x00, SS_RDEF,
-                       "Command phase error") },
-/* DTLPWRSOMCAE */{SST(0x4B, 0x00, SS_RDEF,
-                       "Data phase error") },
-/* DTLPWRSOMCAE */{SST(0x4C, 0x00, SS_RDEF,
-                       "Logical unit failed self-configuration") },
-/* DTLPWRSOMCAE */{SST(0x4D, 0x00, SS_RDEF,
-                       "Tagged overlapped commands: ASCQ = Queue tag ID") },
-/* DTLPWRSOMCAE */{SST(0x4D, 0xFF, SS_RDEF|SSQ_RANGE,
-                       NULL)}, /* Range 0x00->0xFF */
-/* DTLPWRSOMCAE */{SST(0x4E, 0x00, SS_RDEF,
-                       "Overlapped commands attempted") },
-/*  T           */{SST(0x50, 0x00, SS_RDEF,
-                       "Write append error") },
-/*  T           */{SST(0x50, 0x01, SS_RDEF,
-                       "Write append position error") },
-/*  T           */{SST(0x50, 0x02, SS_RDEF,
-                       "Position error related to timing") },
-/*  T     O     */{SST(0x51, 0x00, SS_RDEF,
-                       "Erase failure") },
-/*  T           */{SST(0x52, 0x00, SS_RDEF,
-                       "Cartridge fault") },
-/* DTL WRSOM    */{SST(0x53, 0x00, SS_RDEF,
-                       "Media load or eject failed") },
-/*  T           */{SST(0x53, 0x01, SS_RDEF,
-                       "Unload tape failure") },
-/* DT  WR OM    */{SST(0x53, 0x02, SS_RDEF,
-                       "Medium removal prevented") },
-/*    P         */{SST(0x54, 0x00, SS_RDEF,
-                       "Scsi to host system interface failure") },
-/*    P         */{SST(0x55, 0x00, SS_RDEF,
-                       "System resource failure") },
-/* D      O     */{SST(0x55, 0x01, SS_FATAL|ENOSPC,
-                       "System buffer full") },
-/*      R       */{SST(0x57, 0x00, SS_RDEF,
-                       "Unable to recover table-of-contents") },
-/*        O     */{SST(0x58, 0x00, SS_RDEF,
-                       "Generation does not exist") },
-/*        O     */{SST(0x59, 0x00, SS_RDEF,
-                       "Updated block read") },
-/* DTLPWRSOM    */{SST(0x5A, 0x00, SS_RDEF,
-                       "Operator request or state change input") },
-/* DT  WR OM    */{SST(0x5A, 0x01, SS_RDEF,
-                       "Operator medium removal request") },
-/* DT  W  O     */{SST(0x5A, 0x02, SS_RDEF,
-                       "Operator selected write protect") },
-/* DT  W  O     */{SST(0x5A, 0x03, SS_RDEF,
-                       "Operator selected write permit") },
-/* DTLPWRSOM    */{SST(0x5B, 0x00, SS_RDEF,
-                       "Log exception") },
-/* DTLPWRSOM    */{SST(0x5B, 0x01, SS_RDEF,
-                       "Threshold condition met") },
-/* DTLPWRSOM    */{SST(0x5B, 0x02, SS_RDEF,
-                       "Log counter at maximum") },
-/* DTLPWRSOM    */{SST(0x5B, 0x03, SS_RDEF,
-                       "Log list codes exhausted") },
-/* D      O     */{SST(0x5C, 0x00, SS_RDEF,
-                       "RPL status change") },
-/* D      O     */{SST(0x5C, 0x01, SS_NOP|SSQ_PRINT_SENSE,
-                       "Spindles synchronized") },
-/* D      O     */{SST(0x5C, 0x02, SS_RDEF,
-                       "Spindles not synchronized") },
-/* DTLPWRSOMCAE */{SST(0x5D, 0x00, SS_RDEF,
-                       "Failure prediction threshold exceeded") },
-/* DTLPWRSOMCAE */{SST(0x5D, 0xFF, SS_RDEF,
-                       "Failure prediction threshold exceeded (false)") },
-/* DTLPWRSO CA  */{SST(0x5E, 0x00, SS_RDEF,
-                       "Low power condition on") },
-/* DTLPWRSO CA  */{SST(0x5E, 0x01, SS_RDEF,
-                       "Idle condition activated by timer") },
-/* DTLPWRSO CA  */{SST(0x5E, 0x02, SS_RDEF,
-                       "Standby condition activated by timer") },
-/* DTLPWRSO CA  */{SST(0x5E, 0x03, SS_RDEF,
-                       "Idle condition activated by command") },
-/* DTLPWRSO CA  */{SST(0x5E, 0x04, SS_RDEF,
-                       "Standby condition activated by command") },
-/*       S      */{SST(0x60, 0x00, SS_RDEF,
-                       "Lamp failure") },
-/*       S      */{SST(0x61, 0x00, SS_RDEF,
-                       "Video acquisition error") },
-/*       S      */{SST(0x61, 0x01, SS_RDEF,
-                       "Unable to acquire video") },
-/*       S      */{SST(0x61, 0x02, SS_RDEF,
-                       "Out of focus") },
-/*       S      */{SST(0x62, 0x00, SS_RDEF,
-                       "Scan head positioning error") },
-/*      R       */{SST(0x63, 0x00, SS_RDEF,
-                       "End of user area encountered on this track") },
-/*      R       */{SST(0x63, 0x01, SS_FATAL|ENOSPC,
-                       "Packet does not fit in available space") },
-/*      R       */{SST(0x64, 0x00, SS_RDEF,
-                       "Illegal mode for this track") },
-/*      R       */{SST(0x64, 0x01, SS_RDEF,
-                       "Invalid packet size") },
-/* DTLPWRSOMCAE */{SST(0x65, 0x00, SS_RDEF,
-                       "Voltage fault") },
-/*       S      */{SST(0x66, 0x00, SS_RDEF,
-                       "Automatic document feeder cover up") },
-/*       S      */{SST(0x66, 0x01, SS_RDEF,
-                       "Automatic document feeder lift up") },
-/*       S      */{SST(0x66, 0x02, SS_RDEF,
-                       "Document jam in automatic document feeder") },
-/*       S      */{SST(0x66, 0x03, SS_RDEF,
-                       "Document miss feed automatic in document feeder") },
-/*           A  */{SST(0x67, 0x00, SS_RDEF,
-                       "Configuration failure") },
-/*           A  */{SST(0x67, 0x01, SS_RDEF,
-                       "Configuration of incapable logical units failed") },
-/*           A  */{SST(0x67, 0x02, SS_RDEF,
-                       "Add logical unit failed") },
-/*           A  */{SST(0x67, 0x03, SS_RDEF,
-                       "Modification of logical unit failed") },
-/*           A  */{SST(0x67, 0x04, SS_RDEF,
-                       "Exchange of logical unit failed") },
-/*           A  */{SST(0x67, 0x05, SS_RDEF,
-                       "Remove of logical unit failed") },
-/*           A  */{SST(0x67, 0x06, SS_RDEF,
-                       "Attachment of logical unit failed") },
-/*           A  */{SST(0x67, 0x07, SS_RDEF,
-                       "Creation of logical unit failed") },
-/*           A  */{SST(0x68, 0x00, SS_RDEF,
-                       "Logical unit not configured") },
-/*           A  */{SST(0x69, 0x00, SS_RDEF,
-                       "Data loss on logical unit") },
-/*           A  */{SST(0x69, 0x01, SS_RDEF,
-                       "Multiple logical unit failures") },
-/*           A  */{SST(0x69, 0x02, SS_RDEF,
-                       "Parity/data mismatch") },
-/*           A  */{SST(0x6A, 0x00, SS_RDEF,
-                       "Informational, refer to log") },
-/*           A  */{SST(0x6B, 0x00, SS_RDEF,
-                       "State change has occurred") },
-/*           A  */{SST(0x6B, 0x01, SS_RDEF,
-                       "Redundancy level got better") },
-/*           A  */{SST(0x6B, 0x02, SS_RDEF,
-                       "Redundancy level got worse") },
-/*           A  */{SST(0x6C, 0x00, SS_RDEF,
-                       "Rebuild failure occurred") },
-/*           A  */{SST(0x6D, 0x00, SS_RDEF,
-                       "Recalculate failure occurred") },
-/*           A  */{SST(0x6E, 0x00, SS_RDEF,
-                       "Command to logical unit failed") },
-/*  T           */{SST(0x70, 0x00, SS_RDEF,
-                       "Decompression exception short: ASCQ = Algorithm ID") },
-/*  T           */{SST(0x70, 0xFF, SS_RDEF|SSQ_RANGE,
-                       NULL) }, /* Range 0x00 -> 0xFF */
-/*  T           */{SST(0x71, 0x00, SS_RDEF,
-                       "Decompression exception long: ASCQ = Algorithm ID") },
-/*  T           */{SST(0x71, 0xFF, SS_RDEF|SSQ_RANGE,
-                       NULL) }, /* Range 0x00 -> 0xFF */       
-/*      R       */{SST(0x72, 0x00, SS_RDEF,
-                       "Session fixation error") },
-/*      R       */{SST(0x72, 0x01, SS_RDEF,
-                       "Session fixation error writing lead-in") },
-/*      R       */{SST(0x72, 0x02, SS_RDEF,
-                       "Session fixation error writing lead-out") },
-/*      R       */{SST(0x72, 0x03, SS_RDEF,
-                       "Session fixation error - incomplete track in session") },
-/*      R       */{SST(0x72, 0x04, SS_RDEF,
-                       "Empty or partially written reserved track") },
-/*      R       */{SST(0x73, 0x00, SS_RDEF,
-                       "CD control error") },
-/*      R       */{SST(0x73, 0x01, SS_RDEF,
-                       "Power calibration area almost full") },
-/*      R       */{SST(0x73, 0x02, SS_FATAL|ENOSPC,
-                       "Power calibration area is full") },
-/*      R       */{SST(0x73, 0x03, SS_RDEF,
-                       "Power calibration area error") },
-/*      R       */{SST(0x73, 0x04, SS_RDEF,
-                       "Program memory area update failure") },
-/*      R       */{SST(0x73, 0x05, SS_RDEF,
-                       "program memory area is full") }
-};
-
-static const int asc_table_size = sizeof(asc_table)/sizeof(asc_table[0]);
-
-struct asc_key
-{
-       int asc;
-       int ascq;
-};
-
-static int
-ascentrycomp(const void *key, const void *member)
-{
-       int asc;
-       int ascq;
-       const struct asc_table_entry *table_entry;
-
-       asc = ((const struct asc_key *)key)->asc;
-       ascq = ((const struct asc_key *)key)->ascq;
-       table_entry = (const struct asc_table_entry *)member;
-
-       if (asc >= table_entry->asc) {
-
-               if (asc > table_entry->asc)
-                       return (1);
-
-               if (ascq <= table_entry->ascq) {
-                       /* Check for ranges */
-                       if (ascq == table_entry->ascq
-                        || ((table_entry->action & SSQ_RANGE) != 0
-                          && ascq >= (table_entry - 1)->ascq))
-                               return (0);
-                       return (-1);
-               }
-               return (1);
-       }
-       return (-1);
-}
-
-static int
-senseentrycomp(const void *key, const void *member)
-{
-       int sense_key;
-       const struct sense_key_table_entry *table_entry;
-
-       sense_key = *((const int *)key);
-       table_entry = (const struct sense_key_table_entry *)member;
-
-       if (sense_key >= table_entry->sense_key) {
-               if (sense_key == table_entry->sense_key)
-                       return (0);
-               return (1);
-       }
-       return (-1);
-}
-
-static void
-fetchtableentries(int sense_key, int asc, int ascq,
-                 struct scsi_inquiry_data *inq_data,
-                 const struct sense_key_table_entry **sense_entry,
-                 const struct asc_table_entry **asc_entry)
-{
-       void *match;
-       const struct asc_table_entry *asc_tables[2];
-       const struct sense_key_table_entry *sense_tables[2];
-       struct asc_key asc_ascq;
-       size_t asc_tables_size[2];
-       size_t sense_tables_size[2];
-       int num_asc_tables;
-       int num_sense_tables;
-       int i;
-
-       /* Default to failure */
-       *sense_entry = NULL;
-       *asc_entry = NULL;
-       match = NULL;
-       if (inq_data != NULL)
-               match = cam_quirkmatch((void *)inq_data,
-                                      (void *)sense_quirk_table,
-                                      sense_quirk_table_size,
-                                      sizeof(*sense_quirk_table),
-                                      aic_inquiry_match);
-
-       if (match != NULL) {
-               struct scsi_sense_quirk_entry *quirk;
-
-               quirk = (struct scsi_sense_quirk_entry *)match;
-               asc_tables[0] = quirk->asc_info;
-               asc_tables_size[0] = quirk->num_ascs;
-               asc_tables[1] = asc_table;
-               asc_tables_size[1] = asc_table_size;
-               num_asc_tables = 2;
-               sense_tables[0] = quirk->sense_key_info;
-               sense_tables_size[0] = quirk->num_sense_keys;
-               sense_tables[1] = sense_key_table;
-               sense_tables_size[1] = sense_key_table_size;
-               num_sense_tables = 2;
-       } else {
-               asc_tables[0] = asc_table;
-               asc_tables_size[0] = asc_table_size;
-               num_asc_tables = 1;
-               sense_tables[0] = sense_key_table;
-               sense_tables_size[0] = sense_key_table_size;
-               num_sense_tables = 1;
-       }
-
-       asc_ascq.asc = asc;
-       asc_ascq.ascq = ascq;
-       for (i = 0; i < num_asc_tables; i++) {
-               void *found_entry;
-
-               found_entry = scsibsearch(&asc_ascq, asc_tables[i],
-                                         asc_tables_size[i],
-                                         sizeof(**asc_tables),
-                                         ascentrycomp);
-
-               if (found_entry) {
-                       *asc_entry = (struct asc_table_entry *)found_entry;
-                       break;
-               }
-       }
-
-       for (i = 0; i < num_sense_tables; i++) {
-               void *found_entry;
-
-               found_entry = scsibsearch(&sense_key, sense_tables[i],
-                                         sense_tables_size[i],
-                                         sizeof(**sense_tables),
-                                         senseentrycomp);
-
-               if (found_entry) {
-                       *sense_entry =
-                           (struct sense_key_table_entry *)found_entry;
-                       break;
-               }
-       }
-}
-
-static void *
-scsibsearch(const void *key, const void *base, size_t nmemb, size_t size,
-                int (*compar)(const void *, const void *))
-{
-       const void *entry;
-       u_int l;
-       u_int u;
-       u_int m;
-
-       l = -1;
-       u = nmemb;
-       while (l + 1 != u) {
-               m = (l + u) / 2;
-               entry = base + m * size;
-               if (compar(key, entry) > 0)
-                       l = m;
-               else
-                       u = m;
-       }
-
-       entry = base + u * size;
-       if (u == nmemb
-        || compar(key, entry) != 0)
-               return (NULL);
-
-       return ((void *)entry);
-}
-
-/*
- * Compare string with pattern, returning 0 on match.
- * Short pattern matches trailing blanks in name,
- * wildcard '*' in pattern matches rest of name,
- * wildcard '?' matches a single non-space character.
- */
-static int
-cam_strmatch(const uint8_t *str, const uint8_t *pattern, int str_len)
-{
-
-       while (*pattern != '\0'&& str_len > 0) {  
-
-               if (*pattern == '*') {
-                       return (0);
-               }
-               if ((*pattern != *str)
-                && (*pattern != '?' || *str == ' ')) {
-                       return (1);
-               }
-               pattern++;
-               str++;
-               str_len--;
-       }
-       while (str_len > 0 && *str++ == ' ')
-               str_len--;
-
-       return (str_len);
-}
-
-static caddr_t
-cam_quirkmatch(caddr_t target, caddr_t quirk_table, int num_entries,
-              int entry_size, cam_quirkmatch_t *comp_func)
-{
-       for (; num_entries > 0; num_entries--, quirk_table += entry_size) {
-               if ((*comp_func)(target, quirk_table) == 0)
-                       return (quirk_table);
-       }
-       return (NULL);
-}
-
-void
-aic_sense_desc(int sense_key, int asc, int ascq,
-              struct scsi_inquiry_data *inq_data,
-              const char **sense_key_desc, const char **asc_desc)
-{
-       const struct asc_table_entry *asc_entry;
-       const struct sense_key_table_entry *sense_entry;
-
-       fetchtableentries(sense_key, asc, ascq,
-                         inq_data,
-                         &sense_entry,
-                         &asc_entry);
-
-       *sense_key_desc = sense_entry->desc;
-
-       if (asc_entry != NULL)
-               *asc_desc = asc_entry->desc;
-       else if (asc >= 0x80 && asc <= 0xff)
-               *asc_desc = "Vendor Specific ASC";
-       else if (ascq >= 0x80 && ascq <= 0xff)
-               *asc_desc = "Vendor Specific ASCQ";
-       else
-               *asc_desc = "Reserved ASC/ASCQ pair";
-}
-
-/*
- * Given sense and device type information, return the appropriate action.
- * If we do not understand the specific error as identified by the ASC/ASCQ
- * pair, fall back on the more generic actions derived from the sense key.
- */
-aic_sense_action
-aic_sense_error_action(struct scsi_sense_data *sense_data,
-                      struct scsi_inquiry_data *inq_data, uint32_t sense_flags)
-{
-       const struct asc_table_entry *asc_entry;
-       const struct sense_key_table_entry *sense_entry;
-       int error_code, sense_key, asc, ascq;
-       aic_sense_action action;
-
-       scsi_extract_sense(sense_data, &error_code, &sense_key, &asc, &ascq);
-
-       if (error_code == SSD_DEFERRED_ERROR) {
-               /*
-                * XXX dufault@FreeBSD.org
-                * This error doesn't relate to the command associated
-                * with this request sense.  A deferred error is an error
-                * for a command that has already returned GOOD status
-                * (see SCSI2 8.2.14.2).
-                *
-                * By my reading of that section, it looks like the current
-                * command has been cancelled, we should now clean things up
-                * (hopefully recovering any lost data) and then retry the
-                * current command.  There are two easy choices, both wrong:
-                *
-                * 1. Drop through (like we had been doing), thus treating
-                *    this as if the error were for the current command and
-                *    return and stop the current command.
-                * 
-                * 2. Issue a retry (like I made it do) thus hopefully
-                *    recovering the current transfer, and ignoring the
-                *    fact that we've dropped a command.
-                *
-                * These should probably be handled in a device specific
-                * sense handler or punted back up to a user mode daemon
-                */
-               action = SS_RETRY|SSQ_DECREMENT_COUNT|SSQ_PRINT_SENSE;
-       } else {
-               fetchtableentries(sense_key, asc, ascq,
-                                 inq_data,
-                                 &sense_entry,
-                                 &asc_entry);
-
-               /*
-                * Override the 'No additional Sense' entry (0,0)
-                * with the error action of the sense key.
-                */
-               if (asc_entry != NULL
-                && (asc != 0 || ascq != 0))
-                       action = asc_entry->action;
-               else
-                       action = sense_entry->action;
-
-               if (sense_key == SSD_KEY_RECOVERED_ERROR) {
-                       /*
-                        * The action succeeded but the device wants
-                        * the user to know that some recovery action
-                        * was required.
-                        */
-                       action &= ~(SS_MASK|SSQ_MASK|SS_ERRMASK);
-                       action |= SS_NOP|SSQ_PRINT_SENSE;
-               } else if (sense_key == SSD_KEY_ILLEGAL_REQUEST) {
-                       if ((sense_flags & SF_QUIET_IR) != 0)
-                               action &= ~SSQ_PRINT_SENSE;
-               } else if (sense_key == SSD_KEY_UNIT_ATTENTION) {
-                       if ((sense_flags & SF_RETRY_UA) != 0
-                        && (action & SS_MASK) == SS_FAIL) {
-                               action &= ~(SS_MASK|SSQ_MASK);
-                               action |= SS_RETRY|SSQ_DECREMENT_COUNT|
-                                         SSQ_PRINT_SENSE;
-                       }
-               }
-       }
-
-       if ((sense_flags & SF_PRINT_ALWAYS) != 0)
-               action |= SSQ_PRINT_SENSE;
-       else if ((sense_flags & SF_NO_PRINT) != 0)
-               action &= ~SSQ_PRINT_SENSE;
-
-       return (action);
-}
-
-/*      
- * Try make as good a match as possible with
- * available sub drivers
- */
-int
-aic_inquiry_match(caddr_t inqbuffer, caddr_t table_entry)
-{
-       struct scsi_inquiry_pattern *entry;
-       struct scsi_inquiry_data *inq;
-       entry = (struct scsi_inquiry_pattern *)table_entry;
-       inq = (struct scsi_inquiry_data *)inqbuffer;
-
-       if (((SID_TYPE(inq) == entry->type)
-         || (entry->type == T_ANY))
-        && (SID_IS_REMOVABLE(inq) ? entry->media_type & SIP_MEDIA_REMOVABLE
-                                  : entry->media_type & SIP_MEDIA_FIXED)
-        && (cam_strmatch(inq->vendor, entry->vendor, sizeof(inq->vendor)) == 0)
-        && (cam_strmatch(inq->product, entry->product,
-                         sizeof(inq->product)) == 0)
-        && (cam_strmatch(inq->revision, entry->revision,
-                         sizeof(inq->revision)) == 0)) {
-               return (0);
-       }
-        return (-1);
-}
-
-/*
- * Table of syncrates that don't follow the "divisible by 4"
- * rule. This table will be expanded in future SCSI specs.
- */
-static struct {
-       u_int period_factor;
-       u_int period;   /* in 100ths of ns */
-} scsi_syncrates[] = {
-       { 0x08, 625 },  /* FAST-160 */
-       { 0x09, 1250 }, /* FAST-80 */
-       { 0x0a, 2500 }, /* FAST-40 40MHz */
-       { 0x0b, 3030 }, /* FAST-40 33MHz */
-       { 0x0c, 5000 }  /* FAST-20 */
-};
-
-/*
- * Return the frequency in kHz corresponding to the given
- * sync period factor.
- */
-u_int
-aic_calc_syncsrate(u_int period_factor)
-{
-       int i;
-       int num_syncrates;
-
-       num_syncrates = sizeof(scsi_syncrates) / sizeof(scsi_syncrates[0]);
-       /* See if the period is in the "exception" table */
-       for (i = 0; i < num_syncrates; i++) {
-
-               if (period_factor == scsi_syncrates[i].period_factor) {
-                       /* Period in kHz */
-                       return (100000000 / scsi_syncrates[i].period);
-               }
-       }
-
-       /*
-        * Wasn't in the table, so use the standard
-        * 4 times conversion.
-        */
-       return (10000000 / (period_factor * 4 * 10));
-}
-
-/*
- * Return speed in KB/s.
- */
-u_int
-aic_calc_speed(u_int width, u_int period, u_int offset, u_int min_rate)
-{
-       u_int freq;
-
-       if (offset != 0 && period < min_rate)
-               freq  = aic_calc_syncsrate(period);
-       else
-               /* Roughly 3.3MB/s for async */
-               freq  = 3300;
-       freq <<= width;
-       return (freq);
-}
-
-uint32_t
-aic_error_action(struct scsi_cmnd *cmd, struct scsi_inquiry_data *inq_data,
-                cam_status status, u_int scsi_status)
-{
-       aic_sense_action  err_action;
-       int               sense;
-
-       sense  = (cmd->result >> 24) == DRIVER_SENSE;
-
-       switch (status) {
-       case CAM_REQ_CMP:
-               err_action = SS_NOP;
-               break;
-       case CAM_AUTOSENSE_FAIL:
-       case CAM_SCSI_STATUS_ERROR:
-
-               switch (scsi_status) {
-               case SCSI_STATUS_OK:
-               case SCSI_STATUS_COND_MET:
-               case SCSI_STATUS_INTERMED:
-               case SCSI_STATUS_INTERMED_COND_MET:
-                       err_action = SS_NOP;
-                       break;
-               case SCSI_STATUS_CMD_TERMINATED:
-               case SCSI_STATUS_CHECK_COND:
-                       if (sense != 0) {
-                               struct scsi_sense_data *sense;
-
-                               sense = (struct scsi_sense_data *)
-                                   &cmd->sense_buffer;
-                               err_action =
-                                   aic_sense_error_action(sense, inq_data, 0);
-
-                       } else {
-                               err_action = SS_RETRY|SSQ_FALLBACK
-                                          | SSQ_DECREMENT_COUNT|EIO;
-                       }
-                       break;
-               case SCSI_STATUS_QUEUE_FULL:
-               case SCSI_STATUS_BUSY:
-                       err_action = SS_RETRY|SSQ_DELAY|SSQ_MANY
-                                  | SSQ_DECREMENT_COUNT|EBUSY;
-                       break;
-               case SCSI_STATUS_RESERV_CONFLICT:
-               default:
-                       err_action = SS_FAIL|EBUSY;
-                       break;
-               }
-               break;
-       case CAM_CMD_TIMEOUT:
-       case CAM_REQ_CMP_ERR:
-       case CAM_UNEXP_BUSFREE:
-       case CAM_UNCOR_PARITY:
-       case CAM_DATA_RUN_ERR:
-               err_action = SS_RETRY|SSQ_FALLBACK|EIO;
-               break;
-       case CAM_UA_ABORT:
-       case CAM_UA_TERMIO:
-       case CAM_MSG_REJECT_REC:
-       case CAM_SEL_TIMEOUT:
-               err_action = SS_FAIL|EIO;
-               break;
-       case CAM_REQ_INVALID:
-       case CAM_PATH_INVALID:
-       case CAM_DEV_NOT_THERE:
-       case CAM_NO_HBA:
-       case CAM_PROVIDE_FAIL:
-       case CAM_REQ_TOO_BIG:           
-       case CAM_RESRC_UNAVAIL:
-       case CAM_BUSY:
-       default:
-               /* panic??  These should never occur in our application. */
-               err_action = SS_FAIL|EIO;
-               break;
-       case CAM_SCSI_BUS_RESET:
-       case CAM_BDR_SENT:              
-       case CAM_REQUEUE_REQ:
-               /* Unconditional requeue */
-               err_action = SS_RETRY;
-               break;
-       }
-
-       return (err_action);
-}
-
-char *
-aic_parse_brace_option(char *opt_name, char *opt_arg, char *end, int depth,
-                      aic_option_callback_t *callback, u_long callback_arg)
-{
-       char    *tok_end;
-       char    *tok_end2;
-       int      i;
-       int      instance;
-       int      targ;
-       int      done;
-       char     tok_list[] = {'.', ',', '{', '}', '\0'};
 
-       /* All options use a ':' name/arg separator */
-       if (*opt_arg != ':')
-               return (opt_arg);
-       opt_arg++;
-       instance = -1;
-       targ = -1;
-       done = FALSE;
-       /*
-        * Restore separator that may be in
-        * the middle of our option argument.
-        */
-       tok_end = strchr(opt_arg, '\0');
-       if (tok_end < end)
-               *tok_end = ',';
-       while (!done) {
-               switch (*opt_arg) {
-               case '{':
-                       if (instance == -1) {
-                               instance = 0;
-                       } else {
-                               if (depth > 1) {
-                                       if (targ == -1)
-                                               targ = 0;
-                               } else {
-                                       printf("Malformed Option %s\n",
-                                              opt_name);
-                                       done = TRUE;
-                               }
-                       }
-                       opt_arg++;
-                       break;
-               case '}':
-                       if (targ != -1)
-                               targ = -1;
-                       else if (instance != -1)
-                               instance = -1;
-                       opt_arg++;
-                       break;
-               case ',':
-               case '.':
-                       if (instance == -1)
-                               done = TRUE;
-                       else if (targ >= 0)
-                               targ++;
-                       else if (instance >= 0)
-                               instance++;
-                       opt_arg++;
-                       break;
-               case '\0':
-                       done = TRUE;
-                       break;
-               default:
-                       tok_end = end;
-                       for (i = 0; tok_list[i]; i++) {
-                               tok_end2 = strchr(opt_arg, tok_list[i]);
-                               if ((tok_end2) && (tok_end2 < tok_end))
-                                       tok_end = tok_end2;
-                       }
-                       callback(callback_arg, instance, targ,
-                                simple_strtol(opt_arg, NULL, 0));
-                       opt_arg = tok_end;
-                       break;
-               }
-       }
-       return (opt_arg);
-}
index bfe6f954d3c4092b58029c3424424b1b5c4350ba..3bfbf0fe1ec2569f1d4b2cea9828f4f058841572 100644 (file)
 #ifndef        _AICLIB_H
 #define _AICLIB_H
 
-/*
- * Linux Interrupt Support.
- */
-#ifndef IRQ_RETVAL
-typedef void irqreturn_t;
-#define        IRQ_RETVAL(x)
-#endif
-
-/*
- * SCSI command format
- */
-
-/*
- * Define dome bits that are in ALL (or a lot of) scsi commands
- */
-#define SCSI_CTL_LINK          0x01
-#define SCSI_CTL_FLAG          0x02
-#define SCSI_CTL_VENDOR                0xC0
-#define        SCSI_CMD_LUN            0xA0    /* these two should not be needed */
-#define        SCSI_CMD_LUN_SHIFT      5       /* LUN in the cmd is no longer SCSI */
-
-#define SCSI_MAX_CDBLEN                16      /* 
-                                        * 16 byte commands are in the 
-                                        * SCSI-3 spec 
-                                        */
-/* 6byte CDBs special case 0 length to be 256 */
-#define SCSI_CDB6_LEN(len)     ((len) == 0 ? 256 : len)
-
-/*
- * This type defines actions to be taken when a particular sense code is
- * received.  Right now, these flags are only defined to take up 16 bits,
- * but can be expanded in the future if necessary.
- */
-typedef enum {
-       SS_NOP          = 0x000000, /* Do nothing */
-       SS_RETRY        = 0x010000, /* Retry the command */
-       SS_FAIL         = 0x020000, /* Bail out */
-       SS_START        = 0x030000, /* Send a Start Unit command to the device,
-                                    * then retry the original command.
-                                    */
-       SS_TUR          = 0x040000, /* Send a Test Unit Ready command to the
-                                    * device, then retry the original command.
-                                    */
-       SS_REQSENSE     = 0x050000, /* Send a RequestSense command to the
-                                    * device, then retry the original command.
-                                    */
-       SS_INQ_REFRESH  = 0x060000,
-       SS_MASK         = 0xff0000
-} aic_sense_action;
-
-typedef enum {
-       SSQ_NONE                = 0x0000,
-       SSQ_DECREMENT_COUNT     = 0x0100,  /* Decrement the retry count */
-       SSQ_MANY                = 0x0200,  /* send lots of recovery commands */
-       SSQ_RANGE               = 0x0400,  /*
-                                           * This table entry represents the
-                                           * end of a range of ASCQs that
-                                           * have identical error actions
-                                           * and text.
-                                           */
-       SSQ_PRINT_SENSE         = 0x0800,
-       SSQ_DELAY               = 0x1000,  /* Delay before retry. */
-       SSQ_DELAY_RANDOM        = 0x2000,  /* Randomized delay before retry. */
-       SSQ_FALLBACK            = 0x4000,  /* Do a speed fallback to recover */
-       SSQ_MASK                = 0xff00
-} aic_sense_action_qualifier;
-
-/* Mask for error status values */
-#define SS_ERRMASK     0xff
-
-/* The default, retyable, error action */
-#define SS_RDEF                SS_RETRY|SSQ_DECREMENT_COUNT|SSQ_PRINT_SENSE|EIO
-
-/* The retyable, error action, with table specified error code */
-#define SS_RET         SS_RETRY|SSQ_DECREMENT_COUNT|SSQ_PRINT_SENSE
-
-/* Fatal error action, with table specified error code */
-#define SS_FATAL       SS_FAIL|SSQ_PRINT_SENSE
-
-struct scsi_generic
-{
-       uint8_t opcode;
-       uint8_t bytes[11];
-};
-
-struct scsi_request_sense
-{
-       uint8_t opcode;
-       uint8_t byte2;
-       uint8_t unused[2];
-       uint8_t length;
-       uint8_t control;
-};
-
-struct scsi_test_unit_ready
-{
-       uint8_t opcode;
-       uint8_t byte2;
-       uint8_t unused[3];
-       uint8_t control;
-};
-
-struct scsi_send_diag
-{
-       uint8_t opcode;
-       uint8_t byte2;
-#define        SSD_UOL         0x01
-#define        SSD_DOL         0x02
-#define        SSD_SELFTEST    0x04
-#define        SSD_PF          0x10
-       uint8_t unused[1];
-       uint8_t paramlen[2];
-       uint8_t control;
-};
-
 struct scsi_sense
 {
        uint8_t opcode;
@@ -181,537 +66,12 @@ struct scsi_sense
        uint8_t control;
 };
 
-struct scsi_inquiry
-{
-       uint8_t opcode;
-       uint8_t byte2;
-#define        SI_EVPD 0x01
-       uint8_t page_code;
-       uint8_t reserved;
-       uint8_t length;
-       uint8_t control;
-};
-
-struct scsi_mode_sense_6
-{
-       uint8_t opcode;
-       uint8_t byte2;
-#define        SMS_DBD                         0x08
-       uint8_t page;
-#define        SMS_PAGE_CODE                   0x3F
-#define SMS_VENDOR_SPECIFIC_PAGE       0x00
-#define SMS_DISCONNECT_RECONNECT_PAGE  0x02
-#define SMS_PERIPHERAL_DEVICE_PAGE     0x09
-#define SMS_CONTROL_MODE_PAGE          0x0A
-#define SMS_ALL_PAGES_PAGE             0x3F
-#define        SMS_PAGE_CTRL_MASK              0xC0
-#define        SMS_PAGE_CTRL_CURRENT           0x00
-#define        SMS_PAGE_CTRL_CHANGEABLE        0x40
-#define        SMS_PAGE_CTRL_DEFAULT           0x80
-#define        SMS_PAGE_CTRL_SAVED             0xC0
-       uint8_t unused;
-       uint8_t length;
-       uint8_t control;
-};
-
-struct scsi_mode_sense_10
-{
-       uint8_t opcode;
-       uint8_t byte2;          /* same bits as small version */
-       uint8_t page;           /* same bits as small version */
-       uint8_t unused[4];
-       uint8_t length[2];
-       uint8_t control;
-};
-
-struct scsi_mode_select_6
-{
-       uint8_t opcode;
-       uint8_t byte2;
-#define        SMS_SP  0x01
-#define        SMS_PF  0x10
-       uint8_t unused[2];
-       uint8_t length;
-       uint8_t control;
-};
-
-struct scsi_mode_select_10
-{
-       uint8_t opcode;
-       uint8_t byte2;          /* same bits as small version */
-       uint8_t unused[5];
-       uint8_t length[2];
-       uint8_t control;
-};
-
-/*
- * When sending a mode select to a tape drive, the medium type must be 0.
- */
-struct scsi_mode_hdr_6
-{
-       uint8_t datalen;
-       uint8_t medium_type;
-       uint8_t dev_specific;
-       uint8_t block_descr_len;
-};
-
-struct scsi_mode_hdr_10
-{
-       uint8_t datalen[2];
-       uint8_t medium_type;
-       uint8_t dev_specific;
-       uint8_t reserved[2];
-       uint8_t block_descr_len[2];
-};
-
-struct scsi_mode_block_descr
-{
-       uint8_t density_code;
-       uint8_t num_blocks[3];
-       uint8_t reserved;
-       uint8_t block_len[3];
-};
-
-struct scsi_log_sense
-{
-       uint8_t opcode;
-       uint8_t byte2;
-#define        SLS_SP                          0x01
-#define        SLS_PPC                         0x02
-       uint8_t page;
-#define        SLS_PAGE_CODE                   0x3F
-#define        SLS_ALL_PAGES_PAGE              0x00
-#define        SLS_OVERRUN_PAGE                0x01
-#define        SLS_ERROR_WRITE_PAGE            0x02
-#define        SLS_ERROR_READ_PAGE             0x03
-#define        SLS_ERROR_READREVERSE_PAGE      0x04
-#define        SLS_ERROR_VERIFY_PAGE           0x05
-#define        SLS_ERROR_NONMEDIUM_PAGE        0x06
-#define        SLS_ERROR_LASTN_PAGE            0x07
-#define        SLS_PAGE_CTRL_MASK              0xC0
-#define        SLS_PAGE_CTRL_THRESHOLD         0x00
-#define        SLS_PAGE_CTRL_CUMULATIVE        0x40
-#define        SLS_PAGE_CTRL_THRESH_DEFAULT    0x80
-#define        SLS_PAGE_CTRL_CUMUL_DEFAULT     0xC0
-       uint8_t reserved[2];
-       uint8_t paramptr[2];
-       uint8_t length[2];
-       uint8_t control;
-};
-
-struct scsi_log_select
-{
-       uint8_t opcode;
-       uint8_t byte2;
-/*     SLS_SP                          0x01 */
-#define        SLS_PCR                         0x02
-       uint8_t page;
-/*     SLS_PAGE_CTRL_MASK              0xC0 */
-/*     SLS_PAGE_CTRL_THRESHOLD         0x00 */
-/*     SLS_PAGE_CTRL_CUMULATIVE        0x40 */
-/*     SLS_PAGE_CTRL_THRESH_DEFAULT    0x80 */
-/*     SLS_PAGE_CTRL_CUMUL_DEFAULT     0xC0 */
-       uint8_t reserved[4];
-       uint8_t length[2];
-       uint8_t control;
-};
-
-struct scsi_log_header
-{
-       uint8_t page;
-       uint8_t reserved;
-       uint8_t datalen[2];
-};
-
-struct scsi_log_param_header {
-       uint8_t param_code[2];
-       uint8_t param_control;
-#define        SLP_LP                          0x01
-#define        SLP_LBIN                        0x02
-#define        SLP_TMC_MASK                    0x0C
-#define        SLP_TMC_ALWAYS                  0x00
-#define        SLP_TMC_EQUAL                   0x04
-#define        SLP_TMC_NOTEQUAL                0x08
-#define        SLP_TMC_GREATER                 0x0C
-#define        SLP_ETC                         0x10
-#define        SLP_TSD                         0x20
-#define        SLP_DS                          0x40
-#define        SLP_DU                          0x80
-       uint8_t param_len;
-};
-
-struct scsi_control_page {
-       uint8_t page_code;
-       uint8_t page_length;
-       uint8_t rlec;
-#define SCB_RLEC                       0x01    /*Report Log Exception Cond*/
-       uint8_t queue_flags;
-#define SCP_QUEUE_ALG_MASK             0xF0
-#define SCP_QUEUE_ALG_RESTRICTED       0x00
-#define SCP_QUEUE_ALG_UNRESTRICTED     0x10
-#define SCP_QUEUE_ERR                  0x02    /*Queued I/O aborted for CACs*/
-#define SCP_QUEUE_DQUE                 0x01    /*Queued I/O disabled*/
-       uint8_t eca_and_aen;
-#define SCP_EECA                       0x80    /*Enable Extended CA*/
-#define SCP_RAENP                      0x04    /*Ready AEN Permission*/
-#define SCP_UAAENP                     0x02    /*UA AEN Permission*/
-#define SCP_EAENP                      0x01    /*Error AEN Permission*/
-       uint8_t reserved;
-       uint8_t aen_holdoff_period[2];
-};
-
-struct scsi_reserve
-{
-       uint8_t opcode;
-       uint8_t byte2;
-       uint8_t unused[2];
-       uint8_t length;
-       uint8_t control;
-};
-
-struct scsi_release
-{
-       uint8_t opcode;
-       uint8_t byte2;
-       uint8_t unused[2];
-       uint8_t length;
-       uint8_t control;
-};
-
-struct scsi_prevent
-{
-       uint8_t opcode;
-       uint8_t byte2;
-       uint8_t unused[2];
-       uint8_t how;
-       uint8_t control;
-};
-#define        PR_PREVENT 0x01
-#define PR_ALLOW   0x00
-
-struct scsi_sync_cache
-{
-       uint8_t opcode;
-       uint8_t byte2;
-       uint8_t begin_lba[4];
-       uint8_t reserved;
-       uint8_t lb_count[2];
-       uint8_t control;        
-};
-
-
-struct scsi_changedef
-{
-       uint8_t opcode;
-       uint8_t byte2;
-       uint8_t unused1;
-       uint8_t how;
-       uint8_t unused[4];
-       uint8_t datalen;
-       uint8_t control;
-};
-
-struct scsi_read_buffer
-{
-       uint8_t opcode;
-       uint8_t byte2;
-#define        RWB_MODE                0x07
-#define        RWB_MODE_HDR_DATA       0x00
-#define        RWB_MODE_DATA           0x02
-#define        RWB_MODE_DOWNLOAD       0x04
-#define        RWB_MODE_DOWNLOAD_SAVE  0x05
-        uint8_t buffer_id;
-        uint8_t offset[3];
-        uint8_t length[3];
-        uint8_t control;
-};
-
-struct scsi_write_buffer
-{
-       uint8_t opcode;
-       uint8_t byte2;
-       uint8_t buffer_id;
-       uint8_t offset[3];
-       uint8_t length[3];
-       uint8_t control;
-};
-
-struct scsi_rw_6
-{
-       uint8_t opcode;
-       uint8_t addr[3];
-/* only 5 bits are valid in the MSB address byte */
-#define        SRW_TOPADDR     0x1F
-       uint8_t length;
-       uint8_t control;
-};
-
-struct scsi_rw_10
-{
-       uint8_t opcode;
-#define        SRW10_RELADDR   0x01
-#define SRW10_FUA      0x08
-#define        SRW10_DPO       0x10
-       uint8_t byte2;
-       uint8_t addr[4];
-       uint8_t reserved;
-       uint8_t length[2];
-       uint8_t control;
-};
-
-struct scsi_rw_12
-{
-       uint8_t opcode;
-#define        SRW12_RELADDR   0x01
-#define SRW12_FUA      0x08
-#define        SRW12_DPO       0x10
-       uint8_t byte2;
-       uint8_t addr[4];
-       uint8_t length[4];
-       uint8_t reserved;
-       uint8_t control;
-};
-
-struct scsi_start_stop_unit
-{
-       uint8_t opcode;
-       uint8_t byte2;
-#define        SSS_IMMED               0x01
-       uint8_t reserved[2];
-       uint8_t how;
-#define        SSS_START               0x01
-#define        SSS_LOEJ                0x02
-       uint8_t control;
-};
-
-#define SC_SCSI_1 0x01
-#define SC_SCSI_2 0x03
-
-/*
- * Opcodes
- */
-
-#define        TEST_UNIT_READY         0x00
-#define REQUEST_SENSE          0x03
-#define        READ_6                  0x08
-#define WRITE_6                        0x0a
-#define INQUIRY                        0x12
-#define MODE_SELECT_6          0x15
-#define MODE_SENSE_6           0x1a
-#define START_STOP_UNIT                0x1b
-#define START_STOP             0x1b
-#define RESERVE                0x16
-#define RELEASE                0x17
-#define        RECEIVE_DIAGNOSTIC      0x1c
-#define        SEND_DIAGNOSTIC         0x1d
-#define PREVENT_ALLOW          0x1e
-#define        READ_CAPACITY           0x25
-#define        READ_10                 0x28
-#define WRITE_10               0x2a
-#define POSITION_TO_ELEMENT    0x2b
-#define        SYNCHRONIZE_CACHE       0x35
-#define        WRITE_BUFFER            0x3b
-#define        READ_BUFFER             0x3c
-#define        CHANGE_DEFINITION       0x40
-#define        LOG_SELECT              0x4c
-#define        LOG_SENSE               0x4d
-#ifdef XXXCAM
-#define        MODE_SENSE_10           0x5A
-#endif
-#define        MODE_SELECT_10          0x55
-#define MOVE_MEDIUM            0xa5
-#define READ_12                        0xa8
-#define WRITE_12               0xaa
-#define READ_ELEMENT_STATUS    0xb8
-
-
-/*
- * Device Types
- */
-#define T_DIRECT       0x00
-#define T_SEQUENTIAL   0x01
-#define T_PRINTER      0x02
-#define T_PROCESSOR    0x03
-#define T_WORM         0x04
-#define T_CDROM                0x05
-#define T_SCANNER      0x06
-#define T_OPTICAL      0x07
-#define T_CHANGER      0x08
-#define T_COMM         0x09
-#define T_ASC0         0x0a
-#define T_ASC1         0x0b
-#define        T_STORARRAY     0x0c
-#define        T_ENCLOSURE     0x0d
-#define        T_RBC           0x0e
-#define        T_OCRW          0x0f
-#define T_NODEVICE     0x1F
-#define        T_ANY           0xFF    /* Used in Quirk table matches */
-
-#define T_REMOV                1
-#define        T_FIXED         0
-
-/*
- * This length is the initial inquiry length used by the probe code, as    
- * well as the legnth necessary for aic_print_inquiry() to function 
- * correctly.  If either use requires a different length in the future, 
- * the two values should be de-coupled.
- */
-#define        SHORT_INQUIRY_LENGTH    36
-
-struct scsi_inquiry_data
-{
-       uint8_t device;
-#define        SID_TYPE(inq_data) ((inq_data)->device & 0x1f)
-#define        SID_QUAL(inq_data) (((inq_data)->device & 0xE0) >> 5)
-#define        SID_QUAL_LU_CONNECTED   0x00    /*
-                                        * The specified peripheral device
-                                        * type is currently connected to
-                                        * logical unit.  If the target cannot
-                                        * determine whether or not a physical
-                                        * device is currently connected, it
-                                        * shall also use this peripheral
-                                        * qualifier when returning the INQUIRY
-                                        * data.  This peripheral qualifier
-                                        * does not mean that the device is
-                                        * ready for access by the initiator.
-                                        */
-#define        SID_QUAL_LU_OFFLINE     0x01    /*
-                                        * The target is capable of supporting
-                                        * the specified peripheral device type
-                                        * on this logical unit; however, the
-                                        * physical device is not currently
-                                        * connected to this logical unit.
-                                        */
-#define SID_QUAL_RSVD          0x02
-#define        SID_QUAL_BAD_LU         0x03    /*
-                                        * The target is not capable of
-                                        * supporting a physical device on
-                                        * this logical unit. For this
-                                        * peripheral qualifier the peripheral
-                                        * device type shall be set to 1Fh to
-                                        * provide compatibility with previous
-                                        * versions of SCSI. All other
-                                        * peripheral device type values are
-                                        * reserved for this peripheral
-                                        * qualifier.
-                                        */
-#define        SID_QUAL_IS_VENDOR_UNIQUE(inq_data) ((SID_QUAL(inq_data) & 0x08) != 0)
-       uint8_t dev_qual2;
-#define        SID_QUAL2       0x7F
-#define        SID_IS_REMOVABLE(inq_data) (((inq_data)->dev_qual2 & 0x80) != 0)
-       uint8_t version;
-#define SID_ANSI_REV(inq_data) ((inq_data)->version & 0x07)
 #define                SCSI_REV_0              0
 #define                SCSI_REV_CCS            1
 #define                SCSI_REV_2              2
 #define                SCSI_REV_SPC            3
 #define                SCSI_REV_SPC2           4
 
-#define SID_ECMA       0x38
-#define SID_ISO                0xC0
-       uint8_t response_format;
-#define SID_AENC       0x80
-#define SID_TrmIOP     0x40
-       uint8_t additional_length;
-       uint8_t reserved[2];
-       uint8_t flags;
-#define        SID_SftRe       0x01
-#define        SID_CmdQue      0x02
-#define        SID_Linked      0x08
-#define        SID_Sync        0x10
-#define        SID_WBus16      0x20
-#define        SID_WBus32      0x40
-#define        SID_RelAdr      0x80
-#define SID_VENDOR_SIZE   8
-       char     vendor[SID_VENDOR_SIZE];
-#define SID_PRODUCT_SIZE  16
-       char     product[SID_PRODUCT_SIZE];
-#define SID_REVISION_SIZE 4
-       char     revision[SID_REVISION_SIZE];
-       /*
-        * The following fields were taken from SCSI Primary Commands - 2
-        * (SPC-2) Revision 14, Dated 11 November 1999
-        */
-#define        SID_VENDOR_SPECIFIC_0_SIZE      20
-       uint8_t vendor_specific0[SID_VENDOR_SPECIFIC_0_SIZE];
-       /*
-        * An extension of SCSI Parallel Specific Values
-        */
-#define        SID_SPI_IUS             0x01
-#define        SID_SPI_QAS             0x02
-#define        SID_SPI_CLOCK_ST        0x00
-#define        SID_SPI_CLOCK_DT        0x04
-#define        SID_SPI_CLOCK_DT_ST     0x0C
-#define        SID_SPI_MASK            0x0F
-       uint8_t spi3data;
-       uint8_t reserved2;
-       /*
-        * Version Descriptors, stored 2 byte values.
-        */
-       uint8_t version1[2];
-       uint8_t version2[2];
-       uint8_t version3[2];
-       uint8_t version4[2];
-       uint8_t version5[2];
-       uint8_t version6[2];
-       uint8_t version7[2];
-       uint8_t version8[2];
-
-       uint8_t reserved3[22];
-
-#define        SID_VENDOR_SPECIFIC_1_SIZE      160
-       uint8_t vendor_specific1[SID_VENDOR_SPECIFIC_1_SIZE];
-};
-
-struct scsi_vpd_unit_serial_number
-{
-       uint8_t device;
-       uint8_t page_code;
-#define SVPD_UNIT_SERIAL_NUMBER        0x80
-       uint8_t reserved;
-       uint8_t length; /* serial number length */
-#define SVPD_SERIAL_NUM_SIZE 251
-       uint8_t serial_num[SVPD_SERIAL_NUM_SIZE];
-};
-
-struct scsi_read_capacity
-{
-       uint8_t opcode;
-       uint8_t byte2;
-       uint8_t addr[4];
-       uint8_t unused[3];
-       uint8_t control;
-};
-
-struct scsi_read_capacity_data
-{
-       uint8_t addr[4];
-       uint8_t length[4];
-};
-
-struct scsi_report_luns
-{
-       uint8_t opcode;
-       uint8_t byte2;
-       uint8_t unused[3];
-       uint8_t addr[4];
-       uint8_t control;
-};
-
-struct scsi_report_luns_data {
-       uint8_t length[4];      /* length of LUN inventory, in bytes */
-       uint8_t reserved[4];    /* unused */
-       /*
-        * LUN inventory- we only support the type zero form for now.
-        */
-       struct {
-               uint8_t lundata[8];
-       } luns[1];
-};
-#define        RPL_LUNDATA_ATYP_MASK   0xc0    /* MBZ for type 0 lun */
-#define        RPL_LUNDATA_T0LUN       1       /* @ lundata[1] */
-
-
 struct scsi_sense_data
 {
        uint8_t error_code;
@@ -757,41 +117,6 @@ struct scsi_sense_data
 #define SSD_FULL_SIZE sizeof(struct scsi_sense_data)
 };
 
-struct scsi_mode_header_6
-{
-       uint8_t data_length;    /* Sense data length */
-       uint8_t medium_type;
-       uint8_t dev_spec;
-       uint8_t blk_desc_len;
-};
-
-struct scsi_mode_header_10
-{
-       uint8_t data_length[2];/* Sense data length */
-       uint8_t medium_type;
-       uint8_t dev_spec;
-       uint8_t unused[2];
-       uint8_t blk_desc_len[2];
-};
-
-struct scsi_mode_page_header
-{
-       uint8_t page_code;
-       uint8_t page_length;
-};
-
-struct scsi_mode_blk_desc
-{
-       uint8_t density;
-       uint8_t nblocks[3];
-       uint8_t reserved;
-       uint8_t blklen[3];
-};
-
-#define        SCSI_DEFAULT_DENSITY    0x00    /* use 'default' density */
-#define        SCSI_SAME_DENSITY       0x7f    /* use 'same' density- >= SCSI-2 only */
-
-
 /*
  * Status Byte
  */
@@ -807,76 +132,7 @@ struct scsi_mode_blk_desc
 #define SCSI_STATUS_ACA_ACTIVE         0x30
 #define SCSI_STATUS_TASK_ABORTED       0x40
 
-struct scsi_inquiry_pattern {
-       uint8_t   type;
-       uint8_t   media_type;
-#define        SIP_MEDIA_REMOVABLE     0x01
-#define        SIP_MEDIA_FIXED         0x02
-       const char *vendor;
-       const char *product;
-       const char *revision;
-}; 
-
-struct scsi_static_inquiry_pattern {
-       uint8_t   type;
-       uint8_t   media_type;
-       char       vendor[SID_VENDOR_SIZE+1];
-       char       product[SID_PRODUCT_SIZE+1];
-       char       revision[SID_REVISION_SIZE+1];
-};
-
-struct scsi_sense_quirk_entry {
-       struct scsi_inquiry_pattern     inq_pat;
-       int                             num_sense_keys;
-       int                             num_ascs;
-       struct sense_key_table_entry    *sense_key_info;
-       struct asc_table_entry          *asc_info;
-};
-
-struct sense_key_table_entry {
-       uint8_t    sense_key;
-       uint32_t   action;
-       const char *desc;
-};
-
-struct asc_table_entry {
-       uint8_t    asc;
-       uint8_t    ascq;
-       uint32_t   action;
-       const char *desc;
-};
-
-struct op_table_entry {
-       uint8_t    opcode;
-       uint16_t   opmask;
-       const char  *desc;
-};
-
-struct scsi_op_quirk_entry {
-       struct scsi_inquiry_pattern     inq_pat;
-       int                             num_ops;
-       struct op_table_entry           *op_table;
-};
-
-typedef enum {
-       SSS_FLAG_NONE           = 0x00,
-       SSS_FLAG_PRINT_COMMAND  = 0x01
-} scsi_sense_string_flags;
-
-extern const char *scsi_sense_key_text[];
-
 /************************* Large Disk Handling ********************************/
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-static __inline int aic_sector_div(u_long capacity, int heads, int sectors);
-
-static __inline int
-aic_sector_div(u_long capacity, int heads, int sectors)
-{
-       return (capacity / (heads * sectors));
-}
-#else
-static __inline int aic_sector_div(sector_t capacity, int heads, int sectors);
-
 static __inline int
 aic_sector_div(sector_t capacity, int heads, int sectors)
 {
@@ -884,152 +140,6 @@ aic_sector_div(sector_t capacity, int heads, int sectors)
        sector_div(capacity, (heads * sectors));
        return (int)capacity;
 }
-#endif
-
-/**************************** Module Library Hack *****************************/
-/*
- * What we'd like to do is have a single "scsi library" module that both the
- * aic7xxx and aic79xx drivers could load and depend on.  A cursory examination
- * of implementing module dependencies in Linux (handling the install and
- * initrd cases) does not look promissing.  For now, we just duplicate this
- * code in both drivers using a simple symbol renaming scheme that hides this
- * hack from the drivers.
- */
-#define AIC_LIB_ENTRY_CONCAT(x, prefix)        prefix ## x
-#define        AIC_LIB_ENTRY_EXPAND(x, prefix) AIC_LIB_ENTRY_CONCAT(x, prefix)
-#define AIC_LIB_ENTRY(x)               AIC_LIB_ENTRY_EXPAND(x, AIC_LIB_PREFIX)
-
-#define        aic_sense_desc                  AIC_LIB_ENTRY(_sense_desc)
-#define        aic_sense_error_action          AIC_LIB_ENTRY(_sense_error_action)
-#define        aic_error_action                AIC_LIB_ENTRY(_error_action)
-#define        aic_op_desc                     AIC_LIB_ENTRY(_op_desc)
-#define        aic_cdb_string                  AIC_LIB_ENTRY(_cdb_string)
-#define aic_print_inquiry              AIC_LIB_ENTRY(_print_inquiry)
-#define aic_calc_syncsrate             AIC_LIB_ENTRY(_calc_syncrate)
-#define        aic_calc_syncparam              AIC_LIB_ENTRY(_calc_syncparam)
-#define        aic_calc_speed                  AIC_LIB_ENTRY(_calc_speed)
-#define        aic_inquiry_match               AIC_LIB_ENTRY(_inquiry_match)
-#define        aic_static_inquiry_match        AIC_LIB_ENTRY(_static_inquiry_match)
-#define        aic_parse_brace_option          AIC_LIB_ENTRY(_parse_brace_option)
-
-/******************************************************************************/
-
-void                   aic_sense_desc(int /*sense_key*/, int /*asc*/,
-                                      int /*ascq*/, struct scsi_inquiry_data*,
-                                      const char** /*sense_key_desc*/,
-                                      const char** /*asc_desc*/);
-aic_sense_action       aic_sense_error_action(struct scsi_sense_data*,
-                                              struct scsi_inquiry_data*,
-                                              uint32_t /*sense_flags*/);
-uint32_t               aic_error_action(struct scsi_cmnd *,
-                                        struct scsi_inquiry_data *,
-                                        cam_status, u_int);
-
-#define        SF_RETRY_UA     0x01
-#define SF_NO_PRINT    0x02
-#define SF_QUIET_IR    0x04    /* Be quiet about Illegal Request reponses */
-#define SF_PRINT_ALWAYS        0x08
-
-
-const char *   aic_op_desc(uint16_t /*opcode*/, struct scsi_inquiry_data*);
-char *         aic_cdb_string(uint8_t* /*cdb_ptr*/, char* /*cdb_string*/,
-                              size_t /*len*/);
-void           aic_print_inquiry(struct scsi_inquiry_data*);
-
-u_int          aic_calc_syncsrate(u_int /*period_factor*/);
-u_int          aic_calc_syncparam(u_int /*period*/);
-u_int          aic_calc_speed(u_int width, u_int period, u_int offset,
-                              u_int min_rate);
-       
-int            aic_inquiry_match(caddr_t /*inqbuffer*/,
-                                 caddr_t /*table_entry*/);
-int            aic_static_inquiry_match(caddr_t /*inqbuffer*/,
-                                        caddr_t /*table_entry*/);
-
-typedef void aic_option_callback_t(u_long, int, int, int32_t);
-char *         aic_parse_brace_option(char *opt_name, char *opt_arg,
-                                      char *end, int depth,
-                                      aic_option_callback_t *, u_long);
-
-static __inline void    scsi_extract_sense(struct scsi_sense_data *sense,
-                                           int *error_code, int *sense_key,
-                                           int *asc, int *ascq);
-static __inline void    scsi_ulto2b(uint32_t val, uint8_t *bytes);
-static __inline void    scsi_ulto3b(uint32_t val, uint8_t *bytes);
-static __inline void    scsi_ulto4b(uint32_t val, uint8_t *bytes);
-static __inline uint32_t scsi_2btoul(uint8_t *bytes);
-static __inline uint32_t scsi_3btoul(uint8_t *bytes);
-static __inline int32_t         scsi_3btol(uint8_t *bytes);
-static __inline uint32_t scsi_4btoul(uint8_t *bytes);
-
-static __inline void scsi_extract_sense(struct scsi_sense_data *sense,
-                                      int *error_code, int *sense_key,
-                                      int *asc, int *ascq)
-{
-       *error_code = sense->error_code & SSD_ERRCODE;
-       *sense_key = sense->flags & SSD_KEY;
-       *asc = (sense->extra_len >= 5) ? sense->add_sense_code : 0;
-       *ascq = (sense->extra_len >= 6) ? sense->add_sense_code_qual : 0;
-}
-
-static __inline void
-scsi_ulto2b(uint32_t val, uint8_t *bytes)
-{
-
-       bytes[0] = (val >> 8) & 0xff;
-       bytes[1] = val & 0xff;
-}
-
-static __inline void
-scsi_ulto3b(uint32_t val, uint8_t *bytes)
-{
-
-       bytes[0] = (val >> 16) & 0xff;
-       bytes[1] = (val >> 8) & 0xff;
-       bytes[2] = val & 0xff;
-}
-
-static __inline void
-scsi_ulto4b(uint32_t val, uint8_t *bytes)
-{
-
-       bytes[0] = (val >> 24) & 0xff;
-       bytes[1] = (val >> 16) & 0xff;
-       bytes[2] = (val >> 8) & 0xff;
-       bytes[3] = val & 0xff;
-}
-
-static __inline uint32_t
-scsi_2btoul(uint8_t *bytes)
-{
-       uint32_t rv;
-
-       rv = (bytes[0] << 8) |
-            bytes[1];
-       return (rv);
-}
-
-static __inline uint32_t
-scsi_3btoul(uint8_t *bytes)
-{
-       uint32_t rv;
-
-       rv = (bytes[0] << 16) |
-            (bytes[1] << 8) |
-            bytes[2];
-       return (rv);
-}
-
-static __inline int32_t 
-scsi_3btol(uint8_t *bytes)
-{
-       uint32_t rc = scsi_3btoul(bytes);
-       if (rc & 0x00800000)
-               rc |= 0xff000000;
-
-       return (int32_t) rc;
-}
 
 static __inline uint32_t
 scsi_4btoul(uint8_t *bytes)
index deec0cef88d92bcb007c9b28c514948b3c700758..5f868852904149645e559ff2ac7c7ec2dd432756 100644 (file)
@@ -68,8 +68,8 @@ enum {
        PIIX_COMB_PATA_P0       = (1 << 1),
        PIIX_COMB               = (1 << 2), /* combined mode enabled? */
 
-       PIIX_PORT_PRESENT       = (1 << 0),
-       PIIX_PORT_ENABLED       = (1 << 4),
+       PIIX_PORT_ENABLED       = (1 << 0),
+       PIIX_PORT_PRESENT       = (1 << 4),
 
        PIIX_80C_PRI            = (1 << 5) | (1 << 4),
        PIIX_80C_SEC            = (1 << 7) | (1 << 6),
@@ -377,7 +377,9 @@ static void piix_pata_phy_reset(struct ata_port *ap)
  *     None (inherited from caller).
  *
  *     RETURNS:
- *     Non-zero if device detected, zero otherwise.
+ *     Non-zero if port is enabled, it may or may not have a device
+ *     attached in that case (PRESENT bit would only be set if BIOS probe
+ *     was done). Zero is returned if port is disabled.
  */
 static int piix_sata_probe (struct ata_port *ap)
 {
@@ -401,7 +403,7 @@ static int piix_sata_probe (struct ata_port *ap)
         */
 
        for (i = 0; i < 4; i++) {
-               mask = (PIIX_PORT_PRESENT << i) | (PIIX_PORT_ENABLED << i);
+               mask = (PIIX_PORT_ENABLED << i);
 
                if ((orig_mask & mask) == mask)
                        if (combined || (i == ap->hard_port_no))
index 3900e28ac7d69c89747ae3254964209dc7cd0960..bd0e1b6be1ea6d50badb9e13c7717de66332e1d3 100644 (file)
@@ -20,7 +20,6 @@
 #include <linux/interrupt.h>
 #include <linux/blkdev.h>
 #include <linux/completion.h>
-#include <linux/devfs_fs_kernel.h>
 #include <linux/ioctl32.h>
 #include <linux/compat.h>
 #include <linux/chio.h>                        /* here are all the ioctls */
@@ -31,7 +30,7 @@
 #include <scsi/scsi_ioctl.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_device.h>
-#include <scsi/scsi_request.h>
+#include <scsi/scsi_eh.h>
 #include <scsi/scsi_dbg.h>
 
 #define CH_DT_MAX       16
@@ -181,17 +180,17 @@ static struct {
 
 /* ------------------------------------------------------------------- */
 
-static int ch_find_errno(unsigned char *sense_buffer)
+static int ch_find_errno(struct scsi_sense_hdr *sshdr)
 {
        int i,errno = 0;
 
        /* Check to see if additional sense information is available */
-       if (sense_buffer[7]  > 5 &&
-           sense_buffer[12] != 0) {
+       if (scsi_sense_valid(sshdr) &&
+           sshdr->asc != 0) {
                for (i = 0; err[i].errno != 0; i++) {
-                       if (err[i].sense == sense_buffer[ 2] &&
-                           err[i].asc   == sense_buffer[12] &&
-                           err[i].ascq  == sense_buffer[13]) {
+                       if (err[i].sense == sshdr->sense_key &&
+                           err[i].asc   == sshdr->asc &&
+                           err[i].ascq  == sshdr->ascq) {
                                errno = -err[i].errno;
                                break;
                        }
@@ -207,13 +206,9 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd,
           void *buffer, unsigned buflength,
           enum dma_data_direction direction)
 {
-       int errno, retries = 0, timeout;
-       struct scsi_request *sr;
+       int errno, retries = 0, timeout, result;
+       struct scsi_sense_hdr sshdr;
        
-       sr = scsi_allocate_request(ch->device, GFP_KERNEL);
-       if (NULL == sr)
-               return -ENOMEM;
-
        timeout = (cmd[0] == INITIALIZE_ELEMENT_STATUS)
                ? timeout_init : timeout_move;
 
@@ -224,16 +219,17 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd,
                __scsi_print_command(cmd);
        }
 
-        scsi_wait_req(sr, cmd, buffer, buflength,
-                     timeout * HZ, MAX_RETRIES);
+        result = scsi_execute_req(ch->device, cmd, direction, buffer,
+                                 buflength, &sshdr, timeout * HZ,
+                                 MAX_RETRIES);
 
-       dprintk("result: 0x%x\n",sr->sr_result);
-       if (driver_byte(sr->sr_result) & DRIVER_SENSE) {
+       dprintk("result: 0x%x\n",result);
+       if (driver_byte(result) & DRIVER_SENSE) {
                if (debug)
-                       scsi_print_req_sense(ch->name, sr);
-               errno = ch_find_errno(sr->sr_sense_buffer);
+                       scsi_print_sense_hdr(ch->name, &sshdr);
+               errno = ch_find_errno(&sshdr);
 
-               switch(sr->sr_sense_buffer[2] & 0xf) {
+               switch(sshdr.sense_key) {
                case UNIT_ATTENTION:
                        ch->unit_attention = 1;
                        if (retries++ < 3)
@@ -241,7 +237,6 @@ ch_do_scsi(scsi_changer *ch, unsigned char *cmd,
                        break;
                }
        }
-       scsi_release_request(sr);
        return errno;
 }
 
@@ -940,8 +935,6 @@ static int ch_probe(struct device *dev)
        if (init)
                ch_init_elem(ch);
 
-       devfs_mk_cdev(MKDEV(SCSI_CHANGER_MAJOR,ch->minor),
-                     S_IFCHR | S_IRUGO | S_IWUGO, ch->name);
        class_device_create(ch_sysfs_class,
                            MKDEV(SCSI_CHANGER_MAJOR,ch->minor),
                            dev, "s%s", ch->name);
@@ -974,7 +967,6 @@ static int ch_remove(struct device *dev)
 
        class_device_destroy(ch_sysfs_class,
                             MKDEV(SCSI_CHANGER_MAJOR,ch->minor));
-       devfs_remove(ch->name);
        kfree(ch->dt);
        kfree(ch);
        ch_devcount--;
index ec161733a82bc7a8bfa677ef0c23d5eae77255d5..f6be2c1c3942f24702795edc4bd75a084a409210 100644 (file)
@@ -17,6 +17,7 @@
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_request.h>
 #include <scsi/scsi_eh.h>
+#include <scsi/scsi_dbg.h>
 
 
 
@@ -1155,6 +1156,31 @@ scsi_show_extd_sense(unsigned char asc, unsigned char ascq)
        }
 }
 
+void
+scsi_print_sense_hdr(const char *name, struct scsi_sense_hdr *sshdr)
+{
+       const char *sense_txt;
+       /* An example of deferred is when an earlier write to disk cache
+        * succeeded, but now the disk discovers that it cannot write the
+        * data to the magnetic media.
+        */
+       const char *error = scsi_sense_is_deferred(sshdr) ? 
+               "<<DEFERRED>>" : "Current";
+       printk(KERN_INFO "%s: %s", name, error);
+       if (sshdr->response_code >= 0x72)
+               printk(" [descriptor]");
+
+       sense_txt = scsi_sense_key_string(sshdr->sense_key);
+       if (sense_txt)
+               printk(": sense key: %s\n", sense_txt);
+       else
+               printk(": sense key=0x%x\n", sshdr->sense_key);
+       printk(KERN_INFO "    ");
+       scsi_show_extd_sense(sshdr->asc, sshdr->ascq);
+       printk("\n");
+}
+EXPORT_SYMBOL(scsi_print_sense_hdr);
+
 /* Print sense information */
 void
 __scsi_print_sense(const char *name, const unsigned char *sense_buffer,
@@ -1162,8 +1188,6 @@ __scsi_print_sense(const char *name, const unsigned char *sense_buffer,
 {
        int k, num, res;
        unsigned int info;
-       const char *error;
-       const char *sense_txt;
        struct scsi_sense_hdr ssh;
     
        res = scsi_normalize_sense(sense_buffer, sense_len, &ssh);
@@ -1181,26 +1205,7 @@ __scsi_print_sense(const char *name, const unsigned char *sense_buffer,
                printk("\n");
                return;
        }
-
-       /* An example of deferred is when an earlier write to disk cache
-        * succeeded, but now the disk discovers that it cannot write the
-        * data to the magnetic media.
-        */
-       error = scsi_sense_is_deferred(&ssh) ? 
-                       "<<DEFERRED>>" : "Current";
-       printk(KERN_INFO "%s: %s", name, error);
-       if (ssh.response_code >= 0x72)
-               printk(" [descriptor]");
-
-       sense_txt = scsi_sense_key_string(ssh.sense_key);
-       if (sense_txt)
-               printk(": sense key: %s\n", sense_txt);
-       else
-               printk(": sense key=0x%x\n", ssh.sense_key);
-       printk(KERN_INFO "    ");
-       scsi_show_extd_sense(ssh.asc, ssh.ascq);
-       printk("\n");
-
+       scsi_print_sense_hdr(name, &ssh);
        if (ssh.response_code < 0x72) {
                /* only decode extras for "fixed" format now */
                char buff[80];
index 5feb886c33921075ab728f8d6a072dedf9959a8c..85503fad789a099d4d69a2fb6cda0db36ba256be 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/module.h>
 #include <linux/blkdev.h>
 #include <linux/kernel.h>
+#include <linux/kthread.h>
 #include <linux/string.h>
 #include <linux/mm.h>
 #include <linux/init.h>
@@ -52,21 +53,80 @@ static struct class shost_class = {
 };
 
 /**
- * scsi_host_cancel - cancel outstanding IO to this host
- * @shost:     pointer to struct Scsi_Host
- * recovery:   recovery requested to run.
+ *     scsi_host_set_state - Take the given host through the host
+ *             state model.
+ *     @shost: scsi host to change the state of.
+ *     @state: state to change to.
+ *
+ *     Returns zero if unsuccessful or an error if the requested
+ *     transition is illegal.
  **/
-static void scsi_host_cancel(struct Scsi_Host *shost, int recovery)
+int scsi_host_set_state(struct Scsi_Host *shost, enum scsi_host_state state)
 {
-       struct scsi_device *sdev;
+       enum scsi_host_state oldstate = shost->shost_state;
+
+       if (state == oldstate)
+               return 0;
+
+       switch (state) {
+       case SHOST_CREATED:
+               /* There are no legal states that come back to
+                * created.  This is the manually initialised start
+                * state */
+               goto illegal;
+
+       case SHOST_RUNNING:
+               switch (oldstate) {
+               case SHOST_CREATED:
+               case SHOST_RECOVERY:
+                       break;
+               default:
+                       goto illegal;
+               }
+               break;
+
+       case SHOST_RECOVERY:
+               switch (oldstate) {
+               case SHOST_RUNNING:
+                       break;
+               default:
+                       goto illegal;
+               }
+               break;
+
+       case SHOST_CANCEL:
+               switch (oldstate) {
+               case SHOST_CREATED:
+               case SHOST_RUNNING:
+                       break;
+               default:
+                       goto illegal;
+               }
+               break;
+
+       case SHOST_DEL:
+               switch (oldstate) {
+               case SHOST_CANCEL:
+                       break;
+               default:
+                       goto illegal;
+               }
+               break;
 
-       set_bit(SHOST_CANCEL, &shost->shost_state);
-       shost_for_each_device(sdev, shost) {
-               scsi_device_cancel(sdev, recovery);
        }
-       wait_event(shost->host_wait, (!test_bit(SHOST_RECOVERY,
-                                               &shost->shost_state)));
+       shost->shost_state = state;
+       return 0;
+
+ illegal:
+       SCSI_LOG_ERROR_RECOVERY(1,
+                               dev_printk(KERN_ERR, &shost->shost_gendev,
+                                          "Illegal host state transition"
+                                          "%s->%s\n",
+                                          scsi_host_state_name(oldstate),
+                                          scsi_host_state_name(state)));
+       return -EINVAL;
 }
+EXPORT_SYMBOL(scsi_host_set_state);
 
 /**
  * scsi_remove_host - remove a scsi host
@@ -74,11 +134,13 @@ static void scsi_host_cancel(struct Scsi_Host *shost, int recovery)
  **/
 void scsi_remove_host(struct Scsi_Host *shost)
 {
+       down(&shost->scan_mutex);
+       scsi_host_set_state(shost, SHOST_CANCEL);
+       up(&shost->scan_mutex);
        scsi_forget_host(shost);
-       scsi_host_cancel(shost, 0);
        scsi_proc_host_rm(shost);
 
-       set_bit(SHOST_DEL, &shost->shost_state);
+       scsi_host_set_state(shost, SHOST_DEL);
 
        transport_unregister_device(&shost->shost_gendev);
        class_device_unregister(&shost->shost_classdev);
@@ -115,7 +177,7 @@ int scsi_add_host(struct Scsi_Host *shost, struct device *dev)
        if (error)
                goto out;
 
-       set_bit(SHOST_ADD, &shost->shost_state);
+       scsi_host_set_state(shost, SHOST_RUNNING);
        get_device(shost->shost_gendev.parent);
 
        error = class_device_add(&shost->shost_classdev);
@@ -164,15 +226,8 @@ static void scsi_host_dev_release(struct device *dev)
        struct Scsi_Host *shost = dev_to_shost(dev);
        struct device *parent = dev->parent;
 
-       if (shost->ehandler) {
-               DECLARE_COMPLETION(sem);
-               shost->eh_notify = &sem;
-               shost->eh_kill = 1;
-               up(shost->eh_wait);
-               wait_for_completion(&sem);
-               shost->eh_notify = NULL;
-       }
-
+       if (shost->ehandler)
+               kthread_stop(shost->ehandler);
        if (shost->work_q)
                destroy_workqueue(shost->work_q);
 
@@ -202,7 +257,6 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
 {
        struct Scsi_Host *shost;
        int gfp_mask = GFP_KERNEL, rval;
-       DECLARE_COMPLETION(complete);
 
        if (sht->unchecked_isa_dma && privsize)
                gfp_mask |= __GFP_DMA;
@@ -226,6 +280,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
 
        spin_lock_init(&shost->default_lock);
        scsi_assign_lock(shost, &shost->default_lock);
+       shost->shost_state = SHOST_CREATED;
        INIT_LIST_HEAD(&shost->__devices);
        INIT_LIST_HEAD(&shost->__targets);
        INIT_LIST_HEAD(&shost->eh_cmd_q);
@@ -307,12 +362,12 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
        snprintf(shost->shost_classdev.class_id, BUS_ID_SIZE, "host%d",
                  shost->host_no);
 
-       shost->eh_notify = &complete;
-       rval = kernel_thread(scsi_error_handler, shost, 0);
-       if (rval < 0)
+       shost->ehandler = kthread_run(scsi_error_handler, shost,
+                       "scsi_eh_%d", shost->host_no);
+       if (IS_ERR(shost->ehandler)) {
+               rval = PTR_ERR(shost->ehandler);
                goto fail_destroy_freelist;
-       wait_for_completion(&complete);
-       shost->eh_notify = NULL;
+       }
 
        scsi_proc_hostdir_add(shost->hostt);
        return shost;
@@ -382,7 +437,7 @@ EXPORT_SYMBOL(scsi_host_lookup);
  **/
 struct Scsi_Host *scsi_host_get(struct Scsi_Host *shost)
 {
-       if (test_bit(SHOST_DEL, &shost->shost_state) ||
+       if ((shost->shost_state == SHOST_DEL) ||
                !get_device(&shost->shost_gendev))
                return NULL;
        return shost;
index 2cb3c8340ca8599fba18d38c24778781637703a5..5b14934ba861f0f119a9c48e809b0aea8340ebbc 100644 (file)
@@ -87,7 +87,7 @@ static int max_channel = 3;
 static int init_timeout = 5;
 static int max_requests = 50;
 
-#define IBMVSCSI_VERSION "1.5.6"
+#define IBMVSCSI_VERSION "1.5.7"
 
 MODULE_DESCRIPTION("IBM Virtual SCSI");
 MODULE_AUTHOR("Dave Boutcher");
@@ -145,6 +145,8 @@ static int initialize_event_pool(struct event_pool *pool,
                        sizeof(*evt->xfer_iu) * i;
                evt->xfer_iu = pool->iu_storage + i;
                evt->hostdata = hostdata;
+               evt->ext_list = NULL;
+               evt->ext_list_token = 0;
        }
 
        return 0;
@@ -161,9 +163,16 @@ static void release_event_pool(struct event_pool *pool,
                               struct ibmvscsi_host_data *hostdata)
 {
        int i, in_use = 0;
-       for (i = 0; i < pool->size; ++i)
+       for (i = 0; i < pool->size; ++i) {
                if (atomic_read(&pool->events[i].free) != 1)
                        ++in_use;
+               if (pool->events[i].ext_list) {
+                       dma_free_coherent(hostdata->dev,
+                                 SG_ALL * sizeof(struct memory_descriptor),
+                                 pool->events[i].ext_list,
+                                 pool->events[i].ext_list_token);
+               }
+       }
        if (in_use)
                printk(KERN_WARNING
                       "ibmvscsi: releasing event pool with %d "
@@ -286,24 +295,41 @@ static void set_srp_direction(struct scsi_cmnd *cmd,
        } else {
                if (cmd->sc_data_direction == DMA_TO_DEVICE) {
                        srp_cmd->data_out_format = SRP_INDIRECT_BUFFER;
-                       srp_cmd->data_out_count = numbuf;
+                       srp_cmd->data_out_count =
+                               numbuf < MAX_INDIRECT_BUFS ?
+                                       numbuf: MAX_INDIRECT_BUFS;
                } else {
                        srp_cmd->data_in_format = SRP_INDIRECT_BUFFER;
-                       srp_cmd->data_in_count = numbuf;
+                       srp_cmd->data_in_count =
+                               numbuf < MAX_INDIRECT_BUFS ?
+                                       numbuf: MAX_INDIRECT_BUFS;
                }
        }
 }
 
+static void unmap_sg_list(int num_entries, 
+               struct device *dev,
+               struct memory_descriptor *md)
+{ 
+       int i;
+
+       for (i = 0; i < num_entries; ++i) {
+               dma_unmap_single(dev,
+                       md[i].virtual_address,
+                       md[i].length, DMA_BIDIRECTIONAL);
+       }
+}
+
 /**
  * unmap_cmd_data: - Unmap data pointed in srp_cmd based on the format
  * @cmd:       srp_cmd whose additional_data member will be unmapped
  * @dev:       device for which the memory is mapped
  *
 */
-static void unmap_cmd_data(struct srp_cmd *cmd, struct device *dev)
+static void unmap_cmd_data(struct srp_cmd *cmd,
+                          struct srp_event_struct *evt_struct,
+                          struct device *dev)
 {
-       int i;
-
        if ((cmd->data_out_format == SRP_NO_BUFFER) &&
            (cmd->data_in_format == SRP_NO_BUFFER))
                return;
@@ -318,15 +344,34 @@ static void unmap_cmd_data(struct srp_cmd *cmd, struct device *dev)
                        (struct indirect_descriptor *)cmd->additional_data;
                int num_mapped = indirect->head.length / 
                        sizeof(indirect->list[0]);
-               for (i = 0; i < num_mapped; ++i) {
-                       struct memory_descriptor *data = &indirect->list[i];
-                       dma_unmap_single(dev,
-                                        data->virtual_address,
-                                        data->length, DMA_BIDIRECTIONAL);
+
+               if (num_mapped <= MAX_INDIRECT_BUFS) {
+                       unmap_sg_list(num_mapped, dev, &indirect->list[0]);
+                       return;
                }
+
+               unmap_sg_list(num_mapped, dev, evt_struct->ext_list);
        }
 }
 
+static int map_sg_list(int num_entries, 
+                      struct scatterlist *sg,
+                      struct memory_descriptor *md)
+{
+       int i;
+       u64 total_length = 0;
+
+       for (i = 0; i < num_entries; ++i) {
+               struct memory_descriptor *descr = md + i;
+               struct scatterlist *sg_entry = &sg[i];
+               descr->virtual_address = sg_dma_address(sg_entry);
+               descr->length = sg_dma_len(sg_entry);
+               descr->memory_handle = 0;
+               total_length += sg_dma_len(sg_entry);
+       }
+       return total_length;
+}
+
 /**
  * map_sg_data: - Maps dma for a scatterlist and initializes decriptor fields
  * @cmd:       Scsi_Cmnd with the scatterlist
@@ -337,10 +382,11 @@ static void unmap_cmd_data(struct srp_cmd *cmd, struct device *dev)
  * Returns 1 on success.
 */
 static int map_sg_data(struct scsi_cmnd *cmd,
+                      struct srp_event_struct *evt_struct,
                       struct srp_cmd *srp_cmd, struct device *dev)
 {
 
-       int i, sg_mapped;
+       int sg_mapped;
        u64 total_length = 0;
        struct scatterlist *sg = cmd->request_buffer;
        struct memory_descriptor *data =
@@ -363,27 +409,46 @@ static int map_sg_data(struct scsi_cmnd *cmd,
                return 1;
        }
 
-       if (sg_mapped > MAX_INDIRECT_BUFS) {
+       if (sg_mapped > SG_ALL) {
                printk(KERN_ERR
                       "ibmvscsi: More than %d mapped sg entries, got %d\n",
-                      MAX_INDIRECT_BUFS, sg_mapped);
+                      SG_ALL, sg_mapped);
                return 0;
        }
 
        indirect->head.virtual_address = 0;
        indirect->head.length = sg_mapped * sizeof(indirect->list[0]);
        indirect->head.memory_handle = 0;
-       for (i = 0; i < sg_mapped; ++i) {
-               struct memory_descriptor *descr = &indirect->list[i];
-               struct scatterlist *sg_entry = &sg[i];
-               descr->virtual_address = sg_dma_address(sg_entry);
-               descr->length = sg_dma_len(sg_entry);
-               descr->memory_handle = 0;
-               total_length += sg_dma_len(sg_entry);
+
+       if (sg_mapped <= MAX_INDIRECT_BUFS) {
+               total_length = map_sg_list(sg_mapped, sg, &indirect->list[0]);
+               indirect->total_length = total_length;
+               return 1;
        }
-       indirect->total_length = total_length;
 
-       return 1;
+       /* get indirect table */
+       if (!evt_struct->ext_list) {
+               evt_struct->ext_list =(struct memory_descriptor*)
+                       dma_alloc_coherent(dev, 
+                               SG_ALL * sizeof(struct memory_descriptor),
+                               &evt_struct->ext_list_token, 0);
+               if (!evt_struct->ext_list) {
+                   printk(KERN_ERR
+                       "ibmvscsi: Can't allocate memory for indirect table\n");
+                       return 0;
+                       
+               }
+       }
+
+       total_length = map_sg_list(sg_mapped, sg, evt_struct->ext_list);        
+
+       indirect->total_length = total_length;
+       indirect->head.virtual_address = evt_struct->ext_list_token;
+       indirect->head.length = sg_mapped * sizeof(indirect->list[0]);
+       memcpy(indirect->list, evt_struct->ext_list,
+               MAX_INDIRECT_BUFS * sizeof(struct memory_descriptor));
+       
+       return 1;
 }
 
 /**
@@ -428,6 +493,7 @@ static int map_single_data(struct scsi_cmnd *cmd,
  * Returns 1 on success.
 */
 static int map_data_for_srp_cmd(struct scsi_cmnd *cmd,
+                               struct srp_event_struct *evt_struct,
                                struct srp_cmd *srp_cmd, struct device *dev)
 {
        switch (cmd->sc_data_direction) {
@@ -450,7 +516,7 @@ static int map_data_for_srp_cmd(struct scsi_cmnd *cmd,
        if (!cmd->request_buffer)
                return 1;
        if (cmd->use_sg)
-               return map_sg_data(cmd, srp_cmd, dev);
+               return map_sg_data(cmd, evt_struct, srp_cmd, dev);
        return map_single_data(cmd, srp_cmd, dev);
 }
 
@@ -486,6 +552,7 @@ static int ibmvscsi_send_srp_event(struct srp_event_struct *evt_struct,
                printk(KERN_WARNING 
                       "ibmvscsi: Warning, request_limit exceeded\n");
                unmap_cmd_data(&evt_struct->iu.srp.cmd,
+                              evt_struct,
                               hostdata->dev);
                free_event_struct(&hostdata->pool, evt_struct);
                return SCSI_MLQUEUE_HOST_BUSY;
@@ -513,7 +580,7 @@ static int ibmvscsi_send_srp_event(struct srp_event_struct *evt_struct,
        return 0;
 
  send_error:
-       unmap_cmd_data(&evt_struct->iu.srp.cmd, hostdata->dev);
+       unmap_cmd_data(&evt_struct->iu.srp.cmd, evt_struct, hostdata->dev);
 
        if ((cmnd = evt_struct->cmnd) != NULL) {
                cmnd->result = DID_ERROR << 16;
@@ -551,6 +618,7 @@ static void handle_cmd_rsp(struct srp_event_struct *evt_struct)
                               rsp->sense_and_response_data,
                               rsp->sense_data_list_length);
                unmap_cmd_data(&evt_struct->iu.srp.cmd, 
+                              evt_struct, 
                               evt_struct->hostdata->dev);
 
                if (rsp->doover)
@@ -583,6 +651,7 @@ static int ibmvscsi_queuecommand(struct scsi_cmnd *cmnd,
 {
        struct srp_cmd *srp_cmd;
        struct srp_event_struct *evt_struct;
+       struct indirect_descriptor *indirect;
        struct ibmvscsi_host_data *hostdata =
                (struct ibmvscsi_host_data *)&cmnd->device->host->hostdata;
        u16 lun = lun_from_dev(cmnd->device);
@@ -591,14 +660,6 @@ static int ibmvscsi_queuecommand(struct scsi_cmnd *cmnd,
        if (!evt_struct)
                return SCSI_MLQUEUE_HOST_BUSY;
 
-       init_event_struct(evt_struct,
-                         handle_cmd_rsp,
-                         VIOSRP_SRP_FORMAT,
-                         cmnd->timeout);
-
-       evt_struct->cmnd = cmnd;
-       evt_struct->cmnd_done = done;
-
        /* Set up the actual SRP IU */
        srp_cmd = &evt_struct->iu.srp.cmd;
        memset(srp_cmd, 0x00, sizeof(*srp_cmd));
@@ -606,17 +667,25 @@ static int ibmvscsi_queuecommand(struct scsi_cmnd *cmnd,
        memcpy(srp_cmd->cdb, cmnd->cmnd, sizeof(cmnd->cmnd));
        srp_cmd->lun = ((u64) lun) << 48;
 
-       if (!map_data_for_srp_cmd(cmnd, srp_cmd, hostdata->dev)) {
+       if (!map_data_for_srp_cmd(cmnd, evt_struct, srp_cmd, hostdata->dev)) {
                printk(KERN_ERR "ibmvscsi: couldn't convert cmd to srp_cmd\n");
                free_event_struct(&hostdata->pool, evt_struct);
                return SCSI_MLQUEUE_HOST_BUSY;
        }
 
+       init_event_struct(evt_struct,
+                         handle_cmd_rsp,
+                         VIOSRP_SRP_FORMAT,
+                         cmnd->timeout_per_command/HZ);
+
+       evt_struct->cmnd = cmnd;
+       evt_struct->cmnd_done = done;
+
        /* Fix up dma address of the buffer itself */
-       if ((srp_cmd->data_out_format == SRP_INDIRECT_BUFFER) ||
-           (srp_cmd->data_in_format == SRP_INDIRECT_BUFFER)) {
-               struct indirect_descriptor *indirect =
-                   (struct indirect_descriptor *)srp_cmd->additional_data;
+       indirect = (struct indirect_descriptor *)srp_cmd->additional_data;
+       if (((srp_cmd->data_out_format == SRP_INDIRECT_BUFFER) ||
+           (srp_cmd->data_in_format == SRP_INDIRECT_BUFFER)) &&
+           (indirect->head.virtual_address == 0)) {
                indirect->head.virtual_address = evt_struct->crq.IU_data_ptr +
                    offsetof(struct srp_cmd, additional_data) +
                    offsetof(struct indirect_descriptor, list);
@@ -826,11 +895,13 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd)
        struct srp_event_struct *tmp_evt, *found_evt;
        union viosrp_iu srp_rsp;
        int rsp_rc;
+       unsigned long flags;
        u16 lun = lun_from_dev(cmd->device);
 
        /* First, find this command in our sent list so we can figure
         * out the correct tag
         */
+       spin_lock_irqsave(hostdata->host->host_lock, flags);
        found_evt = NULL;
        list_for_each_entry(tmp_evt, &hostdata->sent, list) {
                if (tmp_evt->cmnd == cmd) {
@@ -839,11 +910,14 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd)
                }
        }
 
-       if (!found_evt) 
+       if (!found_evt) {
+               spin_unlock_irqrestore(hostdata->host->host_lock, flags);
                return FAILED;
+       }
 
        evt = get_event_struct(&hostdata->pool);
        if (evt == NULL) {
+               spin_unlock_irqrestore(hostdata->host->host_lock, flags);
                printk(KERN_ERR "ibmvscsi: failed to allocate abort event\n");
                return FAILED;
        }
@@ -867,7 +941,9 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd)
 
        evt->sync_srp = &srp_rsp;
        init_completion(&evt->comp);
-       if (ibmvscsi_send_srp_event(evt, hostdata) != 0) {
+       rsp_rc = ibmvscsi_send_srp_event(evt, hostdata);
+       spin_unlock_irqrestore(hostdata->host->host_lock, flags);
+       if (rsp_rc != 0) {
                printk(KERN_ERR "ibmvscsi: failed to send abort() event\n");
                return FAILED;
        }
@@ -901,6 +977,7 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd)
         * The event is no longer in our list.  Make sure it didn't
         * complete while we were aborting
         */
+       spin_lock_irqsave(hostdata->host->host_lock, flags);
        found_evt = NULL;
        list_for_each_entry(tmp_evt, &hostdata->sent, list) {
                if (tmp_evt->cmnd == cmd) {
@@ -910,6 +987,7 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd)
        }
 
        if (found_evt == NULL) {
+               spin_unlock_irqrestore(hostdata->host->host_lock, flags);
                printk(KERN_INFO
                       "ibmvscsi: aborted task tag 0x%lx completed\n",
                       tsk_mgmt->managed_task_tag);
@@ -922,8 +1000,10 @@ static int ibmvscsi_eh_abort_handler(struct scsi_cmnd *cmd)
 
        cmd->result = (DID_ABORT << 16);
        list_del(&found_evt->list);
-       unmap_cmd_data(&found_evt->iu.srp.cmd, found_evt->hostdata->dev);
+       unmap_cmd_data(&found_evt->iu.srp.cmd, found_evt,
+                      found_evt->hostdata->dev);
        free_event_struct(&found_evt->hostdata->pool, found_evt);
+       spin_unlock_irqrestore(hostdata->host->host_lock, flags);
        atomic_inc(&hostdata->request_limit);
        return SUCCESS;
 }
@@ -943,10 +1023,13 @@ static int ibmvscsi_eh_device_reset_handler(struct scsi_cmnd *cmd)
        struct srp_event_struct *tmp_evt, *pos;
        union viosrp_iu srp_rsp;
        int rsp_rc;
+       unsigned long flags;
        u16 lun = lun_from_dev(cmd->device);
 
+       spin_lock_irqsave(hostdata->host->host_lock, flags);
        evt = get_event_struct(&hostdata->pool);
        if (evt == NULL) {
+               spin_unlock_irqrestore(hostdata->host->host_lock, flags);
                printk(KERN_ERR "ibmvscsi: failed to allocate reset event\n");
                return FAILED;
        }
@@ -969,7 +1052,9 @@ static int ibmvscsi_eh_device_reset_handler(struct scsi_cmnd *cmd)
 
        evt->sync_srp = &srp_rsp;
        init_completion(&evt->comp);
-       if (ibmvscsi_send_srp_event(evt, hostdata) != 0) {
+       rsp_rc = ibmvscsi_send_srp_event(evt, hostdata);
+       spin_unlock_irqrestore(hostdata->host->host_lock, flags);
+       if (rsp_rc != 0) {
                printk(KERN_ERR "ibmvscsi: failed to send reset event\n");
                return FAILED;
        }
@@ -1002,12 +1087,14 @@ static int ibmvscsi_eh_device_reset_handler(struct scsi_cmnd *cmd)
        /* We need to find all commands for this LUN that have not yet been
         * responded to, and fail them with DID_RESET
         */
+       spin_lock_irqsave(hostdata->host->host_lock, flags);
        list_for_each_entry_safe(tmp_evt, pos, &hostdata->sent, list) {
                if ((tmp_evt->cmnd) && (tmp_evt->cmnd->device == cmd->device)) {
                        if (tmp_evt->cmnd)
                                tmp_evt->cmnd->result = (DID_RESET << 16);
                        list_del(&tmp_evt->list);
-                       unmap_cmd_data(&tmp_evt->iu.srp.cmd, tmp_evt->hostdata->dev);
+                       unmap_cmd_data(&tmp_evt->iu.srp.cmd, tmp_evt,
+                                      tmp_evt->hostdata->dev);
                        free_event_struct(&tmp_evt->hostdata->pool,
                                                   tmp_evt);
                        atomic_inc(&hostdata->request_limit);
@@ -1017,6 +1104,7 @@ static int ibmvscsi_eh_device_reset_handler(struct scsi_cmnd *cmd)
                                tmp_evt->done(tmp_evt);
                }
        }
+       spin_unlock_irqrestore(hostdata->host->host_lock, flags);
        return SUCCESS;
 }
 
@@ -1035,6 +1123,7 @@ static void purge_requests(struct ibmvscsi_host_data *hostdata)
                if (tmp_evt->cmnd) {
                        tmp_evt->cmnd->result = (DID_ERROR << 16);
                        unmap_cmd_data(&tmp_evt->iu.srp.cmd, 
+                                      tmp_evt, 
                                       tmp_evt->hostdata->dev);
                        if (tmp_evt->cmnd_done)
                                tmp_evt->cmnd_done(tmp_evt->cmnd);
@@ -1339,7 +1428,7 @@ static struct scsi_host_template driver_template = {
        .cmd_per_lun = 16,
        .can_queue = 1,         /* Updated after SRP_LOGIN */
        .this_id = -1,
-       .sg_tablesize = MAX_INDIRECT_BUFS,
+       .sg_tablesize = SG_ALL,
        .use_clustering = ENABLE_CLUSTERING,
        .shost_attrs = ibmvscsi_attrs,
 };
index 1030b703c30e93ba415f2790aa7123712530dac7..8bec0438dc8a9151f3aed2b04a717a0ee6a65be2 100644 (file)
@@ -68,6 +68,8 @@ struct srp_event_struct {
        void (*cmnd_done) (struct scsi_cmnd *);
        struct completion comp;
        union viosrp_iu *sync_srp;
+       struct memory_descriptor *ext_list;
+       dma_addr_t ext_list_token;
 };
 
 /* a pool of event structs for use */
index 9fb9814525a35781a8d9086d701e6bd28012b48b..5cc53cd9323e5a9416fc7baf2ff22d8f233af653 100644 (file)
@@ -2531,7 +2531,7 @@ void swap_buf_le16(u16 *buf, unsigned int buf_words)
  *     @ap: port to read/write
  *     @buf: data buffer
  *     @buflen: buffer length
- *     @do_write: read/write
+ *     @write_data: read/write
  *
  *     Transfer data from/to the device data register by MMIO.
  *
@@ -2577,7 +2577,7 @@ static void ata_mmio_data_xfer(struct ata_port *ap, unsigned char *buf,
  *     @ap: port to read/write
  *     @buf: data buffer
  *     @buflen: buffer length
- *     @do_write: read/write
+ *     @write_data: read/write
  *
  *     Transfer data from/to the device data register by PIO.
  *
index 3bb82aae432e5d09d63a8c294732d0c55cc75729..adb95674823fb86e45dfb28b4f6a4aa4c285dd23 100644 (file)
@@ -342,9 +342,6 @@ struct lpfc_hba {
 #define VPD_MASK            0xf         /* mask for any vpd data */
 
        struct timer_list els_tmofunc;
-
-       void *link_stats;
-
        /*
         * stat  counters
         */
@@ -370,6 +367,8 @@ struct lpfc_hba {
        struct list_head freebufList;
        struct list_head ctrspbuflist;
        struct list_head rnidrspbuflist;
+
+       struct fc_host_statistics link_stats;
 };
 
 
index 3cea928830192b15a27db74a703902072d3a1b08..0e089a42c03ad310b000f2369633beb5d13f31a3 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/pci.h>
 #include <linux/interrupt.h>
 
+#include <scsi/scsi.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_tcq.h>
@@ -988,8 +989,7 @@ lpfc_get_stats(struct Scsi_Host *shost)
 {
        struct lpfc_hba *phba = (struct lpfc_hba *)shost->hostdata[0];
        struct lpfc_sli *psli = &phba->sli;
-       struct fc_host_statistics *hs =
-                       (struct fc_host_statistics *)phba->link_stats;
+       struct fc_host_statistics *hs = &phba->link_stats;
        LPFC_MBOXQ_t *pmboxq;
        MAILBOX_t *pmb;
        int rc=0;
@@ -1020,6 +1020,8 @@ lpfc_get_stats(struct Scsi_Host *shost)
                return NULL;
        }
 
+       memset(hs, 0, sizeof (struct fc_host_statistics));
+
        hs->tx_frames = pmb->un.varRdStatus.xmitFrameCnt;
        hs->tx_words = (pmb->un.varRdStatus.xmitByteCnt * 256);
        hs->rx_frames = pmb->un.varRdStatus.rcvFrameCnt;
index 78adee4699af668bca94db5515fc3176c0e4c11d..1280f0e54636806df9b36bfea2f927678731ed60 100644 (file)
 #include <linux/interrupt.h>
 #include <linux/utsname.h>
 
+#include <scsi/scsi.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
+#include <scsi/scsi_transport_fc.h>
 
 #include "lpfc_hw.h"
 #include "lpfc_sli.h"
index 2b1c9572dae728bfc50158ba82e1ee1f905c6ee4..63caf7fe97254b0084c74808669a53443d1297a4 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/pci.h>
 #include <linux/interrupt.h>
 
+#include <scsi/scsi.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_transport_fc.h>
index 233901e9dfde56b166ee77d9930286e7bc88d447..0a8269d6b130c0a4982f50eee6e8509985dca176 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/kthread.h>
 #include <linux/interrupt.h>
 
+#include <scsi/scsi.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_transport_fc.h>
@@ -1135,6 +1136,8 @@ lpfc_nlp_list(struct lpfc_hba * phba, struct lpfc_nodelist * nlp, int list)
        switch(list) {
        case NLP_NO_LIST: /* No list, just remove it */
                lpfc_nlp_remove(phba, nlp);
+               /* as node removed - stop further transport calls */
+               rport_del = none;
                break;
        case NLP_UNUSED_LIST:
                spin_lock_irq(phba->host->host_lock);
index 34d416d2b007b09893e2b716efabcd217e09642f..6f3cb59bf9e0a6b52b9778cdbd8b98e1ca97df74 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/pci.h>
 #include <linux/spinlock.h>
 
+#include <scsi/scsi.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_transport_fc.h>
@@ -1339,14 +1340,12 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)
        if (pci_request_regions(pdev, LPFC_DRIVER_NAME))
                goto out_disable_device;
 
-       host = scsi_host_alloc(&lpfc_template,
-                       sizeof (struct lpfc_hba) + sizeof (unsigned long));
+       host = scsi_host_alloc(&lpfc_template, sizeof (struct lpfc_hba));
        if (!host)
                goto out_release_regions;
 
        phba = (struct lpfc_hba*)host->hostdata;
        memset(phba, 0, sizeof (struct lpfc_hba));
-       phba->link_stats = (void *)&phba[1];
        phba->host = host;
 
        phba->fc_flag |= FC_LOADING;
index c27cf94795db52c7f3a520805443cb414963f356..73eb89f91593e79dcbd9a9bf8f123a87d45e4957 100644 (file)
 #include <linux/pci.h>
 #include <linux/interrupt.h>
 
+#include <scsi/scsi_device.h>
+#include <scsi/scsi_transport_fc.h>
+
+#include <scsi/scsi.h>
+
 #include "lpfc_hw.h"
 #include "lpfc_sli.h"
 #include "lpfc_disc.h"
index a5cfb6421fa94c002bce5dbe862c655649e5e6cb..0aba13ceaacfe9c2d6d976c882981df19aeb59bb 100644 (file)
 #include <linux/pci.h>
 #include <linux/interrupt.h>
 
+#include <scsi/scsi_device.h>
+#include <scsi/scsi_transport_fc.h>
+
+#include <scsi/scsi.h>
+
 #include "lpfc_hw.h"
 #include "lpfc_sli.h"
 #include "lpfc_disc.h"
index 45dc0210fc49581d0c63a6e0d8a5a52cbc0a2d1d..9b35eaac781de35f051787d9daa8d0396834373b 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/pci.h>
 #include <linux/interrupt.h>
 
+#include <scsi/scsi.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_transport_fc.h>
index 17e4974d4445aca881e07f115d16d0f744141e08..b5ad1871d34b3d71e8a11a1b39127b11e323e004 100644 (file)
 #define LPFC_RESET_WAIT  2
 #define LPFC_ABORT_WAIT  2
 
-static inline void lpfc_put_lun(struct fcp_cmnd *fcmd, unsigned int lun)
-{
-       fcmd->fcpLunLsl = 0;
-       fcmd->fcpLunMsl = swab16((uint16_t)lun);
-}
 
 /*
  * This routine allocates a scsi buffer, which contains all the necessary
@@ -238,6 +233,8 @@ lpfc_scsi_prep_dma_buf(struct lpfc_hba * phba, struct lpfc_scsi_buf * lpfc_cmd)
                bpl->tus.f.bdeSize = scsi_cmnd->request_bufflen;
                if (datadir == DMA_TO_DEVICE)
                        bpl->tus.f.bdeFlags = 0;
+               else
+                       bpl->tus.f.bdeFlags = BUFF_USE_RCV;
                bpl->tus.w = le32_to_cpu(bpl->tus.w);
                num_bde = 1;
                bpl++;
@@ -245,8 +242,11 @@ lpfc_scsi_prep_dma_buf(struct lpfc_hba * phba, struct lpfc_scsi_buf * lpfc_cmd)
 
        /*
         * Finish initializing those IOCB fields that are dependent on the
-        * scsi_cmnd request_buffer
+        * scsi_cmnd request_buffer.  Note that the bdeSize is explicitly
+        * reinitialized since all iocb memory resources are used many times
+        * for transmit, receive, and continuation bpl's.
         */
+       iocb_cmd->un.fcpi64.bdl.bdeSize = (2 * sizeof (struct ulp_bde64));
        iocb_cmd->un.fcpi64.bdl.bdeSize +=
                (num_bde * sizeof (struct ulp_bde64));
        iocb_cmd->ulpBdeCount = 1;
@@ -445,8 +445,11 @@ lpfc_scsi_prep_cmnd(struct lpfc_hba * phba, struct lpfc_scsi_buf * lpfc_cmd,
        int datadir = scsi_cmnd->sc_data_direction;
 
        lpfc_cmd->fcp_rsp->rspSnsLen = 0;
+       /* clear task management bits */
+       lpfc_cmd->fcp_cmnd->fcpCntl2 = 0;
 
-       lpfc_put_lun(lpfc_cmd->fcp_cmnd, lpfc_cmd->pCmd->device->lun);
+       int_to_scsilun(lpfc_cmd->pCmd->device->lun,
+                       &lpfc_cmd->fcp_cmnd->fcp_lun);
 
        memcpy(&fcp_cmnd->fcpCdb[0], scsi_cmnd->cmnd, 16);
 
@@ -545,7 +548,8 @@ lpfc_scsi_prep_task_mgmt_cmd(struct lpfc_hba *phba,
        piocb = &piocbq->iocb;
 
        fcp_cmnd = lpfc_cmd->fcp_cmnd;
-       lpfc_put_lun(lpfc_cmd->fcp_cmnd, lpfc_cmd->pCmd->device->lun);
+       int_to_scsilun(lpfc_cmd->pCmd->device->lun,
+                       &lpfc_cmd->fcp_cmnd->fcp_lun);
        fcp_cmnd->fcpCntl2 = task_mgmt_cmd;
 
        piocb->ulpCommand = CMD_FCP_ICMND64_CR;
@@ -746,6 +750,10 @@ lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
                        cmnd->result = ScsiResult(DID_NO_CONNECT, 0);
                        goto out_fail_command;
                }
+               else if (ndlp->nlp_state == NLP_STE_NPR_NODE) {
+                       cmnd->result = ScsiResult(DID_BUS_BUSY, 0);
+                       goto out_fail_command;
+               }
                /*
                 * The device is most likely recovered and the driver
                 * needs a bit more time to finish.  Ask the midlayer
index 0fd9ba14e1b587c1ad03904f80fce15a826a549d..acd64c49e849051707f95e0a26789ca1d021750d 100644 (file)
@@ -78,18 +78,7 @@ struct fcp_rsp {
 };
 
 struct fcp_cmnd {
-       uint32_t fcpLunMsl;     /* most  significant lun word (32 bits) */
-       uint32_t fcpLunLsl;     /* least significant lun word (32 bits) */
-       /* # of bits to shift lun id to end up in right
-        * payload word, little endian = 8, big = 16.
-        */
-#ifdef __BIG_ENDIAN
-#define FC_LUN_SHIFT         16
-#define FC_ADDR_MODE_SHIFT   24
-#else  /*  __LITTLE_ENDIAN */
-#define FC_LUN_SHIFT         8
-#define FC_ADDR_MODE_SHIFT   0
-#endif
+       struct scsi_lun  fcp_lun;
 
        uint8_t fcpCntl0;       /* FCP_CNTL byte 0 (reserved) */
        uint8_t fcpCntl1;       /* FCP_CNTL byte 1 task codes */
index 1775508ed2762e88918cdc25a89b978932a8adf9..e74e224fd77c2ddb7323fcc57796918a826fda9b 100644 (file)
 #include <linux/interrupt.h>
 #include <linux/delay.h>
 
+#include <scsi/scsi.h>
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
+#include <scsi/scsi_transport_fc.h>
 
 #include "lpfc_hw.h"
 #include "lpfc_sli.h"
index 47dea48ee0ecf8e476bca2cd9189f6d5e8be9a60..7e6747b06f904401554f8ca2a831d7b8fac81f33 100644 (file)
@@ -18,7 +18,7 @@
  * included with this package.                                     *
  *******************************************************************/
 
-#define LPFC_DRIVER_VERSION "8.0.29"
+#define LPFC_DRIVER_VERSION "8.0.30"
 
 #define LPFC_DRIVER_NAME "lpfc"
 
index b993652bfa25d3acaaa7332b3ade101a8bd9310f..637fb6565d2845dc32a81606f93d09f263b01921 100644 (file)
@@ -996,7 +996,6 @@ qla1280_error_action(struct scsi_cmnd *cmd, enum action action)
                break;
 
        case ABORT_DEVICE:
-               ha->flags.in_reset = 1;
                if (qla1280_verbose)
                        printk(KERN_INFO
                               "scsi(%ld:%d:%d:%d): Queueing abort device "
@@ -1010,7 +1009,6 @@ qla1280_error_action(struct scsi_cmnd *cmd, enum action action)
                        printk(KERN_INFO
                               "scsi(%ld:%d:%d:%d): Queueing device reset "
                               "command.\n", ha->host_no, bus, target, lun);
-               ha->flags.in_reset = 1;
                if (qla1280_device_reset(ha, bus, target) == 0)
                        result = SUCCESS;
                break;
@@ -1019,7 +1017,6 @@ qla1280_error_action(struct scsi_cmnd *cmd, enum action action)
                if (qla1280_verbose)
                        printk(KERN_INFO "qla1280(%ld:%d): Issuing BUS "
                               "DEVICE RESET\n", ha->host_no, bus);
-               ha->flags.in_reset = 1;
                if (qla1280_bus_reset(ha, bus == 0))
                        result = SUCCESS;
 
@@ -1047,7 +1044,6 @@ qla1280_error_action(struct scsi_cmnd *cmd, enum action action)
 
        if (!list_empty(&ha->done_q))
                qla1280_done(ha);
-       ha->flags.in_reset = 0;
 
        /* If we didn't manage to issue the action, or we have no
         * command to wait for, exit here */
@@ -1269,6 +1265,22 @@ qla1280_biosparam_old(Disk * disk, kdev_t dev, int geom[])
        return qla1280_biosparam(disk->device, NULL, disk->capacity, geom);
 }
 #endif
+/* disable risc and host interrupts */
+static inline void
+qla1280_disable_intrs(struct scsi_qla_host *ha)
+{
+       WRT_REG_WORD(&ha->iobase->ictrl, 0);
+       RD_REG_WORD(&ha->iobase->ictrl);        /* PCI Posted Write flush */
+}
+
+/* enable risc and host interrupts */
+static inline void
+qla1280_enable_intrs(struct scsi_qla_host *ha)
+{
+       WRT_REG_WORD(&ha->iobase->ictrl, (ISP_EN_INT | ISP_EN_RISC));
+       RD_REG_WORD(&ha->iobase->ictrl);        /* PCI Posted Write flush */
+}
 
 /**************************************************************************
  * qla1280_intr_handler
@@ -1290,7 +1302,7 @@ qla1280_intr_handler(int irq, void *dev_id, struct pt_regs *regs)
        ha->isr_count++;
        reg = ha->iobase;
 
-       WRT_REG_WORD(&reg->ictrl, 0);   /* disable our interrupt. */
+       qla1280_disable_intrs(ha);
 
        data = qla1280_debounce_register(&reg->istatus);
        /* Check for pending interrupts. */
@@ -1303,8 +1315,7 @@ qla1280_intr_handler(int irq, void *dev_id, struct pt_regs *regs)
 
        spin_unlock(HOST_LOCK);
 
-       /* enable our interrupt. */
-       WRT_REG_WORD(&reg->ictrl, (ISP_EN_INT | ISP_EN_RISC));
+       qla1280_enable_intrs(ha);
 
        LEAVE_INTR("qla1280_intr_handler");
        return IRQ_RETVAL(handled);
@@ -1317,7 +1328,7 @@ qla1280_set_target_parameters(struct scsi_qla_host *ha, int bus, int target)
        uint8_t mr;
        uint16_t mb[MAILBOX_REGISTER_COUNT];
        struct nvram *nv;
-       int status;
+       int status, lun;
 
        nv = &ha->nvram;
 
@@ -1325,24 +1336,38 @@ qla1280_set_target_parameters(struct scsi_qla_host *ha, int bus, int target)
 
        /* Set Target Parameters. */
        mb[0] = MBC_SET_TARGET_PARAMETERS;
-       mb[1] = (uint16_t) (bus ? target | BIT_7 : target);
-       mb[1] <<= 8;
-
-       mb[2] = (nv->bus[bus].target[target].parameter.c << 8);
+       mb[1] = (uint16_t)((bus ? target | BIT_7 : target) << 8);
+       mb[2] = nv->bus[bus].target[target].parameter.renegotiate_on_error << 8;
+       mb[2] |= nv->bus[bus].target[target].parameter.stop_queue_on_check << 9;
+       mb[2] |= nv->bus[bus].target[target].parameter.auto_request_sense << 10;
+       mb[2] |= nv->bus[bus].target[target].parameter.tag_queuing << 11;
+       mb[2] |= nv->bus[bus].target[target].parameter.enable_sync << 12;
+       mb[2] |= nv->bus[bus].target[target].parameter.enable_wide << 13;
+       mb[2] |= nv->bus[bus].target[target].parameter.parity_checking << 14;
+       mb[2] |= nv->bus[bus].target[target].parameter.disconnect_allowed << 15;
 
        if (IS_ISP1x160(ha)) {
                mb[2] |= nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr << 5;
-               mb[3] = (nv->bus[bus].target[target].flags.flags1x160.sync_offset << 8) |
-                        nv->bus[bus].target[target].sync_period;
+               mb[3] = (nv->bus[bus].target[target].flags.flags1x160.sync_offset << 8);
                mb[6] = (nv->bus[bus].target[target].ppr_1x160.flags.ppr_options << 8) |
                         nv->bus[bus].target[target].ppr_1x160.flags.ppr_bus_width;
                mr |= BIT_6;
        } else {
-               mb[3] = (nv->bus[bus].target[target].flags.flags1x80.sync_offset << 8) |
-                        nv->bus[bus].target[target].sync_period;
+               mb[3] = (nv->bus[bus].target[target].flags.flags1x80.sync_offset << 8);
        }
+       mb[3] |= nv->bus[bus].target[target].sync_period;
 
-       status = qla1280_mailbox_command(ha, mr, &mb[0]);
+       status = qla1280_mailbox_command(ha, mr, mb);
+
+       /* Set Device Queue Parameters. */
+       for (lun = 0; lun < MAX_LUNS; lun++) {
+               mb[0] = MBC_SET_DEVICE_QUEUE;
+               mb[1] = (uint16_t)((bus ? target | BIT_7 : target) << 8);
+               mb[1] |= lun;
+               mb[2] = nv->bus[bus].max_queue_depth;
+               mb[3] = nv->bus[bus].target[target].execution_throttle;
+               status |= qla1280_mailbox_command(ha, 0x0f, mb);
+       }
 
        if (status)
                printk(KERN_WARNING "scsi(%ld:%i:%i): "
@@ -1389,19 +1414,19 @@ qla1280_slave_configure(struct scsi_device *device)
        }
 
 #if LINUX_VERSION_CODE > 0x020500
-       nv->bus[bus].target[target].parameter.f.enable_sync = device->sdtr;
-       nv->bus[bus].target[target].parameter.f.enable_wide = device->wdtr;
+       nv->bus[bus].target[target].parameter.enable_sync = device->sdtr;
+       nv->bus[bus].target[target].parameter.enable_wide = device->wdtr;
        nv->bus[bus].target[target].ppr_1x160.flags.enable_ppr = device->ppr;
 #endif
 
        if (driver_setup.no_sync ||
            (driver_setup.sync_mask &&
             (~driver_setup.sync_mask & (1 << target))))
-               nv->bus[bus].target[target].parameter.f.enable_sync = 0;
+               nv->bus[bus].target[target].parameter.enable_sync = 0;
        if (driver_setup.no_wide ||
            (driver_setup.wide_mask &&
             (~driver_setup.wide_mask & (1 << target))))
-               nv->bus[bus].target[target].parameter.f.enable_wide = 0;
+               nv->bus[bus].target[target].parameter.enable_wide = 0;
        if (IS_ISP1x160(ha)) {
                if (driver_setup.no_ppr ||
                    (driver_setup.ppr_mask &&
@@ -1410,7 +1435,7 @@ qla1280_slave_configure(struct scsi_device *device)
        }
 
        spin_lock_irqsave(HOST_LOCK, flags);
-       if (nv->bus[bus].target[target].parameter.f.enable_sync)
+       if (nv->bus[bus].target[target].parameter.enable_sync)
                status = qla1280_set_target_parameters(ha, bus, target);
        qla1280_get_target_parameters(ha, device);
        spin_unlock_irqrestore(HOST_LOCK, flags);
@@ -1448,7 +1473,6 @@ qla1280_select_queue_depth(struct Scsi_Host *host, struct scsi_device *sdev_q)
  *
  * Input:
  *      ha           = adapter block pointer.
- *      done_q       = done queue.
  */
 static void
 qla1280_done(struct scsi_qla_host *ha)
@@ -1522,7 +1546,7 @@ qla1280_return_status(struct response * sts, struct scsi_cmnd *cp)
        int host_status = DID_ERROR;
        uint16_t comp_status = le16_to_cpu(sts->comp_status);
        uint16_t state_flags = le16_to_cpu(sts->state_flags);
-       uint16_t residual_length = le16_to_cpu(sts->residual_length);
+       uint16_t residual_length = le32_to_cpu(sts->residual_length);
        uint16_t scsi_status = le16_to_cpu(sts->scsi_status);
 #if DEBUG_QLA1280_INTR
        static char *reason[] = {
@@ -1582,7 +1606,7 @@ qla1280_return_status(struct response * sts, struct scsi_cmnd *cp)
 
        case CS_DATA_OVERRUN:
                dprintk(2, "Data overrun 0x%x\n", residual_length);
-               dprintk(2, "qla1280_isr: response packet data\n");
+               dprintk(2, "qla1280_return_status: response packet data\n");
                qla1280_dump_buffer(2, (char *)sts, RESPONSE_ENTRY_SIZE);
                host_status = DID_ERROR;
                break;
@@ -1617,40 +1641,6 @@ qla1280_return_status(struct response * sts, struct scsi_cmnd *cp)
 /*                QLogic ISP1280 Hardware Support Functions.                */
 /****************************************************************************/
 
- /*
-  * qla2100_enable_intrs
-  * qla2100_disable_intrs
-  *
-  * Input:
-  *      ha = adapter block pointer.
-  *
-  * Returns:
-  *      None
-  */
-static inline void
-qla1280_enable_intrs(struct scsi_qla_host *ha)
-{
-       struct device_reg __iomem *reg;
-
-       reg = ha->iobase;
-       /* enable risc and host interrupts */
-       WRT_REG_WORD(&reg->ictrl, (ISP_EN_INT | ISP_EN_RISC));
-       RD_REG_WORD(&reg->ictrl);       /* PCI Posted Write flush */
-       ha->flags.ints_enabled = 1;
-}
-
-static inline void
-qla1280_disable_intrs(struct scsi_qla_host *ha)
-{
-       struct device_reg __iomem *reg;
-
-       reg = ha->iobase;
-       /* disable risc and host interrupts */
-       WRT_REG_WORD(&reg->ictrl, 0);
-       RD_REG_WORD(&reg->ictrl);       /* PCI Posted Write flush */
-       ha->flags.ints_enabled = 0;
-}
-
 /*
  * qla1280_initialize_adapter
  *      Initialize board.
@@ -1679,7 +1669,6 @@ qla1280_initialize_adapter(struct scsi_qla_host *ha)
        ha->flags.reset_active = 0;
        ha->flags.abort_isp_active = 0;
 
-       ha->flags.ints_enabled = 0;
 #if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2)
        if (ia64_platform_is("sn2")) {
                printk(KERN_INFO "scsi(%li): Enabling SN2 PCI DMA "
@@ -1758,69 +1747,6 @@ qla1280_initialize_adapter(struct scsi_qla_host *ha)
        return status;
 }
 
-
-/*
- * ISP Firmware Test
- *      Checks if present version of RISC firmware is older than
- *      driver firmware.
- *
- * Input:
- *      ha = adapter block pointer.
- *
- * Returns:
- *      0 = firmware does not need to be loaded.
- */
-static int
-qla1280_isp_firmware(struct scsi_qla_host *ha)
-{
-       struct nvram *nv = (struct nvram *) ha->response_ring;
-       int status = 0;         /* dg 2/27 always loads RISC */
-       uint16_t mb[MAILBOX_REGISTER_COUNT];
-
-       ENTER("qla1280_isp_firmware");
-
-       dprintk(1, "scsi(%li): Determining if RISC is loaded\n", ha->host_no);
-
-       /* Bad NVRAM data, load RISC code. */
-       if (!ha->nvram_valid) {
-               ha->flags.disable_risc_code_load = 0;
-       } else
-               ha->flags.disable_risc_code_load =
-                       nv->cntr_flags_1.disable_loading_risc_code;
-
-       if (ha->flags.disable_risc_code_load) {
-               dprintk(3, "qla1280_isp_firmware: Telling RISC to verify "
-                       "checksum of loaded BIOS code.\n");
-
-               /* Verify checksum of loaded RISC code. */
-               mb[0] = MBC_VERIFY_CHECKSUM;
-               /* mb[1] = ql12_risc_code_addr01; */
-               mb[1] = *ql1280_board_tbl[ha->devnum].fwstart;
-
-               if (!(status =
-                     qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]))) {
-                       /* Start firmware execution. */
-                       dprintk(3, "qla1280_isp_firmware: Startng F/W "
-                               "execution.\n");
-
-                       mb[0] = MBC_EXECUTE_FIRMWARE;
-                       /* mb[1] = ql12_risc_code_addr01; */
-                       mb[1] = *ql1280_board_tbl[ha->devnum].fwstart;
-                       qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]);
-               } else
-                       printk(KERN_INFO "qla1280: RISC checksum failed.\n");
-       } else {
-               dprintk(1, "qla1280: NVRAM configured to load RISC load.\n");
-               status = 1;
-       }
-
-       if (status)
-               dprintk(2, "qla1280_isp_firmware: **** Load RISC code ****\n");
-
-       LEAVE("qla1280_isp_firmware");
-       return status;
-}
-
 /*
  * Chip diagnostics
  *      Test chip for proper operation.
@@ -2006,7 +1932,7 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha)
                        "%d,%d(0x%x)\n",
                        risc_code_address, cnt, num, risc_address);
                for(i = 0; i < cnt; i++)
-                       ((uint16_t *)ha->request_ring)[i] =
+                       ((__le16 *)ha->request_ring)[i] =
                                cpu_to_le16(risc_code_address[i]);
 
                mb[0] = MBC_LOAD_RAM;
@@ -2085,7 +2011,7 @@ qla1280_start_firmware(struct scsi_qla_host *ha)
        mb[1] = *ql1280_board_tbl[ha->devnum].fwstart;
        err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb);
        if (err) {
-               printk(KERN_ERR "scsi(%li): Failed checksum\n", ha->host_no);
+               printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no);
                return err;
        }
 
@@ -2105,14 +2031,7 @@ qla1280_start_firmware(struct scsi_qla_host *ha)
 static int
 qla1280_load_firmware(struct scsi_qla_host *ha)
 {
-       int err = -ENODEV;
-
-       /* If firmware needs to be loaded */
-       if (!qla1280_isp_firmware(ha)) {
-               printk(KERN_ERR "scsi(%li): isp_firmware() failed!\n",
-                               ha->host_no);
-               goto out;
-       }
+       int err;
 
        err = qla1280_chip_diag(ha);
        if (err)
@@ -2246,17 +2165,17 @@ qla1280_set_target_defaults(struct scsi_qla_host *ha, int bus, int target)
 {
        struct nvram *nv = &ha->nvram;
 
-       nv->bus[bus].target[target].parameter.f.renegotiate_on_error = 1;
-       nv->bus[bus].target[target].parameter.f.auto_request_sense = 1;
-       nv->bus[bus].target[target].parameter.f.tag_queuing = 1;
-       nv->bus[bus].target[target].parameter.f.enable_sync = 1;
+       nv->bus[bus].target[target].parameter.renegotiate_on_error = 1;
+       nv->bus[bus].target[target].parameter.auto_request_sense = 1;
+       nv->bus[bus].target[target].parameter.tag_queuing = 1;
+       nv->bus[bus].target[target].parameter.enable_sync = 1;
 #if 1  /* Some SCSI Processors do not seem to like this */
-       nv->bus[bus].target[target].parameter.f.enable_wide = 1;
+       nv->bus[bus].target[target].parameter.enable_wide = 1;
 #endif
-       nv->bus[bus].target[target].parameter.f.parity_checking = 1;
-       nv->bus[bus].target[target].parameter.f.disconnect_allowed = 1;
        nv->bus[bus].target[target].execution_throttle =
                nv->bus[bus].max_queue_depth - 1;
+       nv->bus[bus].target[target].parameter.parity_checking = 1;
+       nv->bus[bus].target[target].parameter.disconnect_allowed = 1;
 
        if (IS_ISP1x160(ha)) {
                nv->bus[bus].target[target].flags.flags1x160.device_enable = 1;
@@ -2284,9 +2203,9 @@ qla1280_set_defaults(struct scsi_qla_host *ha)
        /* nv->cntr_flags_1.disable_loading_risc_code = 1; */
        nv->firmware_feature.f.enable_fast_posting = 1;
        nv->firmware_feature.f.disable_synchronous_backoff = 1;
-       nv->termination.f.scsi_bus_0_control = 3;
-       nv->termination.f.scsi_bus_1_control = 3;
-       nv->termination.f.auto_term_support = 1;
+       nv->termination.scsi_bus_0_control = 3;
+       nv->termination.scsi_bus_1_control = 3;
+       nv->termination.auto_term_support = 1;
 
        /*
         * Set default FIFO magic - What appropriate values would be here
@@ -2296,7 +2215,12 @@ qla1280_set_defaults(struct scsi_qla_host *ha)
         * header file provided by QLogic seems to be bogus or incomplete
         * at best.
         */
-       nv->isp_config.c = ISP_CFG1_BENAB|ISP_CFG1_F128;
+       nv->isp_config.burst_enable = 1;
+       if (IS_ISP1040(ha))
+               nv->isp_config.fifo_threshold |= 3;
+       else
+               nv->isp_config.fifo_threshold |= 4;
+
        if (IS_ISP1x160(ha))
                nv->isp_parameter = 0x01; /* fast memory enable */
 
@@ -2327,66 +2251,53 @@ qla1280_config_target(struct scsi_qla_host *ha, int bus, int target)
        struct nvram *nv = &ha->nvram;
        uint16_t mb[MAILBOX_REGISTER_COUNT];
        int status, lun;
+       uint16_t flag;
 
        /* Set Target Parameters. */
        mb[0] = MBC_SET_TARGET_PARAMETERS;
-       mb[1] = (uint16_t) (bus ? target | BIT_7 : target);
-       mb[1] <<= 8;
-
-       /*
-        * Do not enable wide, sync, and ppr for the initial
-        * INQUIRY run. We enable this later if we determine
-        * the target actually supports it.
-        */
-       nv->bus[bus].target[target].parameter.f.
-               auto_request_sense = 1;
-       nv->bus[bus].target[target].parameter.f.
-               stop_queue_on_check = 0;
-
-       if (IS_ISP1x160(ha))
-               nv->bus[bus].target[target].ppr_1x160.
-                       flags.enable_ppr = 0;
+       mb[1] = (uint16_t)((bus ? target | BIT_7 : target) << 8);
 
        /*
-        * No sync, wide, etc. while probing
+        * Do not enable sync and ppr for the initial INQUIRY run. We
+        * enable this later if we determine the target actually
+        * supports it.
         */
-       mb[2] = (nv->bus[bus].target[target].parameter.c << 8) &
-               ~(TP_SYNC /*| TP_WIDE | TP_PPR*/);
+       mb[2] = (TP_RENEGOTIATE | TP_AUTO_REQUEST_SENSE | TP_TAGGED_QUEUE
+                | TP_WIDE | TP_PARITY | TP_DISCONNECT);
 
        if (IS_ISP1x160(ha))
                mb[3] = nv->bus[bus].target[target].flags.flags1x160.sync_offset << 8;
        else
                mb[3] = nv->bus[bus].target[target].flags.flags1x80.sync_offset << 8;
        mb[3] |= nv->bus[bus].target[target].sync_period;
-
-       status = qla1280_mailbox_command(ha, BIT_3 | BIT_2 | BIT_1 | BIT_0, &mb[0]);
+       status = qla1280_mailbox_command(ha, 0x0f, mb);
 
        /* Save Tag queuing enable flag. */
-       mb[0] = BIT_0 << target;
-       if (nv->bus[bus].target[target].parameter.f.tag_queuing)
-               ha->bus_settings[bus].qtag_enables |= mb[0];
+       flag = (BIT_0 << target) & mb[0];
+       if (nv->bus[bus].target[target].parameter.tag_queuing)
+               ha->bus_settings[bus].qtag_enables |= flag;
 
        /* Save Device enable flag. */
        if (IS_ISP1x160(ha)) {
                if (nv->bus[bus].target[target].flags.flags1x160.device_enable)
-                       ha->bus_settings[bus].device_enables |= mb[0];
+                       ha->bus_settings[bus].device_enables |= flag;
                ha->bus_settings[bus].lun_disables |= 0;
        } else {
                if (nv->bus[bus].target[target].flags.flags1x80.device_enable)
-                       ha->bus_settings[bus].device_enables |= mb[0];
+                       ha->bus_settings[bus].device_enables |= flag;
                /* Save LUN disable flag. */
                if (nv->bus[bus].target[target].flags.flags1x80.lun_disable)
-                       ha->bus_settings[bus].lun_disables |= mb[0];
+                       ha->bus_settings[bus].lun_disables |= flag;
        }
 
        /* Set Device Queue Parameters. */
        for (lun = 0; lun < MAX_LUNS; lun++) {
                mb[0] = MBC_SET_DEVICE_QUEUE;
-               mb[1] = (uint16_t)(bus ? target | BIT_7 : target);
-               mb[1] = mb[1] << 8 | lun;
+               mb[1] = (uint16_t)((bus ? target | BIT_7 : target) << 8);
+               mb[1] |= lun;
                mb[2] = nv->bus[bus].max_queue_depth;
                mb[3] = nv->bus[bus].target[target].execution_throttle;
-               status |= qla1280_mailbox_command(ha, 0x0f, &mb[0]);
+               status |= qla1280_mailbox_command(ha, 0x0f, mb);
        }
 
        return status;
@@ -2431,7 +2342,6 @@ qla1280_nvram_config(struct scsi_qla_host *ha)
        struct nvram *nv = &ha->nvram;
        int bus, target, status = 0;
        uint16_t mb[MAILBOX_REGISTER_COUNT];
-       uint16_t mask;
 
        ENTER("qla1280_nvram_config");
 
@@ -2439,7 +2349,7 @@ qla1280_nvram_config(struct scsi_qla_host *ha)
                /* Always force AUTO sense for LINUX SCSI */
                for (bus = 0; bus < MAX_BUSES; bus++)
                        for (target = 0; target < MAX_TARGETS; target++) {
-                               nv->bus[bus].target[target].parameter.f.
+                               nv->bus[bus].target[target].parameter.
                                        auto_request_sense = 1;
                        }
        } else {
@@ -2457,31 +2367,40 @@ qla1280_nvram_config(struct scsi_qla_host *ha)
 
                hwrev = RD_REG_WORD(&reg->cfg_0) & ISP_CFG0_HWMSK;
 
-               cfg1 = RD_REG_WORD(&reg->cfg_1);
+               cfg1 = RD_REG_WORD(&reg->cfg_1) & ~(BIT_4 | BIT_5 | BIT_6);
                cdma_conf = RD_REG_WORD(&reg->cdma_cfg);
                ddma_conf = RD_REG_WORD(&reg->ddma_cfg);
 
                /* Busted fifo, says mjacob. */
-               if (hwrev == ISP_CFG0_1040A)
-                       WRT_REG_WORD(&reg->cfg_1, cfg1 | ISP_CFG1_F64);
-               else
-                       WRT_REG_WORD(&reg->cfg_1, cfg1 | ISP_CFG1_F64 | ISP_CFG1_BENAB);
+               if (hwrev != ISP_CFG0_1040A)
+                       cfg1 |= nv->isp_config.fifo_threshold << 4;
+
+               cfg1 |= nv->isp_config.burst_enable << 2;
+               WRT_REG_WORD(&reg->cfg_1, cfg1);
 
                WRT_REG_WORD(&reg->cdma_cfg, cdma_conf | CDMA_CONF_BENAB);
                WRT_REG_WORD(&reg->ddma_cfg, cdma_conf | DDMA_CONF_BENAB);
        } else {
+               uint16_t cfg1, term;
+
                /* Set ISP hardware DMA burst */
-               mb[0] = nv->isp_config.c;
+               cfg1 = nv->isp_config.fifo_threshold << 4;
+               cfg1 |= nv->isp_config.burst_enable << 2;
                /* Enable DMA arbitration on dual channel controllers */
                if (ha->ports > 1)
-                       mb[0] |= BIT_13;
-               WRT_REG_WORD(&reg->cfg_1, mb[0]);
+                       cfg1 |= BIT_13;
+               WRT_REG_WORD(&reg->cfg_1, cfg1);
 
                /* Set SCSI termination. */
-               WRT_REG_WORD(&reg->gpio_enable, (BIT_3 + BIT_2 + BIT_1 + BIT_0));
-               mb[0] = nv->termination.c & (BIT_3 + BIT_2 + BIT_1 + BIT_0);
-               WRT_REG_WORD(&reg->gpio_data, mb[0]);
+               WRT_REG_WORD(&reg->gpio_enable,
+                            BIT_7 | BIT_3 | BIT_2 | BIT_1 | BIT_0);
+               term = nv->termination.scsi_bus_1_control;
+               term |= nv->termination.scsi_bus_0_control << 2;
+               term |= nv->termination.auto_term_support << 7;
+               RD_REG_WORD(&reg->id_l);        /* Flush PCI write */
+               WRT_REG_WORD(&reg->gpio_data, term);
        }
+       RD_REG_WORD(&reg->id_l);        /* Flush PCI write */
 
        /* ISP parameter word. */
        mb[0] = MBC_SET_SYSTEM_PARAMETER;
@@ -2497,16 +2416,17 @@ qla1280_nvram_config(struct scsi_qla_host *ha)
 
        /* Firmware feature word. */
        mb[0] = MBC_SET_FIRMWARE_FEATURES;
-       mask = BIT_5 | BIT_1 | BIT_0;
-       mb[1] = le16_to_cpu(nv->firmware_feature.w) & (mask);
+       mb[1] = nv->firmware_feature.f.enable_fast_posting;
+       mb[1] |= nv->firmware_feature.f.report_lvd_bus_transition << 1;
+       mb[1] |= nv->firmware_feature.f.disable_synchronous_backoff << 5;
 #if defined(CONFIG_IA64_GENERIC) || defined (CONFIG_IA64_SGI_SN2)
        if (ia64_platform_is("sn2")) {
                printk(KERN_INFO "scsi(%li): Enabling SN2 PCI DMA "
                       "workaround\n", ha->host_no);
-               mb[1] |= BIT_9;
+               mb[1] |= nv->firmware_feature.f.unused_9 << 9; /* XXX */
        }
 #endif
-       status |= qla1280_mailbox_command(ha, mask, &mb[0]);
+       status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb);
 
        /* Retry count and delay. */
        mb[0] = MBC_SET_RETRY_COUNT;
@@ -2535,27 +2455,27 @@ qla1280_nvram_config(struct scsi_qla_host *ha)
                mb[2] |= BIT_5;
        if (nv->bus[1].config_2.data_line_active_negation)
                mb[2] |= BIT_4;
-       status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]);
+       status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb);
 
        mb[0] = MBC_SET_DATA_OVERRUN_RECOVERY;
        mb[1] = 2;      /* Reset SCSI bus and return all outstanding IO */
-       status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]);
+       status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb);
 
        /* thingy */
        mb[0] = MBC_SET_PCI_CONTROL;
-       mb[1] = 2;      /* Data DMA Channel Burst Enable */
-       mb[2] = 2;      /* Command DMA Channel Burst Enable */
-       status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]);
+       mb[1] = BIT_1;  /* Data DMA Channel Burst Enable */
+       mb[2] = BIT_1;  /* Command DMA Channel Burst Enable */
+       status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb);
 
        mb[0] = MBC_SET_TAG_AGE_LIMIT;
        mb[1] = 8;
-       status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]);
+       status |= qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb);
 
        /* Selection timeout. */
        mb[0] = MBC_SET_SELECTION_TIMEOUT;
        mb[1] = nv->bus[0].selection_timeout;
        mb[2] = nv->bus[1].selection_timeout;
-       status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, &mb[0]);
+       status |= qla1280_mailbox_command(ha, BIT_2 | BIT_1 | BIT_0, mb);
 
        for (bus = 0; bus < ha->ports; bus++)
                status |= qla1280_config_bus(ha, bus);
@@ -3066,7 +2986,7 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
        struct scsi_cmnd *cmd = sp->cmd;
        cmd_a64_entry_t *pkt;
        struct scatterlist *sg = NULL;
-       u32 *dword_ptr;
+       __le32 *dword_ptr;
        dma_addr_t dma_handle;
        int status = 0;
        int cnt;
@@ -3104,10 +3024,13 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
                                REQUEST_ENTRY_CNT - (ha->req_ring_index - cnt);
        }
 
+       dprintk(3, "Number of free entries=(%d) seg_cnt=0x%x\n",
+               ha->req_q_cnt, seg_cnt);
+
        /* If room for request in request ring. */
        if ((req_cnt + 2) >= ha->req_q_cnt) {
                status = 1;
-               dprintk(2, "qla1280_64bit_start_scsi: in-ptr=0x%x  req_q_cnt="
+               dprintk(2, "qla1280_start_scsi: in-ptr=0x%x  req_q_cnt="
                        "0x%xreq_cnt=0x%x", ha->req_ring_index, ha->req_q_cnt,
                        req_cnt);
                goto out;
@@ -3119,7 +3042,7 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
 
        if (cnt >= MAX_OUTSTANDING_COMMANDS) {
                status = 1;
-               dprintk(2, "qla1280_64bit_start_scsi: NO ROOM IN "
+               dprintk(2, "qla1280_start_scsi: NO ROOM IN "
                        "OUTSTANDING ARRAY, req_q_cnt=0x%x", ha->req_q_cnt);
                goto out;
        }
@@ -3128,7 +3051,7 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
        ha->req_q_cnt -= req_cnt;
        CMD_HANDLE(sp->cmd) = (unsigned char *)(unsigned long)(cnt + 1);
 
-       dprintk(2, "64bit_start: cmd=%p sp=%p CDB=%xm, handle %lx\n", cmd, sp,
+       dprintk(2, "start: cmd=%p sp=%p CDB=%xm, handle %lx\n", cmd, sp,
                cmd->cmnd[0], (long)CMD_HANDLE(sp->cmd));
        dprintk(2, "             bus %i, target %i, lun %i\n",
                SCSI_BUS_32(cmd), SCSI_TCN_32(cmd), SCSI_LUN_32(cmd));
@@ -3350,7 +3273,7 @@ qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
        struct scsi_cmnd *cmd = sp->cmd;
        struct cmd_entry *pkt;
        struct scatterlist *sg = NULL;
-       uint32_t *dword_ptr;
+       __le32 *dword_ptr;
        int status = 0;
        int cnt;
        int req_cnt;
@@ -3993,21 +3916,21 @@ qla1280_get_target_options(struct scsi_cmnd *cmd, struct scsi_qla_host *ha)
        result = cmd->request_buffer;
        n = &ha->nvram;
 
-       n->bus[bus].target[target].parameter.f.enable_wide = 0;
-       n->bus[bus].target[target].parameter.f.enable_sync = 0;
+       n->bus[bus].target[target].parameter.enable_wide = 0;
+       n->bus[bus].target[target].parameter.enable_sync = 0;
        n->bus[bus].target[target].ppr_1x160.flags.enable_ppr = 0;
 
         if (result[7] & 0x60)
-               n->bus[bus].target[target].parameter.f.enable_wide = 1;
+               n->bus[bus].target[target].parameter.enable_wide = 1;
         if (result[7] & 0x10)
-               n->bus[bus].target[target].parameter.f.enable_sync = 1;
+               n->bus[bus].target[target].parameter.enable_sync = 1;
        if ((result[2] >= 3) && (result[4] + 5 > 56) &&
            (result[56] & 0x4))
                n->bus[bus].target[target].ppr_1x160.flags.enable_ppr = 1;
 
        dprintk(2, "get_target_options(): wide %i, sync %i, ppr %i\n",
-               n->bus[bus].target[target].parameter.f.enable_wide,
-               n->bus[bus].target[target].parameter.f.enable_sync,
+               n->bus[bus].target[target].parameter.enable_wide,
+               n->bus[bus].target[target].parameter.enable_sync,
                n->bus[bus].target[target].ppr_1x160.flags.enable_ppr);
 }
 #endif
@@ -4071,7 +3994,7 @@ qla1280_status_entry(struct scsi_qla_host *ha, struct response *pkt,
                /* Save ISP completion status */
                CMD_RESULT(cmd) = qla1280_return_status(pkt, cmd);
 
-               if (scsi_status & SS_CHECK_CONDITION) {
+               if (scsi_status & SAM_STAT_CHECK_CONDITION) {
                        if (comp_status != CS_ARS_FAILED) {
                                uint16_t req_sense_length =
                                        le16_to_cpu(pkt->req_sense_length);
@@ -4650,7 +4573,7 @@ qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
        if (pci_set_dma_mask(ha->pdev, (dma_addr_t) ~ 0ULL)) {
                if (pci_set_dma_mask(ha->pdev, 0xffffffff)) {
                        printk(KERN_WARNING "scsi(%li): Unable to set a "
-                              " suitable DMA mask - aboring\n", ha->host_no);
+                              "suitable DMA mask - aborting\n", ha->host_no);
                        error = -ENODEV;
                        goto error_free_irq;
                }
@@ -4660,14 +4583,14 @@ qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 #else
        if (pci_set_dma_mask(ha->pdev, 0xffffffff)) {
                printk(KERN_WARNING "scsi(%li): Unable to set a "
-                      " suitable DMA mask - aboring\n", ha->host_no);
+                      "suitable DMA mask - aborting\n", ha->host_no);
                error = -ENODEV;
                goto error_free_irq;
        }
 #endif
 
        ha->request_ring = pci_alloc_consistent(ha->pdev,
-                       ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))),
+                       ((REQUEST_ENTRY_CNT + 1) * sizeof(request_t)),
                        &ha->request_dma);
        if (!ha->request_ring) {
                printk(KERN_INFO "qla1280: Failed to get request memory\n");
@@ -4675,7 +4598,7 @@ qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
        }
 
        ha->response_ring = pci_alloc_consistent(ha->pdev,
-                       ((RESPONSE_ENTRY_CNT + 1) * (sizeof(struct response))),
+                       ((RESPONSE_ENTRY_CNT + 1) * sizeof(struct response)),
                        &ha->response_dma);
        if (!ha->response_ring) {
                printk(KERN_INFO "qla1280: Failed to get response memory\n");
@@ -4758,7 +4681,7 @@ qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 
 #if LINUX_VERSION_CODE >= 0x020600
  error_disable_adapter:
-       WRT_REG_WORD(&ha->iobase->ictrl, 0);
+       qla1280_disable_intrs(ha);
 #endif
  error_free_irq:
        free_irq(pdev->irq, ha);
@@ -4770,11 +4693,11 @@ qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 #endif
  error_free_response_ring:
        pci_free_consistent(ha->pdev,
-                       ((RESPONSE_ENTRY_CNT + 1) * (sizeof(struct response))),
+                       ((RESPONSE_ENTRY_CNT + 1) * sizeof(struct response)),
                        ha->response_ring, ha->response_dma);
  error_free_request_ring:
        pci_free_consistent(ha->pdev,
-                       ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))),
+                       ((REQUEST_ENTRY_CNT + 1) * sizeof(request_t)),
                        ha->request_ring, ha->request_dma);
  error_put_host:
        scsi_host_put(host);
@@ -4795,7 +4718,7 @@ qla1280_remove_one(struct pci_dev *pdev)
        scsi_remove_host(host);
 #endif
 
-       WRT_REG_WORD(&ha->iobase->ictrl, 0);
+       qla1280_disable_intrs(ha);
 
        free_irq(pdev->irq, ha);
 
index d245ae07518e9b4d8e163c1b05b0b573729c3303..59915fb703012187f6b180708a8643da3f46a165 100644 (file)
@@ -94,9 +94,6 @@
 #define REQUEST_ENTRY_CNT              256 /* Number of request entries. */
 #define RESPONSE_ENTRY_CNT             16  /* Number of response entries. */
 
-/* Number of segments 1 - 65535 */
-#define SG_SEGMENTS                    32  /* Cmd entry + 6 continuations */
-
 /*
  * SCSI Request Block structure  (sp)  that is placed
  * on cmd->SCp location of every I/O
@@ -378,29 +375,23 @@ struct nvram {
        uint16_t unused_12;     /* 12, 13 */
        uint16_t unused_14;     /* 14, 15 */
 
-       union {
-               uint8_t c;
-               struct {
-                       uint8_t reserved:2;
-                       uint8_t burst_enable:1;
-                       uint8_t reserved_1:1;
-                       uint8_t fifo_threshold:4;
-               } f;
+       struct {
+               uint8_t reserved:2;
+               uint8_t burst_enable:1;
+               uint8_t reserved_1:1;
+               uint8_t fifo_threshold:4;
        } isp_config;           /* 16 */
 
        /* Termination
         * 0 = Disable, 1 = high only, 3 = Auto term
         */
-       union {
-               uint8_t c;
-               struct {
-                       uint8_t scsi_bus_1_control:2;
-                       uint8_t scsi_bus_0_control:2;
-                       uint8_t unused_0:1;
-                       uint8_t unused_1:1;
-                       uint8_t unused_2:1;
-                       uint8_t auto_term_support:1;
-               } f;
+       struct {
+               uint8_t scsi_bus_1_control:2;
+               uint8_t scsi_bus_0_control:2;
+               uint8_t unused_0:1;
+               uint8_t unused_1:1;
+               uint8_t unused_2:1;
+               uint8_t auto_term_support:1;
        } termination;          /* 17 */
 
        uint16_t isp_parameter; /* 18, 19 */
@@ -460,18 +451,15 @@ struct nvram {
                uint16_t unused_38;     /* 38, 39 */
 
                struct {
-                       union {
-                               uint8_t c;
-                               struct {
-                                       uint8_t renegotiate_on_error:1;
-                                       uint8_t stop_queue_on_check:1;
-                                       uint8_t auto_request_sense:1;
-                                       uint8_t tag_queuing:1;
-                                       uint8_t enable_sync:1;
-                                       uint8_t enable_wide:1;
-                                       uint8_t parity_checking:1;
-                                       uint8_t disconnect_allowed:1;
-                               } f;
+                       struct {
+                               uint8_t renegotiate_on_error:1;
+                               uint8_t stop_queue_on_check:1;
+                               uint8_t auto_request_sense:1;
+                               uint8_t tag_queuing:1;
+                               uint8_t enable_sync:1;
+                               uint8_t enable_wide:1;
+                               uint8_t parity_checking:1;
+                               uint8_t disconnect_allowed:1;
                        } parameter;    /* 40 */
 
                        uint8_t execution_throttle;     /* 41 */
@@ -528,23 +516,23 @@ struct cmd_entry {
        uint8_t entry_count;            /* Entry count. */
        uint8_t sys_define;             /* System defined. */
        uint8_t entry_status;           /* Entry Status. */
-       uint32_t handle;                /* System handle. */
+       __le32 handle;                  /* System handle. */
        uint8_t lun;                    /* SCSI LUN */
        uint8_t target;                 /* SCSI ID */
-       uint16_t cdb_len;               /* SCSI command length. */
-       uint16_t control_flags;         /* Control flags. */
-       uint16_t reserved;
-       uint16_t timeout;               /* Command timeout. */
-       uint16_t dseg_count;            /* Data segment count. */
+       __le16 cdb_len;                 /* SCSI command length. */
+       __le16 control_flags;           /* Control flags. */
+       __le16 reserved;
+       __le16 timeout;                 /* Command timeout. */
+       __le16 dseg_count;              /* Data segment count. */
        uint8_t scsi_cdb[MAX_CMDSZ];    /* SCSI command words. */
-       uint32_t dseg_0_address;        /* Data segment 0 address. */
-       uint32_t dseg_0_length;         /* Data segment 0 length. */
-       uint32_t dseg_1_address;        /* Data segment 1 address. */
-       uint32_t dseg_1_length;         /* Data segment 1 length. */
-       uint32_t dseg_2_address;        /* Data segment 2 address. */
-       uint32_t dseg_2_length;         /* Data segment 2 length. */
-       uint32_t dseg_3_address;        /* Data segment 3 address. */
-       uint32_t dseg_3_length;         /* Data segment 3 length. */
+       __le32 dseg_0_address;          /* Data segment 0 address. */
+       __le32 dseg_0_length;           /* Data segment 0 length. */
+       __le32 dseg_1_address;          /* Data segment 1 address. */
+       __le32 dseg_1_length;           /* Data segment 1 length. */
+       __le32 dseg_2_address;          /* Data segment 2 address. */
+       __le32 dseg_2_length;           /* Data segment 2 length. */
+       __le32 dseg_3_address;          /* Data segment 3 address. */
+       __le32 dseg_3_length;           /* Data segment 3 length. */
 };
 
 /*
@@ -556,21 +544,21 @@ struct cont_entry {
        uint8_t entry_count;            /* Entry count. */
        uint8_t sys_define;             /* System defined. */
        uint8_t entry_status;           /* Entry Status. */
-       uint32_t reserved;              /* Reserved */
-       uint32_t dseg_0_address;        /* Data segment 0 address. */
-       uint32_t dseg_0_length;         /* Data segment 0 length. */
-       uint32_t dseg_1_address;        /* Data segment 1 address. */
-       uint32_t dseg_1_length;         /* Data segment 1 length. */
-       uint32_t dseg_2_address;        /* Data segment 2 address. */
-       uint32_t dseg_2_length;         /* Data segment 2 length. */
-       uint32_t dseg_3_address;        /* Data segment 3 address. */
-       uint32_t dseg_3_length;         /* Data segment 3 length. */
-       uint32_t dseg_4_address;        /* Data segment 4 address. */
-       uint32_t dseg_4_length;         /* Data segment 4 length. */
-       uint32_t dseg_5_address;        /* Data segment 5 address. */
-       uint32_t dseg_5_length;         /* Data segment 5 length. */
-       uint32_t dseg_6_address;        /* Data segment 6 address. */
-       uint32_t dseg_6_length;         /* Data segment 6 length. */
+       __le32 reserved;                /* Reserved */
+       __le32 dseg_0_address;          /* Data segment 0 address. */
+       __le32 dseg_0_length;           /* Data segment 0 length. */
+       __le32 dseg_1_address;          /* Data segment 1 address. */
+       __le32 dseg_1_length;           /* Data segment 1 length. */
+       __le32 dseg_2_address;          /* Data segment 2 address. */
+       __le32 dseg_2_length;           /* Data segment 2 length. */
+       __le32 dseg_3_address;          /* Data segment 3 address. */
+       __le32 dseg_3_length;           /* Data segment 3 length. */
+       __le32 dseg_4_address;          /* Data segment 4 address. */
+       __le32 dseg_4_length;           /* Data segment 4 length. */
+       __le32 dseg_5_address;          /* Data segment 5 address. */
+       __le32 dseg_5_length;           /* Data segment 5 length. */
+       __le32 dseg_6_address;          /* Data segment 6 address. */
+       __le32 dseg_6_length;           /* Data segment 6 length. */
 };
 
 /*
@@ -586,22 +574,22 @@ struct response {
 #define RF_FULL         BIT_1  /* Full */
 #define RF_BAD_HEADER   BIT_2  /* Bad header. */
 #define RF_BAD_PAYLOAD  BIT_3  /* Bad payload. */
-       uint32_t handle;        /* System handle. */
-       uint16_t scsi_status;   /* SCSI status. */
-       uint16_t comp_status;   /* Completion status. */
-       uint16_t state_flags;   /* State flags. */
-#define SF_TRANSFER_CMPL BIT_14        /* Transfer Complete. */
-#define SF_GOT_SENSE    BIT_13 /* Got Sense */
-#define SF_GOT_STATUS    BIT_12        /* Got Status */
-#define SF_TRANSFERRED_DATA BIT_11     /* Transferred data */
-#define SF_SENT_CDB   BIT_10   /* Send CDB */
-#define SF_GOT_TARGET  BIT_9   /*  */
-#define SF_GOT_BUS     BIT_8   /*  */
-       uint16_t status_flags;  /* Status flags. */
-       uint16_t time;          /* Time. */
-       uint16_t req_sense_length;      /* Request sense data length. */
-       uint32_t residual_length;       /* Residual transfer length. */
-       uint16_t reserved[4];
+       __le32 handle;          /* System handle. */
+       __le16 scsi_status;     /* SCSI status. */
+       __le16 comp_status;     /* Completion status. */
+       __le16 state_flags;     /* State flags. */
+#define SF_TRANSFER_CMPL       BIT_14  /* Transfer Complete. */
+#define SF_GOT_SENSE           BIT_13  /* Got Sense */
+#define SF_GOT_STATUS          BIT_12  /* Got Status */
+#define SF_TRANSFERRED_DATA    BIT_11  /* Transferred data */
+#define SF_SENT_CDB            BIT_10  /* Send CDB */
+#define SF_GOT_TARGET          BIT_9   /*  */
+#define SF_GOT_BUS             BIT_8   /*  */
+       __le16 status_flags;    /* Status flags. */
+       __le16 time;            /* Time. */
+       __le16 req_sense_length;/* Request sense data length. */
+       __le32 residual_length; /* Residual transfer length. */
+       __le16 reserved[4];
        uint8_t req_sense_data[32];     /* Request sense data. */
 };
 
@@ -614,7 +602,7 @@ struct mrk_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t sys_define;     /* System defined. */
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t reserved;
+       __le32 reserved;
        uint8_t lun;            /* SCSI LUN */
        uint8_t target;         /* SCSI ID */
        uint8_t modifier;       /* Modifier (7-0). */
@@ -638,11 +626,11 @@ struct ecmd_entry {
        uint32_t handle;        /* System handle. */
        uint8_t lun;            /* SCSI LUN */
        uint8_t target;         /* SCSI ID */
-       uint16_t cdb_len;       /* SCSI command length. */
-       uint16_t control_flags; /* Control flags. */
-       uint16_t reserved;
-       uint16_t timeout;       /* Command timeout. */
-       uint16_t dseg_count;    /* Data segment count. */
+       __le16 cdb_len;         /* SCSI command length. */
+       __le16 control_flags;   /* Control flags. */
+       __le16 reserved;
+       __le16 timeout;         /* Command timeout. */
+       __le16 dseg_count;      /* Data segment count. */
        uint8_t scsi_cdb[88];   /* SCSI command words. */
 };
 
@@ -655,20 +643,20 @@ typedef struct {
        uint8_t entry_count;    /* Entry count. */
        uint8_t sys_define;     /* System defined. */
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t handle;        /* System handle. */
+       __le32 handle;  /* System handle. */
        uint8_t lun;            /* SCSI LUN */
        uint8_t target;         /* SCSI ID */
-       uint16_t cdb_len;       /* SCSI command length. */
-       uint16_t control_flags; /* Control flags. */
-       uint16_t reserved;
-       uint16_t timeout;       /* Command timeout. */
-       uint16_t dseg_count;    /* Data segment count. */
+       __le16 cdb_len; /* SCSI command length. */
+       __le16 control_flags;   /* Control flags. */
+       __le16 reserved;
+       __le16 timeout; /* Command timeout. */
+       __le16 dseg_count;      /* Data segment count. */
        uint8_t scsi_cdb[MAX_CMDSZ];    /* SCSI command words. */
-       uint32_t reserved_1[2]; /* unused */
-       uint32_t dseg_0_address[2];     /* Data segment 0 address. */
-       uint32_t dseg_0_length; /* Data segment 0 length. */
-       uint32_t dseg_1_address[2];     /* Data segment 1 address. */
-       uint32_t dseg_1_length; /* Data segment 1 length. */
+       __le32 reserved_1[2];   /* unused */
+       __le32 dseg_0_address[2];       /* Data segment 0 address. */
+       __le32 dseg_0_length;   /* Data segment 0 length. */
+       __le32 dseg_1_address[2];       /* Data segment 1 address. */
+       __le32 dseg_1_length;   /* Data segment 1 length. */
 } cmd_a64_entry_t, request_t;
 
 /*
@@ -680,16 +668,16 @@ struct cont_a64_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t sys_define;     /* System defined. */
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t dseg_0_address[2];     /* Data segment 0 address. */
-       uint32_t dseg_0_length; /* Data segment 0 length. */
-       uint32_t dseg_1_address[2];     /* Data segment 1 address. */
-       uint32_t dseg_1_length; /* Data segment 1 length. */
-       uint32_t dseg_2_address[2];     /* Data segment 2 address. */
-       uint32_t dseg_2_length; /* Data segment 2 length. */
-       uint32_t dseg_3_address[2];     /* Data segment 3 address. */
-       uint32_t dseg_3_length; /* Data segment 3 length. */
-       uint32_t dseg_4_address[2];     /* Data segment 4 address. */
-       uint32_t dseg_4_length; /* Data segment 4 length. */
+       __le32 dseg_0_address[2];       /* Data segment 0 address. */
+       __le32 dseg_0_length;           /* Data segment 0 length. */
+       __le32 dseg_1_address[2];       /* Data segment 1 address. */
+       __le32 dseg_1_length;           /* Data segment 1 length. */
+       __le32 dseg_2_address[2];       /* Data segment 2 address. */
+       __le32 dseg_2_length;           /* Data segment 2 length. */
+       __le32 dseg_3_address[2];       /* Data segment 3 address. */
+       __le32 dseg_3_length;           /* Data segment 3 length. */
+       __le32 dseg_4_address[2];       /* Data segment 4 address. */
+       __le32 dseg_4_length;           /* Data segment 4 length. */
 };
 
 /*
@@ -701,10 +689,10 @@ struct elun_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t reserved_1;
        uint8_t entry_status;   /* Entry Status not used. */
-       uint32_t reserved_2;
-       uint16_t lun;           /* Bit 15 is bus number. */
-       uint16_t reserved_4;
-       uint32_t option_flags;
+       __le32 reserved_2;
+       __le16 lun;             /* Bit 15 is bus number. */
+       __le16 reserved_4;
+       __le32 option_flags;
        uint8_t status;
        uint8_t reserved_5;
        uint8_t command_count;  /* Number of ATIOs allocated. */
@@ -714,8 +702,8 @@ struct elun_entry {
        /* commands (2-26). */
        uint8_t group_7_length; /* SCSI CDB length for group 7 */
        /* commands (2-26). */
-       uint16_t timeout;       /* 0 = 30 seconds, 0xFFFF = disable */
-       uint16_t reserved_6[20];
+       __le16 timeout;         /* 0 = 30 seconds, 0xFFFF = disable */
+       __le16 reserved_6[20];
 };
 
 /*
@@ -729,20 +717,20 @@ struct modify_lun_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t reserved_1;
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t reserved_2;
+       __le32 reserved_2;
        uint8_t lun;            /* SCSI LUN */
        uint8_t reserved_3;
        uint8_t operators;
        uint8_t reserved_4;
-       uint32_t option_flags;
+       __le32 option_flags;
        uint8_t status;
        uint8_t reserved_5;
        uint8_t command_count;  /* Number of ATIOs allocated. */
        uint8_t immed_notify_count;     /* Number of Immediate Notify */
        /* entries allocated. */
-       uint16_t reserved_6;
-       uint16_t timeout;       /* 0 = 30 seconds, 0xFFFF = disable */
-       uint16_t reserved_7[20];
+       __le16 reserved_6;
+       __le16 timeout;         /* 0 = 30 seconds, 0xFFFF = disable */
+       __le16 reserved_7[20];
 };
 
 /*
@@ -754,20 +742,20 @@ struct notify_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t reserved_1;
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t reserved_2;
+       __le32 reserved_2;
        uint8_t lun;
        uint8_t initiator_id;
        uint8_t reserved_3;
        uint8_t target_id;
-       uint32_t option_flags;
+       __le32 option_flags;
        uint8_t status;
        uint8_t reserved_4;
        uint8_t tag_value;      /* Received queue tag message value */
        uint8_t tag_type;       /* Received queue tag message type */
        /* entries allocated. */
-       uint16_t seq_id;
+       __le16 seq_id;
        uint8_t scsi_msg[8];    /* SCSI message not handled by ISP */
-       uint16_t reserved_5[8];
+       __le16 reserved_5[8];
        uint8_t sense_data[18];
 };
 
@@ -780,16 +768,16 @@ struct nack_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t reserved_1;
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t reserved_2;
+       __le32 reserved_2;
        uint8_t lun;
        uint8_t initiator_id;
        uint8_t reserved_3;
        uint8_t target_id;
-       uint32_t option_flags;
+       __le32 option_flags;
        uint8_t status;
        uint8_t event;
-       uint16_t seq_id;
-       uint16_t reserved_4[22];
+       __le16 seq_id;
+       __le16 reserved_4[22];
 };
 
 /*
@@ -801,12 +789,12 @@ struct atio_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t reserved_1;
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t reserved_2;
+       __le32 reserved_2;
        uint8_t lun;
        uint8_t initiator_id;
        uint8_t cdb_len;
        uint8_t target_id;
-       uint32_t option_flags;
+       __le32 option_flags;
        uint8_t status;
        uint8_t scsi_status;
        uint8_t tag_value;      /* Received queue tag message value */
@@ -824,28 +812,28 @@ struct ctio_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t reserved_1;
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t reserved_2;
+       __le32 reserved_2;
        uint8_t lun;            /* SCSI LUN */
        uint8_t initiator_id;
        uint8_t reserved_3;
        uint8_t target_id;
-       uint32_t option_flags;
+       __le32 option_flags;
        uint8_t status;
        uint8_t scsi_status;
        uint8_t tag_value;      /* Received queue tag message value */
        uint8_t tag_type;       /* Received queue tag message type */
-       uint32_t transfer_length;
-       uint32_t residual;
-       uint16_t timeout;       /* 0 = 30 seconds, 0xFFFF = disable */
-       uint16_t dseg_count;    /* Data segment count. */
-       uint32_t dseg_0_address;        /* Data segment 0 address. */
-       uint32_t dseg_0_length; /* Data segment 0 length. */
-       uint32_t dseg_1_address;        /* Data segment 1 address. */
-       uint32_t dseg_1_length; /* Data segment 1 length. */
-       uint32_t dseg_2_address;        /* Data segment 2 address. */
-       uint32_t dseg_2_length; /* Data segment 2 length. */
-       uint32_t dseg_3_address;        /* Data segment 3 address. */
-       uint32_t dseg_3_length; /* Data segment 3 length. */
+       __le32 transfer_length;
+       __le32 residual;
+       __le16 timeout;         /* 0 = 30 seconds, 0xFFFF = disable */
+       __le16 dseg_count;      /* Data segment count. */
+       __le32 dseg_0_address;  /* Data segment 0 address. */
+       __le32 dseg_0_length;   /* Data segment 0 length. */
+       __le32 dseg_1_address;  /* Data segment 1 address. */
+       __le32 dseg_1_length;   /* Data segment 1 length. */
+       __le32 dseg_2_address;  /* Data segment 2 address. */
+       __le32 dseg_2_length;   /* Data segment 2 length. */
+       __le32 dseg_3_address;  /* Data segment 3 address. */
+       __le32 dseg_3_length;   /* Data segment 3 length. */
 };
 
 /*
@@ -857,24 +845,24 @@ struct ctio_ret_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t reserved_1;
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t reserved_2;
+       __le32 reserved_2;
        uint8_t lun;            /* SCSI LUN */
        uint8_t initiator_id;
        uint8_t reserved_3;
        uint8_t target_id;
-       uint32_t option_flags;
+       __le32 option_flags;
        uint8_t status;
        uint8_t scsi_status;
        uint8_t tag_value;      /* Received queue tag message value */
        uint8_t tag_type;       /* Received queue tag message type */
-       uint32_t transfer_length;
-       uint32_t residual;
-       uint16_t timeout;       /* 0 = 30 seconds, 0xFFFF = disable */
-       uint16_t dseg_count;    /* Data segment count. */
-       uint32_t dseg_0_address;        /* Data segment 0 address. */
-       uint32_t dseg_0_length; /* Data segment 0 length. */
-       uint32_t dseg_1_address;        /* Data segment 1 address. */
-       uint16_t dseg_1_length; /* Data segment 1 length. */
+       __le32 transfer_length;
+       __le32 residual;
+       __le16 timeout;         /* 0 = 30 seconds, 0xFFFF = disable */
+       __le16 dseg_count;      /* Data segment count. */
+       __le32 dseg_0_address;  /* Data segment 0 address. */
+       __le32 dseg_0_length;   /* Data segment 0 length. */
+       __le32 dseg_1_address;  /* Data segment 1 address. */
+       __le16 dseg_1_length;   /* Data segment 1 length. */
        uint8_t sense_data[18];
 };
 
@@ -887,25 +875,25 @@ struct ctio_a64_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t reserved_1;
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t reserved_2;
+       __le32 reserved_2;
        uint8_t lun;            /* SCSI LUN */
        uint8_t initiator_id;
        uint8_t reserved_3;
        uint8_t target_id;
-       uint32_t option_flags;
+       __le32 option_flags;
        uint8_t status;
        uint8_t scsi_status;
        uint8_t tag_value;      /* Received queue tag message value */
        uint8_t tag_type;       /* Received queue tag message type */
-       uint32_t transfer_length;
-       uint32_t residual;
-       uint16_t timeout;       /* 0 = 30 seconds, 0xFFFF = disable */
-       uint16_t dseg_count;    /* Data segment count. */
-       uint32_t reserved_4[2];
-       uint32_t dseg_0_address[2];     /* Data segment 0 address. */
-       uint32_t dseg_0_length; /* Data segment 0 length. */
-       uint32_t dseg_1_address[2];     /* Data segment 1 address. */
-       uint32_t dseg_1_length; /* Data segment 1 length. */
+       __le32 transfer_length;
+       __le32 residual;
+       __le16 timeout;         /* 0 = 30 seconds, 0xFFFF = disable */
+       __le16 dseg_count;      /* Data segment count. */
+       __le32 reserved_4[2];
+       __le32 dseg_0_address[2];/* Data segment 0 address. */
+       __le32 dseg_0_length;   /* Data segment 0 length. */
+       __le32 dseg_1_address[2];/* Data segment 1 address. */
+       __le32 dseg_1_length;   /* Data segment 1 length. */
 };
 
 /*
@@ -917,21 +905,21 @@ struct ctio_a64_ret_entry {
        uint8_t entry_count;    /* Entry count. */
        uint8_t reserved_1;
        uint8_t entry_status;   /* Entry Status. */
-       uint32_t reserved_2;
+       __le32 reserved_2;
        uint8_t lun;            /* SCSI LUN */
        uint8_t initiator_id;
        uint8_t reserved_3;
        uint8_t target_id;
-       uint32_t option_flags;
+       __le32 option_flags;
        uint8_t status;
        uint8_t scsi_status;
        uint8_t tag_value;      /* Received queue tag message value */
        uint8_t tag_type;       /* Received queue tag message type */
-       uint32_t transfer_length;
-       uint32_t residual;
-       uint16_t timeout;       /* 0 = 30 seconds, 0xFFFF = disable */
-       uint16_t dseg_count;    /* Data segment count. */
-       uint16_t reserved_4[7];
+       __le32 transfer_length;
+       __le32 residual;
+       __le16 timeout;         /* 0 = 30 seconds, 0xFFFF = disable */
+       __le16 dseg_count;      /* Data segment count. */
+       __le16 reserved_4[7];
        uint8_t sense_data[18];
 };
 
@@ -978,14 +966,6 @@ struct ctio_a64_ret_entry {
 #define CS_UNKNOWN          0x81       /* Driver defined */
 #define CS_RETRY            0x82       /* Driver defined */
 
-/*
- * ISP status entry - SCSI status byte bit definitions.
- */
-#define SS_CHECK_CONDITION  BIT_1
-#define SS_CONDITION_MET    BIT_2
-#define SS_BUSY_CONDITION   BIT_3
-#define SS_RESERVE_CONFLICT (BIT_4 | BIT_3)
-
 /*
  * ISP target entries - Option flags bit definitions.
  */
@@ -1082,10 +1062,6 @@ struct scsi_qla_host {
                uint32_t reset_active:1;                /* 3 */
                uint32_t abort_isp_active:1;            /* 4 */
                uint32_t disable_risc_code_load:1;      /* 5 */
-               uint32_t enable_64bit_addressing:1;     /* 6 */
-               uint32_t in_reset:1;                    /* 7 */
-               uint32_t ints_enabled:1;
-               uint32_t ignore_nvram:1;
 #ifdef __ia64__
                uint32_t use_pci_vchannel:1;
 #endif
index 659a5d63467dc335a570f62e20f4d874bbbabe23..fe0fce71adc70153d17abaa0851b15b3a102b862 100644 (file)
@@ -211,6 +211,138 @@ qla2x00_free_sysfs_attr(scsi_qla_host_t *ha)
        sysfs_remove_bin_file(&host->shost_gendev.kobj, &sysfs_nvram_attr);
 }
 
+/* Scsi_Host attributes. */
+
+static ssize_t
+qla2x00_drvr_version_show(struct class_device *cdev, char *buf)
+{
+       return snprintf(buf, PAGE_SIZE, "%s\n", qla2x00_version_str);
+}
+
+static ssize_t
+qla2x00_fw_version_show(struct class_device *cdev, char *buf)
+{
+       scsi_qla_host_t *ha = to_qla_host(class_to_shost(cdev));
+       char fw_str[30];
+
+       return snprintf(buf, PAGE_SIZE, "%s\n",
+           ha->isp_ops.fw_version_str(ha, fw_str));
+}
+
+static ssize_t
+qla2x00_serial_num_show(struct class_device *cdev, char *buf)
+{
+       scsi_qla_host_t *ha = to_qla_host(class_to_shost(cdev));
+       uint32_t sn;
+
+       sn = ((ha->serial0 & 0x1f) << 16) | (ha->serial2 << 8) | ha->serial1;
+       return snprintf(buf, PAGE_SIZE, "%c%05d\n", 'A' + sn / 100000,
+           sn % 100000);
+}
+
+static ssize_t
+qla2x00_isp_name_show(struct class_device *cdev, char *buf)
+{
+       scsi_qla_host_t *ha = to_qla_host(class_to_shost(cdev));
+       return snprintf(buf, PAGE_SIZE, "%s\n", ha->brd_info->isp_name);
+}
+
+static ssize_t
+qla2x00_isp_id_show(struct class_device *cdev, char *buf)
+{
+       scsi_qla_host_t *ha = to_qla_host(class_to_shost(cdev));
+       return snprintf(buf, PAGE_SIZE, "%04x %04x %04x %04x\n",
+           ha->product_id[0], ha->product_id[1], ha->product_id[2],
+           ha->product_id[3]);
+}
+
+static ssize_t
+qla2x00_model_name_show(struct class_device *cdev, char *buf)
+{
+       scsi_qla_host_t *ha = to_qla_host(class_to_shost(cdev));
+       return snprintf(buf, PAGE_SIZE, "%s\n", ha->model_number);
+}
+
+static ssize_t
+qla2x00_model_desc_show(struct class_device *cdev, char *buf)
+{
+       scsi_qla_host_t *ha = to_qla_host(class_to_shost(cdev));
+       return snprintf(buf, PAGE_SIZE, "%s\n",
+           ha->model_desc ? ha->model_desc: "");
+}
+
+static ssize_t
+qla2x00_pci_info_show(struct class_device *cdev, char *buf)
+{
+       scsi_qla_host_t *ha = to_qla_host(class_to_shost(cdev));
+       char pci_info[30];
+
+       return snprintf(buf, PAGE_SIZE, "%s\n",
+           ha->isp_ops.pci_info_str(ha, pci_info));
+}
+
+static ssize_t
+qla2x00_state_show(struct class_device *cdev, char *buf)
+{
+       scsi_qla_host_t *ha = to_qla_host(class_to_shost(cdev));
+       int len = 0;
+
+       if (atomic_read(&ha->loop_state) == LOOP_DOWN ||
+           atomic_read(&ha->loop_state) == LOOP_DEAD)
+               len = snprintf(buf, PAGE_SIZE, "Link Down\n");
+       else if (atomic_read(&ha->loop_state) != LOOP_READY ||
+           test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags) ||
+           test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags))
+               len = snprintf(buf, PAGE_SIZE, "Unknown Link State\n");
+       else {
+               len = snprintf(buf, PAGE_SIZE, "Link Up - ");
+
+               switch (ha->current_topology) {
+               case ISP_CFG_NL:
+                       len += snprintf(buf + len, PAGE_SIZE-len, "Loop\n");
+                       break;
+               case ISP_CFG_FL:
+                       len += snprintf(buf + len, PAGE_SIZE-len, "FL_Port\n");
+                       break;
+               case ISP_CFG_N:
+                       len += snprintf(buf + len, PAGE_SIZE-len,
+                           "N_Port to N_Port\n");
+                       break;
+               case ISP_CFG_F:
+                       len += snprintf(buf + len, PAGE_SIZE-len, "F_Port\n");
+                       break;
+               default:
+                       len += snprintf(buf + len, PAGE_SIZE-len, "Loop\n");
+                       break;
+               }
+       }
+       return len;
+}
+
+static CLASS_DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show,
+       NULL);
+static CLASS_DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL);
+static CLASS_DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL);
+static CLASS_DEVICE_ATTR(isp_name, S_IRUGO, qla2x00_isp_name_show, NULL);
+static CLASS_DEVICE_ATTR(isp_id, S_IRUGO, qla2x00_isp_id_show, NULL);
+static CLASS_DEVICE_ATTR(model_name, S_IRUGO, qla2x00_model_name_show, NULL);
+static CLASS_DEVICE_ATTR(model_desc, S_IRUGO, qla2x00_model_desc_show, NULL);
+static CLASS_DEVICE_ATTR(pci_info, S_IRUGO, qla2x00_pci_info_show, NULL);
+static CLASS_DEVICE_ATTR(state, S_IRUGO, qla2x00_state_show, NULL);
+
+struct class_device_attribute *qla2x00_host_attrs[] = {
+       &class_device_attr_driver_version,
+       &class_device_attr_fw_version,
+       &class_device_attr_serial_num,
+       &class_device_attr_isp_name,
+       &class_device_attr_isp_id,
+       &class_device_attr_model_name,
+       &class_device_attr_model_desc,
+       &class_device_attr_pci_info,
+       &class_device_attr_state,
+       NULL,
+};
+
 /* Host attributes. */
 
 static void
@@ -304,10 +436,13 @@ struct fc_function_template qla2xxx_transport_functions = {
 
        .show_host_node_name = 1,
        .show_host_port_name = 1,
+       .show_host_supported_classes = 1,
+
        .get_host_port_id = qla2x00_get_host_port_id,
        .show_host_port_id = 1,
 
        .dd_fcrport_size = sizeof(struct fc_port *),
+       .show_rport_supported_classes = 1,
 
        .get_starget_node_name = qla2x00_get_starget_node_name,
        .show_starget_node_name = 1,
@@ -329,4 +464,5 @@ qla2x00_init_host_attr(scsi_qla_host_t *ha)
            be64_to_cpu(*(uint64_t *)ha->init_cb->node_name);
        fc_host_port_name(ha->host) =
            be64_to_cpu(*(uint64_t *)ha->init_cb->port_name);
+       fc_host_supported_classes(ha->host) = FC_COS_CLASS3;
 }
index b8d90e97e0179be6e447d77bdf1ddf4fec13a53c..9684e7a91fa99d3a91235c8b4af744b9e43849df 100644 (file)
@@ -81,6 +81,7 @@
 #define DEBUG2_3_11(x)  do {x;} while (0);
 #define DEBUG2_9_10(x)    do {x;} while (0);
 #define DEBUG2_11(x)    do {x;} while (0);
+#define DEBUG2_13(x)    do {x;} while (0);
 #else
 #define DEBUG2(x)      do {} while (0);
 #endif
 
 #if defined(QL_DEBUG_LEVEL_13)
 #define DEBUG13(x)      do {x;} while (0)
+#if !defined(DEBUG2_13)
+#define DEBUG2_13(x)    do {x;} while(0)
+#endif
 #else
 #define DEBUG13(x)     do {} while (0)
+#if !defined(QL_DEBUG_LEVEL_2)
+#define DEBUG2_13(x)   do {} while(0)
+#endif
 #endif
 
 #if defined(QL_DEBUG_LEVEL_14)
index 1c6d366f4fad8e716bd2c464bdfc197768497c3a..b455c31405e49bb622191bab04357ccab7277478 100644 (file)
  * valid range of an N-PORT id is 0 through 0x7ef.
  */
 #define NPH_LAST_HANDLE                0x7ef
+#define NPH_MGMT_SERVER                0x7fa           /*  FFFFFA */
 #define NPH_SNS                        0x7fc           /*  FFFFFC */
 #define NPH_FABRIC_CONTROLLER  0x7fd           /*  FFFFFD */
 #define NPH_F_PORT             0x7fe           /*  FFFFFE */
@@ -630,6 +631,7 @@ typedef struct {
 #define MBC_WRITE_RAM_WORD_EXTENDED    0xd     /* Write RAM word extended */
 #define MBC_READ_RAM_EXTENDED          0xf     /* Read RAM extended. */
 #define MBC_IOCB_COMMAND               0x12    /* Execute IOCB command. */
+#define MBC_STOP_FIRMWARE              0x14    /* Stop firmware. */
 #define MBC_ABORT_COMMAND              0x15    /* Abort IOCB command. */
 #define MBC_ABORT_DEVICE               0x16    /* Abort device (ID/LUN). */
 #define MBC_ABORT_TARGET               0x17    /* Abort target (ID). */
@@ -913,7 +915,7 @@ typedef struct {
         * MSB BIT 1 =
         * MSB BIT 2 =
         * MSB BIT 3 =
-        * MSB BIT 4 =
+        * MSB BIT 4 = LED mode
         * MSB BIT 5 = enable 50 ohm termination
         * MSB BIT 6 = Data Rate (2300 only)
         * MSB BIT 7 = Data Rate (2300 only)
@@ -1035,7 +1037,7 @@ typedef struct {
         * MSB BIT 1 =
         * MSB BIT 2 =
         * MSB BIT 3 =
-        * MSB BIT 4 =
+        * MSB BIT 4 = LED mode
         * MSB BIT 5 = enable 50 ohm termination
         * MSB BIT 6 = Data Rate (2300 only)
         * MSB BIT 7 = Data Rate (2300 only)
@@ -1131,10 +1133,7 @@ typedef struct {
 
        uint8_t link_down_timeout;
 
-       uint8_t adapter_id_0[4];
-       uint8_t adapter_id_1[4];
-       uint8_t adapter_id_2[4];
-       uint8_t adapter_id_3[4];
+       uint8_t adapter_id[16];
 
        uint8_t alt1_boot_node_name[WWN_SIZE];
        uint16_t alt1_boot_lun_number;
@@ -1673,6 +1672,7 @@ typedef struct fc_port {
        uint8_t cur_path;               /* current path id */
 
        struct fc_rport *rport;
+       u32 supported_classes;
 } fc_port_t;
 
 /*
@@ -1727,6 +1727,8 @@ typedef struct fc_port {
 
 #define CT_REJECT_RESPONSE     0x8001
 #define CT_ACCEPT_RESPONSE     0x8002
+#define CT_REASON_CANNOT_PERFORM       0x09
+#define CT_EXPL_ALREADY_REGISTERED     0x10
 
 #define NS_N_PORT_TYPE 0x01
 #define NS_NL_PORT_TYPE        0x02
@@ -1768,6 +1770,100 @@ typedef struct fc_port {
 #define        RSNN_NN_REQ_SIZE (16 + 8 + 1 + 255)
 #define        RSNN_NN_RSP_SIZE 16
 
+/*
+ * HBA attribute types.
+ */
+#define FDMI_HBA_ATTR_COUNT                    9
+#define FDMI_HBA_NODE_NAME                     1
+#define FDMI_HBA_MANUFACTURER                  2
+#define FDMI_HBA_SERIAL_NUMBER                 3
+#define FDMI_HBA_MODEL                         4
+#define FDMI_HBA_MODEL_DESCRIPTION             5
+#define FDMI_HBA_HARDWARE_VERSION              6
+#define FDMI_HBA_DRIVER_VERSION                        7
+#define FDMI_HBA_OPTION_ROM_VERSION            8
+#define FDMI_HBA_FIRMWARE_VERSION              9
+#define FDMI_HBA_OS_NAME_AND_VERSION           0xa
+#define FDMI_HBA_MAXIMUM_CT_PAYLOAD_LENGTH     0xb
+
+struct ct_fdmi_hba_attr {
+       uint16_t type;
+       uint16_t len;
+       union {
+               uint8_t node_name[WWN_SIZE];
+               uint8_t manufacturer[32];
+               uint8_t serial_num[8];
+               uint8_t model[16];
+               uint8_t model_desc[80];
+               uint8_t hw_version[16];
+               uint8_t driver_version[32];
+               uint8_t orom_version[16];
+               uint8_t fw_version[16];
+               uint8_t os_version[128];
+               uint8_t max_ct_len[4];
+       } a;
+};
+
+struct ct_fdmi_hba_attributes {
+       uint32_t count;
+       struct ct_fdmi_hba_attr entry[FDMI_HBA_ATTR_COUNT];
+};
+
+/*
+ * Port attribute types.
+ */
+#define FDMI_PORT_ATTR_COUNT           5
+#define FDMI_PORT_FC4_TYPES            1
+#define FDMI_PORT_SUPPORT_SPEED                2
+#define FDMI_PORT_CURRENT_SPEED                3
+#define FDMI_PORT_MAX_FRAME_SIZE       4
+#define FDMI_PORT_OS_DEVICE_NAME       5
+#define FDMI_PORT_HOST_NAME            6
+
+struct ct_fdmi_port_attr {
+       uint16_t type;
+       uint16_t len;
+       union {
+               uint8_t fc4_types[32];
+               uint32_t sup_speed;
+               uint32_t cur_speed;
+               uint32_t max_frame_size;
+               uint8_t os_dev_name[32];
+               uint8_t host_name[32];
+       } a;
+};
+
+/*
+ * Port Attribute Block.
+ */
+struct ct_fdmi_port_attributes {
+       uint32_t count;
+       struct ct_fdmi_port_attr entry[FDMI_PORT_ATTR_COUNT];
+};
+
+/* FDMI definitions. */
+#define GRHL_CMD       0x100
+#define GHAT_CMD       0x101
+#define GRPL_CMD       0x102
+#define GPAT_CMD       0x110
+
+#define RHBA_CMD       0x200
+#define RHBA_RSP_SIZE  16
+
+#define RHAT_CMD       0x201
+#define RPRT_CMD       0x210
+
+#define RPA_CMD                0x211
+#define RPA_RSP_SIZE   16
+
+#define DHBA_CMD       0x300
+#define DHBA_REQ_SIZE  (16 + 8)
+#define DHBA_RSP_SIZE  16
+
+#define DHAT_CMD       0x301
+#define DPRT_CMD       0x310
+#define DPA_CMD                0x311
+
 /* CT command header -- request/response common fields */
 struct ct_cmd_hdr {
        uint8_t revision;
@@ -1825,6 +1921,43 @@ struct ct_sns_req {
                        uint8_t name_len;
                        uint8_t sym_node_name[255];
                } rsnn_nn;
+
+               struct {
+                       uint8_t hba_indentifier[8];
+               } ghat;
+
+               struct {
+                       uint8_t hba_identifier[8];
+                       uint32_t entry_count;
+                       uint8_t port_name[8];
+                       struct ct_fdmi_hba_attributes attrs;
+               } rhba;
+
+               struct {
+                       uint8_t hba_identifier[8];
+                       struct ct_fdmi_hba_attributes attrs;
+               } rhat;
+
+               struct {
+                       uint8_t port_name[8];
+                       struct ct_fdmi_port_attributes attrs;
+               } rpa;
+
+               struct {
+                       uint8_t port_name[8];
+               } dhba;
+
+               struct {
+                       uint8_t port_name[8];
+               } dhat;
+
+               struct {
+                       uint8_t port_name[8];
+               } dprt;
+
+               struct {
+                       uint8_t port_name[8];
+               } dpa;
        } req;
 };
 
@@ -1882,6 +2015,12 @@ struct ct_sns_rsp {
                struct {
                        uint8_t fc4_types[32];
                } gft_id;
+
+               struct {
+                       uint32_t entry_count;
+                       uint8_t port_name[8];
+                       struct ct_fdmi_hba_attributes attrs;
+               } ghat;
        } rsp;
 };
 
@@ -2032,6 +2171,8 @@ struct isp_operations {
        uint16_t (*calc_req_entries) (uint16_t);
        void (*build_iocbs) (srb_t *, cmd_entry_t *, uint16_t);
        void * (*prep_ms_iocb) (struct scsi_qla_host *, uint32_t, uint32_t);
+       void * (*prep_ms_fdmi_iocb) (struct scsi_qla_host *, uint32_t,
+           uint32_t);
 
        uint8_t * (*read_nvram) (struct scsi_qla_host *, uint8_t *,
                uint32_t, uint32_t);
@@ -2111,6 +2252,7 @@ typedef struct scsi_qla_host {
 #define IOCTL_ERROR_RECOVERY   23
 #define LOOP_RESET_NEEDED      24
 #define BEACON_BLINK_NEEDED    25
+#define REGISTER_FDMI_NEEDED   26
 
        uint32_t        device_flags;
 #define DFLG_LOCAL_DEVICES             BIT_0
@@ -2204,6 +2346,7 @@ typedef struct scsi_qla_host {
        int             port_down_retry_count;
        uint8_t         mbx_count;
        uint16_t        last_loop_id;
+       uint16_t        mgmt_svr_loop_id;
 
         uint32_t       login_retry_count;
 
@@ -2318,6 +2461,7 @@ typedef struct scsi_qla_host {
        uint8_t         model_number[16+1];
 #define BINZERO                "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
        char            *model_desc;
+       uint8_t         adapter_id[16+1];
 
        uint8_t         *node_name;
        uint8_t         *port_name;
@@ -2377,6 +2521,7 @@ typedef struct scsi_qla_host {
 #define QLA_SUSPENDED                  0x106
 #define QLA_BUSY                       0x107
 #define QLA_RSCNS_HANDLED              0x108
+#define QLA_ALREADY_REGISTERED         0x109
 
 /*
 * Stat info for all adpaters
index 665c203e067561903efb8ad808c0dbe90662453f..1ed32e7b5472091ef7324e154dfdcf32464f0ae8 100644 (file)
@@ -79,6 +79,7 @@ extern int ql2xplogiabsentdevice;
 extern int ql2xenablezio;
 extern int ql2xintrdelaytimer;
 extern int ql2xloginretrycount;
+extern int ql2xfdmienable;
 
 extern void qla2x00_sp_compl(scsi_qla_host_t *, srb_t *);
 
@@ -146,9 +147,6 @@ extern int
 qla2x00_abort_target(fc_port_t *);
 #endif
 
-extern int
-qla2x00_target_reset(scsi_qla_host_t *, struct fc_port *);
-
 extern int
 qla2x00_get_adapter_id(scsi_qla_host_t *, uint16_t *, uint8_t *, uint8_t *,
     uint8_t *, uint16_t *);
@@ -215,6 +213,9 @@ qla2x00_get_serdes_params(scsi_qla_host_t *, uint16_t *, uint16_t *,
 extern int
 qla2x00_set_serdes_params(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t);
 
+extern int
+qla2x00_stop_firmware(scsi_qla_host_t *);
+
 /*
  * Global Function Prototypes in qla_isr.c source file.
  */
@@ -269,6 +270,9 @@ extern int qla2x00_rft_id(scsi_qla_host_t *);
 extern int qla2x00_rff_id(scsi_qla_host_t *);
 extern int qla2x00_rnn_id(scsi_qla_host_t *);
 extern int qla2x00_rsnn_nn(scsi_qla_host_t *);
+extern void *qla2x00_prep_ms_fdmi_iocb(scsi_qla_host_t *, uint32_t, uint32_t);
+extern void *qla24xx_prep_ms_fdmi_iocb(scsi_qla_host_t *, uint32_t, uint32_t);
+extern int qla2x00_fdmi_register(scsi_qla_host_t *);
 
 /*
  * Global Function Prototypes in qla_rscn.c source file.
@@ -289,6 +293,8 @@ extern void qla2x00_cancel_io_descriptors(scsi_qla_host_t *);
 /*
  * Global Function Prototypes in qla_attr.c source file.
  */
+struct class_device_attribute;
+extern struct class_device_attribute *qla2x00_host_attrs[];
 struct fc_function_template;
 extern struct fc_function_template qla2xxx_transport_functions;
 extern void qla2x00_alloc_sysfs_attr(scsi_qla_host_t *);
index 31ce4f62da130a7007d58a2f0a8d82e4f8694697..e7b138c2e339e07163b6e8d357472778ac89adb7 100644 (file)
@@ -1099,3 +1099,567 @@ qla2x00_sns_rnn_id(scsi_qla_host_t *ha)
 
        return (rval);
 }
+
+/**
+ * qla2x00_mgmt_svr_login() - Login to fabric Managment Service.
+ * @ha: HA context
+ *
+ * Returns 0 on success.
+ */
+static int
+qla2x00_mgmt_svr_login(scsi_qla_host_t *ha)
+{
+       int ret;
+       uint16_t mb[MAILBOX_REGISTER_COUNT];
+
+       ret = QLA_SUCCESS;
+       if (ha->flags.management_server_logged_in)
+               return ret;
+
+       ha->isp_ops.fabric_login(ha, ha->mgmt_svr_loop_id, 0xff, 0xff, 0xfa,
+           mb, BIT_1);
+       if (mb[0] != MBS_COMMAND_COMPLETE) {
+               DEBUG2_13(printk("%s(%ld): Failed MANAGEMENT_SERVER login: "
+                   "loop_id=%x mb[0]=%x mb[1]=%x mb[2]=%x mb[6]=%x mb[7]=%x\n",
+                   __func__, ha->host_no, ha->mgmt_svr_loop_id, mb[0], mb[1],
+                   mb[2], mb[6], mb[7]));
+               ret = QLA_FUNCTION_FAILED;
+       } else
+               ha->flags.management_server_logged_in = 1;
+
+       return ret;
+}
+
+/**
+ * qla2x00_prep_ms_fdmi_iocb() - Prepare common MS IOCB fields for FDMI query.
+ * @ha: HA context
+ * @req_size: request size in bytes
+ * @rsp_size: response size in bytes
+ *
+ * Returns a pointer to the @ha's ms_iocb.
+ */
+void *
+qla2x00_prep_ms_fdmi_iocb(scsi_qla_host_t *ha, uint32_t req_size,
+    uint32_t rsp_size)
+{
+       ms_iocb_entry_t *ms_pkt;
+
+       ms_pkt = ha->ms_iocb;
+       memset(ms_pkt, 0, sizeof(ms_iocb_entry_t));
+
+       ms_pkt->entry_type = MS_IOCB_TYPE;
+       ms_pkt->entry_count = 1;
+       SET_TARGET_ID(ha, ms_pkt->loop_id, ha->mgmt_svr_loop_id);
+       ms_pkt->control_flags = __constant_cpu_to_le16(CF_READ | CF_HEAD_TAG);
+       ms_pkt->timeout = __constant_cpu_to_le16(59);
+       ms_pkt->cmd_dsd_count = __constant_cpu_to_le16(1);
+       ms_pkt->total_dsd_count = __constant_cpu_to_le16(2);
+       ms_pkt->rsp_bytecount = cpu_to_le32(rsp_size);
+       ms_pkt->req_bytecount = cpu_to_le32(req_size);
+
+       ms_pkt->dseg_req_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma));
+       ms_pkt->dseg_req_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma));
+       ms_pkt->dseg_req_length = ms_pkt->req_bytecount;
+
+       ms_pkt->dseg_rsp_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma));
+       ms_pkt->dseg_rsp_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma));
+       ms_pkt->dseg_rsp_length = ms_pkt->rsp_bytecount;
+
+       return ms_pkt;
+}
+
+/**
+ * qla24xx_prep_ms_fdmi_iocb() - Prepare common MS IOCB fields for FDMI query.
+ * @ha: HA context
+ * @req_size: request size in bytes
+ * @rsp_size: response size in bytes
+ *
+ * Returns a pointer to the @ha's ms_iocb.
+ */
+void *
+qla24xx_prep_ms_fdmi_iocb(scsi_qla_host_t *ha, uint32_t req_size,
+    uint32_t rsp_size)
+{
+       struct ct_entry_24xx *ct_pkt;
+
+       ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb;
+       memset(ct_pkt, 0, sizeof(struct ct_entry_24xx));
+
+       ct_pkt->entry_type = CT_IOCB_TYPE;
+       ct_pkt->entry_count = 1;
+       ct_pkt->nport_handle = cpu_to_le16(ha->mgmt_svr_loop_id);
+       ct_pkt->timeout = __constant_cpu_to_le16(59);
+       ct_pkt->cmd_dsd_count = __constant_cpu_to_le16(1);
+       ct_pkt->rsp_dsd_count = __constant_cpu_to_le16(1);
+       ct_pkt->rsp_byte_count = cpu_to_le32(rsp_size);
+       ct_pkt->cmd_byte_count = cpu_to_le32(req_size);
+
+       ct_pkt->dseg_0_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma));
+       ct_pkt->dseg_0_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma));
+       ct_pkt->dseg_0_len = ct_pkt->cmd_byte_count;
+
+       ct_pkt->dseg_1_address[0] = cpu_to_le32(LSD(ha->ct_sns_dma));
+       ct_pkt->dseg_1_address[1] = cpu_to_le32(MSD(ha->ct_sns_dma));
+       ct_pkt->dseg_1_len = ct_pkt->rsp_byte_count;
+
+       return ct_pkt;
+}
+
+static inline ms_iocb_entry_t *
+qla2x00_update_ms_fdmi_iocb(scsi_qla_host_t *ha, uint32_t req_size)
+{
+       ms_iocb_entry_t *ms_pkt = ha->ms_iocb;
+       struct ct_entry_24xx *ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb;
+
+       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+               ct_pkt->cmd_byte_count = cpu_to_le32(req_size);
+               ct_pkt->dseg_0_len = ct_pkt->cmd_byte_count;
+       } else {
+               ms_pkt->req_bytecount = cpu_to_le32(req_size);
+               ms_pkt->dseg_req_length = ms_pkt->req_bytecount;
+       }
+
+       return ms_pkt;
+}
+
+/**
+ * qla2x00_prep_ct_req() - Prepare common CT request fields for SNS query.
+ * @ct_req: CT request buffer
+ * @cmd: GS command
+ * @rsp_size: response size in bytes
+ *
+ * Returns a pointer to the intitialized @ct_req.
+ */
+static inline struct ct_sns_req *
+qla2x00_prep_ct_fdmi_req(struct ct_sns_req *ct_req, uint16_t cmd,
+    uint16_t rsp_size)
+{
+       memset(ct_req, 0, sizeof(struct ct_sns_pkt));
+
+       ct_req->header.revision = 0x01;
+       ct_req->header.gs_type = 0xFA;
+       ct_req->header.gs_subtype = 0x10;
+       ct_req->command = cpu_to_be16(cmd);
+       ct_req->max_rsp_size = cpu_to_be16((rsp_size - 16) / 4);
+
+       return ct_req;
+}
+
+/**
+ * qla2x00_fdmi_rhba() -
+ * @ha: HA context
+ *
+ * Returns 0 on success.
+ */
+static int
+qla2x00_fdmi_rhba(scsi_qla_host_t *ha)
+{
+       int rval, alen;
+       uint32_t size, sn;
+
+       ms_iocb_entry_t *ms_pkt;
+       struct ct_sns_req *ct_req;
+       struct ct_sns_rsp *ct_rsp;
+       uint8_t *entries;
+       struct ct_fdmi_hba_attr *eiter;
+
+       /* Issue RHBA */
+       /* Prepare common MS IOCB */
+       /*   Request size adjusted after CT preparation */
+       ms_pkt = ha->isp_ops.prep_ms_fdmi_iocb(ha, 0, RHBA_RSP_SIZE);
+
+       /* Prepare CT request */
+       ct_req = qla2x00_prep_ct_fdmi_req(&ha->ct_sns->p.req, RHBA_CMD,
+           RHBA_RSP_SIZE);
+       ct_rsp = &ha->ct_sns->p.rsp;
+
+       /* Prepare FDMI command arguments -- attribute block, attributes. */
+       memcpy(ct_req->req.rhba.hba_identifier, ha->port_name, WWN_SIZE);
+       ct_req->req.rhba.entry_count = __constant_cpu_to_be32(1);
+       memcpy(ct_req->req.rhba.port_name, ha->port_name, WWN_SIZE);
+       size = 2 * WWN_SIZE + 4 + 4;
+
+       /* Attributes */
+       ct_req->req.rhba.attrs.count =
+           __constant_cpu_to_be32(FDMI_HBA_ATTR_COUNT);
+       entries = ct_req->req.rhba.hba_identifier;
+
+       /* Nodename. */
+       eiter = (struct ct_fdmi_hba_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_HBA_NODE_NAME);
+       eiter->len = __constant_cpu_to_be16(4 + WWN_SIZE);
+       memcpy(eiter->a.node_name, ha->node_name, WWN_SIZE);
+       size += 4 + WWN_SIZE;
+
+       DEBUG13(printk("%s(%ld): NODENAME=%02x%02x%02x%02x%02x%02x%02x%02x.\n",
+           __func__, ha->host_no,
+           eiter->a.node_name[0], eiter->a.node_name[1], eiter->a.node_name[2],
+           eiter->a.node_name[3], eiter->a.node_name[4], eiter->a.node_name[5],
+           eiter->a.node_name[6], eiter->a.node_name[7]));
+
+       /* Manufacturer. */
+       eiter = (struct ct_fdmi_hba_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_HBA_MANUFACTURER);
+       strcpy(eiter->a.manufacturer, "QLogic Corporation");
+       alen = strlen(eiter->a.manufacturer);
+       alen += (alen & 3) ? (4 - (alen & 3)) : 4;
+       eiter->len = cpu_to_be16(4 + alen);
+       size += 4 + alen;
+
+       DEBUG13(printk("%s(%ld): MANUFACTURER=%s.\n", __func__, ha->host_no,
+           eiter->a.manufacturer));
+
+       /* Serial number. */
+       eiter = (struct ct_fdmi_hba_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_HBA_SERIAL_NUMBER);
+       sn = ((ha->serial0 & 0x1f) << 16) | (ha->serial2 << 8) | ha->serial1;
+       sprintf(eiter->a.serial_num, "%c%05d", 'A' + sn / 100000, sn % 100000);
+       alen = strlen(eiter->a.serial_num);
+       alen += (alen & 3) ? (4 - (alen & 3)) : 4;
+       eiter->len = cpu_to_be16(4 + alen);
+       size += 4 + alen;
+
+       DEBUG13(printk("%s(%ld): SERIALNO=%s.\n", __func__, ha->host_no,
+           eiter->a.serial_num));
+
+       /* Model name. */
+       eiter = (struct ct_fdmi_hba_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_HBA_MODEL);
+       strcpy(eiter->a.model, ha->model_number);
+       alen = strlen(eiter->a.model);
+       alen += (alen & 3) ? (4 - (alen & 3)) : 4;
+       eiter->len = cpu_to_be16(4 + alen);
+       size += 4 + alen;
+
+       DEBUG13(printk("%s(%ld): MODEL_NAME=%s.\n", __func__, ha->host_no,
+           eiter->a.model));
+
+       /* Model description. */
+       eiter = (struct ct_fdmi_hba_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_HBA_MODEL_DESCRIPTION);
+       if (ha->model_desc)
+               strncpy(eiter->a.model_desc, ha->model_desc, 80);
+       alen = strlen(eiter->a.model_desc);
+       alen += (alen & 3) ? (4 - (alen & 3)) : 4;
+       eiter->len = cpu_to_be16(4 + alen);
+       size += 4 + alen;
+
+       DEBUG13(printk("%s(%ld): MODEL_DESC=%s.\n", __func__, ha->host_no,
+           eiter->a.model_desc));
+
+       /* Hardware version. */
+       eiter = (struct ct_fdmi_hba_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_HBA_HARDWARE_VERSION);
+       strcpy(eiter->a.hw_version, ha->adapter_id);
+       alen = strlen(eiter->a.hw_version);
+       alen += (alen & 3) ? (4 - (alen & 3)) : 4;
+       eiter->len = cpu_to_be16(4 + alen);
+       size += 4 + alen;
+
+       DEBUG13(printk("%s(%ld): HARDWAREVER=%s.\n", __func__, ha->host_no,
+           eiter->a.hw_version));
+
+       /* Driver version. */
+       eiter = (struct ct_fdmi_hba_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_HBA_DRIVER_VERSION);
+       strcpy(eiter->a.driver_version, qla2x00_version_str);
+       alen = strlen(eiter->a.driver_version);
+       alen += (alen & 3) ? (4 - (alen & 3)) : 4;
+       eiter->len = cpu_to_be16(4 + alen);
+       size += 4 + alen;
+
+       DEBUG13(printk("%s(%ld): DRIVERVER=%s.\n", __func__, ha->host_no,
+           eiter->a.driver_version));
+
+       /* Option ROM version. */
+       eiter = (struct ct_fdmi_hba_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_HBA_OPTION_ROM_VERSION);
+       strcpy(eiter->a.orom_version, "0.00");
+       alen = strlen(eiter->a.orom_version);
+       alen += (alen & 3) ? (4 - (alen & 3)) : 4;
+       eiter->len = cpu_to_be16(4 + alen);
+       size += 4 + alen;
+
+       DEBUG13(printk("%s(%ld): OPTROMVER=%s.\n", __func__, ha->host_no,
+           eiter->a.orom_version));
+
+       /* Firmware version */
+       eiter = (struct ct_fdmi_hba_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_HBA_FIRMWARE_VERSION);
+       ha->isp_ops.fw_version_str(ha, eiter->a.fw_version);
+       alen = strlen(eiter->a.fw_version);
+       alen += (alen & 3) ? (4 - (alen & 3)) : 4;
+       eiter->len = cpu_to_be16(4 + alen);
+       size += 4 + alen;
+
+       DEBUG13(printk("%s(%ld): FIRMWAREVER=%s.\n", __func__, ha->host_no,
+           eiter->a.fw_version));
+
+       /* Update MS request size. */
+       qla2x00_update_ms_fdmi_iocb(ha, size + 16);
+
+       DEBUG13(printk("%s(%ld): RHBA identifier="
+           "%02x%02x%02x%02x%02x%02x%02x%02x size=%d.\n", __func__,
+           ha->host_no, ct_req->req.rhba.hba_identifier[0],
+           ct_req->req.rhba.hba_identifier[1],
+           ct_req->req.rhba.hba_identifier[2],
+           ct_req->req.rhba.hba_identifier[3],
+           ct_req->req.rhba.hba_identifier[4],
+           ct_req->req.rhba.hba_identifier[5],
+           ct_req->req.rhba.hba_identifier[6],
+           ct_req->req.rhba.hba_identifier[7], size));
+       DEBUG13(qla2x00_dump_buffer(entries, size));
+
+       /* Execute MS IOCB */
+       rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma,
+           sizeof(ms_iocb_entry_t));
+       if (rval != QLA_SUCCESS) {
+               /*EMPTY*/
+               DEBUG2_3(printk("scsi(%ld): RHBA issue IOCB failed (%d).\n",
+                   ha->host_no, rval));
+       } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "RHBA") !=
+           QLA_SUCCESS) {
+               rval = QLA_FUNCTION_FAILED;
+               if (ct_rsp->header.reason_code == CT_REASON_CANNOT_PERFORM &&
+                   ct_rsp->header.explanation_code ==
+                   CT_EXPL_ALREADY_REGISTERED) {
+                       DEBUG2_13(printk("%s(%ld): HBA already registered.\n",
+                           __func__, ha->host_no));
+                       rval = QLA_ALREADY_REGISTERED;
+               }
+       } else {
+               DEBUG2(printk("scsi(%ld): RHBA exiting normally.\n",
+                   ha->host_no));
+       }
+
+       return rval;
+}
+
+/**
+ * qla2x00_fdmi_dhba() -
+ * @ha: HA context
+ *
+ * Returns 0 on success.
+ */
+static int
+qla2x00_fdmi_dhba(scsi_qla_host_t *ha)
+{
+       int rval;
+
+       ms_iocb_entry_t *ms_pkt;
+       struct ct_sns_req *ct_req;
+       struct ct_sns_rsp *ct_rsp;
+
+       /* Issue RPA */
+       /* Prepare common MS IOCB */
+       ms_pkt = ha->isp_ops.prep_ms_fdmi_iocb(ha, DHBA_REQ_SIZE,
+           DHBA_RSP_SIZE);
+
+       /* Prepare CT request */
+       ct_req = qla2x00_prep_ct_fdmi_req(&ha->ct_sns->p.req, DHBA_CMD,
+           DHBA_RSP_SIZE);
+       ct_rsp = &ha->ct_sns->p.rsp;
+
+       /* Prepare FDMI command arguments -- portname. */
+       memcpy(ct_req->req.dhba.port_name, ha->port_name, WWN_SIZE);
+
+       DEBUG13(printk("%s(%ld): DHBA portname="
+           "%02x%02x%02x%02x%02x%02x%02x%02x.\n", __func__, ha->host_no,
+           ct_req->req.dhba.port_name[0], ct_req->req.dhba.port_name[1],
+           ct_req->req.dhba.port_name[2], ct_req->req.dhba.port_name[3],
+           ct_req->req.dhba.port_name[4], ct_req->req.dhba.port_name[5],
+           ct_req->req.dhba.port_name[6], ct_req->req.dhba.port_name[7]));
+
+       /* Execute MS IOCB */
+       rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma,
+           sizeof(ms_iocb_entry_t));
+       if (rval != QLA_SUCCESS) {
+               /*EMPTY*/
+               DEBUG2_3(printk("scsi(%ld): DHBA issue IOCB failed (%d).\n",
+                   ha->host_no, rval));
+       } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "DHBA") !=
+           QLA_SUCCESS) {
+               rval = QLA_FUNCTION_FAILED;
+       } else {
+               DEBUG2(printk("scsi(%ld): DHBA exiting normally.\n",
+                   ha->host_no));
+       }
+
+       return rval;
+}
+
+/**
+ * qla2x00_fdmi_rpa() -
+ * @ha: HA context
+ *
+ * Returns 0 on success.
+ */
+static int
+qla2x00_fdmi_rpa(scsi_qla_host_t *ha)
+{
+       int rval, alen;
+       uint32_t size, max_frame_size;
+
+       ms_iocb_entry_t *ms_pkt;
+       struct ct_sns_req *ct_req;
+       struct ct_sns_rsp *ct_rsp;
+       uint8_t *entries;
+       struct ct_fdmi_port_attr *eiter;
+       struct init_cb_24xx *icb24 = (struct init_cb_24xx *)ha->init_cb;
+
+       /* Issue RPA */
+       /* Prepare common MS IOCB */
+       /*   Request size adjusted after CT preparation */
+       ms_pkt = ha->isp_ops.prep_ms_fdmi_iocb(ha, 0, RPA_RSP_SIZE);
+
+       /* Prepare CT request */
+       ct_req = qla2x00_prep_ct_fdmi_req(&ha->ct_sns->p.req, RPA_CMD,
+           RPA_RSP_SIZE);
+       ct_rsp = &ha->ct_sns->p.rsp;
+
+       /* Prepare FDMI command arguments -- attribute block, attributes. */
+       memcpy(ct_req->req.rpa.port_name, ha->port_name, WWN_SIZE);
+       size = WWN_SIZE + 4;
+
+       /* Attributes */
+       ct_req->req.rpa.attrs.count =
+           __constant_cpu_to_be32(FDMI_PORT_ATTR_COUNT);
+       entries = ct_req->req.rpa.port_name;
+
+       /* FC4 types. */
+       eiter = (struct ct_fdmi_port_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_PORT_FC4_TYPES);
+       eiter->len = __constant_cpu_to_be16(4 + 32);
+       eiter->a.fc4_types[2] = 0x01;
+       size += 4 + 32;
+
+       DEBUG13(printk("%s(%ld): FC4_TYPES=%02x %02x.\n", __func__, ha->host_no,
+           eiter->a.fc4_types[2], eiter->a.fc4_types[1]));
+
+       /* Supported speed. */
+       eiter = (struct ct_fdmi_port_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_PORT_SUPPORT_SPEED);
+       eiter->len = __constant_cpu_to_be16(4 + 4);
+       if (IS_QLA25XX(ha))
+               eiter->a.sup_speed = __constant_cpu_to_be32(4);
+       else if (IS_QLA24XX(ha))
+               eiter->a.sup_speed = __constant_cpu_to_be32(8);
+       else if (IS_QLA23XX(ha))
+               eiter->a.sup_speed = __constant_cpu_to_be32(2);
+       else
+               eiter->a.sup_speed = __constant_cpu_to_be32(1);
+       size += 4 + 4;
+
+       DEBUG13(printk("%s(%ld): SUPPORTED_SPEED=%x.\n", __func__, ha->host_no,
+           eiter->a.sup_speed));
+
+       /* Current speed. */
+       eiter = (struct ct_fdmi_port_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_PORT_CURRENT_SPEED);
+       eiter->len = __constant_cpu_to_be16(4 + 4);
+       switch (ha->link_data_rate) {
+       case 0:
+               eiter->a.cur_speed = __constant_cpu_to_be32(1);
+               break;
+       case 1:
+               eiter->a.cur_speed = __constant_cpu_to_be32(2);
+               break;
+       case 3:
+               eiter->a.cur_speed = __constant_cpu_to_be32(8);
+               break;
+       case 4:
+               eiter->a.cur_speed = __constant_cpu_to_be32(4);
+               break;
+       }
+       size += 4 + 4;
+
+       DEBUG13(printk("%s(%ld): CURRENT_SPEED=%x.\n", __func__, ha->host_no,
+           eiter->a.cur_speed));
+
+       /* Max frame size. */
+       eiter = (struct ct_fdmi_port_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_PORT_MAX_FRAME_SIZE);
+       eiter->len = __constant_cpu_to_be16(4 + 4);
+       max_frame_size = IS_QLA24XX(ha) || IS_QLA25XX(ha) ?
+               (uint32_t) icb24->frame_payload_size:
+               (uint32_t) ha->init_cb->frame_payload_size;
+       eiter->a.max_frame_size = cpu_to_be32(max_frame_size);
+       size += 4 + 4;
+
+       DEBUG13(printk("%s(%ld): MAX_FRAME_SIZE=%x.\n", __func__, ha->host_no,
+           eiter->a.max_frame_size));
+
+       /* OS device name. */
+       eiter = (struct ct_fdmi_port_attr *) (entries + size);
+       eiter->type = __constant_cpu_to_be16(FDMI_PORT_OS_DEVICE_NAME);
+       sprintf(eiter->a.os_dev_name, "/proc/scsi/qla2xxx/%ld", ha->host_no);
+       alen = strlen(eiter->a.os_dev_name);
+       alen += (alen & 3) ? (4 - (alen & 3)) : 4;
+       eiter->len = cpu_to_be16(4 + alen);
+       size += 4 + alen;
+
+       DEBUG13(printk("%s(%ld): OS_DEVICE_NAME=%s.\n", __func__, ha->host_no,
+           eiter->a.os_dev_name));
+
+       /* Update MS request size. */
+       qla2x00_update_ms_fdmi_iocb(ha, size + 16);
+
+       DEBUG13(printk("%s(%ld): RPA portname="
+           "%02x%02x%02x%02x%02x%02x%02x%02x size=%d.\n", __func__,
+           ha->host_no, ct_req->req.rpa.port_name[0],
+           ct_req->req.rpa.port_name[1], ct_req->req.rpa.port_name[2],
+           ct_req->req.rpa.port_name[3], ct_req->req.rpa.port_name[4],
+           ct_req->req.rpa.port_name[5], ct_req->req.rpa.port_name[6],
+           ct_req->req.rpa.port_name[7], size));
+       DEBUG13(qla2x00_dump_buffer(entries, size));
+
+       /* Execute MS IOCB */
+       rval = qla2x00_issue_iocb(ha, ha->ms_iocb, ha->ms_iocb_dma,
+           sizeof(ms_iocb_entry_t));
+       if (rval != QLA_SUCCESS) {
+               /*EMPTY*/
+               DEBUG2_3(printk("scsi(%ld): RPA issue IOCB failed (%d).\n",
+                   ha->host_no, rval));
+       } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, "RPA") !=
+           QLA_SUCCESS) {
+               rval = QLA_FUNCTION_FAILED;
+       } else {
+               DEBUG2(printk("scsi(%ld): RPA exiting normally.\n",
+                   ha->host_no));
+       }
+
+       return rval;
+}
+
+/**
+ * qla2x00_fdmi_register() -
+ * @ha: HA context
+ *
+ * Returns 0 on success.
+ */
+int
+qla2x00_fdmi_register(scsi_qla_host_t *ha)
+{
+       int rval;
+
+       rval = qla2x00_mgmt_svr_login(ha);
+       if (rval)
+               return rval;
+
+       rval = qla2x00_fdmi_rhba(ha);
+       if (rval) {
+               if (rval != QLA_ALREADY_REGISTERED)
+                       return rval;
+
+               rval = qla2x00_fdmi_dhba(ha);
+               if (rval)
+                       return rval;
+
+               rval = qla2x00_fdmi_rhba(ha);
+               if (rval)
+                       return rval;
+       }
+       rval = qla2x00_fdmi_rpa(ha);
+
+       return rval;
+}
index a6d2559217cded06fa9737cb9d9989190f9495e8..c619583e646be32e7bf0c8d44f1b107c275549ed 100644 (file)
@@ -88,6 +88,7 @@ qla2x00_initialize_adapter(scsi_qla_host_t *ha)
        ha->mbx_flags = 0;
        ha->isp_abort_cnt = 0;
        ha->beacon_blink_led = 0;
+       set_bit(REGISTER_FDMI_NEEDED, &ha->dpc_flags);
 
        qla_printk(KERN_INFO, ha, "Configuring PCI space...\n");
        rval = ha->isp_ops.pci_config(ha);
@@ -1563,7 +1564,7 @@ qla2x00_nvram_config(scsi_qla_host_t *ha)
        ha->flags.enable_lip_reset = ((nv->host_p[1] & BIT_1) ? 1 : 0);
        ha->flags.enable_lip_full_login = ((nv->host_p[1] & BIT_2) ? 1 : 0);
        ha->flags.enable_target_reset = ((nv->host_p[1] & BIT_3) ? 1 : 0);
-       ha->flags.enable_led_scheme = ((nv->efi_parameters & BIT_3) ? 1 : 0);
+       ha->flags.enable_led_scheme = (nv->special_options[1] & BIT_4) ? 1 : 0;
 
        ha->operating_mode =
            (icb->add_firmware_options[0] & (BIT_6 | BIT_5 | BIT_4)) >> 4;
@@ -1697,6 +1698,7 @@ qla2x00_alloc_fcport(scsi_qla_host_t *ha, int flags)
        fcport->iodesc_idx_sent = IODESC_INVALID_INDEX;
        atomic_set(&fcport->state, FCS_UNCONFIGURED);
        fcport->flags = FCF_RLC_SUPPORT;
+       fcport->supported_classes = FC_COS_UNSPECIFIED;
 
        return (fcport);
 }
@@ -1898,7 +1900,8 @@ qla2x00_configure_local_loop(scsi_qla_host_t *ha)
                        continue;
 
                /* Bypass if not same domain and area of adapter. */
-               if (area != ha->d_id.b.area || domain != ha->d_id.b.domain)
+               if (area && domain &&
+                   (area != ha->d_id.b.area || domain != ha->d_id.b.domain))
                        continue;
 
                /* Bypass invalid local loop ID. */
@@ -2075,6 +2078,7 @@ qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport)
                return;
        }
        rport->dd_data = fcport;
+       rport->supported_classes = fcport->supported_classes;
 
        rport_ids.roles = FC_RPORT_ROLE_UNKNOWN;
        if (fcport->port_type == FCT_INITIATOR)
@@ -2130,6 +2134,11 @@ qla2x00_configure_fabric(scsi_qla_host_t *ha)
                return (QLA_SUCCESS);
        }
        do {
+               /* FDMI support. */
+               if (ql2xfdmienable &&
+                   test_and_clear_bit(REGISTER_FDMI_NEEDED, &ha->dpc_flags))
+                       qla2x00_fdmi_register(ha);
+
                /* Ensure we are logged into the SNS. */
                if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
                        loop_id = NPH_SNS;
@@ -2392,6 +2401,12 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *ha, struct list_head *new_fcports)
                if (new_fcport->d_id.b24 == ha->d_id.b24)
                        continue;
 
+               /* Bypass if same domain and area of adapter. */
+               if (((new_fcport->d_id.b24 & 0xffff00) ==
+                   (ha->d_id.b24 & 0xffff00)) && ha->current_topology ==
+                       ISP_CFG_FL)
+                           continue;
+
                /* Bypass reserved domain fields. */
                if ((new_fcport->d_id.b.domain & 0xf0) == 0xf0)
                        continue;
@@ -2794,6 +2809,11 @@ qla2x00_fabric_login(scsi_qla_host_t *ha, fc_port_t *fcport,
                                }
                        }
 
+                       if (mb[10] & BIT_0)
+                               fcport->supported_classes |= FC_COS_CLASS2;
+                       if (mb[10] & BIT_1)
+                               fcport->supported_classes |= FC_COS_CLASS3;
+
                        rval = QLA_SUCCESS;
                        break;
                } else if (mb[0] == MBS_LOOP_ID_USED) {
index ebdc3c54d155d0a35f6700f1b9e44651f0959015..37f82e2cd7fbd4e3db61587d8841e03d95645483 100644 (file)
@@ -810,12 +810,8 @@ qla24xx_start_scsi(srb_t *sp)
                        ha->req_q_cnt = ha->request_q_length -
                                (ha->req_ring_index - cnt);
        }
-       if (ha->req_q_cnt < (req_cnt + 2)) {
-               if  (cmd->use_sg)
-                       pci_unmap_sg(ha->pdev, sg, cmd->use_sg,
-                                       cmd->sc_data_direction);
+       if (ha->req_q_cnt < (req_cnt + 2))
                goto queuing_error;
-       }
 
        /* Build command packet. */
        ha->current_outstanding_cmd = handle;
index f910de6dd4375c37474cdeea3367ad4763775634..c255bb0268a9969d7fb0d4c1e0219ff94c0e14e0 100644 (file)
@@ -451,6 +451,8 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb)
 
                ha->flags.management_server_logged_in = 0;
                ha->link_data_rate = 0;
+               if (ql2xfdmienable)
+                       set_bit(REGISTER_FDMI_NEEDED, &ha->dpc_flags);
 
                /* Update AEN queue. */
                qla2x00_enqueue_aen(ha, MBA_LOOP_DOWN, NULL);
index 409ea0ac40327804a034604ab5788405c9c35563..13e1c9047079e8fcfd2ef808f1ba93d1fbef13e9 100644 (file)
@@ -19,6 +19,7 @@
 #include "qla_def.h"
 
 #include <linux/delay.h>
+#include <scsi/scsi_transport_fc.h>
 
 static void
 qla2x00_mbx_sem_timeout(unsigned long data)
@@ -251,7 +252,7 @@ qla2x00_mailbox_command(scsi_qla_host_t *ha, mbx_cmd_t *mcp)
                        mb0 = RD_REG_WORD(&reg->isp24.mailbox0);
                        ictrl = RD_REG_DWORD(&reg->isp24.ictrl);
                } else {
-                       mb0 = RD_MAILBOX_REG(ha, reg->isp, 0);
+                       mb0 = RD_MAILBOX_REG(ha, &reg->isp, 0);
                        ictrl = RD_REG_WORD(&reg->isp.ictrl);
                }
                printk("%s(%ld): **** MB Command Timeout for cmd %x ****\n",
@@ -982,58 +983,6 @@ qla2x00_abort_target(fc_port_t *fcport)
 }
 #endif
 
-/*
- * qla2x00_target_reset
- *     Issue target reset mailbox command.
- *
- * Input:
- *     ha = adapter block pointer.
- *     TARGET_QUEUE_LOCK must be released.
- *     ADAPTER_STATE_LOCK must be released.
- *
- * Returns:
- *     qla2x00 local function return status code.
- *
- * Context:
- *     Kernel context.
- */
-int
-qla2x00_target_reset(scsi_qla_host_t *ha, struct fc_port *fcport)
-{
-       int rval;
-       mbx_cmd_t mc;
-       mbx_cmd_t *mcp = &mc;
-
-       DEBUG11(printk("qla2x00_target_reset(%ld): entered.\n", ha->host_no);)
-
-       if (atomic_read(&fcport->state) != FCS_ONLINE)
-               return 0;
-
-       mcp->mb[0] = MBC_TARGET_RESET;
-       if (HAS_EXTENDED_IDS(ha))
-               mcp->mb[1] = fcport->loop_id;
-       else
-               mcp->mb[1] = fcport->loop_id << 8;
-       mcp->mb[2] = ha->loop_reset_delay;
-       mcp->out_mb = MBX_2|MBX_1|MBX_0;
-       mcp->in_mb = MBX_0;
-       mcp->tov = 30;
-       mcp->flags = 0;
-       rval = qla2x00_mailbox_command(ha, mcp);
-
-       if (rval != QLA_SUCCESS) {
-               /*EMPTY*/
-               DEBUG2_3_11(printk("qla2x00_target_reset(%ld): failed=%x.\n",
-                   ha->host_no, rval);)
-       } else {
-               /*EMPTY*/
-               DEBUG11(printk("qla2x00_target_reset(%ld): done.\n",
-                   ha->host_no);)
-       }
-
-       return rval;
-}
-
 /*
  * qla2x00_get_adapter_id
  *     Get adapter ID and topology.
@@ -1326,6 +1275,10 @@ qla2x00_get_port_database(scsi_qla_host_t *ha, fc_port_t *fcport, uint8_t opt)
                        fcport->port_type = FCT_INITIATOR;
                else
                        fcport->port_type = FCT_TARGET;
+
+               /* Passback COS information. */
+               fcport->supported_classes = (pd->options & BIT_4) ?
+                   FC_COS_CLASS2: FC_COS_CLASS3;
        }
 
 gpd_error_out:
@@ -1661,6 +1614,13 @@ qla24xx_login_fabric(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t domain,
                                mb[1] |= BIT_1;
                } else
                        mb[1] = BIT_0;
+
+               /* Passback COS information. */
+               mb[10] = 0;
+               if (lg->io_parameter[7] || lg->io_parameter[8])
+                       mb[10] |= BIT_0;        /* Class 2. */
+               if (lg->io_parameter[9] || lg->io_parameter[10])
+                       mb[10] |= BIT_1;        /* Class 3. */
        }
 
        dma_pool_free(ha->s_dma_pool, lg, lg_dma);
@@ -1723,6 +1683,8 @@ qla2x00_login_fabric(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t domain,
                mb[2] = mcp->mb[2];
                mb[6] = mcp->mb[6];
                mb[7] = mcp->mb[7];
+               /* COS retrieved from Get-Port-Database mailbox command. */
+               mb[10] = 0;
        }
 
        if (rval != QLA_SUCCESS) {
@@ -2465,3 +2427,32 @@ qla2x00_set_serdes_params(scsi_qla_host_t *ha, uint16_t sw_em_1g,
 
        return rval;
 }
+
+int
+qla2x00_stop_firmware(scsi_qla_host_t *ha)
+{
+       int rval;
+       mbx_cmd_t mc;
+       mbx_cmd_t *mcp = &mc;
+
+       if (!IS_QLA24XX(ha) && !IS_QLA25XX(ha))
+               return QLA_FUNCTION_FAILED;
+
+       DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
+
+       mcp->mb[0] = MBC_STOP_FIRMWARE;
+       mcp->out_mb = MBX_0;
+       mcp->in_mb = MBX_0;
+       mcp->tov = 5;
+       mcp->flags = 0;
+       rval = qla2x00_mailbox_command(ha, mcp);
+
+       if (rval != QLA_SUCCESS) {
+               DEBUG2_3_11(printk("%s(%ld): failed=%x.\n", __func__,
+                   ha->host_no, rval));
+       } else {
+               DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no));
+       }
+
+       return rval;
+}
index 9000659bfbcfcccd21ff6d4e68563f78b650e487..8982978c42fdfa4f780bf454bac3e8f8d4de0507 100644 (file)
@@ -79,7 +79,7 @@ module_param(ql2xloginretrycount, int, S_IRUGO|S_IRUSR);
 MODULE_PARM_DESC(ql2xloginretrycount,
                "Specify an alternate value for the NVRAM login retry count.");
 
-int ql2xfwloadbin;
+int ql2xfwloadbin=1;
 module_param(ql2xfwloadbin, int, S_IRUGO|S_IRUSR);
 MODULE_PARM_DESC(ql2xfwloadbin,
                "Load ISP2xxx firmware image via hotplug.");
@@ -88,6 +88,12 @@ static void qla2x00_free_device(scsi_qla_host_t *);
 
 static void qla2x00_config_dma_addressing(scsi_qla_host_t *ha);
 
+int ql2xfdmienable;
+module_param(ql2xfdmienable, int, S_IRUGO|S_IRUSR);
+MODULE_PARM_DESC(ql2xfdmienable,
+               "Enables FDMI registratons "
+               "Default is 0 - no FDMI. 1 - perfom FDMI.");
+
 /*
  * SCSI host template entry points
  */
@@ -105,6 +111,9 @@ static int qla2xxx_eh_host_reset(struct scsi_cmnd *);
 static int qla2x00_loop_reset(scsi_qla_host_t *ha);
 static int qla2x00_device_reset(scsi_qla_host_t *, fc_port_t *);
 
+static int qla2x00_change_queue_depth(struct scsi_device *, int);
+static int qla2x00_change_queue_type(struct scsi_device *, int);
+
 static struct scsi_host_template qla2x00_driver_template = {
        .module                 = THIS_MODULE,
        .name                   = "qla2xxx",
@@ -119,6 +128,8 @@ static struct scsi_host_template qla2x00_driver_template = {
 
        .slave_alloc            = qla2xxx_slave_alloc,
        .slave_destroy          = qla2xxx_slave_destroy,
+       .change_queue_depth     = qla2x00_change_queue_depth,
+       .change_queue_type      = qla2x00_change_queue_type,
        .this_id                = -1,
        .cmd_per_lun            = 3,
        .use_clustering         = ENABLE_CLUSTERING,
@@ -129,6 +140,7 @@ static struct scsi_host_template qla2x00_driver_template = {
         * which equates to 0x800000 sectors.
         */
        .max_sectors            = 0xFFFF,
+       .shost_attrs            = qla2x00_host_attrs,
 };
 
 static struct scsi_host_template qla24xx_driver_template = {
@@ -145,12 +157,15 @@ static struct scsi_host_template qla24xx_driver_template = {
 
        .slave_alloc            = qla2xxx_slave_alloc,
        .slave_destroy          = qla2xxx_slave_destroy,
+       .change_queue_depth     = qla2x00_change_queue_depth,
+       .change_queue_type      = qla2x00_change_queue_type,
        .this_id                = -1,
        .cmd_per_lun            = 3,
        .use_clustering         = ENABLE_CLUSTERING,
        .sg_tablesize           = SG_ALL,
 
        .max_sectors            = 0xFFFF,
+       .shost_attrs            = qla2x00_host_attrs,
 };
 
 static struct scsi_transport_template *qla2xxx_transport_template = NULL;
@@ -487,14 +502,13 @@ qc24_fail_command:
 static int
 qla2x00_eh_wait_on_command(scsi_qla_host_t *ha, struct scsi_cmnd *cmd)
 {
-#define ABORT_POLLING_PERIOD   HZ
-#define ABORT_WAIT_ITER                ((10 * HZ) / (ABORT_POLLING_PERIOD))
+#define ABORT_POLLING_PERIOD   1000
+#define ABORT_WAIT_ITER                ((10 * 1000) / (ABORT_POLLING_PERIOD))
        unsigned long wait_iter = ABORT_WAIT_ITER;
        int ret = QLA_SUCCESS;
 
        while (CMD_SP(cmd)) {
-               set_current_state(TASK_UNINTERRUPTIBLE);
-               schedule_timeout(ABORT_POLLING_PERIOD);
+               msleep(ABORT_POLLING_PERIOD);
 
                if (--wait_iter)
                        break;
@@ -1016,7 +1030,7 @@ qla2x00_loop_reset(scsi_qla_host_t *ha)
                        if (fcport->port_type != FCT_TARGET)
                                continue;
 
-                       status = qla2x00_target_reset(ha, fcport);
+                       status = qla2x00_device_reset(ha, fcport);
                        if (status != QLA_SUCCESS)
                                break;
                }
@@ -1103,6 +1117,28 @@ qla2xxx_slave_destroy(struct scsi_device *sdev)
        sdev->hostdata = NULL;
 }
 
+static int
+qla2x00_change_queue_depth(struct scsi_device *sdev, int qdepth)
+{
+       scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth);
+       return sdev->queue_depth;
+}
+
+static int
+qla2x00_change_queue_type(struct scsi_device *sdev, int tag_type)
+{
+       if (sdev->tagged_supported) {
+               scsi_set_tag_type(sdev, tag_type);
+               if (tag_type)
+                       scsi_activate_tcq(sdev, sdev->queue_depth);
+               else
+                       scsi_deactivate_tcq(sdev, sdev->queue_depth);
+       } else
+               tag_type = 0;
+
+       return tag_type;
+}
+
 /**
  * qla2x00_config_dma_addressing() - Configure OS DMA addressing method.
  * @ha: HA context
@@ -1113,36 +1149,23 @@ qla2xxx_slave_destroy(struct scsi_device *sdev)
 static void
 qla2x00_config_dma_addressing(scsi_qla_host_t *ha)
 {
-       /* Assume 32bit DMA address */
+       /* Assume a 32bit DMA mask. */
        ha->flags.enable_64bit_addressing = 0;
 
-       /*
-        * Given the two variants pci_set_dma_mask(), allow the compiler to
-        * assist in setting the proper dma mask.
-        */
-       if (sizeof(dma_addr_t) > 4) {
-               if (pci_set_dma_mask(ha->pdev, DMA_64BIT_MASK) == 0) {
+       if (!dma_set_mask(&ha->pdev->dev, DMA_64BIT_MASK)) {
+               /* Any upper-dword bits set? */
+               if (MSD(dma_get_required_mask(&ha->pdev->dev)) &&
+                   !pci_set_consistent_dma_mask(ha->pdev, DMA_64BIT_MASK)) {
+                       /* Ok, a 64bit DMA mask is applicable. */
                        ha->flags.enable_64bit_addressing = 1;
                        ha->isp_ops.calc_req_entries = qla2x00_calc_iocbs_64;
                        ha->isp_ops.build_iocbs = qla2x00_build_scsi_iocbs_64;
-
-                       if (pci_set_consistent_dma_mask(ha->pdev,
-                           DMA_64BIT_MASK)) {
-                               qla_printk(KERN_DEBUG, ha,
-                                   "Failed to set 64 bit PCI consistent mask; "
-                                   "using 32 bit.\n");
-                               pci_set_consistent_dma_mask(ha->pdev,
-                                   DMA_32BIT_MASK);
-                       }
-               } else {
-                       qla_printk(KERN_DEBUG, ha,
-                           "Failed to set 64 bit PCI DMA mask, falling back "
-                           "to 32 bit MASK.\n");
-                       pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK);
+                       return;
                }
-       } else {
-               pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK);
        }
+
+       dma_set_mask(&ha->pdev->dev, DMA_32BIT_MASK);
+       pci_set_consistent_dma_mask(ha->pdev, DMA_32BIT_MASK);
 }
 
 static int
@@ -1316,6 +1339,7 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
        ha->prev_topology = 0;
        ha->ports = MAX_BUSES;
        ha->init_cb_size = sizeof(init_cb_t);
+       ha->mgmt_svr_loop_id = MANAGEMENT_SERVER;
 
        /* Assign ISP specific operations. */
        ha->isp_ops.pci_config          = qla2100_pci_config;
@@ -1338,6 +1362,7 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
        ha->isp_ops.calc_req_entries    = qla2x00_calc_iocbs_32;
        ha->isp_ops.build_iocbs         = qla2x00_build_scsi_iocbs_32;
        ha->isp_ops.prep_ms_iocb        = qla2x00_prep_ms_iocb;
+       ha->isp_ops.prep_ms_fdmi_iocb   = qla2x00_prep_ms_fdmi_iocb;
        ha->isp_ops.read_nvram          = qla2x00_read_nvram_data;
        ha->isp_ops.write_nvram         = qla2x00_write_nvram_data;
        ha->isp_ops.fw_dump             = qla2100_fw_dump;
@@ -1375,6 +1400,7 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
                ha->response_q_length = RESPONSE_ENTRY_CNT_2300;
                ha->last_loop_id = SNS_LAST_LOOP_ID_2300;
                ha->init_cb_size = sizeof(struct init_cb_24xx);
+               ha->mgmt_svr_loop_id = 10;
                ha->isp_ops.pci_config = qla24xx_pci_config;
                ha->isp_ops.reset_chip = qla24xx_reset_chip;
                ha->isp_ops.chip_diag = qla24xx_chip_diag;
@@ -1395,6 +1421,7 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
                ha->isp_ops.fabric_login = qla24xx_login_fabric;
                ha->isp_ops.fabric_logout = qla24xx_fabric_logout;
                ha->isp_ops.prep_ms_iocb = qla24xx_prep_ms_iocb;
+               ha->isp_ops.prep_ms_fdmi_iocb = qla24xx_prep_ms_fdmi_iocb;
                ha->isp_ops.read_nvram = qla24xx_read_nvram_data;
                ha->isp_ops.write_nvram = qla24xx_write_nvram_data;
                ha->isp_ops.fw_dump = qla24xx_fw_dump;
@@ -1558,8 +1585,6 @@ int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
        return 0;
 
 probe_failed:
-       fc_remove_host(ha->host);
-
        qla2x00_free_device(ha);
 
        scsi_host_put(host);
@@ -1601,10 +1626,6 @@ qla2x00_free_device(scsi_qla_host_t *ha)
        if (!IS_QLA2100(ha) && !IS_QLA2200(ha))
                qla2x00_cancel_io_descriptors(ha);
 
-       /* turn-off interrupts on the card */
-       if (ha->interrupts_on)
-               ha->isp_ops.disable_intrs(ha);
-
        /* Disable timer */
        if (ha->timer_active)
                qla2x00_stop_timer(ha);
@@ -1624,8 +1645,14 @@ qla2x00_free_device(scsi_qla_host_t *ha)
                }
        }
 
-       qla2x00_mem_free(ha);
+       /* Stop currently executing firmware. */
+       qla2x00_stop_firmware(ha);
+
+       /* turn-off interrupts on the card */
+       if (ha->interrupts_on)
+               ha->isp_ops.disable_intrs(ha);
 
+       qla2x00_mem_free(ha);
 
        ha->flags.online = 0;
 
@@ -1934,7 +1961,7 @@ qla2x00_mem_free(scsi_qla_host_t *ha)
 {
        struct list_head        *fcpl, *fcptemp;
        fc_port_t       *fcport;
-       unsigned long   wtime;/* max wait time if mbx cmd is busy. */
+       unsigned int    wtime;/* max wait time if mbx cmd is busy. */
 
        if (ha == NULL) {
                /* error */
@@ -1943,11 +1970,9 @@ qla2x00_mem_free(scsi_qla_host_t *ha)
        }
 
        /* Make sure all other threads are stopped. */
-       wtime = 60 * HZ;
-       while (ha->dpc_wait && wtime) {
-               set_current_state(TASK_INTERRUPTIBLE);
-               wtime = schedule_timeout(wtime);
-       }
+       wtime = 60 * 1000;
+       while (ha->dpc_wait && wtime)
+               wtime = msleep_interruptible(wtime);
 
        /* free ioctl memory */
        qla2x00_free_ioctl_mem(ha);
@@ -2478,15 +2503,15 @@ qla2x00_timer(scsi_qla_host_t *ha)
 int
 qla2x00_down_timeout(struct semaphore *sema, unsigned long timeout)
 {
-       const unsigned int step = HZ/10;
+       const unsigned int step = 100; /* msecs */
+       unsigned int iterations = jiffies_to_msecs(timeout)/100;
 
        do {
                if (!down_trylock(sema))
                        return 0;
-               set_current_state(TASK_INTERRUPTIBLE);
-               if (schedule_timeout(step))
+               if (msleep_interruptible(step))
                        break;
-       } while ((timeout -= step) > 0);
+       } while (--iterations >= 0);
 
        return -ETIMEDOUT;
 }
index d7f5c608009c3435da3bf10fb52897842a92cf68..c14abf743b7c6f7a970016f4e9b3a0d4e666c1cd 100644 (file)
@@ -468,21 +468,12 @@ qla24xx_read_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
     uint32_t dwords)
 {
        uint32_t i;
-       struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
-
-       /* Pause RISC. */
-       WRT_REG_DWORD(&reg->hccr, HCCRX_SET_RISC_PAUSE);
-       RD_REG_DWORD(&reg->hccr);               /* PCI Posting. */
 
        /* Dword reads to flash. */
        for (i = 0; i < dwords; i++, faddr++)
                dwptr[i] = cpu_to_le32(qla24xx_read_flash_dword(ha,
                    flash_data_to_access_addr(faddr)));
 
-       /* Release RISC pause. */
-       WRT_REG_DWORD(&reg->hccr, HCCRX_REL_RISC_PAUSE);
-       RD_REG_DWORD(&reg->hccr);               /* PCI Posting. */
-
        return dwptr;
 }
 
@@ -532,10 +523,6 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
 
        ret = QLA_SUCCESS;
 
-       /* Pause RISC. */
-       WRT_REG_DWORD(&reg->hccr, HCCRX_SET_RISC_PAUSE);
-       RD_REG_DWORD(&reg->hccr);               /* PCI Posting. */
-
        qla24xx_get_flash_manufacturer(ha, &man_id, &flash_id);
        DEBUG9(printk("%s(%ld): Flash man_id=%d flash_id=%d\n", __func__,
            ha->host_no, man_id, flash_id));
@@ -599,10 +586,6 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
            RD_REG_DWORD(&reg->ctrl_status) & ~CSRX_FLASH_ENABLE);
        RD_REG_DWORD(&reg->ctrl_status);        /* PCI Posting. */
 
-       /* Release RISC pause. */
-       WRT_REG_DWORD(&reg->hccr, HCCRX_REL_RISC_PAUSE);
-       RD_REG_DWORD(&reg->hccr);               /* PCI Posting. */
-
        return ret;
 }
 
@@ -630,11 +613,6 @@ qla24xx_read_nvram_data(scsi_qla_host_t *ha, uint8_t *buf, uint32_t naddr,
 {
        uint32_t i;
        uint32_t *dwptr;
-       struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
-
-       /* Pause RISC. */
-       WRT_REG_DWORD(&reg->hccr, HCCRX_SET_RISC_PAUSE);
-       RD_REG_DWORD(&reg->hccr);       /* PCI Posting. */
 
        /* Dword reads to flash. */
        dwptr = (uint32_t *)buf;
@@ -642,10 +620,6 @@ qla24xx_read_nvram_data(scsi_qla_host_t *ha, uint8_t *buf, uint32_t naddr,
                dwptr[i] = cpu_to_le32(qla24xx_read_flash_dword(ha,
                    nvram_data_to_access_addr(naddr)));
 
-       /* Release RISC pause. */
-       WRT_REG_DWORD(&reg->hccr, HCCRX_REL_RISC_PAUSE);
-       RD_REG_DWORD(&reg->hccr);       /* PCI Posting. */
-
        return buf;
 }
 
@@ -690,10 +664,6 @@ qla24xx_write_nvram_data(scsi_qla_host_t *ha, uint8_t *buf, uint32_t naddr,
 
        ret = QLA_SUCCESS;
 
-       /* Pause RISC. */
-       WRT_REG_DWORD(&reg->hccr, HCCRX_SET_RISC_PAUSE);
-       RD_REG_DWORD(&reg->hccr);               /* PCI Posting. */
-
        /* Enable flash write. */
        WRT_REG_DWORD(&reg->ctrl_status,
            RD_REG_DWORD(&reg->ctrl_status) | CSRX_FLASH_ENABLE);
@@ -728,9 +698,5 @@ qla24xx_write_nvram_data(scsi_qla_host_t *ha, uint8_t *buf, uint32_t naddr,
            RD_REG_DWORD(&reg->ctrl_status) & ~CSRX_FLASH_ENABLE);
        RD_REG_DWORD(&reg->ctrl_status);        /* PCI Posting. */
 
-       /* Release RISC pause. */
-       WRT_REG_DWORD(&reg->hccr, HCCRX_REL_RISC_PAUSE);
-       RD_REG_DWORD(&reg->hccr);               /* PCI Posting. */
-
        return ret;
 }
index e3cd3618bc542d687381c3b0b9ec37c4f7dc20d2..eae7d6edd53112515b657ad439fafe905759aec7 100644 (file)
@@ -19,9 +19,9 @@
 /*
  * Driver version
  */
-#define QLA2XXX_VERSION      "8.01.00b5-k"
+#define QLA2XXX_VERSION      "8.01.00-k"
 
 #define QLA_DRIVER_MAJOR_VER   8
 #define QLA_DRIVER_MINOR_VER   1
 #define QLA_DRIVER_PATCH_VER   0
-#define QLA_DRIVER_BETA_VER    5
+#define QLA_DRIVER_BETA_VER    0
diff --git a/drivers/scsi/raid_class.c b/drivers/scsi/raid_class.c
new file mode 100644 (file)
index 0000000..f1ea502
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+ * RAID Attributes
+ */
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/list.h>
+#include <linux/raid_class.h>
+#include <scsi/scsi_device.h>
+#include <scsi/scsi_host.h>
+
+#define RAID_NUM_ATTRS 3
+
+struct raid_internal {
+       struct raid_template r;
+       struct raid_function_template *f;
+       /* The actual attributes */
+       struct class_device_attribute private_attrs[RAID_NUM_ATTRS];
+       /* The array of null terminated pointers to attributes 
+        * needed by scsi_sysfs.c */
+       struct class_device_attribute *attrs[RAID_NUM_ATTRS + 1];
+};
+
+struct raid_component {
+       struct list_head node;
+       struct device *dev;
+       int num;
+};
+
+#define to_raid_internal(tmpl) container_of(tmpl, struct raid_internal, r)
+
+#define tc_to_raid_internal(tcont) ({                                  \
+       struct raid_template *r =                                       \
+               container_of(tcont, struct raid_template, raid_attrs);  \
+       to_raid_internal(r);                                            \
+})
+
+#define ac_to_raid_internal(acont) ({                                  \
+       struct transport_container *tc =                                \
+               container_of(acont, struct transport_container, ac);    \
+       tc_to_raid_internal(tc);                                        \
+})
+
+#define class_device_to_raid_internal(cdev) ({                         \
+       struct attribute_container *ac =                                \
+               attribute_container_classdev_to_container(cdev);        \
+       ac_to_raid_internal(ac);                                        \
+})
+       
+
+static int raid_match(struct attribute_container *cont, struct device *dev)
+{
+       /* We have to look for every subsystem that could house
+        * emulated RAID devices, so start with SCSI */
+       struct raid_internal *i = ac_to_raid_internal(cont);
+
+       if (scsi_is_sdev_device(dev)) {
+               struct scsi_device *sdev = to_scsi_device(dev);
+
+               if (i->f->cookie != sdev->host->hostt)
+                       return 0;
+
+               return i->f->is_raid(dev);
+       }
+       /* FIXME: look at other subsystems too */
+       return 0;
+}
+
+static int raid_setup(struct transport_container *tc, struct device *dev,
+                      struct class_device *cdev)
+{
+       struct raid_data *rd;
+
+       BUG_ON(class_get_devdata(cdev));
+
+       rd = kmalloc(sizeof(*rd), GFP_KERNEL);
+       if (!rd)
+               return -ENOMEM;
+
+       memset(rd, 0, sizeof(*rd));
+       INIT_LIST_HEAD(&rd->component_list);
+       class_set_devdata(cdev, rd);
+               
+       return 0;
+}
+
+static int raid_remove(struct transport_container *tc, struct device *dev,
+                      struct class_device *cdev)
+{
+       struct raid_data *rd = class_get_devdata(cdev);
+       struct raid_component *rc, *next;
+       class_set_devdata(cdev, NULL);
+       list_for_each_entry_safe(rc, next, &rd->component_list, node) {
+               char buf[40];
+               snprintf(buf, sizeof(buf), "component-%d", rc->num);
+               list_del(&rc->node);
+               sysfs_remove_link(&cdev->kobj, buf);
+               kfree(rc);
+       }
+       kfree(class_get_devdata(cdev));
+       return 0;
+}
+
+static DECLARE_TRANSPORT_CLASS(raid_class,
+                              "raid_devices",
+                              raid_setup,
+                              raid_remove,
+                              NULL);
+
+static struct {
+       enum raid_state value;
+       char            *name;
+} raid_states[] = {
+       { RAID_ACTIVE, "active" },
+       { RAID_DEGRADED, "degraded" },
+       { RAID_RESYNCING, "resyncing" },
+       { RAID_OFFLINE, "offline" },
+};
+
+static const char *raid_state_name(enum raid_state state)
+{
+       int i;
+       char *name = NULL;
+
+       for (i = 0; i < sizeof(raid_states)/sizeof(raid_states[0]); i++) {
+               if (raid_states[i].value == state) {
+                       name = raid_states[i].name;
+                       break;
+               }
+       }
+       return name;
+}
+
+
+#define raid_attr_show_internal(attr, fmt, var, code)                  \
+static ssize_t raid_show_##attr(struct class_device *cdev, char *buf)  \
+{                                                                      \
+       struct raid_data *rd = class_get_devdata(cdev);                 \
+       code                                                            \
+       return snprintf(buf, 20, #fmt "\n", var);                       \
+}
+
+#define raid_attr_ro_states(attr, states, code)                                \
+raid_attr_show_internal(attr, %s, name,                                        \
+       const char *name;                                               \
+       code                                                            \
+       name = raid_##states##_name(rd->attr);                          \
+)                                                                      \
+static CLASS_DEVICE_ATTR(attr, S_IRUGO, raid_show_##attr, NULL)
+
+
+#define raid_attr_ro_internal(attr, code)                              \
+raid_attr_show_internal(attr, %d, rd->attr, code)                      \
+static CLASS_DEVICE_ATTR(attr, S_IRUGO, raid_show_##attr, NULL)
+
+#define ATTR_CODE(attr)                                                        \
+       struct raid_internal *i = class_device_to_raid_internal(cdev);  \
+       if (i->f->get_##attr)                                           \
+               i->f->get_##attr(cdev->dev);
+
+#define raid_attr_ro(attr)     raid_attr_ro_internal(attr, )
+#define raid_attr_ro_fn(attr)  raid_attr_ro_internal(attr, ATTR_CODE(attr))
+#define raid_attr_ro_state(attr)       raid_attr_ro_states(attr, attr, ATTR_CODE(attr))
+
+raid_attr_ro(level);
+raid_attr_ro_fn(resync);
+raid_attr_ro_state(state);
+
+void raid_component_add(struct raid_template *r,struct device *raid_dev,
+                       struct device *component_dev)
+{
+       struct class_device *cdev =
+               attribute_container_find_class_device(&r->raid_attrs.ac,
+                                                     raid_dev);
+       struct raid_component *rc;
+       struct raid_data *rd = class_get_devdata(cdev);
+       char buf[40];
+
+       rc = kmalloc(sizeof(*rc), GFP_KERNEL);
+       if (!rc)
+               return;
+
+       INIT_LIST_HEAD(&rc->node);
+       rc->dev = component_dev;
+       rc->num = rd->component_count++;
+
+       snprintf(buf, sizeof(buf), "component-%d", rc->num);
+       list_add_tail(&rc->node, &rd->component_list);
+       sysfs_create_link(&cdev->kobj, &component_dev->kobj, buf);
+}
+EXPORT_SYMBOL(raid_component_add);
+
+struct raid_template *
+raid_class_attach(struct raid_function_template *ft)
+{
+       struct raid_internal *i = kmalloc(sizeof(struct raid_internal),
+                                         GFP_KERNEL);
+       int count = 0;
+
+       if (unlikely(!i))
+               return NULL;
+
+       memset(i, 0, sizeof(*i));
+
+       i->f = ft;
+
+       i->r.raid_attrs.ac.class = &raid_class.class;
+       i->r.raid_attrs.ac.match = raid_match;
+       i->r.raid_attrs.ac.attrs = &i->attrs[0];
+
+       attribute_container_register(&i->r.raid_attrs.ac);
+
+       i->attrs[count++] = &class_device_attr_level;
+       i->attrs[count++] = &class_device_attr_resync;
+       i->attrs[count++] = &class_device_attr_state;
+
+       i->attrs[count] = NULL;
+       BUG_ON(count > RAID_NUM_ATTRS);
+
+       return &i->r;
+}
+EXPORT_SYMBOL(raid_class_attach);
+
+void
+raid_class_release(struct raid_template *r)
+{
+       struct raid_internal *i = to_raid_internal(r);
+
+       attribute_container_unregister(&i->r.raid_attrs.ac);
+
+       kfree(i);
+}
+EXPORT_SYMBOL(raid_class_release);
+
+static __init int raid_init(void)
+{
+       return transport_class_register(&raid_class);
+}
+
+static __exit void raid_exit(void)
+{
+       transport_class_unregister(&raid_class);
+}
+
+MODULE_AUTHOR("James Bottomley");
+MODULE_DESCRIPTION("RAID device class");
+MODULE_LICENSE("GPL");
+
+module_init(raid_init);
+module_exit(raid_exit);
+
diff --git a/drivers/scsi/sata_mv.c b/drivers/scsi/sata_mv.c
new file mode 100644 (file)
index 0000000..f97e3af
--- /dev/null
@@ -0,0 +1,843 @@
+/*
+ * sata_mv.c - Marvell SATA support
+ *
+ * Copyright 2005: EMC Corporation, all rights reserved. 
+ *
+ * Please ALWAYS copy linux-ide@vger.kernel.org on emails.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * 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 <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/init.h>
+#include <linux/blkdev.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/sched.h>
+#include <linux/dma-mapping.h>
+#include "scsi.h"
+#include <scsi/scsi_host.h>
+#include <linux/libata.h>
+#include <asm/io.h>
+
+#define DRV_NAME       "sata_mv"
+#define DRV_VERSION    "0.12"
+
+enum {
+       /* BAR's are enumerated in terms of pci_resource_start() terms */
+       MV_PRIMARY_BAR          = 0,    /* offset 0x10: memory space */
+       MV_IO_BAR               = 2,    /* offset 0x18: IO space */
+       MV_MISC_BAR             = 3,    /* offset 0x1c: FLASH, NVRAM, SRAM */
+
+       MV_MAJOR_REG_AREA_SZ    = 0x10000,      /* 64KB */
+       MV_MINOR_REG_AREA_SZ    = 0x2000,       /* 8KB */
+
+       MV_PCI_REG_BASE         = 0,
+       MV_IRQ_COAL_REG_BASE    = 0x18000,      /* 6xxx part only */
+       MV_SATAHC0_REG_BASE     = 0x20000,
+
+       MV_PCI_REG_SZ           = MV_MAJOR_REG_AREA_SZ,
+       MV_SATAHC_REG_SZ        = MV_MAJOR_REG_AREA_SZ,
+       MV_SATAHC_ARBTR_REG_SZ  = MV_MINOR_REG_AREA_SZ,         /* arbiter */
+       MV_PORT_REG_SZ          = MV_MINOR_REG_AREA_SZ,
+
+       MV_Q_CT                 = 32,
+       MV_CRQB_SZ              = 32,
+       MV_CRPB_SZ              = 8,
+
+       MV_DMA_BOUNDARY         = 0xffffffffU,
+       SATAHC_MASK             = (~(MV_SATAHC_REG_SZ - 1)),
+
+       MV_PORTS_PER_HC         = 4,
+       /* == (port / MV_PORTS_PER_HC) to determine HC from 0-7 port */
+       MV_PORT_HC_SHIFT        = 2,
+       /* == (port % MV_PORTS_PER_HC) to determine port from 0-7 port */
+       MV_PORT_MASK            = 3,
+
+       /* Host Flags */
+       MV_FLAG_DUAL_HC         = (1 << 30),  /* two SATA Host Controllers */
+       MV_FLAG_IRQ_COALESCE    = (1 << 29),  /* IRQ coalescing capability */
+       MV_FLAG_BDMA            = (1 << 28),  /* Basic DMA */
+
+       chip_504x               = 0,
+       chip_508x               = 1,
+       chip_604x               = 2,
+       chip_608x               = 3,
+
+       /* PCI interface registers */
+
+       PCI_MAIN_CMD_STS_OFS    = 0xd30,
+       STOP_PCI_MASTER         = (1 << 2),
+       PCI_MASTER_EMPTY        = (1 << 3),
+       GLOB_SFT_RST            = (1 << 4),
+
+       PCI_IRQ_CAUSE_OFS       = 0x1d58,
+       PCI_IRQ_MASK_OFS        = 0x1d5c,
+       PCI_UNMASK_ALL_IRQS     = 0x7fffff,     /* bits 22-0 */
+
+       HC_MAIN_IRQ_CAUSE_OFS   = 0x1d60,
+       HC_MAIN_IRQ_MASK_OFS    = 0x1d64,
+       PORT0_ERR               = (1 << 0),     /* shift by port # */
+       PORT0_DONE              = (1 << 1),     /* shift by port # */
+       HC0_IRQ_PEND            = 0x1ff,        /* bits 0-8 = HC0's ports */
+       HC_SHIFT                = 9,            /* bits 9-17 = HC1's ports */
+       PCI_ERR                 = (1 << 18),
+       TRAN_LO_DONE            = (1 << 19),    /* 6xxx: IRQ coalescing */
+       TRAN_HI_DONE            = (1 << 20),    /* 6xxx: IRQ coalescing */
+       PORTS_0_7_COAL_DONE     = (1 << 21),    /* 6xxx: IRQ coalescing */
+       GPIO_INT                = (1 << 22),
+       SELF_INT                = (1 << 23),
+       TWSI_INT                = (1 << 24),
+       HC_MAIN_RSVD            = (0x7f << 25), /* bits 31-25 */
+       HC_MAIN_MASKED_IRQS     = (TRAN_LO_DONE | TRAN_HI_DONE | 
+                                  PORTS_0_7_COAL_DONE | GPIO_INT | TWSI_INT |
+                                  HC_MAIN_RSVD),
+
+       /* SATAHC registers */
+       HC_CFG_OFS              = 0,
+
+       HC_IRQ_CAUSE_OFS        = 0x14,
+       CRBP_DMA_DONE           = (1 << 0),     /* shift by port # */
+       HC_IRQ_COAL             = (1 << 4),     /* IRQ coalescing */
+       DEV_IRQ                 = (1 << 8),     /* shift by port # */
+
+       /* Shadow block registers */
+       SHD_PIO_DATA_OFS        = 0x100,
+       SHD_FEA_ERR_OFS         = 0x104,
+       SHD_SECT_CNT_OFS        = 0x108,
+       SHD_LBA_L_OFS           = 0x10C,
+       SHD_LBA_M_OFS           = 0x110,
+       SHD_LBA_H_OFS           = 0x114,
+       SHD_DEV_HD_OFS          = 0x118,
+       SHD_CMD_STA_OFS         = 0x11C,
+       SHD_CTL_AST_OFS         = 0x120,
+
+       /* SATA registers */
+       SATA_STATUS_OFS         = 0x300,  /* ctrl, err regs follow status */
+       SATA_ACTIVE_OFS         = 0x350,
+
+       /* Port registers */
+       EDMA_CFG_OFS            = 0,
+
+       EDMA_ERR_IRQ_CAUSE_OFS  = 0x8,
+       EDMA_ERR_IRQ_MASK_OFS   = 0xc,
+       EDMA_ERR_D_PAR          = (1 << 0),
+       EDMA_ERR_PRD_PAR        = (1 << 1),
+       EDMA_ERR_DEV            = (1 << 2),
+       EDMA_ERR_DEV_DCON       = (1 << 3),
+       EDMA_ERR_DEV_CON        = (1 << 4),
+       EDMA_ERR_SERR           = (1 << 5),
+       EDMA_ERR_SELF_DIS       = (1 << 7),
+       EDMA_ERR_BIST_ASYNC     = (1 << 8),
+       EDMA_ERR_CRBQ_PAR       = (1 << 9),
+       EDMA_ERR_CRPB_PAR       = (1 << 10),
+       EDMA_ERR_INTRL_PAR      = (1 << 11),
+       EDMA_ERR_IORDY          = (1 << 12),
+       EDMA_ERR_LNK_CTRL_RX    = (0xf << 13),
+       EDMA_ERR_LNK_CTRL_RX_2  = (1 << 15),
+       EDMA_ERR_LNK_DATA_RX    = (0xf << 17),
+       EDMA_ERR_LNK_CTRL_TX    = (0x1f << 21),
+       EDMA_ERR_LNK_DATA_TX    = (0x1f << 26),
+       EDMA_ERR_TRANS_PROTO    = (1 << 31),
+       EDMA_ERR_FATAL          = (EDMA_ERR_D_PAR | EDMA_ERR_PRD_PAR | 
+                                  EDMA_ERR_DEV_DCON | EDMA_ERR_CRBQ_PAR |
+                                  EDMA_ERR_CRPB_PAR | EDMA_ERR_INTRL_PAR |
+                                  EDMA_ERR_IORDY | EDMA_ERR_LNK_CTRL_RX_2 | 
+                                  EDMA_ERR_LNK_DATA_RX |
+                                  EDMA_ERR_LNK_DATA_TX | 
+                                  EDMA_ERR_TRANS_PROTO),
+
+       EDMA_CMD_OFS            = 0x28,
+       EDMA_EN                 = (1 << 0),
+       EDMA_DS                 = (1 << 1),
+       ATA_RST                 = (1 << 2),
+
+       /* BDMA is 6xxx part only */
+       BDMA_CMD_OFS            = 0x224,
+       BDMA_START              = (1 << 0),
+
+       MV_UNDEF                = 0,
+};
+
+struct mv_port_priv {
+
+};
+
+struct mv_host_priv {
+
+};
+
+static void mv_irq_clear(struct ata_port *ap);
+static u32 mv_scr_read(struct ata_port *ap, unsigned int sc_reg_in);
+static void mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val);
+static void mv_phy_reset(struct ata_port *ap);
+static int mv_master_reset(void __iomem *mmio_base);
+static irqreturn_t mv_interrupt(int irq, void *dev_instance,
+                               struct pt_regs *regs);
+static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
+
+static Scsi_Host_Template mv_sht = {
+       .module                 = THIS_MODULE,
+       .name                   = DRV_NAME,
+       .ioctl                  = ata_scsi_ioctl,
+       .queuecommand           = ata_scsi_queuecmd,
+       .eh_strategy_handler    = ata_scsi_error,
+       .can_queue              = ATA_DEF_QUEUE,
+       .this_id                = ATA_SHT_THIS_ID,
+       .sg_tablesize           = MV_UNDEF,
+       .max_sectors            = ATA_MAX_SECTORS,
+       .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,
+       .emulated               = ATA_SHT_EMULATED,
+       .use_clustering         = MV_UNDEF,
+       .proc_name              = DRV_NAME,
+       .dma_boundary           = MV_DMA_BOUNDARY,
+       .slave_configure        = ata_scsi_slave_config,
+       .bios_param             = ata_std_bios_param,
+       .ordered_flush          = 1,
+};
+
+static struct ata_port_operations mv_ops = {
+       .port_disable           = ata_port_disable,
+
+       .tf_load                = ata_tf_load,
+       .tf_read                = ata_tf_read,
+       .check_status           = ata_check_status,
+       .exec_command           = ata_exec_command,
+       .dev_select             = ata_std_dev_select,
+
+       .phy_reset              = mv_phy_reset,
+
+       .qc_prep                = ata_qc_prep,
+       .qc_issue               = ata_qc_issue_prot,
+
+       .eng_timeout            = ata_eng_timeout,
+
+       .irq_handler            = mv_interrupt,
+       .irq_clear              = mv_irq_clear,
+
+       .scr_read               = mv_scr_read,
+       .scr_write              = mv_scr_write,
+
+       .port_start             = ata_port_start,
+       .port_stop              = ata_port_stop,
+       .host_stop              = ata_host_stop,
+};
+
+static struct ata_port_info mv_port_info[] = {
+       {  /* chip_504x */
+               .sht            = &mv_sht,
+               .host_flags     = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
+                                  ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO),
+               .pio_mask       = 0x1f, /* pio4-0 */
+               .udma_mask      = 0,    /* 0x7f (udma6-0 disabled for now) */
+               .port_ops       = &mv_ops,
+       },
+       {  /* chip_508x */
+               .sht            = &mv_sht,
+               .host_flags     = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
+                                  ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO | 
+                                  MV_FLAG_DUAL_HC),
+               .pio_mask       = 0x1f, /* pio4-0 */
+               .udma_mask      = 0,    /* 0x7f (udma6-0 disabled for now) */
+               .port_ops       = &mv_ops,
+       },
+       {  /* chip_604x */
+               .sht            = &mv_sht,
+               .host_flags     = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
+                                  ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO | 
+                                  MV_FLAG_IRQ_COALESCE | MV_FLAG_BDMA),
+               .pio_mask       = 0x1f, /* pio4-0 */
+               .udma_mask      = 0,    /* 0x7f (udma6-0 disabled for now) */
+               .port_ops       = &mv_ops,
+       },
+       {  /* chip_608x */
+               .sht            = &mv_sht,
+               .host_flags     = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
+                                  ATA_FLAG_SATA_RESET | ATA_FLAG_MMIO |
+                                  MV_FLAG_IRQ_COALESCE | MV_FLAG_DUAL_HC |
+                                  MV_FLAG_BDMA),
+               .pio_mask       = 0x1f, /* pio4-0 */
+               .udma_mask      = 0,    /* 0x7f (udma6-0 disabled for now) */
+               .port_ops       = &mv_ops,
+       },
+};
+
+static struct pci_device_id mv_pci_tbl[] = {
+       {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x5040), 0, 0, chip_504x},
+       {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x5041), 0, 0, chip_504x},
+       {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x5080), 0, 0, chip_508x},
+       {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x5081), 0, 0, chip_508x},
+
+       {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6040), 0, 0, chip_604x},
+       {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6041), 0, 0, chip_604x},
+       {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6080), 0, 0, chip_608x},
+       {PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6081), 0, 0, chip_608x},
+       {}                      /* terminate list */
+};
+
+static struct pci_driver mv_pci_driver = {
+       .name                   = DRV_NAME,
+       .id_table               = mv_pci_tbl,
+       .probe                  = mv_init_one,
+       .remove                 = ata_pci_remove_one,
+};
+
+/*
+ * Functions
+ */
+
+static inline void writelfl(unsigned long data, void __iomem *addr)
+{
+       writel(data, addr);
+       (void) readl(addr);     /* flush to avoid PCI posted write */
+}
+
+static inline void __iomem *mv_port_addr_to_hc_base(void __iomem *port_mmio)
+{
+       return ((void __iomem *)((unsigned long)port_mmio & 
+                                (unsigned long)SATAHC_MASK));
+}
+
+static inline void __iomem *mv_hc_base(void __iomem *base, unsigned int hc)
+{
+       return (base + MV_SATAHC0_REG_BASE + (hc * MV_SATAHC_REG_SZ));
+}
+
+static inline void __iomem *mv_port_base(void __iomem *base, unsigned int port)
+{
+       return (mv_hc_base(base, port >> MV_PORT_HC_SHIFT) +
+               MV_SATAHC_ARBTR_REG_SZ + 
+               ((port & MV_PORT_MASK) * MV_PORT_REG_SZ));
+}
+
+static inline void __iomem *mv_ap_base(struct ata_port *ap)
+{
+       return mv_port_base(ap->host_set->mmio_base, ap->port_no);
+}
+
+static inline int mv_get_hc_count(unsigned long flags)
+{
+       return ((flags & MV_FLAG_DUAL_HC) ? 2 : 1);
+}
+
+static inline int mv_is_edma_active(struct ata_port *ap)
+{
+       void __iomem *port_mmio = mv_ap_base(ap);
+       return (EDMA_EN & readl(port_mmio + EDMA_CMD_OFS));
+}
+
+static inline int mv_port_bdma_capable(struct ata_port *ap)
+{
+       return (ap->flags & MV_FLAG_BDMA);
+}
+
+static void mv_irq_clear(struct ata_port *ap)
+{
+}
+
+static unsigned int mv_scr_offset(unsigned int sc_reg_in)
+{
+       unsigned int ofs;
+
+       switch (sc_reg_in) {
+       case SCR_STATUS:
+       case SCR_CONTROL:
+       case SCR_ERROR:
+               ofs = SATA_STATUS_OFS + (sc_reg_in * sizeof(u32));
+               break;
+       case SCR_ACTIVE:
+               ofs = SATA_ACTIVE_OFS;   /* active is not with the others */
+               break;
+       default:
+               ofs = 0xffffffffU;
+               break;
+       }
+       return ofs;
+}
+
+static u32 mv_scr_read(struct ata_port *ap, unsigned int sc_reg_in)
+{
+       unsigned int ofs = mv_scr_offset(sc_reg_in);
+
+       if (0xffffffffU != ofs) {
+               return readl(mv_ap_base(ap) + ofs);
+       } else {
+               return (u32) ofs;
+       }
+}
+
+static void mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val)
+{
+       unsigned int ofs = mv_scr_offset(sc_reg_in);
+
+       if (0xffffffffU != ofs) {
+               writelfl(val, mv_ap_base(ap) + ofs);
+       }
+}
+
+static int mv_master_reset(void __iomem *mmio_base)
+{
+       void __iomem *reg = mmio_base + PCI_MAIN_CMD_STS_OFS;
+       int i, rc = 0;
+       u32 t;
+
+       VPRINTK("ENTER\n");
+
+       /* Following procedure defined in PCI "main command and status
+        * register" table.
+        */
+       t = readl(reg);
+       writel(t | STOP_PCI_MASTER, reg);
+
+       for (i = 0; i < 100; i++) {
+               msleep(10);
+               t = readl(reg);
+               if (PCI_MASTER_EMPTY & t) {
+                       break;
+               }
+       }
+       if (!(PCI_MASTER_EMPTY & t)) {
+               printk(KERN_ERR DRV_NAME "PCI master won't flush\n");
+               rc = 1;         /* broken HW? */
+               goto done;
+       }
+
+       /* set reset */
+       i = 5;
+       do {
+               writel(t | GLOB_SFT_RST, reg);
+               t = readl(reg);
+               udelay(1);
+       } while (!(GLOB_SFT_RST & t) && (i-- > 0));
+
+       if (!(GLOB_SFT_RST & t)) {
+               printk(KERN_ERR DRV_NAME "can't set global reset\n");
+               rc = 1;         /* broken HW? */
+               goto done;
+       }
+
+       /* clear reset */
+       i = 5;
+       do {
+               writel(t & ~GLOB_SFT_RST, reg);
+               t = readl(reg);
+               udelay(1);
+       } while ((GLOB_SFT_RST & t) && (i-- > 0));
+
+       if (GLOB_SFT_RST & t) {
+               printk(KERN_ERR DRV_NAME "can't clear global reset\n");
+               rc = 1;         /* broken HW? */
+       }
+
+ done:
+       VPRINTK("EXIT, rc = %i\n", rc);
+       return rc;
+}
+
+static void mv_err_intr(struct ata_port *ap)
+{
+       void __iomem *port_mmio;
+       u32 edma_err_cause, serr = 0;
+
+       /* bug here b/c we got an err int on a port we don't know about,
+        * so there's no way to clear it
+        */
+       BUG_ON(NULL == ap);
+       port_mmio = mv_ap_base(ap);
+
+       edma_err_cause = readl(port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
+
+       if (EDMA_ERR_SERR & edma_err_cause) {
+               serr = scr_read(ap, SCR_ERROR);
+               scr_write_flush(ap, SCR_ERROR, serr);
+       }
+       DPRINTK("port %u error; EDMA err cause: 0x%08x SERR: 0x%08x\n", 
+               ap->port_no, edma_err_cause, serr);
+
+       /* Clear EDMA now that SERR cleanup done */
+       writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS);
+
+       /* check for fatal here and recover if needed */
+       if (EDMA_ERR_FATAL & edma_err_cause) {
+               mv_phy_reset(ap);
+       }
+}
+
+/* Handle any outstanding interrupts in a single SATAHC 
+ */
+static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
+                        unsigned int hc)
+{
+       void __iomem *mmio = host_set->mmio_base;
+       void __iomem *hc_mmio = mv_hc_base(mmio, hc);
+       struct ata_port *ap;
+       struct ata_queued_cmd *qc;
+       u32 hc_irq_cause;
+       int shift, port, port0, hard_port;
+       u8 ata_status;
+
+       if (hc == 0) {
+               port0 = 0;
+       } else {
+               port0 = MV_PORTS_PER_HC;
+       }
+
+       /* we'll need the HC success int register in most cases */
+       hc_irq_cause = readl(hc_mmio + HC_IRQ_CAUSE_OFS);
+       if (hc_irq_cause) {
+               writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS);
+       }
+
+       VPRINTK("ENTER, hc%u relevant=0x%08x HC IRQ cause=0x%08x\n",
+               hc,relevant,hc_irq_cause);
+
+       for (port = port0; port < port0 + MV_PORTS_PER_HC; port++) {
+               ap = host_set->ports[port];
+               hard_port = port & MV_PORT_MASK;        /* range 0-3 */
+               ata_status = 0xffU;
+
+               if (((CRBP_DMA_DONE | DEV_IRQ) << hard_port) & hc_irq_cause) {
+                       BUG_ON(NULL == ap);
+                       /* rcv'd new resp, basic DMA complete, or ATA IRQ */
+                       /* This is needed to clear the ATA INTRQ.
+                        * FIXME: don't read the status reg in EDMA mode!
+                        */
+                       ata_status = readb((void __iomem *)
+                                          ap->ioaddr.status_addr);
+               }
+
+               shift = port * 2;
+               if (port >= MV_PORTS_PER_HC) {
+                       shift++;        /* skip bit 8 in the HC Main IRQ reg */
+               }
+               if ((PORT0_ERR << shift) & relevant) {
+                       mv_err_intr(ap);
+                       /* FIXME: smart to OR in ATA_ERR? */
+                       ata_status = readb((void __iomem *)
+                                          ap->ioaddr.status_addr) | ATA_ERR;
+               }
+               
+               if (ap) {
+                       qc = ata_qc_from_tag(ap, ap->active_tag);
+                       if (NULL != qc) {
+                               VPRINTK("port %u IRQ found for qc, "
+                                       "ata_status 0x%x\n", port,ata_status);
+                               BUG_ON(0xffU == ata_status);
+                               /* mark qc status appropriately */
+                               ata_qc_complete(qc, ata_status);
+                       }
+               }
+       }
+       VPRINTK("EXIT\n");
+}
+
+static irqreturn_t mv_interrupt(int irq, void *dev_instance,
+                               struct pt_regs *regs)
+{
+       struct ata_host_set *host_set = dev_instance;
+       unsigned int hc, handled = 0, n_hcs;
+       void __iomem *mmio;
+       u32 irq_stat;
+
+       mmio = host_set->mmio_base;
+       irq_stat = readl(mmio + HC_MAIN_IRQ_CAUSE_OFS);
+       n_hcs = mv_get_hc_count(host_set->ports[0]->flags);
+
+       /* check the cases where we either have nothing pending or have read
+        * a bogus register value which can indicate HW removal or PCI fault
+        */
+       if (!irq_stat || (0xffffffffU == irq_stat)) {
+               return IRQ_NONE;
+       }
+
+       spin_lock(&host_set->lock);
+
+       for (hc = 0; hc < n_hcs; hc++) {
+               u32 relevant = irq_stat & (HC0_IRQ_PEND << (hc * HC_SHIFT));
+               if (relevant) {
+                       mv_host_intr(host_set, relevant, hc);
+                       handled = 1;
+               }
+       }
+       if (PCI_ERR & irq_stat) {
+               /* FIXME: these are all masked by default, but still need
+                * to recover from them properly.
+                */
+       }
+
+       spin_unlock(&host_set->lock);
+
+       return IRQ_RETVAL(handled);
+}
+
+static void mv_phy_reset(struct ata_port *ap)
+{
+       void __iomem *port_mmio = mv_ap_base(ap);
+       struct ata_taskfile tf;
+       struct ata_device *dev = &ap->device[0];
+       u32 edma = 0, bdma;
+
+       VPRINTK("ENTER, port %u, mmio 0x%p\n", ap->port_no, port_mmio);
+
+       edma = readl(port_mmio + EDMA_CMD_OFS);
+       if (EDMA_EN & edma) {
+               /* disable EDMA if active */
+               edma &= ~EDMA_EN;
+               writelfl(edma | EDMA_DS, port_mmio + EDMA_CMD_OFS);
+               udelay(1);
+       } else if (mv_port_bdma_capable(ap) &&
+                  (bdma = readl(port_mmio + BDMA_CMD_OFS)) & BDMA_START) {
+               /* disable BDMA if active */
+               writelfl(bdma & ~BDMA_START, port_mmio + BDMA_CMD_OFS);
+       }
+
+       writelfl(edma | ATA_RST, port_mmio + EDMA_CMD_OFS);
+       udelay(25);             /* allow reset propagation */
+
+       /* Spec never mentions clearing the bit.  Marvell's driver does
+        * clear the bit, however.
+        */
+       writelfl(edma & ~ATA_RST, port_mmio + EDMA_CMD_OFS);
+
+       VPRINTK("Done.  Now calling __sata_phy_reset()\n");
+
+       /* proceed to init communications via the scr_control reg */
+       __sata_phy_reset(ap);
+
+       if (ap->flags & ATA_FLAG_PORT_DISABLED) {
+               VPRINTK("Port disabled pre-sig.  Exiting.\n");
+               return;
+       }
+
+       tf.lbah = readb((void __iomem *) ap->ioaddr.lbah_addr);
+       tf.lbam = readb((void __iomem *) ap->ioaddr.lbam_addr);
+       tf.lbal = readb((void __iomem *) ap->ioaddr.lbal_addr);
+       tf.nsect = readb((void __iomem *) ap->ioaddr.nsect_addr);
+
+       dev->class = ata_dev_classify(&tf);
+       if (!ata_dev_present(dev)) {
+               VPRINTK("Port disabled post-sig: No device present.\n");
+               ata_port_disable(ap);
+       }
+       VPRINTK("EXIT\n");
+}
+
+static void mv_port_init(struct ata_ioports *port, unsigned long base)
+{
+       /* PIO related setup */
+       port->data_addr = base + SHD_PIO_DATA_OFS;
+       port->error_addr = port->feature_addr = base + SHD_FEA_ERR_OFS;
+       port->nsect_addr = base + SHD_SECT_CNT_OFS;
+       port->lbal_addr = base + SHD_LBA_L_OFS;
+       port->lbam_addr = base + SHD_LBA_M_OFS;
+       port->lbah_addr = base + SHD_LBA_H_OFS;
+       port->device_addr = base + SHD_DEV_HD_OFS;
+       port->status_addr = port->command_addr = base + SHD_CMD_STA_OFS;
+       port->altstatus_addr = port->ctl_addr = base + SHD_CTL_AST_OFS;
+       /* unused */
+       port->cmd_addr = port->bmdma_addr = port->scr_addr = 0;
+
+       /* unmask all EDMA error interrupts */
+       writel(~0, (void __iomem *)base + EDMA_ERR_IRQ_MASK_OFS);
+
+       VPRINTK("EDMA cfg=0x%08x EDMA IRQ err cause/mask=0x%08x/0x%08x\n", 
+               readl((void __iomem *)base + EDMA_CFG_OFS),
+               readl((void __iomem *)base + EDMA_ERR_IRQ_CAUSE_OFS),
+               readl((void __iomem *)base + EDMA_ERR_IRQ_MASK_OFS));
+}
+
+static int mv_host_init(struct ata_probe_ent *probe_ent)
+{
+       int rc = 0, n_hc, port, hc;
+       void __iomem *mmio = probe_ent->mmio_base;
+       void __iomem *port_mmio;
+
+       if (mv_master_reset(probe_ent->mmio_base)) {
+               rc = 1;
+               goto done;
+       }
+
+       n_hc = mv_get_hc_count(probe_ent->host_flags);
+       probe_ent->n_ports = MV_PORTS_PER_HC * n_hc;
+
+       for (port = 0; port < probe_ent->n_ports; port++) {
+               port_mmio = mv_port_base(mmio, port);
+               mv_port_init(&probe_ent->port[port], (unsigned long)port_mmio);
+       }
+
+       for (hc = 0; hc < n_hc; hc++) {
+               VPRINTK("HC%i: HC config=0x%08x HC IRQ cause=0x%08x\n", hc,
+                       readl(mv_hc_base(mmio, hc) + HC_CFG_OFS),
+                       readl(mv_hc_base(mmio, hc) + HC_IRQ_CAUSE_OFS));
+       }
+
+       writel(~HC_MAIN_MASKED_IRQS, mmio + HC_MAIN_IRQ_MASK_OFS);
+       writel(PCI_UNMASK_ALL_IRQS, mmio + PCI_IRQ_MASK_OFS);
+
+       VPRINTK("HC MAIN IRQ cause/mask=0x%08x/0x%08x "
+               "PCI int cause/mask=0x%08x/0x%08x\n", 
+               readl(mmio + HC_MAIN_IRQ_CAUSE_OFS),
+               readl(mmio + HC_MAIN_IRQ_MASK_OFS),
+               readl(mmio + PCI_IRQ_CAUSE_OFS),
+               readl(mmio + PCI_IRQ_MASK_OFS));
+
+ done:
+       return rc;
+}
+
+/* move to PCI layer, integrate w/ MSI stuff */
+static void pci_intx(struct pci_dev *pdev, int enable)
+{
+       u16 pci_command, new;
+
+       pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
+
+       if (enable)
+               new = pci_command & ~PCI_COMMAND_INTX_DISABLE;
+       else
+               new = pci_command | PCI_COMMAND_INTX_DISABLE;
+
+       if (new != pci_command)
+               pci_write_config_word(pdev, PCI_COMMAND, pci_command);
+}
+
+static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
+{
+       static int printed_version = 0;
+       struct ata_probe_ent *probe_ent = NULL;
+       struct mv_host_priv *hpriv;
+       unsigned int board_idx = (unsigned int)ent->driver_data;
+       void __iomem *mmio_base;
+       int pci_dev_busy = 0;
+       int rc;
+
+       if (!printed_version++) {
+               printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n");
+       }
+
+       VPRINTK("ENTER for PCI Bus:Slot.Func=%u:%u.%u\n", pdev->bus->number,
+               PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn));
+
+       rc = pci_enable_device(pdev);
+       if (rc) {
+               return rc;
+       }
+
+       rc = pci_request_regions(pdev, DRV_NAME);
+       if (rc) {
+               pci_dev_busy = 1;
+               goto err_out;
+       }
+
+       pci_intx(pdev, 1);
+
+       probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL);
+       if (probe_ent == NULL) {
+               rc = -ENOMEM;
+               goto err_out_regions;
+       }
+
+       memset(probe_ent, 0, sizeof(*probe_ent));
+       probe_ent->dev = pci_dev_to_dev(pdev);
+       INIT_LIST_HEAD(&probe_ent->node);
+
+       mmio_base = ioremap_nocache(pci_resource_start(pdev, MV_PRIMARY_BAR),
+                                   pci_resource_len(pdev, MV_PRIMARY_BAR));
+       if (mmio_base == NULL) {
+               rc = -ENOMEM;
+               goto err_out_free_ent;
+       }
+
+       hpriv = kmalloc(sizeof(*hpriv), GFP_KERNEL);
+       if (!hpriv) {
+               rc = -ENOMEM;
+               goto err_out_iounmap;
+       }
+       memset(hpriv, 0, sizeof(*hpriv));
+
+       probe_ent->sht = mv_port_info[board_idx].sht;
+       probe_ent->host_flags = mv_port_info[board_idx].host_flags;
+       probe_ent->pio_mask = mv_port_info[board_idx].pio_mask;
+       probe_ent->udma_mask = mv_port_info[board_idx].udma_mask;
+       probe_ent->port_ops = mv_port_info[board_idx].port_ops;
+
+       probe_ent->irq = pdev->irq;
+       probe_ent->irq_flags = SA_SHIRQ;
+       probe_ent->mmio_base = mmio_base;
+       probe_ent->private_data = hpriv;
+
+       /* initialize adapter */
+       rc = mv_host_init(probe_ent);
+       if (rc) {
+               goto err_out_hpriv;
+       }
+/*     mv_print_info(probe_ent); */
+
+       {
+               int b, w;
+               u32 dw[4];      /* hold a line of 16b */
+               VPRINTK("PCI config space:\n");
+               for (b = 0; b < 0x40; ) {
+                       for (w = 0; w < 4; w++) {
+                               (void) pci_read_config_dword(pdev,b,&dw[w]);
+                               b += sizeof(*dw);
+                       }
+                       VPRINTK("%08x %08x %08x %08x\n",
+                               dw[0],dw[1],dw[2],dw[3]);
+               }
+       }
+
+       /* FIXME: check ata_device_add return value */
+       ata_device_add(probe_ent);
+       kfree(probe_ent);
+
+       return 0;
+
+ err_out_hpriv:
+       kfree(hpriv);
+ err_out_iounmap:
+       iounmap(mmio_base);
+ err_out_free_ent:
+       kfree(probe_ent);
+ err_out_regions:
+       pci_release_regions(pdev);
+ err_out:
+       if (!pci_dev_busy) {
+               pci_disable_device(pdev);
+       }
+
+       return rc;
+}
+
+static int __init mv_init(void)
+{
+       return pci_module_init(&mv_pci_driver);
+}
+
+static void __exit mv_exit(void)
+{
+       pci_unregister_driver(&mv_pci_driver);
+}
+
+MODULE_AUTHOR("Brett Russ");
+MODULE_DESCRIPTION("SCSI low-level driver for Marvell SATA controllers");
+MODULE_LICENSE("GPL");
+MODULE_DEVICE_TABLE(pci, mv_pci_tbl);
+MODULE_VERSION(DRV_VERSION);
+
+module_init(mv_init);
+module_exit(mv_exit);
index 029c2482e12770bca69a5ef53b6572d8825526aa..ffcdeb68641cf5a2493abf7be5b68b1da32f329c 100644 (file)
@@ -494,7 +494,7 @@ static int qs_port_start(struct ata_port *ap)
        if (rc)
                return rc;
        qs_enter_reg_mode(ap);
-       pp = kcalloc(1, sizeof(*pp), GFP_KERNEL);
+       pp = kzalloc(sizeof(*pp), GFP_KERNEL);
        if (!pp) {
                rc = -ENOMEM;
                goto err_out;
index 43af445b3ad2eeafe74f37dbad64f18300f8be12..7d1aaa99aaae0d502eaf838c5766779b36a42ed9 100644 (file)
@@ -52,7 +52,10 @@ enum {
        /* PCI configuration registers */
        SIS_GENCTL              = 0x54, /* IDE General Control register */
        SIS_SCR_BASE            = 0xc0, /* sata0 phy SCR registers */
-       SIS_SATA1_OFS           = 0x10, /* offset from sata0->sata1 phy regs */
+       SIS180_SATA1_OFS        = 0x10, /* offset from sata0->sata1 phy regs */
+       SIS182_SATA1_OFS        = 0x20, /* offset from sata0->sata1 phy regs */
+       SIS_PMR                 = 0x90, /* port mapping register */
+       SIS_PMR_COMBINED        = 0x30, 
 
        /* random bits */
        SIS_FLAG_CFGSCR         = (1 << 30), /* host flag: SCRs via PCI cfg */
@@ -67,6 +70,7 @@ static void sis_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
 static struct pci_device_id sis_pci_tbl[] = {
        { PCI_VENDOR_ID_SI, 0x180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 },
        { PCI_VENDOR_ID_SI, 0x181, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 },
+       { PCI_VENDOR_ID_SI, 0x182, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 },
        { }     /* terminate list */
 };
 
@@ -139,56 +143,94 @@ MODULE_LICENSE("GPL");
 MODULE_DEVICE_TABLE(pci, sis_pci_tbl);
 MODULE_VERSION(DRV_VERSION);
 
-static unsigned int get_scr_cfg_addr(unsigned int port_no, unsigned int sc_reg)
+static unsigned int get_scr_cfg_addr(unsigned int port_no, unsigned int sc_reg, int device)
 {
        unsigned int addr = SIS_SCR_BASE + (4 * sc_reg);
 
-       if (port_no)
-               addr += SIS_SATA1_OFS;
+       if (port_no) 
+               if (device == 0x182)
+                       addr += SIS182_SATA1_OFS;
+               else
+                       addr += SIS180_SATA1_OFS;
        return addr;
 }
 
 static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg)
 {
        struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-       unsigned int cfg_addr = get_scr_cfg_addr(ap->port_no, sc_reg);
-       u32 val;
+       unsigned int cfg_addr = get_scr_cfg_addr(ap->port_no, sc_reg, pdev->device);
+       u32 val, val2;
+       u8 pmr;
 
        if (sc_reg == SCR_ERROR) /* doesn't exist in PCI cfg space */
                return 0xffffffff;
+
+       pci_read_config_byte(pdev, SIS_PMR, &pmr);
+       
        pci_read_config_dword(pdev, cfg_addr, &val);
-       return val;
+
+       if ((pdev->device == 0x182) || (pmr & SIS_PMR_COMBINED)) 
+               pci_read_config_dword(pdev, cfg_addr+0x10, &val2);
+
+       return val|val2;
 }
 
 static void sis_scr_cfg_write (struct ata_port *ap, unsigned int scr, u32 val)
 {
        struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
-       unsigned int cfg_addr = get_scr_cfg_addr(ap->port_no, scr);
+       unsigned int cfg_addr = get_scr_cfg_addr(ap->port_no, scr, pdev->device);
+       u8 pmr;
 
        if (scr == SCR_ERROR) /* doesn't exist in PCI cfg space */
                return;
+
+       pci_read_config_byte(pdev, SIS_PMR, &pmr);
+       
        pci_write_config_dword(pdev, cfg_addr, val);
+
+       if ((pdev->device == 0x182) || (pmr & SIS_PMR_COMBINED))
+               pci_write_config_dword(pdev, cfg_addr+0x10, val);
 }
 
 static u32 sis_scr_read (struct ata_port *ap, unsigned int sc_reg)
 {
+       struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
+       u32 val,val2;
+       u8 pmr;
+
        if (sc_reg > SCR_CONTROL)
                return 0xffffffffU;
 
        if (ap->flags & SIS_FLAG_CFGSCR)
                return sis_scr_cfg_read(ap, sc_reg);
-       return inl(ap->ioaddr.scr_addr + (sc_reg * 4));
+
+       pci_read_config_byte(pdev, SIS_PMR, &pmr);
+
+       val = inl(ap->ioaddr.scr_addr + (sc_reg * 4));
+
+       if ((pdev->device == 0x182) || (pmr & SIS_PMR_COMBINED))
+               val2 = inl(ap->ioaddr.scr_addr + (sc_reg * 4)+0x10);
+
+       return val|val2;
 }
 
 static void sis_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
 {
+       struct pci_dev *pdev = to_pci_dev(ap->host_set->dev);
+       u8 pmr;
+
        if (sc_reg > SCR_CONTROL)
                return;
 
+       pci_read_config_byte(pdev, SIS_PMR, &pmr);
+       
        if (ap->flags & SIS_FLAG_CFGSCR)
                sis_scr_cfg_write(ap, sc_reg, val);
-       else
+       else {
                outl(val, ap->ioaddr.scr_addr + (sc_reg * 4));
+               if ((pdev->device == 0x182) || (pmr & SIS_PMR_COMBINED))
+                       outl(val, ap->ioaddr.scr_addr + (sc_reg * 4)+0x10);
+       }
 }
 
 /* move to PCI layer, integrate w/ MSI stuff */
@@ -210,6 +252,8 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
        u32 genctl;
        struct ata_port_info *ppi;
        int pci_dev_busy = 0;
+       u8 pmr;
+       u8 port2_start;
 
        rc = pci_enable_device(pdev);
        if (rc)
@@ -251,11 +295,27 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
                probe_ent->host_flags |= SIS_FLAG_CFGSCR;
        }
 
+       pci_read_config_byte(pdev, SIS_PMR, &pmr);
+       if (ent->device != 0x182) {
+               if ((pmr & SIS_PMR_COMBINED) == 0) {
+                       printk(KERN_INFO "sata_sis: Detected SiS 180/181 chipset in SATA mode\n");
+                       port2_start=0x64;
+               }
+               else {
+                       printk(KERN_INFO "sata_sis: Detected SiS 180/181 chipset in combined mode\n");
+                       port2_start=0;
+               }
+       }
+       else {
+               printk(KERN_INFO "sata_sis: Detected SiS 182 chipset\n");
+               port2_start = 0x20;
+       }
+
        if (!(probe_ent->host_flags & SIS_FLAG_CFGSCR)) {
                probe_ent->port[0].scr_addr =
                        pci_resource_start(pdev, SIS_SCR_PCI_BAR);
                probe_ent->port[1].scr_addr =
-                       pci_resource_start(pdev, SIS_SCR_PCI_BAR) + 64;
+                       pci_resource_start(pdev, SIS_SCR_PCI_BAR) + port2_start;
        }
 
        pci_set_master(pdev);
index 1566886815fb50465522c27e056064b680c003e7..42e13ed8eb5b55a9f9a473b19408bae775328e85 100644 (file)
@@ -125,8 +125,8 @@ static struct ata_port_info uli_port_info = {
        .sht            = &uli_sht,
        .host_flags     = ATA_FLAG_SATA | ATA_FLAG_SATA_RESET |
                          ATA_FLAG_NO_LEGACY,
-       .pio_mask       = 0x03,         //support pio mode 4 (FIXME)
-       .udma_mask      = 0x7f,         //support udma mode 6
+       .pio_mask       = 0x1f,         /* pio0-4 */
+       .udma_mask      = 0x7f,         /* udma0-6 */
        .port_ops       = &uli_ops,
 };
 
index d14523d7e44940689c5c7fb93567f4d865c24cf8..a780546eda9ca5510d23dcdfea5fe1c4fd692cc2 100644 (file)
@@ -268,6 +268,7 @@ struct scsi_cmnd *scsi_get_command(struct scsi_device *dev, int gfp_mask)
        } else
                put_device(&dev->sdev_gendev);
 
+       cmd->jiffies_at_alloc = jiffies;
        return cmd;
 }                              
 EXPORT_SYMBOL(scsi_get_command);
@@ -627,7 +628,7 @@ int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
        spin_lock_irqsave(host->host_lock, flags);
        scsi_cmd_get_serial(host, cmd); 
 
-       if (unlikely(test_bit(SHOST_CANCEL, &host->shost_state))) {
+       if (unlikely(host->shost_state == SHOST_DEL)) {
                cmd->result = (DID_NO_CONNECT << 16);
                scsi_done(cmd);
        } else {
@@ -798,9 +799,23 @@ static void scsi_softirq(struct softirq_action *h)
        while (!list_empty(&local_q)) {
                struct scsi_cmnd *cmd = list_entry(local_q.next,
                                                   struct scsi_cmnd, eh_entry);
+               /* The longest time any command should be outstanding is the
+                * per command timeout multiplied by the number of retries.
+                *
+                * For a typical command, this is 2.5 minutes */
+               unsigned long wait_for 
+                       = cmd->allowed * cmd->timeout_per_command;
                list_del_init(&cmd->eh_entry);
 
                disposition = scsi_decide_disposition(cmd);
+               if (disposition != SUCCESS &&
+                   time_before(cmd->jiffies_at_alloc + wait_for, jiffies)) {
+                       dev_printk(KERN_ERR, &cmd->device->sdev_gendev, 
+                                  "timing out command, waited %lus\n",
+                                  wait_for/HZ);
+                       disposition = SUCCESS;
+               }
+                       
                scsi_log_completion(cmd, disposition);
                switch (disposition) {
                case SUCCESS:
index 6121dc1bfada426797cd005b5a1468b314520129..07b554affcf22b9f0d5446af9275b27ec2f7d441 100644 (file)
@@ -114,6 +114,7 @@ static struct {
        {"YAMAHA", "CDR102", "1.00", BLIST_NOLUN},      /* locks up */
        {"YAMAHA", "CRW8424S", "1.0", BLIST_NOLUN},     /* locks up */
        {"YAMAHA", "CRW6416S", "1.0c", BLIST_NOLUN},    /* locks up */
+       {"", "Scanner", "1.80", BLIST_NOLUN},   /* responds to all lun */
 
        /*
         * Other types of devices that have special flags.
@@ -135,7 +136,7 @@ static struct {
        {"COMPAQ", "MSA1000 VOLUME", NULL, BLIST_SPARSELUN | BLIST_NOSTARTONADD},
        {"COMPAQ", "HSV110", NULL, BLIST_REPORTLUN2 | BLIST_NOSTARTONADD},
        {"DDN", "SAN DataDirector", "*", BLIST_SPARSELUN},
-       {"DEC", "HSG80", NULL, BLIST_SPARSELUN | BLIST_NOSTARTONADD},
+       {"DEC", "HSG80", NULL, BLIST_REPORTLUN2 | BLIST_NOSTARTONADD},
        {"DELL", "PV660F", NULL, BLIST_SPARSELUN},
        {"DELL", "PV660F   PSEUDO", NULL, BLIST_SPARSELUN},
        {"DELL", "PSEUDO DEVICE .", NULL, BLIST_SPARSELUN},     /* Dell PV 530F */
@@ -191,6 +192,7 @@ static struct {
        {"SGI", "RAID5", "*", BLIST_SPARSELUN},
        {"SGI", "TP9100", "*", BLIST_REPORTLUN2},
        {"SGI", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
+       {"IBM", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
        {"SMSC", "USB 2 HS-CF", NULL, BLIST_SPARSELUN | BLIST_INQUIRY_36},
        {"SONY", "CD-ROM CDU-8001", NULL, BLIST_BORKEN},
        {"SONY", "TSL", NULL, BLIST_FORCELUN},          /* DDS3 & DDS4 autoloaders */
index 0fc8b48f052bf1fa8fcd02bd5b312ae7a34b1503..895c9452be4ca65cc3aebf78ee8bd9f319618c15 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/string.h>
 #include <linux/slab.h>
 #include <linux/kernel.h>
+#include <linux/kthread.h>
 #include <linux/interrupt.h>
 #include <linux/blkdev.h>
 #include <linux/delay.h>
@@ -75,7 +76,7 @@ int scsi_eh_scmd_add(struct scsi_cmnd *scmd, int eh_flag)
 
        scmd->eh_eflags |= eh_flag;
        list_add_tail(&scmd->eh_entry, &shost->eh_cmd_q);
-       set_bit(SHOST_RECOVERY, &shost->shost_state);
+       scsi_host_set_state(shost, SHOST_RECOVERY);
        shost->host_failed++;
        scsi_eh_wakeup(shost);
        spin_unlock_irqrestore(shost->host_lock, flags);
@@ -115,7 +116,6 @@ void scsi_add_timer(struct scsi_cmnd *scmd, int timeout,
 
        add_timer(&scmd->eh_timeout);
 }
-EXPORT_SYMBOL(scsi_add_timer);
 
 /**
  * scsi_delete_timer - Delete/cancel timer for a given function.
@@ -143,7 +143,6 @@ int scsi_delete_timer(struct scsi_cmnd *scmd)
 
        return rtn;
 }
-EXPORT_SYMBOL(scsi_delete_timer);
 
 /**
  * scsi_times_out - Timeout function for normal scsi commands.
@@ -197,7 +196,8 @@ int scsi_block_when_processing_errors(struct scsi_device *sdev)
 {
        int online;
 
-       wait_event(sdev->host->host_wait, (!test_bit(SHOST_RECOVERY, &sdev->host->shost_state)));
+       wait_event(sdev->host->host_wait, (sdev->host->shost_state !=
+                                          SHOST_RECOVERY));
 
        online = scsi_device_online(sdev);
 
@@ -775,9 +775,11 @@ retry_tur:
                __FUNCTION__, scmd, rtn));
        if (rtn == SUCCESS)
                return 0;
-       else if (rtn == NEEDS_RETRY)
+       else if (rtn == NEEDS_RETRY) {
                if (retry_cnt--)
                        goto retry_tur;
+               return 0;
+       }
        return 1;
 }
 
@@ -1458,7 +1460,7 @@ static void scsi_restart_operations(struct Scsi_Host *shost)
        SCSI_LOG_ERROR_RECOVERY(3, printk("%s: waking up host to restart\n",
                                          __FUNCTION__));
 
-       clear_bit(SHOST_RECOVERY, &shost->shost_state);
+       scsi_host_set_state(shost, SHOST_RUNNING);
 
        wake_up(&shost->host_wait);
 
@@ -1582,16 +1584,8 @@ int scsi_error_handler(void *data)
        int rtn;
        DECLARE_MUTEX_LOCKED(sem);
 
-       /*
-        *    Flush resources
-        */
-
-       daemonize("scsi_eh_%d", shost->host_no);
-
        current->flags |= PF_NOFREEZE;
-
        shost->eh_wait = &sem;
-       shost->ehandler = current;
 
        /*
         * Wake up the thread that created us.
@@ -1599,8 +1593,6 @@ int scsi_error_handler(void *data)
        SCSI_LOG_ERROR_RECOVERY(3, printk("Wake up parent of"
                                          " scsi_eh_%d\n",shost->host_no));
 
-       complete(shost->eh_notify);
-
        while (1) {
                /*
                 * If we get a signal, it means we are supposed to go
@@ -1621,7 +1613,7 @@ int scsi_error_handler(void *data)
                 * semaphores isn't unreasonable.
                 */
                down_interruptible(&sem);
-               if (shost->eh_kill)
+               if (kthread_should_stop())
                        break;
 
                SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler"
@@ -1660,22 +1652,6 @@ int scsi_error_handler(void *data)
         * Make sure that nobody tries to wake us up again.
         */
        shost->eh_wait = NULL;
-
-       /*
-        * Knock this down too.  From this point on, the host is flying
-        * without a pilot.  If this is because the module is being unloaded,
-        * that's fine.  If the user sent a signal to this thing, we are
-        * potentially in real danger.
-        */
-       shost->eh_active = 0;
-       shost->ehandler = NULL;
-
-       /*
-        * If anyone is waiting for us to exit (i.e. someone trying to unload
-        * a driver), then wake up that process to let them know we are on
-        * the way out the door.
-        */
-       complete_and_exit(shost->eh_notify, 0);
        return 0;
 }
 
@@ -1846,12 +1822,16 @@ EXPORT_SYMBOL(scsi_reset_provider);
 int scsi_normalize_sense(const u8 *sense_buffer, int sb_len,
                          struct scsi_sense_hdr *sshdr)
 {
-       if (!sense_buffer || !sb_len || (sense_buffer[0] & 0x70) != 0x70)
+       if (!sense_buffer || !sb_len)
                return 0;
 
        memset(sshdr, 0, sizeof(struct scsi_sense_hdr));
 
        sshdr->response_code = (sense_buffer[0] & 0x7f);
+
+       if (!scsi_sense_valid(sshdr))
+               return 0;
+
        if (sshdr->response_code >= 0x72) {
                /*
                 * descriptor format
index 7a6b530115ac9dbe78e136dc7e7ba5568e015cf0..b7fddac813474c0903d37d88e6f6f7ec03b092f5 100644 (file)
 
 #define MAX_BUF PAGE_SIZE
 
-/*
- * If we are told to probe a host, we will return 0 if  the host is not
- * present, 1 if the host is present, and will return an identifying
- * string at *arg, if arg is non null, filling to the length stored at
- * (int *) arg
+/**
+ * ioctl_probe  --  return host identification
+ * @host:      host to identify
+ * @buffer:    userspace buffer for identification
+ *
+ * Return an identifying string at @buffer, if @buffer is non-NULL, filling
+ * to the length stored at * (int *) @buffer.
  */
-
 static int ioctl_probe(struct Scsi_Host *host, void __user *buffer)
 {
        unsigned int len, slen;
        const char *string;
-       int temp = host->hostt->present;
 
-       if (temp && buffer) {
+       if (buffer) {
                if (get_user(len, (unsigned int __user *) buffer))
                        return -EFAULT;
 
@@ -59,7 +59,7 @@ static int ioctl_probe(struct Scsi_Host *host, void __user *buffer)
                                return -EFAULT;
                }
        }
-       return temp;
+       return 1;
 }
 
 /*
@@ -88,25 +88,18 @@ static int ioctl_probe(struct Scsi_Host *host, void __user *buffer)
 static int ioctl_internal_command(struct scsi_device *sdev, char *cmd,
                                  int timeout, int retries)
 {
-       struct scsi_request *sreq;
        int result;
        struct scsi_sense_hdr sshdr;
 
        SCSI_LOG_IOCTL(1, printk("Trying ioctl with scsi command %d\n", *cmd));
 
-       sreq = scsi_allocate_request(sdev, GFP_KERNEL);
-       if (!sreq) {
-               printk(KERN_WARNING "SCSI internal ioctl failed, no memory\n");
-               return -ENOMEM;
-       }
-
-       sreq->sr_data_direction = DMA_NONE;
-        scsi_wait_req(sreq, cmd, NULL, 0, timeout, retries);
+       result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0,
+                                 &sshdr, timeout, retries);
 
-       SCSI_LOG_IOCTL(2, printk("Ioctl returned  0x%x\n", sreq->sr_result));
+       SCSI_LOG_IOCTL(2, printk("Ioctl returned  0x%x\n", result));
 
-       if ((driver_byte(sreq->sr_result) & DRIVER_SENSE) &&
-           (scsi_request_normalize_sense(sreq, &sshdr))) {
+       if ((driver_byte(result) & DRIVER_SENSE) &&
+           (scsi_sense_valid(&sshdr))) {
                switch (sshdr.sense_key) {
                case ILLEGAL_REQUEST:
                        if (cmd[0] == ALLOW_MEDIUM_REMOVAL)
@@ -125,7 +118,7 @@ static int ioctl_internal_command(struct scsi_device *sdev, char *cmd,
                case UNIT_ATTENTION:
                        if (sdev->removable) {
                                sdev->changed = 1;
-                               sreq->sr_result = 0;    /* This is no longer considered an error */
+                               result = 0;     /* This is no longer considered an error */
                                break;
                        }
                default:        /* Fall through for non-removable media */
@@ -135,15 +128,13 @@ static int ioctl_internal_command(struct scsi_device *sdev, char *cmd,
                               sdev->channel,
                               sdev->id,
                               sdev->lun,
-                              sreq->sr_result);
-                       scsi_print_req_sense("   ", sreq);
+                              result);
+                       scsi_print_sense_hdr("   ", &sshdr);
                        break;
                }
        }
 
-       result = sreq->sr_result;
        SCSI_LOG_IOCTL(2, printk("IOCTL Releasing command\n"));
-       scsi_release_request(sreq);
        return result;
 }
 
@@ -208,8 +199,8 @@ int scsi_ioctl_send_command(struct scsi_device *sdev,
 {
        char *buf;
        unsigned char cmd[MAX_COMMAND_SIZE];
+       unsigned char sense[SCSI_SENSE_BUFFERSIZE];
        char __user *cmd_in;
-       struct scsi_request *sreq;
        unsigned char opcode;
        unsigned int inlen, outlen, cmdlen;
        unsigned int needed, buf_needed;
@@ -321,31 +312,23 @@ int scsi_ioctl_send_command(struct scsi_device *sdev,
                break;
        }
 
-       sreq = scsi_allocate_request(sdev, GFP_KERNEL);
-        if (!sreq) {
-                result = -EINTR;
-                goto error;
-        }
-
-       sreq->sr_data_direction = data_direction;
-        scsi_wait_req(sreq, cmd, buf, needed, timeout, retries);
+       result = scsi_execute(sdev, cmd, data_direction, buf, needed,
+                             sense, timeout, retries, 0);
 
        /* 
         * If there was an error condition, pass the info back to the user. 
         */
-       result = sreq->sr_result;
        if (result) {
-               int sb_len = sizeof(sreq->sr_sense_buffer);
+               int sb_len = sizeof(*sense);
 
                sb_len = (sb_len > OMAX_SB_LEN) ? OMAX_SB_LEN : sb_len;
-               if (copy_to_user(cmd_in, sreq->sr_sense_buffer, sb_len))
+               if (copy_to_user(cmd_in, sense, sb_len))
                        result = -EFAULT;
        } else {
                if (copy_to_user(cmd_in, buf, outlen))
                        result = -EFAULT;
        }       
 
-       scsi_release_request(sreq);
 error:
        kfree(buf);
        return result;
@@ -475,8 +458,7 @@ int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd,
         * error processing, as long as the device was opened
         * non-blocking */
        if (filp && filp->f_flags & O_NONBLOCK) {
-               if (test_bit(SHOST_RECOVERY,
-                            &sdev->host->shost_state))
+               if (sdev->host->shost_state == SHOST_RECOVERY)
                        return -ENODEV;
        } else if (!scsi_block_when_processing_errors(sdev))
                return -ENODEV;
index 7a91ca3d32a6cb343a8a533368a5956afbea18d6..77f2d444f7e0c7b6d297db390fcc2561d14ec36b 100644 (file)
@@ -232,23 +232,6 @@ void scsi_do_req(struct scsi_request *sreq, const void *cmnd,
 }
 EXPORT_SYMBOL(scsi_do_req);
 
-static void scsi_wait_done(struct scsi_cmnd *cmd)
-{
-       struct request *req = cmd->request;
-       struct request_queue *q = cmd->device->request_queue;
-       unsigned long flags;
-
-       req->rq_status = RQ_SCSI_DONE;  /* Busy, but indicate request done */
-
-       spin_lock_irqsave(q->queue_lock, flags);
-       if (blk_rq_tagged(req))
-               blk_queue_end_tag(q, req);
-       spin_unlock_irqrestore(q->queue_lock, flags);
-
-       if (req->waiting)
-               complete(req->waiting);
-}
-
 /* This is the end routine we get to if a command was never attached
  * to the request.  Simply complete the request without changing
  * rq_status; this will cause a DRIVER_ERROR. */
@@ -263,21 +246,114 @@ void scsi_wait_req(struct scsi_request *sreq, const void *cmnd, void *buffer,
                   unsigned bufflen, int timeout, int retries)
 {
        DECLARE_COMPLETION(wait);
-       
-       sreq->sr_request->waiting = &wait;
-       sreq->sr_request->rq_status = RQ_SCSI_BUSY;
-       sreq->sr_request->end_io = scsi_wait_req_end_io;
-       scsi_do_req(sreq, cmnd, buffer, bufflen, scsi_wait_done,
-                       timeout, retries);
+       int write = (sreq->sr_data_direction == DMA_TO_DEVICE);
+       struct request *req;
+
+       req = blk_get_request(sreq->sr_device->request_queue, write,
+                             __GFP_WAIT);
+       if (bufflen && blk_rq_map_kern(sreq->sr_device->request_queue, req,
+                                      buffer, bufflen, __GFP_WAIT)) {
+               sreq->sr_result = DRIVER_ERROR << 24;
+               blk_put_request(req);
+               return;
+       }
+
+       req->flags |= REQ_NOMERGE;
+       req->waiting = &wait;
+       req->end_io = scsi_wait_req_end_io;
+       req->cmd_len = COMMAND_SIZE(((u8 *)cmnd)[0]);
+       req->sense = sreq->sr_sense_buffer;
+       req->sense_len = 0;
+       memcpy(req->cmd, cmnd, req->cmd_len);
+       req->timeout = timeout;
+       req->flags |= REQ_BLOCK_PC;
+       req->rq_disk = NULL;
+       blk_insert_request(sreq->sr_device->request_queue, req,
+                          sreq->sr_data_direction == DMA_TO_DEVICE, NULL);
        wait_for_completion(&wait);
        sreq->sr_request->waiting = NULL;
-       if (sreq->sr_request->rq_status != RQ_SCSI_DONE)
+       sreq->sr_result = req->errors;
+       if (req->errors)
                sreq->sr_result |= (DRIVER_ERROR << 24);
 
-       __scsi_release_request(sreq);
+       blk_put_request(req);
 }
+
 EXPORT_SYMBOL(scsi_wait_req);
 
+/**
+ * scsi_execute - insert request and wait for the result
+ * @sdev:      scsi device
+ * @cmd:       scsi command
+ * @data_direction: data direction
+ * @buffer:    data buffer
+ * @bufflen:   len of buffer
+ * @sense:     optional sense buffer
+ * @timeout:   request timeout in seconds
+ * @retries:   number of times to retry request
+ * @flags:     or into request flags;
+ *
+ * returns the req->errors value which is the the scsi_cmnd result
+ * field.
+ **/
+int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
+                int data_direction, void *buffer, unsigned bufflen,
+                unsigned char *sense, int timeout, int retries, int flags)
+{
+       struct request *req;
+       int write = (data_direction == DMA_TO_DEVICE);
+       int ret = DRIVER_ERROR << 24;
+
+       req = blk_get_request(sdev->request_queue, write, __GFP_WAIT);
+
+       if (bufflen &&  blk_rq_map_kern(sdev->request_queue, req,
+                                       buffer, bufflen, __GFP_WAIT))
+               goto out;
+
+       req->cmd_len = COMMAND_SIZE(cmd[0]);
+       memcpy(req->cmd, cmd, req->cmd_len);
+       req->sense = sense;
+       req->sense_len = 0;
+       req->timeout = timeout;
+       req->flags |= flags | REQ_BLOCK_PC | REQ_SPECIAL | REQ_QUIET;
+
+       /*
+        * head injection *required* here otherwise quiesce won't work
+        */
+       blk_execute_rq(req->q, NULL, req, 1);
+
+       ret = req->errors;
+ out:
+       blk_put_request(req);
+
+       return ret;
+}
+EXPORT_SYMBOL(scsi_execute);
+
+
+int scsi_execute_req(struct scsi_device *sdev, const unsigned char *cmd,
+                    int data_direction, void *buffer, unsigned bufflen,
+                    struct scsi_sense_hdr *sshdr, int timeout, int retries)
+{
+       char *sense = NULL;
+       int result;
+       
+       if (sshdr) {
+               sense = kmalloc(SCSI_SENSE_BUFFERSIZE, GFP_KERNEL);
+               if (!sense)
+                       return DRIVER_ERROR << 24;
+               memset(sense, 0, SCSI_SENSE_BUFFERSIZE);
+       }
+       result = scsi_execute(sdev, cmd, data_direction, buffer, bufflen,
+                                 sense, timeout, retries, 0);
+       if (sshdr)
+               scsi_normalize_sense(sense, SCSI_SENSE_BUFFERSIZE, sshdr);
+
+       kfree(sense);
+       return result;
+}
+EXPORT_SYMBOL(scsi_execute_req);
+
 /*
  * Function:    scsi_init_cmd_errh()
  *
@@ -348,7 +424,7 @@ void scsi_device_unbusy(struct scsi_device *sdev)
 
        spin_lock_irqsave(shost->host_lock, flags);
        shost->host_busy--;
-       if (unlikely(test_bit(SHOST_RECOVERY, &shost->shost_state) &&
+       if (unlikely((shost->shost_state == SHOST_RECOVERY) &&
                     shost->host_failed))
                scsi_eh_wakeup(shost);
        spin_unlock(shost->host_lock);
@@ -851,17 +927,20 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes,
                                scsi_requeue_command(q, cmd);
                                return;
                        }
-                       printk(KERN_INFO "Device %s not ready.\n",
-                              req->rq_disk ? req->rq_disk->disk_name : "");
+                       if (!(req->flags & REQ_QUIET))
+                               dev_printk(KERN_INFO,
+                                          &cmd->device->sdev_gendev,
+                                          "Device not ready.\n");
                        cmd = scsi_end_request(cmd, 0, this_count, 1);
                        return;
                case VOLUME_OVERFLOW:
-                       printk(KERN_INFO "Volume overflow <%d %d %d %d> CDB: ",
-                              cmd->device->host->host_no,
-                              (int)cmd->device->channel,
-                              (int)cmd->device->id, (int)cmd->device->lun);
-                       __scsi_print_command(cmd->data_cmnd);
-                       scsi_print_sense("", cmd);
+                       if (!(req->flags & REQ_QUIET)) {
+                               dev_printk(KERN_INFO,
+                                          &cmd->device->sdev_gendev,
+                                          "Volume overflow, CDB: ");
+                               __scsi_print_command(cmd->data_cmnd);
+                               scsi_print_sense("", cmd);
+                       }
                        cmd = scsi_end_request(cmd, 0, block_bytes, 1);
                        return;
                default:
@@ -878,14 +957,13 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes,
                return;
        }
        if (result) {
-               printk(KERN_INFO "SCSI error : <%d %d %d %d> return code "
-                      "= 0x%x\n", cmd->device->host->host_no,
-                      cmd->device->channel,
-                      cmd->device->id,
-                      cmd->device->lun, result);
-
-               if (driver_byte(result) & DRIVER_SENSE)
-                       scsi_print_sense("", cmd);
+               if (!(req->flags & REQ_QUIET)) {
+                       dev_printk(KERN_INFO, &cmd->device->sdev_gendev,
+                                  "SCSI error: return code = 0x%x\n", result);
+
+                       if (driver_byte(result) & DRIVER_SENSE)
+                               scsi_print_sense("", cmd);
+               }
                /*
                 * Mark a single buffer as not uptodate.  Queue the remainder.
                 * We sometimes get this cruft in the event that a medium error
@@ -1020,6 +1098,12 @@ static int scsi_issue_flush_fn(request_queue_t *q, struct gendisk *disk,
        return -EOPNOTSUPP;
 }
 
+static void scsi_generic_done(struct scsi_cmnd *cmd)
+{
+       BUG_ON(!blk_pc_request(cmd->request));
+       scsi_io_completion(cmd, cmd->result == 0 ? cmd->bufflen : 0, 0);
+}
+
 static int scsi_prep_fn(struct request_queue *q, struct request *req)
 {
        struct scsi_device *sdev = q->queuedata;
@@ -1061,7 +1145,7 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
         * these two cases differently.  We differentiate by looking
         * at request->cmd, as this tells us the real story.
         */
-       if (req->flags & REQ_SPECIAL) {
+       if (req->flags & REQ_SPECIAL && req->special) {
                struct scsi_request *sreq = req->special;
 
                if (sreq->sr_magic == SCSI_REQ_MAGIC) {
@@ -1073,7 +1157,7 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
                        cmd = req->special;
        } else if (req->flags & (REQ_CMD | REQ_BLOCK_PC)) {
 
-               if(unlikely(specials_only)) {
+               if(unlikely(specials_only) && !(req->flags & REQ_SPECIAL)) {
                        if(specials_only == SDEV_QUIESCE ||
                                        specials_only == SDEV_BLOCK)
                                return BLKPREP_DEFER;
@@ -1142,11 +1226,26 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
                /*
                 * Initialize the actual SCSI command for this request.
                 */
-               drv = *(struct scsi_driver **)req->rq_disk->private_data;
-               if (unlikely(!drv->init_command(cmd))) {
-                       scsi_release_buffers(cmd);
-                       scsi_put_command(cmd);
-                       return BLKPREP_KILL;
+               if (req->rq_disk) {
+                       drv = *(struct scsi_driver **)req->rq_disk->private_data;
+                       if (unlikely(!drv->init_command(cmd))) {
+                               scsi_release_buffers(cmd);
+                               scsi_put_command(cmd);
+                               return BLKPREP_KILL;
+                       }
+               } else {
+                       memcpy(cmd->cmnd, req->cmd, sizeof(cmd->cmnd));
+                       if (rq_data_dir(req) == WRITE)
+                               cmd->sc_data_direction = DMA_TO_DEVICE;
+                       else if (req->data_len)
+                               cmd->sc_data_direction = DMA_FROM_DEVICE;
+                       else
+                               cmd->sc_data_direction = DMA_NONE;
+                       
+                       cmd->transfersize = req->data_len;
+                       cmd->allowed = 3;
+                       cmd->timeout_per_command = req->timeout;
+                       cmd->done = scsi_generic_done;
                }
        }
 
@@ -1207,7 +1306,7 @@ static inline int scsi_host_queue_ready(struct request_queue *q,
                                   struct Scsi_Host *shost,
                                   struct scsi_device *sdev)
 {
-       if (test_bit(SHOST_RECOVERY, &shost->shost_state))
+       if (shost->shost_state == SHOST_RECOVERY)
                return 0;
        if (shost->host_busy == 0 && shost->host_blocked) {
                /*
@@ -1539,9 +1638,9 @@ void scsi_exit_queue(void)
        }
 }
 /**
- *     __scsi_mode_sense - issue a mode sense, falling back from 10 to 
+ *     scsi_mode_sense - issue a mode sense, falling back from 10 to 
  *             six bytes if necessary.
- *     @sreq:  SCSI request to fill in with the MODE_SENSE
+ *     @sdev:  SCSI device to be queried
  *     @dbd:   set if mode sense will allow block descriptors to be returned
  *     @modepage: mode page being requested
  *     @buffer: request buffer (may not be smaller than eight bytes)
@@ -1549,26 +1648,34 @@ void scsi_exit_queue(void)
  *     @timeout: command timeout
  *     @retries: number of retries before failing
  *     @data: returns a structure abstracting the mode header data
+ *     @sense: place to put sense data (or NULL if no sense to be collected).
+ *             must be SCSI_SENSE_BUFFERSIZE big.
  *
  *     Returns zero if unsuccessful, or the header offset (either 4
  *     or 8 depending on whether a six or ten byte command was
  *     issued) if successful.
  **/
 int
-__scsi_mode_sense(struct scsi_request *sreq, int dbd, int modepage,
+scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
                  unsigned char *buffer, int len, int timeout, int retries,
-                 struct scsi_mode_data *data) {
+                 struct scsi_mode_data *data, struct scsi_sense_hdr *sshdr) {
        unsigned char cmd[12];
        int use_10_for_ms;
        int header_length;
+       int result;
+       struct scsi_sense_hdr my_sshdr;
 
        memset(data, 0, sizeof(*data));
        memset(&cmd[0], 0, 12);
        cmd[1] = dbd & 0x18;    /* allows DBD and LLBA bits */
        cmd[2] = modepage;
 
+       /* caller might not be interested in sense, but we need it */
+       if (!sshdr)
+               sshdr = &my_sshdr;
+
  retry:
-       use_10_for_ms = sreq->sr_device->use_10_for_ms;
+       use_10_for_ms = sdev->use_10_for_ms;
 
        if (use_10_for_ms) {
                if (len < 8)
@@ -1586,36 +1693,31 @@ __scsi_mode_sense(struct scsi_request *sreq, int dbd, int modepage,
                header_length = 4;
        }
 
-       sreq->sr_cmd_len = 0;
-       memset(sreq->sr_sense_buffer, 0, sizeof(sreq->sr_sense_buffer));
-       sreq->sr_data_direction = DMA_FROM_DEVICE;
-
        memset(buffer, 0, len);
 
-       scsi_wait_req(sreq, cmd, buffer, len, timeout, retries);
+       result = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buffer, len,
+                                 sshdr, timeout, retries);
 
        /* This code looks awful: what it's doing is making sure an
         * ILLEGAL REQUEST sense return identifies the actual command
         * byte as the problem.  MODE_SENSE commands can return
         * ILLEGAL REQUEST if the code page isn't supported */
 
-       if (use_10_for_ms && !scsi_status_is_good(sreq->sr_result) &&
-           (driver_byte(sreq->sr_result) & DRIVER_SENSE)) {
-               struct scsi_sense_hdr sshdr;
-
-               if (scsi_request_normalize_sense(sreq, &sshdr)) {
-                       if ((sshdr.sense_key == ILLEGAL_REQUEST) &&
-                           (sshdr.asc == 0x20) && (sshdr.ascq == 0)) {
+       if (use_10_for_ms && !scsi_status_is_good(result) &&
+           (driver_byte(result) & DRIVER_SENSE)) {
+               if (scsi_sense_valid(sshdr)) {
+                       if ((sshdr->sense_key == ILLEGAL_REQUEST) &&
+                           (sshdr->asc == 0x20) && (sshdr->ascq == 0)) {
                                /* 
                                 * Invalid command operation code
                                 */
-                               sreq->sr_device->use_10_for_ms = 0;
+                               sdev->use_10_for_ms = 0;
                                goto retry;
                        }
                }
        }
 
-       if(scsi_status_is_good(sreq->sr_result)) {
+       if(scsi_status_is_good(result)) {
                data->header_length = header_length;
                if(use_10_for_ms) {
                        data->length = buffer[0]*256 + buffer[1] + 2;
@@ -1632,73 +1734,31 @@ __scsi_mode_sense(struct scsi_request *sreq, int dbd, int modepage,
                }
        }
 
-       return sreq->sr_result;
-}
-EXPORT_SYMBOL(__scsi_mode_sense);
-
-/**
- *     scsi_mode_sense - issue a mode sense, falling back from 10 to 
- *             six bytes if necessary.
- *     @sdev:  scsi device to send command to.
- *     @dbd:   set if mode sense will disable block descriptors in the return
- *     @modepage: mode page being requested
- *     @buffer: request buffer (may not be smaller than eight bytes)
- *     @len:   length of request buffer.
- *     @timeout: command timeout
- *     @retries: number of retries before failing
- *
- *     Returns zero if unsuccessful, or the header offset (either 4
- *     or 8 depending on whether a six or ten byte command was
- *     issued) if successful.
- **/
-int
-scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
-               unsigned char *buffer, int len, int timeout, int retries,
-               struct scsi_mode_data *data)
-{
-       struct scsi_request *sreq = scsi_allocate_request(sdev, GFP_KERNEL);
-       int ret;
-
-       if (!sreq)
-               return -1;
-
-       ret = __scsi_mode_sense(sreq, dbd, modepage, buffer, len,
-                               timeout, retries, data);
-
-       scsi_release_request(sreq);
-
-       return ret;
+       return result;
 }
 EXPORT_SYMBOL(scsi_mode_sense);
 
 int
 scsi_test_unit_ready(struct scsi_device *sdev, int timeout, int retries)
 {
-       struct scsi_request *sreq;
        char cmd[] = {
                TEST_UNIT_READY, 0, 0, 0, 0, 0,
        };
+       struct scsi_sense_hdr sshdr;
        int result;
        
-       sreq = scsi_allocate_request(sdev, GFP_KERNEL);
-       if (!sreq)
-               return -ENOMEM;
-
-       sreq->sr_data_direction = DMA_NONE;
-       scsi_wait_req(sreq, cmd, NULL, 0, timeout, retries);
+       result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, &sshdr,
+                                 timeout, retries);
 
-       if ((driver_byte(sreq->sr_result) & DRIVER_SENSE) && sdev->removable) {
-               struct scsi_sense_hdr sshdr;
+       if ((driver_byte(result) & DRIVER_SENSE) && sdev->removable) {
 
-               if ((scsi_request_normalize_sense(sreq, &sshdr)) &&
+               if ((scsi_sense_valid(&sshdr)) &&
                    ((sshdr.sense_key == UNIT_ATTENTION) ||
                     (sshdr.sense_key == NOT_READY))) {
                        sdev->changed = 1;
-                       sreq->sr_result = 0;
+                       result = 0;
                }
        }
-       result = sreq->sr_result;
-       scsi_release_request(sreq);
        return result;
 }
 EXPORT_SYMBOL(scsi_test_unit_ready);
index d30d7f4e63ec1e3133c8d19e677e5699a2c353a7..ee6de1768e534f5c8514eca4abc8641638f215ca 100644 (file)
@@ -63,6 +63,9 @@ extern int __init scsi_init_devinfo(void);
 extern void scsi_exit_devinfo(void);
 
 /* scsi_error.c */
+extern void scsi_add_timer(struct scsi_cmnd *, int,
+               void (*)(struct scsi_cmnd *));
+extern int scsi_delete_timer(struct scsi_cmnd *);
 extern void scsi_times_out(struct scsi_cmnd *cmd);
 extern int scsi_error_handler(void *host);
 extern int scsi_decide_disposition(struct scsi_cmnd *cmd);
index 48edd67982a5f85e8b6f5f2b842240fb5fbfc0d2..19c9a232a754b2d039352767dd71f3225633420d 100644 (file)
@@ -111,15 +111,14 @@ MODULE_PARM_DESC(inq_timeout,
 
 /**
  * scsi_unlock_floptical - unlock device via a special MODE SENSE command
- * @sreq:      used to send the command
+ * @sdev:      scsi device to send command to
  * @result:    area to store the result of the MODE SENSE
  *
  * Description:
- *     Send a vendor specific MODE SENSE (not a MODE SELECT) command using
- *     @sreq to unlock a device, storing the (unused) results into result.
+ *     Send a vendor specific MODE SENSE (not a MODE SELECT) command.
  *     Called for BLIST_KEY devices.
  **/
-static void scsi_unlock_floptical(struct scsi_request *sreq,
+static void scsi_unlock_floptical(struct scsi_device *sdev,
                                  unsigned char *result)
 {
        unsigned char scsi_cmd[MAX_COMMAND_SIZE];
@@ -129,11 +128,10 @@ static void scsi_unlock_floptical(struct scsi_request *sreq,
        scsi_cmd[1] = 0;
        scsi_cmd[2] = 0x2e;
        scsi_cmd[3] = 0;
-       scsi_cmd[4] = 0x2a;     /* size */
+       scsi_cmd[4] = 0x2a;     /* size */
        scsi_cmd[5] = 0;
-       sreq->sr_cmd_len = 0;
-       sreq->sr_data_direction = DMA_FROM_DEVICE;
-       scsi_wait_req(sreq, scsi_cmd, result, 0x2a /* size */, SCSI_TIMEOUT, 3);
+       scsi_execute_req(sdev, scsi_cmd, DMA_FROM_DEVICE, result, 0x2a, NULL,
+                        SCSI_TIMEOUT, 3);
 }
 
 /**
@@ -433,26 +431,25 @@ void scsi_target_reap(struct scsi_target *starget)
 
 /**
  * scsi_probe_lun - probe a single LUN using a SCSI INQUIRY
- * @sreq:      used to send the INQUIRY
+ * @sdev:      scsi_device to probe
  * @inq_result:        area to store the INQUIRY result
+ * @result_len: len of inq_result
  * @bflags:    store any bflags found here
  *
  * Description:
- *     Probe the lun associated with @sreq using a standard SCSI INQUIRY;
+ *     Probe the lun associated with @req using a standard SCSI INQUIRY;
  *
- *     If the INQUIRY is successful, sreq->sr_result is zero and: the
+ *     If the INQUIRY is successful, zero is returned and the
  *     INQUIRY data is in @inq_result; the scsi_level and INQUIRY length
- *     are copied to the Scsi_Device at @sreq->sr_device (sdev);
- *     any flags value is stored in *@bflags.
+ *     are copied to the Scsi_Device any flags value is stored in *@bflags.
  **/
-static void scsi_probe_lun(struct scsi_request *sreq, char *inq_result,
-                          int *bflags)
+static int scsi_probe_lun(struct scsi_device *sdev, char *inq_result,
+                         int result_len, int *bflags)
 {
-       struct scsi_device *sdev = sreq->sr_device;     /* a bit ugly */
        unsigned char scsi_cmd[MAX_COMMAND_SIZE];
        int first_inquiry_len, try_inquiry_len, next_inquiry_len;
        int response_len = 0;
-       int pass, count;
+       int pass, count, result;
        struct scsi_sense_hdr sshdr;
 
        *bflags = 0;
@@ -475,28 +472,26 @@ static void scsi_probe_lun(struct scsi_request *sreq, char *inq_result,
                memset(scsi_cmd, 0, 6);
                scsi_cmd[0] = INQUIRY;
                scsi_cmd[4] = (unsigned char) try_inquiry_len;
-               sreq->sr_cmd_len = 0;
-               sreq->sr_data_direction = DMA_FROM_DEVICE;
 
                memset(inq_result, 0, try_inquiry_len);
-               scsi_wait_req(sreq, (void *) scsi_cmd, (void *) inq_result,
-                               try_inquiry_len,
-                               HZ/2 + HZ*scsi_inq_timeout, 3);
+
+               result = scsi_execute_req(sdev,  scsi_cmd, DMA_FROM_DEVICE,
+                                         inq_result, try_inquiry_len, &sshdr,
+                                         HZ / 2 + HZ * scsi_inq_timeout, 3);
 
                SCSI_LOG_SCAN_BUS(3, printk(KERN_INFO "scsi scan: INQUIRY %s "
                                "with code 0x%x\n",
-                               sreq->sr_result ? "failed" : "successful",
-                               sreq->sr_result));
+                               result ? "failed" : "successful", result));
 
-               if (sreq->sr_result) {
+               if (result) {
                        /*
                         * not-ready to ready transition [asc/ascq=0x28/0x0]
                         * or power-on, reset [asc/ascq=0x29/0x0], continue.
                         * INQUIRY should not yield UNIT_ATTENTION
                         * but many buggy devices do so anyway. 
                         */
-                       if ((driver_byte(sreq->sr_result) & DRIVER_SENSE) &&
-                           scsi_request_normalize_sense(sreq, &sshdr)) {
+                       if ((driver_byte(result) & DRIVER_SENSE) &&
+                           scsi_sense_valid(&sshdr)) {
                                if ((sshdr.sense_key == UNIT_ATTENTION) &&
                                    ((sshdr.asc == 0x28) ||
                                     (sshdr.asc == 0x29)) &&
@@ -507,7 +502,7 @@ static void scsi_probe_lun(struct scsi_request *sreq, char *inq_result,
                break;
        }
 
-       if (sreq->sr_result == 0) {
+       if (result == 0) {
                response_len = (unsigned char) inq_result[4] + 5;
                if (response_len > 255)
                        response_len = first_inquiry_len;       /* sanity */
@@ -556,8 +551,8 @@ static void scsi_probe_lun(struct scsi_request *sreq, char *inq_result,
 
        /* If the last transfer attempt got an error, assume the
         * peripheral doesn't exist or is dead. */
-       if (sreq->sr_result)
-               return;
+       if (result)
+               return -EIO;
 
        /* Don't report any more data than the device says is valid */
        sdev->inquiry_len = min(try_inquiry_len, response_len);
@@ -593,7 +588,7 @@ static void scsi_probe_lun(struct scsi_request *sreq, char *inq_result,
            (sdev->scsi_level == 1 && (inq_result[3] & 0x0f) == 1))
                sdev->scsi_level++;
 
-       return;
+       return 0;
 }
 
 /**
@@ -800,9 +795,8 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
                                  void *hostdata)
 {
        struct scsi_device *sdev;
-       struct scsi_request *sreq;
        unsigned char *result;
-       int bflags, res = SCSI_SCAN_NO_RESPONSE;
+       int bflags, res = SCSI_SCAN_NO_RESPONSE, result_len = 256;
        struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
 
        /*
@@ -831,16 +825,13 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
        sdev = scsi_alloc_sdev(starget, lun, hostdata);
        if (!sdev)
                goto out;
-       sreq = scsi_allocate_request(sdev, GFP_ATOMIC);
-       if (!sreq)
-               goto out_free_sdev;
-       result = kmalloc(256, GFP_ATOMIC |
+
+       result = kmalloc(result_len, GFP_ATOMIC |
                        ((shost->unchecked_isa_dma) ? __GFP_DMA : 0));
        if (!result)
-               goto out_free_sreq;
+               goto out_free_sdev;
 
-       scsi_probe_lun(sreq, result, &bflags);
-       if (sreq->sr_result)
+       if (scsi_probe_lun(sdev, result, result_len, &bflags))
                goto out_free_result;
 
        /*
@@ -868,7 +859,7 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
        if (res == SCSI_SCAN_LUN_PRESENT) {
                if (bflags & BLIST_KEY) {
                        sdev->lockable = 0;
-                       scsi_unlock_floptical(sreq, result);
+                       scsi_unlock_floptical(sdev, result);
                }
                if (bflagsp)
                        *bflagsp = bflags;
@@ -876,8 +867,6 @@ static int scsi_probe_and_add_lun(struct scsi_target *starget,
 
  out_free_result:
        kfree(result);
- out_free_sreq:
-       scsi_release_request(sreq);
  out_free_sdev:
        if (res == SCSI_SCAN_LUN_PRESENT) {
                if (sdevp) {
@@ -1070,8 +1059,8 @@ static int scsi_report_lun_scan(struct scsi_device *sdev, int bflags,
        unsigned int lun;
        unsigned int num_luns;
        unsigned int retries;
+       int result;
        struct scsi_lun *lunp, *lun_data;
-       struct scsi_request *sreq;
        u8 *data;
        struct scsi_sense_hdr sshdr;
        struct scsi_target *starget = scsi_target(sdev);
@@ -1089,10 +1078,6 @@ static int scsi_report_lun_scan(struct scsi_device *sdev, int bflags,
        if (bflags & BLIST_NOLUN)
                return 0;
 
-       sreq = scsi_allocate_request(sdev, GFP_ATOMIC);
-       if (!sreq)
-               goto out;
-
        sprintf(devname, "host %d channel %d id %d",
                sdev->host->host_no, sdev->channel, sdev->id);
 
@@ -1110,7 +1095,7 @@ static int scsi_report_lun_scan(struct scsi_device *sdev, int bflags,
        lun_data = kmalloc(length, GFP_ATOMIC |
                           (sdev->host->unchecked_isa_dma ? __GFP_DMA : 0));
        if (!lun_data)
-               goto out_release_request;
+               goto out;
 
        scsi_cmd[0] = REPORT_LUNS;
 
@@ -1129,8 +1114,6 @@ static int scsi_report_lun_scan(struct scsi_device *sdev, int bflags,
 
        scsi_cmd[10] = 0;       /* reserved */
        scsi_cmd[11] = 0;       /* control */
-       sreq->sr_cmd_len = 0;
-       sreq->sr_data_direction = DMA_FROM_DEVICE;
 
        /*
         * We can get a UNIT ATTENTION, for example a power on/reset, so
@@ -1146,29 +1129,29 @@ static int scsi_report_lun_scan(struct scsi_device *sdev, int bflags,
                SCSI_LOG_SCAN_BUS(3, printk (KERN_INFO "scsi scan: Sending"
                                " REPORT LUNS to %s (try %d)\n", devname,
                                retries));
-               scsi_wait_req(sreq, scsi_cmd, lun_data, length,
-                               SCSI_TIMEOUT + 4*HZ, 3);
+
+               result = scsi_execute_req(sdev, scsi_cmd, DMA_FROM_DEVICE,
+                                         lun_data, length, &sshdr,
+                                         SCSI_TIMEOUT + 4 * HZ, 3);
+
                SCSI_LOG_SCAN_BUS(3, printk (KERN_INFO "scsi scan: REPORT LUNS"
-                               " %s (try %d) result 0x%x\n", sreq->sr_result
-                               ?  "failed" : "successful", retries,
-                               sreq->sr_result));
-               if (sreq->sr_result == 0)
+                               " %s (try %d) result 0x%x\n", result
+                               ?  "failed" : "successful", retries, result));
+               if (result == 0)
                        break;
-               else if (scsi_request_normalize_sense(sreq, &sshdr)) {
+               else if (scsi_sense_valid(&sshdr)) {
                        if (sshdr.sense_key != UNIT_ATTENTION)
                                break;
                }
        }
 
-       if (sreq->sr_result) {
+       if (result) {
                /*
                 * The device probably does not support a REPORT LUN command
                 */
                kfree(lun_data);
-               scsi_release_request(sreq);
                return 1;
        }
-       scsi_release_request(sreq);
 
        /*
         * Get the length from the first four bytes of lun_data.
@@ -1242,8 +1225,6 @@ static int scsi_report_lun_scan(struct scsi_device *sdev, int bflags,
        kfree(lun_data);
        return 0;
 
- out_release_request:
-       scsi_release_request(sreq);
  out:
        /*
         * We are out of memory, don't try scanning any further.
@@ -1265,9 +1246,12 @@ struct scsi_device *__scsi_add_device(struct Scsi_Host *shost, uint channel,
 
        get_device(&starget->dev);
        down(&shost->scan_mutex);
-       res = scsi_probe_and_add_lun(starget, lun, NULL, &sdev, 1, hostdata);
-       if (res != SCSI_SCAN_LUN_PRESENT)
-               sdev = ERR_PTR(-ENODEV);
+       if (scsi_host_scan_allowed(shost)) {
+               res = scsi_probe_and_add_lun(starget, lun, NULL, &sdev, 1,
+                                            hostdata);
+               if (res != SCSI_SCAN_LUN_PRESENT)
+                       sdev = ERR_PTR(-ENODEV);
+       }
        up(&shost->scan_mutex);
        scsi_target_reap(starget);
        put_device(&starget->dev);
@@ -1417,11 +1401,15 @@ int scsi_scan_host_selected(struct Scsi_Host *shost, unsigned int channel,
                return -EINVAL;
 
        down(&shost->scan_mutex);
-       if (channel == SCAN_WILD_CARD) 
-               for (channel = 0; channel <= shost->max_channel; channel++)
+       if (scsi_host_scan_allowed(shost)) {
+               if (channel == SCAN_WILD_CARD)
+                       for (channel = 0; channel <= shost->max_channel;
+                            channel++)
+                               scsi_scan_channel(shost, channel, id, lun,
+                                                 rescan);
+               else
                        scsi_scan_channel(shost, channel, id, lun, rescan);
-       else
-               scsi_scan_channel(shost, channel, id, lun, rescan);
+       }
        up(&shost->scan_mutex);
 
        return 0;
index beed7fbe1cbe5c111622d966482e8c9e511281de..dae59d1da07a720b11f2f74b5696263a8d863e3b 100644 (file)
@@ -48,6 +48,30 @@ const char *scsi_device_state_name(enum scsi_device_state state)
        return name;
 }
 
+static struct {
+       enum scsi_host_state    value;
+       char                    *name;
+} shost_states[] = {
+       { SHOST_CREATED, "created" },
+       { SHOST_RUNNING, "running" },
+       { SHOST_CANCEL, "cancel" },
+       { SHOST_DEL, "deleted" },
+       { SHOST_RECOVERY, "recovery" },
+};
+const char *scsi_host_state_name(enum scsi_host_state state)
+{
+       int i;
+       char *name = NULL;
+
+       for (i = 0; i < sizeof(shost_states)/sizeof(shost_states[0]); i++) {
+               if (shost_states[i].value == state) {
+                       name = shost_states[i].name;
+                       break;
+               }
+       }
+       return name;
+}
+
 static int check_set(unsigned int *val, char *src)
 {
        char *last;
@@ -124,6 +148,43 @@ static ssize_t store_scan(struct class_device *class_dev, const char *buf,
 };
 static CLASS_DEVICE_ATTR(scan, S_IWUSR, NULL, store_scan);
 
+static ssize_t
+store_shost_state(struct class_device *class_dev, const char *buf, size_t count)
+{
+       int i;
+       struct Scsi_Host *shost = class_to_shost(class_dev);
+       enum scsi_host_state state = 0;
+
+       for (i = 0; i < sizeof(shost_states)/sizeof(shost_states[0]); i++) {
+               const int len = strlen(shost_states[i].name);
+               if (strncmp(shost_states[i].name, buf, len) == 0 &&
+                  buf[len] == '\n') {
+                       state = shost_states[i].value;
+                       break;
+               }
+       }
+       if (!state)
+               return -EINVAL;
+
+       if (scsi_host_set_state(shost, state))
+               return -EINVAL;
+       return count;
+}
+
+static ssize_t
+show_shost_state(struct class_device *class_dev, char *buf)
+{
+       struct Scsi_Host *shost = class_to_shost(class_dev);
+       const char *name = scsi_host_state_name(shost->shost_state);
+
+       if (!name)
+               return -EINVAL;
+
+       return snprintf(buf, 20, "%s\n", name);
+}
+
+static CLASS_DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state);
+
 shost_rd_attr(unique_id, "%u\n");
 shost_rd_attr(host_busy, "%hu\n");
 shost_rd_attr(cmd_per_lun, "%hd\n");
@@ -139,6 +200,7 @@ static struct class_device_attribute *scsi_sysfs_shost_attrs[] = {
        &class_device_attr_unchecked_isa_dma,
        &class_device_attr_proc_name,
        &class_device_attr_scan,
+       &class_device_attr_state,
        NULL
 };
 
index e6412fce423ce8fa5b2ebfd432f79c46f29c8d64..2cab556b6e82afa886203254b16024783e47f8c5 100644 (file)
@@ -252,7 +252,8 @@ struct fc_internal {
 
 #define to_fc_internal(tmpl)   container_of(tmpl, struct fc_internal, t)
 
-static int fc_target_setup(struct device *dev)
+static int fc_target_setup(struct transport_container *tc, struct device *dev,
+                          struct class_device *cdev)
 {
        struct scsi_target *starget = to_scsi_target(dev);
        struct fc_rport *rport = starget_to_rport(starget);
@@ -281,7 +282,8 @@ static DECLARE_TRANSPORT_CLASS(fc_transport_class,
                               NULL,
                               NULL);
 
-static int fc_host_setup(struct device *dev)
+static int fc_host_setup(struct transport_container *tc, struct device *dev,
+                        struct class_device *cdev)
 {
        struct Scsi_Host *shost = dev_to_shost(dev);
 
index 7670919a087a6e526416419bb0b4035982d136cb..ef577c8c21826b082c0bac3f81b8ea97d96f650c 100644 (file)
 #include "scsi_priv.h"
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
-#include <scsi/scsi_request.h>
+#include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_eh.h>
 #include <scsi/scsi_transport.h>
 #include <scsi/scsi_transport_spi.h>
 
 #define SPI_PRINTK(x, l, f, a...)      dev_printk(l, &(x)->dev, f , ##a)
 
-#define SPI_NUM_ATTRS 13       /* increase this if you add attributes */
+#define SPI_NUM_ATTRS 14       /* increase this if you add attributes */
 #define SPI_OTHER_ATTRS 1      /* Increase this if you add "always
                                 * on" attributes */
 #define SPI_HOST_ATTRS 1
@@ -106,27 +106,31 @@ static int sprint_frac(char *dest, int value, int denom)
        return result;
 }
 
-/* Modification of scsi_wait_req that will clear UNIT ATTENTION conditions
- * resulting from (likely) bus and device resets */
-static void spi_wait_req(struct scsi_request *sreq, const void *cmd,
-                        void *buffer, unsigned bufflen)
+static int spi_execute(struct scsi_device *sdev, const void *cmd,
+                      enum dma_data_direction dir,
+                      void *buffer, unsigned bufflen,
+                      struct scsi_sense_hdr *sshdr)
 {
-       int i;
+       int i, result;
+       unsigned char sense[SCSI_SENSE_BUFFERSIZE];
 
        for(i = 0; i < DV_RETRIES; i++) {
-               sreq->sr_request->flags |= REQ_FAILFAST;
-
-               scsi_wait_req(sreq, cmd, buffer, bufflen,
-                             DV_TIMEOUT, /* retries */ 1);
-               if (sreq->sr_result & DRIVER_SENSE) {
-                       struct scsi_sense_hdr sshdr;
-
-                       if (scsi_request_normalize_sense(sreq, &sshdr)
-                           && sshdr.sense_key == UNIT_ATTENTION)
+               result = scsi_execute(sdev, cmd, dir, buffer, bufflen,
+                                     sense, DV_TIMEOUT, /* retries */ 1,
+                                     REQ_FAILFAST);
+               if (result & DRIVER_SENSE) {
+                       struct scsi_sense_hdr sshdr_tmp;
+                       if (!sshdr)
+                               sshdr = &sshdr_tmp;
+
+                       if (scsi_normalize_sense(sense, sizeof(*sense),
+                                                sshdr)
+                           && sshdr->sense_key == UNIT_ATTENTION)
                                continue;
                }
                break;
        }
+       return result;
 }
 
 static struct {
@@ -162,7 +166,8 @@ static inline enum spi_signal_type spi_signal_to_value(const char *name)
        return SPI_SIGNAL_UNKNOWN;
 }
 
-static int spi_host_setup(struct device *dev)
+static int spi_host_setup(struct transport_container *tc, struct device *dev,
+                         struct class_device *cdev)
 {
        struct Scsi_Host *shost = dev_to_shost(dev);
 
@@ -196,7 +201,9 @@ static int spi_host_match(struct attribute_container *cont,
        return &i->t.host_attrs.ac == cont;
 }
 
-static int spi_device_configure(struct device *dev)
+static int spi_device_configure(struct transport_container *tc,
+                               struct device *dev,
+                               struct class_device *cdev)
 {
        struct scsi_device *sdev = to_scsi_device(dev);
        struct scsi_target *starget = sdev->sdev_target;
@@ -214,7 +221,9 @@ static int spi_device_configure(struct device *dev)
        return 0;
 }
 
-static int spi_setup_transport_attrs(struct device *dev)
+static int spi_setup_transport_attrs(struct transport_container *tc,
+                                    struct device *dev,
+                                    struct class_device *cdev)
 {
        struct scsi_target *starget = to_scsi_target(dev);
 
@@ -231,6 +240,7 @@ static int spi_setup_transport_attrs(struct device *dev)
        spi_rd_strm(starget) = 0;
        spi_rti(starget) = 0;
        spi_pcomp_en(starget) = 0;
+       spi_hold_mcs(starget) = 0;
        spi_dv_pending(starget) = 0;
        spi_initial_dv(starget) = 0;
        init_MUTEX(&spi_dv_sem(starget));
@@ -347,6 +357,7 @@ spi_transport_rd_attr(wr_flow, "%d\n");
 spi_transport_rd_attr(rd_strm, "%d\n");
 spi_transport_rd_attr(rti, "%d\n");
 spi_transport_rd_attr(pcomp_en, "%d\n");
+spi_transport_rd_attr(hold_mcs, "%d\n");
 
 /* we only care about the first child device so we return 1 */
 static int child_iter(struct device *dev, void *data)
@@ -539,13 +550,13 @@ enum spi_compare_returns {
 /* This is for read/write Domain Validation:  If the device supports
  * an echo buffer, we do read/write tests to it */
 static enum spi_compare_returns
-spi_dv_device_echo_buffer(struct scsi_request *sreq, u8 *buffer,
+spi_dv_device_echo_buffer(struct scsi_device *sdev, u8 *buffer,
                          u8 *ptr, const int retries)
 {
-       struct scsi_device *sdev = sreq->sr_device;
        int len = ptr - buffer;
-       int j, k, r;
+       int j, k, r, result;
        unsigned int pattern = 0x0000ffff;
+       struct scsi_sense_hdr sshdr;
 
        const char spi_write_buffer[] = {
                WRITE_BUFFER, 0x0a, 0, 0, 0, 0, 0, len >> 8, len & 0xff, 0
@@ -590,14 +601,12 @@ spi_dv_device_echo_buffer(struct scsi_request *sreq, u8 *buffer,
        }
 
        for (r = 0; r < retries; r++) {
-               sreq->sr_cmd_len = 0;   /* wait_req to fill in */
-               sreq->sr_data_direction = DMA_TO_DEVICE;
-               spi_wait_req(sreq, spi_write_buffer, buffer, len);
-               if(sreq->sr_result || !scsi_device_online(sdev)) {
-                       struct scsi_sense_hdr sshdr;
+               result = spi_execute(sdev, spi_write_buffer, DMA_TO_DEVICE,
+                                    buffer, len, &sshdr);
+               if(result || !scsi_device_online(sdev)) {
 
                        scsi_device_set_state(sdev, SDEV_QUIESCE);
-                       if (scsi_request_normalize_sense(sreq, &sshdr)
+                       if (scsi_sense_valid(&sshdr)
                            && sshdr.sense_key == ILLEGAL_REQUEST
                            /* INVALID FIELD IN CDB */
                            && sshdr.asc == 0x24 && sshdr.ascq == 0x00)
@@ -609,14 +618,13 @@ spi_dv_device_echo_buffer(struct scsi_request *sreq, u8 *buffer,
                                return SPI_COMPARE_SKIP_TEST;
 
 
-                       SPI_PRINTK(sdev->sdev_target, KERN_ERR, "Write Buffer failure %x\n", sreq->sr_result);
+                       SPI_PRINTK(sdev->sdev_target, KERN_ERR, "Write Buffer failure %x\n", result);
                        return SPI_COMPARE_FAILURE;
                }
 
                memset(ptr, 0, len);
-               sreq->sr_cmd_len = 0;   /* wait_req to fill in */
-               sreq->sr_data_direction = DMA_FROM_DEVICE;
-               spi_wait_req(sreq, spi_read_buffer, ptr, len);
+               spi_execute(sdev, spi_read_buffer, DMA_FROM_DEVICE,
+                           ptr, len, NULL);
                scsi_device_set_state(sdev, SDEV_QUIESCE);
 
                if (memcmp(buffer, ptr, len) != 0)
@@ -628,25 +636,22 @@ spi_dv_device_echo_buffer(struct scsi_request *sreq, u8 *buffer,
 /* This is for the simplest form of Domain Validation: a read test
  * on the inquiry data from the device */
 static enum spi_compare_returns
-spi_dv_device_compare_inquiry(struct scsi_request *sreq, u8 *buffer,
+spi_dv_device_compare_inquiry(struct scsi_device *sdev, u8 *buffer,
                              u8 *ptr, const int retries)
 {
-       int r;
-       const int len = sreq->sr_device->inquiry_len;
-       struct scsi_device *sdev = sreq->sr_device;
+       int r, result;
+       const int len = sdev->inquiry_len;
        const char spi_inquiry[] = {
                INQUIRY, 0, 0, 0, len, 0
        };
 
        for (r = 0; r < retries; r++) {
-               sreq->sr_cmd_len = 0;   /* wait_req to fill in */
-               sreq->sr_data_direction = DMA_FROM_DEVICE;
-
                memset(ptr, 0, len);
 
-               spi_wait_req(sreq, spi_inquiry, ptr, len);
+               result = spi_execute(sdev, spi_inquiry, DMA_FROM_DEVICE,
+                                    ptr, len, NULL);
                
-               if(sreq->sr_result || !scsi_device_online(sdev)) {
+               if(result || !scsi_device_online(sdev)) {
                        scsi_device_set_state(sdev, SDEV_QUIESCE);
                        return SPI_COMPARE_FAILURE;
                }
@@ -667,12 +672,11 @@ spi_dv_device_compare_inquiry(struct scsi_request *sreq, u8 *buffer,
 }
 
 static enum spi_compare_returns
-spi_dv_retrain(struct scsi_request *sreq, u8 *buffer, u8 *ptr,
+spi_dv_retrain(struct scsi_device *sdev, u8 *buffer, u8 *ptr,
               enum spi_compare_returns 
-              (*compare_fn)(struct scsi_request *, u8 *, u8 *, int))
+              (*compare_fn)(struct scsi_device *, u8 *, u8 *, int))
 {
-       struct spi_internal *i = to_spi_internal(sreq->sr_host->transportt);
-       struct scsi_device *sdev = sreq->sr_device;
+       struct spi_internal *i = to_spi_internal(sdev->host->transportt);
        struct scsi_target *starget = sdev->sdev_target;
        int period = 0, prevperiod = 0; 
        enum spi_compare_returns retval;
@@ -680,7 +684,7 @@ spi_dv_retrain(struct scsi_request *sreq, u8 *buffer, u8 *ptr,
 
        for (;;) {
                int newperiod;
-               retval = compare_fn(sreq, buffer, ptr, DV_LOOPS);
+               retval = compare_fn(sdev, buffer, ptr, DV_LOOPS);
 
                if (retval == SPI_COMPARE_SUCCESS
                    || retval == SPI_COMPARE_SKIP_TEST)
@@ -726,9 +730,9 @@ spi_dv_retrain(struct scsi_request *sreq, u8 *buffer, u8 *ptr,
 }
 
 static int
-spi_dv_device_get_echo_buffer(struct scsi_request *sreq, u8 *buffer)
+spi_dv_device_get_echo_buffer(struct scsi_device *sdev, u8 *buffer)
 {
-       int l;
+       int l, result;
 
        /* first off do a test unit ready.  This can error out 
         * because of reservations or some other reason.  If it
@@ -744,18 +748,16 @@ spi_dv_device_get_echo_buffer(struct scsi_request *sreq, u8 *buffer)
        };
 
        
-       sreq->sr_cmd_len = 0;
-       sreq->sr_data_direction = DMA_NONE;
-
        /* We send a set of three TURs to clear any outstanding 
         * unit attention conditions if they exist (Otherwise the
         * buffer tests won't be happy).  If the TUR still fails
         * (reservation conflict, device not ready, etc) just
         * skip the write tests */
        for (l = 0; ; l++) {
-               spi_wait_req(sreq, spi_test_unit_ready, NULL, 0);
+               result = spi_execute(sdev, spi_test_unit_ready, DMA_NONE, 
+                                    NULL, 0, NULL);
 
-               if(sreq->sr_result) {
+               if(result) {
                        if(l >= 3)
                                return 0;
                } else {
@@ -764,12 +766,10 @@ spi_dv_device_get_echo_buffer(struct scsi_request *sreq, u8 *buffer)
                }
        }
 
-       sreq->sr_cmd_len = 0;
-       sreq->sr_data_direction = DMA_FROM_DEVICE;
-
-       spi_wait_req(sreq, spi_read_buffer_descriptor, buffer, 4);
+       result = spi_execute(sdev, spi_read_buffer_descriptor, 
+                            DMA_FROM_DEVICE, buffer, 4, NULL);
 
-       if (sreq->sr_result)
+       if (result)
                /* Device has no echo buffer */
                return 0;
 
@@ -777,17 +777,16 @@ spi_dv_device_get_echo_buffer(struct scsi_request *sreq, u8 *buffer)
 }
 
 static void
-spi_dv_device_internal(struct scsi_request *sreq, u8 *buffer)
+spi_dv_device_internal(struct scsi_device *sdev, u8 *buffer)
 {
-       struct spi_internal *i = to_spi_internal(sreq->sr_host->transportt);
-       struct scsi_device *sdev = sreq->sr_device;
+       struct spi_internal *i = to_spi_internal(sdev->host->transportt);
        struct scsi_target *starget = sdev->sdev_target;
        int len = sdev->inquiry_len;
        /* first set us up for narrow async */
        DV_SET(offset, 0);
        DV_SET(width, 0);
        
-       if (spi_dv_device_compare_inquiry(sreq, buffer, buffer, DV_LOOPS)
+       if (spi_dv_device_compare_inquiry(sdev, buffer, buffer, DV_LOOPS)
            != SPI_COMPARE_SUCCESS) {
                SPI_PRINTK(starget, KERN_ERR, "Domain Validation Initial Inquiry Failed\n");
                /* FIXME: should probably offline the device here? */
@@ -799,7 +798,7 @@ spi_dv_device_internal(struct scsi_request *sreq, u8 *buffer)
            scsi_device_wide(sdev)) {
                i->f->set_width(starget, 1);
 
-               if (spi_dv_device_compare_inquiry(sreq, buffer,
+               if (spi_dv_device_compare_inquiry(sdev, buffer,
                                                   buffer + len,
                                                   DV_LOOPS)
                    != SPI_COMPARE_SUCCESS) {
@@ -820,7 +819,7 @@ spi_dv_device_internal(struct scsi_request *sreq, u8 *buffer)
 
        len = 0;
        if (scsi_device_dt(sdev))
-               len = spi_dv_device_get_echo_buffer(sreq, buffer);
+               len = spi_dv_device_get_echo_buffer(sdev, buffer);
 
  retry:
 
@@ -846,7 +845,7 @@ spi_dv_device_internal(struct scsi_request *sreq, u8 *buffer)
 
        if (len == 0) {
                SPI_PRINTK(starget, KERN_INFO, "Domain Validation skipping write tests\n");
-               spi_dv_retrain(sreq, buffer, buffer + len,
+               spi_dv_retrain(sdev, buffer, buffer + len,
                               spi_dv_device_compare_inquiry);
                return;
        }
@@ -856,7 +855,7 @@ spi_dv_device_internal(struct scsi_request *sreq, u8 *buffer)
                len = SPI_MAX_ECHO_BUFFER_SIZE;
        }
 
-       if (spi_dv_retrain(sreq, buffer, buffer + len,
+       if (spi_dv_retrain(sdev, buffer, buffer + len,
                           spi_dv_device_echo_buffer)
            == SPI_COMPARE_SKIP_TEST) {
                /* OK, the stupid drive can't do a write echo buffer
@@ -879,16 +878,12 @@ spi_dv_device_internal(struct scsi_request *sreq, u8 *buffer)
 void
 spi_dv_device(struct scsi_device *sdev)
 {
-       struct scsi_request *sreq = scsi_allocate_request(sdev, GFP_KERNEL);
        struct scsi_target *starget = sdev->sdev_target;
        u8 *buffer;
        const int len = SPI_MAX_ECHO_BUFFER_SIZE*2;
 
-       if (unlikely(!sreq))
-               return;
-
        if (unlikely(scsi_device_get(sdev)))
-               goto out_free_req;
+               return;
 
        buffer = kmalloc(len, GFP_KERNEL);
 
@@ -909,7 +904,7 @@ spi_dv_device(struct scsi_device *sdev)
 
        SPI_PRINTK(starget, KERN_INFO, "Beginning Domain Validation\n");
 
-       spi_dv_device_internal(sreq, buffer);
+       spi_dv_device_internal(sdev, buffer);
 
        SPI_PRINTK(starget, KERN_INFO, "Ending Domain Validation\n");
 
@@ -924,8 +919,6 @@ spi_dv_device(struct scsi_device *sdev)
        kfree(buffer);
  out_put:
        scsi_device_put(sdev);
- out_free_req:
-       scsi_release_request(sreq);
 }
 EXPORT_SYMBOL(spi_dv_device);
 
@@ -1028,10 +1021,17 @@ void spi_display_xfer_agreement(struct scsi_target *starget)
                sprint_frac(tmp, picosec, 1000);
 
                dev_info(&starget->dev,
-                       "%s %sSCSI %d.%d MB/s %s%s%s (%s ns, offset %d)\n",
-                       scsi, tp->width ? "WIDE " : "", kb100/10, kb100 % 10,
-                       tp->dt ? "DT" : "ST", tp->iu ? " IU" : "",
-                       tp->qas  ? " QAS" : "", tmp, tp->offset);
+                        "%s %sSCSI %d.%d MB/s %s%s%s%s%s%s%s%s (%s ns, offset %d)\n",
+                        scsi, tp->width ? "WIDE " : "", kb100/10, kb100 % 10,
+                        tp->dt ? "DT" : "ST",
+                        tp->iu ? " IU" : "",
+                        tp->qas  ? " QAS" : "",
+                        tp->rd_strm ? " RDSTRM" : "",
+                        tp->rti ? " RTI" : "",
+                        tp->wr_flow ? " WRFLOW" : "",
+                        tp->pcomp_en ? " PCOMP" : "",
+                        tp->hold_mcs ? " HMCS" : "",
+                        tmp, tp->offset);
        } else {
                dev_info(&starget->dev, "%sasynchronous.\n",
                                tp->width ? "wide " : "");
@@ -1073,6 +1073,7 @@ static int spi_device_match(struct attribute_container *cont,
 {
        struct scsi_device *sdev;
        struct Scsi_Host *shost;
+       struct spi_internal *i;
 
        if (!scsi_is_sdev_device(dev))
                return 0;
@@ -1085,6 +1086,9 @@ static int spi_device_match(struct attribute_container *cont,
        /* Note: this class has no device attributes, so it has
         * no per-HBA allocation and thus we don't need to distinguish
         * the attribute containers for the device */
+       i = to_spi_internal(shost->transportt);
+       if (i->f->deny_binding && i->f->deny_binding(sdev->sdev_target))
+               return 0;
        return 1;
 }
 
@@ -1092,6 +1096,7 @@ static int spi_target_match(struct attribute_container *cont,
                            struct device *dev)
 {
        struct Scsi_Host *shost;
+       struct scsi_target *starget;
        struct spi_internal *i;
 
        if (!scsi_is_target_device(dev))
@@ -1103,7 +1108,11 @@ static int spi_target_match(struct attribute_container *cont,
                return 0;
 
        i = to_spi_internal(shost->transportt);
-       
+       starget = to_scsi_target(dev);
+
+       if (i->f->deny_binding && i->f->deny_binding(starget))
+               return 0;
+
        return &i->t.target_attrs.ac == cont;
 }
 
@@ -1154,6 +1163,7 @@ spi_attach_transport(struct spi_function_template *ft)
        SETUP_ATTRIBUTE(rd_strm);
        SETUP_ATTRIBUTE(rti);
        SETUP_ATTRIBUTE(pcomp_en);
+       SETUP_ATTRIBUTE(hold_mcs);
 
        /* if you add an attribute but forget to increase SPI_NUM_ATTRS
         * this bug will trigger */
index 0410e1bf109a126726cce9356fd3f51c159e1871..de564b386052a1c1c0015f76088c2f9db6fc529c 100644 (file)
@@ -59,7 +59,6 @@
 #include <scsi/scsi_eh.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_ioctl.h>
-#include <scsi/scsi_request.h>
 #include <scsi/scsicam.h>
 
 #include "scsi_logging.h"
@@ -125,7 +124,7 @@ static int sd_issue_flush(struct device *, sector_t *);
 static void sd_end_flush(request_queue_t *, struct request *);
 static int sd_prepare_flush(request_queue_t *, struct request *);
 static void sd_read_capacity(struct scsi_disk *sdkp, char *diskname,
-                struct scsi_request *SRpnt, unsigned char *buffer);
+                            unsigned char *buffer);
 
 static struct scsi_driver sd_template = {
        .owner                  = THIS_MODULE,
@@ -682,19 +681,13 @@ not_present:
 
 static int sd_sync_cache(struct scsi_device *sdp)
 {
-       struct scsi_request *sreq;
        int retries, res;
+       struct scsi_sense_hdr sshdr;
 
        if (!scsi_device_online(sdp))
                return -ENODEV;
 
-       sreq = scsi_allocate_request(sdp, GFP_KERNEL);
-       if (!sreq) {
-               printk("FAILED\n  No memory for request\n");
-               return -ENOMEM;
-       }
 
-       sreq->sr_data_direction = DMA_NONE;
        for (retries = 3; retries > 0; --retries) {
                unsigned char cmd[10] = { 0 };
 
@@ -703,22 +696,20 @@ static int sd_sync_cache(struct scsi_device *sdp)
                 * Leave the rest of the command zero to indicate
                 * flush everything.
                 */
-               scsi_wait_req(sreq, cmd, NULL, 0, SD_TIMEOUT, SD_MAX_RETRIES);
-               if (sreq->sr_result == 0)
+               res = scsi_execute_req(sdp, cmd, DMA_NONE, NULL, 0, &sshdr,
+                                      SD_TIMEOUT, SD_MAX_RETRIES);
+               if (res == 0)
                        break;
        }
 
-       res = sreq->sr_result;
-       if (res) {
-               printk(KERN_WARNING "FAILED\n  status = %x, message = %02x, "
+       if (res) {              printk(KERN_WARNING "FAILED\n  status = %x, message = %02x, "
                                    "host = %d, driver = %02x\n  ",
                                    status_byte(res), msg_byte(res),
                                    host_byte(res), driver_byte(res));
                        if (driver_byte(res) & DRIVER_SENSE)
-                               scsi_print_req_sense("sd", sreq);
+                               scsi_print_sense_hdr("sd", &sshdr);
        }
 
-       scsi_release_request(sreq);
        return res;
 }
 
@@ -957,22 +948,19 @@ static void sd_rw_intr(struct scsi_cmnd * SCpnt)
        scsi_io_completion(SCpnt, good_bytes, block_sectors << 9);
 }
 
-static int media_not_present(struct scsi_disk *sdkp, struct scsi_request *srp)
+static int media_not_present(struct scsi_disk *sdkp,
+                            struct scsi_sense_hdr *sshdr)
 {
-       struct scsi_sense_hdr sshdr;
 
-       if (!srp->sr_result)
-               return 0;
-       if (!(driver_byte(srp->sr_result) & DRIVER_SENSE))
+       if (!scsi_sense_valid(sshdr))
                return 0;
        /* not invoked for commands that could return deferred errors */
-       if (scsi_request_normalize_sense(srp, &sshdr)) {
-               if (sshdr.sense_key != NOT_READY &&
-                   sshdr.sense_key != UNIT_ATTENTION)
-                       return 0;
-               if (sshdr.asc != 0x3A) /* medium not present */
-                       return 0;
-       }
+       if (sshdr->sense_key != NOT_READY &&
+           sshdr->sense_key != UNIT_ATTENTION)
+               return 0;
+       if (sshdr->asc != 0x3A) /* medium not present */
+               return 0;
+
        set_media_not_present(sdkp);
        return 1;
 }
@@ -981,10 +969,10 @@ static int media_not_present(struct scsi_disk *sdkp, struct scsi_request *srp)
  * spinup disk - called only in sd_revalidate_disk()
  */
 static void
-sd_spinup_disk(struct scsi_disk *sdkp, char *diskname,
-              struct scsi_request *SRpnt, unsigned char *buffer) {
+sd_spinup_disk(struct scsi_disk *sdkp, char *diskname)
+{
        unsigned char cmd[10];
-       unsigned long spintime_value = 0;
+       unsigned long spintime_expire = 0;
        int retries, spintime;
        unsigned int the_result;
        struct scsi_sense_hdr sshdr;
@@ -1001,18 +989,13 @@ sd_spinup_disk(struct scsi_disk *sdkp, char *diskname,
                        cmd[0] = TEST_UNIT_READY;
                        memset((void *) &cmd[1], 0, 9);
 
-                       SRpnt->sr_cmd_len = 0;
-                       memset(SRpnt->sr_sense_buffer, 0,
-                              SCSI_SENSE_BUFFERSIZE);
-                       SRpnt->sr_data_direction = DMA_NONE;
+                       the_result = scsi_execute_req(sdkp->device, cmd,
+                                                     DMA_NONE, NULL, 0,
+                                                     &sshdr, SD_TIMEOUT,
+                                                     SD_MAX_RETRIES);
 
-                       scsi_wait_req (SRpnt, (void *) cmd, (void *) buffer,
-                                      0/*512*/, SD_TIMEOUT, SD_MAX_RETRIES);
-
-                       the_result = SRpnt->sr_result;
                        if (the_result)
-                               sense_valid = scsi_request_normalize_sense(
-                                                       SRpnt, &sshdr);
+                               sense_valid = scsi_sense_valid(&sshdr);
                        retries++;
                } while (retries < 3 && 
                         (!scsi_status_is_good(the_result) ||
@@ -1024,7 +1007,7 @@ sd_spinup_disk(struct scsi_disk *sdkp, char *diskname,
                 * any media in it, don't bother with any of the rest of
                 * this crap.
                 */
-               if (media_not_present(sdkp, SRpnt))
+               if (media_not_present(sdkp, &sshdr))
                        return;
 
                if ((driver_byte(the_result) & DRIVER_SENSE) == 0) {
@@ -1063,33 +1046,42 @@ sd_spinup_disk(struct scsi_disk *sdkp, char *diskname,
                                cmd[1] = 1;     /* Return immediately */
                                memset((void *) &cmd[2], 0, 8);
                                cmd[4] = 1;     /* Start spin cycle */
-                               SRpnt->sr_cmd_len = 0;
-                               memset(SRpnt->sr_sense_buffer, 0,
-                                       SCSI_SENSE_BUFFERSIZE);
-
-                               SRpnt->sr_data_direction = DMA_NONE;
-                               scsi_wait_req(SRpnt, (void *)cmd, 
-                                             (void *) buffer, 0/*512*/, 
-                                             SD_TIMEOUT, SD_MAX_RETRIES);
-                               spintime_value = jiffies;
+                               scsi_execute_req(sdkp->device, cmd, DMA_NONE,
+                                                NULL, 0, &sshdr,
+                                                SD_TIMEOUT, SD_MAX_RETRIES);
+                               spintime_expire = jiffies + 100 * HZ;
+                               spintime = 1;
                        }
-                       spintime = 1;
                        /* Wait 1 second for next try */
                        msleep(1000);
                        printk(".");
+
+               /*
+                * Wait for USB flash devices with slow firmware.
+                * Yes, this sense key/ASC combination shouldn't
+                * occur here.  It's characteristic of these devices.
+                */
+               } else if (sense_valid &&
+                               sshdr.sense_key == UNIT_ATTENTION &&
+                               sshdr.asc == 0x28) {
+                       if (!spintime) {
+                               spintime_expire = jiffies + 5 * HZ;
+                               spintime = 1;
+                       }
+                       /* Wait 1 second for next try */
+                       msleep(1000);
                } else {
                        /* we don't understand the sense code, so it's
                         * probably pointless to loop */
                        if(!spintime) {
                                printk(KERN_NOTICE "%s: Unit Not Ready, "
                                        "sense:\n", diskname);
-                               scsi_print_req_sense("", SRpnt);
+                               scsi_print_sense_hdr("", &sshdr);
                        }
                        break;
                }
                                
-       } while (spintime &&
-                time_after(spintime_value + 100 * HZ, jiffies));
+       } while (spintime && time_before_eq(jiffies, spintime_expire));
 
        if (spintime) {
                if (scsi_status_is_good(the_result))
@@ -1104,14 +1096,15 @@ sd_spinup_disk(struct scsi_disk *sdkp, char *diskname,
  */
 static void
 sd_read_capacity(struct scsi_disk *sdkp, char *diskname,
-                struct scsi_request *SRpnt, unsigned char *buffer) {
+                unsigned char *buffer)
+{
        unsigned char cmd[16];
-       struct scsi_device *sdp = sdkp->device;
        int the_result, retries;
        int sector_size = 0;
        int longrc = 0;
        struct scsi_sense_hdr sshdr;
        int sense_valid = 0;
+       struct scsi_device *sdp = sdkp->device;
 
 repeat:
        retries = 3;
@@ -1128,20 +1121,15 @@ repeat:
                        memset((void *) buffer, 0, 8);
                }
                
-               SRpnt->sr_cmd_len = 0;
-               memset(SRpnt->sr_sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
-               SRpnt->sr_data_direction = DMA_FROM_DEVICE;
-
-               scsi_wait_req(SRpnt, (void *) cmd, (void *) buffer,
-                             longrc ? 12 : 8, SD_TIMEOUT, SD_MAX_RETRIES);
+               the_result = scsi_execute_req(sdp, cmd, DMA_FROM_DEVICE,
+                                             buffer, longrc ? 12 : 8, &sshdr,
+                                             SD_TIMEOUT, SD_MAX_RETRIES);
 
-               if (media_not_present(sdkp, SRpnt))
+               if (media_not_present(sdkp, &sshdr))
                        return;
 
-               the_result = SRpnt->sr_result;
                if (the_result)
-                       sense_valid = scsi_request_normalize_sense(SRpnt,
-                                                                  &sshdr);
+                       sense_valid = scsi_sense_valid(&sshdr);
                retries--;
 
        } while (the_result && retries);
@@ -1156,7 +1144,7 @@ repeat:
                       driver_byte(the_result));
 
                if (driver_byte(the_result) & DRIVER_SENSE)
-                       scsi_print_req_sense("sd", SRpnt);
+                       scsi_print_sense_hdr("sd", &sshdr);
                else
                        printk("%s : sense not available. \n", diskname);
 
@@ -1296,11 +1284,13 @@ got_data:
 
 /* called with buffer of length 512 */
 static inline int
-sd_do_mode_sense(struct scsi_request *SRpnt, int dbd, int modepage,
-                unsigned char *buffer, int len, struct scsi_mode_data *data)
+sd_do_mode_sense(struct scsi_device *sdp, int dbd, int modepage,
+                unsigned char *buffer, int len, struct scsi_mode_data *data,
+                struct scsi_sense_hdr *sshdr)
 {
-       return __scsi_mode_sense(SRpnt, dbd, modepage, buffer, len,
-                                SD_TIMEOUT, SD_MAX_RETRIES, data);
+       return scsi_mode_sense(sdp, dbd, modepage, buffer, len,
+                              SD_TIMEOUT, SD_MAX_RETRIES, data,
+                              sshdr);
 }
 
 /*
@@ -1309,25 +1299,27 @@ sd_do_mode_sense(struct scsi_request *SRpnt, int dbd, int modepage,
  */
 static void
 sd_read_write_protect_flag(struct scsi_disk *sdkp, char *diskname,
-                  struct scsi_request *SRpnt, unsigned char *buffer) {
+                          unsigned char *buffer)
+{
        int res;
+       struct scsi_device *sdp = sdkp->device;
        struct scsi_mode_data data;
 
        set_disk_ro(sdkp->disk, 0);
-       if (sdkp->device->skip_ms_page_3f) {
+       if (sdp->skip_ms_page_3f) {
                printk(KERN_NOTICE "%s: assuming Write Enabled\n", diskname);
                return;
        }
 
-       if (sdkp->device->use_192_bytes_for_3f) {
-               res = sd_do_mode_sense(SRpnt, 0, 0x3F, buffer, 192, &data);
+       if (sdp->use_192_bytes_for_3f) {
+               res = sd_do_mode_sense(sdp, 0, 0x3F, buffer, 192, &data, NULL);
        } else {
                /*
                 * First attempt: ask for all pages (0x3F), but only 4 bytes.
                 * We have to start carefully: some devices hang if we ask
                 * for more than is available.
                 */
-               res = sd_do_mode_sense(SRpnt, 0, 0x3F, buffer, 4, &data);
+               res = sd_do_mode_sense(sdp, 0, 0x3F, buffer, 4, &data, NULL);
 
                /*
                 * Second attempt: ask for page 0 When only page 0 is
@@ -1336,14 +1328,14 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, char *diskname,
                 * CDB.
                 */
                if (!scsi_status_is_good(res))
-                       res = sd_do_mode_sense(SRpnt, 0, 0, buffer, 4, &data);
+                       res = sd_do_mode_sense(sdp, 0, 0, buffer, 4, &data, NULL);
 
                /*
                 * Third attempt: ask 255 bytes, as we did earlier.
                 */
                if (!scsi_status_is_good(res))
-                       res = sd_do_mode_sense(SRpnt, 0, 0x3F, buffer, 255,
-                                              &data);
+                       res = sd_do_mode_sense(sdp, 0, 0x3F, buffer, 255,
+                                              &data, NULL);
        }
 
        if (!scsi_status_is_good(res)) {
@@ -1365,19 +1357,20 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, char *diskname,
  */
 static void
 sd_read_cache_type(struct scsi_disk *sdkp, char *diskname,
-                  struct scsi_request *SRpnt, unsigned char *buffer)
+                  unsigned char *buffer)
 {
        int len = 0, res;
+       struct scsi_device *sdp = sdkp->device;
 
        int dbd;
        int modepage;
        struct scsi_mode_data data;
        struct scsi_sense_hdr sshdr;
 
-       if (sdkp->device->skip_ms_page_8)
+       if (sdp->skip_ms_page_8)
                goto defaults;
 
-       if (sdkp->device->type == TYPE_RBC) {
+       if (sdp->type == TYPE_RBC) {
                modepage = 6;
                dbd = 8;
        } else {
@@ -1386,7 +1379,7 @@ sd_read_cache_type(struct scsi_disk *sdkp, char *diskname,
        }
 
        /* cautiously ask */
-       res = sd_do_mode_sense(SRpnt, dbd, modepage, buffer, 4, &data);
+       res = sd_do_mode_sense(sdp, dbd, modepage, buffer, 4, &data, &sshdr);
 
        if (!scsi_status_is_good(res))
                goto bad_sense;
@@ -1407,7 +1400,7 @@ sd_read_cache_type(struct scsi_disk *sdkp, char *diskname,
        len += data.header_length + data.block_descriptor_length;
 
        /* Get the data */
-       res = sd_do_mode_sense(SRpnt, dbd, modepage, buffer, len, &data);
+       res = sd_do_mode_sense(sdp, dbd, modepage, buffer, len, &data, &sshdr);
 
        if (scsi_status_is_good(res)) {
                const char *types[] = {
@@ -1439,7 +1432,7 @@ sd_read_cache_type(struct scsi_disk *sdkp, char *diskname,
        }
 
 bad_sense:
-       if (scsi_request_normalize_sense(SRpnt, &sshdr) &&
+       if (scsi_sense_valid(&sshdr) &&
            sshdr.sense_key == ILLEGAL_REQUEST &&
            sshdr.asc == 0x24 && sshdr.ascq == 0x0)
                printk(KERN_NOTICE "%s: cache data unavailable\n",
@@ -1464,7 +1457,6 @@ static int sd_revalidate_disk(struct gendisk *disk)
 {
        struct scsi_disk *sdkp = scsi_disk(disk);
        struct scsi_device *sdp = sdkp->device;
-       struct scsi_request *sreq;
        unsigned char *buffer;
 
        SCSI_LOG_HLQUEUE(3, printk("sd_revalidate_disk: disk=%s\n", disk->disk_name));
@@ -1476,18 +1468,11 @@ static int sd_revalidate_disk(struct gendisk *disk)
        if (!scsi_device_online(sdp))
                goto out;
 
-       sreq = scsi_allocate_request(sdp, GFP_KERNEL);
-       if (!sreq) {
-               printk(KERN_WARNING "(sd_revalidate_disk:) Request allocation "
-                      "failure.\n");
-               goto out;
-       }
-
        buffer = kmalloc(512, GFP_KERNEL | __GFP_DMA);
        if (!buffer) {
                printk(KERN_WARNING "(sd_revalidate_disk:) Memory allocation "
                       "failure.\n");
-               goto out_release_request;
+               goto out;
        }
 
        /* defaults, until the device tells us otherwise */
@@ -1498,25 +1483,23 @@ static int sd_revalidate_disk(struct gendisk *disk)
        sdkp->WCE = 0;
        sdkp->RCD = 0;
 
-       sd_spinup_disk(sdkp, disk->disk_name, sreq, buffer);
+       sd_spinup_disk(sdkp, disk->disk_name);
 
        /*
         * Without media there is no reason to ask; moreover, some devices
         * react badly if we do.
         */
        if (sdkp->media_present) {
-               sd_read_capacity(sdkp, disk->disk_name, sreq, buffer);
+               sd_read_capacity(sdkp, disk->disk_name, buffer);
                if (sdp->removable)
                        sd_read_write_protect_flag(sdkp, disk->disk_name,
-                                       sreq, buffer);
-               sd_read_cache_type(sdkp, disk->disk_name, sreq, buffer);
+                                                  buffer);
+               sd_read_cache_type(sdkp, disk->disk_name, buffer);
        }
                
        set_capacity(disk, sdkp->capacity);
        kfree(buffer);
 
- out_release_request: 
-       scsi_release_request(sreq);
  out:
        return 0;
 }
index e822ca0e97cf441ca7ea407266dec3a8aee132f9..b1b69d738d085a0ca211381d13a34bcbedde9ff9 100644 (file)
@@ -61,7 +61,7 @@ static int sg_version_num = 30533;    /* 2 digits for each component */
 
 #ifdef CONFIG_SCSI_PROC_FS
 #include <linux/proc_fs.h>
-static char *sg_version_date = "20050328";
+static char *sg_version_date = "20050901";
 
 static int sg_proc_init(void);
 static void sg_proc_cleanup(void);
@@ -1027,8 +1027,7 @@ sg_ioctl(struct inode *inode, struct file *filp,
                if (sdp->detached)
                        return -ENODEV;
                if (filp->f_flags & O_NONBLOCK) {
-                       if (test_bit(SHOST_RECOVERY,
-                                    &sdp->device->host->shost_state))
+                       if (sdp->device->host->shost_state == SHOST_RECOVERY)
                                return -EBUSY;
                } else if (!scsi_block_when_processing_errors(sdp->device))
                        return -EBUSY;
@@ -1795,12 +1794,12 @@ st_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages,
                  unsigned long uaddr, size_t count, int rw,
                  unsigned long max_pfn)
 {
+       unsigned long end = (uaddr + count + PAGE_SIZE - 1) >> PAGE_SHIFT;
+       unsigned long start = uaddr >> PAGE_SHIFT;
+       const int nr_pages = end - start;
        int res, i, j;
-       unsigned int nr_pages;
        struct page **pages;
 
-       nr_pages = ((uaddr & ~PAGE_MASK) + count + ~PAGE_MASK) >> PAGE_SHIFT;
-
        /* User attempted Overflow! */
        if ((uaddr + count) < uaddr)
                return -EINVAL;
index 2f259f2495229b54a1572492bfe3cc818d0dfbf7..ce63fc8312dca45abf1794f43d20a1e57e6ad966 100644 (file)
 #include <scsi/scsi_dbg.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_driver.h>
+#include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_eh.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_ioctl.h>   /* For the door lock/unlock commands */
-#include <scsi/scsi_request.h>
 
 #include "scsi_logging.h"
 #include "sr.h"
@@ -199,15 +199,7 @@ int sr_media_change(struct cdrom_device_info *cdi, int slot)
                /* check multisession offset etc */
                sr_cd_check(cdi);
 
-               /* 
-                * If the disk changed, the capacity will now be different,
-                * so we force a re-read of this information 
-                * Force 2048 for the sector size so that filesystems won't
-                * be trying to use something that is too small if the disc
-                * has changed.
-                */
-               cd->needs_sector_size = 1;
-               cd->device->sector_size = 2048;
+               get_sectorsize(cd);
        }
        return retval;
 }
@@ -538,13 +530,6 @@ static int sr_open(struct cdrom_device_info *cdi, int purpose)
        if (!scsi_block_when_processing_errors(sdev))
                goto error_out;
 
-       /*
-        * If this device did not have media in the drive at boot time, then
-        * we would have been unable to get the sector size.  Check to see if
-        * this is the case, and try again.
-        */
-       if (cd->needs_sector_size)
-               get_sectorsize(cd);
        return 0;
 
 error_out:
@@ -604,7 +589,6 @@ static int sr_probe(struct device *dev)
        cd->driver = &sr_template;
        cd->disk = disk;
        cd->capacity = 0x1fffff;
-       cd->needs_sector_size = 1;
        cd->device->changed = 1;        /* force recheck CD type */
        cd->use = 1;
        cd->readcd_known = 0;
@@ -658,43 +642,30 @@ static void get_sectorsize(struct scsi_cd *cd)
        unsigned char *buffer;
        int the_result, retries = 3;
        int sector_size;
-       struct scsi_request *SRpnt = NULL;
        request_queue_t *queue;
 
        buffer = kmalloc(512, GFP_KERNEL | GFP_DMA);
        if (!buffer)
                goto Enomem;
-       SRpnt = scsi_allocate_request(cd->device, GFP_KERNEL);
-       if (!SRpnt)
-               goto Enomem;
 
        do {
                cmd[0] = READ_CAPACITY;
                memset((void *) &cmd[1], 0, 9);
-               /* Mark as really busy */
-               SRpnt->sr_request->rq_status = RQ_SCSI_BUSY;
-               SRpnt->sr_cmd_len = 0;
-
                memset(buffer, 0, 8);
 
                /* Do the command and wait.. */
-               SRpnt->sr_data_direction = DMA_FROM_DEVICE;
-               scsi_wait_req(SRpnt, (void *) cmd, (void *) buffer,
-                             8, SR_TIMEOUT, MAX_RETRIES);
+               the_result = scsi_execute_req(cd->device, cmd, DMA_FROM_DEVICE,
+                                             buffer, 8, NULL, SR_TIMEOUT,
+                                             MAX_RETRIES);
 
-               the_result = SRpnt->sr_result;
                retries--;
 
        } while (the_result && retries);
 
 
-       scsi_release_request(SRpnt);
-       SRpnt = NULL;
-
        if (the_result) {
                cd->capacity = 0x1fffff;
                sector_size = 2048;     /* A guess, just in case */
-               cd->needs_sector_size = 1;
        } else {
 #if 0
                if (cdrom_get_last_written(&cd->cdi,
@@ -727,7 +698,6 @@ static void get_sectorsize(struct scsi_cd *cd)
                        printk("%s: unsupported sector size %d.\n",
                               cd->cdi.name, sector_size);
                        cd->capacity = 0;
-                       cd->needs_sector_size = 1;
                }
 
                cd->device->sector_size = sector_size;
@@ -736,7 +706,6 @@ static void get_sectorsize(struct scsi_cd *cd)
                 * Add this so that we have the ability to correctly gauge
                 * what the device is capable of.
                 */
-               cd->needs_sector_size = 0;
                set_capacity(cd->disk, cd->capacity);
        }
 
@@ -748,10 +717,7 @@ out:
 
 Enomem:
        cd->capacity = 0x1fffff;
-       sector_size = 2048;     /* A guess, just in case */
-       cd->needs_sector_size = 1;
-       if (SRpnt)
-               scsi_release_request(SRpnt);
+       cd->device->sector_size = 2048; /* A guess, just in case */
        goto out;
 }
 
@@ -759,8 +725,8 @@ static void get_capabilities(struct scsi_cd *cd)
 {
        unsigned char *buffer;
        struct scsi_mode_data data;
-       struct scsi_request *SRpnt;
        unsigned char cmd[MAX_COMMAND_SIZE];
+       struct scsi_sense_hdr sshdr;
        unsigned int the_result;
        int retries, rc, n;
 
@@ -776,19 +742,11 @@ static void get_capabilities(struct scsi_cd *cd)
                ""
        };
 
-       /* allocate a request for the TEST_UNIT_READY */
-       SRpnt = scsi_allocate_request(cd->device, GFP_KERNEL);
-       if (!SRpnt) {
-               printk(KERN_WARNING "(get_capabilities:) Request allocation "
-                      "failure.\n");
-               return;
-       }
 
        /* allocate transfer buffer */
        buffer = kmalloc(512, GFP_KERNEL | GFP_DMA);
        if (!buffer) {
                printk(KERN_ERR "sr: out of memory.\n");
-               scsi_release_request(SRpnt);
                return;
        }
 
@@ -800,24 +758,19 @@ static void get_capabilities(struct scsi_cd *cd)
                memset((void *)cmd, 0, MAX_COMMAND_SIZE);
                cmd[0] = TEST_UNIT_READY;
 
-               SRpnt->sr_cmd_len = 0;
-               SRpnt->sr_sense_buffer[0] = 0;
-               SRpnt->sr_sense_buffer[2] = 0;
-               SRpnt->sr_data_direction = DMA_NONE;
-
-               scsi_wait_req (SRpnt, (void *) cmd, buffer,
-                              0, SR_TIMEOUT, MAX_RETRIES);
+               the_result = scsi_execute_req (cd->device, cmd, DMA_NONE, NULL,
+                                              0, &sshdr, SR_TIMEOUT,
+                                              MAX_RETRIES);
 
-               the_result = SRpnt->sr_result;
                retries++;
        } while (retries < 5 && 
                 (!scsi_status_is_good(the_result) ||
-                 ((driver_byte(the_result) & DRIVER_SENSE) &&
-                  SRpnt->sr_sense_buffer[2] == UNIT_ATTENTION)));
+                 (scsi_sense_valid(&sshdr) &&
+                  sshdr.sense_key == UNIT_ATTENTION)));
 
        /* ask for mode page 0x2a */
        rc = scsi_mode_sense(cd->device, 0, 0x2a, buffer, 128,
-                            SR_TIMEOUT, 3, &data);
+                            SR_TIMEOUT, 3, &data, NULL);
 
        if (!scsi_status_is_good(rc)) {
                /* failed, drive doesn't have capabilities mode page */
@@ -825,7 +778,6 @@ static void get_capabilities(struct scsi_cd *cd)
                cd->cdi.mask |= (CDC_CD_R | CDC_CD_RW | CDC_DVD_R |
                                         CDC_DVD | CDC_DVD_RAM |
                                         CDC_SELECT_DISC | CDC_SELECT_SPEED);
-               scsi_release_request(SRpnt);
                kfree(buffer);
                printk("%s: scsi-1 drive\n", cd->cdi.name);
                return;
@@ -885,7 +837,6 @@ static void get_capabilities(struct scsi_cd *cd)
                cd->device->writeable = 1;
        }
 
-       scsi_release_request(SRpnt);
        kfree(buffer);
 }
 
index 0b317800720380b9029d3863e9a993a47757a0cb..d2bcd99c272f430970bb135264d13fa81c4e8ba3 100644 (file)
@@ -33,7 +33,6 @@ typedef struct scsi_cd {
        struct scsi_device *device;
        unsigned int vendor;    /* vendor code, see sr_vendor.c         */
        unsigned long ms_offset;        /* for reading multisession-CD's        */
-       unsigned needs_sector_size:1;   /* needs to get sector size */
        unsigned use:1;         /* is this device still supportable     */
        unsigned xa_flag:1;     /* CD has XA sectors ? */
        unsigned readcd_known:1;        /* drive supports READ_CD (0xbe) */
index 82d68fdb15484520abd80d1aa603d2395a86ad6b..6e45ac3c43c5e193b146ce793feb5ad51bf6e3d4 100644 (file)
@@ -17,7 +17,7 @@
 #include <scsi/scsi_eh.h>
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_ioctl.h>
-#include <scsi/scsi_request.h>
+#include <scsi/scsi_cmnd.h>
 
 #include "sr.h"
 
@@ -84,41 +84,37 @@ static int sr_fake_playtrkind(struct cdrom_device_info *cdi, struct cdrom_ti *ti
 
 int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc)
 {
-       struct scsi_request *SRpnt;
        struct scsi_device *SDev;
-        struct request *req;
+       struct scsi_sense_hdr sshdr;
        int result, err = 0, retries = 0;
+       struct request_sense *sense = cgc->sense;
 
        SDev = cd->device;
-       SRpnt = scsi_allocate_request(SDev, GFP_KERNEL);
-        if (!SRpnt) {
-                printk(KERN_ERR "Unable to allocate SCSI request in sr_do_ioctl");
-               err = -ENOMEM;
-               goto out;
-        }
-       SRpnt->sr_data_direction = cgc->data_direction;
+
+       if (!sense) {
+               sense = kmalloc(sizeof(*sense), GFP_KERNEL);
+               if (!sense) {
+                       err = -ENOMEM;
+                       goto out;
+               }
+       }
 
       retry:
        if (!scsi_block_when_processing_errors(SDev)) {
                err = -ENODEV;
-               goto out_free;
+               goto out;
        }
 
-       scsi_wait_req(SRpnt, cgc->cmd, cgc->buffer, cgc->buflen,
-                     cgc->timeout, IOCTL_RETRIES);
-
-       req = SRpnt->sr_request;
-       if (SRpnt->sr_buffer && req->buffer && SRpnt->sr_buffer != req->buffer) {
-               memcpy(req->buffer, SRpnt->sr_buffer, SRpnt->sr_bufflen);
-               kfree(SRpnt->sr_buffer);
-               SRpnt->sr_buffer = req->buffer;
-        }
+       memset(sense, 0, sizeof(*sense));
+       result = scsi_execute(SDev, cgc->cmd, cgc->data_direction,
+                             cgc->buffer, cgc->buflen, (char *)sense,
+                             cgc->timeout, IOCTL_RETRIES, 0);
 
-       result = SRpnt->sr_result;
+       scsi_normalize_sense((char *)sense, sizeof(*sense), &sshdr);
 
        /* Minimal error checking.  Ignore cases we know about, and report the rest. */
        if (driver_byte(result) != 0) {
-               switch (SRpnt->sr_sense_buffer[2] & 0xf) {
+               switch (sshdr.sense_key) {
                case UNIT_ATTENTION:
                        SDev->changed = 1;
                        if (!cgc->quiet)
@@ -128,8 +124,8 @@ int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc)
                        err = -ENOMEDIUM;
                        break;
                case NOT_READY: /* This happens if there is no disc in drive */
-                       if (SRpnt->sr_sense_buffer[12] == 0x04 &&
-                           SRpnt->sr_sense_buffer[13] == 0x01) {
+                       if (sshdr.asc == 0x04 &&
+                           sshdr.ascq == 0x01) {
                                /* sense: Logical unit is in process of becoming ready */
                                if (!cgc->quiet)
                                        printk(KERN_INFO "%s: CDROM not ready yet.\n", cd->cdi.name);
@@ -146,37 +142,33 @@ int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc)
                        if (!cgc->quiet)
                                printk(KERN_INFO "%s: CDROM not ready.  Make sure there is a disc in the drive.\n", cd->cdi.name);
 #ifdef DEBUG
-                       scsi_print_req_sense("sr", SRpnt);
+                       scsi_print_sense_hdr("sr", &sshdr);
 #endif
                        err = -ENOMEDIUM;
                        break;
                case ILLEGAL_REQUEST:
                        err = -EIO;
-                       if (SRpnt->sr_sense_buffer[12] == 0x20 &&
-                           SRpnt->sr_sense_buffer[13] == 0x00)
+                       if (sshdr.asc == 0x20 &&
+                           sshdr.ascq == 0x00)
                                /* sense: Invalid command operation code */
                                err = -EDRIVE_CANT_DO_THIS;
 #ifdef DEBUG
                        __scsi_print_command(cgc->cmd);
-                       scsi_print_req_sense("sr", SRpnt);
+                       scsi_print_sense_hdr("sr", &sshdr);
 #endif
                        break;
                default:
                        printk(KERN_ERR "%s: CDROM (ioctl) error, command: ", cd->cdi.name);
                        __scsi_print_command(cgc->cmd);
-                       scsi_print_req_sense("sr", SRpnt);
+                       scsi_print_sense_hdr("sr", &sshdr);
                        err = -EIO;
                }
        }
 
-       if (cgc->sense)
-               memcpy(cgc->sense, SRpnt->sr_sense_buffer, sizeof(*cgc->sense));
-
        /* Wake up a process waiting for device */
-      out_free:
-       scsi_release_request(SRpnt);
-       SRpnt = NULL;
       out:
+       if (!cgc->sense)
+               kfree(sense);
        cgc->stat = err;
        return err;
 }
index 0a7839db57529c700e71dd1699eb45f273d44ccb..a93308ae97362b3fa2d0b2a76979ffca3c5da630 100644 (file)
@@ -17,7 +17,7 @@
    Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
  */
 
-static char *verstr = "20050501";
+static char *verstr = "20050830";
 
 #include <linux/module.h>
 
@@ -219,6 +219,12 @@ static int switch_partition(struct scsi_tape *);
 
 static int st_int_ioctl(struct scsi_tape *, unsigned int, unsigned long);
 
+static void scsi_tape_release(struct kref *);
+
+#define to_scsi_tape(obj) container_of(obj, struct scsi_tape, kref)
+
+static DECLARE_MUTEX(st_ref_sem);
+
 \f
 #include "osst_detect.h"
 #ifndef SIGS_FROM_OSST
@@ -230,6 +236,46 @@ static int st_int_ioctl(struct scsi_tape *, unsigned int, unsigned long);
        {"OnStream", "FW-", "", "osst"}
 #endif
 
+static struct scsi_tape *scsi_tape_get(int dev)
+{
+       struct scsi_tape *STp = NULL;
+
+       down(&st_ref_sem);
+       write_lock(&st_dev_arr_lock);
+
+       if (dev < st_dev_max && scsi_tapes != NULL)
+               STp = scsi_tapes[dev];
+       if (!STp) goto out;
+
+       kref_get(&STp->kref);
+
+       if (!STp->device)
+               goto out_put;
+
+       if (scsi_device_get(STp->device))
+               goto out_put;
+
+       goto out;
+
+out_put:
+       kref_put(&STp->kref, scsi_tape_release);
+       STp = NULL;
+out:
+       write_unlock(&st_dev_arr_lock);
+       up(&st_ref_sem);
+       return STp;
+}
+
+static void scsi_tape_put(struct scsi_tape *STp)
+{
+       struct scsi_device *sdev = STp->device;
+
+       down(&st_ref_sem);
+       kref_put(&STp->kref, scsi_tape_release);
+       scsi_device_put(sdev);
+       up(&st_ref_sem);
+}
+
 struct st_reject_data {
        char *vendor;
        char *model;
@@ -311,7 +357,7 @@ static int st_chk_result(struct scsi_tape *STp, struct scsi_request * SRpnt)
                return 0;
 
        cmdstatp = &STp->buffer->cmdstat;
-       st_analyze_sense(STp->buffer->last_SRpnt, cmdstatp);
+       st_analyze_sense(SRpnt, cmdstatp);
 
        if (cmdstatp->have_sense)
                scode = STp->buffer->cmdstat.sense_hdr.sense_key;
@@ -399,10 +445,10 @@ static void st_sleep_done(struct scsi_cmnd * SCpnt)
 
        (STp->buffer)->cmdstat.midlevel_result = SCpnt->result;
        SCpnt->request->rq_status = RQ_SCSI_DONE;
-       (STp->buffer)->last_SRpnt = SCpnt->sc_request;
        DEB( STp->write_pending = 0; )
 
-       complete(SCpnt->request->waiting);
+       if (SCpnt->request->waiting)
+               complete(SCpnt->request->waiting);
 }
 
 /* Do the scsi command. Waits until command performed if do_wait is true.
@@ -412,8 +458,20 @@ static struct scsi_request *
 st_do_scsi(struct scsi_request * SRpnt, struct scsi_tape * STp, unsigned char *cmd,
           int bytes, int direction, int timeout, int retries, int do_wait)
 {
+       struct completion *waiting;
        unsigned char *bp;
 
+       /* if async, make sure there's no command outstanding */
+       if (!do_wait && ((STp->buffer)->last_SRpnt)) {
+               printk(KERN_ERR "%s: Async command already active.\n",
+                      tape_name(STp));
+               if (signal_pending(current))
+                       (STp->buffer)->syscall_result = (-EINTR);
+               else
+                       (STp->buffer)->syscall_result = (-EBUSY);
+               return NULL;
+       }
+
        if (SRpnt == NULL) {
                SRpnt = scsi_allocate_request(STp->device, GFP_ATOMIC);
                if (SRpnt == NULL) {
@@ -427,7 +485,13 @@ st_do_scsi(struct scsi_request * SRpnt, struct scsi_tape * STp, unsigned char *c
                }
        }
 
-       init_completion(&STp->wait);
+       /* If async IO, set last_SRpnt. This ptr tells write_behind_check
+          which IO is outstanding. It's nulled out when the IO completes. */
+       if (!do_wait)
+               (STp->buffer)->last_SRpnt = SRpnt;
+
+       waiting = &STp->wait;
+       init_completion(waiting);
        SRpnt->sr_use_sg = STp->buffer->do_dio || (bytes > (STp->buffer)->frp[0].length);
        if (SRpnt->sr_use_sg) {
                if (!STp->buffer->do_dio)
@@ -438,17 +502,20 @@ st_do_scsi(struct scsi_request * SRpnt, struct scsi_tape * STp, unsigned char *c
                bp = (STp->buffer)->b_data;
        SRpnt->sr_data_direction = direction;
        SRpnt->sr_cmd_len = 0;
-       SRpnt->sr_request->waiting = &(STp->wait);
+       SRpnt->sr_request->waiting = waiting;
        SRpnt->sr_request->rq_status = RQ_SCSI_BUSY;
        SRpnt->sr_request->rq_disk = STp->disk;
+       SRpnt->sr_request->end_io = blk_end_sync_rq;
        STp->buffer->cmdstat.have_sense = 0;
 
        scsi_do_req(SRpnt, (void *) cmd, bp, bytes,
                    st_sleep_done, timeout, retries);
 
        if (do_wait) {
-               wait_for_completion(SRpnt->sr_request->waiting);
+               wait_for_completion(waiting);
                SRpnt->sr_request->waiting = NULL;
+               if (SRpnt->sr_request->rq_status != RQ_SCSI_DONE)
+                       SRpnt->sr_result |= (DRIVER_ERROR << 24);
                (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
        }
        return SRpnt;
@@ -465,6 +532,7 @@ static int write_behind_check(struct scsi_tape * STp)
        struct st_buffer *STbuffer;
        struct st_partstat *STps;
        struct st_cmdstatus *cmdstatp;
+       struct scsi_request *SRpnt;
 
        STbuffer = STp->buffer;
        if (!STbuffer->writing)
@@ -478,10 +546,14 @@ static int write_behind_check(struct scsi_tape * STp)
         ) /* end DEB */
 
        wait_for_completion(&(STp->wait));
-       (STp->buffer)->last_SRpnt->sr_request->waiting = NULL;
+       SRpnt = STbuffer->last_SRpnt;
+       STbuffer->last_SRpnt = NULL;
+       SRpnt->sr_request->waiting = NULL;
+       if (SRpnt->sr_request->rq_status != RQ_SCSI_DONE)
+               SRpnt->sr_result |= (DRIVER_ERROR << 24);
 
-       (STp->buffer)->syscall_result = st_chk_result(STp, (STp->buffer)->last_SRpnt);
-       scsi_release_request((STp->buffer)->last_SRpnt);
+       (STp->buffer)->syscall_result = st_chk_result(STp, SRpnt);
+       scsi_release_request(SRpnt);
 
        STbuffer->buffer_bytes -= STbuffer->writing;
        STps = &(STp->ps[STp->partition]);
@@ -1055,25 +1127,20 @@ static int st_open(struct inode *inode, struct file *filp)
         */
        filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);
 
+       if (!(STp = scsi_tape_get(dev)))
+               return -ENXIO;
+
        write_lock(&st_dev_arr_lock);
-       if (dev >= st_dev_max || scsi_tapes == NULL ||
-           ((STp = scsi_tapes[dev]) == NULL)) {
-               write_unlock(&st_dev_arr_lock);
-               return (-ENXIO);
-       }
        filp->private_data = STp;
        name = tape_name(STp);
 
        if (STp->in_use) {
                write_unlock(&st_dev_arr_lock);
+               scsi_tape_put(STp);
                DEB( printk(ST_DEB_MSG "%s: Device already in use.\n", name); )
                return (-EBUSY);
        }
 
-       if(scsi_device_get(STp->device)) {
-               write_unlock(&st_dev_arr_lock);
-               return (-ENXIO);
-       }
        STp->in_use = 1;
        write_unlock(&st_dev_arr_lock);
        STp->rew_at_close = STp->autorew_dev = (iminor(inode) & 0x80) == 0;
@@ -1118,7 +1185,7 @@ static int st_open(struct inode *inode, struct file *filp)
  err_out:
        normalize_buffer(STp->buffer);
        STp->in_use = 0;
-       scsi_device_put(STp->device);
+       scsi_tape_put(STp);
        return retval;
 
 }
@@ -1250,7 +1317,7 @@ static int st_release(struct inode *inode, struct file *filp)
        write_lock(&st_dev_arr_lock);
        STp->in_use = 0;
        write_unlock(&st_dev_arr_lock);
-       scsi_device_put(STp->device);
+       scsi_tape_put(STp);
 
        return result;
 }
@@ -3887,6 +3954,7 @@ static int st_probe(struct device *dev)
                goto out_put_disk;
        }
        memset(tpnt, 0, sizeof(struct scsi_tape));
+       kref_init(&tpnt->kref);
        tpnt->disk = disk;
        sprintf(disk->disk_name, "st%d", i);
        disk->private_data = &tpnt->driver;
@@ -3902,6 +3970,7 @@ static int st_probe(struct device *dev)
                tpnt->tape_type = MT_ISSCSI2;
 
        tpnt->buffer = buffer;
+       tpnt->buffer->last_SRpnt = NULL;
 
        tpnt->inited = 0;
        tpnt->dirty = 0;
@@ -4076,15 +4145,10 @@ static int st_remove(struct device *dev)
                                        tpnt->modes[mode].cdevs[j] = NULL;
                                }
                        }
-                       tpnt->device = NULL;
 
-                       if (tpnt->buffer) {
-                               tpnt->buffer->orig_frp_segs = 0;
-                               normalize_buffer(tpnt->buffer);
-                               kfree(tpnt->buffer);
-                       }
-                       put_disk(tpnt->disk);
-                       kfree(tpnt);
+                       down(&st_ref_sem);
+                       kref_put(&tpnt->kref, scsi_tape_release);
+                       up(&st_ref_sem);
                        return 0;
                }
        }
@@ -4093,6 +4157,34 @@ static int st_remove(struct device *dev)
        return 0;
 }
 
+/**
+ *      scsi_tape_release - Called to free the Scsi_Tape structure
+ *      @kref: pointer to embedded kref
+ *
+ *      st_ref_sem must be held entering this routine.  Because it is
+ *      called on last put, you should always use the scsi_tape_get()
+ *      scsi_tape_put() helpers which manipulate the semaphore directly
+ *      and never do a direct kref_put().
+ **/
+static void scsi_tape_release(struct kref *kref)
+{
+       struct scsi_tape *tpnt = to_scsi_tape(kref);
+       struct gendisk *disk = tpnt->disk;
+
+       tpnt->device = NULL;
+
+       if (tpnt->buffer) {
+               tpnt->buffer->orig_frp_segs = 0;
+               normalize_buffer(tpnt->buffer);
+               kfree(tpnt->buffer);
+       }
+
+       disk->private_data = NULL;
+       put_disk(disk);
+       kfree(tpnt);
+       return;
+}
+
 static void st_intr(struct scsi_cmnd *SCpnt)
 {
        scsi_io_completion(SCpnt, (SCpnt->result ? 0: SCpnt->bufflen), 1);
@@ -4348,12 +4440,12 @@ static int st_map_user_pages(struct scatterlist *sgl, const unsigned int max_pag
 static int sgl_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages, 
                              unsigned long uaddr, size_t count, int rw)
 {
+       unsigned long end = (uaddr + count + PAGE_SIZE - 1) >> PAGE_SHIFT;
+       unsigned long start = uaddr >> PAGE_SHIFT;
+       const int nr_pages = end - start;
        int res, i, j;
-       unsigned int nr_pages;
        struct page **pages;
 
-       nr_pages = ((uaddr & ~PAGE_MASK) + count + ~PAGE_MASK) >> PAGE_SHIFT;
-
        /* User attempted Overflow! */
        if ((uaddr + count) < uaddr)
                return -EINVAL;
index 061da111398e98cbe097c3845c6686d3be7f9cad..790acac160bcb33b8bfb2426b2e147f09814563e 100644 (file)
@@ -3,7 +3,7 @@
 #define _ST_H
 
 #include <linux/completion.h>
-
+#include <linux/kref.h>
 
 /* Descriptor for analyzed sense data */
 struct st_cmdstatus {
@@ -156,6 +156,7 @@ struct scsi_tape {
        unsigned char last_sense[16];
 #endif
        struct gendisk *disk;
+       struct kref     kref;
 };
 
 /* Bit masks for use_pf */
index 9097f2f7b12a6bb5a1dbfb88a79c6a40ed14051b..2efb317153ce19a8ca7d974c3b18b03bddb62c60 100644 (file)
@@ -40,7 +40,6 @@
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/system.h>
-#include <asm/segment.h>
 #include <asm/delay.h>
 #include <asm/uaccess.h>
 
index b116122e569ab3592b5e3abaa23f24d83c39e9d5..170c9d2a749cc1ce8f2c3820dd603435bbcbf7ad 100644 (file)
@@ -2474,8 +2474,7 @@ static struct tty_operations rs_360_ops = {
        .tiocmset = rs_360_tiocmset,
 };
 
-/* int __init rs_360_init(void) */
-int rs_360_init(void)
+static int __init rs_360_init(void)
 {
        struct serial_state * state;
        ser_info_t      *info;
@@ -2827,10 +2826,7 @@ int rs_360_init(void)
 
        return 0;
 }
-
-
-
-
+module_init(rs_360_init);
 
 /* This must always be called before the rs_360_init() function, otherwise
  * it blows away the port control information.
index 6b9ead288517f70b1b306f7f5f0a14466d92d356..a802bdce6e5dd02a044f343cddc4dd1a71fe5308 100644 (file)
@@ -47,18 +47,30 @@ static acpi_status acpi_serial_port(struct uart_port *port,
 static acpi_status acpi_serial_ext_irq(struct uart_port *port,
                                       struct acpi_resource_ext_irq *ext_irq)
 {
-       if (ext_irq->number_of_interrupts > 0)
-               port->irq = acpi_register_gsi(ext_irq->interrupts[0],
+       int rc;
+
+       if (ext_irq->number_of_interrupts > 0) {
+               rc = acpi_register_gsi(ext_irq->interrupts[0],
                           ext_irq->edge_level, ext_irq->active_high_low);
+               if (rc < 0)
+                       return AE_ERROR;
+               port->irq = rc;
+       }
        return AE_OK;
 }
 
 static acpi_status acpi_serial_irq(struct uart_port *port,
                                   struct acpi_resource_irq *irq)
 {
-       if (irq->number_of_interrupts > 0)
-               port->irq = acpi_register_gsi(irq->interrupts[0],
+       int rc;
+
+       if (irq->number_of_interrupts > 0) {
+               rc = acpi_register_gsi(irq->interrupts[0],
                           irq->edge_level, irq->active_high_low);
+               if (rc < 0)
+                       return AE_ERROR;
+               port->irq = rc;
+       }
        return AE_OK;
 }
 
index e39818a34a0754a824df7bb2e3e46878704e18cd..b745a1b9e835258b947493bbb8f8e6ebdb3829e0 100644 (file)
@@ -80,7 +80,7 @@ config SERIAL_8250_CS
 config SERIAL_8250_ACPI
        bool "8250/16550 device discovery via ACPI namespace"
        default y if IA64
-       depends on ACPI_BUS && SERIAL_8250
+       depends on ACPI && SERIAL_8250
        ---help---
          If you wish to enable serial port discovery via the ACPI
          namespace, say Y here.  If unsure, say N.
index 5690594b257bb4f7aabc64b9cc82ea41e1a6de1b..40d3e7139cfea2518fff6c2a758e0bdc4c5cd53d 100644 (file)
@@ -446,7 +446,6 @@ static char *serial_version = "$Revision: 1.25 $";
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/system.h>
-#include <asm/segment.h>
 #include <asm/bitops.h>
 #include <linux/delay.h>
 
index 79f8df4d66b799e06625ea9218371eacd268224b..eb31125c6a30f84de2416f80c939bc1eae412fc8 100644 (file)
@@ -56,7 +56,6 @@
 #include <linux/bitops.h>
 
 #include <asm/system.h>
-#include <asm/segment.h>
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/uaccess.h>
index 8c40167778dea949e077954a10445736f9f6ea21..43b03c55f453859a2902c7dc50d72f741b508e20 100644 (file)
@@ -40,7 +40,6 @@
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/system.h>
-#include <asm/segment.h>
 #include <asm/semaphore.h>
 #include <asm/delay.h>
 #include <asm/coldfire.h>
index 32f808d157a15ee8a57f3a73645cc5024e054c90..8302376800c07da15b3c905a0b50baa3a8f9407b 100644 (file)
@@ -207,7 +207,7 @@ static void lh7a40xuart_tx_chars (struct uart_port* port)
                return;
        }
        if (uart_circ_empty (xmit) || uart_tx_stopped (port)) {
-               lh7a40xuart_stop_tx (port, 0);
+               lh7a40xuart_stop_tx (port);
                return;
        }
 
@@ -229,7 +229,7 @@ static void lh7a40xuart_tx_chars (struct uart_port* port)
                uart_write_wakeup (port);
 
        if (uart_circ_empty (xmit))
-               lh7a40xuart_stop_tx (port, 0);
+               lh7a40xuart_stop_tx (port);
 }
 
 static void lh7a40xuart_modem_status (struct uart_port* port)
index bb1db19598549ee10322f9d7ff0562f4f11cad2c..c466739428b2c501eb99c809f02226f55c7c9a76 100644 (file)
@@ -960,7 +960,7 @@ int usbatm_usb_probe(struct usb_interface *intf, const struct usb_device_id *id,
                        intf->altsetting->desc.bInterfaceNumber);
 
        /* instance init */
-       instance = kcalloc(1, sizeof(*instance) + sizeof(struct urb *) * (num_rcv_urbs + num_snd_urbs), GFP_KERNEL);
+       instance = kzalloc(sizeof(*instance) + sizeof(struct urb *) * (num_rcv_urbs + num_snd_urbs), GFP_KERNEL);
        if (!instance) {
                dev_dbg(dev, "%s: no memory for instance data!\n", __func__);
                return -ENOMEM;
index 9f44e83c6a6903f3dfb02a89088d1667cbe19812..12ecdb03ee5f20afd3bcef220e8aded0bb30857c 100644 (file)
@@ -1669,7 +1669,7 @@ struct usb_hcd *usb_create_hcd (const struct hc_driver *driver,
 {
        struct usb_hcd *hcd;
 
-       hcd = kcalloc(1, sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL);
+       hcd = kzalloc(sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL);
        if (!hcd) {
                dev_dbg (dev, "hcd alloc failed\n");
                return NULL;
index b56f25864ed60084028e174e035c552bedc6a331..4c972b57c7c3a5ac1fd026269698f83375f4de1a 100644 (file)
@@ -638,7 +638,7 @@ iso_stream_alloc (unsigned mem_flags)
 {
        struct ehci_iso_stream *stream;
 
-       stream = kcalloc(1, sizeof *stream, mem_flags);
+       stream = kzalloc(sizeof *stream, mem_flags);
        if (likely (stream != NULL)) {
                INIT_LIST_HEAD(&stream->td_list);
                INIT_LIST_HEAD(&stream->free_list);
index 76cb496c5836ca3f222cbe688bf67fe2d6a2f1f7..75128c3718008a698cb0695c3eba0a0589bb2928 100644 (file)
@@ -717,7 +717,7 @@ static int isp116x_urb_enqueue(struct usb_hcd *hcd,
        }
        /* avoid all allocations within spinlocks: request or endpoint */
        if (!hep->hcpriv) {
-               ep = kcalloc(1, sizeof *ep, mem_flags);
+               ep = kzalloc(sizeof *ep, mem_flags);
                if (!ep)
                        return -ENOMEM;
        }
index 80eaf659c1984b0921acd9b956600bcdc0a5b348..d2a1fd40dfcb846e148faef3e9102142c2ba7cc6 100644 (file)
@@ -835,7 +835,7 @@ static int sl811h_urb_enqueue(
 
        /* avoid all allocations within spinlocks */
        if (!hep->hcpriv)
-               ep = kcalloc(1, sizeof *ep, mem_flags);
+               ep = kzalloc(sizeof *ep, mem_flags);
 
        spin_lock_irqsave(&sl811->lock, flags);
 
index 13532f3e3efc4325ea1c4b516d2045fad3cfd0d4..74f8760d7c07c0c689c7fa6fe5e0b50665b670c3 100644 (file)
@@ -152,7 +152,7 @@ static int usb_acecad_probe(struct usb_interface *intf, const struct usb_device_
        pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
        maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
 
-       acecad = kcalloc(1, sizeof(struct usb_acecad), GFP_KERNEL);
+       acecad = kzalloc(sizeof(struct usb_acecad), GFP_KERNEL);
        if (!acecad)
                return -ENOMEM;
 
index 0dc439f10823a90f1d13bbe4d7658f4c441cf3f3..becb87efb869f6800b8c7829a5dcc71d0fbd8968 100644 (file)
@@ -166,7 +166,7 @@ static int itmtouch_probe(struct usb_interface *intf, const struct usb_device_id
        interface = intf->cur_altsetting;
        endpoint = &interface->endpoint[0].desc;
 
-       if (!(itmtouch = kcalloc(1, sizeof(struct itmtouch_dev), GFP_KERNEL))) {
+       if (!(itmtouch = kzalloc(sizeof(struct itmtouch_dev), GFP_KERNEL))) {
                err("%s - Out of memory.", __FUNCTION__);
                return -ENOMEM;
        }
index 25696386347812769419a5f2a870845c0f836b8d..acc71ec560e9578dec1f34dd88dc6d90b523b8f3 100644 (file)
@@ -263,7 +263,7 @@ int hid_pid_init(struct hid_device *hid)
        struct hid_ff_pid *private;
        struct hid_input *hidinput = list_entry(&hid->inputs, struct hid_input, list);
 
-       private = hid->ff_private = kcalloc(1, sizeof(struct hid_ff_pid), GFP_KERNEL);
+       private = hid->ff_private = kzalloc(sizeof(struct hid_ff_pid), GFP_KERNEL);
        if (!private)
                return -ENOMEM;
 
index 9aae884475beab045f67487866e085ad13539224..4af321fae3901a42c0e9b1473fb138d5ebfb696f 100644 (file)
@@ -3,3 +3,4 @@
 obj-$(CONFIG_LCD_CLASS_DEVICE)     += lcd.o
 obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o
 obj-$(CONFIG_BACKLIGHT_CORGI)  += corgi_bl.o
+obj-$(CONFIG_SHARP_LOCOMO)     += locomolcd.o
diff --git a/drivers/video/backlight/locomolcd.c b/drivers/video/backlight/locomolcd.c
new file mode 100644 (file)
index 0000000..ada6e75
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * Backlight control code for Sharp Zaurus SL-5500
+ *
+ * Copyright 2005 John Lenz <lenz@cs.wisc.edu>
+ * Maintainer: Pavel Machek <pavel@suse.cz> (unless John wants to :-)
+ * GPL v2
+ *
+ * This driver assumes single CPU. That's okay, because collie is
+ * slightly old hardware, and noone is going to retrofit second CPU to
+ * old PDA.
+ */
+
+/* LCD power functions */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/interrupt.h>
+
+#include <asm/hardware/locomo.h>
+#include <asm/irq.h>
+
+#ifdef CONFIG_SA1100_COLLIE
+#include <asm/arch/collie.h>
+#else
+#include <asm/arch/poodle.h>
+#endif
+
+extern void (*sa1100fb_lcd_power)(int on);
+
+static struct locomo_dev *locomolcd_dev;
+
+static void locomolcd_on(int comadj)
+{
+       locomo_gpio_set_dir(locomolcd_dev, LOCOMO_GPIO_LCD_VSHA_ON, 0);
+       locomo_gpio_write(locomolcd_dev, LOCOMO_GPIO_LCD_VSHA_ON, 1);
+       mdelay(2);
+
+       locomo_gpio_set_dir(locomolcd_dev, LOCOMO_GPIO_LCD_VSHD_ON, 0);
+       locomo_gpio_write(locomolcd_dev, LOCOMO_GPIO_LCD_VSHD_ON, 1);
+       mdelay(2);
+
+       locomo_m62332_senddata(locomolcd_dev, comadj, 0);
+       mdelay(5);
+
+       locomo_gpio_set_dir(locomolcd_dev, LOCOMO_GPIO_LCD_VEE_ON, 0);
+       locomo_gpio_write(locomolcd_dev, LOCOMO_GPIO_LCD_VEE_ON, 1);
+       mdelay(10);
+
+       /* TFTCRST | CPSOUT=0 | CPSEN */
+       locomo_writel(0x01, locomolcd_dev->mapbase + LOCOMO_TC);
+
+       /* Set CPSD */
+       locomo_writel(6, locomolcd_dev->mapbase + LOCOMO_CPSD);
+
+       /* TFTCRST | CPSOUT=0 | CPSEN */
+       locomo_writel((0x04 | 0x01), locomolcd_dev->mapbase + LOCOMO_TC);
+       mdelay(10);
+
+       locomo_gpio_set_dir(locomolcd_dev, LOCOMO_GPIO_LCD_MOD, 0);
+       locomo_gpio_write(locomolcd_dev, LOCOMO_GPIO_LCD_MOD, 1);
+}
+
+static void locomolcd_off(int comadj)
+{
+       /* TFTCRST=1 | CPSOUT=1 | CPSEN = 0 */
+       locomo_writel(0x06, locomolcd_dev->mapbase + LOCOMO_TC);
+       mdelay(1);
+
+       locomo_gpio_write(locomolcd_dev, LOCOMO_GPIO_LCD_VSHA_ON, 0);
+       mdelay(110);
+
+       locomo_gpio_write(locomolcd_dev, LOCOMO_GPIO_LCD_VEE_ON, 0);
+       mdelay(700);
+
+       /* TFTCRST=0 | CPSOUT=0 | CPSEN = 0 */
+       locomo_writel(0, locomolcd_dev->mapbase + LOCOMO_TC);
+       locomo_gpio_write(locomolcd_dev, LOCOMO_GPIO_LCD_MOD, 0);
+       locomo_gpio_write(locomolcd_dev, LOCOMO_GPIO_LCD_VSHD_ON, 0);
+}
+
+void locomolcd_power(int on)
+{
+       int comadj = 118;
+       unsigned long flags;
+
+       local_irq_save(flags);
+
+       if (!locomolcd_dev) {
+               local_irq_restore(flags);
+               return;
+       }
+
+       /* read comadj */
+#ifdef CONFIG_MACH_POODLE
+       comadj = 118;
+#else
+       comadj = 128;
+#endif
+
+       if (on)
+               locomolcd_on(comadj);
+       else
+               locomolcd_off(comadj);
+
+       local_irq_restore(flags);
+}
+EXPORT_SYMBOL(locomolcd_power);
+
+static int poodle_lcd_probe(struct locomo_dev *dev)
+{
+       unsigned long flags;
+
+       local_irq_save(flags);
+       locomolcd_dev = dev;
+
+       /* the poodle_lcd_power function is called for the first time
+        * from fs_initcall, which is before locomo is activated.
+        * We need to recall poodle_lcd_power here*/
+#ifdef CONFIG_MACH_POODLE
+       locomolcd_power(1);
+#endif
+       local_irq_restore(flags);
+       return 0;
+}
+
+static int poodle_lcd_remove(struct locomo_dev *dev)
+{
+       unsigned long flags;
+       local_irq_save(flags);
+       locomolcd_dev = NULL;
+       local_irq_restore(flags);
+       return 0;
+}
+
+static struct locomo_driver poodle_lcd_driver = {
+       .drv = {
+               .name = "locomo-backlight",
+       },
+       .devid  = LOCOMO_DEVID_BACKLIGHT,
+       .probe  = poodle_lcd_probe,
+       .remove = poodle_lcd_remove,
+};
+
+static int __init poodle_lcd_init(void)
+{
+       int ret = locomo_driver_register(&poodle_lcd_driver);
+       if (ret) return ret;
+
+#ifdef CONFIG_SA1100_COLLIE
+       sa1100fb_lcd_power = locomolcd_power;
+#endif
+       return 0;
+}
+device_initcall(poodle_lcd_init);
+
index 71b69da0c40d761b36f1891f02b2448a1caac7de..162012bb9264edd2bb58af8b4d9b609e4b940697 100644 (file)
@@ -21,7 +21,6 @@
 
 #include <asm/uaccess.h>
 #include <asm/setup.h>
-#include <asm/segment.h>
 #include <asm/system.h>
 #include <asm/q40_master.h>
 #include <linux/fb.h>
index adcda697ea60d537accf3c9f9fa5e93f6695b856..0030c071da8fd5409ebb1e3276ccb09fec4bbcd3 100644 (file)
@@ -5,9 +5,15 @@
  *
  * Copyright (C) 2002, ATI Corp.
  * Copyright (C) 2004-2005 Richard Purdie
+ * Copyright (c) 2005 Ian Molton
  *
  * Rewritten for 2.6 by Richard Purdie <rpurdie@rpsys.net>
  *
+ * Generic platform support by Ian Molton <spyro@f2s.com>
+ * and Richard Purdie <rpurdie@rpsys.net>
+ *
+ * w32xx support by Ian Molton
+ *
  * 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.
@@ -21,7 +27,7 @@
 #include <linux/mm.h>
 #include <linux/device.h>
 #include <linux/string.h>
-#include <linux/proc_fs.h>
+#include <linux/vmalloc.h>
 #include <asm/io.h>
 #include <asm/uaccess.h>
 #include <video/w100fb.h>
 /*
  * Prototypes
  */
-static void w100fb_save_buffer(void);
-static void w100fb_clear_buffer(void);
-static void w100fb_restore_buffer(void);
-static void w100fb_clear_screen(u32 mode, long int offset);
-static void w100_resume(void);
 static void w100_suspend(u32 mode);
-static void w100_init_qvga_rotation(u16 deg);
-static void w100_init_vga_rotation(u16 deg);
 static void w100_vsync(void);
-static void w100_init_sharp_lcd(u32 mode);
-static void w100_pwm_setup(void);
-static void w100_InitExtMem(u32 mode);
-static void w100_hw_init(void);
-static u16 w100_set_fastsysclk(u16 Freq);
-
-static void lcdtg_hw_init(u32 mode);
-static void lcdtg_lcd_change(u32 mode);
-static void lcdtg_resume(void);
-static void lcdtg_suspend(void);
-
-
-/* Register offsets & lengths */
-#define REMAPPED_FB_LEN   0x15ffff
-
-#define BITS_PER_PIXEL    16
+static void w100_hw_init(struct w100fb_par*);
+static void w100_pwm_setup(struct w100fb_par*);
+static void w100_init_clocks(struct w100fb_par*);
+static void w100_setup_memory(struct w100fb_par*);
+static void w100_init_lcd(struct w100fb_par*);
+static void w100_set_dispregs(struct w100fb_par*);
+static void w100_update_enable(void);
+static void w100_update_disable(void);
+static void calc_hsync(struct w100fb_par *par);
+struct w100_pll_info *w100_get_xtal_table(unsigned int freq);
 
 /* Pseudo palette size */
 #define MAX_PALETTES      16
 
-/* for resolution change */
-#define LCD_MODE_INIT (-1)
-#define LCD_MODE_480    0
-#define LCD_MODE_320    1
-#define LCD_MODE_240    2
-#define LCD_MODE_640    3
-
-#define LCD_SHARP_QVGA 0
-#define LCD_SHARP_VGA  1
-
-#define LCD_MODE_PORTRAIT      0
-#define LCD_MODE_LANDSCAPE     1
-
 #define W100_SUSPEND_EXTMEM 0
 #define W100_SUSPEND_ALL    1
 
-/* General frame buffer data structures */
-struct w100fb_par {
-       u32 xres;
-       u32 yres;
-       int fastsysclk_mode;
-       int lcdMode;
-       int rotation_flag;
-       int blanking_flag;
-       int comadj;
-       int phadadj;
-};
-
-static struct w100fb_par *current_par;
+#define BITS_PER_PIXEL    16
 
 /* Remapped addresses for base cfg, memmapped regs and the frame buffer itself */
 static void *remapped_base;
 static void *remapped_regs;
 static void *remapped_fbuf;
 
-/* External Function */
-static void(*w100fb_ssp_send)(u8 adrs, u8 data);
+#define REMAPPED_FB_LEN   0x15ffff
+
+/* This is the offset in the w100's address space we map the current
+   framebuffer memory to. We use the position of external memory as
+   we can remap internal memory to there if external isn't present. */
+#define W100_FB_BASE MEM_EXT_BASE_VALUE
+
 
 /*
  * Sysfs functions
  */
-
-static ssize_t rotation_show(struct device *dev, struct device_attribute *attr, char *buf)
+static ssize_t flip_show(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct fb_info *info = dev_get_drvdata(dev);
        struct w100fb_par *par=info->par;
 
-       return sprintf(buf, "%d\n",par->rotation_flag);
+       return sprintf(buf, "%d\n",par->flip);
 }
 
-static ssize_t rotation_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
+static ssize_t flip_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
-       unsigned int rotate;
+       unsigned int flip;
        struct fb_info *info = dev_get_drvdata(dev);
        struct w100fb_par *par=info->par;
 
-       rotate = simple_strtoul(buf, NULL, 10);
+       flip = simple_strtoul(buf, NULL, 10);
+
+       if (flip > 0)
+               par->flip = 1;
+       else
+               par->flip = 0;
 
-       if (rotate > 0) par->rotation_flag = 1;
-       else par->rotation_flag = 0;
+       w100_update_disable();
+       w100_set_dispregs(par);
+       w100_update_enable();
 
-       if (par->lcdMode == LCD_MODE_320)
-               w100_init_qvga_rotation(par->rotation_flag ? 270 : 90);
-       else if (par->lcdMode == LCD_MODE_240)
-               w100_init_qvga_rotation(par->rotation_flag ? 180 : 0);
-       else if (par->lcdMode == LCD_MODE_640)
-               w100_init_vga_rotation(par->rotation_flag ? 270 : 90);
-       else if (par->lcdMode == LCD_MODE_480)
-               w100_init_vga_rotation(par->rotation_flag ? 180 : 0);
+       calc_hsync(par);
 
        return count;
 }
 
-static DEVICE_ATTR(rotation, 0644, rotation_show, rotation_store);
+static DEVICE_ATTR(flip, 0644, flip_show, flip_store);
 
 static ssize_t w100fb_reg_read(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
-       unsigned long param;
-       unsigned long regs;
+       unsigned long regs, param;
        regs = simple_strtoul(buf, NULL, 16);
        param = readl(remapped_regs + regs);
        printk("Read Register 0x%08lX: 0x%08lX\n", regs, param);
@@ -148,8 +118,7 @@ static DEVICE_ATTR(reg_read, 0200, NULL, w100fb_reg_read);
 
 static ssize_t w100fb_reg_write(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
-       unsigned long regs;
-       unsigned long param;
+       unsigned long regs, param;
        sscanf(buf, "%lx %lx", &regs, &param);
 
        if (regs <= 0x2000) {
@@ -163,54 +132,56 @@ static ssize_t w100fb_reg_write(struct device *dev, struct device_attribute *att
 static DEVICE_ATTR(reg_write, 0200, NULL, w100fb_reg_write);
 
 
-static ssize_t fastsysclk_show(struct device *dev, struct device_attribute *attr, char *buf)
+static ssize_t fastpllclk_show(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct fb_info *info = dev_get_drvdata(dev);
        struct w100fb_par *par=info->par;
 
-       return sprintf(buf, "%d\n",par->fastsysclk_mode);
+       return sprintf(buf, "%d\n",par->fastpll_mode);
 }
 
-static ssize_t fastsysclk_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
+static ssize_t fastpllclk_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 {
-       int param;
        struct fb_info *info = dev_get_drvdata(dev);
        struct w100fb_par *par=info->par;
 
-       param = simple_strtoul(buf, NULL, 10);
-
-       if (param == 75) {
-               printk("Set fastsysclk %d\n", param);
-               par->fastsysclk_mode = param;
-               w100_set_fastsysclk(par->fastsysclk_mode);
-       } else if (param == 100) {
-               printk("Set fastsysclk %d\n", param);
-               par->fastsysclk_mode = param;
-               w100_set_fastsysclk(par->fastsysclk_mode);
+       if (simple_strtoul(buf, NULL, 10) > 0) {
+               par->fastpll_mode=1;
+               printk("w100fb: Using fast system clock (if possible)\n");
+       } else {
+               par->fastpll_mode=0;
+               printk("w100fb: Using normal system clock\n");
        }
+
+       w100_init_clocks(par);
+       calc_hsync(par);
+
        return count;
 }
 
-static DEVICE_ATTR(fastsysclk, 0644, fastsysclk_show, fastsysclk_store);
+static DEVICE_ATTR(fastpllclk, 0644, fastpllclk_show, fastpllclk_store);
 
 /*
- * The touchscreen on this device needs certain information
- * from the video driver to function correctly. We export it here.
+ * Some touchscreens need hsync information from the video driver to
+ * function correctly. We export it here.
  */
-int w100fb_get_xres(void) {
-       return current_par->xres;
-}
+unsigned long w100fb_get_hsynclen(struct device *dev)
+{
+       struct fb_info *info = dev_get_drvdata(dev);
+       struct w100fb_par *par=info->par;
 
-int w100fb_get_blanking(void) {
-       return current_par->blanking_flag;
+       /* If display is blanked/suspended, hsync isn't active */
+       if (par->blanked)
+               return 0;
+       else
+               return par->hsync_len;
 }
+EXPORT_SYMBOL(w100fb_get_hsynclen);
 
-int w100fb_get_fastsysclk(void) {
-       return current_par->fastsysclk_mode;
+static void w100fb_clear_screen(struct w100fb_par *par)
+{
+       memset_io(remapped_fbuf + (W100_FB_BASE-MEM_WINDOW_BASE), 0, (par->xres * par->yres * BITS_PER_PIXEL/8));
 }
-EXPORT_SYMBOL(w100fb_get_xres);
-EXPORT_SYMBOL(w100fb_get_blanking);
-EXPORT_SYMBOL(w100fb_get_fastsysclk);
 
 
 /*
@@ -234,7 +205,6 @@ static int w100fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
         * according to the RGB bitfield information.
         */
        if (regno < MAX_PALETTES) {
-
                u32 *pal = info->pseudo_palette;
 
                val = (red & 0xf800) | ((green & 0xfc00) >> 5) | ((blue & 0xf800) >> 11);
@@ -250,115 +220,90 @@ static int w100fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
  */
 static int w100fb_blank(int blank_mode, struct fb_info *info)
 {
-       struct w100fb_par *par;
-       par=info->par;
+       struct w100fb_par *par = info->par;
+       struct w100_tg_info *tg = par->mach->tg;
 
        switch(blank_mode) {
 
-       case FB_BLANK_NORMAL: /* Normal blanking */
-       case FB_BLANK_VSYNC_SUSPEND: /* VESA blank (vsync off) */
-       case FB_BLANK_HSYNC_SUSPEND: /* VESA blank (hsync off) */
-       case FB_BLANK_POWERDOWN: /* Poweroff */
-               if (par->blanking_flag == 0) {
-                       w100fb_save_buffer();
-                       lcdtg_suspend();
-                       par->blanking_flag = 1;
+       case FB_BLANK_NORMAL:         /* Normal blanking */
+       case FB_BLANK_VSYNC_SUSPEND:  /* VESA blank (vsync off) */
+       case FB_BLANK_HSYNC_SUSPEND:  /* VESA blank (hsync off) */
+       case FB_BLANK_POWERDOWN:      /* Poweroff */
+               if (par->blanked == 0) {
+                       if(tg && tg->suspend)
+                               tg->suspend(par);
+                       par->blanked = 1;
                }
                break;
 
        case FB_BLANK_UNBLANK: /* Unblanking */
-               if (par->blanking_flag != 0) {
-                       w100fb_restore_buffer();
-                       lcdtg_resume();
-                       par->blanking_flag = 0;
+               if (par->blanked != 0) {
+                       if(tg && tg->resume)
+                               tg->resume(par);
+                       par->blanked = 0;
                }
                break;
        }
        return 0;
 }
 
+
 /*
  *  Change the resolution by calling the appropriate hardware functions
  */
-static void w100fb_changeres(int rotate_mode, u32 mode)
+static void w100fb_activate_var(struct w100fb_par *par)
 {
-       u16 rotation=0;
-
-       switch(rotate_mode) {
-       case LCD_MODE_LANDSCAPE:
-               rotation=(current_par->rotation_flag ? 270 : 90);
-               break;
-       case LCD_MODE_PORTRAIT:
-               rotation=(current_par->rotation_flag ? 180 : 0);
-               break;
-       }
+       struct w100_tg_info *tg = par->mach->tg;
 
-       w100_pwm_setup();
-       switch(mode) {
-       case LCD_SHARP_QVGA:
-               w100_vsync();
-               w100_suspend(W100_SUSPEND_EXTMEM);
-               w100_init_sharp_lcd(LCD_SHARP_QVGA);
-               w100_init_qvga_rotation(rotation);
-               w100_InitExtMem(LCD_SHARP_QVGA);
-               w100fb_clear_screen(LCD_SHARP_QVGA, 0);
-               lcdtg_lcd_change(LCD_SHARP_QVGA);
-               break;
-       case LCD_SHARP_VGA:
-               w100fb_clear_screen(LCD_SHARP_QVGA, 0);
-               writel(0xBFFFA000, remapped_regs + mmMC_EXT_MEM_LOCATION);
-               w100_InitExtMem(LCD_SHARP_VGA);
-               w100fb_clear_screen(LCD_SHARP_VGA, 0x200000);
-               w100_vsync();
-               w100_init_sharp_lcd(LCD_SHARP_VGA);
-               if (rotation != 0)
-                       w100_init_vga_rotation(rotation);
-               lcdtg_lcd_change(LCD_SHARP_VGA);
-               break;
-       }
+       w100_pwm_setup(par);
+       w100_setup_memory(par);
+       w100_init_clocks(par);
+       w100fb_clear_screen(par);
+       w100_vsync();
+
+       w100_update_disable();
+       w100_init_lcd(par);
+       w100_set_dispregs(par);
+       w100_update_enable();
+
+       calc_hsync(par);
+
+       if (!par->blanked && tg && tg->change)
+               tg->change(par);
 }
 
-/*
- * Set up the display for the fb subsystem
+
+/* Select the smallest mode that allows the desired resolution to be
+ * displayed. If desired, the x and y parameters can be rounded up to
+ * match the selected mode.
  */
-static void w100fb_activate_var(struct fb_info *info)
+static struct w100_mode *w100fb_get_mode(struct w100fb_par *par, unsigned int *x, unsigned int *y, int saveval)
 {
-       u32 temp32;
-       struct w100fb_par *par=info->par;
-       struct fb_var_screeninfo *var = &info->var;
+       struct w100_mode *mode = NULL;
+       struct w100_mode *modelist = par->mach->modelist;
+       unsigned int best_x = 0xffffffff, best_y = 0xffffffff;
+       unsigned int i;
+
+       for (i = 0 ; i < par->mach->num_modes ; i++) {
+               if (modelist[i].xres >= *x && modelist[i].yres >= *y &&
+                               modelist[i].xres < best_x && modelist[i].yres < best_y) {
+                       best_x = modelist[i].xres;
+                       best_y = modelist[i].yres;
+                       mode = &modelist[i];
+               } else if(modelist[i].xres >= *y && modelist[i].yres >= *x &&
+                       modelist[i].xres < best_y && modelist[i].yres < best_x) {
+                       best_x = modelist[i].yres;
+                       best_y = modelist[i].xres;
+                       mode = &modelist[i];
+               }
+       }
 
-       /* Set the hardware to 565 */
-       temp32 = readl(remapped_regs + mmDISP_DEBUG2);
-       temp32 &= 0xff7fffff;
-       temp32 |= 0x00800000;
-       writel(temp32, remapped_regs + mmDISP_DEBUG2);
+       if (mode && saveval) {
+               *x = best_x;
+               *y = best_y;
+       }
 
-       if (par->lcdMode == LCD_MODE_INIT) {
-               w100_init_sharp_lcd(LCD_SHARP_VGA);
-               w100_init_vga_rotation(par->rotation_flag ? 270 : 90);
-               par->lcdMode = LCD_MODE_640;
-               lcdtg_hw_init(LCD_SHARP_VGA);
-       } else if (var->xres == 320 && var->yres == 240) {
-               if (par->lcdMode != LCD_MODE_320) {
-                       w100fb_changeres(LCD_MODE_LANDSCAPE, LCD_SHARP_QVGA);
-                       par->lcdMode = LCD_MODE_320;
-               }
-       } else if (var->xres == 240 && var->yres == 320) {
-               if (par->lcdMode != LCD_MODE_240) {
-                       w100fb_changeres(LCD_MODE_PORTRAIT, LCD_SHARP_QVGA);
-                       par->lcdMode = LCD_MODE_240;
-               }
-       } else if (var->xres == 640 && var->yres == 480) {
-               if (par->lcdMode != LCD_MODE_640) {
-                       w100fb_changeres(LCD_MODE_LANDSCAPE, LCD_SHARP_VGA);
-                       par->lcdMode = LCD_MODE_640;
-               }
-       } else if (var->xres == 480 && var->yres == 640) {
-               if (par->lcdMode != LCD_MODE_480) {
-                       w100fb_changeres(LCD_MODE_PORTRAIT, LCD_SHARP_VGA);
-                       par->lcdMode = LCD_MODE_480;
-               }
-       } else printk(KERN_ERR "W100FB: Resolution error!\n");
+       return mode;
 }
 
 
@@ -366,31 +311,19 @@ static void w100fb_activate_var(struct fb_info *info)
  *  w100fb_check_var():
  *  Get the video params out of 'var'. If a value doesn't fit, round it up,
  *  if it's too big, return -EINVAL.
- *
  */
 static int w100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
 {
-       if (var->xres < var->yres) { /* Portrait mode */
-               if ((var->xres > 480) || (var->yres > 640)) {
-                       return -EINVAL;
-               } else if ((var->xres > 240) || (var->yres > 320)) {
-                       var->xres = 480;
-                       var->yres = 640;
-               } else {
-                       var->xres = 240;
-                       var->yres = 320;
-               }
-       } else { /* Landscape mode */
-               if ((var->xres > 640) || (var->yres > 480)) {
-                       return -EINVAL;
-               } else if ((var->xres > 320) || (var->yres > 240)) {
-                       var->xres = 640;
-                       var->yres = 480;
-               } else {
-                       var->xres = 320;
-                       var->yres = 240;
-               }
-       }
+       struct w100fb_par *par=info->par;
+
+       if(!w100fb_get_mode(par, &var->xres, &var->yres, 1))
+               return -EINVAL;
+
+       if (par->mach->mem && ((var->xres*var->yres*BITS_PER_PIXEL/8) > (par->mach->mem->size+1)))
+               return -EINVAL;
+
+       if (!par->mach->mem && ((var->xres*var->yres*BITS_PER_PIXEL/8) > (MEM_INT_SIZE+1)))
+               return -EINVAL;
 
        var->xres_virtual = max(var->xres_virtual, var->xres);
        var->yres_virtual = max(var->yres_virtual, var->yres);
@@ -409,13 +342,11 @@ static int w100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
        var->transp.offset = var->transp.length = 0;
 
        var->nonstd = 0;
-
        var->height = -1;
        var->width = -1;
        var->vmode = FB_VMODE_NONINTERLACED;
-
        var->sync = 0;
-       var->pixclock = 0x04;   /* 171521; */
+       var->pixclock = 0x04;  /* 171521; */
 
        return 0;
 }
@@ -430,274 +361,286 @@ static int w100fb_set_par(struct fb_info *info)
 {
        struct w100fb_par *par=info->par;
 
-       par->xres = info->var.xres;
-       par->yres = info->var.yres;
-
-       info->fix.visual = FB_VISUAL_TRUECOLOR;
-
-       info->fix.ypanstep = 0;
-       info->fix.ywrapstep = 0;
+       if (par->xres != info->var.xres || par->yres != info->var.yres) {
+               par->xres = info->var.xres;
+               par->yres = info->var.yres;
+               par->mode = w100fb_get_mode(par, &par->xres, &par->yres, 0);
 
-       if (par->blanking_flag)
-               w100fb_clear_buffer();
+               info->fix.visual = FB_VISUAL_TRUECOLOR;
+               info->fix.ypanstep = 0;
+               info->fix.ywrapstep = 0;
+               info->fix.line_length = par->xres * BITS_PER_PIXEL / 8;
 
-       w100fb_activate_var(info);
+               if ((par->xres*par->yres*BITS_PER_PIXEL/8) > (MEM_INT_SIZE+1)) {
+                       par->extmem_active = 1;
+                       info->fix.smem_len = par->mach->mem->size+1;
+               } else {
+                       par->extmem_active = 0;
+                       info->fix.smem_len = MEM_INT_SIZE+1;
+               }
 
-       if (par->lcdMode == LCD_MODE_480) {
-               info->fix.line_length = (480 * BITS_PER_PIXEL) / 8;
-               info->fix.smem_len = 0x200000;
-       } else if (par->lcdMode == LCD_MODE_320) {
-               info->fix.line_length = (320 * BITS_PER_PIXEL) / 8;
-               info->fix.smem_len = 0x60000;
-       } else if (par->lcdMode == LCD_MODE_240) {
-               info->fix.line_length = (240 * BITS_PER_PIXEL) / 8;
-               info->fix.smem_len = 0x60000;
-       } else if (par->lcdMode == LCD_MODE_INIT || par->lcdMode == LCD_MODE_640) {
-               info->fix.line_length = (640 * BITS_PER_PIXEL) / 8;
-               info->fix.smem_len = 0x200000;
+               w100fb_activate_var(par);
        }
-
        return 0;
 }
 
 
 /*
- *      Frame buffer operations
+ *  Frame buffer operations
  */
 static struct fb_ops w100fb_ops = {
-       .owner = THIS_MODULE,
+       .owner        = THIS_MODULE,
        .fb_check_var = w100fb_check_var,
-       .fb_set_par = w100fb_set_par,
+       .fb_set_par   = w100fb_set_par,
        .fb_setcolreg = w100fb_setcolreg,
-       .fb_blank = w100fb_blank,
-       .fb_fillrect = cfb_fillrect,
-       .fb_copyarea = cfb_copyarea,
+       .fb_blank     = w100fb_blank,
+       .fb_fillrect  = cfb_fillrect,
+       .fb_copyarea  = cfb_copyarea,
        .fb_imageblit = cfb_imageblit,
-       .fb_cursor = soft_cursor,
+       .fb_cursor    = soft_cursor,
 };
 
-
-static void w100fb_clear_screen(u32 mode, long int offset)
+#ifdef CONFIG_PM
+static void w100fb_save_vidmem(struct w100fb_par *par)
 {
-       int i, numPix = 0;
-
-       if (mode == LCD_SHARP_VGA)
-               numPix = 640 * 480;
-       else if (mode == LCD_SHARP_QVGA)
-               numPix = 320 * 240;
+       int memsize;
 
-       for (i = 0; i < numPix; i++)
-               writew(0xffff, remapped_fbuf + offset + (2*i));
-}
-
-
-/* Need to split up the buffers to stay within the limits of kmalloc */
-#define W100_BUF_NUM   6
-static uint32_t *gSaveImagePtr[W100_BUF_NUM] = { NULL };
-
-static void w100fb_save_buffer(void)
-{
-       int i, j, bufsize;
-
-       bufsize=(current_par->xres * current_par->yres * BITS_PER_PIXEL / 8) / W100_BUF_NUM;
-       for (i = 0; i < W100_BUF_NUM; i++) {
-               if (gSaveImagePtr[i] == NULL)
-                       gSaveImagePtr[i] = kmalloc(bufsize, GFP_KERNEL);
-               if (gSaveImagePtr[i] == NULL) {
-                       w100fb_clear_buffer();
-                       printk(KERN_WARNING "can't alloc pre-off image buffer %d\n", i);
-                       break;
-               }
-               for (j = 0; j < bufsize/4; j++)
-                       *(gSaveImagePtr[i] + j) = readl(remapped_fbuf + (bufsize*i) + j*4);
+       if (par->extmem_active) {
+               memsize=par->mach->mem->size;
+               par->saved_extmem = vmalloc(memsize);
+               if (par->saved_extmem)
+                       memcpy_fromio(par->saved_extmem, remapped_fbuf + (W100_FB_BASE-MEM_WINDOW_BASE), memsize);
        }
+       memsize=MEM_INT_SIZE;
+       par->saved_intmem = vmalloc(memsize);
+       if (par->saved_intmem && par->extmem_active)
+               memcpy_fromio(par->saved_intmem, remapped_fbuf + (W100_FB_BASE-MEM_INT_BASE_VALUE), memsize);
+       else if (par->saved_intmem)
+               memcpy_fromio(par->saved_intmem, remapped_fbuf + (W100_FB_BASE-MEM_WINDOW_BASE), memsize);
 }
 
-
-static void w100fb_restore_buffer(void)
+static void w100fb_restore_vidmem(struct w100fb_par *par)
 {
-       int i, j, bufsize;
+       int memsize;
 
-       bufsize=(current_par->xres * current_par->yres * BITS_PER_PIXEL / 8) / W100_BUF_NUM;
-       for (i = 0; i < W100_BUF_NUM; i++) {
-               if (gSaveImagePtr[i] == NULL) {
-                       printk(KERN_WARNING "can't find pre-off image buffer %d\n", i);
-                       w100fb_clear_buffer();
-                       break;
-               }
-               for (j = 0; j < (bufsize/4); j++)
-                       writel(*(gSaveImagePtr[i] + j),remapped_fbuf + (bufsize*i) + (j*4));
-               kfree(gSaveImagePtr[i]);
-               gSaveImagePtr[i] = NULL;
+       if (par->extmem_active && par->saved_extmem) {
+               memsize=par->mach->mem->size;
+               memcpy_toio(remapped_fbuf + (W100_FB_BASE-MEM_WINDOW_BASE), par->saved_extmem, memsize);
+               vfree(par->saved_extmem);
        }
-}
-
-
-static void w100fb_clear_buffer(void)
-{
-       int i;
-       for (i = 0; i < W100_BUF_NUM; i++) {
-               kfree(gSaveImagePtr[i]);
-               gSaveImagePtr[i] = NULL;
+       if (par->saved_intmem) {
+               memsize=MEM_INT_SIZE;
+               if (par->extmem_active)
+                       memcpy_toio(remapped_fbuf + (W100_FB_BASE-MEM_INT_BASE_VALUE), par->saved_intmem, memsize);
+               else
+                       memcpy_toio(remapped_fbuf + (W100_FB_BASE-MEM_WINDOW_BASE), par->saved_intmem, memsize);
+               vfree(par->saved_intmem);
        }
 }
 
-
-#ifdef CONFIG_PM
-static int w100fb_suspend(struct device *dev, pm_message_t state, u32 level)
+static int w100fb_suspend(struct device *dev, pm_message_t state, uint32_t level)
 {
        if (level == SUSPEND_POWER_DOWN) {
                struct fb_info *info = dev_get_drvdata(dev);
                struct w100fb_par *par=info->par;
+               struct w100_tg_info *tg = par->mach->tg;
 
-               w100fb_save_buffer();
-               lcdtg_suspend();
+               w100fb_save_vidmem(par);
+               if(tg && tg->suspend)
+                       tg->suspend(par);
                w100_suspend(W100_SUSPEND_ALL);
-               par->blanking_flag = 1;
+               par->blanked = 1;
        }
        return 0;
 }
 
-static int w100fb_resume(struct device *dev, u32 level)
+static int w100fb_resume(struct device *dev, uint32_t level)
 {
        if (level == RESUME_POWER_ON) {
                struct fb_info *info = dev_get_drvdata(dev);
                struct w100fb_par *par=info->par;
-
-               w100_resume();
-               w100fb_restore_buffer();
-               lcdtg_resume();
-               par->blanking_flag = 0;
+               struct w100_tg_info *tg = par->mach->tg;
+
+               w100_hw_init(par);
+               w100fb_activate_var(par);
+               w100fb_restore_vidmem(par);
+               if(tg && tg->resume)
+                       tg->resume(par);
+               par->blanked = 0;
        }
        return 0;
 }
 #else
-#define w100fb_suspend NULL
-#define w100fb_resume  NULL
+#define w100fb_suspend  NULL
+#define w100fb_resume   NULL
 #endif
 
 
 int __init w100fb_probe(struct device *dev)
 {
+       int err = -EIO;
        struct w100fb_mach_info *inf;
-       struct fb_info *info;
+       struct fb_info *info = NULL;
        struct w100fb_par *par;
        struct platform_device *pdev = to_platform_device(dev);
        struct resource *mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       unsigned int chip_id;
 
        if (!mem)
                return -EINVAL;
 
-       /* remap the areas we're going to use */
+       /* Remap the chip base address */
        remapped_base = ioremap_nocache(mem->start+W100_CFG_BASE, W100_CFG_LEN);
        if (remapped_base == NULL)
-               return -EIO;
+               goto out;
 
+       /* Map the register space */
        remapped_regs = ioremap_nocache(mem->start+W100_REG_BASE, W100_REG_LEN);
-       if (remapped_regs == NULL) {
-               iounmap(remapped_base);
-               return -EIO;
+       if (remapped_regs == NULL)
+               goto out;
+
+       /* Identify the chip */
+       printk("Found ");
+       chip_id = readl(remapped_regs + mmCHIP_ID);
+       switch(chip_id) {
+               case CHIP_ID_W100:  printk("w100");  break;
+               case CHIP_ID_W3200: printk("w3200"); break;
+               case CHIP_ID_W3220: printk("w3220"); break;
+               default:
+                       printk("Unknown imageon chip ID\n");
+                       err = -ENODEV;
+                       goto out;
        }
+       printk(" at 0x%08lx.\n", mem->start+W100_CFG_BASE);
 
-       remapped_fbuf = ioremap_nocache(mem->start+MEM_EXT_BASE_VALUE, REMAPPED_FB_LEN);
-       if (remapped_fbuf == NULL) {
-               iounmap(remapped_base);
-               iounmap(remapped_regs);
-               return -EIO;
-       }
+       /* Remap the framebuffer */
+       remapped_fbuf = ioremap_nocache(mem->start+MEM_WINDOW_BASE, MEM_WINDOW_SIZE);
+       if (remapped_fbuf == NULL)
+               goto out;
 
        info=framebuffer_alloc(sizeof(struct w100fb_par), dev);
        if (!info) {
-               iounmap(remapped_base);
-               iounmap(remapped_regs);
-               iounmap(remapped_fbuf);
-               return -ENOMEM;
+               err = -ENOMEM;
+               goto out;
        }
 
-       info->device=dev;
        par = info->par;
-       current_par=info->par;
        dev_set_drvdata(dev, info);
 
        inf = dev->platform_data;
-       par->phadadj = inf->phadadj;
-       par->comadj = inf->comadj;
-       par->fastsysclk_mode = 75;
-       par->lcdMode = LCD_MODE_INIT;
-       par->rotation_flag=0;
-       par->blanking_flag=0;
-       w100fb_ssp_send = inf->w100fb_ssp_send;
-
-       w100_hw_init();
-       w100_pwm_setup();
+       par->chip_id = chip_id;
+       par->mach = inf;
+       par->fastpll_mode = 0;
+       par->blanked = 0;
+
+       par->pll_table=w100_get_xtal_table(inf->xtal_freq);
+       if (!par->pll_table) {
+               printk(KERN_ERR "No matching Xtal definition found\n");
+               err = -EINVAL;
+               goto out;
+       }
 
        info->pseudo_palette = kmalloc(sizeof (u32) * MAX_PALETTES, GFP_KERNEL);
        if (!info->pseudo_palette) {
-               iounmap(remapped_base);
-               iounmap(remapped_regs);
-               iounmap(remapped_fbuf);
-               return -ENOMEM;
+               err = -ENOMEM;
+               goto out;
        }
 
        info->fbops = &w100fb_ops;
        info->flags = FBINFO_DEFAULT;
        info->node = -1;
-       info->screen_base = remapped_fbuf;
+       info->screen_base = remapped_fbuf + (W100_FB_BASE-MEM_WINDOW_BASE);
        info->screen_size = REMAPPED_FB_LEN;
 
-       info->var.xres = 640;
+       strcpy(info->fix.id, "w100fb");
+       info->fix.type = FB_TYPE_PACKED_PIXELS;
+       info->fix.type_aux = 0;
+       info->fix.accel = FB_ACCEL_NONE;
+       info->fix.smem_start = mem->start+W100_FB_BASE;
+       info->fix.mmio_start = mem->start+W100_REG_BASE;
+       info->fix.mmio_len = W100_REG_LEN;
+
+       if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
+               err = -ENOMEM;
+               goto out;
+       }
+
+       par->mode = &inf->modelist[0];
+       if(inf->init_mode & INIT_MODE_ROTATED) {
+               info->var.xres = par->mode->yres;
+               info->var.yres = par->mode->xres;
+       }
+       else {
+               info->var.xres = par->mode->xres;
+               info->var.yres = par->mode->yres;
+       }
+
+       if(inf->init_mode &= INIT_MODE_FLIPPED)
+               par->flip = 1;
+       else
+               par->flip = 0;
+
        info->var.xres_virtual = info->var.xres;
-       info->var.yres = 480;
        info->var.yres_virtual = info->var.yres;
-       info->var.pixclock = 0x04;      /* 171521; */
+       info->var.pixclock = 0x04;  /* 171521; */
        info->var.sync = 0;
        info->var.grayscale = 0;
        info->var.xoffset = info->var.yoffset = 0;
        info->var.accel_flags = 0;
        info->var.activate = FB_ACTIVATE_NOW;
 
-       strcpy(info->fix.id, "w100fb");
-       info->fix.type = FB_TYPE_PACKED_PIXELS;
-       info->fix.type_aux = 0;
-       info->fix.accel = FB_ACCEL_NONE;
-       info->fix.smem_start = mem->start+MEM_EXT_BASE_VALUE;
-       info->fix.mmio_start = mem->start+W100_REG_BASE;
-       info->fix.mmio_len = W100_REG_LEN;
+       w100_hw_init(par);
+
+       if (w100fb_check_var(&info->var, info) < 0) {
+               err = -EINVAL;
+               goto out;
+       }
 
-       w100fb_check_var(&info->var, info);
        w100fb_set_par(info);
 
        if (register_framebuffer(info) < 0) {
-               kfree(info->pseudo_palette);
-               iounmap(remapped_base);
-               iounmap(remapped_regs);
-               iounmap(remapped_fbuf);
-               return -EINVAL;
+               err = -EINVAL;
+               goto out;
        }
 
-       device_create_file(dev, &dev_attr_fastsysclk);
+       device_create_file(dev, &dev_attr_fastpllclk);
        device_create_file(dev, &dev_attr_reg_read);
        device_create_file(dev, &dev_attr_reg_write);
-       device_create_file(dev, &dev_attr_rotation);
+       device_create_file(dev, &dev_attr_flip);
 
        printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node, info->fix.id);
        return 0;
+out:
+       fb_dealloc_cmap(&info->cmap);
+       kfree(info->pseudo_palette);
+       if (remapped_fbuf != NULL)
+               iounmap(remapped_fbuf);
+       if (remapped_regs != NULL)
+               iounmap(remapped_regs);
+       if (remapped_base != NULL)
+               iounmap(remapped_base);
+       if (info)
+               framebuffer_release(info);
+       return err;
 }
 
 
 static int w100fb_remove(struct device *dev)
 {
        struct fb_info *info = dev_get_drvdata(dev);
+       struct w100fb_par *par=info->par;
 
-       device_remove_file(dev, &dev_attr_fastsysclk);
+       device_remove_file(dev, &dev_attr_fastpllclk);
        device_remove_file(dev, &dev_attr_reg_read);
        device_remove_file(dev, &dev_attr_reg_write);
-       device_remove_file(dev, &dev_attr_rotation);
+       device_remove_file(dev, &dev_attr_flip);
 
        unregister_framebuffer(info);
 
-       w100fb_clear_buffer();
+       vfree(par->saved_intmem);
+       vfree(par->saved_extmem);
        kfree(info->pseudo_palette);
+       fb_dealloc_cmap(&info->cmap);
 
        iounmap(remapped_base);
        iounmap(remapped_regs);
@@ -721,10 +664,54 @@ static void w100_soft_reset(void)
        udelay(100);
 }
 
+static void w100_update_disable(void)
+{
+       union disp_db_buf_cntl_wr_u disp_db_buf_wr_cntl;
+
+       /* Prevent display updates */
+       disp_db_buf_wr_cntl.f.db_buf_cntl = 0x1e;
+       disp_db_buf_wr_cntl.f.update_db_buf = 0;
+       disp_db_buf_wr_cntl.f.en_db_buf = 0;
+       writel((u32) (disp_db_buf_wr_cntl.val), remapped_regs + mmDISP_DB_BUF_CNTL);
+}
+
+static void w100_update_enable(void)
+{
+       union disp_db_buf_cntl_wr_u disp_db_buf_wr_cntl;
+
+       /* Enable display updates */
+       disp_db_buf_wr_cntl.f.db_buf_cntl = 0x1e;
+       disp_db_buf_wr_cntl.f.update_db_buf = 1;
+       disp_db_buf_wr_cntl.f.en_db_buf = 1;
+       writel((u32) (disp_db_buf_wr_cntl.val), remapped_regs + mmDISP_DB_BUF_CNTL);
+}
+
+unsigned long w100fb_gpio_read(int port)
+{
+       unsigned long value;
+
+       if (port==W100_GPIO_PORT_A)
+               value = readl(remapped_regs + mmGPIO_DATA);
+       else
+               value = readl(remapped_regs + mmGPIO_DATA2);
+
+       return value;
+}
+
+void w100fb_gpio_write(int port, unsigned long value)
+{
+       if (port==W100_GPIO_PORT_A)
+               value = writel(value, remapped_regs + mmGPIO_DATA);
+       else
+               value = writel(value, remapped_regs + mmGPIO_DATA2);
+}
+EXPORT_SYMBOL(w100fb_gpio_read);
+EXPORT_SYMBOL(w100fb_gpio_write);
+
 /*
  * Initialization of critical w100 hardware
  */
-static void w100_hw_init(void)
+static void w100_hw_init(struct w100fb_par *par)
 {
        u32 temp32;
        union cif_cntl_u cif_cntl;
@@ -735,8 +722,8 @@ static void w100_hw_init(void)
        union cpu_defaults_u cpu_default;
        union cif_write_dbg_u cif_write_dbg;
        union wrap_start_dir_u wrap_start_dir;
-       union mc_ext_mem_location_u mc_ext_mem_loc;
        union cif_io_u cif_io;
+       struct w100_gpio_regs *gpio = par->mach->gpio;
 
        w100_soft_reset();
 
@@ -791,19 +778,6 @@ static void w100_hw_init(void)
        cfgreg_base.f.cfgreg_base = W100_CFG_BASE;
        writel((u32) (cfgreg_base.val), remapped_regs + mmCFGREG_BASE);
 
-       /* This location is relative to internal w100 addresses */
-       writel(0x15FF1000, remapped_regs + mmMC_FB_LOCATION);
-
-       mc_ext_mem_loc.val = defMC_EXT_MEM_LOCATION;
-       mc_ext_mem_loc.f.mc_ext_mem_start = MEM_EXT_BASE_VALUE >> 8;
-       mc_ext_mem_loc.f.mc_ext_mem_top = MEM_EXT_TOP_VALUE >> 8;
-       writel((u32) (mc_ext_mem_loc.val), remapped_regs + mmMC_EXT_MEM_LOCATION);
-
-       if ((current_par->lcdMode == LCD_MODE_240) || (current_par->lcdMode == LCD_MODE_320))
-               w100_InitExtMem(LCD_SHARP_QVGA);
-       else
-               w100_InitExtMem(LCD_SHARP_VGA);
-
        wrap_start_dir.val = defWRAP_START_DIR;
        wrap_start_dir.f.start_addr = WRAP_BUF_BASE_VALUE >> 1;
        writel((u32) (wrap_start_dir.val), remapped_regs + mmWRAP_START_DIR);
@@ -813,21 +787,24 @@ static void w100_hw_init(void)
        writel((u32) (wrap_top_dir.val), remapped_regs + mmWRAP_TOP_DIR);
 
        writel((u32) 0x2440, remapped_regs + mmRBBM_CNTL);
-}
 
+       /* Set the hardware to 565 colour */
+       temp32 = readl(remapped_regs + mmDISP_DEBUG2);
+       temp32 &= 0xff7fffff;
+       temp32 |= 0x00800000;
+       writel(temp32, remapped_regs + mmDISP_DEBUG2);
 
-/*
- * Types
- */
+       /* Initialise the GPIO lines */
+       if (gpio) {
+               writel(gpio->init_data1, remapped_regs + mmGPIO_DATA);
+               writel(gpio->init_data2, remapped_regs + mmGPIO_DATA2);
+               writel(gpio->gpio_dir1,  remapped_regs + mmGPIO_CNTL1);
+               writel(gpio->gpio_oe1,   remapped_regs + mmGPIO_CNTL2);
+               writel(gpio->gpio_dir2,  remapped_regs + mmGPIO_CNTL3);
+               writel(gpio->gpio_oe2,   remapped_regs + mmGPIO_CNTL4);
+       }
+}
 
-struct pll_parm {
-       u16 freq;               /* desired Fout for PLL */
-       u8 M;
-       u8 N_int;
-       u8 N_fac;
-       u8 tfgoal;
-       u8 lock_time;
-};
 
 struct power_state {
        union clk_pin_cntl_u clk_pin_cntl;
@@ -835,317 +812,275 @@ struct power_state {
        union pll_cntl_u pll_cntl;
        union sclk_cntl_u sclk_cntl;
        union pclk_cntl_u pclk_cntl;
-       union clk_test_cntl_u clk_test_cntl;
        union pwrmgt_cntl_u pwrmgt_cntl;
-       u32 freq;               /* Fout for PLL calibration */
-       u8 tf100;               /* for pll calibration */
-       u8 tf80;                /* for pll calibration */
-       u8 tf20;                /* for pll calibration */
-       u8 M;                   /* for pll calibration */
-       u8 N_int;               /* for pll calibration */
-       u8 N_fac;               /* for pll calibration */
-       u8 lock_time;   /* for pll calibration */
-       u8 tfgoal;              /* for pll calibration */
-       u8 auto_mode;   /* hardware auto switch? */
-       u8 pwm_mode;            /* 0 fast, 1 normal/slow */
-       u16 fast_sclk;  /* fast clk freq */
-       u16 norm_sclk;  /* slow clk freq */
+       int auto_mode;  /* system clock auto changing? */
 };
 
 
-/*
- * Global state variables
- */
-
 static struct power_state w100_pwr_state;
 
-/* This table is specific for 12.5MHz ref crystal.  */
-static struct pll_parm gPLLTable[] = {
-    /*freq     M   N_int    N_fac  tfgoal  lock_time */
-    { 50,      0,   1,       0,     0xE0,        56}, /*  50.00 MHz */
-    { 75,      0,   5,       0,     0xDE,           37}, /*  75.00 MHz */
-    {100,      0,   7,       0,     0xE0,        28}, /* 100.00 MHz */
-    {125,      0,   9,       0,     0xE0,        22}, /* 125.00 MHz */
-    {150,      0,   11,      0,     0xE0,        17}, /* 150.00 MHz */
-    {  0,      0,   0,       0,        0,         0}  /* Terminator */
+/* The PLL Fout is determined by (XtalFreq/(M+1)) * ((N_int+1) + (N_fac/8)) */
+
+/* 12.5MHz Crystal PLL Table */
+static struct w100_pll_info xtal_12500000[] = {
+       /*freq     M   N_int    N_fac  tfgoal  lock_time */
+       { 50,      0,   1,       0,     0xe0,        56},  /*  50.00 MHz */
+       { 75,      0,   5,       0,     0xde,        37},  /*  75.00 MHz */
+       {100,      0,   7,       0,     0xe0,        28},  /* 100.00 MHz */
+       {125,      0,   9,       0,     0xe0,        22},  /* 125.00 MHz */
+       {150,      0,   11,      0,     0xe0,        17},  /* 150.00 MHz */
+       {  0,      0,   0,       0,        0,         0},  /* Terminator */
 };
 
+/* 14.318MHz Crystal PLL Table */
+static struct w100_pll_info xtal_14318000[] = {
+       /*freq     M   N_int    N_fac  tfgoal  lock_time */
+       { 40,      4,   13,      0,     0xe0,        80}, /* tfgoal guessed */
+       { 50,      1,   6,       0,     0xe0,        64}, /*  50.05 MHz */
+       { 57,      2,   11,      0,     0xe0,        53}, /* tfgoal guessed */
+       { 75,      0,   4,       3,     0xe0,        43}, /*  75.08 MHz */
+       {100,      0,   6,       0,     0xe0,        32}, /* 100.10 MHz */
+       {  0,      0,   0,       0,        0,         0},
+};
 
-static u8 w100_pll_get_testcount(u8 testclk_sel)
+/* 16MHz Crystal PLL Table */
+static struct w100_pll_info xtal_16000000[] = {
+       /*freq     M   N_int    N_fac  tfgoal  lock_time */
+       { 72,      1,   8,       0,     0xe0,        48}, /* tfgoal guessed */
+       { 95,      1,   10,      7,     0xe0,        38}, /* tfgoal guessed */
+       { 96,      1,   11,      0,     0xe0,        36}, /* tfgoal guessed */
+       {  0,      0,   0,       0,        0,         0},
+};
+
+static struct pll_entries {
+       int xtal_freq;
+       struct w100_pll_info *pll_table;
+} w100_pll_tables[] = {
+       { 12500000, &xtal_12500000[0] },
+       { 14318000, &xtal_14318000[0] },
+       { 16000000, &xtal_16000000[0] },
+       { 0 },
+};
+
+struct w100_pll_info *w100_get_xtal_table(unsigned int freq)
 {
+       struct pll_entries *pll_entry = w100_pll_tables;
+
+       do {
+               if (freq == pll_entry->xtal_freq)
+                       return pll_entry->pll_table;
+               pll_entry++;
+       } while (pll_entry->xtal_freq);
+       return 0;
+}
+
+
+static unsigned int w100_get_testcount(unsigned int testclk_sel)
+{
+       union clk_test_cntl_u clk_test_cntl;
+
        udelay(5);
 
-       w100_pwr_state.clk_test_cntl.f.start_check_freq = 0x0;
-       w100_pwr_state.clk_test_cntl.f.testclk_sel = testclk_sel;
-       w100_pwr_state.clk_test_cntl.f.tstcount_rst = 0x1;      /*reset test count */
-       writel((u32) (w100_pwr_state.clk_test_cntl.val), remapped_regs + mmCLK_TEST_CNTL);
-       w100_pwr_state.clk_test_cntl.f.tstcount_rst = 0x0;
-       writel((u32) (w100_pwr_state.clk_test_cntl.val), remapped_regs + mmCLK_TEST_CNTL);
+       /* Select the test clock source and reset */
+       clk_test_cntl.f.start_check_freq = 0x0;
+       clk_test_cntl.f.testclk_sel = testclk_sel;
+       clk_test_cntl.f.tstcount_rst = 0x1; /* set reset */
+       writel((u32) (clk_test_cntl.val), remapped_regs + mmCLK_TEST_CNTL);
 
-       w100_pwr_state.clk_test_cntl.f.start_check_freq = 0x1;
-       writel((u32) (w100_pwr_state.clk_test_cntl.val), remapped_regs + mmCLK_TEST_CNTL);
+       clk_test_cntl.f.tstcount_rst = 0x0; /* clear reset */
+       writel((u32) (clk_test_cntl.val), remapped_regs + mmCLK_TEST_CNTL);
 
+       /* Run clock test */
+       clk_test_cntl.f.start_check_freq = 0x1;
+       writel((u32) (clk_test_cntl.val), remapped_regs + mmCLK_TEST_CNTL);
+
+       /* Give the test time to complete */
        udelay(20);
 
-       w100_pwr_state.clk_test_cntl.val = readl(remapped_regs + mmCLK_TEST_CNTL);
-       w100_pwr_state.clk_test_cntl.f.start_check_freq = 0x0;
-       writel((u32) (w100_pwr_state.clk_test_cntl.val), remapped_regs + mmCLK_TEST_CNTL);
+       /* Return the result */
+       clk_test_cntl.val = readl(remapped_regs + mmCLK_TEST_CNTL);
+       clk_test_cntl.f.start_check_freq = 0x0;
+       writel((u32) (clk_test_cntl.val), remapped_regs + mmCLK_TEST_CNTL);
 
-       return w100_pwr_state.clk_test_cntl.f.test_count;
+       return clk_test_cntl.f.test_count;
 }
 
 
-static u8 w100_pll_adjust(void)
+static int w100_pll_adjust(struct w100_pll_info *pll)
 {
+       unsigned int tf80;
+       unsigned int tf20;
+
+       /* Initial Settings */
+       w100_pwr_state.pll_cntl.f.pll_pwdn = 0x0;     /* power down */
+       w100_pwr_state.pll_cntl.f.pll_reset = 0x0;    /* not reset */
+       w100_pwr_state.pll_cntl.f.pll_tcpoff = 0x1;   /* Hi-Z */
+       w100_pwr_state.pll_cntl.f.pll_pvg = 0x0;      /* VCO gain = 0 */
+       w100_pwr_state.pll_cntl.f.pll_vcofr = 0x0;    /* VCO frequency range control = off */
+       w100_pwr_state.pll_cntl.f.pll_ioffset = 0x0;  /* current offset inside VCO = 0 */
+       w100_pwr_state.pll_cntl.f.pll_ring_off = 0x0;
+
+       /* Wai Ming 80 percent of VDD 1.3V gives 1.04V, minimum operating voltage is 1.08V
+        * therefore, commented out the following lines
+        * tf80 meant tf100
+        */
        do {
-               /* Wai Ming 80 percent of VDD 1.3V gives 1.04V, minimum operating voltage is 1.08V
-                * therefore, commented out the following lines
-                * tf80 meant tf100
-                * set VCO input = 0.8 * VDD
-                */
+               /* set VCO input = 0.8 * VDD */
                w100_pwr_state.pll_cntl.f.pll_dactal = 0xd;
                writel((u32) (w100_pwr_state.pll_cntl.val), remapped_regs + mmPLL_CNTL);
 
-               w100_pwr_state.tf80 = w100_pll_get_testcount(0x1);      /* PLLCLK */
-               if (w100_pwr_state.tf80 >= (w100_pwr_state.tfgoal)) {
+               tf80 = w100_get_testcount(TESTCLK_SRC_PLL);
+               if (tf80 >= (pll->tfgoal)) {
                        /* set VCO input = 0.2 * VDD */
                        w100_pwr_state.pll_cntl.f.pll_dactal = 0x7;
                        writel((u32) (w100_pwr_state.pll_cntl.val), remapped_regs + mmPLL_CNTL);
 
-                       w100_pwr_state.tf20 = w100_pll_get_testcount(0x1);      /* PLLCLK */
-                       if (w100_pwr_state.tf20 <= (w100_pwr_state.tfgoal))
-                               return 1; // Success
+                       tf20 = w100_get_testcount(TESTCLK_SRC_PLL);
+                       if (tf20 <= (pll->tfgoal))
+                               return 1;  /* Success */
 
                        if ((w100_pwr_state.pll_cntl.f.pll_vcofr == 0x0) &&
-                           ((w100_pwr_state.pll_cntl.f.pll_pvg == 0x7) ||
-                            (w100_pwr_state.pll_cntl.f.pll_ioffset == 0x0))) {
+                               ((w100_pwr_state.pll_cntl.f.pll_pvg == 0x7) ||
+                               (w100_pwr_state.pll_cntl.f.pll_ioffset == 0x0))) {
                                /* slow VCO config */
                                w100_pwr_state.pll_cntl.f.pll_vcofr = 0x1;
                                w100_pwr_state.pll_cntl.f.pll_pvg = 0x0;
                                w100_pwr_state.pll_cntl.f.pll_ioffset = 0x0;
-                               writel((u32) (w100_pwr_state.pll_cntl.val),
-                                       remapped_regs + mmPLL_CNTL);
                                continue;
                        }
                }
                if ((w100_pwr_state.pll_cntl.f.pll_ioffset) < 0x3) {
                        w100_pwr_state.pll_cntl.f.pll_ioffset += 0x1;
-                       writel((u32) (w100_pwr_state.pll_cntl.val), remapped_regs + mmPLL_CNTL);
-                       continue;
-               }
-               if ((w100_pwr_state.pll_cntl.f.pll_pvg) < 0x7) {
+               } else if ((w100_pwr_state.pll_cntl.f.pll_pvg) < 0x7) {
                        w100_pwr_state.pll_cntl.f.pll_ioffset = 0x0;
                        w100_pwr_state.pll_cntl.f.pll_pvg += 0x1;
-                       writel((u32) (w100_pwr_state.pll_cntl.val), remapped_regs + mmPLL_CNTL);
-                       continue;
+               } else {
+                       return 0;  /* Error */
                }
-               return 0; // error
        } while(1);
 }
 
 
 /*
  * w100_pll_calibration
- *                freq = target frequency of the PLL
- *                (note: crystal = 14.3MHz)
  */
-static u8 w100_pll_calibration(u32 freq)
+static int w100_pll_calibration(struct w100_pll_info *pll)
 {
-       u8 status;
-
-       /* initial setting */
-       w100_pwr_state.pll_cntl.f.pll_pwdn = 0x0;               /* power down */
-       w100_pwr_state.pll_cntl.f.pll_reset = 0x0;              /* not reset */
-       w100_pwr_state.pll_cntl.f.pll_tcpoff = 0x1;     /* Hi-Z */
-       w100_pwr_state.pll_cntl.f.pll_pvg = 0x0;                /* VCO gain = 0 */
-       w100_pwr_state.pll_cntl.f.pll_vcofr = 0x0;              /* VCO frequency range control = off */
-       w100_pwr_state.pll_cntl.f.pll_ioffset = 0x0;    /* current offset inside VCO = 0 */
-       w100_pwr_state.pll_cntl.f.pll_ring_off = 0x0;
-       writel((u32) (w100_pwr_state.pll_cntl.val), remapped_regs + mmPLL_CNTL);
+       int status;
 
-       /* check for (tf80 >= tfgoal) && (tf20 =< tfgoal) */
-       if ((w100_pwr_state.tf80 < w100_pwr_state.tfgoal) || (w100_pwr_state.tf20 > w100_pwr_state.tfgoal)) {
-               status=w100_pll_adjust();
-       }
-       /* PLL Reset And Lock */
+       status = w100_pll_adjust(pll);
 
+       /* PLL Reset And Lock */
        /* set VCO input = 0.5 * VDD */
        w100_pwr_state.pll_cntl.f.pll_dactal = 0xa;
        writel((u32) (w100_pwr_state.pll_cntl.val), remapped_regs + mmPLL_CNTL);
 
-       /* reset time */
-       udelay(1);
+       udelay(1);  /* reset time */
 
        /* enable charge pump */
-       w100_pwr_state.pll_cntl.f.pll_tcpoff = 0x0;     /* normal */
+       w100_pwr_state.pll_cntl.f.pll_tcpoff = 0x0;  /* normal */
        writel((u32) (w100_pwr_state.pll_cntl.val), remapped_regs + mmPLL_CNTL);
 
-       /* set VCO input = Hi-Z */
-       /* disable DAC */
+       /* set VCO input = Hi-Z, disable DAC */
        w100_pwr_state.pll_cntl.f.pll_dactal = 0x0;
        writel((u32) (w100_pwr_state.pll_cntl.val), remapped_regs + mmPLL_CNTL);
 
-       /* lock time */
-       udelay(400);    /* delay 400 us */
+       udelay(400);  /* lock time */
 
        /* PLL locked */
 
-       w100_pwr_state.sclk_cntl.f.sclk_src_sel = 0x1;  /* PLL clock */
-       writel((u32) (w100_pwr_state.sclk_cntl.val), remapped_regs + mmSCLK_CNTL);
-
-       w100_pwr_state.tf100 = w100_pll_get_testcount(0x1);     /* PLLCLK */
-
        return status;
 }
 
 
-static u8 w100_pll_set_clk(void)
+static int w100_pll_set_clk(struct w100_pll_info *pll)
 {
-       u8 status;
+       int status;
 
-       if (w100_pwr_state.auto_mode == 1)      /* auto mode */
+       if (w100_pwr_state.auto_mode == 1)  /* auto mode */
        {
-               w100_pwr_state.pwrmgt_cntl.f.pwm_fast_noml_hw_en = 0x0; /* disable fast to normal */
-               w100_pwr_state.pwrmgt_cntl.f.pwm_noml_fast_hw_en = 0x0; /* disable normal to fast */
+               w100_pwr_state.pwrmgt_cntl.f.pwm_fast_noml_hw_en = 0x0;  /* disable fast to normal */
+               w100_pwr_state.pwrmgt_cntl.f.pwm_noml_fast_hw_en = 0x0;  /* disable normal to fast */
                writel((u32) (w100_pwr_state.pwrmgt_cntl.val), remapped_regs + mmPWRMGT_CNTL);
        }
 
-       w100_pwr_state.sclk_cntl.f.sclk_src_sel = 0x0;  /* crystal clock */
+       /* Set system clock source to XTAL whilst adjusting the PLL! */
+       w100_pwr_state.sclk_cntl.f.sclk_src_sel = CLK_SRC_XTAL;
        writel((u32) (w100_pwr_state.sclk_cntl.val), remapped_regs + mmSCLK_CNTL);
 
-       w100_pwr_state.pll_ref_fb_div.f.pll_ref_div = w100_pwr_state.M;
-       w100_pwr_state.pll_ref_fb_div.f.pll_fb_div_int = w100_pwr_state.N_int;
-       w100_pwr_state.pll_ref_fb_div.f.pll_fb_div_frac = w100_pwr_state.N_fac;
-       w100_pwr_state.pll_ref_fb_div.f.pll_lock_time = w100_pwr_state.lock_time;
+       w100_pwr_state.pll_ref_fb_div.f.pll_ref_div = pll->M;
+       w100_pwr_state.pll_ref_fb_div.f.pll_fb_div_int = pll->N_int;
+       w100_pwr_state.pll_ref_fb_div.f.pll_fb_div_frac = pll->N_fac;
+       w100_pwr_state.pll_ref_fb_div.f.pll_lock_time = pll->lock_time;
        writel((u32) (w100_pwr_state.pll_ref_fb_div.val), remapped_regs + mmPLL_REF_FB_DIV);
 
        w100_pwr_state.pwrmgt_cntl.f.pwm_mode_req = 0;
        writel((u32) (w100_pwr_state.pwrmgt_cntl.val), remapped_regs + mmPWRMGT_CNTL);
 
-       status = w100_pll_calibration (w100_pwr_state.freq);
+       status = w100_pll_calibration(pll);
 
-       if (w100_pwr_state.auto_mode == 1)      /* auto mode */
+       if (w100_pwr_state.auto_mode == 1)  /* auto mode */
        {
-               w100_pwr_state.pwrmgt_cntl.f.pwm_fast_noml_hw_en = 0x1; /* reenable fast to normal */
-               w100_pwr_state.pwrmgt_cntl.f.pwm_noml_fast_hw_en = 0x1; /* reenable normal to fast  */
+               w100_pwr_state.pwrmgt_cntl.f.pwm_fast_noml_hw_en = 0x1;  /* reenable fast to normal */
+               w100_pwr_state.pwrmgt_cntl.f.pwm_noml_fast_hw_en = 0x1;  /* reenable normal to fast  */
                writel((u32) (w100_pwr_state.pwrmgt_cntl.val), remapped_regs + mmPWRMGT_CNTL);
        }
        return status;
 }
 
-
-/* assume reference crystal clk is 12.5MHz,
- * and that doubling is not enabled.
- *
- * Freq = 12 == 12.5MHz.
- */
-static u16 w100_set_slowsysclk(u16 freq)
-{
-       if (w100_pwr_state.norm_sclk == freq)
-               return freq;
-
-       if (w100_pwr_state.auto_mode == 1)      /* auto mode */
-               return 0;
-
-       if (freq == 12) {
-               w100_pwr_state.norm_sclk = freq;
-               w100_pwr_state.sclk_cntl.f.sclk_post_div_slow = 0x0;    /* Pslow = 1 */
-               w100_pwr_state.sclk_cntl.f.sclk_src_sel = 0x0;  /* crystal src */
-
-               writel((u32) (w100_pwr_state.sclk_cntl.val), remapped_regs + mmSCLK_CNTL);
-
-               w100_pwr_state.clk_pin_cntl.f.xtalin_pm_en = 0x1;
-               writel((u32) (w100_pwr_state.clk_pin_cntl.val), remapped_regs + mmCLK_PIN_CNTL);
-
-               w100_pwr_state.pwrmgt_cntl.f.pwm_enable = 0x1;
-               w100_pwr_state.pwrmgt_cntl.f.pwm_mode_req = 0x1;
-               writel((u32) (w100_pwr_state.pwrmgt_cntl.val), remapped_regs + mmPWRMGT_CNTL);
-               w100_pwr_state.pwm_mode = 1;    /* normal mode */
-               return freq;
-       } else
-               return 0;
-}
-
-
-static u16 w100_set_fastsysclk(u16 freq)
+/* freq = target frequency of the PLL */
+static int w100_set_pll_freq(struct w100fb_par *par, unsigned int freq)
 {
-       u16 pll_freq;
-       int i;
-
-       while(1) {
-               pll_freq = (u16) (freq * (w100_pwr_state.sclk_cntl.f.sclk_post_div_fast + 1));
-               i = 0;
-               do {
-                       if (pll_freq == gPLLTable[i].freq) {
-                               w100_pwr_state.freq = gPLLTable[i].freq * 1000000;
-                               w100_pwr_state.M = gPLLTable[i].M;
-                               w100_pwr_state.N_int = gPLLTable[i].N_int;
-                               w100_pwr_state.N_fac = gPLLTable[i].N_fac;
-                               w100_pwr_state.tfgoal = gPLLTable[i].tfgoal;
-                               w100_pwr_state.lock_time = gPLLTable[i].lock_time;
-                               w100_pwr_state.tf20 = 0xff;     /* set highest */
-                               w100_pwr_state.tf80 = 0x00;     /* set lowest */
-
-                               w100_pll_set_clk();
-                               w100_pwr_state.pwm_mode = 0;    /* fast mode */
-                               w100_pwr_state.fast_sclk = freq;
-                               return freq;
-                       }
-                       i++;
-               } while(gPLLTable[i].freq);
+       struct w100_pll_info *pll = par->pll_table;
 
-               if (w100_pwr_state.auto_mode == 1)
-                       break;
-
-               if (w100_pwr_state.sclk_cntl.f.sclk_post_div_fast == 0)
-                       break;
-
-               w100_pwr_state.sclk_cntl.f.sclk_post_div_fast -= 1;
-               writel((u32) (w100_pwr_state.sclk_cntl.val), remapped_regs + mmSCLK_CNTL);
-       }
+       do {
+               if (freq == pll->freq) {
+                       return w100_pll_set_clk(pll);
+               }
+               pll++;
+       } while(pll->freq);
        return 0;
 }
 
-
 /* Set up an initial state.  Some values/fields set
    here will be overwritten. */
-static void w100_pwm_setup(void)
+static void w100_pwm_setup(struct w100fb_par *par)
 {
        w100_pwr_state.clk_pin_cntl.f.osc_en = 0x1;
        w100_pwr_state.clk_pin_cntl.f.osc_gain = 0x1f;
        w100_pwr_state.clk_pin_cntl.f.dont_use_xtalin = 0x0;
        w100_pwr_state.clk_pin_cntl.f.xtalin_pm_en = 0x0;
-       w100_pwr_state.clk_pin_cntl.f.xtalin_dbl_en = 0x0;      /* no freq doubling */
+       w100_pwr_state.clk_pin_cntl.f.xtalin_dbl_en = par->mach->xtal_dbl ? 1 : 0;
        w100_pwr_state.clk_pin_cntl.f.cg_debug = 0x0;
        writel((u32) (w100_pwr_state.clk_pin_cntl.val), remapped_regs + mmCLK_PIN_CNTL);
 
-       w100_pwr_state.sclk_cntl.f.sclk_src_sel = 0x0;  /* Crystal Clk */
-       w100_pwr_state.sclk_cntl.f.sclk_post_div_fast = 0x0;    /* Pfast = 1 */
+       w100_pwr_state.sclk_cntl.f.sclk_src_sel = CLK_SRC_XTAL;
+       w100_pwr_state.sclk_cntl.f.sclk_post_div_fast = 0x0;  /* Pfast = 1 */
        w100_pwr_state.sclk_cntl.f.sclk_clkon_hys = 0x3;
-       w100_pwr_state.sclk_cntl.f.sclk_post_div_slow = 0x0;    /* Pslow = 1 */
+       w100_pwr_state.sclk_cntl.f.sclk_post_div_slow = 0x0;  /* Pslow = 1 */
        w100_pwr_state.sclk_cntl.f.disp_cg_ok2switch_en = 0x0;
-       w100_pwr_state.sclk_cntl.f.sclk_force_reg = 0x0;        /* Dynamic */
-       w100_pwr_state.sclk_cntl.f.sclk_force_disp = 0x0;       /* Dynamic */
-       w100_pwr_state.sclk_cntl.f.sclk_force_mc = 0x0; /* Dynamic */
-       w100_pwr_state.sclk_cntl.f.sclk_force_extmc = 0x0;      /* Dynamic */
-       w100_pwr_state.sclk_cntl.f.sclk_force_cp = 0x0; /* Dynamic */
-       w100_pwr_state.sclk_cntl.f.sclk_force_e2 = 0x0; /* Dynamic */
-       w100_pwr_state.sclk_cntl.f.sclk_force_e3 = 0x0; /* Dynamic */
-       w100_pwr_state.sclk_cntl.f.sclk_force_idct = 0x0;       /* Dynamic */
-       w100_pwr_state.sclk_cntl.f.sclk_force_bist = 0x0;       /* Dynamic */
+       w100_pwr_state.sclk_cntl.f.sclk_force_reg = 0x0;    /* Dynamic */
+       w100_pwr_state.sclk_cntl.f.sclk_force_disp = 0x0;   /* Dynamic */
+       w100_pwr_state.sclk_cntl.f.sclk_force_mc = 0x0;     /* Dynamic */
+       w100_pwr_state.sclk_cntl.f.sclk_force_extmc = 0x0;  /* Dynamic */
+       w100_pwr_state.sclk_cntl.f.sclk_force_cp = 0x0;     /* Dynamic */
+       w100_pwr_state.sclk_cntl.f.sclk_force_e2 = 0x0;     /* Dynamic */
+       w100_pwr_state.sclk_cntl.f.sclk_force_e3 = 0x0;     /* Dynamic */
+       w100_pwr_state.sclk_cntl.f.sclk_force_idct = 0x0;   /* Dynamic */
+       w100_pwr_state.sclk_cntl.f.sclk_force_bist = 0x0;   /* Dynamic */
        w100_pwr_state.sclk_cntl.f.busy_extend_cp = 0x0;
        w100_pwr_state.sclk_cntl.f.busy_extend_e2 = 0x0;
        w100_pwr_state.sclk_cntl.f.busy_extend_e3 = 0x0;
        w100_pwr_state.sclk_cntl.f.busy_extend_idct = 0x0;
        writel((u32) (w100_pwr_state.sclk_cntl.val), remapped_regs + mmSCLK_CNTL);
 
-       w100_pwr_state.pclk_cntl.f.pclk_src_sel = 0x0;  /* Crystal Clk */
-       w100_pwr_state.pclk_cntl.f.pclk_post_div = 0x1; /* P = 2 */
-       w100_pwr_state.pclk_cntl.f.pclk_force_disp = 0x0;       /* Dynamic */
+       w100_pwr_state.pclk_cntl.f.pclk_src_sel = CLK_SRC_XTAL;
+       w100_pwr_state.pclk_cntl.f.pclk_post_div = 0x1;    /* P = 2 */
+       w100_pwr_state.pclk_cntl.f.pclk_force_disp = 0x0;  /* Dynamic */
        writel((u32) (w100_pwr_state.pclk_cntl.val), remapped_regs + mmPCLK_CNTL);
 
-       w100_pwr_state.pll_ref_fb_div.f.pll_ref_div = 0x0;      /* M = 1 */
-       w100_pwr_state.pll_ref_fb_div.f.pll_fb_div_int = 0x0;   /* N = 1.0 */
+       w100_pwr_state.pll_ref_fb_div.f.pll_ref_div = 0x0;     /* M = 1 */
+       w100_pwr_state.pll_ref_fb_div.f.pll_fb_div_int = 0x0;  /* N = 1.0 */
        w100_pwr_state.pll_ref_fb_div.f.pll_fb_div_frac = 0x0;
        w100_pwr_state.pll_ref_fb_div.f.pll_reset_time = 0x5;
        w100_pwr_state.pll_ref_fb_div.f.pll_lock_time = 0xff;
@@ -1154,7 +1089,7 @@ static void w100_pwm_setup(void)
        w100_pwr_state.pll_cntl.f.pll_pwdn = 0x1;
        w100_pwr_state.pll_cntl.f.pll_reset = 0x1;
        w100_pwr_state.pll_cntl.f.pll_pm_en = 0x0;
-       w100_pwr_state.pll_cntl.f.pll_mode = 0x0;       /* uses VCO clock */
+       w100_pwr_state.pll_cntl.f.pll_mode = 0x0;  /* uses VCO clock */
        w100_pwr_state.pll_cntl.f.pll_refclk_sel = 0x0;
        w100_pwr_state.pll_cntl.f.pll_fbclk_sel = 0x0;
        w100_pwr_state.pll_cntl.f.pll_tcpoff = 0x0;
@@ -1164,220 +1099,275 @@ static void w100_pwm_setup(void)
        w100_pwr_state.pll_cntl.f.pll_ioffset = 0x0;
        w100_pwr_state.pll_cntl.f.pll_pecc_mode = 0x0;
        w100_pwr_state.pll_cntl.f.pll_pecc_scon = 0x0;
-       w100_pwr_state.pll_cntl.f.pll_dactal = 0x0;     /* Hi-Z */
+       w100_pwr_state.pll_cntl.f.pll_dactal = 0x0;  /* Hi-Z */
        w100_pwr_state.pll_cntl.f.pll_cp_clip = 0x3;
        w100_pwr_state.pll_cntl.f.pll_conf = 0x2;
        w100_pwr_state.pll_cntl.f.pll_mbctrl = 0x2;
        w100_pwr_state.pll_cntl.f.pll_ring_off = 0x0;
        writel((u32) (w100_pwr_state.pll_cntl.val), remapped_regs + mmPLL_CNTL);
 
-       w100_pwr_state.clk_test_cntl.f.testclk_sel = 0x1;       /* PLLCLK (for testing) */
-       w100_pwr_state.clk_test_cntl.f.start_check_freq = 0x0;
-       w100_pwr_state.clk_test_cntl.f.tstcount_rst = 0x0;
-       writel((u32) (w100_pwr_state.clk_test_cntl.val), remapped_regs + mmCLK_TEST_CNTL);
-
        w100_pwr_state.pwrmgt_cntl.f.pwm_enable = 0x0;
-       w100_pwr_state.pwrmgt_cntl.f.pwm_mode_req = 0x1;        /* normal mode (0, 1, 3) */
+       w100_pwr_state.pwrmgt_cntl.f.pwm_mode_req = 0x1;  /* normal mode (0, 1, 3) */
        w100_pwr_state.pwrmgt_cntl.f.pwm_wakeup_cond = 0x0;
        w100_pwr_state.pwrmgt_cntl.f.pwm_fast_noml_hw_en = 0x0;
        w100_pwr_state.pwrmgt_cntl.f.pwm_noml_fast_hw_en = 0x0;
-       w100_pwr_state.pwrmgt_cntl.f.pwm_fast_noml_cond = 0x1;  /* PM4,ENG */
-       w100_pwr_state.pwrmgt_cntl.f.pwm_noml_fast_cond = 0x1;  /* PM4,ENG */
+       w100_pwr_state.pwrmgt_cntl.f.pwm_fast_noml_cond = 0x1;  /* PM4,ENG */
+       w100_pwr_state.pwrmgt_cntl.f.pwm_noml_fast_cond = 0x1;  /* PM4,ENG */
        w100_pwr_state.pwrmgt_cntl.f.pwm_idle_timer = 0xFF;
        w100_pwr_state.pwrmgt_cntl.f.pwm_busy_timer = 0xFF;
        writel((u32) (w100_pwr_state.pwrmgt_cntl.val), remapped_regs + mmPWRMGT_CNTL);
 
-       w100_pwr_state.auto_mode = 0;   /* manual mode */
-       w100_pwr_state.pwm_mode = 1;    /* normal mode (0, 1, 2) */
-       w100_pwr_state.freq = 50000000; /* 50 MHz */
-       w100_pwr_state.M = 3;   /* M = 4 */
-       w100_pwr_state.N_int = 6;       /* N = 7.0 */
-       w100_pwr_state.N_fac = 0;
-       w100_pwr_state.tfgoal = 0xE0;
-       w100_pwr_state.lock_time = 56;
-       w100_pwr_state.tf20 = 0xff;     /* set highest */
-       w100_pwr_state.tf80 = 0x00;     /* set lowest */
-       w100_pwr_state.tf100 = 0x00;    /* set lowest */
-       w100_pwr_state.fast_sclk = 50;  /* 50.0 MHz */
-       w100_pwr_state.norm_sclk = 12;  /* 12.5 MHz */
+       w100_pwr_state.auto_mode = 0;  /* manual mode */
 }
 
 
-static void w100_init_sharp_lcd(u32 mode)
+/*
+ * Setup the w100 clocks for the specified mode
+ */
+static void w100_init_clocks(struct w100fb_par *par)
 {
-       u32 temp32;
-       union disp_db_buf_cntl_wr_u disp_db_buf_wr_cntl;
+       struct w100_mode *mode = par->mode;
 
-       /* Prevent display updates */
-       disp_db_buf_wr_cntl.f.db_buf_cntl = 0x1e;
-       disp_db_buf_wr_cntl.f.update_db_buf = 0;
-       disp_db_buf_wr_cntl.f.en_db_buf = 0;
-       writel((u32) (disp_db_buf_wr_cntl.val), remapped_regs + mmDISP_DB_BUF_CNTL);
+       if (mode->pixclk_src == CLK_SRC_PLL || mode->sysclk_src == CLK_SRC_PLL)
+               w100_set_pll_freq(par, (par->fastpll_mode && mode->fast_pll_freq) ? mode->fast_pll_freq : mode->pll_freq);
 
-       switch(mode) {
-       case LCD_SHARP_QVGA:
-               w100_set_slowsysclk(12);        /* use crystal -- 12.5MHz */
-               /* not use PLL */
-
-               writel(0x7FFF8000, remapped_regs + mmMC_EXT_MEM_LOCATION);
-               writel(0x85FF8000, remapped_regs + mmMC_FB_LOCATION);
-               writel(0x00000003, remapped_regs + mmLCD_FORMAT);
-               writel(0x00CF1C06, remapped_regs + mmGRAPHIC_CTRL);
-               writel(0x01410145, remapped_regs + mmCRTC_TOTAL);
-               writel(0x01170027, remapped_regs + mmACTIVE_H_DISP);
-               writel(0x01410001, remapped_regs + mmACTIVE_V_DISP);
-               writel(0x01170027, remapped_regs + mmGRAPHIC_H_DISP);
-               writel(0x01410001, remapped_regs + mmGRAPHIC_V_DISP);
-               writel(0x81170027, remapped_regs + mmCRTC_SS);
-               writel(0xA0140000, remapped_regs + mmCRTC_LS);
-               writel(0x00400008, remapped_regs + mmCRTC_REV);
-               writel(0xA0000000, remapped_regs + mmCRTC_DCLK);
-               writel(0xC0140014, remapped_regs + mmCRTC_GS);
-               writel(0x00010141, remapped_regs + mmCRTC_VPOS_GS);
-               writel(0x8015010F, remapped_regs + mmCRTC_GCLK);
-               writel(0x80100110, remapped_regs + mmCRTC_GOE);
-               writel(0x00000000, remapped_regs + mmCRTC_FRAME);
-               writel(0x00000000, remapped_regs + mmCRTC_FRAME_VPOS);
-               writel(0x01CC0000, remapped_regs + mmLCDD_CNTL1);
-               writel(0x0003FFFF, remapped_regs + mmLCDD_CNTL2);
-               writel(0x00FFFF0D, remapped_regs + mmGENLCD_CNTL1);
-               writel(0x003F3003, remapped_regs + mmGENLCD_CNTL2);
-               writel(0x00000000, remapped_regs + mmCRTC_DEFAULT_COUNT);
-               writel(0x0000FF00, remapped_regs + mmLCD_BACKGROUND_COLOR);
-               writel(0x000102aa, remapped_regs + mmGENLCD_CNTL3);
-               writel(0x00800000, remapped_regs + mmGRAPHIC_OFFSET);
-               writel(0x000001e0, remapped_regs + mmGRAPHIC_PITCH);
-               writel(0x000000bf, remapped_regs + mmGPIO_DATA);
-               writel(0x03c0feff, remapped_regs + mmGPIO_CNTL2);
-               writel(0x00000000, remapped_regs + mmGPIO_CNTL1);
-               writel(0x41060010, remapped_regs + mmCRTC_PS1_ACTIVE);
-               break;
-       case LCD_SHARP_VGA:
-               w100_set_slowsysclk(12);        /* use crystal -- 12.5MHz */
-               w100_set_fastsysclk(current_par->fastsysclk_mode);      /* use PLL -- 75.0MHz */
-               w100_pwr_state.pclk_cntl.f.pclk_src_sel = 0x1;
-               w100_pwr_state.pclk_cntl.f.pclk_post_div = 0x2;
-               writel((u32) (w100_pwr_state.pclk_cntl.val), remapped_regs + mmPCLK_CNTL);
-               writel(0x15FF1000, remapped_regs + mmMC_FB_LOCATION);
-               writel(0x9FFF8000, remapped_regs + mmMC_EXT_MEM_LOCATION);
-               writel(0x00000003, remapped_regs + mmLCD_FORMAT);
-               writel(0x00DE1D66, remapped_regs + mmGRAPHIC_CTRL);
-
-               writel(0x0283028B, remapped_regs + mmCRTC_TOTAL);
-               writel(0x02360056, remapped_regs + mmACTIVE_H_DISP);
-               writel(0x02830003, remapped_regs + mmACTIVE_V_DISP);
-               writel(0x02360056, remapped_regs + mmGRAPHIC_H_DISP);
-               writel(0x02830003, remapped_regs + mmGRAPHIC_V_DISP);
-               writel(0x82360056, remapped_regs + mmCRTC_SS);
-               writel(0xA0280000, remapped_regs + mmCRTC_LS);
-               writel(0x00400008, remapped_regs + mmCRTC_REV);
-               writel(0xA0000000, remapped_regs + mmCRTC_DCLK);
-               writel(0x80280028, remapped_regs + mmCRTC_GS);
-               writel(0x02830002, remapped_regs + mmCRTC_VPOS_GS);
-               writel(0x8015010F, remapped_regs + mmCRTC_GCLK);
-               writel(0x80100110, remapped_regs + mmCRTC_GOE);
-               writel(0x00000000, remapped_regs + mmCRTC_FRAME);
-               writel(0x00000000, remapped_regs + mmCRTC_FRAME_VPOS);
-               writel(0x01CC0000, remapped_regs + mmLCDD_CNTL1);
-               writel(0x0003FFFF, remapped_regs + mmLCDD_CNTL2);
-               writel(0x00FFFF0D, remapped_regs + mmGENLCD_CNTL1);
-               writel(0x003F3003, remapped_regs + mmGENLCD_CNTL2);
-               writel(0x00000000, remapped_regs + mmCRTC_DEFAULT_COUNT);
-               writel(0x0000FF00, remapped_regs + mmLCD_BACKGROUND_COLOR);
-               writel(0x000102aa, remapped_regs + mmGENLCD_CNTL3);
-               writel(0x00800000, remapped_regs + mmGRAPHIC_OFFSET);
-               writel(0x000003C0, remapped_regs + mmGRAPHIC_PITCH);
-               writel(0x000000bf, remapped_regs + mmGPIO_DATA);
-               writel(0x03c0feff, remapped_regs + mmGPIO_CNTL2);
-               writel(0x00000000, remapped_regs + mmGPIO_CNTL1);
-               writel(0x41060010, remapped_regs + mmCRTC_PS1_ACTIVE);
-               break;
-       default:
-               break;
-       }
+       w100_pwr_state.sclk_cntl.f.sclk_src_sel = mode->sysclk_src;
+       w100_pwr_state.sclk_cntl.f.sclk_post_div_fast = mode->sysclk_divider;
+       w100_pwr_state.sclk_cntl.f.sclk_post_div_slow = mode->sysclk_divider;
+       writel((u32) (w100_pwr_state.sclk_cntl.val), remapped_regs + mmSCLK_CNTL);
+}
+
+static void w100_init_lcd(struct w100fb_par *par)
+{
+       u32 temp32;
+       struct w100_mode *mode = par->mode;
+       struct w100_gen_regs *regs = par->mach->regs;
+       union active_h_disp_u active_h_disp;
+       union active_v_disp_u active_v_disp;
+       union graphic_h_disp_u graphic_h_disp;
+       union graphic_v_disp_u graphic_v_disp;
+       union crtc_total_u crtc_total;
+
+       /* w3200 doesnt like undefined bits being set so zero register values first */
+
+       active_h_disp.val = 0;
+       active_h_disp.f.active_h_start=mode->left_margin;
+       active_h_disp.f.active_h_end=mode->left_margin + mode->xres;
+       writel(active_h_disp.val, remapped_regs + mmACTIVE_H_DISP);
+
+       active_v_disp.val = 0;
+       active_v_disp.f.active_v_start=mode->upper_margin;
+       active_v_disp.f.active_v_end=mode->upper_margin + mode->yres;
+       writel(active_v_disp.val, remapped_regs + mmACTIVE_V_DISP);
+
+       graphic_h_disp.val = 0;
+       graphic_h_disp.f.graphic_h_start=mode->left_margin;
+       graphic_h_disp.f.graphic_h_end=mode->left_margin + mode->xres;
+       writel(graphic_h_disp.val, remapped_regs + mmGRAPHIC_H_DISP);
+
+       graphic_v_disp.val = 0;
+       graphic_v_disp.f.graphic_v_start=mode->upper_margin;
+       graphic_v_disp.f.graphic_v_end=mode->upper_margin + mode->yres;
+       writel(graphic_v_disp.val, remapped_regs + mmGRAPHIC_V_DISP);
+
+       crtc_total.val = 0;
+       crtc_total.f.crtc_h_total=mode->left_margin  + mode->xres + mode->right_margin;
+       crtc_total.f.crtc_v_total=mode->upper_margin + mode->yres + mode->lower_margin;
+       writel(crtc_total.val, remapped_regs + mmCRTC_TOTAL);
+
+       writel(mode->crtc_ss, remapped_regs + mmCRTC_SS);
+       writel(mode->crtc_ls, remapped_regs + mmCRTC_LS);
+       writel(mode->crtc_gs, remapped_regs + mmCRTC_GS);
+       writel(mode->crtc_vpos_gs, remapped_regs + mmCRTC_VPOS_GS);
+       writel(mode->crtc_rev, remapped_regs + mmCRTC_REV);
+       writel(mode->crtc_dclk, remapped_regs + mmCRTC_DCLK);
+       writel(mode->crtc_gclk, remapped_regs + mmCRTC_GCLK);
+       writel(mode->crtc_goe, remapped_regs + mmCRTC_GOE);
+       writel(mode->crtc_ps1_active, remapped_regs + mmCRTC_PS1_ACTIVE);
+
+       writel(regs->lcd_format, remapped_regs + mmLCD_FORMAT);
+       writel(regs->lcdd_cntl1, remapped_regs + mmLCDD_CNTL1);
+       writel(regs->lcdd_cntl2, remapped_regs + mmLCDD_CNTL2);
+       writel(regs->genlcd_cntl1, remapped_regs + mmGENLCD_CNTL1);
+       writel(regs->genlcd_cntl2, remapped_regs + mmGENLCD_CNTL2);
+       writel(regs->genlcd_cntl3, remapped_regs + mmGENLCD_CNTL3);
+
+       writel(0x00000000, remapped_regs + mmCRTC_FRAME);
+       writel(0x00000000, remapped_regs + mmCRTC_FRAME_VPOS);
+       writel(0x00000000, remapped_regs + mmCRTC_DEFAULT_COUNT);
+       writel(0x0000FF00, remapped_regs + mmLCD_BACKGROUND_COLOR);
 
        /* Hack for overlay in ext memory */
        temp32 = readl(remapped_regs + mmDISP_DEBUG2);
        temp32 |= 0xc0000000;
        writel(temp32, remapped_regs + mmDISP_DEBUG2);
-
-       /* Re-enable display updates */
-       disp_db_buf_wr_cntl.f.db_buf_cntl = 0x1e;
-       disp_db_buf_wr_cntl.f.update_db_buf = 1;
-       disp_db_buf_wr_cntl.f.en_db_buf = 1;
-       writel((u32) (disp_db_buf_wr_cntl.val), remapped_regs + mmDISP_DB_BUF_CNTL);
 }
 
 
-static void w100_set_vga_rotation_regs(u16 divider, unsigned long ctrl, unsigned long offset, unsigned long pitch)
+static void w100_setup_memory(struct w100fb_par *par)
 {
-       w100_pwr_state.pclk_cntl.f.pclk_src_sel = 0x1;
-       w100_pwr_state.pclk_cntl.f.pclk_post_div = divider;
-       writel((u32) (w100_pwr_state.pclk_cntl.val), remapped_regs + mmPCLK_CNTL);
+       union mc_ext_mem_location_u extmem_location;
+       union mc_fb_location_u intmem_location;
+       struct w100_mem_info *mem = par->mach->mem;
+       struct w100_bm_mem_info *bm_mem = par->mach->bm_mem;
 
-       writel(ctrl, remapped_regs + mmGRAPHIC_CTRL);
-       writel(offset, remapped_regs + mmGRAPHIC_OFFSET);
-       writel(pitch, remapped_regs + mmGRAPHIC_PITCH);
+       if (!par->extmem_active) {
+               w100_suspend(W100_SUSPEND_EXTMEM);
 
-       /* Re-enable display updates */
-       writel(0x0000007b, remapped_regs + mmDISP_DB_BUF_CNTL);
-}
+               /* Map Internal Memory at FB Base */
+               intmem_location.f.mc_fb_start = W100_FB_BASE >> 8;
+               intmem_location.f.mc_fb_top = (W100_FB_BASE+MEM_INT_SIZE) >> 8;
+               writel((u32) (intmem_location.val), remapped_regs + mmMC_FB_LOCATION);
 
+               /* Unmap External Memory - value is *probably* irrelevant but may have meaning
+                  to acceleration libraries */
+               extmem_location.f.mc_ext_mem_start = MEM_EXT_BASE_VALUE >> 8;
+               extmem_location.f.mc_ext_mem_top = (MEM_EXT_BASE_VALUE-1) >> 8;
+               writel((u32) (extmem_location.val), remapped_regs + mmMC_EXT_MEM_LOCATION);
+       } else {
+               /* Map Internal Memory to its default location */
+               intmem_location.f.mc_fb_start = MEM_INT_BASE_VALUE >> 8;
+               intmem_location.f.mc_fb_top = (MEM_INT_BASE_VALUE+MEM_INT_SIZE) >> 8;
+               writel((u32) (intmem_location.val), remapped_regs + mmMC_FB_LOCATION);
 
-static void w100_init_vga_rotation(u16 deg)
-{
-       switch(deg) {
-       case 0:
-               w100_set_vga_rotation_regs(0x02, 0x00DE1D66, 0x00800000, 0x000003c0);
-               break;
-       case 90:
-               w100_set_vga_rotation_regs(0x06, 0x00DE1D0e, 0x00895b00, 0x00000500);
-               break;
-       case 180:
-               w100_set_vga_rotation_regs(0x02, 0x00DE1D7e, 0x00895ffc, 0x000003c0);
-               break;
-       case 270:
-               w100_set_vga_rotation_regs(0x06, 0x00DE1D16, 0x008004fc, 0x00000500);
-               break;
-       default:
-               /* not-support */
-               break;
+               /* Map External Memory at FB Base */
+               extmem_location.f.mc_ext_mem_start = W100_FB_BASE >> 8;
+               extmem_location.f.mc_ext_mem_top = (W100_FB_BASE+par->mach->mem->size) >> 8;
+               writel((u32) (extmem_location.val), remapped_regs + mmMC_EXT_MEM_LOCATION);
+
+               writel(0x00007800, remapped_regs + mmMC_BIST_CTRL);
+               writel(mem->ext_cntl, remapped_regs + mmMEM_EXT_CNTL);
+               writel(0x00200021, remapped_regs + mmMEM_SDRAM_MODE_REG);
+               udelay(100);
+               writel(0x80200021, remapped_regs + mmMEM_SDRAM_MODE_REG);
+               udelay(100);
+               writel(mem->sdram_mode_reg, remapped_regs + mmMEM_SDRAM_MODE_REG);
+               udelay(100);
+               writel(mem->ext_timing_cntl, remapped_regs + mmMEM_EXT_TIMING_CNTL);
+               writel(mem->io_cntl, remapped_regs + mmMEM_IO_CNTL);
+               if (bm_mem) {
+                       writel(bm_mem->ext_mem_bw, remapped_regs + mmBM_EXT_MEM_BANDWIDTH);
+                       writel(bm_mem->offset, remapped_regs + mmBM_OFFSET);
+                       writel(bm_mem->ext_timing_ctl, remapped_regs + mmBM_MEM_EXT_TIMING_CNTL);
+                       writel(bm_mem->ext_cntl, remapped_regs + mmBM_MEM_EXT_CNTL);
+                       writel(bm_mem->mode_reg, remapped_regs + mmBM_MEM_MODE_REG);
+                       writel(bm_mem->io_cntl, remapped_regs + mmBM_MEM_IO_CNTL);
+                       writel(bm_mem->config, remapped_regs + mmBM_CONFIG);
+               }
        }
 }
 
-
-static void w100_set_qvga_rotation_regs(unsigned long ctrl, unsigned long offset, unsigned long pitch)
+static void w100_set_dispregs(struct w100fb_par *par)
 {
-       writel(ctrl, remapped_regs + mmGRAPHIC_CTRL);
-       writel(offset, remapped_regs + mmGRAPHIC_OFFSET);
-       writel(pitch, remapped_regs + mmGRAPHIC_PITCH);
+       unsigned long rot=0, divider, offset=0;
+       union graphic_ctrl_u graphic_ctrl;
+
+       /* See if the mode has been rotated */
+       if (par->xres == par->mode->xres) {
+               if (par->flip) {
+                       rot=3; /* 180 degree */
+                       offset=(par->xres * par->yres) - 1;
+               } /* else 0 degree */
+               divider = par->mode->pixclk_divider;
+       } else {
+               if (par->flip) {
+                       rot=2; /* 270 degree */
+                       offset=par->xres - 1;
+               } else {
+                       rot=1; /* 90 degree */
+                       offset=par->xres * (par->yres - 1);
+               }
+               divider = par->mode->pixclk_divider_rotated;
+       }
 
-       /* Re-enable display updates */
-       writel(0x0000007b, remapped_regs + mmDISP_DB_BUF_CNTL);
+       graphic_ctrl.val = 0; /* w32xx doesn't like undefined bits */
+       switch (par->chip_id) {
+               case CHIP_ID_W100:
+                       graphic_ctrl.f_w100.color_depth=6;
+                       graphic_ctrl.f_w100.en_crtc=1;
+                       graphic_ctrl.f_w100.en_graphic_req=1;
+                       graphic_ctrl.f_w100.en_graphic_crtc=1;
+                       graphic_ctrl.f_w100.lcd_pclk_on=1;
+                       graphic_ctrl.f_w100.lcd_sclk_on=1;
+                       graphic_ctrl.f_w100.low_power_on=0;
+                       graphic_ctrl.f_w100.req_freq=0;
+                       graphic_ctrl.f_w100.portrait_mode=rot;
+
+                       /* Zaurus needs this */
+                       switch(par->xres) {
+                               case 240:
+                               case 320:
+                               default:
+                                       graphic_ctrl.f_w100.total_req_graphic=0xa0;
+                                       break;
+                               case 480:
+                               case 640:
+                                       switch(rot) {
+                                               case 0:  /* 0 */
+                                               case 3:  /* 180 */
+                                                       graphic_ctrl.f_w100.low_power_on=1;
+                                                       graphic_ctrl.f_w100.req_freq=5;
+                                               break;
+                                               case 1:  /* 90 */
+                                               case 2:  /* 270 */
+                                                       graphic_ctrl.f_w100.req_freq=4;
+                                                       break;
+                                               default:
+                                                       break;
+                                       }
+                                       graphic_ctrl.f_w100.total_req_graphic=0xf0;
+                                       break;
+                       }
+                       break;
+               case CHIP_ID_W3200:
+               case CHIP_ID_W3220:
+                       graphic_ctrl.f_w32xx.color_depth=6;
+                       graphic_ctrl.f_w32xx.en_crtc=1;
+                       graphic_ctrl.f_w32xx.en_graphic_req=1;
+                       graphic_ctrl.f_w32xx.en_graphic_crtc=1;
+                       graphic_ctrl.f_w32xx.lcd_pclk_on=1;
+                       graphic_ctrl.f_w32xx.lcd_sclk_on=1;
+                       graphic_ctrl.f_w32xx.low_power_on=0;
+                       graphic_ctrl.f_w32xx.req_freq=0;
+                       graphic_ctrl.f_w32xx.total_req_graphic=par->mode->xres >> 1; /* panel xres, not mode */
+                       graphic_ctrl.f_w32xx.portrait_mode=rot;
+                       break;
+       }
+
+       /* Set the pixel clock source and divider */
+       w100_pwr_state.pclk_cntl.f.pclk_src_sel = par->mode->pixclk_src;
+       w100_pwr_state.pclk_cntl.f.pclk_post_div = divider;
+       writel((u32) (w100_pwr_state.pclk_cntl.val), remapped_regs + mmPCLK_CNTL);
+
+       writel(graphic_ctrl.val, remapped_regs + mmGRAPHIC_CTRL);
+       writel(W100_FB_BASE + ((offset * BITS_PER_PIXEL/8)&~0x03UL), remapped_regs + mmGRAPHIC_OFFSET);
+       writel((par->xres*BITS_PER_PIXEL/8), remapped_regs + mmGRAPHIC_PITCH);
 }
 
 
-static void w100_init_qvga_rotation(u16 deg)
+/*
+ * Work out how long the sync pulse lasts
+ * Value is 1/(time in seconds)
+ */
+static void calc_hsync(struct w100fb_par *par)
 {
-       switch(deg) {
-       case 0:
-               w100_set_qvga_rotation_regs(0x00d41c06, 0x00800000, 0x000001e0);
-               break;
-       case 90:
-               w100_set_qvga_rotation_regs(0x00d41c0E, 0x00825580, 0x00000280);
-               break;
-       case 180:
-               w100_set_qvga_rotation_regs(0x00d41c1e, 0x008257fc, 0x000001e0);
-               break;
-       case 270:
-               w100_set_qvga_rotation_regs(0x00d41c16, 0x0080027c, 0x00000280);
-               break;
-       default:
-               /* not-support */
-               break;
-       }
-}
+       unsigned long hsync;
+       struct w100_mode *mode = par->mode;
+       union crtc_ss_u crtc_ss;
+
+       if (mode->pixclk_src == CLK_SRC_XTAL)
+               hsync=par->mach->xtal_freq;
+       else
+               hsync=((par->fastpll_mode && mode->fast_pll_freq) ? mode->fast_pll_freq : mode->pll_freq)*100000;
 
+       hsync /= (w100_pwr_state.pclk_cntl.f.pclk_post_div + 1);
+
+       crtc_ss.val = readl(remapped_regs + mmCRTC_SS);
+       if (crtc_ss.val)
+               par->hsync_len = hsync / (crtc_ss.f.ss_end-crtc_ss.f.ss_start);
+       else
+               par->hsync_len = 0;
+}
 
 static void w100_suspend(u32 mode)
 {
@@ -1387,30 +1377,28 @@ static void w100_suspend(u32 mode)
        writel(0x00FF0000, remapped_regs + mmMC_PERF_MON_CNTL);
 
        val = readl(remapped_regs + mmMEM_EXT_TIMING_CNTL);
-       val &= ~(0x00100000);   /* bit20=0 */
-       val |= 0xFF000000;      /* bit31:24=0xff */
+       val &= ~(0x00100000);  /* bit20=0 */
+       val |= 0xFF000000;     /* bit31:24=0xff */
        writel(val, remapped_regs + mmMEM_EXT_TIMING_CNTL);
 
        val = readl(remapped_regs + mmMEM_EXT_CNTL);
-       val &= ~(0x00040000);   /* bit18=0 */
-       val |= 0x00080000;      /* bit19=1 */
+       val &= ~(0x00040000);  /* bit18=0 */
+       val |= 0x00080000;     /* bit19=1 */
        writel(val, remapped_regs + mmMEM_EXT_CNTL);
 
-       udelay(1);              /* wait 1us */
+       udelay(1);  /* wait 1us */
 
        if (mode == W100_SUSPEND_EXTMEM) {
-
                /* CKE: Tri-State */
                val = readl(remapped_regs + mmMEM_EXT_CNTL);
-               val |= 0x40000000;      /* bit30=1 */
+               val |= 0x40000000;  /* bit30=1 */
                writel(val, remapped_regs + mmMEM_EXT_CNTL);
 
                /* CLK: Stop */
                val = readl(remapped_regs + mmMEM_EXT_CNTL);
-               val &= ~(0x00000001);   /* bit0=0 */
+               val &= ~(0x00000001);  /* bit0=0 */
                writel(val, remapped_regs + mmMEM_EXT_CNTL);
        } else {
-
                writel(0x00000000, remapped_regs + mmSCLK_CNTL);
                writel(0x000000BF, remapped_regs + mmCLK_PIN_CNTL);
                writel(0x00000015, remapped_regs + mmPWRMGT_CNTL);
@@ -1418,43 +1406,16 @@ static void w100_suspend(u32 mode)
                udelay(5);
 
                val = readl(remapped_regs + mmPLL_CNTL);
-               val |= 0x00000004;      /* bit2=1 */
+               val |= 0x00000004;  /* bit2=1 */
                writel(val, remapped_regs + mmPLL_CNTL);
                writel(0x0000001d, remapped_regs + mmPWRMGT_CNTL);
        }
 }
 
-
-static void w100_resume(void)
-{
-       u32 temp32;
-
-       w100_hw_init();
-       w100_pwm_setup();
-
-       temp32 = readl(remapped_regs + mmDISP_DEBUG2);
-       temp32 &= 0xff7fffff;
-       temp32 |= 0x00800000;
-       writel(temp32, remapped_regs + mmDISP_DEBUG2);
-
-       if (current_par->lcdMode == LCD_MODE_480 || current_par->lcdMode == LCD_MODE_640) {
-               w100_init_sharp_lcd(LCD_SHARP_VGA);
-               if (current_par->lcdMode == LCD_MODE_640) {
-                       w100_init_vga_rotation(current_par->rotation_flag ? 270 : 90);
-               }
-       } else {
-               w100_init_sharp_lcd(LCD_SHARP_QVGA);
-               if (current_par->lcdMode == LCD_MODE_320) {
-                       w100_init_qvga_rotation(current_par->rotation_flag ? 270 : 90);
-               }
-       }
-}
-
-
 static void w100_vsync(void)
 {
        u32 tmp;
-       int timeout = 30000; /* VSync timeout = 30[ms] > 16.8[ms] */
+       int timeout = 30000;  /* VSync timeout = 30[ms] > 16.8[ms] */
 
        tmp = readl(remapped_regs + mmACTIVE_V_DISP);
 
@@ -1490,363 +1451,6 @@ static void w100_vsync(void)
        writel(0x00000002, remapped_regs + mmGEN_INT_STATUS);
 }
 
-
-static void w100_InitExtMem(u32 mode)
-{
-       switch(mode) {
-       case LCD_SHARP_QVGA:
-               /* QVGA doesn't use external memory
-                  nothing to do, really. */
-               break;
-       case LCD_SHARP_VGA:
-               writel(0x00007800, remapped_regs + mmMC_BIST_CTRL);
-               writel(0x00040003, remapped_regs + mmMEM_EXT_CNTL);
-               writel(0x00200021, remapped_regs + mmMEM_SDRAM_MODE_REG);
-               udelay(100);
-               writel(0x80200021, remapped_regs + mmMEM_SDRAM_MODE_REG);
-               udelay(100);
-               writel(0x00650021, remapped_regs + mmMEM_SDRAM_MODE_REG);
-               udelay(100);
-               writel(0x10002a4a, remapped_regs + mmMEM_EXT_TIMING_CNTL);
-               writel(0x7ff87012, remapped_regs + mmMEM_IO_CNTL);
-               break;
-       default:
-               break;
-       }
-}
-
-
-#define RESCTL_ADRS     0x00
-#define PHACTRL_ADRS   0x01
-#define DUTYCTRL_ADRS  0x02
-#define POWERREG0_ADRS 0x03
-#define POWERREG1_ADRS 0x04
-#define GPOR3_ADRS             0x05
-#define PICTRL_ADRS     0x06
-#define POLCTRL_ADRS    0x07
-
-#define RESCTL_QVGA     0x01
-#define RESCTL_VGA      0x00
-
-#define POWER1_VW_ON   0x01    /* VW Supply FET ON */
-#define POWER1_GVSS_ON 0x02    /* GVSS(-8V) Power Supply ON */
-#define POWER1_VDD_ON  0x04    /* VDD(8V),SVSS(-4V) Power Supply ON */
-
-#define POWER1_VW_OFF  0x00    /* VW Supply FET OFF */
-#define POWER1_GVSS_OFF        0x00    /* GVSS(-8V) Power Supply OFF */
-#define POWER1_VDD_OFF 0x00    /* VDD(8V),SVSS(-4V) Power Supply OFF */
-
-#define POWER0_COM_DCLK        0x01    /* COM Voltage DC Bias DAC Serial Data Clock */
-#define POWER0_COM_DOUT        0x02    /* COM Voltage DC Bias DAC Serial Data Out */
-#define POWER0_DAC_ON  0x04    /* DAC Power Supply ON */
-#define POWER0_COM_ON  0x08    /* COM Powewr Supply ON */
-#define POWER0_VCC5_ON 0x10    /* VCC5 Power Supply ON */
-
-#define POWER0_DAC_OFF 0x00    /* DAC Power Supply OFF */
-#define POWER0_COM_OFF 0x00    /* COM Powewr Supply OFF */
-#define POWER0_VCC5_OFF        0x00    /* VCC5 Power Supply OFF */
-
-#define PICTRL_INIT_STATE      0x01
-#define PICTRL_INIOFF          0x02
-#define PICTRL_POWER_DOWN      0x04
-#define PICTRL_COM_SIGNAL_OFF  0x08
-#define PICTRL_DAC_SIGNAL_OFF  0x10
-
-#define PICTRL_POWER_ACTIVE    (0)
-
-#define POLCTRL_SYNC_POL_FALL  0x01
-#define POLCTRL_EN_POL_FALL    0x02
-#define POLCTRL_DATA_POL_FALL  0x04
-#define POLCTRL_SYNC_ACT_H     0x08
-#define POLCTRL_EN_ACT_L       0x10
-
-#define POLCTRL_SYNC_POL_RISE  0x00
-#define POLCTRL_EN_POL_RISE    0x00
-#define POLCTRL_DATA_POL_RISE  0x00
-#define POLCTRL_SYNC_ACT_L     0x00
-#define POLCTRL_EN_ACT_H       0x00
-
-#define PHACTRL_PHASE_MANUAL   0x01
-
-#define PHAD_QVGA_DEFAULT_VAL (9)
-#define COMADJ_DEFAULT        (125)
-
-static void lcdtg_ssp_send(u8 adrs, u8 data)
-{
-       w100fb_ssp_send(adrs,data);
-}
-
-/*
- * This is only a psuedo I2C interface. We can't use the standard kernel
- * routines as the interface is write only. We just assume the data is acked...
- */
-static void lcdtg_ssp_i2c_send(u8 data)
-{
-       lcdtg_ssp_send(POWERREG0_ADRS, data);
-       udelay(10);
-}
-
-static void lcdtg_i2c_send_bit(u8 data)
-{
-       lcdtg_ssp_i2c_send(data);
-       lcdtg_ssp_i2c_send(data | POWER0_COM_DCLK);
-       lcdtg_ssp_i2c_send(data);
-}
-
-static void lcdtg_i2c_send_start(u8 base)
-{
-       lcdtg_ssp_i2c_send(base | POWER0_COM_DCLK | POWER0_COM_DOUT);
-       lcdtg_ssp_i2c_send(base | POWER0_COM_DCLK);
-       lcdtg_ssp_i2c_send(base);
-}
-
-static void lcdtg_i2c_send_stop(u8 base)
-{
-       lcdtg_ssp_i2c_send(base);
-       lcdtg_ssp_i2c_send(base | POWER0_COM_DCLK);
-       lcdtg_ssp_i2c_send(base | POWER0_COM_DCLK | POWER0_COM_DOUT);
-}
-
-static void lcdtg_i2c_send_byte(u8 base, u8 data)
-{
-       int i;
-       for (i = 0; i < 8; i++) {
-               if (data & 0x80)
-                       lcdtg_i2c_send_bit(base | POWER0_COM_DOUT);
-               else
-                       lcdtg_i2c_send_bit(base);
-               data <<= 1;
-       }
-}
-
-static void lcdtg_i2c_wait_ack(u8 base)
-{
-       lcdtg_i2c_send_bit(base);
-}
-
-static void lcdtg_set_common_voltage(u8 base_data, u8 data)
-{
-       /* Set Common Voltage to M62332FP via I2C */
-       lcdtg_i2c_send_start(base_data);
-       lcdtg_i2c_send_byte(base_data, 0x9c);
-       lcdtg_i2c_wait_ack(base_data);
-       lcdtg_i2c_send_byte(base_data, 0x00);
-       lcdtg_i2c_wait_ack(base_data);
-       lcdtg_i2c_send_byte(base_data, data);
-       lcdtg_i2c_wait_ack(base_data);
-       lcdtg_i2c_send_stop(base_data);
-}
-
-static struct lcdtg_register_setting {
-       u8 adrs;
-       u8 data;
-       u32 wait;
-} lcdtg_power_on_table[] = {
-
-    /* Initialize Internal Logic & Port */
-    { PICTRL_ADRS,
-      PICTRL_POWER_DOWN | PICTRL_INIOFF | PICTRL_INIT_STATE |
-      PICTRL_COM_SIGNAL_OFF | PICTRL_DAC_SIGNAL_OFF,
-      0 },
-
-    { POWERREG0_ADRS,
-      POWER0_COM_DCLK | POWER0_COM_DOUT | POWER0_DAC_OFF | POWER0_COM_OFF |
-      POWER0_VCC5_OFF,
-      0 },
-
-    { POWERREG1_ADRS,
-      POWER1_VW_OFF | POWER1_GVSS_OFF | POWER1_VDD_OFF,
-      0 },
-
-    /* VDD(+8V),SVSS(-4V) ON */
-    { POWERREG1_ADRS,
-      POWER1_VW_OFF | POWER1_GVSS_OFF | POWER1_VDD_ON /* VDD ON */,
-      3000 },
-
-    /* DAC ON */
-    { POWERREG0_ADRS,
-      POWER0_COM_DCLK | POWER0_COM_DOUT | POWER0_DAC_ON /* DAC ON */ |
-      POWER0_COM_OFF | POWER0_VCC5_OFF,
-      0 },
-
-    /* INIB = H, INI = L  */
-    { PICTRL_ADRS,
-      /* PICTL[0] = H , PICTL[1] = PICTL[2] = PICTL[4] = L */
-      PICTRL_INIT_STATE | PICTRL_COM_SIGNAL_OFF,
-      0 },
-
-    /* Set Common Voltage */
-    { 0xfe, 0, 0 },
-
-    /* VCC5 ON */
-    { POWERREG0_ADRS,
-      POWER0_COM_DCLK | POWER0_COM_DOUT | POWER0_DAC_ON /* DAC ON */ |
-      POWER0_COM_OFF | POWER0_VCC5_ON /* VCC5 ON */,
-      0 },
-
-    /* GVSS(-8V) ON */
-    { POWERREG1_ADRS,
-      POWER1_VW_OFF | POWER1_GVSS_ON /* GVSS ON */ |
-      POWER1_VDD_ON /* VDD ON */,
-      2000 },
-
-    /* COM SIGNAL ON (PICTL[3] = L) */
-    { PICTRL_ADRS,
-      PICTRL_INIT_STATE,
-      0 },
-
-    /* COM ON */
-    { POWERREG0_ADRS,
-      POWER0_COM_DCLK | POWER0_COM_DOUT | POWER0_DAC_ON /* DAC ON */ |
-      POWER0_COM_ON /* COM ON */ | POWER0_VCC5_ON /* VCC5_ON */,
-      0 },
-
-    /* VW ON */
-    { POWERREG1_ADRS,
-      POWER1_VW_ON /* VW ON */ | POWER1_GVSS_ON /* GVSS ON */ |
-      POWER1_VDD_ON /* VDD ON */,
-      0 /* Wait 100ms */ },
-
-    /* Signals output enable */
-    { PICTRL_ADRS,
-      0 /* Signals output enable */,
-      0 },
-
-    { PHACTRL_ADRS,
-      PHACTRL_PHASE_MANUAL,
-      0 },
-
-    /* Initialize for Input Signals from ATI */
-    { POLCTRL_ADRS,
-      POLCTRL_SYNC_POL_RISE | POLCTRL_EN_POL_RISE | POLCTRL_DATA_POL_RISE |
-      POLCTRL_SYNC_ACT_L | POLCTRL_EN_ACT_H,
-      1000 /*100000*/ /* Wait 100ms */ },
-
-    /* end mark */
-    { 0xff, 0, 0 }
-};
-
-static void lcdtg_resume(void)
-{
-       if (current_par->lcdMode == LCD_MODE_480 || current_par->lcdMode == LCD_MODE_640) {
-               lcdtg_hw_init(LCD_SHARP_VGA);
-       } else {
-               lcdtg_hw_init(LCD_SHARP_QVGA);
-       }
-}
-
-static void lcdtg_suspend(void)
-{
-       int i;
-
-       for (i = 0; i < (current_par->xres * current_par->yres); i++) {
-               writew(0xffff, remapped_fbuf + (2*i));
-       }
-
-       /* 60Hz x 2 frame = 16.7msec x 2 = 33.4 msec */
-       mdelay(34);
-
-       /* (1)VW OFF */
-       lcdtg_ssp_send(POWERREG1_ADRS, POWER1_VW_OFF | POWER1_GVSS_ON | POWER1_VDD_ON);
-
-       /* (2)COM OFF */
-       lcdtg_ssp_send(PICTRL_ADRS, PICTRL_COM_SIGNAL_OFF);
-       lcdtg_ssp_send(POWERREG0_ADRS, POWER0_DAC_ON | POWER0_COM_OFF | POWER0_VCC5_ON);
-
-       /* (3)Set Common Voltage Bias 0V */
-       lcdtg_set_common_voltage(POWER0_DAC_ON | POWER0_COM_OFF | POWER0_VCC5_ON, 0);
-
-       /* (4)GVSS OFF */
-       lcdtg_ssp_send(POWERREG1_ADRS, POWER1_VW_OFF | POWER1_GVSS_OFF | POWER1_VDD_ON);
-
-       /* (5)VCC5 OFF */
-       lcdtg_ssp_send(POWERREG0_ADRS, POWER0_DAC_ON | POWER0_COM_OFF | POWER0_VCC5_OFF);
-
-       /* (6)Set PDWN, INIOFF, DACOFF */
-       lcdtg_ssp_send(PICTRL_ADRS, PICTRL_INIOFF | PICTRL_DAC_SIGNAL_OFF |
-                       PICTRL_POWER_DOWN | PICTRL_COM_SIGNAL_OFF);
-
-       /* (7)DAC OFF */
-       lcdtg_ssp_send(POWERREG0_ADRS, POWER0_DAC_OFF | POWER0_COM_OFF | POWER0_VCC5_OFF);
-
-       /* (8)VDD OFF */
-       lcdtg_ssp_send(POWERREG1_ADRS, POWER1_VW_OFF | POWER1_GVSS_OFF | POWER1_VDD_OFF);
-
-}
-
-static void lcdtg_set_phadadj(u32 mode)
-{
-       int adj;
-
-       if (mode == LCD_SHARP_VGA) {
-               /* Setting for VGA */
-               adj = current_par->phadadj;
-               if (adj < 0) {
-                       adj = PHACTRL_PHASE_MANUAL;
-               } else {
-                       adj = ((adj & 0x0f) << 1) | PHACTRL_PHASE_MANUAL;
-               }
-       } else {
-               /* Setting for QVGA */
-               adj = (PHAD_QVGA_DEFAULT_VAL << 1) | PHACTRL_PHASE_MANUAL;
-       }
-       lcdtg_ssp_send(PHACTRL_ADRS, adj);
-}
-
-static void lcdtg_hw_init(u32 mode)
-{
-       int i;
-       int comadj;
-
-       i = 0;
-       while(lcdtg_power_on_table[i].adrs != 0xff) {
-               if (lcdtg_power_on_table[i].adrs == 0xfe) {
-                       /* Set Common Voltage */
-                       comadj = current_par->comadj;
-                       if (comadj < 0) {
-                               comadj = COMADJ_DEFAULT;
-                       }
-                       lcdtg_set_common_voltage((POWER0_DAC_ON | POWER0_COM_OFF | POWER0_VCC5_OFF), comadj);
-               } else if (lcdtg_power_on_table[i].adrs == PHACTRL_ADRS) {
-                       /* Set Phase Adjuct */
-                       lcdtg_set_phadadj(mode);
-               } else {
-                       /* Other */
-                       lcdtg_ssp_send(lcdtg_power_on_table[i].adrs, lcdtg_power_on_table[i].data);
-               }
-               if (lcdtg_power_on_table[i].wait != 0)
-                       udelay(lcdtg_power_on_table[i].wait);
-               i++;
-       }
-
-       switch(mode) {
-       case LCD_SHARP_QVGA:
-               /* Set Lcd Resolution (QVGA) */
-               lcdtg_ssp_send(RESCTL_ADRS, RESCTL_QVGA);
-               break;
-       case LCD_SHARP_VGA:
-               /* Set Lcd Resolution (VGA) */
-               lcdtg_ssp_send(RESCTL_ADRS, RESCTL_VGA);
-               break;
-       default:
-               break;
-       }
-}
-
-static void lcdtg_lcd_change(u32 mode)
-{
-       /* Set Phase Adjuct */
-       lcdtg_set_phadadj(mode);
-
-       if (mode == LCD_SHARP_VGA)
-               /* Set Lcd Resolution (VGA) */
-               lcdtg_ssp_send(RESCTL_ADRS, RESCTL_VGA);
-       else if (mode == LCD_SHARP_QVGA)
-               /* Set Lcd Resolution (QVGA) */
-               lcdtg_ssp_send(RESCTL_ADRS, RESCTL_QVGA);
-}
-
-
 static struct device_driver w100fb_driver = {
        .name           = "w100fb",
        .bus            = &platform_bus_type,
@@ -1870,4 +1474,4 @@ module_init(w100fb_init);
 module_exit(w100fb_cleanup);
 
 MODULE_DESCRIPTION("ATI Imageon w100 framebuffer driver");
-MODULE_LICENSE("GPLv2");
+MODULE_LICENSE("GPL");
index 41624f961237cdcee3b34ada2d785085dc0f5d82..7a58a1e3e427c81d7e6c95a7e4164d3296540d29 100644 (file)
@@ -5,9 +5,12 @@
  *
  * Copyright (C) 2002, ATI Corp.
  * Copyright (C) 2004-2005 Richard Purdie
+ * Copyright (c) 2005 Ian Molton <spyro@f2s.com>
  *
  * Modified to work with 2.6 by Richard Purdie <rpurdie@rpsys.net>
  *
+ * w32xx support by Ian Molton
+ *
  * 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.
@@ -19,7 +22,7 @@
 
 /* Block CIF Start: */
 #define mmCHIP_ID           0x0000
-#define mmREVISION_ID          0x0004
+#define mmREVISION_ID       0x0004
 #define mmWRAP_BUF_A        0x0008
 #define mmWRAP_BUF_B        0x000C
 #define mmWRAP_TOP_DIR      0x0010
@@ -88,7 +91,7 @@
 #define mmDISP_DEBUG        0x04D4
 #define mmDISP_DB_BUF_CNTL  0x04D8
 #define mmDISP_CRC_SIG      0x04DC
-#define mmCRTC_DEFAULT_COUNT   0x04E0
+#define mmCRTC_DEFAULT_COUNT    0x04E0
 #define mmLCD_BACKGROUND_COLOR  0x04E4
 #define mmCRTC_PS2          0x04E8
 #define mmCRTC_PS2_VPOS     0x04EC
 /* Block DISPLAY End: */
 
 /* Block GFX Start: */
-#define mmBRUSH_OFFSET      0x108C
-#define mmBRUSH_Y_X         0x1074
-#define mmDEFAULT_PITCH_OFFSET         0x10A0
-#define mmDEFAULT_SC_BOTTOM_RIGHT      0x10A8
-#define mmDEFAULT2_SC_BOTTOM_RIGHT     0x10AC
-#define mmGLOBAL_ALPHA      0x1210
-#define mmFILTER_COEF       0x1214
-#define mmMVC_CNTL_START    0x11E0
-#define mmE2_ARITHMETIC_CNTL   0x1220
-#define mmENG_CNTL          0x13E8
-#define mmENG_PERF_CNT      0x13F0
+#define mmBRUSH_OFFSET        0x108C
+#define mmBRUSH_Y_X           0x1074
+#define mmDEFAULT_PITCH_OFFSET      0x10A0
+#define mmDEFAULT_SC_BOTTOM_RIGHT   0x10A8
+#define mmDEFAULT2_SC_BOTTOM_RIGHT  0x10AC
+#define mmGLOBAL_ALPHA        0x1210
+#define mmFILTER_COEF         0x1214
+#define mmMVC_CNTL_START      0x11E0
+#define mmE2_ARITHMETIC_CNTL  0x1220
+#define mmENG_CNTL            0x13E8
+#define mmENG_PERF_CNT        0x13F0
 /* Block GFX End: */
 
 /* Block IDCT Start: */
 /* Block IDCT End: */
 
 /* Block MC Start: */
-#define mmMEM_CNTL          0x0180
-#define mmMEM_ARB           0x0184
-#define mmMC_FB_LOCATION    0x0188
-#define mmMEM_EXT_CNTL      0x018C
-#define mmMC_EXT_MEM_LOCATION   0x0190
-#define mmMEM_EXT_TIMING_CNTL   0x0194
-#define mmMEM_SDRAM_MODE_REG   0x0198
-#define mmMEM_IO_CNTL       0x019C
-#define mmMC_DEBUG          0x01A0
-#define mmMC_BIST_CTRL      0x01A4
-#define mmMC_BIST_COLLAR_READ          0x01A8
-#define mmTC_MISMATCH       0x01AC
-#define mmMC_PERF_MON_CNTL  0x01B0
-#define mmMC_PERF_COUNTERS  0x01B4
+#define mmMEM_CNTL             0x0180
+#define mmMEM_ARB              0x0184
+#define mmMC_FB_LOCATION       0x0188
+#define mmMEM_EXT_CNTL         0x018C
+#define mmMC_EXT_MEM_LOCATION  0x0190
+#define mmMEM_EXT_TIMING_CNTL  0x0194
+#define mmMEM_SDRAM_MODE_REG   0x0198
+#define mmMEM_IO_CNTL          0x019C
+#define mmMC_DEBUG             0x01A0
+#define mmMC_BIST_CTRL         0x01A4
+#define mmMC_BIST_COLLAR_READ  0x01A8
+#define mmTC_MISMATCH          0x01AC
+#define mmMC_PERF_MON_CNTL     0x01B0
+#define mmMC_PERF_COUNTERS     0x01B4
 /* Block MC End: */
 
+/* Block BM Start: */
+#define mmBM_EXT_MEM_BANDWIDTH    0x0A00
+#define mmBM_OFFSET               0x0A04
+#define mmBM_MEM_EXT_TIMING_CNTL  0x0A08
+#define mmBM_MEM_EXT_CNTL         0x0A0C
+#define mmBM_MEM_MODE_REG         0x0A10
+#define mmBM_MEM_IO_CNTL          0x0A18
+#define mmBM_CONFIG               0x0A1C
+#define mmBM_STATUS               0x0A20
+#define mmBM_DEBUG                0x0A24
+#define mmBM_PERF_MON_CNTL        0x0A28
+#define mmBM_PERF_COUNTERS        0x0A2C
+#define mmBM_PERF2_MON_CNTL       0x0A30
+#define mmBM_PERF2_COUNTERS       0x0A34
+/* Block BM End: */
+
 /* Block RBBM Start: */
 #define mmWAIT_UNTIL        0x1400
 #define mmISYNC_CNTL        0x1404
 /* Block CG End: */
 
 /* default value definitions */
-#define defWRAP_TOP_DIR     0x00000000
-#define defWRAP_START_DIR      0x00000000
-#define defCFGREG_BASE      0x00000000
-#define defCIF_IO           0x000C0902
-#define defINTF_CNTL        0x00000011
-#define defCPU_DEFAULTS     0x00000006
-#define defHW_INT           0x00000000
-#define defMC_EXT_MEM_LOCATION            0x07ff0000
-#define defTC_MISMATCH      0x00000000
+#define defWRAP_TOP_DIR        0x00000000
+#define defWRAP_START_DIR      0x00000000
+#define defCFGREG_BASE         0x00000000
+#define defCIF_IO              0x000C0902
+#define defINTF_CNTL           0x00000011
+#define defCPU_DEFAULTS        0x00000006
+#define defHW_INT              0x00000000
+#define defMC_EXT_MEM_LOCATION 0x07ff0000
+#define defTC_MISMATCH         0x00000000
 
 #define W100_CFG_BASE          0x0
 #define W100_CFG_LEN           0x10
 #define W100_REG_BASE          0x10000
 #define W100_REG_LEN           0x2000
 #define MEM_INT_BASE_VALUE     0x100000
-#define MEM_INT_TOP_VALUE_W100 0x15ffff
 #define MEM_EXT_BASE_VALUE     0x800000
-#define MEM_EXT_TOP_VALUE      0x9fffff
+#define MEM_INT_SIZE           0x05ffff
+#define MEM_WINDOW_BASE        0x100000
+#define MEM_WINDOW_SIZE        0xf00000
+
 #define WRAP_BUF_BASE_VALUE    0x80000
 #define WRAP_BUF_TOP_VALUE     0xbffff
 
+#define CHIP_ID_W100           0x57411002
+#define CHIP_ID_W3200          0x56441002
+#define CHIP_ID_W3220          0x57441002
 
-/* data structure definitions */
+/* Register structure definitions */
 
 struct wrap_top_dir_t {
-     unsigned long top_addr         : 23;
-     unsigned long                             : 9;
+       unsigned long top_addr  : 23;
+       unsigned long           : 9;
 } __attribute__((packed));
 
 union wrap_top_dir_u {
-     unsigned long val : 32;
-     struct wrap_top_dir_t f;
+       unsigned long val : 32;
+       struct wrap_top_dir_t f;
 } __attribute__((packed));
 
 struct wrap_start_dir_t {
-     unsigned long start_addr       : 23;
-     unsigned long                             : 9;
+       unsigned long start_addr : 23;
+       unsigned long            : 9;
 } __attribute__((packed));
 
 union wrap_start_dir_u {
-     unsigned long val : 32;
-     struct wrap_start_dir_t f;
+       unsigned long val : 32;
+       struct wrap_start_dir_t f;
 } __attribute__((packed));
 
 struct cif_cntl_t {
-     unsigned long swap_reg                    : 2;
-     unsigned long swap_fbuf_1                 : 2;
-     unsigned long swap_fbuf_2                 : 2;
-     unsigned long swap_fbuf_3                 : 2;
-     unsigned long pmi_int_disable             : 1;
-     unsigned long pmi_schmen_disable       : 1;
-     unsigned long intb_oe                     : 1;
-     unsigned long en_wait_to_compensate_dq_prop_dly : 1;
-     unsigned long compensate_wait_rd_size  : 2;
-     unsigned long wait_asserted_timeout_val      : 2;
-     unsigned long wait_masked_val             : 2;
-     unsigned long en_wait_timeout             : 1;
-     unsigned long en_one_clk_setup_before_wait   : 1;
-     unsigned long interrupt_active_high    : 1;
-     unsigned long en_overwrite_straps      : 1;
-     unsigned long strap_wait_active_hi     : 1;
-     unsigned long lat_busy_count              : 2;
-     unsigned long lat_rd_pm4_sclk_busy     : 1;
-     unsigned long dis_system_bits             : 1;
-     unsigned long dis_mr                      : 1;
-     unsigned long cif_spare_1                 : 4;
+       unsigned long swap_reg                 : 2;
+       unsigned long swap_fbuf_1              : 2;
+       unsigned long swap_fbuf_2              : 2;
+       unsigned long swap_fbuf_3              : 2;
+       unsigned long pmi_int_disable          : 1;
+       unsigned long pmi_schmen_disable       : 1;
+       unsigned long intb_oe                  : 1;
+       unsigned long en_wait_to_compensate_dq_prop_dly  : 1;
+       unsigned long compensate_wait_rd_size  : 2;
+       unsigned long wait_asserted_timeout_val  : 2;
+       unsigned long wait_masked_val          : 2;
+       unsigned long en_wait_timeout          : 1;
+       unsigned long en_one_clk_setup_before_wait  : 1;
+       unsigned long interrupt_active_high    : 1;
+       unsigned long en_overwrite_straps      : 1;
+       unsigned long strap_wait_active_hi     : 1;
+       unsigned long lat_busy_count           : 2;
+       unsigned long lat_rd_pm4_sclk_busy     : 1;
+       unsigned long dis_system_bits          : 1;
+       unsigned long dis_mr                   : 1;
+       unsigned long cif_spare_1              : 4;
 } __attribute__((packed));
 
 union cif_cntl_u {
-     unsigned long val : 32;
-     struct cif_cntl_t f;
+       unsigned long val : 32;
+       struct cif_cntl_t f;
 } __attribute__((packed));
 
 struct cfgreg_base_t {
-     unsigned long cfgreg_base      : 24;
-     unsigned long                             : 8;
+       unsigned long cfgreg_base  : 24;
+       unsigned long              : 8;
 } __attribute__((packed));
 
 union cfgreg_base_u {
-     unsigned long val : 32;
-     struct cfgreg_base_t f;
+       unsigned long val : 32;
+       struct cfgreg_base_t f;
 } __attribute__((packed));
 
 struct cif_io_t {
-     unsigned long dq_srp           : 1;
-     unsigned long dq_srn           : 1;
-     unsigned long dq_sp            : 4;
-     unsigned long dq_sn            : 4;
-     unsigned long waitb_srp        : 1;
-     unsigned long waitb_srn        : 1;
-     unsigned long waitb_sp         : 4;
-     unsigned long waitb_sn         : 4;
-     unsigned long intb_srp         : 1;
-     unsigned long intb_srn         : 1;
-     unsigned long intb_sp          : 4;
-     unsigned long intb_sn          : 4;
-     unsigned long                             : 2;
+       unsigned long dq_srp     : 1;
+       unsigned long dq_srn     : 1;
+       unsigned long dq_sp      : 4;
+       unsigned long dq_sn      : 4;
+       unsigned long waitb_srp  : 1;
+       unsigned long waitb_srn  : 1;
+       unsigned long waitb_sp   : 4;
+       unsigned long waitb_sn   : 4;
+       unsigned long intb_srp   : 1;
+       unsigned long intb_srn   : 1;
+       unsigned long intb_sp    : 4;
+       unsigned long intb_sn    : 4;
+       unsigned long            : 2;
 } __attribute__((packed));
 
 union cif_io_u {
-     unsigned long val : 32;
-     struct cif_io_t f;
+       unsigned long val : 32;
+       struct cif_io_t f;
 } __attribute__((packed));
 
 struct cif_read_dbg_t {
-     unsigned long unpacker_pre_fetch_trig_gen  : 2;
-     unsigned long dly_second_rd_fetch_trig     : 1;
-     unsigned long rst_rd_burst_id                     : 1;
-     unsigned long dis_rd_burst_id                     : 1;
-     unsigned long en_block_rd_when_packer_is_not_emp : 1;
-     unsigned long dis_pre_fetch_cntl_sm        : 1;
-     unsigned long rbbm_chrncy_dis                     : 1;
-     unsigned long rbbm_rd_after_wr_lat         : 2;
-     unsigned long dis_be_during_rd                    : 1;
-     unsigned long one_clk_invalidate_pulse     : 1;
-     unsigned long dis_chnl_priority                   : 1;
-     unsigned long rst_read_path_a_pls          : 1;
-     unsigned long rst_read_path_b_pls          : 1;
-     unsigned long dis_reg_rd_fetch_trig        : 1;
-     unsigned long dis_rd_fetch_trig_from_ind_addr : 1;
-     unsigned long dis_rd_same_byte_to_trig_fetch : 1;
-     unsigned long dis_dir_wrap                        : 1;
-     unsigned long dis_ring_buf_to_force_dec    : 1;
-     unsigned long dis_addr_comp_in_16bit       : 1;
-     unsigned long clr_w                               : 1;
-     unsigned long err_rd_tag_is_3                     : 1;
-     unsigned long err_load_when_ful_a          : 1;
-     unsigned long err_load_when_ful_b          : 1;
-     unsigned long                                                     : 7;
+       unsigned long unpacker_pre_fetch_trig_gen  : 2;
+       unsigned long dly_second_rd_fetch_trig     : 1;
+       unsigned long rst_rd_burst_id              : 1;
+       unsigned long dis_rd_burst_id              : 1;
+       unsigned long en_block_rd_when_packer_is_not_emp : 1;
+       unsigned long dis_pre_fetch_cntl_sm        : 1;
+       unsigned long rbbm_chrncy_dis              : 1;
+       unsigned long rbbm_rd_after_wr_lat         : 2;
+       unsigned long dis_be_during_rd             : 1;
+       unsigned long one_clk_invalidate_pulse     : 1;
+       unsigned long dis_chnl_priority            : 1;
+       unsigned long rst_read_path_a_pls          : 1;
+       unsigned long rst_read_path_b_pls          : 1;
+       unsigned long dis_reg_rd_fetch_trig        : 1;
+       unsigned long dis_rd_fetch_trig_from_ind_addr : 1;
+       unsigned long dis_rd_same_byte_to_trig_fetch : 1;
+       unsigned long dis_dir_wrap                 : 1;
+       unsigned long dis_ring_buf_to_force_dec    : 1;
+       unsigned long dis_addr_comp_in_16bit       : 1;
+       unsigned long clr_w                        : 1;
+       unsigned long err_rd_tag_is_3              : 1;
+       unsigned long err_load_when_ful_a          : 1;
+       unsigned long err_load_when_ful_b          : 1;
+       unsigned long                              : 7;
 } __attribute__((packed));
 
 union cif_read_dbg_u {
-     unsigned long val : 32;
-     struct cif_read_dbg_t f;
+       unsigned long val : 32;
+       struct cif_read_dbg_t f;
 } __attribute__((packed));
 
 struct cif_write_dbg_t {
-     unsigned long packer_timeout_count           : 2;
-     unsigned long en_upper_load_cond             : 1;
-     unsigned long en_chnl_change_cond            : 1;
-     unsigned long dis_addr_comp_cond             : 1;
-     unsigned long dis_load_same_byte_addr_cond   : 1;
-     unsigned long dis_timeout_cond                      : 1;
-     unsigned long dis_timeout_during_rbbm        : 1;
-     unsigned long dis_packer_ful_during_rbbm_timeout : 1;
-     unsigned long en_dword_split_to_rbbm         : 1;
-     unsigned long en_dummy_val                          : 1;
-     unsigned long dummy_val_sel                         : 1;
-     unsigned long mask_pm4_wrptr_dec             : 1;
-     unsigned long dis_mc_clean_cond                     : 1;
-     unsigned long err_two_reqi_during_ful        : 1;
-     unsigned long err_reqi_during_idle_clk       : 1;
-     unsigned long err_global                            : 1;
-     unsigned long en_wr_buf_dbg_load             : 1;
-     unsigned long en_wr_buf_dbg_path             : 1;
-     unsigned long sel_wr_buf_byte                       : 3;
-     unsigned long dis_rd_flush_wr                       : 1;
-     unsigned long dis_packer_ful_cond            : 1;
-     unsigned long dis_invalidate_by_ops_chnl     : 1;
-     unsigned long en_halt_when_reqi_err          : 1;
-     unsigned long cif_spare_2                           : 5;
-     unsigned long                                                       : 1;
+       unsigned long packer_timeout_count          : 2;
+       unsigned long en_upper_load_cond            : 1;
+       unsigned long en_chnl_change_cond           : 1;
+       unsigned long dis_addr_comp_cond            : 1;
+       unsigned long dis_load_same_byte_addr_cond  : 1;
+       unsigned long dis_timeout_cond              : 1;
+       unsigned long dis_timeout_during_rbbm       : 1;
+       unsigned long dis_packer_ful_during_rbbm_timeout : 1;
+       unsigned long en_dword_split_to_rbbm        : 1;
+       unsigned long en_dummy_val                  : 1;
+       unsigned long dummy_val_sel                 : 1;
+       unsigned long mask_pm4_wrptr_dec            : 1;
+       unsigned long dis_mc_clean_cond             : 1;
+       unsigned long err_two_reqi_during_ful       : 1;
+       unsigned long err_reqi_during_idle_clk      : 1;
+       unsigned long err_global                    : 1;
+       unsigned long en_wr_buf_dbg_load            : 1;
+       unsigned long en_wr_buf_dbg_path            : 1;
+       unsigned long sel_wr_buf_byte               : 3;
+       unsigned long dis_rd_flush_wr               : 1;
+       unsigned long dis_packer_ful_cond           : 1;
+       unsigned long dis_invalidate_by_ops_chnl    : 1;
+       unsigned long en_halt_when_reqi_err         : 1;
+       unsigned long cif_spare_2                   : 5;
+       unsigned long                               : 1;
 } __attribute__((packed));
 
 union cif_write_dbg_u {
-     unsigned long val : 32;
-     struct cif_write_dbg_t f;
+       unsigned long val : 32;
+       struct cif_write_dbg_t f;
 } __attribute__((packed));
 
 
 struct intf_cntl_t {
-     unsigned char ad_inc_a            : 1;
-     unsigned char ring_buf_a          : 1;
-     unsigned char rd_fetch_trigger_a  : 1;
-     unsigned char rd_data_rdy_a       : 1;
-     unsigned char ad_inc_b            : 1;
-     unsigned char ring_buf_b          : 1;
-     unsigned char rd_fetch_trigger_b  : 1;
-     unsigned char rd_data_rdy_b       : 1;
+       unsigned char ad_inc_a            : 1;
+       unsigned char ring_buf_a          : 1;
+       unsigned char rd_fetch_trigger_a  : 1;
+       unsigned char rd_data_rdy_a       : 1;
+       unsigned char ad_inc_b            : 1;
+       unsigned char ring_buf_b          : 1;
+       unsigned char rd_fetch_trigger_b  : 1;
+       unsigned char rd_data_rdy_b       : 1;
 } __attribute__((packed));
 
 union intf_cntl_u {
-     unsigned char val : 8;
-     struct intf_cntl_t f;
+       unsigned char val : 8;
+       struct intf_cntl_t f;
 } __attribute__((packed));
 
 struct cpu_defaults_t {
-     unsigned char unpack_rd_data   : 1;
-     unsigned char access_ind_addr_a: 1;
-     unsigned char access_ind_addr_b: 1;
-     unsigned char access_scratch_reg             : 1;
-     unsigned char pack_wr_data     : 1;
-     unsigned char transition_size  : 1;
-     unsigned char en_read_buf_mode : 1;
-     unsigned char rd_fetch_scratch : 1;
+       unsigned char unpack_rd_data     : 1;
+       unsigned char access_ind_addr_a  : 1;
+       unsigned char access_ind_addr_b  : 1;
+       unsigned char access_scratch_reg : 1;
+       unsigned char pack_wr_data       : 1;
+       unsigned char transition_size    : 1;
+       unsigned char en_read_buf_mode   : 1;
+       unsigned char rd_fetch_scratch   : 1;
 } __attribute__((packed));
 
 union cpu_defaults_u {
-     unsigned char val : 8;
-     struct cpu_defaults_t f;
+       unsigned char val : 8;
+       struct cpu_defaults_t f;
+} __attribute__((packed));
+
+struct crtc_total_t {
+       unsigned long crtc_h_total : 10;
+       unsigned long              : 6;
+       unsigned long crtc_v_total : 10;
+       unsigned long              : 6;
+} __attribute__((packed));
+
+union crtc_total_u {
+       unsigned long val : 32;
+       struct crtc_total_t f;
+} __attribute__((packed));
+
+struct crtc_ss_t {
+       unsigned long ss_start    : 10;
+       unsigned long             : 6;
+       unsigned long ss_end      : 10;
+       unsigned long             : 2;
+       unsigned long ss_align    : 1;
+       unsigned long ss_pol      : 1;
+       unsigned long ss_run_mode : 1;
+       unsigned long ss_en       : 1;
+} __attribute__((packed));
+
+union crtc_ss_u {
+       unsigned long val : 32;
+       struct crtc_ss_t f;
+} __attribute__((packed));
+
+struct active_h_disp_t {
+       unsigned long active_h_start  : 10;
+       unsigned long                 : 6;
+       unsigned long active_h_end    : 10;
+       unsigned long                 : 6;
+} __attribute__((packed));
+
+union active_h_disp_u {
+       unsigned long val : 32;
+       struct active_h_disp_t f;
+} __attribute__((packed));
+
+struct active_v_disp_t {
+       unsigned long active_v_start  : 10;
+       unsigned long                 : 6;
+       unsigned long active_v_end    : 10;
+       unsigned long                 : 6;
+} __attribute__((packed));
+
+union active_v_disp_u {
+       unsigned long val : 32;
+       struct active_v_disp_t f;
+} __attribute__((packed));
+
+struct graphic_h_disp_t {
+       unsigned long graphic_h_start : 10;
+       unsigned long                 : 6;
+       unsigned long graphic_h_end   : 10;
+       unsigned long                 : 6;
+} __attribute__((packed));
+
+union graphic_h_disp_u {
+       unsigned long val : 32;
+       struct graphic_h_disp_t f;
+} __attribute__((packed));
+
+struct graphic_v_disp_t {
+       unsigned long graphic_v_start : 10;
+       unsigned long                 : 6;
+       unsigned long graphic_v_end   : 10;
+       unsigned long                 : 6;
+} __attribute__((packed));
+
+union graphic_v_disp_u{
+       unsigned long val : 32;
+       struct graphic_v_disp_t f;
+} __attribute__((packed));
+
+struct graphic_ctrl_t_w100 {
+       unsigned long color_depth       : 3;
+       unsigned long portrait_mode     : 2;
+       unsigned long low_power_on      : 1;
+       unsigned long req_freq          : 4;
+       unsigned long en_crtc           : 1;
+       unsigned long en_graphic_req    : 1;
+       unsigned long en_graphic_crtc   : 1;
+       unsigned long total_req_graphic : 9;
+       unsigned long lcd_pclk_on       : 1;
+       unsigned long lcd_sclk_on       : 1;
+       unsigned long pclk_running      : 1;
+       unsigned long sclk_running      : 1;
+       unsigned long                   : 6;
+} __attribute__((packed));
+
+struct graphic_ctrl_t_w32xx {
+       unsigned long color_depth       : 3;
+       unsigned long portrait_mode     : 2;
+       unsigned long low_power_on      : 1;
+       unsigned long req_freq          : 4;
+       unsigned long en_crtc           : 1;
+       unsigned long en_graphic_req    : 1;
+       unsigned long en_graphic_crtc   : 1;
+       unsigned long total_req_graphic : 10;
+       unsigned long lcd_pclk_on       : 1;
+       unsigned long lcd_sclk_on       : 1;
+       unsigned long pclk_running      : 1;
+       unsigned long sclk_running      : 1;
+       unsigned long                   : 5;
+} __attribute__((packed));
+
+union graphic_ctrl_u {
+       unsigned long val : 32;
+       struct graphic_ctrl_t_w100 f_w100;
+       struct graphic_ctrl_t_w32xx f_w32xx;
 } __attribute__((packed));
 
 struct video_ctrl_t {
-     unsigned long video_mode       : 1;
-     unsigned long keyer_en         : 1;
-     unsigned long en_video_req     : 1;
-     unsigned long en_graphic_req_video           : 1;
-     unsigned long en_video_crtc    : 1;
-     unsigned long video_hor_exp    : 2;
-     unsigned long video_ver_exp    : 2;
-     unsigned long uv_combine       : 1;
-     unsigned long total_req_video  : 9;
-     unsigned long video_ch_sel     : 1;
-     unsigned long video_portrait   : 2;
-     unsigned long yuv2rgb_en       : 1;
-     unsigned long yuv2rgb_option   : 1;
-     unsigned long video_inv_hor    : 1;
-     unsigned long video_inv_ver    : 1;
-     unsigned long gamma_sel        : 2;
-     unsigned long dis_limit        : 1;
-     unsigned long en_uv_hblend     : 1;
-     unsigned long rgb_gamma_sel    : 2;
+       unsigned long video_mode       : 1;
+       unsigned long keyer_en         : 1;
+       unsigned long en_video_req     : 1;
+       unsigned long en_graphic_req_video  : 1;
+       unsigned long en_video_crtc    : 1;
+       unsigned long video_hor_exp    : 2;
+       unsigned long video_ver_exp    : 2;
+       unsigned long uv_combine       : 1;
+       unsigned long total_req_video  : 9;
+       unsigned long video_ch_sel     : 1;
+       unsigned long video_portrait   : 2;
+       unsigned long yuv2rgb_en       : 1;
+       unsigned long yuv2rgb_option   : 1;
+       unsigned long video_inv_hor    : 1;
+       unsigned long video_inv_ver    : 1;
+       unsigned long gamma_sel        : 2;
+       unsigned long dis_limit        : 1;
+       unsigned long en_uv_hblend     : 1;
+       unsigned long rgb_gamma_sel    : 2;
 } __attribute__((packed));
 
 union video_ctrl_u {
-     unsigned long val : 32;
-     struct video_ctrl_t f;
+       unsigned long val : 32;
+       struct video_ctrl_t f;
 } __attribute__((packed));
 
 struct disp_db_buf_cntl_rd_t {
-     unsigned long en_db_buf           : 1;
-     unsigned long update_db_buf_done   : 1;
-     unsigned long db_buf_cntl         : 6;
-     unsigned long                                     : 24;
+       unsigned long en_db_buf           : 1;
+       unsigned long update_db_buf_done  : 1;
+       unsigned long db_buf_cntl         : 6;
+       unsigned long                     : 24;
 } __attribute__((packed));
 
 union disp_db_buf_cntl_rd_u {
-     unsigned long val : 32;
-     struct disp_db_buf_cntl_rd_t f;
+       unsigned long val : 32;
+       struct disp_db_buf_cntl_rd_t f;
 } __attribute__((packed));
 
 struct disp_db_buf_cntl_wr_t {
-     unsigned long en_db_buf        : 1;
-     unsigned long update_db_buf    : 1;
-     unsigned long db_buf_cntl      : 6;
-     unsigned long    : 24;
+       unsigned long en_db_buf      : 1;
+       unsigned long update_db_buf  : 1;
+       unsigned long db_buf_cntl    : 6;
+       unsigned long                : 24;
 } __attribute__((packed));
 
 union disp_db_buf_cntl_wr_u {
-     unsigned long val : 32;
-     struct disp_db_buf_cntl_wr_t f;
+       unsigned long val : 32;
+       struct disp_db_buf_cntl_wr_t f;
 } __attribute__((packed));
 
 struct gamma_value1_t {
-     unsigned long gamma1           : 8;
-     unsigned long gamma2           : 8;
-     unsigned long gamma3           : 8;
-     unsigned long gamma4           : 8;
+       unsigned long gamma1   : 8;
+       unsigned long gamma2   : 8;
+       unsigned long gamma3   : 8;
+       unsigned long gamma4   : 8;
 } __attribute__((packed));
 
 union gamma_value1_u {
-     unsigned long val : 32;
-     struct gamma_value1_t f;
+       unsigned long val : 32;
+       struct gamma_value1_t f;
 } __attribute__((packed));
 
 struct gamma_value2_t {
-     unsigned long gamma5           : 8;
-     unsigned long gamma6           : 8;
-     unsigned long gamma7           : 8;
-     unsigned long gamma8           : 8;
+       unsigned long gamma5   : 8;
+       unsigned long gamma6   : 8;
+       unsigned long gamma7   : 8;
+       unsigned long gamma8   : 8;
 } __attribute__((packed));
 
 union gamma_value2_u {
-     unsigned long val : 32;
-     struct gamma_value2_t f;
+       unsigned long val : 32;
+       struct gamma_value2_t f;
 } __attribute__((packed));
 
 struct gamma_slope_t {
-     unsigned long slope1           : 3;
-     unsigned long slope2           : 3;
-     unsigned long slope3           : 3;
-     unsigned long slope4           : 3;
-     unsigned long slope5           : 3;
-     unsigned long slope6           : 3;
-     unsigned long slope7           : 3;
-     unsigned long slope8           : 3;
-     unsigned long                             : 8;
+       unsigned long slope1   : 3;
+       unsigned long slope2   : 3;
+       unsigned long slope3   : 3;
+       unsigned long slope4   : 3;
+       unsigned long slope5   : 3;
+       unsigned long slope6   : 3;
+       unsigned long slope7   : 3;
+       unsigned long slope8   : 3;
+       unsigned long          : 8;
 } __attribute__((packed));
 
 union gamma_slope_u {
-     unsigned long val : 32;
-     struct gamma_slope_t f;
+       unsigned long val : 32;
+       struct gamma_slope_t f;
 } __attribute__((packed));
 
 struct mc_ext_mem_location_t {
-     unsigned long mc_ext_mem_start : 16;
-     unsigned long mc_ext_mem_top   : 16;
+       unsigned long mc_ext_mem_start : 16;
+       unsigned long mc_ext_mem_top   : 16;
 } __attribute__((packed));
 
 union mc_ext_mem_location_u {
-     unsigned long val : 32;
-     struct mc_ext_mem_location_t f;
+       unsigned long val : 32;
+       struct mc_ext_mem_location_t f;
+} __attribute__((packed));
+
+struct mc_fb_location_t {
+       unsigned long mc_fb_start      : 16;
+       unsigned long mc_fb_top        : 16;
+} __attribute__((packed));
+
+union mc_fb_location_u {
+       unsigned long val : 32;
+       struct mc_fb_location_t f;
 } __attribute__((packed));
 
 struct clk_pin_cntl_t {
-     unsigned long osc_en           : 1;
-     unsigned long osc_gain         : 5;
-     unsigned long dont_use_xtalin  : 1;
-     unsigned long xtalin_pm_en     : 1;
-     unsigned long xtalin_dbl_en    : 1;
-     unsigned long                             : 7;
-     unsigned long cg_debug         : 16;
+       unsigned long osc_en           : 1;
+       unsigned long osc_gain         : 5;
+       unsigned long dont_use_xtalin  : 1;
+       unsigned long xtalin_pm_en     : 1;
+       unsigned long xtalin_dbl_en    : 1;
+       unsigned long                  : 7;
+       unsigned long cg_debug         : 16;
 } __attribute__((packed));
 
 union clk_pin_cntl_u {
-     unsigned long val : 32;
-     struct clk_pin_cntl_t f;
+       unsigned long val : 32;
+       struct clk_pin_cntl_t f;
 } __attribute__((packed));
 
 struct pll_ref_fb_div_t {
-     unsigned long pll_ref_div      : 4;
-     unsigned long                             : 4;
-     unsigned long pll_fb_div_int   : 6;
-     unsigned long                             : 2;
-     unsigned long pll_fb_div_frac  : 3;
-     unsigned long                             : 1;
-     unsigned long pll_reset_time   : 4;
-     unsigned long pll_lock_time    : 8;
+       unsigned long pll_ref_div      : 4;
+       unsigned long                  : 4;
+       unsigned long pll_fb_div_int   : 6;
+       unsigned long                  : 2;
+       unsigned long pll_fb_div_frac  : 3;
+       unsigned long                  : 1;
+       unsigned long pll_reset_time   : 4;
+       unsigned long pll_lock_time    : 8;
 } __attribute__((packed));
 
 union pll_ref_fb_div_u {
-     unsigned long val : 32;
-     struct pll_ref_fb_div_t f;
+       unsigned long val : 32;
+       struct pll_ref_fb_div_t f;
 } __attribute__((packed));
 
 struct pll_cntl_t {
-     unsigned long pll_pwdn         : 1;
-     unsigned long pll_reset        : 1;
-     unsigned long pll_pm_en        : 1;
-     unsigned long pll_mode         : 1;
-     unsigned long pll_refclk_sel   : 1;
-     unsigned long pll_fbclk_sel    : 1;
-     unsigned long pll_tcpoff       : 1;
-     unsigned long pll_pcp          : 3;
-     unsigned long pll_pvg          : 3;
-     unsigned long pll_vcofr        : 1;
-     unsigned long pll_ioffset      : 2;
-     unsigned long pll_pecc_mode    : 2;
-     unsigned long pll_pecc_scon    : 2;
-     unsigned long pll_dactal       : 4;
-     unsigned long pll_cp_clip      : 2;
-     unsigned long pll_conf         : 3;
-     unsigned long pll_mbctrl       : 2;
-     unsigned long pll_ring_off     : 1;
+       unsigned long pll_pwdn        : 1;
+       unsigned long pll_reset       : 1;
+       unsigned long pll_pm_en       : 1;
+       unsigned long pll_mode        : 1;
+       unsigned long pll_refclk_sel  : 1;
+       unsigned long pll_fbclk_sel   : 1;
+       unsigned long pll_tcpoff      : 1;
+       unsigned long pll_pcp         : 3;
+       unsigned long pll_pvg         : 3;
+       unsigned long pll_vcofr       : 1;
+       unsigned long pll_ioffset     : 2;
+       unsigned long pll_pecc_mode   : 2;
+       unsigned long pll_pecc_scon   : 2;
+       unsigned long pll_dactal      : 4;
+       unsigned long pll_cp_clip     : 2;
+       unsigned long pll_conf        : 3;
+       unsigned long pll_mbctrl      : 2;
+       unsigned long pll_ring_off    : 1;
 } __attribute__((packed));
 
 union pll_cntl_u {
-     unsigned long val : 32;
-     struct pll_cntl_t f;
+       unsigned long val : 32;
+       struct pll_cntl_t f;
 } __attribute__((packed));
 
 struct sclk_cntl_t {
-     unsigned long sclk_src_sel        : 2;
-     unsigned long                                     : 2;
-     unsigned long sclk_post_div_fast   : 4;
-     unsigned long sclk_clkon_hys      : 3;
-     unsigned long sclk_post_div_slow   : 4;
-     unsigned long disp_cg_ok2switch_en : 1;
-     unsigned long sclk_force_reg      : 1;
-     unsigned long sclk_force_disp     : 1;
-     unsigned long sclk_force_mc       : 1;
-     unsigned long sclk_force_extmc    : 1;
-     unsigned long sclk_force_cp       : 1;
-     unsigned long sclk_force_e2       : 1;
-     unsigned long sclk_force_e3       : 1;
-     unsigned long sclk_force_idct     : 1;
-     unsigned long sclk_force_bist     : 1;
-     unsigned long busy_extend_cp      : 1;
-     unsigned long busy_extend_e2      : 1;
-     unsigned long busy_extend_e3      : 1;
-     unsigned long busy_extend_idct    : 1;
-     unsigned long                                     : 3;
+       unsigned long sclk_src_sel         : 2;
+       unsigned long                      : 2;
+       unsigned long sclk_post_div_fast   : 4;
+       unsigned long sclk_clkon_hys       : 3;
+       unsigned long sclk_post_div_slow   : 4;
+       unsigned long disp_cg_ok2switch_en : 1;
+       unsigned long sclk_force_reg       : 1;
+       unsigned long sclk_force_disp      : 1;
+       unsigned long sclk_force_mc        : 1;
+       unsigned long sclk_force_extmc     : 1;
+       unsigned long sclk_force_cp        : 1;
+       unsigned long sclk_force_e2        : 1;
+       unsigned long sclk_force_e3        : 1;
+       unsigned long sclk_force_idct      : 1;
+       unsigned long sclk_force_bist      : 1;
+       unsigned long busy_extend_cp       : 1;
+       unsigned long busy_extend_e2       : 1;
+       unsigned long busy_extend_e3       : 1;
+       unsigned long busy_extend_idct     : 1;
+       unsigned long                      : 3;
 } __attribute__((packed));
 
 union sclk_cntl_u {
-     unsigned long val : 32;
-     struct sclk_cntl_t f;
+       unsigned long val : 32;
+       struct sclk_cntl_t f;
 } __attribute__((packed));
 
 struct pclk_cntl_t {
-     unsigned long pclk_src_sel     : 2;
-     unsigned long                             : 2;
-     unsigned long pclk_post_div    : 4;
-     unsigned long                             : 8;
-     unsigned long pclk_force_disp  : 1;
-     unsigned long                             : 15;
+       unsigned long pclk_src_sel     : 2;
+       unsigned long                  : 2;
+       unsigned long pclk_post_div    : 4;
+       unsigned long                  : 8;
+       unsigned long pclk_force_disp  : 1;
+       unsigned long                  : 15;
 } __attribute__((packed));
 
 union pclk_cntl_u {
-     unsigned long val : 32;
-     struct pclk_cntl_t f;
+       unsigned long val : 32;
+       struct pclk_cntl_t f;
 } __attribute__((packed));
 
+
+#define TESTCLK_SRC_PLL   0x01
+#define TESTCLK_SRC_SCLK  0x02
+#define TESTCLK_SRC_PCLK  0x03
+/* 4 and 5 seem to by XTAL/M */
+#define TESTCLK_SRC_XTAL  0x06
+
 struct clk_test_cntl_t {
-     unsigned long testclk_sel      : 4;
-     unsigned long                             : 3;
-     unsigned long start_check_freq : 1;
-     unsigned long tstcount_rst     : 1;
-     unsigned long                             : 15;
-     unsigned long test_count       : 8;
+       unsigned long testclk_sel      : 4;
+       unsigned long                  : 3;
+       unsigned long start_check_freq : 1;
+       unsigned long tstcount_rst     : 1;
+       unsigned long                  : 15;
+       unsigned long test_count       : 8;
 } __attribute__((packed));
 
 union clk_test_cntl_u {
-     unsigned long val : 32;
-     struct clk_test_cntl_t f;
+       unsigned long val : 32;
+       struct clk_test_cntl_t f;
 } __attribute__((packed));
 
 struct pwrmgt_cntl_t {
-     unsigned long pwm_enable          : 1;
-     unsigned long                                     : 1;
-     unsigned long pwm_mode_req         : 2;
-     unsigned long pwm_wakeup_cond      : 2;
-     unsigned long pwm_fast_noml_hw_en  : 1;
-     unsigned long pwm_noml_fast_hw_en  : 1;
-     unsigned long pwm_fast_noml_cond   : 4;
-     unsigned long pwm_noml_fast_cond   : 4;
-     unsigned long pwm_idle_timer      : 8;
-     unsigned long pwm_busy_timer      : 8;
+       unsigned long pwm_enable           : 1;
+       unsigned long                      : 1;
+       unsigned long pwm_mode_req         : 2;
+       unsigned long pwm_wakeup_cond      : 2;
+       unsigned long pwm_fast_noml_hw_en  : 1;
+       unsigned long pwm_noml_fast_hw_en  : 1;
+       unsigned long pwm_fast_noml_cond   : 4;
+       unsigned long pwm_noml_fast_cond   : 4;
+       unsigned long pwm_idle_timer       : 8;
+       unsigned long pwm_busy_timer       : 8;
 } __attribute__((packed));
 
 union pwrmgt_cntl_u {
-     unsigned long val : 32;
-     struct pwrmgt_cntl_t f;
+       unsigned long val : 32;
+       struct pwrmgt_cntl_t f;
 } __attribute__((packed));
 
 #endif
index ed78d24ee4263fcfc2495b7f0efbdd6af561c10d..5e817902cb3b408db8c02467a47b856d64eb8b09 100644 (file)
@@ -382,10 +382,8 @@ config QUOTA
          usage (also called disk quotas). Currently, it works for the
          ext2, ext3, and reiserfs file system. ext3 also supports journalled
          quotas for which you don't need to run quotacheck(8) after an unclean
-         shutdown. You need additional software in order to use quota support
-         (you can download sources from
-         <http://www.sf.net/projects/linuxquota/>). For further details, read
-         the Quota mini-HOWTO, available from
+         shutdown.
+         For further details, read the Quota mini-HOWTO, available from
          <http://www.tldp.org/docs.html#howto>, or the documentation provided
          with the quota tools. Probably the quota support is only useful for
          multi user systems. If unsure, say N.
@@ -403,8 +401,7 @@ config QFMT_V2
        depends on QUOTA
        help
          This quota format allows using quotas with 32-bit UIDs/GIDs. If you
-         need this functionality say Y here. Note that you will need recent
-         quota utilities (>= 3.01) for new quota format with this kernel.
+         need this functionality say Y here.
 
 config QUOTACTL
        bool
@@ -816,6 +813,18 @@ config RAMFS
          To compile this as a module, choose M here: the module will be called
          ramfs.
 
+config RELAYFS_FS
+       tristate "Relayfs file system support"
+       ---help---
+         Relayfs is a high-speed data relay filesystem designed to provide
+         an efficient mechanism for tools and facilities to relay large
+         amounts of data from kernel space to user space.
+
+         To compile this code as a module, choose M here: the module will be
+         called relayfs.
+
+         If unsure, say N.
+
 endmenu
 
 menu "Miscellaneous filesystems"
index cf95eb894fd53776b3429354834aac373f0e8170..15158309dee4ae42d2caf7429c274e20945efcbf 100644 (file)
@@ -90,6 +90,7 @@ obj-$(CONFIG_AUTOFS_FS)               += autofs/
 obj-$(CONFIG_AUTOFS4_FS)       += autofs4/
 obj-$(CONFIG_ADFS_FS)          += adfs/
 obj-$(CONFIG_UDF_FS)           += udf/
+obj-$(CONFIG_RELAYFS_FS)       += relayfs/
 obj-$(CONFIG_SUN_OPENPROMFS)   += openpromfs/
 obj-$(CONFIG_JFS_FS)           += jfs/
 obj-$(CONFIG_XFS_FS)           += xfs/
index 1f2d4649b188015076353340055a4ebdd1e0a6b1..a7d4fd3a329954e18c787673ccf4a15e4369b92f 100644 (file)
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -25,6 +25,7 @@
 #include <linux/module.h>
 #include <linux/mempool.h>
 #include <linux/workqueue.h>
+#include <scsi/sg.h>           /* for struct sg_iovec */
 
 #define BIO_POOL_SIZE 256
 
@@ -104,18 +105,22 @@ static inline struct bio_vec *bvec_alloc_bs(unsigned int __nocast gfp_mask, int
        return bvl;
 }
 
-/*
- * default destructor for a bio allocated with bio_alloc_bioset()
- */
-static void bio_destructor(struct bio *bio)
+void bio_free(struct bio *bio, struct bio_set *bio_set)
 {
        const int pool_idx = BIO_POOL_IDX(bio);
-       struct bio_set *bs = bio->bi_set;
 
        BIO_BUG_ON(pool_idx >= BIOVEC_NR_POOLS);
 
-       mempool_free(bio->bi_io_vec, bs->bvec_pools[pool_idx]);
-       mempool_free(bio, bs->bio_pool);
+       mempool_free(bio->bi_io_vec, bio_set->bvec_pools[pool_idx]);
+       mempool_free(bio, bio_set->bio_pool);
+}
+
+/*
+ * default destructor for a bio allocated with bio_alloc_bioset()
+ */
+static void bio_fs_destructor(struct bio *bio)
+{
+       bio_free(bio, fs_bio_set);
 }
 
 inline void bio_init(struct bio *bio)
@@ -171,8 +176,6 @@ struct bio *bio_alloc_bioset(unsigned int __nocast gfp_mask, int nr_iovecs, stru
                        bio->bi_max_vecs = bvec_slabs[idx].nr_vecs;
                }
                bio->bi_io_vec = bvl;
-               bio->bi_destructor = bio_destructor;
-               bio->bi_set = bs;
        }
 out:
        return bio;
@@ -180,7 +183,12 @@ out:
 
 struct bio *bio_alloc(unsigned int __nocast gfp_mask, int nr_iovecs)
 {
-       return bio_alloc_bioset(gfp_mask, nr_iovecs, fs_bio_set);
+       struct bio *bio = bio_alloc_bioset(gfp_mask, nr_iovecs, fs_bio_set);
+
+       if (bio)
+               bio->bi_destructor = bio_fs_destructor;
+
+       return bio;
 }
 
 void zero_fill_bio(struct bio *bio)
@@ -273,8 +281,10 @@ struct bio *bio_clone(struct bio *bio, unsigned int __nocast gfp_mask)
 {
        struct bio *b = bio_alloc_bioset(gfp_mask, bio->bi_max_vecs, fs_bio_set);
 
-       if (b)
+       if (b) {
+               b->bi_destructor = bio_fs_destructor;
                __bio_clone(b, bio);
+       }
 
        return b;
 }
@@ -546,22 +556,34 @@ out_bmd:
        return ERR_PTR(ret);
 }
 
-static struct bio *__bio_map_user(request_queue_t *q, struct block_device *bdev,
-                                 unsigned long uaddr, unsigned int len,
-                                 int write_to_vm)
+static struct bio *__bio_map_user_iov(request_queue_t *q,
+                                     struct block_device *bdev,
+                                     struct sg_iovec *iov, int iov_count,
+                                     int write_to_vm)
 {
-       unsigned long end = (uaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
-       unsigned long start = uaddr >> PAGE_SHIFT;
-       const int nr_pages = end - start;
-       int ret, offset, i;
+       int i, j;
+       int nr_pages = 0;
        struct page **pages;
        struct bio *bio;
+       int cur_page = 0;
+       int ret, offset;
 
-       /*
-        * transfer and buffer must be aligned to at least hardsector
-        * size for now, in the future we can relax this restriction
-        */
-       if ((uaddr & queue_dma_alignment(q)) || (len & queue_dma_alignment(q)))
+       for (i = 0; i < iov_count; i++) {
+               unsigned long uaddr = (unsigned long)iov[i].iov_base;
+               unsigned long len = iov[i].iov_len;
+               unsigned long end = (uaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
+               unsigned long start = uaddr >> PAGE_SHIFT;
+
+               nr_pages += end - start;
+               /*
+                * transfer and buffer must be aligned to at least hardsector
+                * size for now, in the future we can relax this restriction
+                */
+               if ((uaddr & queue_dma_alignment(q)) || (len & queue_dma_alignment(q)))
+                       return ERR_PTR(-EINVAL);
+       }
+
+       if (!nr_pages)
                return ERR_PTR(-EINVAL);
 
        bio = bio_alloc(GFP_KERNEL, nr_pages);
@@ -573,42 +595,54 @@ static struct bio *__bio_map_user(request_queue_t *q, struct block_device *bdev,
        if (!pages)
                goto out;
 
-       down_read(&current->mm->mmap_sem);
-       ret = get_user_pages(current, current->mm, uaddr, nr_pages,
-                                               write_to_vm, 0, pages, NULL);
-       up_read(&current->mm->mmap_sem);
-
-       if (ret < nr_pages)
-               goto out;
-
-       bio->bi_bdev = bdev;
-
-       offset = uaddr & ~PAGE_MASK;
-       for (i = 0; i < nr_pages; i++) {
-               unsigned int bytes = PAGE_SIZE - offset;
-
-               if (len <= 0)
-                       break;
-
-               if (bytes > len)
-                       bytes = len;
+       memset(pages, 0, nr_pages * sizeof(struct page *));
+
+       for (i = 0; i < iov_count; i++) {
+               unsigned long uaddr = (unsigned long)iov[i].iov_base;
+               unsigned long len = iov[i].iov_len;
+               unsigned long end = (uaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
+               unsigned long start = uaddr >> PAGE_SHIFT;
+               const int local_nr_pages = end - start;
+               const int page_limit = cur_page + local_nr_pages;
+               
+               down_read(&current->mm->mmap_sem);
+               ret = get_user_pages(current, current->mm, uaddr,
+                                    local_nr_pages,
+                                    write_to_vm, 0, &pages[cur_page], NULL);
+               up_read(&current->mm->mmap_sem);
+
+               if (ret < local_nr_pages)
+                       goto out_unmap;
+
+
+               offset = uaddr & ~PAGE_MASK;
+               for (j = cur_page; j < page_limit; j++) {
+                       unsigned int bytes = PAGE_SIZE - offset;
+
+                       if (len <= 0)
+                               break;
+                       
+                       if (bytes > len)
+                               bytes = len;
+
+                       /*
+                        * sorry...
+                        */
+                       if (__bio_add_page(q, bio, pages[j], bytes, offset) < bytes)
+                               break;
+
+                       len -= bytes;
+                       offset = 0;
+               }
 
+               cur_page = j;
                /*
-                * sorry...
+                * release the pages we didn't map into the bio, if any
                 */
-               if (__bio_add_page(q, bio, pages[i], bytes, offset) < bytes)
-                       break;
-
-               len -= bytes;
-               offset = 0;
+               while (j < page_limit)
+                       page_cache_release(pages[j++]);
        }
 
-       /*
-        * release the pages we didn't map into the bio, if any
-        */
-       while (i < nr_pages)
-               page_cache_release(pages[i++]);
-
        kfree(pages);
 
        /*
@@ -617,9 +651,17 @@ static struct bio *__bio_map_user(request_queue_t *q, struct block_device *bdev,
        if (!write_to_vm)
                bio->bi_rw |= (1 << BIO_RW);
 
+       bio->bi_bdev = bdev;
        bio->bi_flags |= (1 << BIO_USER_MAPPED);
        return bio;
-out:
+
+ out_unmap:
+       for (i = 0; i < nr_pages; i++) {
+               if(!pages[i])
+                       break;
+               page_cache_release(pages[i]);
+       }
+ out:
        kfree(pages);
        bio_put(bio);
        return ERR_PTR(ret);
@@ -638,10 +680,34 @@ out:
  */
 struct bio *bio_map_user(request_queue_t *q, struct block_device *bdev,
                         unsigned long uaddr, unsigned int len, int write_to_vm)
+{
+       struct sg_iovec iov;
+
+       iov.iov_base = (__user void *)uaddr;
+       iov.iov_len = len;
+
+       return bio_map_user_iov(q, bdev, &iov, 1, write_to_vm);
+}
+
+/**
+ *     bio_map_user_iov - map user sg_iovec table into bio
+ *     @q: the request_queue_t for the bio
+ *     @bdev: destination block device
+ *     @iov:   the iovec.
+ *     @iov_count: number of elements in the iovec
+ *     @write_to_vm: bool indicating writing to pages or not
+ *
+ *     Map the user space address into a bio suitable for io to a block
+ *     device. Returns an error pointer in case of error.
+ */
+struct bio *bio_map_user_iov(request_queue_t *q, struct block_device *bdev,
+                            struct sg_iovec *iov, int iov_count,
+                            int write_to_vm)
 {
        struct bio *bio;
+       int len = 0, i;
 
-       bio = __bio_map_user(q, bdev, uaddr, len, write_to_vm);
+       bio = __bio_map_user_iov(q, bdev, iov, iov_count, write_to_vm);
 
        if (IS_ERR(bio))
                return bio;
@@ -654,6 +720,9 @@ struct bio *bio_map_user(request_queue_t *q, struct block_device *bdev,
         */
        bio_get(bio);
 
+       for (i = 0; i < iov_count; i++)
+               len += iov[i].iov_len;
+
        if (bio->bi_size == len)
                return bio;
 
@@ -698,6 +767,82 @@ void bio_unmap_user(struct bio *bio)
        bio_put(bio);
 }
 
+static int bio_map_kern_endio(struct bio *bio, unsigned int bytes_done, int err)
+{
+       if (bio->bi_size)
+               return 1;
+
+       bio_put(bio);
+       return 0;
+}
+
+
+static struct bio *__bio_map_kern(request_queue_t *q, void *data,
+                                 unsigned int len, unsigned int gfp_mask)
+{
+       unsigned long kaddr = (unsigned long)data;
+       unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
+       unsigned long start = kaddr >> PAGE_SHIFT;
+       const int nr_pages = end - start;
+       int offset, i;
+       struct bio *bio;
+
+       bio = bio_alloc(gfp_mask, nr_pages);
+       if (!bio)
+               return ERR_PTR(-ENOMEM);
+
+       offset = offset_in_page(kaddr);
+       for (i = 0; i < nr_pages; i++) {
+               unsigned int bytes = PAGE_SIZE - offset;
+
+               if (len <= 0)
+                       break;
+
+               if (bytes > len)
+                       bytes = len;
+
+               if (__bio_add_page(q, bio, virt_to_page(data), bytes,
+                                  offset) < bytes)
+                       break;
+
+               data += bytes;
+               len -= bytes;
+               offset = 0;
+       }
+
+       bio->bi_end_io = bio_map_kern_endio;
+       return bio;
+}
+
+/**
+ *     bio_map_kern    -       map kernel address into bio
+ *     @q: the request_queue_t for the bio
+ *     @data: pointer to buffer to map
+ *     @len: length in bytes
+ *     @gfp_mask: allocation flags for bio allocation
+ *
+ *     Map the kernel address into a bio suitable for io to a block
+ *     device. Returns an error pointer in case of error.
+ */
+struct bio *bio_map_kern(request_queue_t *q, void *data, unsigned int len,
+                        unsigned int gfp_mask)
+{
+       struct bio *bio;
+
+       bio = __bio_map_kern(q, data, len, gfp_mask);
+       if (IS_ERR(bio))
+               return bio;
+
+       if (bio->bi_size == len)
+               return bio;
+
+       /*
+        * Don't support partial mappings.
+        */
+       bio_put(bio);
+       return ERR_PTR(-EINVAL);
+}
+
 /*
  * bio_set_pages_dirty() and bio_check_pages_dirty() are support functions
  * for performing direct-IO in BIOs.
@@ -1075,6 +1220,7 @@ subsys_initcall(init_bio);
 
 EXPORT_SYMBOL(bio_alloc);
 EXPORT_SYMBOL(bio_put);
+EXPORT_SYMBOL(bio_free);
 EXPORT_SYMBOL(bio_endio);
 EXPORT_SYMBOL(bio_init);
 EXPORT_SYMBOL(__bio_clone);
@@ -1085,6 +1231,7 @@ EXPORT_SYMBOL(bio_add_page);
 EXPORT_SYMBOL(bio_get_nr_vecs);
 EXPORT_SYMBOL(bio_map_user);
 EXPORT_SYMBOL(bio_unmap_user);
+EXPORT_SYMBOL(bio_map_kern);
 EXPORT_SYMBOL(bio_pair_release);
 EXPORT_SYMBOL(bio_split);
 EXPORT_SYMBOL(bio_split_pool);
index 6a25d7df89b176db6bb7163517538476398a9af4..1c62203a4906ec1c7ba2ca9ede00e2a2c498aeda 100644 (file)
@@ -917,8 +917,7 @@ static int fsync_buffers_list(spinlock_t *lock, struct list_head *list)
                                 * contents - it is a noop if I/O is still in
                                 * flight on potentially older contents.
                                 */
-                               wait_on_buffer(bh);
-                               ll_rw_block(WRITE, 1, &bh);
+                               ll_rw_block(SWRITE, 1, &bh);
                                brelse(bh);
                                spin_lock(lock);
                        }
@@ -2793,21 +2792,22 @@ int submit_bh(int rw, struct buffer_head * bh)
 
 /**
  * ll_rw_block: low-level access to block devices (DEPRECATED)
- * @rw: whether to %READ or %WRITE or maybe %READA (readahead)
+ * @rw: whether to %READ or %WRITE or %SWRITE or maybe %READA (readahead)
  * @nr: number of &struct buffer_heads in the array
  * @bhs: array of pointers to &struct buffer_head
  *
- * ll_rw_block() takes an array of pointers to &struct buffer_heads,
- * and requests an I/O operation on them, either a %READ or a %WRITE.
- * The third %READA option is described in the documentation for
- * generic_make_request() which ll_rw_block() calls.
+ * ll_rw_block() takes an array of pointers to &struct buffer_heads, and
+ * requests an I/O operation on them, either a %READ or a %WRITE.  The third
+ * %SWRITE is like %WRITE only we make sure that the *current* data in buffers
+ * are sent to disk. The fourth %READA option is described in the documentation
+ * for generic_make_request() which ll_rw_block() calls.
  *
  * This function drops any buffer that it cannot get a lock on (with the
- * BH_Lock state bit), any buffer that appears to be clean when doing a
- * write request, and any buffer that appears to be up-to-date when doing
- * read request.  Further it marks as clean buffers that are processed for
- * writing (the buffer cache won't assume that they are actually clean until
- * the buffer gets unlocked).
+ * BH_Lock state bit) unless SWRITE is required, any buffer that appears to be
+ * clean when doing a write request, and any buffer that appears to be
+ * up-to-date when doing read request.  Further it marks as clean buffers that
+ * are processed for writing (the buffer cache won't assume that they are
+ * actually clean until the buffer gets unlocked).
  *
  * ll_rw_block sets b_end_io to simple completion handler that marks
  * the buffer up-to-date (if approriate), unlocks the buffer and wakes
@@ -2823,11 +2823,13 @@ void ll_rw_block(int rw, int nr, struct buffer_head *bhs[])
        for (i = 0; i < nr; i++) {
                struct buffer_head *bh = bhs[i];
 
-               if (test_set_buffer_locked(bh))
+               if (rw == SWRITE)
+                       lock_buffer(bh);
+               else if (test_set_buffer_locked(bh))
                        continue;
 
                get_bh(bh);
-               if (rw == WRITE) {
+               if (rw == WRITE || rw == SWRITE) {
                        if (test_clear_buffer_dirty(bh)) {
                                bh->b_end_io = end_buffer_write_sync;
                                submit_bh(WRITE, bh);
@@ -3046,10 +3048,9 @@ struct buffer_head *alloc_buffer_head(unsigned int __nocast gfp_flags)
 {
        struct buffer_head *ret = kmem_cache_alloc(bh_cachep, gfp_flags);
        if (ret) {
-               preempt_disable();
-               __get_cpu_var(bh_accounting).nr++;
+               get_cpu_var(bh_accounting).nr++;
                recalc_bh_state();
-               preempt_enable();
+               put_cpu_var(bh_accounting);
        }
        return ret;
 }
@@ -3059,10 +3060,9 @@ void free_buffer_head(struct buffer_head *bh)
 {
        BUG_ON(!list_empty(&bh->b_assoc_buffers));
        kmem_cache_free(bh_cachep, bh);
-       preempt_disable();
-       __get_cpu_var(bh_accounting).nr--;
+       get_cpu_var(bh_accounting).nr--;
        recalc_bh_state();
-       preempt_enable();
+       put_cpu_var(bh_accounting);
 }
 EXPORT_SYMBOL(free_buffer_head);
 
index e568cc47a7f93005518d1470696f89ee1444a1ae..3217ac5f6bd7aa03277307aa66a5f64573681c49 100644 (file)
@@ -836,7 +836,7 @@ cifs_parse_mount_options(char *options, const char *devname,struct smb_vol *vol)
                                /* go from value to value + temp_len condensing 
                                double commas to singles. Note that this ends up
                                allocating a few bytes too many, which is ok */
-                               vol->password = kcalloc(1, temp_len, GFP_KERNEL);
+                               vol->password = kzalloc(temp_len, GFP_KERNEL);
                                if(vol->password == NULL) {
                                        printk("CIFS: no memory for pass\n");
                                        return 1;
@@ -851,7 +851,7 @@ cifs_parse_mount_options(char *options, const char *devname,struct smb_vol *vol)
                                }
                                vol->password[j] = 0;
                        } else {
-                               vol->password = kcalloc(1, temp_len+1, GFP_KERNEL);
+                               vol->password = kzalloc(temp_len+1, GFP_KERNEL);
                                if(vol->password == NULL) {
                                        printk("CIFS: no memory for pass\n");
                                        return 1;
@@ -1317,7 +1317,7 @@ ipv4_connect(struct sockaddr_in *psin_server, struct socket **csocket,
                sessinit is sent but no second negprot */
                struct rfc1002_session_packet * ses_init_buf;
                struct smb_hdr * smb_buf;
-               ses_init_buf = kcalloc(1, sizeof(struct rfc1002_session_packet), GFP_KERNEL);
+               ses_init_buf = kzalloc(sizeof(struct rfc1002_session_packet), GFP_KERNEL);
                if(ses_init_buf) {
                        ses_init_buf->trailer.session_req.called_len = 32;
                        rfc1002mangle(ses_init_buf->trailer.session_req.called_name,
@@ -1964,7 +1964,7 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses,
 /* We look for obvious messed up bcc or strings in response so we do not go off
    the end since (at least) WIN2K and Windows XP have a major bug in not null
    terminating last Unicode string in response  */
-                               ses->serverOS = kcalloc(1, 2 * (len + 1), GFP_KERNEL);
+                               ses->serverOS = kzalloc(2 * (len + 1), GFP_KERNEL);
                                if(ses->serverOS == NULL)
                                        goto sesssetup_nomem;
                                cifs_strfromUCS_le(ses->serverOS,
@@ -1976,7 +1976,7 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                if (remaining_words > 0) {
                                        len = UniStrnlen((wchar_t *)bcc_ptr,
                                                         remaining_words-1);
-                                       ses->serverNOS = kcalloc(1, 2 * (len + 1),GFP_KERNEL);
+                                       ses->serverNOS = kzalloc(2 * (len + 1),GFP_KERNEL);
                                        if(ses->serverNOS == NULL)
                                                goto sesssetup_nomem;
                                        cifs_strfromUCS_le(ses->serverNOS,
@@ -1994,7 +1994,7 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                                len = UniStrnlen((wchar_t *) bcc_ptr, remaining_words);
           /* last string is not always null terminated (for e.g. for Windows XP & 2000) */
                                                ses->serverDomain =
-                                                   kcalloc(1, 2*(len+1),GFP_KERNEL);
+                                                   kzalloc(2*(len+1),GFP_KERNEL);
                                                if(ses->serverDomain == NULL)
                                                        goto sesssetup_nomem;
                                                cifs_strfromUCS_le(ses->serverDomain,
@@ -2005,22 +2005,22 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                        } /* else no more room so create dummy domain string */
                                        else
                                                ses->serverDomain = 
-                                                       kcalloc(1, 2, GFP_KERNEL);
+                                                       kzalloc(2, GFP_KERNEL);
                                } else {        /* no room so create dummy domain and NOS string */
                                        /* if these kcallocs fail not much we
                                           can do, but better to not fail the
                                           sesssetup itself */
                                        ses->serverDomain =
-                                           kcalloc(1, 2, GFP_KERNEL);
+                                           kzalloc(2, GFP_KERNEL);
                                        ses->serverNOS =
-                                           kcalloc(1, 2, GFP_KERNEL);
+                                           kzalloc(2, GFP_KERNEL);
                                }
                        } else {        /* ASCII */
                                len = strnlen(bcc_ptr, 1024);
                                if (((long) bcc_ptr + len) - (long)
                                    pByteArea(smb_buffer_response)
                                            <= BCC(smb_buffer_response)) {
-                                       ses->serverOS = kcalloc(1, len + 1,GFP_KERNEL);
+                                       ses->serverOS = kzalloc(len + 1,GFP_KERNEL);
                                        if(ses->serverOS == NULL)
                                                goto sesssetup_nomem;
                                        strncpy(ses->serverOS,bcc_ptr, len);
@@ -2030,7 +2030,7 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                        bcc_ptr++;
 
                                        len = strnlen(bcc_ptr, 1024);
-                                       ses->serverNOS = kcalloc(1, len + 1,GFP_KERNEL);
+                                       ses->serverNOS = kzalloc(len + 1,GFP_KERNEL);
                                        if(ses->serverNOS == NULL)
                                                goto sesssetup_nomem;
                                        strncpy(ses->serverNOS, bcc_ptr, len);
@@ -2039,7 +2039,7 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                        bcc_ptr++;
 
                                        len = strnlen(bcc_ptr, 1024);
-                                       ses->serverDomain = kcalloc(1, len + 1,GFP_KERNEL);
+                                       ses->serverDomain = kzalloc(len + 1,GFP_KERNEL);
                                        if(ses->serverDomain == NULL)
                                                goto sesssetup_nomem;
                                        strncpy(ses->serverDomain, bcc_ptr, len);
@@ -2240,7 +2240,7 @@ CIFSSpnegoSessSetup(unsigned int xid, struct cifsSesInfo *ses,
    the end since (at least) WIN2K and Windows XP have a major bug in not null
    terminating last Unicode string in response  */
                                        ses->serverOS =
-                                           kcalloc(1, 2 * (len + 1), GFP_KERNEL);
+                                           kzalloc(2 * (len + 1), GFP_KERNEL);
                                        cifs_strfromUCS_le(ses->serverOS,
                                                           (wchar_t *)
                                                           bcc_ptr, len,
@@ -2254,7 +2254,7 @@ CIFSSpnegoSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                                                 remaining_words
                                                                 - 1);
                                                ses->serverNOS =
-                                                   kcalloc(1, 2 * (len + 1),
+                                                   kzalloc(2 * (len + 1),
                                                            GFP_KERNEL);
                                                cifs_strfromUCS_le(ses->serverNOS,
                                                                   (wchar_t *)bcc_ptr,
@@ -2267,7 +2267,7 @@ CIFSSpnegoSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                                if (remaining_words > 0) {
                                                        len = UniStrnlen((wchar_t *) bcc_ptr, remaining_words); 
                             /* last string is not always null terminated (for e.g. for Windows XP & 2000) */
-                                                       ses->serverDomain = kcalloc(1, 2*(len+1),GFP_KERNEL);
+                                                       ses->serverDomain = kzalloc(2*(len+1),GFP_KERNEL);
                                                        cifs_strfromUCS_le(ses->serverDomain,
                                                             (wchar_t *)bcc_ptr, 
                                  len,
@@ -2278,10 +2278,10 @@ CIFSSpnegoSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                                } /* else no more room so create dummy domain string */
                                                else
                                                        ses->serverDomain =
-                                                           kcalloc(1, 2,GFP_KERNEL);
+                                                           kzalloc(2,GFP_KERNEL);
                                        } else {        /* no room so create dummy domain and NOS string */
-                                               ses->serverDomain = kcalloc(1, 2, GFP_KERNEL);
-                                               ses->serverNOS = kcalloc(1, 2, GFP_KERNEL);
+                                               ses->serverDomain = kzalloc(2, GFP_KERNEL);
+                                               ses->serverNOS = kzalloc(2, GFP_KERNEL);
                                        }
                                } else {        /* ASCII */
 
@@ -2289,7 +2289,7 @@ CIFSSpnegoSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                        if (((long) bcc_ptr + len) - (long)
                                            pByteArea(smb_buffer_response)
                                            <= BCC(smb_buffer_response)) {
-                                               ses->serverOS = kcalloc(1, len + 1, GFP_KERNEL);
+                                               ses->serverOS = kzalloc(len + 1, GFP_KERNEL);
                                                strncpy(ses->serverOS, bcc_ptr, len);
 
                                                bcc_ptr += len;
@@ -2297,14 +2297,14 @@ CIFSSpnegoSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                                bcc_ptr++;
 
                                                len = strnlen(bcc_ptr, 1024);
-                                               ses->serverNOS = kcalloc(1, len + 1,GFP_KERNEL);
+                                               ses->serverNOS = kzalloc(len + 1,GFP_KERNEL);
                                                strncpy(ses->serverNOS, bcc_ptr, len);
                                                bcc_ptr += len;
                                                bcc_ptr[0] = 0;
                                                bcc_ptr++;
 
                                                len = strnlen(bcc_ptr, 1024);
-                                               ses->serverDomain = kcalloc(1, len + 1, GFP_KERNEL);
+                                               ses->serverDomain = kzalloc(len + 1, GFP_KERNEL);
                                                strncpy(ses->serverDomain, bcc_ptr, len);
                                                bcc_ptr += len;
                                                bcc_ptr[0] = 0;
@@ -2554,7 +2554,7 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
    the end since (at least) WIN2K and Windows XP have a major bug in not null
    terminating last Unicode string in response  */
                                        ses->serverOS =
-                                           kcalloc(1, 2 * (len + 1), GFP_KERNEL);
+                                           kzalloc(2 * (len + 1), GFP_KERNEL);
                                        cifs_strfromUCS_le(ses->serverOS,
                                                           (wchar_t *)
                                                           bcc_ptr, len,
@@ -2569,7 +2569,7 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
                                                                 remaining_words
                                                                 - 1);
                                                ses->serverNOS =
-                                                   kcalloc(1, 2 * (len + 1),
+                                                   kzalloc(2 * (len + 1),
                                                            GFP_KERNEL);
                                                cifs_strfromUCS_le(ses->
                                                                   serverNOS,
@@ -2586,7 +2586,7 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
                                                        len = UniStrnlen((wchar_t *) bcc_ptr, remaining_words); 
            /* last string is not always null terminated (for e.g. for Windows XP & 2000) */
                                                        ses->serverDomain =
-                                                           kcalloc(1, 2 *
+                                                           kzalloc(2 *
                                                                    (len +
                                                                     1),
                                                                    GFP_KERNEL);
@@ -2612,13 +2612,13 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
                                                } /* else no more room so create dummy domain string */
                                                else
                                                        ses->serverDomain =
-                                                           kcalloc(1, 2,
+                                                           kzalloc(2,
                                                                    GFP_KERNEL);
                                        } else {        /* no room so create dummy domain and NOS string */
                                                ses->serverDomain =
-                                                   kcalloc(1, 2, GFP_KERNEL);
+                                                   kzalloc(2, GFP_KERNEL);
                                                ses->serverNOS =
-                                                   kcalloc(1, 2, GFP_KERNEL);
+                                                   kzalloc(2, GFP_KERNEL);
                                        }
                                } else {        /* ASCII */
                                        len = strnlen(bcc_ptr, 1024);
@@ -2626,7 +2626,7 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
                                            pByteArea(smb_buffer_response)
                                            <= BCC(smb_buffer_response)) {
                                                ses->serverOS =
-                                                   kcalloc(1, len + 1,
+                                                   kzalloc(len + 1,
                                                            GFP_KERNEL);
                                                strncpy(ses->serverOS,
                                                        bcc_ptr, len);
@@ -2637,7 +2637,7 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
 
                                                len = strnlen(bcc_ptr, 1024);
                                                ses->serverNOS =
-                                                   kcalloc(1, len + 1,
+                                                   kzalloc(len + 1,
                                                            GFP_KERNEL);
                                                strncpy(ses->serverNOS, bcc_ptr, len);
                                                bcc_ptr += len;
@@ -2646,7 +2646,7 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
 
                                                len = strnlen(bcc_ptr, 1024);
                                                ses->serverDomain =
-                                                   kcalloc(1, len + 1,
+                                                   kzalloc(len + 1,
                                                            GFP_KERNEL);
                                                strncpy(ses->serverDomain, bcc_ptr, len);       
                                                bcc_ptr += len;
@@ -2948,7 +2948,7 @@ CIFSNTLMSSPAuthSessSetup(unsigned int xid, struct cifsSesInfo *ses,
   the end since (at least) WIN2K and Windows XP have a major bug in not null
   terminating last Unicode string in response  */
                                        ses->serverOS =
-                                           kcalloc(1, 2 * (len + 1), GFP_KERNEL);
+                                           kzalloc(2 * (len + 1), GFP_KERNEL);
                                        cifs_strfromUCS_le(ses->serverOS,
                                                           (wchar_t *)
                                                           bcc_ptr, len,
@@ -2963,7 +2963,7 @@ CIFSNTLMSSPAuthSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                                                 remaining_words
                                                                 - 1);
                                                ses->serverNOS =
-                                                   kcalloc(1, 2 * (len + 1),
+                                                   kzalloc(2 * (len + 1),
                                                            GFP_KERNEL);
                                                cifs_strfromUCS_le(ses->
                                                                   serverNOS,
@@ -2979,7 +2979,7 @@ CIFSNTLMSSPAuthSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                                        len = UniStrnlen((wchar_t *) bcc_ptr, remaining_words); 
      /* last string not always null terminated (e.g. for Windows XP & 2000) */
                                                        ses->serverDomain =
-                                                           kcalloc(1, 2 *
+                                                           kzalloc(2 *
                                                                    (len +
                                                                     1),
                                                                    GFP_KERNEL);
@@ -3004,17 +3004,17 @@ CIFSNTLMSSPAuthSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                                            = 0;
                                                } /* else no more room so create dummy domain string */
                                                else
-                                                       ses->serverDomain = kcalloc(1, 2,GFP_KERNEL);
+                                                       ses->serverDomain = kzalloc(2,GFP_KERNEL);
                                        } else {  /* no room so create dummy domain and NOS string */
-                                               ses->serverDomain = kcalloc(1, 2, GFP_KERNEL);
-                                               ses->serverNOS = kcalloc(1, 2, GFP_KERNEL);
+                                               ses->serverDomain = kzalloc(2, GFP_KERNEL);
+                                               ses->serverNOS = kzalloc(2, GFP_KERNEL);
                                        }
                                } else {        /* ASCII */
                                        len = strnlen(bcc_ptr, 1024);
                                        if (((long) bcc_ptr + len) - 
                         (long) pByteArea(smb_buffer_response) 
                             <= BCC(smb_buffer_response)) {
-                                               ses->serverOS = kcalloc(1, len + 1,GFP_KERNEL);
+                                               ses->serverOS = kzalloc(len + 1,GFP_KERNEL);
                                                strncpy(ses->serverOS,bcc_ptr, len);
 
                                                bcc_ptr += len;
@@ -3022,14 +3022,14 @@ CIFSNTLMSSPAuthSessSetup(unsigned int xid, struct cifsSesInfo *ses,
                                                bcc_ptr++;
 
                                                len = strnlen(bcc_ptr, 1024);
-                                               ses->serverNOS = kcalloc(1, len+1,GFP_KERNEL);
+                                               ses->serverNOS = kzalloc(len+1,GFP_KERNEL);
                                                strncpy(ses->serverNOS, bcc_ptr, len);  
                                                bcc_ptr += len;
                                                bcc_ptr[0] = 0;
                                                bcc_ptr++;
 
                                                len = strnlen(bcc_ptr, 1024);
-                                               ses->serverDomain = kcalloc(1, len+1,GFP_KERNEL);
+                                               ses->serverDomain = kzalloc(len+1,GFP_KERNEL);
                                                strncpy(ses->serverDomain, bcc_ptr, len);
                                                bcc_ptr += len;
                                                bcc_ptr[0] = 0;
@@ -3141,7 +3141,7 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
                                if(tcon->nativeFileSystem)
                                        kfree(tcon->nativeFileSystem);
                                tcon->nativeFileSystem =
-                                   kcalloc(1, length + 2, GFP_KERNEL);
+                                   kzalloc(length + 2, GFP_KERNEL);
                                cifs_strfromUCS_le(tcon->nativeFileSystem,
                                                   (wchar_t *) bcc_ptr,
                                                   length, nls_codepage);
@@ -3159,7 +3159,7 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
                                if(tcon->nativeFileSystem)
                                        kfree(tcon->nativeFileSystem);
                                tcon->nativeFileSystem =
-                                   kcalloc(1, length + 1, GFP_KERNEL);
+                                   kzalloc(length + 1, GFP_KERNEL);
                                strncpy(tcon->nativeFileSystem, bcc_ptr,
                                        length);
                        }
index 3f3538d4a1fad105c0a776ef5f6d6e18fef0ff6c..d335269bd91cfe5b626aba8a45eae25136b450dc 100644 (file)
@@ -145,24 +145,23 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
                return -ENOMEM;
        }
 
-       if(nd) {
-               if ((nd->intent.open.flags & O_ACCMODE) == O_RDONLY)
-                       desiredAccess = GENERIC_READ;
-               else if ((nd->intent.open.flags & O_ACCMODE) == O_WRONLY) {
-                       desiredAccess = GENERIC_WRITE;
-                       write_only = TRUE;
-               } else if ((nd->intent.open.flags & O_ACCMODE) == O_RDWR) {
-                       /* GENERIC_ALL is too much permission to request */
-                       /* can cause unnecessary access denied on create */
-                       /* desiredAccess = GENERIC_ALL; */
-                       desiredAccess = GENERIC_READ | GENERIC_WRITE;
+       if(nd && (nd->flags & LOOKUP_OPEN)) {
+               int oflags = nd->intent.open.flags;
+
+               desiredAccess = 0;
+               if (oflags & FMODE_READ)
+                       desiredAccess |= GENERIC_READ;
+               if (oflags & FMODE_WRITE) {
+                       desiredAccess |= GENERIC_WRITE;
+                       if (!(oflags & FMODE_READ))
+                               write_only = TRUE;
                }
 
-               if((nd->intent.open.flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
+               if((oflags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
                        disposition = FILE_CREATE;
-               else if((nd->intent.open.flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
+               else if((oflags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
                        disposition = FILE_OVERWRITE_IF;
-               else if((nd->intent.open.flags & O_CREAT) == O_CREAT)
+               else if((oflags & O_CREAT) == O_CREAT)
                        disposition = FILE_OPEN_IF;
                else {
                        cFYI(1,("Create flag not set in create function"));
index 6b06b6bae35e52cd078efaaabe19198007a4b36d..8c665705c6a07beea9a4ead55a2184524f7ed41f 100644 (file)
@@ -310,96 +310,6 @@ static int __init init_sys32_ioctl(void)
 
 __initcall(init_sys32_ioctl);
 
-int register_ioctl32_conversion(unsigned int cmd,
-                               ioctl_trans_handler_t handler)
-{
-       struct ioctl_trans *t;
-       struct ioctl_trans *new_t;
-       unsigned long hash = ioctl32_hash(cmd);
-
-       new_t = kmalloc(sizeof(*new_t), GFP_KERNEL);
-       if (!new_t)
-               return -ENOMEM;
-
-       down_write(&ioctl32_sem);
-       for (t = ioctl32_hash_table[hash]; t; t = t->next) {
-               if (t->cmd == cmd) {
-                       printk(KERN_ERR "Trying to register duplicated ioctl32 "
-                                       "handler %x\n", cmd);
-                       up_write(&ioctl32_sem);
-                       kfree(new_t);
-                       return -EINVAL; 
-               }
-       }
-       new_t->next = NULL;
-       new_t->cmd = cmd;
-       new_t->handler = handler;
-       ioctl32_insert_translation(new_t);
-
-       up_write(&ioctl32_sem);
-       return 0;
-}
-EXPORT_SYMBOL(register_ioctl32_conversion);
-
-static inline int builtin_ioctl(struct ioctl_trans *t)
-{ 
-       return t >= ioctl_start && t < (ioctl_start + ioctl_table_size);
-} 
-
-/* Problem: 
-   This function cannot unregister duplicate ioctls, because they are not
-   unique.
-   When they happen we need to extend the prototype to pass the handler too. */
-
-int unregister_ioctl32_conversion(unsigned int cmd)
-{
-       unsigned long hash = ioctl32_hash(cmd);
-       struct ioctl_trans *t, *t1;
-
-       down_write(&ioctl32_sem);
-
-       t = ioctl32_hash_table[hash];
-       if (!t) { 
-               up_write(&ioctl32_sem);
-               return -EINVAL;
-       } 
-
-       if (t->cmd == cmd) { 
-               if (builtin_ioctl(t)) {
-                       printk("%p tried to unregister builtin ioctl %x\n",
-                              __builtin_return_address(0), cmd);
-               } else { 
-                       ioctl32_hash_table[hash] = t->next;
-                       up_write(&ioctl32_sem);
-                       kfree(t);
-                       return 0;
-               }
-       } 
-       while (t->next) {
-               t1 = t->next;
-               if (t1->cmd == cmd) { 
-                       if (builtin_ioctl(t1)) {
-                               printk("%p tried to unregister builtin "
-                                       "ioctl %x\n",
-                                       __builtin_return_address(0), cmd);
-                               goto out;
-                       } else { 
-                               t->next = t1->next;
-                               up_write(&ioctl32_sem);
-                               kfree(t1);
-                               return 0;
-                       }
-               }
-               t = t1;
-       }
-       printk(KERN_ERR "Trying to free unknown 32bit ioctl handler %x\n",
-                               cmd);
-out:
-       up_write(&ioctl32_sem);
-       return -EINVAL;
-}
-EXPORT_SYMBOL(unregister_ioctl32_conversion); 
-
 static void compat_ioctl_error(struct file *filp, unsigned int fd,
                unsigned int cmd, unsigned long arg)
 {
@@ -720,14 +630,14 @@ compat_sys_io_submit(aio_context_t ctx_id, int nr, u32 __user *iocb)
 struct compat_ncp_mount_data {
        compat_int_t version;
        compat_uint_t ncp_fd;
-       compat_uid_t mounted_uid;
+       __compat_uid_t mounted_uid;
        compat_pid_t wdog_pid;
        unsigned char mounted_vol[NCP_VOLNAME_LEN + 1];
        compat_uint_t time_out;
        compat_uint_t retry_count;
        compat_uint_t flags;
-       compat_uid_t uid;
-       compat_gid_t gid;
+       __compat_uid_t uid;
+       __compat_gid_t gid;
        compat_mode_t file_mode;
        compat_mode_t dir_mode;
 };
@@ -784,9 +694,9 @@ static void *do_ncp_super_data_conv(void *raw_data)
 
 struct compat_smb_mount_data {
        compat_int_t version;
-       compat_uid_t mounted_uid;
-       compat_uid_t uid;
-       compat_gid_t gid;
+       __compat_uid_t mounted_uid;
+       __compat_uid_t uid;
+       __compat_gid_t gid;
        compat_mode_t file_mode;
        compat_mode_t dir_mode;
 };
@@ -1364,6 +1274,16 @@ out:
        return ret;
 }
 
+/*
+ * Exactly like fs/open.c:sys_open(), except that it doesn't set the
+ * O_LARGEFILE flag.
+ */
+asmlinkage long
+compat_sys_open(const char __user *filename, int flags, int mode)
+{
+       return do_sys_open(filename, flags, mode);
+}
+
 /*
  * compat_count() counts the number of arguments/envelopes. It is basically
  * a copy of count() from fs/exec.c, except that it works with 32 bit argv
@@ -1808,8 +1728,8 @@ struct compat_nfsctl_export {
        compat_dev_t    ex32_dev;
        compat_ino_t    ex32_ino;
        compat_int_t    ex32_flags;
-       compat_uid_t    ex32_anon_uid;
-       compat_gid_t    ex32_anon_gid;
+       __compat_uid_t  ex32_anon_uid;
+       __compat_gid_t  ex32_anon_gid;
 };
 
 struct compat_nfsctl_fdparm {
index 6c285efa20043cb8dbb4692d7a53f5ff9455bac0..7fe85415ae7c2d7aa7788bb91f5ccb4d412b0612 100644 (file)
@@ -39,12 +39,47 @@ static DECLARE_MUTEX(read_mutex);
 #define CRAMINO(x)     ((x)->offset?(x)->offset<<2:1)
 #define OFFSET(x)      ((x)->i_ino)
 
-static struct inode *get_cramfs_inode(struct super_block *sb, struct cramfs_inode * cramfs_inode)
+
+static int cramfs_iget5_test(struct inode *inode, void *opaque)
+{
+       struct cramfs_inode *cramfs_inode = opaque;
+
+       if (inode->i_ino != CRAMINO(cramfs_inode))
+               return 0; /* does not match */
+
+       if (inode->i_ino != 1)
+               return 1;
+
+       /* all empty directories, char, block, pipe, and sock, share inode #1 */
+
+       if ((inode->i_mode != cramfs_inode->mode) ||
+           (inode->i_gid != cramfs_inode->gid) ||
+           (inode->i_uid != cramfs_inode->uid))
+               return 0; /* does not match */
+
+       if ((S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) &&
+           (inode->i_rdev != old_decode_dev(cramfs_inode->size)))
+               return 0; /* does not match */
+
+       return 1; /* matches */
+}
+
+static int cramfs_iget5_set(struct inode *inode, void *opaque)
+{
+       struct cramfs_inode *cramfs_inode = opaque;
+       inode->i_ino = CRAMINO(cramfs_inode);
+       return 0;
+}
+
+static struct inode *get_cramfs_inode(struct super_block *sb,
+                               struct cramfs_inode * cramfs_inode)
 {
-       struct inode * inode = new_inode(sb);
+       struct inode *inode = iget5_locked(sb, CRAMINO(cramfs_inode),
+                                           cramfs_iget5_test, cramfs_iget5_set,
+                                           cramfs_inode);
        static struct timespec zerotime;
 
-       if (inode) {
+       if (inode && (inode->i_state & I_NEW)) {
                inode->i_mode = cramfs_inode->mode;
                inode->i_uid = cramfs_inode->uid;
                inode->i_size = cramfs_inode->size;
@@ -58,7 +93,6 @@ static struct inode *get_cramfs_inode(struct super_block *sb, struct cramfs_inod
                   but it's the best we can do without reading the directory
                   contents.  1 yields the right result in GNU find, even
                   without -noleaf option. */
-               insert_inode_hash(inode);
                if (S_ISREG(inode->i_mode)) {
                        inode->i_fop = &generic_ro_fops;
                        inode->i_data.a_ops = &cramfs_aops;
@@ -74,6 +108,7 @@ static struct inode *get_cramfs_inode(struct super_block *sb, struct cramfs_inod
                        init_special_inode(inode, inode->i_mode,
                                old_decode_dev(cramfs_inode->size));
                }
+               unlock_new_inode(inode);
        }
        return inode;
 }
index dcfe331dc4c4816d8a208ecccf625439c94cc8cc..3c0c7c6a5b44004cd02de7dae02343b6674ed672 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/string.h>
+#include <linux/fs.h>
 #include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/blkdev.h>
@@ -27,6 +28,8 @@
 #include <linux/buffer_head.h>
 #include <linux/smp_lock.h>
 #include <linux/vfs.h>
+#include <linux/seq_file.h>
+#include <linux/mount.h>
 #include <asm/uaccess.h>
 #include "ext2.h"
 #include "xattr.h"
@@ -201,6 +204,26 @@ static void ext2_clear_inode(struct inode *inode)
 #endif
 }
 
+static int ext2_show_options(struct seq_file *seq, struct vfsmount *vfs)
+{
+       struct ext2_sb_info *sbi = EXT2_SB(vfs->mnt_sb);
+
+       if (sbi->s_mount_opt & EXT2_MOUNT_GRPID)
+               seq_puts(seq, ",grpid");
+       else
+               seq_puts(seq, ",nogrpid");
+
+#if defined(CONFIG_QUOTA)
+       if (sbi->s_mount_opt & EXT2_MOUNT_USRQUOTA)
+               seq_puts(seq, ",usrquota");
+
+       if (sbi->s_mount_opt & EXT2_MOUNT_GRPQUOTA)
+               seq_puts(seq, ",grpquota");
+#endif
+
+       return 0;
+}
+
 #ifdef CONFIG_QUOTA
 static ssize_t ext2_quota_read(struct super_block *sb, int type, char *data, size_t len, loff_t off);
 static ssize_t ext2_quota_write(struct super_block *sb, int type, const char *data, size_t len, loff_t off);
@@ -218,6 +241,7 @@ static struct super_operations ext2_sops = {
        .statfs         = ext2_statfs,
        .remount_fs     = ext2_remount,
        .clear_inode    = ext2_clear_inode,
+       .show_options   = ext2_show_options,
 #ifdef CONFIG_QUOTA
        .quota_read     = ext2_quota_read,
        .quota_write    = ext2_quota_write,
@@ -256,10 +280,11 @@ static unsigned long get_sb_block(void **data)
 
 enum {
        Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
-       Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, Opt_err_ro,
-       Opt_nouid32, Opt_check, Opt_nocheck, Opt_debug, Opt_oldalloc, Opt_orlov, Opt_nobh,
-       Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl, Opt_xip,
-       Opt_ignore, Opt_err,
+       Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic,
+       Opt_err_ro, Opt_nouid32, Opt_check, Opt_nocheck, Opt_debug,
+       Opt_oldalloc, Opt_orlov, Opt_nobh, Opt_user_xattr, Opt_nouser_xattr,
+       Opt_acl, Opt_noacl, Opt_xip, Opt_ignore, Opt_err, Opt_quota,
+       Opt_usrquota, Opt_grpquota
 };
 
 static match_table_t tokens = {
@@ -288,10 +313,10 @@ static match_table_t tokens = {
        {Opt_acl, "acl"},
        {Opt_noacl, "noacl"},
        {Opt_xip, "xip"},
-       {Opt_ignore, "grpquota"},
+       {Opt_grpquota, "grpquota"},
        {Opt_ignore, "noquota"},
-       {Opt_ignore, "quota"},
-       {Opt_ignore, "usrquota"},
+       {Opt_quota, "quota"},
+       {Opt_usrquota, "usrquota"},
        {Opt_err, NULL}
 };
 
@@ -406,6 +431,26 @@ static int parse_options (char * options,
                        printk("EXT2 xip option not supported\n");
 #endif
                        break;
+
+#if defined(CONFIG_QUOTA)
+               case Opt_quota:
+               case Opt_usrquota:
+                       set_opt(sbi->s_mount_opt, USRQUOTA);
+                       break;
+
+               case Opt_grpquota:
+                       set_opt(sbi->s_mount_opt, GRPQUOTA);
+                       break;
+#else
+               case Opt_quota:
+               case Opt_usrquota:
+               case Opt_grpquota:
+                       printk(KERN_ERR
+                               "EXT2-fs: quota operations not supported.\n");
+
+                       break;
+#endif
+
                case Opt_ignore:
                        break;
                default:
index 3c3c6e399fb3df167e7d45936df8e290227d0262..a93c3609025de91984e1673610c0dcc74adfaad0 100644 (file)
@@ -35,6 +35,7 @@
 #include <linux/mount.h>
 #include <linux/namei.h>
 #include <linux/quotaops.h>
+#include <linux/seq_file.h>
 #include <asm/uaccess.h>
 #include "xattr.h"
 #include "acl.h"
@@ -509,8 +510,41 @@ static void ext3_clear_inode(struct inode *inode)
        kfree(rsv);
 }
 
-#ifdef CONFIG_QUOTA
+static int ext3_show_options(struct seq_file *seq, struct vfsmount *vfs)
+{
+       struct ext3_sb_info *sbi = EXT3_SB(vfs->mnt_sb);
+
+       if (sbi->s_mount_opt & EXT3_MOUNT_JOURNAL_DATA)
+               seq_puts(seq, ",data=journal");
+
+       if (sbi->s_mount_opt & EXT3_MOUNT_ORDERED_DATA)
+               seq_puts(seq, ",data=ordered");
+
+       if (sbi->s_mount_opt & EXT3_MOUNT_WRITEBACK_DATA)
+               seq_puts(seq, ",data=writeback");
+
+#if defined(CONFIG_QUOTA)
+       if (sbi->s_jquota_fmt)
+               seq_printf(seq, ",jqfmt=%s",
+               (sbi->s_jquota_fmt == QFMT_VFS_OLD) ? "vfsold": "vfsv0");
+
+       if (sbi->s_qf_names[USRQUOTA])
+               seq_printf(seq, ",usrjquota=%s", sbi->s_qf_names[USRQUOTA]);
+
+       if (sbi->s_qf_names[GRPQUOTA])
+               seq_printf(seq, ",grpjquota=%s", sbi->s_qf_names[GRPQUOTA]);
 
+       if (sbi->s_mount_opt & EXT3_MOUNT_USRQUOTA)
+               seq_puts(seq, ",usrquota");
+
+       if (sbi->s_mount_opt & EXT3_MOUNT_GRPQUOTA)
+               seq_puts(seq, ",grpquota");
+#endif
+
+       return 0;
+}
+
+#ifdef CONFIG_QUOTA
 #define QTYPE2NAME(t) ((t)==USRQUOTA?"user":"group")
 #define QTYPE2MOPT(on, t) ((t)==USRQUOTA?((on)##USRJQUOTA):((on)##GRPJQUOTA))
 
@@ -569,6 +603,7 @@ static struct super_operations ext3_sops = {
        .statfs         = ext3_statfs,
        .remount_fs     = ext3_remount,
        .clear_inode    = ext3_clear_inode,
+       .show_options   = ext3_show_options,
 #ifdef CONFIG_QUOTA
        .quota_read     = ext3_quota_read,
        .quota_write    = ext3_quota_write,
@@ -590,7 +625,8 @@ enum {
        Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
        Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
        Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota,
-       Opt_ignore, Opt_barrier, Opt_err, Opt_resize,
+       Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota,
+       Opt_grpquota
 };
 
 static match_table_t tokens = {
@@ -634,10 +670,10 @@ static match_table_t tokens = {
        {Opt_grpjquota, "grpjquota=%s"},
        {Opt_jqfmt_vfsold, "jqfmt=vfsold"},
        {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"},
-       {Opt_quota, "grpquota"},
+       {Opt_grpquota, "grpquota"},
        {Opt_noquota, "noquota"},
        {Opt_quota, "quota"},
-       {Opt_quota, "usrquota"},
+       {Opt_usrquota, "usrquota"},
        {Opt_barrier, "barrier=%u"},
        {Opt_err, NULL},
        {Opt_resize, "resize"},
@@ -903,7 +939,13 @@ clear_qf_name:
                        sbi->s_jquota_fmt = QFMT_VFS_V0;
                        break;
                case Opt_quota:
+               case Opt_usrquota:
                        set_opt(sbi->s_mount_opt, QUOTA);
+                       set_opt(sbi->s_mount_opt, USRQUOTA);
+                       break;
+               case Opt_grpquota:
+                       set_opt(sbi->s_mount_opt, QUOTA);
+                       set_opt(sbi->s_mount_opt, GRPQUOTA);
                        break;
                case Opt_noquota:
                        if (sb_any_quota_enabled(sb)) {
@@ -912,8 +954,13 @@ clear_qf_name:
                                return 0;
                        }
                        clear_opt(sbi->s_mount_opt, QUOTA);
+                       clear_opt(sbi->s_mount_opt, USRQUOTA);
+                       clear_opt(sbi->s_mount_opt, GRPQUOTA);
                        break;
 #else
+               case Opt_quota:
+               case Opt_usrquota:
+               case Opt_grpquota:
                case Opt_usrjquota:
                case Opt_grpjquota:
                case Opt_offusrjquota:
@@ -924,7 +971,6 @@ clear_qf_name:
                                "EXT3-fs: journalled quota options not "
                                "supported.\n");
                        break;
-               case Opt_quota:
                case Opt_noquota:
                        break;
 #endif
@@ -962,14 +1008,38 @@ clear_qf_name:
                }
        }
 #ifdef CONFIG_QUOTA
-       if (!sbi->s_jquota_fmt && (sbi->s_qf_names[USRQUOTA] ||
-           sbi->s_qf_names[GRPQUOTA])) {
-               printk(KERN_ERR
-                       "EXT3-fs: journalled quota format not specified.\n");
-               return 0;
+       if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) {
+               if ((sbi->s_mount_opt & EXT3_MOUNT_USRQUOTA) &&
+                    sbi->s_qf_names[USRQUOTA])
+                       clear_opt(sbi->s_mount_opt, USRQUOTA);
+
+               if ((sbi->s_mount_opt & EXT3_MOUNT_GRPQUOTA) &&
+                    sbi->s_qf_names[GRPQUOTA])
+                       clear_opt(sbi->s_mount_opt, GRPQUOTA);
+
+               if ((sbi->s_qf_names[USRQUOTA] &&
+                               (sbi->s_mount_opt & EXT3_MOUNT_GRPQUOTA)) ||
+                   (sbi->s_qf_names[GRPQUOTA] &&
+                               (sbi->s_mount_opt & EXT3_MOUNT_USRQUOTA))) {
+                       printk(KERN_ERR "EXT3-fs: old and new quota "
+                                       "format mixing.\n");
+                       return 0;
+               }
+
+               if (!sbi->s_jquota_fmt) {
+                       printk(KERN_ERR "EXT3-fs: journalled quota format "
+                                       "not specified.\n");
+                       return 0;
+               }
+       } else {
+               if (sbi->s_jquota_fmt) {
+                       printk(KERN_ERR "EXT3-fs: journalled quota format "
+                                       "specified with no journalling "
+                                       "enabled.\n");
+                       return 0;
+               }
        }
 #endif
-
        return 1;
 }
 
index e5ae1b720dde8b42321235bbb2b3369e017e9d27..895049b2ac9cb65fd58af857e719bc7d8d03115e 100644 (file)
@@ -30,6 +30,29 @@ static inline loff_t fat_make_i_pos(struct super_block *sb,
                | (de - (struct msdos_dir_entry *)bh->b_data);
 }
 
+static inline void fat_dir_readahead(struct inode *dir, sector_t iblock,
+                                    sector_t phys)
+{
+       struct super_block *sb = dir->i_sb;
+       struct msdos_sb_info *sbi = MSDOS_SB(sb);
+       struct buffer_head *bh;
+       int sec;
+
+       /* This is not a first sector of cluster, or sec_per_clus == 1 */
+       if ((iblock & (sbi->sec_per_clus - 1)) || sbi->sec_per_clus == 1)
+               return;
+       /* root dir of FAT12/FAT16 */
+       if ((sbi->fat_bits != 32) && (dir->i_ino == MSDOS_ROOT_INO))
+               return;
+
+       bh = sb_getblk(sb, phys);
+       if (bh && !buffer_uptodate(bh)) {
+               for (sec = 0; sec < sbi->sec_per_clus; sec++)
+                       sb_breadahead(sb, phys + sec);
+       }
+       brelse(bh);
+}
+
 /* Returns the inode number of the directory entry at offset pos. If bh is
    non-NULL, it is brelse'd before. Pos is incremented. The buffer header is
    returned in bh.
@@ -58,6 +81,8 @@ next:
        if (err || !phys)
                return -1;      /* beyond EOF or error */
 
+       fat_dir_readahead(dir, iblock, phys);
+
        *bh = sb_bread(sb, phys);
        if (*bh == NULL) {
                printk(KERN_ERR "FAT: Directory bread(block %llu) failed\n",
@@ -635,8 +660,7 @@ RecEnd:
 EODir:
        filp->f_pos = cpos;
 FillFailed:
-       if (bh)
-               brelse(bh);
+       brelse(bh);
        if (unicode)
                free_page((unsigned long)unicode);
 out:
index 1d3de78e6bc960ddeb2b4b42eed7815c64aca298..43e9e1737de2cb365c954afeddfb64ae0433779b 100644 (file)
@@ -89,7 +89,6 @@ struct file *get_empty_filp(void)
        rwlock_init(&f->f_owner.lock);
        /* f->f_version: 0 */
        INIT_LIST_HEAD(&f->f_list);
-       f->f_maxcount = INT_MAX;
        return f;
 
 over:
index 27f66d3e8a0413091ab58b3f0b85fae788a224fe..6aa6fbe4f8ee9a5397408d59938140e38fa4c084 100644 (file)
@@ -155,7 +155,7 @@ static int vxfs_fill_super(struct super_block *sbp, void *dp, int silent)
 
        sbp->s_flags |= MS_RDONLY;
 
-       infp = kcalloc(1, sizeof(*infp), GFP_KERNEL);
+       infp = kzalloc(sizeof(*infp), GFP_KERNEL);
        if (!infp) {
                printk(KERN_WARNING "vxfs: unable to allocate incore superblock\n");
                return -ENOMEM;
index a096c5a5666442530eeb208baa4069122511c11d..3d5cdc6847c06f4200b93804710804541a909f67 100644 (file)
@@ -13,8 +13,6 @@
 
 #include "btree.h"
 
-#define REF_PAGES      0
-
 void hfs_bnode_read(struct hfs_bnode *node, void *buf,
                int off, int len)
 {
@@ -289,9 +287,7 @@ static struct hfs_bnode *__hfs_bnode_create(struct hfs_btree *tree, u32 cnid)
                        page_cache_release(page);
                        goto fail;
                }
-#if !REF_PAGES
                page_cache_release(page);
-#endif
                node->page[i] = page;
        }
 
@@ -449,13 +445,6 @@ void hfs_bnode_get(struct hfs_bnode *node)
 {
        if (node) {
                atomic_inc(&node->refcnt);
-#if REF_PAGES
-               {
-               int i;
-               for (i = 0; i < node->tree->pages_per_bnode; i++)
-                       get_page(node->page[i]);
-               }
-#endif
                dprint(DBG_BNODE_REFS, "get_node(%d:%d): %d\n",
                       node->tree->cnid, node->this, atomic_read(&node->refcnt));
        }
@@ -472,20 +461,12 @@ void hfs_bnode_put(struct hfs_bnode *node)
                       node->tree->cnid, node->this, atomic_read(&node->refcnt));
                if (!atomic_read(&node->refcnt))
                        BUG();
-               if (!atomic_dec_and_lock(&node->refcnt, &tree->hash_lock)) {
-#if REF_PAGES
-                       for (i = 0; i < tree->pages_per_bnode; i++)
-                               put_page(node->page[i]);
-#endif
+               if (!atomic_dec_and_lock(&node->refcnt, &tree->hash_lock))
                        return;
-               }
                for (i = 0; i < tree->pages_per_bnode; i++) {
                        if (!node->page[i])
                                continue;
                        mark_page_accessed(node->page[i]);
-#if REF_PAGES
-                       put_page(node->page[i]);
-#endif
                }
 
                if (test_bit(HFS_BNODE_DELETED, &node->flags)) {
index 65dedefcabfc5fd5fb00d129f7569ec40fe1a819..2fcd679f02383366b7f8774ef2ed00d9fe924727 100644 (file)
  *
  * Given the ID of the parent and the name build a search key.
  */
-void hfs_cat_build_key(btree_key *key, u32 parent, struct qstr *name)
+void hfs_cat_build_key(struct super_block *sb, btree_key *key, u32 parent, struct qstr *name)
 {
        key->cat.reserved = 0;
        key->cat.ParID = cpu_to_be32(parent);
        if (name) {
-               hfs_triv2mac(&key->cat.CName, name);
+               hfs_asc2mac(sb, &key->cat.CName, name);
                key->key_len = 6 + key->cat.CName.len;
        } else {
                memset(&key->cat.CName, 0, sizeof(struct hfs_name));
@@ -62,13 +62,14 @@ static int hfs_cat_build_record(hfs_cat_rec *rec, u32 cnid, struct inode *inode)
        }
 }
 
-static int hfs_cat_build_thread(hfs_cat_rec *rec, int type,
+static int hfs_cat_build_thread(struct super_block *sb,
+                               hfs_cat_rec *rec, int type,
                                u32 parentid, struct qstr *name)
 {
        rec->type = type;
        memset(rec->thread.reserved, 0, sizeof(rec->thread.reserved));
        rec->thread.ParID = cpu_to_be32(parentid);
-       hfs_triv2mac(&rec->thread.CName, name);
+       hfs_asc2mac(sb, &rec->thread.CName, name);
        return sizeof(struct hfs_cat_thread);
 }
 
@@ -93,8 +94,8 @@ int hfs_cat_create(u32 cnid, struct inode *dir, struct qstr *str, struct inode *
        sb = dir->i_sb;
        hfs_find_init(HFS_SB(sb)->cat_tree, &fd);
 
-       hfs_cat_build_key(fd.search_key, cnid, NULL);
-       entry_size = hfs_cat_build_thread(&entry, S_ISDIR(inode->i_mode) ?
+       hfs_cat_build_key(sb, fd.search_key, cnid, NULL);
+       entry_size = hfs_cat_build_thread(sb, &entry, S_ISDIR(inode->i_mode) ?
                        HFS_CDR_THD : HFS_CDR_FTH,
                        dir->i_ino, str);
        err = hfs_brec_find(&fd);
@@ -107,7 +108,7 @@ int hfs_cat_create(u32 cnid, struct inode *dir, struct qstr *str, struct inode *
        if (err)
                goto err2;
 
-       hfs_cat_build_key(fd.search_key, dir->i_ino, str);
+       hfs_cat_build_key(sb, fd.search_key, dir->i_ino, str);
        entry_size = hfs_cat_build_record(&entry, cnid, inode);
        err = hfs_brec_find(&fd);
        if (err != -ENOENT) {
@@ -127,7 +128,7 @@ int hfs_cat_create(u32 cnid, struct inode *dir, struct qstr *str, struct inode *
        return 0;
 
 err1:
-       hfs_cat_build_key(fd.search_key, cnid, NULL);
+       hfs_cat_build_key(sb, fd.search_key, cnid, NULL);
        if (!hfs_brec_find(&fd))
                hfs_brec_remove(&fd);
 err2:
@@ -176,7 +177,7 @@ int hfs_cat_find_brec(struct super_block *sb, u32 cnid,
        hfs_cat_rec rec;
        int res, len, type;
 
-       hfs_cat_build_key(fd->search_key, cnid, NULL);
+       hfs_cat_build_key(sb, fd->search_key, cnid, NULL);
        res = hfs_brec_read(fd, &rec, sizeof(rec));
        if (res)
                return res;
@@ -211,7 +212,7 @@ int hfs_cat_delete(u32 cnid, struct inode *dir, struct qstr *str)
        sb = dir->i_sb;
        hfs_find_init(HFS_SB(sb)->cat_tree, &fd);
 
-       hfs_cat_build_key(fd.search_key, dir->i_ino, str);
+       hfs_cat_build_key(sb, fd.search_key, dir->i_ino, str);
        res = hfs_brec_find(&fd);
        if (res)
                goto out;
@@ -239,7 +240,7 @@ int hfs_cat_delete(u32 cnid, struct inode *dir, struct qstr *str)
        if (res)
                goto out;
 
-       hfs_cat_build_key(fd.search_key, cnid, NULL);
+       hfs_cat_build_key(sb, fd.search_key, cnid, NULL);
        res = hfs_brec_find(&fd);
        if (!res) {
                res = hfs_brec_remove(&fd);
@@ -280,7 +281,7 @@ int hfs_cat_move(u32 cnid, struct inode *src_dir, struct qstr *src_name,
        dst_fd = src_fd;
 
        /* find the old dir entry and read the data */
-       hfs_cat_build_key(src_fd.search_key, src_dir->i_ino, src_name);
+       hfs_cat_build_key(sb, src_fd.search_key, src_dir->i_ino, src_name);
        err = hfs_brec_find(&src_fd);
        if (err)
                goto out;
@@ -289,7 +290,7 @@ int hfs_cat_move(u32 cnid, struct inode *src_dir, struct qstr *src_name,
                            src_fd.entrylength);
 
        /* create new dir entry with the data from the old entry */
-       hfs_cat_build_key(dst_fd.search_key, dst_dir->i_ino, dst_name);
+       hfs_cat_build_key(sb, dst_fd.search_key, dst_dir->i_ino, dst_name);
        err = hfs_brec_find(&dst_fd);
        if (err != -ENOENT) {
                if (!err)
@@ -305,7 +306,7 @@ int hfs_cat_move(u32 cnid, struct inode *src_dir, struct qstr *src_name,
        mark_inode_dirty(dst_dir);
 
        /* finally remove the old entry */
-       hfs_cat_build_key(src_fd.search_key, src_dir->i_ino, src_name);
+       hfs_cat_build_key(sb, src_fd.search_key, src_dir->i_ino, src_name);
        err = hfs_brec_find(&src_fd);
        if (err)
                goto out;
@@ -321,7 +322,7 @@ int hfs_cat_move(u32 cnid, struct inode *src_dir, struct qstr *src_name,
                goto out;
 
        /* remove old thread entry */
-       hfs_cat_build_key(src_fd.search_key, cnid, NULL);
+       hfs_cat_build_key(sb, src_fd.search_key, cnid, NULL);
        err = hfs_brec_find(&src_fd);
        if (err)
                goto out;
@@ -330,8 +331,8 @@ int hfs_cat_move(u32 cnid, struct inode *src_dir, struct qstr *src_name,
                goto out;
 
        /* create new thread entry */
-       hfs_cat_build_key(dst_fd.search_key, cnid, NULL);
-       entry_size = hfs_cat_build_thread(&entry, type == HFS_CDR_FIL ? HFS_CDR_FTH : HFS_CDR_THD,
+       hfs_cat_build_key(sb, dst_fd.search_key, cnid, NULL);
+       entry_size = hfs_cat_build_thread(sb, &entry, type == HFS_CDR_FIL ? HFS_CDR_FTH : HFS_CDR_THD,
                                        dst_dir->i_ino, dst_name);
        err = hfs_brec_find(&dst_fd);
        if (err != -ENOENT) {
index c55998262aed51632eefa6b6a347a5bd511fdd70..e1f24befba58b282b9f2aa7af6a5b4628cf6533d 100644 (file)
@@ -28,7 +28,7 @@ static struct dentry *hfs_lookup(struct inode *dir, struct dentry *dentry,
        dentry->d_op = &hfs_dentry_operations;
 
        hfs_find_init(HFS_SB(dir->i_sb)->cat_tree, &fd);
-       hfs_cat_build_key(fd.search_key, dir->i_ino, &dentry->d_name);
+       hfs_cat_build_key(dir->i_sb, fd.search_key, dir->i_ino, &dentry->d_name);
        res = hfs_brec_read(&fd, &rec, sizeof(rec));
        if (res) {
                hfs_find_exit(&fd);
@@ -56,7 +56,7 @@ static int hfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
        struct inode *inode = filp->f_dentry->d_inode;
        struct super_block *sb = inode->i_sb;
        int len, err;
-       char strbuf[HFS_NAMELEN + 1];
+       char strbuf[HFS_MAX_NAMELEN];
        union hfs_cat_rec entry;
        struct hfs_find_data fd;
        struct hfs_readdir_data *rd;
@@ -66,7 +66,7 @@ static int hfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                return 0;
 
        hfs_find_init(HFS_SB(sb)->cat_tree, &fd);
-       hfs_cat_build_key(fd.search_key, inode->i_ino, NULL);
+       hfs_cat_build_key(sb, fd.search_key, inode->i_ino, NULL);
        err = hfs_brec_find(&fd);
        if (err)
                goto out;
@@ -111,7 +111,7 @@ static int hfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                }
                hfs_bnode_read(fd.bnode, &entry, fd.entryoffset, fd.entrylength);
                type = entry.type;
-               len = hfs_mac2triv(strbuf, &fd.key->cat.CName);
+               len = hfs_mac2asc(sb, strbuf, &fd.key->cat.CName);
                if (type == HFS_CDR_DIR) {
                        if (fd.entrylength < sizeof(struct hfs_cat_dir)) {
                                printk("HFS: small dir entry\n");
@@ -307,7 +307,8 @@ static int hfs_rename(struct inode *old_dir, struct dentry *old_dentry,
                           old_dir, &old_dentry->d_name,
                           new_dir, &new_dentry->d_name);
        if (!res)
-               hfs_cat_build_key((btree_key *)&HFS_I(old_dentry->d_inode)->cat_key,
+               hfs_cat_build_key(old_dir->i_sb,
+                                 (btree_key *)&HFS_I(old_dentry->d_inode)->cat_key,
                                  new_dir->i_ino, &new_dentry->d_name);
        return res;
 }
index df6b33adee3bbd143d0a2873d9e378d44a7419d1..88099ab1a180121449cfc04d7ca3a0d26b9366ef 100644 (file)
@@ -25,6 +25,7 @@
 #define HFS_SECTOR_SIZE                512    /* size of an HFS sector */
 #define HFS_SECTOR_SIZE_BITS   9      /* log_2(HFS_SECTOR_SIZE) */
 #define HFS_NAMELEN            31     /* maximum length of an HFS filename */
+#define HFS_MAX_NAMELEN                128
 #define HFS_MAX_VALENCE                32767U
 
 /* Meanings of the drAtrb field of the MDB,
index 0dc8ef8e14de67e0fc2cd4dd9bf379ceaf26f8ea..aae019aadf8865728c2039deb5b2aba09b4a3517 100644 (file)
@@ -141,6 +141,8 @@ struct hfs_sb_info {
 
        int session, part;
 
+       struct nls_table *nls_io, *nls_disk;
+
        struct semaphore bitmap_lock;
 
        unsigned long flags;
@@ -168,7 +170,7 @@ extern int hfs_cat_create(u32, struct inode *, struct qstr *, struct inode *);
 extern int hfs_cat_delete(u32, struct inode *, struct qstr *);
 extern int hfs_cat_move(u32, struct inode *, struct qstr *,
                        struct inode *, struct qstr *);
-extern void hfs_cat_build_key(btree_key *, u32, struct qstr *);
+extern void hfs_cat_build_key(struct super_block *, btree_key *, u32, struct qstr *);
 
 /* dir.c */
 extern struct file_operations hfs_dir_operations;
@@ -222,8 +224,8 @@ extern int hfs_strcmp(const unsigned char *, unsigned int,
 extern int hfs_compare_dentry(struct dentry *, struct qstr *, struct qstr *);
 
 /* trans.c */
-extern void hfs_triv2mac(struct hfs_name *, struct qstr *);
-extern int hfs_mac2triv(char *, const struct hfs_name *);
+extern void hfs_asc2mac(struct super_block *, struct hfs_name *, struct qstr *);
+extern int hfs_mac2asc(struct super_block *, char *, const struct hfs_name *);
 
 extern struct timezone sys_tz;
 
index 75191232609454d67e0e126314c15ef782bdd398..f1570b9f9de30427f133670f02893a67726ed6ed 100644 (file)
@@ -160,7 +160,7 @@ struct inode *hfs_new_inode(struct inode *dir, struct qstr *name, int mode)
 
        init_MUTEX(&HFS_I(inode)->extents_lock);
        INIT_LIST_HEAD(&HFS_I(inode)->open_dir_list);
-       hfs_cat_build_key((btree_key *)&HFS_I(inode)->cat_key, dir->i_ino, name);
+       hfs_cat_build_key(sb, (btree_key *)&HFS_I(inode)->cat_key, dir->i_ino, name);
        inode->i_ino = HFS_SB(sb)->next_id++;
        inode->i_mode = mode;
        inode->i_uid = current->fsuid;
index 217e32f37e0be7bce323a9962c0cf95adb394b9e..0a473f79c89feb192b71dba3f66a7951536c86f8 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <linux/cdrom.h>
 #include <linux/genhd.h>
+#include <linux/nls.h>
 
 #include "hfs_fs.h"
 #include "btree.h"
@@ -343,6 +344,11 @@ void hfs_mdb_put(struct super_block *sb)
        brelse(HFS_SB(sb)->mdb_bh);
        brelse(HFS_SB(sb)->alt_mdb_bh);
 
+       if (HFS_SB(sb)->nls_io)
+               unload_nls(HFS_SB(sb)->nls_io);
+       if (HFS_SB(sb)->nls_disk)
+               unload_nls(HFS_SB(sb)->nls_disk);
+
        kfree(HFS_SB(sb));
        sb->s_fs_info = NULL;
 }
index ab783f6afa3b08d00c18c564b598f353af07084f..c5074aeafcae7e8bebaf55780e1548692cdad78b 100644 (file)
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/blkdev.h>
+#include <linux/mount.h>
 #include <linux/init.h>
+#include <linux/nls.h>
 #include <linux/parser.h>
+#include <linux/seq_file.h>
 #include <linux/vfs.h>
 
 #include "hfs_fs.h"
@@ -111,6 +114,32 @@ static int hfs_remount(struct super_block *sb, int *flags, char *data)
        return 0;
 }
 
+static int hfs_show_options(struct seq_file *seq, struct vfsmount *mnt)
+{
+       struct hfs_sb_info *sbi = HFS_SB(mnt->mnt_sb);
+
+       if (sbi->s_creator != cpu_to_be32(0x3f3f3f3f))
+               seq_printf(seq, ",creator=%.4s", (char *)&sbi->s_creator);
+       if (sbi->s_type != cpu_to_be32(0x3f3f3f3f))
+               seq_printf(seq, ",type=%.4s", (char *)&sbi->s_type);
+       seq_printf(seq, ",uid=%u,gid=%u", sbi->s_uid, sbi->s_gid);
+       if (sbi->s_file_umask != 0133)
+               seq_printf(seq, ",file_umask=%o", sbi->s_file_umask);
+       if (sbi->s_dir_umask != 0022)
+               seq_printf(seq, ",dir_umask=%o", sbi->s_dir_umask);
+       if (sbi->part >= 0)
+               seq_printf(seq, ",part=%u", sbi->part);
+       if (sbi->session >= 0)
+               seq_printf(seq, ",session=%u", sbi->session);
+       if (sbi->nls_disk)
+               seq_printf(seq, ",codepage=%s", sbi->nls_disk->charset);
+       if (sbi->nls_io)
+               seq_printf(seq, ",iocharset=%s", sbi->nls_io->charset);
+       if (sbi->s_quiet)
+               seq_printf(seq, ",quiet");
+       return 0;
+}
+
 static struct inode *hfs_alloc_inode(struct super_block *sb)
 {
        struct hfs_inode_info *i;
@@ -133,11 +162,13 @@ static struct super_operations hfs_super_operations = {
        .write_super    = hfs_write_super,
        .statfs         = hfs_statfs,
        .remount_fs     = hfs_remount,
+       .show_options   = hfs_show_options,
 };
 
 enum {
        opt_uid, opt_gid, opt_umask, opt_file_umask, opt_dir_umask,
        opt_part, opt_session, opt_type, opt_creator, opt_quiet,
+       opt_codepage, opt_iocharset,
        opt_err
 };
 
@@ -152,6 +183,8 @@ static match_table_t tokens = {
        { opt_type, "type=%s" },
        { opt_creator, "creator=%s" },
        { opt_quiet, "quiet" },
+       { opt_codepage, "codepage=%s" },
+       { opt_iocharset, "iocharset=%s" },
        { opt_err, NULL }
 };
 
@@ -257,11 +290,46 @@ static int parse_options(char *options, struct hfs_sb_info *hsb)
                case opt_quiet:
                        hsb->s_quiet = 1;
                        break;
+               case opt_codepage:
+                       if (hsb->nls_disk) {
+                               printk("HFS+-fs: unable to change codepage\n");
+                               return 0;
+                       }
+                       p = match_strdup(&args[0]);
+                       hsb->nls_disk = load_nls(p);
+                       if (!hsb->nls_disk) {
+                               printk("HFS+-fs: unable to load codepage \"%s\"\n", p);
+                               kfree(p);
+                               return 0;
+                       }
+                       kfree(p);
+                       break;
+               case opt_iocharset:
+                       if (hsb->nls_io) {
+                               printk("HFS: unable to change iocharset\n");
+                               return 0;
+                       }
+                       p = match_strdup(&args[0]);
+                       hsb->nls_io = load_nls(p);
+                       if (!hsb->nls_io) {
+                               printk("HFS: unable to load iocharset \"%s\"\n", p);
+                               kfree(p);
+                               return 0;
+                       }
+                       kfree(p);
+                       break;
                default:
                        return 0;
                }
        }
 
+       if (hsb->nls_disk && !hsb->nls_io) {
+               hsb->nls_io = load_nls_default();
+               if (!hsb->nls_io) {
+                       printk("HFS: unable to load default iocharset\n");
+                       return 0;
+               }
+       }
        hsb->s_dir_umask &= 0777;
        hsb->s_file_umask &= 0577;
 
index fb9720abbadd64ff572f58b4533302247347e50c..e673a88b8ae7560b14796b611aa57b267193411f 100644 (file)
@@ -9,12 +9,15 @@
  * with ':' vs. '/' as the path-element separator.
  */
 
+#include <linux/types.h>
+#include <linux/nls.h>
+
 #include "hfs_fs.h"
 
 /*================ Global functions ================*/
 
 /*
- * hfs_mac2triv()
+ * hfs_mac2asc()
  *
  * Given a 'Pascal String' (a string preceded by a length byte) in
  * the Macintosh character set produce the corresponding filename using
  * by ':' which never appears in HFS filenames.         All other characters
  * are passed unchanged from input to output.
  */
-int hfs_mac2triv(char *out, const struct hfs_name *in)
+int hfs_mac2asc(struct super_block *sb, char *out, const struct hfs_name *in)
 {
-       const char *p;
-       char c;
-       int i, len;
+       struct nls_table *nls_disk = HFS_SB(sb)->nls_disk;
+       struct nls_table *nls_io = HFS_SB(sb)->nls_io;
+       const char *src;
+       char *dst;
+       int srclen, dstlen, size;
+
+       src = in->name;
+       srclen = in->len;
+       dst = out;
+       dstlen = HFS_MAX_NAMELEN;
+       if (nls_io) {
+               wchar_t ch;
 
-       len = in->len;
-       p = in->name;
-       for (i = 0; i < len; i++) {
-               c = *p++;
-               *out++ = c == '/' ? ':' : c;
+               while (srclen > 0) {
+                       if (nls_disk) {
+                               size = nls_disk->char2uni(src, srclen, &ch);
+                               if (size <= 0) {
+                                       ch = '?';
+                                       size = 1;
+                               }
+                               src += size;
+                               srclen -= size;
+                       } else {
+                               ch = *src++;
+                               srclen--;
+                       }
+                       if (ch == '/')
+                               ch = ':';
+                       size = nls_io->uni2char(ch, dst, dstlen);
+                       if (size < 0) {
+                               if (size == -ENAMETOOLONG)
+                                       goto out;
+                               *dst = '?';
+                               size = 1;
+                       }
+                       dst += size;
+                       dstlen -= size;
+               }
+       } else {
+               char ch;
+
+               while (--srclen >= 0)
+                       *dst++ = (ch = *src++) == '/' ? ':' : ch;
        }
-       return i;
+out:
+       return dst - out;
 }
 
 /*
- * hfs_triv2mac()
+ * hfs_asc2mac()
  *
  * Given an ASCII string (not null-terminated) and its length,
  * generate the corresponding filename in the Macintosh character set
@@ -54,19 +92,57 @@ int hfs_mac2triv(char *out, const struct hfs_name *in)
  * This routine is a inverse to hfs_mac2triv().
  * A ':' is replaced by a '/'.
  */
-void hfs_triv2mac(struct hfs_name *out, struct qstr *in)
+void hfs_asc2mac(struct super_block *sb, struct hfs_name *out, struct qstr *in)
 {
+       struct nls_table *nls_disk = HFS_SB(sb)->nls_disk;
+       struct nls_table *nls_io = HFS_SB(sb)->nls_io;
        const char *src;
-       char *dst, c;
-       int i, len;
+       char *dst;
+       int srclen, dstlen, size;
 
-       out->len = len = min((unsigned int)HFS_NAMELEN, in->len);
        src = in->name;
+       srclen = in->len;
        dst = out->name;
-       for (i = 0; i < len; i++) {
-               c = *src++;
-               *dst++ = c == ':' ? '/' : c;
+       dstlen = HFS_NAMELEN;
+       if (nls_io) {
+               wchar_t ch;
+
+               while (srclen > 0) {
+                       size = nls_io->char2uni(src, srclen, &ch);
+                       if (size < 0) {
+                               ch = '?';
+                               size = 1;
+                       }
+                       src += size;
+                       srclen -= size;
+                       if (ch == ':')
+                               ch = '/';
+                       if (nls_disk) {
+                               size = nls_disk->uni2char(ch, dst, dstlen);
+                               if (size < 0) {
+                                       if (size == -ENAMETOOLONG)
+                                               goto out;
+                                       *dst = '?';
+                                       size = 1;
+                               }
+                               dst += size;
+                               dstlen -= size;
+                       } else {
+                               *dst++ = ch > 0xff ? '?' : ch;
+                               dstlen--;
+                       }
+               }
+       } else {
+               char ch;
+
+               if (dstlen > srclen)
+                       dstlen = srclen;
+               while (--dstlen >= 0)
+                       *dst++ = (ch = *src++) == ':' ? '/' : ch;
        }
-       for (; i < HFS_NAMELEN; i++)
+out:
+       out->len = dst - (char *)out->name;
+       dstlen = HFS_NAMELEN - out->len;
+       while (--dstlen >= 0)
                *dst++ = 0;
 }
index 8868d3b766fd46e1c263dfdde6d1688cc1f5cd09..b85abc6e6f83b3c3344ac102521521f7655d5134 100644 (file)
@@ -18,8 +18,6 @@
 #include "hfsplus_fs.h"
 #include "hfsplus_raw.h"
 
-#define REF_PAGES      0
-
 /* Copy a specified range of bytes from the raw data of a node */
 void hfs_bnode_read(struct hfs_bnode *node, void *buf, int off, int len)
 {
@@ -450,9 +448,7 @@ static struct hfs_bnode *__hfs_bnode_create(struct hfs_btree *tree, u32 cnid)
                        page_cache_release(page);
                        goto fail;
                }
-#if !REF_PAGES
                page_cache_release(page);
-#endif
                node->page[i] = page;
        }
 
@@ -612,13 +608,6 @@ void hfs_bnode_get(struct hfs_bnode *node)
 {
        if (node) {
                atomic_inc(&node->refcnt);
-#if REF_PAGES
-               {
-               int i;
-               for (i = 0; i < node->tree->pages_per_bnode; i++)
-                       get_page(node->page[i]);
-               }
-#endif
                dprint(DBG_BNODE_REFS, "get_node(%d:%d): %d\n",
                       node->tree->cnid, node->this, atomic_read(&node->refcnt));
        }
@@ -635,20 +624,12 @@ void hfs_bnode_put(struct hfs_bnode *node)
                       node->tree->cnid, node->this, atomic_read(&node->refcnt));
                if (!atomic_read(&node->refcnt))
                        BUG();
-               if (!atomic_dec_and_lock(&node->refcnt, &tree->hash_lock)) {
-#if REF_PAGES
-                       for (i = 0; i < tree->pages_per_bnode; i++)
-                               put_page(node->page[i]);
-#endif
+               if (!atomic_dec_and_lock(&node->refcnt, &tree->hash_lock))
                        return;
-               }
                for (i = 0; i < tree->pages_per_bnode; i++) {
                        if (!node->page[i])
                                continue;
                        mark_page_accessed(node->page[i]);
-#if REF_PAGES
-                       put_page(node->page[i]);
-#endif
                }
 
                if (test_bit(HFS_BNODE_DELETED, &node->flags)) {
index 533094a570df3011f032822974669195fd19cd16..2bc0cdd30e5656f3325be27d84b6369f345e6a40 100644 (file)
@@ -343,8 +343,9 @@ ssize_t hfsplus_getxattr(struct dentry *dentry, const char *name,
 ssize_t hfsplus_listxattr(struct dentry *dentry, char *buffer, size_t size);
 
 /* options.c */
-int parse_options(char *, struct hfsplus_sb_info *);
-void fill_defaults(struct hfsplus_sb_info *);
+int hfsplus_parse_options(char *, struct hfsplus_sb_info *);
+void hfsplus_fill_defaults(struct hfsplus_sb_info *);
+int hfsplus_show_options(struct seq_file *, struct vfsmount *);
 
 /* tables.c */
 extern u16 hfsplus_case_fold_table[];
index 1cca0102c98d30e4c57a3f8097669959e64c9d45..cca0818aa4ca3dbd18fe842e802e38b558fa4d90 100644 (file)
@@ -13,6 +13,8 @@
 #include <linux/sched.h>
 #include <linux/parser.h>
 #include <linux/nls.h>
+#include <linux/mount.h>
+#include <linux/seq_file.h>
 #include "hfsplus_fs.h"
 
 enum {
@@ -38,7 +40,7 @@ static match_table_t tokens = {
 };
 
 /* Initialize an options object to reasonable defaults */
-void fill_defaults(struct hfsplus_sb_info *opts)
+void hfsplus_fill_defaults(struct hfsplus_sb_info *opts)
 {
        if (!opts)
                return;
@@ -63,7 +65,7 @@ static inline int match_fourchar(substring_t *arg, u32 *result)
 
 /* Parse options from mount. Returns 0 on failure */
 /* input is the options passed to mount() as a string */
-int parse_options(char *input, struct hfsplus_sb_info *sbi)
+int hfsplus_parse_options(char *input, struct hfsplus_sb_info *sbi)
 {
        char *p;
        substring_t args[MAX_OPT_ARGS];
@@ -160,3 +162,23 @@ done:
 
        return 1;
 }
+
+int hfsplus_show_options(struct seq_file *seq, struct vfsmount *mnt)
+{
+       struct hfsplus_sb_info *sbi = &HFSPLUS_SB(mnt->mnt_sb);
+
+       if (sbi->creator != HFSPLUS_DEF_CR_TYPE)
+               seq_printf(seq, ",creator=%.4s", (char *)&sbi->creator);
+       if (sbi->type != HFSPLUS_DEF_CR_TYPE)
+               seq_printf(seq, ",type=%.4s", (char *)&sbi->type);
+       seq_printf(seq, ",umask=%o,uid=%u,gid=%u", sbi->umask, sbi->uid, sbi->gid);
+       if (sbi->part >= 0)
+               seq_printf(seq, ",part=%u", sbi->part);
+       if (sbi->session >= 0)
+               seq_printf(seq, ",session=%u", sbi->session);
+       if (sbi->nls)
+               seq_printf(seq, ",nls=%s", sbi->nls->charset);
+       if (sbi->flags & HFSPLUS_SB_NODECOMPOSE)
+               seq_printf(seq, ",nodecompose");
+       return 0;
+}
index d55ad67b8e4238e3625f2139b78b353858337657..fd0f0f050e1d5f3643f7b6e7273af4d7ade0448e 100644 (file)
@@ -217,8 +217,7 @@ static void hfsplus_put_super(struct super_block *sb)
                vhdr->attributes |= cpu_to_be32(HFSPLUS_VOL_UNMNT);
                vhdr->attributes &= cpu_to_be32(~HFSPLUS_VOL_INCNSTNT);
                mark_buffer_dirty(HFSPLUS_SB(sb).s_vhbh);
-               ll_rw_block(WRITE, 1, &HFSPLUS_SB(sb).s_vhbh);
-               wait_on_buffer(HFSPLUS_SB(sb).s_vhbh);
+               sync_dirty_buffer(HFSPLUS_SB(sb).s_vhbh);
        }
 
        hfs_btree_close(HFSPLUS_SB(sb).cat_tree);
@@ -277,6 +276,7 @@ static struct super_operations hfsplus_sops = {
        .write_super    = hfsplus_write_super,
        .statfs         = hfsplus_statfs,
        .remount_fs     = hfsplus_remount,
+       .show_options   = hfsplus_show_options,
 };
 
 static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
@@ -297,8 +297,8 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
        memset(sbi, 0, sizeof(HFSPLUS_SB(sb)));
        sb->s_fs_info = sbi;
        INIT_HLIST_HEAD(&sbi->rsrc_inodes);
-       fill_defaults(sbi);
-       if (!parse_options(data, sbi)) {
+       hfsplus_fill_defaults(sbi);
+       if (!hfsplus_parse_options(data, sbi)) {
                if (!silent)
                        printk("HFS+-fs: unable to parse mount options\n");
                err = -EINVAL;
@@ -415,8 +415,7 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
        vhdr->attributes &= cpu_to_be32(~HFSPLUS_VOL_UNMNT);
        vhdr->attributes |= cpu_to_be32(HFSPLUS_VOL_INCNSTNT);
        mark_buffer_dirty(HFSPLUS_SB(sb).s_vhbh);
-       ll_rw_block(WRITE, 1, &HFSPLUS_SB(sb).s_vhbh);
-       wait_on_buffer(HFSPLUS_SB(sb).s_vhbh);
+       sync_dirty_buffer(HFSPLUS_SB(sb).s_vhbh);
 
        if (!HFSPLUS_SB(sb).hidden_dir) {
                printk("HFS+: create hidden dir...\n");
index 67bca0d4a33ba5977a94c6a3d71b636010ac67a7..cca3fb693f9905e52ab1e6f486091d89ee2650e5 100644 (file)
@@ -49,7 +49,6 @@ struct hostfs_iattr {
        struct timespec ia_atime;
        struct timespec ia_mtime;
        struct timespec ia_ctime;
-       unsigned int    ia_attr_flags;
 };
 
 extern int stat_file(const char *path, unsigned long long *inode_out,
index e57f1724db3e89242afb362dfcda99178a2c4015..71df1b1e8f75a87910357025048b38ba7d382df6 100644 (file)
@@ -1195,9 +1195,6 @@ void update_atime(struct inode *inode)
        if (!timespec_equal(&inode->i_atime, &now)) {
                inode->i_atime = now;
                mark_inode_dirty_sync(inode);
-       } else {
-               if (!timespec_equal(&inode->i_atime, &now))
-                       inode->i_atime = now;
        }
 }
 
index 2e4e2a57708cf95dcdf348235376ef901f4dc295..a37e9fb1da589fa1457929e2079e176220ad34c0 100644 (file)
@@ -37,6 +37,7 @@
 #include <asm/ioctls.h>
 
 static atomic_t inotify_cookie;
+static atomic_t inotify_watches;
 
 static kmem_cache_t *watch_cachep;
 static kmem_cache_t *event_cachep;
@@ -422,6 +423,7 @@ static struct inotify_watch *create_watch(struct inotify_device *dev,
        get_inotify_watch(watch);
 
        atomic_inc(&dev->user->inotify_watches);
+       atomic_inc(&inotify_watches);
 
        return watch;
 }
@@ -454,6 +456,7 @@ static void remove_watch_no_event(struct inotify_watch *watch,
        list_del(&watch->d_list);
 
        atomic_dec(&dev->user->inotify_watches);
+       atomic_dec(&inotify_watches);
        idr_remove(&dev->idr, watch->wd);
        put_inotify_watch(watch);
 }
@@ -532,6 +535,9 @@ void inotify_dentry_parent_queue_event(struct dentry *dentry, u32 mask,
        struct dentry *parent;
        struct inode *inode;
 
+       if (!atomic_read (&inotify_watches))
+               return;
+
        spin_lock(&dentry->d_lock);
        parent = dentry->d_parent;
        inode = parent->d_inode;
@@ -925,6 +931,7 @@ asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, u32 mask)
        struct nameidata nd;
        struct file *filp;
        int ret, fput_needed;
+       int mask_add = 0;
 
        filp = fget_light(fd, &fput_needed);
        if (unlikely(!filp))
@@ -947,6 +954,9 @@ asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, u32 mask)
        down(&inode->inotify_sem);
        down(&dev->sem);
 
+       if (mask & IN_MASK_ADD)
+               mask_add = 1;
+
        /* don't let user-space set invalid bits: we don't want flags set */
        mask &= IN_ALL_EVENTS;
        if (unlikely(!mask)) {
@@ -960,7 +970,10 @@ asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, u32 mask)
         */
        old = inode_find_dev(inode, dev);
        if (unlikely(old)) {
-               old->mask = mask;
+               if (mask_add)
+                       old->mask |= mask;
+               else
+                       old->mask = mask;
                ret = old->wd;
                goto out;
        }
@@ -1043,6 +1056,7 @@ static int __init inotify_setup(void)
        inotify_max_user_watches = 8192;
 
        atomic_set(&inotify_cookie, 0);
+       atomic_set(&inotify_watches, 0);
 
        watch_cachep = kmem_cache_create("inotify_watch_cache",
                                         sizeof(struct inotify_watch),
index 5a97e346bd95a247c12f0edcc5b33d1b065d6419..014a51fd00d776d0ded21d1e3eaf6b7cf22ca1ec 100644 (file)
@@ -204,7 +204,7 @@ __flush_batch(journal_t *journal, struct buffer_head **bhs, int *batch_count)
        int i;
 
        spin_unlock(&journal->j_list_lock);
-       ll_rw_block(WRITE, *batch_count, bhs);
+       ll_rw_block(SWRITE, *batch_count, bhs);
        spin_lock(&journal->j_list_lock);
        for (i = 0; i < *batch_count; i++) {
                struct buffer_head *bh = bhs[i];
index dac720c837abf0475ee41fa56708c5748daf480d..2a3e310f79efa7c3665dd037dd572ca35780677f 100644 (file)
@@ -358,7 +358,7 @@ write_out_data:
                                        jbd_debug(2, "submit %d writes\n",
                                                        bufs);
                                        spin_unlock(&journal->j_list_lock);
-                                       ll_rw_block(WRITE, bufs, wbuf);
+                                       ll_rw_block(SWRITE, bufs, wbuf);
                                        journal_brelse_array(wbuf, bufs);
                                        bufs = 0;
                                        goto write_out_data;
@@ -381,7 +381,7 @@ write_out_data:
 
        if (bufs) {
                spin_unlock(&journal->j_list_lock);
-               ll_rw_block(WRITE, bufs, wbuf);
+               ll_rw_block(SWRITE, bufs, wbuf);
                journal_brelse_array(wbuf, bufs);
                spin_lock(&journal->j_list_lock);
        }
@@ -720,11 +720,17 @@ wait_for_iobuf:
        J_ASSERT(commit_transaction->t_log_list == NULL);
 
 restart_loop:
+       /*
+        * As there are other places (journal_unmap_buffer()) adding buffers
+        * to this list we have to be careful and hold the j_list_lock.
+        */
+       spin_lock(&journal->j_list_lock);
        while (commit_transaction->t_forget) {
                transaction_t *cp_transaction;
                struct buffer_head *bh;
 
                jh = commit_transaction->t_forget;
+               spin_unlock(&journal->j_list_lock);
                bh = jh2bh(jh);
                jbd_lock_bh_state(bh);
                J_ASSERT_JH(jh, jh->b_transaction == commit_transaction ||
@@ -792,9 +798,25 @@ restart_loop:
                        journal_remove_journal_head(bh);  /* needs a brelse */
                        release_buffer_page(bh);
                }
+               cond_resched_lock(&journal->j_list_lock);
+       }
+       spin_unlock(&journal->j_list_lock);
+       /*
+        * This is a bit sleazy.  We borrow j_list_lock to protect
+        * journal->j_committing_transaction in __journal_remove_checkpoint.
+        * Really, __journal_remove_checkpoint should be using j_state_lock but
+        * it's a bit hassle to hold that across __journal_remove_checkpoint
+        */
+       spin_lock(&journal->j_state_lock);
+       spin_lock(&journal->j_list_lock);
+       /*
+        * Now recheck if some buffers did not get attached to the transaction
+        * while the lock was dropped...
+        */
+       if (commit_transaction->t_forget) {
                spin_unlock(&journal->j_list_lock);
-               if (cond_resched())
-                       goto restart_loop;
+               spin_unlock(&journal->j_state_lock);
+               goto restart_loop;
        }
 
        /* Done with this transaction! */
@@ -803,14 +825,6 @@ restart_loop:
 
        J_ASSERT(commit_transaction->t_state == T_COMMIT);
 
-       /*
-        * This is a bit sleazy.  We borrow j_list_lock to protect
-        * journal->j_committing_transaction in __journal_remove_checkpoint.
-        * Really, __jornal_remove_checkpoint should be using j_state_lock but
-        * it's a bit hassle to hold that across __journal_remove_checkpoint
-        */
-       spin_lock(&journal->j_state_lock);
-       spin_lock(&journal->j_list_lock);
        commit_transaction->t_state = T_FINISHED;
        J_ASSERT(commit_transaction == journal->j_committing_transaction);
        journal->j_commit_sequence = commit_transaction->t_tid;
index 5e7b439495171c9d0fcfa7f28b2fa51aab489823..7ae2c4fe506bb5bd7b2ac21c6bbf80795741361d 100644 (file)
@@ -65,7 +65,6 @@ EXPORT_SYMBOL(journal_set_features);
 EXPORT_SYMBOL(journal_create);
 EXPORT_SYMBOL(journal_load);
 EXPORT_SYMBOL(journal_destroy);
-EXPORT_SYMBOL(journal_recover);
 EXPORT_SYMBOL(journal_update_superblock);
 EXPORT_SYMBOL(journal_abort);
 EXPORT_SYMBOL(journal_errno);
@@ -81,6 +80,7 @@ EXPORT_SYMBOL(journal_try_to_free_buffers);
 EXPORT_SYMBOL(journal_force_commit);
 
 static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *);
+static void __journal_abort_soft (journal_t *journal, int errno);
 
 /*
  * Helper function used to manage commit timeouts
@@ -93,16 +93,6 @@ static void commit_timeout(unsigned long __data)
        wake_up_process(p);
 }
 
-/* Static check for data structure consistency.  There's no code
- * invoked --- we'll just get a linker failure if things aren't right.
- */
-void __journal_internal_check(void)
-{
-       extern void journal_bad_superblock_size(void);
-       if (sizeof(struct journal_superblock_s) != 1024)
-               journal_bad_superblock_size();
-}
-
 /*
  * kjournald: The main thread function used to manage a logging device
  * journal.
@@ -119,16 +109,12 @@ void __journal_internal_check(void)
  *    known as checkpointing, and this thread is responsible for that job.
  */
 
-journal_t *current_journal;            // AKPM: debug
-
-int kjournald(void *arg)
+static int kjournald(void *arg)
 {
        journal_t *journal = (journal_t *) arg;
        transaction_t *transaction;
        struct timer_list timer;
 
-       current_journal = journal;
-
        daemonize("kjournald");
 
        /* Set up an interval timer which can be used to trigger a
@@ -193,6 +179,8 @@ loop:
                if (transaction && time_after_eq(jiffies,
                                                transaction->t_expires))
                        should_sleep = 0;
+               if (journal->j_flags & JFS_UNMOUNT)
+                       should_sleep = 0;
                if (should_sleep) {
                        spin_unlock(&journal->j_state_lock);
                        schedule();
@@ -969,7 +957,7 @@ void journal_update_superblock(journal_t *journal, int wait)
        if (wait)
                sync_dirty_buffer(bh);
        else
-               ll_rw_block(WRITE, 1, &bh);
+               ll_rw_block(SWRITE, 1, &bh);
 
 out:
        /* If we have just flushed the log (by marking s_start==0), then
@@ -1439,7 +1427,7 @@ int journal_wipe(journal_t *journal, int write)
  * device this journal is present.
  */
 
-const char *journal_dev_name(journal_t *journal, char *buffer)
+static const char *journal_dev_name(journal_t *journal, char *buffer)
 {
        struct block_device *bdev;
 
@@ -1485,7 +1473,7 @@ void __journal_abort_hard(journal_t *journal)
 
 /* Soft abort: record the abort error status in the journal superblock,
  * but don't do any other IO. */
-void __journal_abort_soft (journal_t *journal, int errno)
+static void __journal_abort_soft (journal_t *journal, int errno)
 {
        if (journal->j_flags & JFS_ABORT)
                return;
@@ -1880,7 +1868,7 @@ EXPORT_SYMBOL(journal_enable_debug);
 
 static struct proc_dir_entry *proc_jbd_debug;
 
-int read_jbd_debug(char *page, char **start, off_t off,
+static int read_jbd_debug(char *page, char **start, off_t off,
                          int count, int *eof, void *data)
 {
        int ret;
@@ -1890,7 +1878,7 @@ int read_jbd_debug(char *page, char **start, off_t off,
        return ret;
 }
 
-int write_jbd_debug(struct file *file, const char __user *buffer,
+static int write_jbd_debug(struct file *file, const char __user *buffer,
                           unsigned long count, void *data)
 {
        char buf[32];
@@ -1979,6 +1967,14 @@ static int __init journal_init(void)
 {
        int ret;
 
+/* Static check for data structure consistency.  There's no code
+ * invoked --- we'll just get a linker failure if things aren't right.
+ */
+       extern void journal_bad_superblock_size(void);
+       if (sizeof(struct journal_superblock_s) != 1024)
+               journal_bad_superblock_size();
+
+
        ret = journal_init_caches();
        if (ret != 0)
                journal_destroy_caches();
index d327a598f8612843fddcf91be7df805e23acbc70..a56144183462e20d06ad756a5b6d062c44333838 100644 (file)
@@ -116,7 +116,8 @@ static inline int hash(journal_t *journal, unsigned long block)
                (block << (hash_shift - 12))) & (table->hash_size - 1);
 }
 
-int insert_revoke_hash(journal_t *journal, unsigned long blocknr, tid_t seq)
+static int insert_revoke_hash(journal_t *journal, unsigned long blocknr,
+                             tid_t seq)
 {
        struct list_head *hash_list;
        struct jbd_revoke_record_s *record;
@@ -613,7 +614,7 @@ static void flush_descriptor(journal_t *journal,
        set_buffer_jwrite(bh);
        BUFFER_TRACE(bh, "write");
        set_buffer_dirty(bh);
-       ll_rw_block(WRITE, 1, &bh);
+       ll_rw_block(SWRITE, 1, &bh);
 }
 #endif
 
index 77b7662b840b480f681c8cc889c5689d2b60f253..c6ec66fd876682f4846f0638c2b3682a66b49f94 100644 (file)
@@ -490,23 +490,21 @@ void journal_unlock_updates (journal_t *journal)
  */
 static void jbd_unexpected_dirty_buffer(struct journal_head *jh)
 {
-       struct buffer_head *bh = jh2bh(jh);
        int jlist;
 
-       if (buffer_dirty(bh)) {
-               /* If this buffer is one which might reasonably be dirty
-                * --- ie. data, or not part of this journal --- then
-                * we're OK to leave it alone, but otherwise we need to
-                * move the dirty bit to the journal's own internal
-                * JBDDirty bit. */
-               jlist = jh->b_jlist;
-
-               if (jlist == BJ_Metadata || jlist == BJ_Reserved || 
-                   jlist == BJ_Shadow || jlist == BJ_Forget) {
-                       if (test_clear_buffer_dirty(jh2bh(jh))) {
-                               set_bit(BH_JBDDirty, &jh2bh(jh)->b_state);
-                       }
-               }
+       /* If this buffer is one which might reasonably be dirty
+        * --- ie. data, or not part of this journal --- then
+        * we're OK to leave it alone, but otherwise we need to
+        * move the dirty bit to the journal's own internal
+        * JBDDirty bit. */
+       jlist = jh->b_jlist;
+
+       if (jlist == BJ_Metadata || jlist == BJ_Reserved ||
+           jlist == BJ_Shadow || jlist == BJ_Forget) {
+               struct buffer_head *bh = jh2bh(jh);
+
+               if (test_clear_buffer_dirty(bh))
+                       set_buffer_jbddirty(bh);
        }
 }
 
@@ -574,9 +572,14 @@ repeat:
                        if (jh->b_next_transaction)
                                J_ASSERT_JH(jh, jh->b_next_transaction ==
                                                        transaction);
-                       JBUFFER_TRACE(jh, "Unexpected dirty buffer");
-                       jbd_unexpected_dirty_buffer(jh);
-               }
+               }
+               /*
+                * In any case we need to clean the dirty flag and we must
+                * do it under the buffer lock to be sure we don't race
+                * with running write-out.
+                */
+               JBUFFER_TRACE(jh, "Unexpected dirty buffer");
+               jbd_unexpected_dirty_buffer(jh);
        }
 
        unlock_buffer(bh);
index bfbeb4c86e03af70713b00b55e846b7dde0fc8cf..777b90057b893968a2718fb3163407811947c146 100644 (file)
@@ -1629,9 +1629,6 @@ static int jffs_fsync(struct file *f, struct dentry *d, int datasync)
 }
 
 
-extern int generic_file_open(struct inode *, struct file *) __attribute__((weak));
-extern loff_t generic_file_llseek(struct file *, loff_t, int) __attribute__((weak));
-
 static struct file_operations jffs_file_operations =
 {
        .open           = generic_file_open,
index bd9ed9b0247b1d48de85680c7bed66e04b1787a2..8279bf0133ff573549c0570b707a447042fa4cf9 100644 (file)
@@ -21,9 +21,6 @@
 #include <linux/jffs2.h>
 #include "nodelist.h"
 
-extern int generic_file_open(struct inode *, struct file *) __attribute__((weak));
-extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin) __attribute__((weak));
-
 static int jffs2_commit_write (struct file *filp, struct page *pg,
                               unsigned start, unsigned end);
 static int jffs2_prepare_write (struct file *filp, struct page *pg,
index 86ccac80f0abc1cea8a4c42641dac38925f734ad..72a5588faecac5040a241448796d0cfb1e7a5b3f 100644 (file)
@@ -37,6 +37,9 @@
 #define JFS_ERR_CONTINUE   0x00000004   /* continue */
 #define JFS_ERR_PANIC      0x00000008   /* panic */
 
+#define        JFS_USRQUOTA    0x00000010
+#define        JFS_GRPQUOTA    0x00000020
+
 /* platform option (conditional compilation) */
 #define JFS_AIX                0x80000000      /* AIX support */
 /*     POSIX name/directory  support */
index 9ff89720f93bab8bfeaee75ac656e04f6a0de3ee..71bc34b96b2b89d81a0086265aacba9be8b509d6 100644 (file)
 #include <linux/parser.h>
 #include <linux/completion.h>
 #include <linux/vfs.h>
+#include <linux/mount.h>
 #include <linux/moduleparam.h>
 #include <linux/posix_acl.h>
 #include <asm/uaccess.h>
+#include <linux/seq_file.h>
 
 #include "jfs_incore.h"
 #include "jfs_filsys.h"
@@ -192,7 +194,8 @@ static void jfs_put_super(struct super_block *sb)
 
 enum {
        Opt_integrity, Opt_nointegrity, Opt_iocharset, Opt_resize,
-       Opt_resize_nosize, Opt_errors, Opt_ignore, Opt_err,
+       Opt_resize_nosize, Opt_errors, Opt_ignore, Opt_err, Opt_quota,
+       Opt_usrquota, Opt_grpquota
 };
 
 static match_table_t tokens = {
@@ -204,8 +207,8 @@ static match_table_t tokens = {
        {Opt_errors, "errors=%s"},
        {Opt_ignore, "noquota"},
        {Opt_ignore, "quota"},
-       {Opt_ignore, "usrquota"},
-       {Opt_ignore, "grpquota"},
+       {Opt_usrquota, "usrquota"},
+       {Opt_grpquota, "grpquota"},
        {Opt_err, NULL}
 };
 
@@ -293,6 +296,24 @@ static int parse_options(char *options, struct super_block *sb, s64 *newLVSize,
                        }
                        break;
                }
+
+#if defined(CONFIG_QUOTA)
+               case Opt_quota:
+               case Opt_usrquota:
+                       *flag |= JFS_USRQUOTA;
+                       break;
+               case Opt_grpquota:
+                       *flag |= JFS_GRPQUOTA;
+                       break;
+#else
+               case Opt_usrquota:
+               case Opt_grpquota:
+               case Opt_quota:
+                       printk(KERN_ERR
+                              "JFS: quota operations not supported\n");
+                       break;
+#endif
+
                default:
                        printk("jfs: Unrecognized mount option \"%s\" "
                                        " or missing value\n", p);
@@ -539,6 +560,26 @@ static int jfs_sync_fs(struct super_block *sb, int wait)
        return 0;
 }
 
+static int jfs_show_options(struct seq_file *seq, struct vfsmount *vfs)
+{
+       struct jfs_sb_info *sbi = JFS_SBI(vfs->mnt_sb);
+
+       if (sbi->flag & JFS_NOINTEGRITY)
+               seq_puts(seq, ",nointegrity");
+       else
+               seq_puts(seq, ",integrity");
+
+#if defined(CONFIG_QUOTA)
+       if (sbi->flag & JFS_USRQUOTA)
+               seq_puts(seq, ",usrquota");
+
+       if (sbi->flag & JFS_GRPQUOTA)
+               seq_puts(seq, ",grpquota");
+#endif
+
+       return 0;
+}
+
 static struct super_operations jfs_super_operations = {
        .alloc_inode    = jfs_alloc_inode,
        .destroy_inode  = jfs_destroy_inode,
@@ -552,6 +593,7 @@ static struct super_operations jfs_super_operations = {
        .unlockfs       = jfs_unlockfs,
        .statfs         = jfs_statfs,
        .remount_fs     = jfs_remount,
+       .show_options   = jfs_show_options
 };
 
 static struct export_operations jfs_export_operations = {
index 6ec1f0fefc5b017aa321738f7d3581370a91fad3..145e852c4bd02d717c3dd9e3b63caa6804870f25 100644 (file)
@@ -525,6 +525,22 @@ static inline int __do_follow_link(struct path *path, struct nameidata *nd)
        return error;
 }
 
+static inline void dput_path(struct path *path, struct nameidata *nd)
+{
+       dput(path->dentry);
+       if (path->mnt != nd->mnt)
+               mntput(path->mnt);
+}
+
+static inline void path_to_nameidata(struct path *path, struct nameidata *nd)
+{
+       dput(nd->dentry);
+       if (nd->mnt != path->mnt)
+               mntput(nd->mnt);
+       nd->mnt = path->mnt;
+       nd->dentry = path->dentry;
+}
+
 /*
  * This limits recursive symlink follows to 8, while
  * limiting consecutive symlinks to 40.
@@ -552,9 +568,7 @@ static inline int do_follow_link(struct path *path, struct nameidata *nd)
        nd->depth--;
        return err;
 loop:
-       dput(path->dentry);
-       if (path->mnt != nd->mnt)
-               mntput(path->mnt);
+       dput_path(path, nd);
        path_release(nd);
        return err;
 }
@@ -813,13 +827,8 @@ static fastcall int __link_path_walk(const char * name, struct nameidata *nd)
                        err = -ENOTDIR; 
                        if (!inode->i_op)
                                break;
-               } else {
-                       dput(nd->dentry);
-                       if (nd->mnt != next.mnt)
-                               mntput(nd->mnt);
-                       nd->mnt = next.mnt;
-                       nd->dentry = next.dentry;
-               }
+               } else
+                       path_to_nameidata(&next, nd);
                err = -ENOTDIR; 
                if (!inode->i_op->lookup)
                        break;
@@ -859,13 +868,8 @@ last_component:
                        if (err)
                                goto return_err;
                        inode = nd->dentry->d_inode;
-               } else {
-                       dput(nd->dentry);
-                       if (nd->mnt != next.mnt)
-                               mntput(nd->mnt);
-                       nd->mnt = next.mnt;
-                       nd->dentry = next.dentry;
-               }
+               } else
+                       path_to_nameidata(&next, nd);
                err = -ENOENT;
                if (!inode)
                        break;
@@ -901,9 +905,7 @@ return_reval:
 return_base:
                return 0;
 out_dput:
-               dput(next.dentry);
-               if (nd->mnt != next.mnt)
-                       mntput(next.mnt);
+               dput_path(&next, nd);
                break;
        }
        path_release(nd);
@@ -1507,11 +1509,7 @@ do_last:
        if (path.dentry->d_inode->i_op && path.dentry->d_inode->i_op->follow_link)
                goto do_link;
 
-       dput(nd->dentry);
-       nd->dentry = path.dentry;
-       if (nd->mnt != path.mnt)
-               mntput(nd->mnt);
-       nd->mnt = path.mnt;
+       path_to_nameidata(&path, nd);
        error = -EISDIR;
        if (path.dentry->d_inode && S_ISDIR(path.dentry->d_inode->i_mode))
                goto exit;
@@ -1522,9 +1520,7 @@ ok:
        return 0;
 
 exit_dput:
-       dput(path.dentry);
-       if (nd->mnt != path.mnt)
-               mntput(path.mnt);
+       dput_path(&path, nd);
 exit:
        path_release(nd);
        return error;
index 79bd8a46e1e7298859a85f9ed9efd20e1dfdb19c..34156260c9b6586939e932e3856cc0211e98cd97 100644 (file)
@@ -40,7 +40,7 @@ static inline int sysfs_init(void)
  __cacheline_aligned_in_smp DEFINE_SPINLOCK(vfsmount_lock);
 
 static struct list_head *mount_hashtable;
-static int hash_mask, hash_bits;
+static int hash_mask __read_mostly, hash_bits __read_mostly;
 static kmem_cache_t *mnt_cache; 
 
 static inline unsigned long hash(struct vfsmount *mnt, struct dentry *dentry)
@@ -1334,8 +1334,12 @@ asmlinkage long sys_pivot_root(const char __user *new_root, const char __user *p
        error = -EINVAL;
        if (user_nd.mnt->mnt_root != user_nd.dentry)
                goto out2; /* not a mountpoint */
+       if (user_nd.mnt->mnt_parent == user_nd.mnt)
+               goto out2; /* not attached */
        if (new_nd.mnt->mnt_root != new_nd.dentry)
                goto out2; /* not a mountpoint */
+       if (new_nd.mnt->mnt_parent == new_nd.mnt)
+               goto out2; /* not attached */
        tmp = old_nd.mnt; /* make sure we can reach put_old from new_root */
        spin_lock(&vfsmount_lock);
        if (tmp != new_nd.mnt) {
index 9a11aa39e2e4e887d549f9e0f942797bc902ada1..057aff745506da64d5ca6b61d00f0eb41c597029 100644 (file)
@@ -26,6 +26,7 @@
 #include <linux/namei.h>
 #include <linux/mount.h>
 #include <linux/hash.h>
+#include <linux/module.h>
 
 #include <linux/sunrpc/svc.h>
 #include <linux/nfsd/nfsd.h>
@@ -221,6 +222,7 @@ static int expkey_show(struct seq_file *m,
 }
        
 struct cache_detail svc_expkey_cache = {
+       .owner          = THIS_MODULE,
        .hash_size      = EXPKEY_HASHMAX,
        .hash_table     = expkey_table,
        .name           = "nfsd.fh",
@@ -456,6 +458,7 @@ static int svc_export_show(struct seq_file *m,
        return 0;
 }
 struct cache_detail svc_export_cache = {
+       .owner          = THIS_MODULE,
        .hash_size      = EXPORT_HASHMAX,
        .hash_table     = export_table,
        .name           = "nfsd.export",
index 5605a26efc57d9db3ca93471f437996dae91056e..13369650cdf9b8db38f2af1a456db8e7cff5a645 100644 (file)
@@ -187,6 +187,7 @@ static int         idtoname_parse(struct cache_detail *, char *, int);
 static struct ent *idtoname_lookup(struct ent *, int);
 
 static struct cache_detail idtoname_cache = {
+       .owner          = THIS_MODULE,
        .hash_size      = ENT_HASHMAX,
        .hash_table     = idtoname_table,
        .name           = "nfs4.idtoname",
@@ -320,6 +321,7 @@ static struct ent *nametoid_lookup(struct ent *, int);
 static int         nametoid_parse(struct cache_detail *, char *, int);
 
 static struct cache_detail nametoid_cache = {
+       .owner          = THIS_MODULE,
        .hash_size      = ENT_HASHMAX,
        .hash_table     = nametoid_table,
        .name           = "nfs4.nametoid",
@@ -404,8 +406,10 @@ nfsd_idmap_init(void)
 void
 nfsd_idmap_shutdown(void)
 {
-       cache_unregister(&idtoname_cache);
-       cache_unregister(&nametoid_cache);
+       if (cache_unregister(&idtoname_cache))
+               printk(KERN_ERR "nfsd: failed to unregister idtoname cache\n");
+       if (cache_unregister(&nametoid_cache))
+               printk(KERN_ERR "nfsd: failed to unregister nametoid cache\n");
 }
 
 /*
index 32bf05e2996d8054b8ced182c41471d7c3e133e6..4ee2dcc31c285dc57c6922b21e1bad80e740b6c3 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -933,16 +933,11 @@ void fastcall fd_install(unsigned int fd, struct file * file)
 
 EXPORT_SYMBOL(fd_install);
 
-asmlinkage long sys_open(const char __user * filename, int flags, int mode)
+long do_sys_open(const char __user *filename, int flags, int mode)
 {
-       char * tmp;
-       int fd;
+       char *tmp = getname(filename);
+       int fd = PTR_ERR(tmp);
 
-       if (force_o_largefile())
-               flags |= O_LARGEFILE;
-
-       tmp = getname(filename);
-       fd = PTR_ERR(tmp);
        if (!IS_ERR(tmp)) {
                fd = get_unused_fd();
                if (fd >= 0) {
@@ -959,6 +954,14 @@ asmlinkage long sys_open(const char __user * filename, int flags, int mode)
        }
        return fd;
 }
+
+asmlinkage long sys_open(const char __user *filename, int flags, int mode)
+{
+       if (force_o_largefile())
+               flags |= O_LARGEFILE;
+
+       return do_sys_open(filename, flags, mode);
+}
 EXPORT_SYMBOL_GPL(sys_open);
 
 #ifndef __alpha__
index 25aa09f9d09d08ce5c29738406bae6d5e27d8843..2c7a23dde2d83f1ae18190e5723c0eb8d8ae0548 100644 (file)
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -415,6 +415,10 @@ pipe_poll(struct file *filp, poll_table *wait)
 
        if (filp->f_mode & FMODE_WRITE) {
                mask |= (nrbufs < PIPE_BUFFERS) ? POLLOUT | POLLWRNORM : 0;
+               /*
+                * Most Unices do not set POLLERR for FIFOs but on Linux they
+                * behave exactly like pipes for poll().
+                */
                if (!PIPE_READERS(*inode))
                        mask |= POLLERR;
        }
@@ -422,9 +426,6 @@ pipe_poll(struct file *filp, poll_table *wait)
        return mask;
 }
 
-/* FIXME: most Unices do not set POLLERR for fifos */
-#define fifo_poll pipe_poll
-
 static int
 pipe_release(struct inode *inode, int decr, int decw)
 {
@@ -568,7 +569,7 @@ struct file_operations read_fifo_fops = {
        .read           = pipe_read,
        .readv          = pipe_readv,
        .write          = bad_pipe_w,
-       .poll           = fifo_poll,
+       .poll           = pipe_poll,
        .ioctl          = pipe_ioctl,
        .open           = pipe_read_open,
        .release        = pipe_read_release,
@@ -580,7 +581,7 @@ struct file_operations write_fifo_fops = {
        .read           = bad_pipe_r,
        .write          = pipe_write,
        .writev         = pipe_writev,
-       .poll           = fifo_poll,
+       .poll           = pipe_poll,
        .ioctl          = pipe_ioctl,
        .open           = pipe_write_open,
        .release        = pipe_write_release,
@@ -593,7 +594,7 @@ struct file_operations rdwr_fifo_fops = {
        .readv          = pipe_readv,
        .write          = pipe_write,
        .writev         = pipe_writev,
-       .poll           = fifo_poll,
+       .poll           = pipe_poll,
        .ioctl          = pipe_ioctl,
        .open           = pipe_rdwr_open,
        .release        = pipe_rdwr_release,
index 520978e49e92474f428054785c6c68a1978138a5..84751f3f52d530e86518247e3cace7d20646ed80 100644 (file)
@@ -119,7 +119,6 @@ enum pid_directory_inos {
 #ifdef CONFIG_AUDITSYSCALL
        PROC_TGID_LOGINUID,
 #endif
-       PROC_TGID_FD_DIR,
        PROC_TGID_OOM_SCORE,
        PROC_TGID_OOM_ADJUST,
        PROC_TID_INO,
@@ -158,9 +157,11 @@ enum pid_directory_inos {
 #ifdef CONFIG_AUDITSYSCALL
        PROC_TID_LOGINUID,
 #endif
-       PROC_TID_FD_DIR = 0x8000,       /* 0x8000-0xffff */
        PROC_TID_OOM_SCORE,
        PROC_TID_OOM_ADJUST,
+
+       /* Add new entries before this */
+       PROC_TID_FD_DIR = 0x8000,       /* 0x8000-0xffff */
 };
 
 struct pid_entry {
@@ -297,15 +298,21 @@ static int proc_fd_link(struct inode *inode, struct dentry **dentry, struct vfsm
        return -ENOENT;
 }
 
-static int proc_cwd_link(struct inode *inode, struct dentry **dentry, struct vfsmount **mnt)
+static struct fs_struct *get_fs_struct(struct task_struct *task)
 {
        struct fs_struct *fs;
-       int result = -ENOENT;
-       task_lock(proc_task(inode));
-       fs = proc_task(inode)->fs;
+       task_lock(task);
+       fs = task->fs;
        if(fs)
                atomic_inc(&fs->count);
-       task_unlock(proc_task(inode));
+       task_unlock(task);
+       return fs;
+}
+
+static int proc_cwd_link(struct inode *inode, struct dentry **dentry, struct vfsmount **mnt)
+{
+       struct fs_struct *fs = get_fs_struct(proc_task(inode));
+       int result = -ENOENT;
        if (fs) {
                read_lock(&fs->lock);
                *mnt = mntget(fs->pwdmnt);
@@ -319,13 +326,8 @@ static int proc_cwd_link(struct inode *inode, struct dentry **dentry, struct vfs
 
 static int proc_root_link(struct inode *inode, struct dentry **dentry, struct vfsmount **mnt)
 {
-       struct fs_struct *fs;
+       struct fs_struct *fs = get_fs_struct(proc_task(inode));
        int result = -ENOENT;
-       task_lock(proc_task(inode));
-       fs = proc_task(inode)->fs;
-       if(fs)
-               atomic_inc(&fs->count);
-       task_unlock(proc_task(inode));
        if (fs) {
                read_lock(&fs->lock);
                *mnt = mntget(fs->rootmnt);
@@ -344,33 +346,6 @@ static int proc_root_link(struct inode *inode, struct dentry **dentry, struct vf
         (task->state == TASK_STOPPED || task->state == TASK_TRACED) && \
         security_ptrace(current,task) == 0))
 
-static int may_ptrace_attach(struct task_struct *task)
-{
-       int retval = 0;
-
-       task_lock(task);
-
-       if (!task->mm)
-               goto out;
-       if (((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))
-               goto out;
-       rmb();
-       if (task->mm->dumpable != 1 && !capable(CAP_SYS_PTRACE))
-               goto out;
-       if (security_ptrace(current, task))
-               goto out;
-
-       retval = 1;
-out:
-       task_unlock(task);
-       return retval;
-}
-
 static int proc_pid_environ(struct task_struct *task, char * buffer)
 {
        int res = 0;
@@ -380,7 +355,7 @@ static int proc_pid_environ(struct task_struct *task, char * buffer)
                if (len > PAGE_SIZE)
                        len = PAGE_SIZE;
                res = access_process_vm(task, mm->env_start, buffer, len, 0);
-               if (!may_ptrace_attach(task))
+               if (!ptrace_may_attach(task))
                        res = -ESRCH;
                mmput(mm);
        }
@@ -683,7 +658,7 @@ static ssize_t mem_read(struct file * file, char __user * buf,
        int ret = -ESRCH;
        struct mm_struct *mm;
 
-       if (!MAY_PTRACE(task) || !may_ptrace_attach(task))
+       if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
                goto out;
 
        ret = -ENOMEM;
@@ -709,7 +684,7 @@ static ssize_t mem_read(struct file * file, char __user * buf,
 
                this_len = (count > PAGE_SIZE) ? PAGE_SIZE : count;
                retval = access_process_vm(task, src, page, this_len, 0);
-               if (!retval || !MAY_PTRACE(task) || !may_ptrace_attach(task)) {
+               if (!retval || !MAY_PTRACE(task) || !ptrace_may_attach(task)) {
                        if (!ret)
                                ret = -EIO;
                        break;
@@ -747,7 +722,7 @@ static ssize_t mem_write(struct file * file, const char * buf,
        struct task_struct *task = proc_task(file->f_dentry->d_inode);
        unsigned long dst = *ppos;
 
-       if (!MAY_PTRACE(task) || !may_ptrace_attach(task))
+       if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
                return -ESRCH;
 
        page = (char *)__get_free_page(GFP_USER);
index abe8920313fb32b84ad65b78861325727ae5ce45..8a8c34461d481c115a31d628d8e598bb68c20b26 100644 (file)
@@ -249,6 +249,18 @@ out:
        return error;
 }
 
+static int proc_getattr(struct vfsmount *mnt, struct dentry *dentry,
+                       struct kstat *stat)
+{
+       struct inode *inode = dentry->d_inode;
+       struct proc_dir_entry *de = PROC_I(inode)->pde;
+       if (de && de->nlink)
+               inode->i_nlink = de->nlink;
+
+       generic_fillattr(inode, stat);
+       return 0;
+}
+
 static struct inode_operations proc_file_inode_operations = {
        .setattr        = proc_notify_change,
 };
@@ -475,6 +487,7 @@ static struct file_operations proc_dir_operations = {
  */
 static struct inode_operations proc_dir_inode_operations = {
        .lookup         = proc_lookup,
+       .getattr        = proc_getattr,
        .setattr        = proc_notify_change,
 };
 
index 563abd09b5c84b882cbe6f47e56d05e80e5db4b6..b60324aaa2b6731d9ddedd67badaa7b5c9790a60 100644 (file)
@@ -188,7 +188,7 @@ int rw_verify_area(int read_write, struct file *file, loff_t *ppos, size_t count
        struct inode *inode;
        loff_t pos;
 
-       if (unlikely(count > file->f_maxcount))
+       if (unlikely(count > INT_MAX))
                goto Einval;
        pos = *ppos;
        if (unlikely((pos < 0) || (loff_t) (pos + count) < 0))
index ca7989b04be3490f1e430cae7af2c1b242e521c8..a8e29e9bbbd08e336fc13a3fd9b1e81d7ec4eda0 100644 (file)
@@ -1034,7 +1034,7 @@ static int flush_commit_list(struct super_block *s,
                    SB_ONDISK_JOURNAL_SIZE(s);
                tbh = journal_find_get_block(s, bn);
                if (buffer_dirty(tbh))  /* redundant, ll_rw_block() checks */
-                       ll_rw_block(WRITE, 1, &tbh);
+                       ll_rw_block(SWRITE, 1, &tbh);
                put_bh(tbh);
        }
        atomic_dec(&journal->j_async_throttle);
@@ -2172,7 +2172,7 @@ static int journal_read_transaction(struct super_block *p_s_sb,
        /* flush out the real blocks */
        for (i = 0; i < get_desc_trans_len(desc); i++) {
                set_buffer_dirty(real_blocks[i]);
-               ll_rw_block(WRITE, 1, real_blocks + i);
+               ll_rw_block(SWRITE, 1, real_blocks + i);
        }
        for (i = 0; i < get_desc_trans_len(desc); i++) {
                wait_on_buffer(real_blocks[i]);
diff --git a/fs/relayfs/Makefile b/fs/relayfs/Makefile
new file mode 100644 (file)
index 0000000..e76e182
--- /dev/null
@@ -0,0 +1,4 @@
+obj-$(CONFIG_RELAYFS_FS) += relayfs.o
+
+relayfs-y := relay.o inode.o buffers.o
+
diff --git a/fs/relayfs/buffers.c b/fs/relayfs/buffers.c
new file mode 100644 (file)
index 0000000..2aa8e27
--- /dev/null
@@ -0,0 +1,189 @@
+/*
+ * RelayFS buffer management code.
+ *
+ * Copyright (C) 2002-2005 - Tom Zanussi (zanussi@us.ibm.com), IBM Corp
+ * Copyright (C) 1999-2005 - Karim Yaghmour (karim@opersys.com)
+ *
+ * This file is released under the GPL.
+ */
+
+#include <linux/module.h>
+#include <linux/vmalloc.h>
+#include <linux/mm.h>
+#include <linux/relayfs_fs.h>
+#include "relay.h"
+#include "buffers.h"
+
+/*
+ * close() vm_op implementation for relayfs file mapping.
+ */
+static void relay_file_mmap_close(struct vm_area_struct *vma)
+{
+       struct rchan_buf *buf = vma->vm_private_data;
+       buf->chan->cb->buf_unmapped(buf, vma->vm_file);
+}
+
+/*
+ * nopage() vm_op implementation for relayfs file mapping.
+ */
+static struct page *relay_buf_nopage(struct vm_area_struct *vma,
+                                    unsigned long address,
+                                    int *type)
+{
+       struct page *page;
+       struct rchan_buf *buf = vma->vm_private_data;
+       unsigned long offset = address - vma->vm_start;
+
+       if (address > vma->vm_end)
+               return NOPAGE_SIGBUS; /* Disallow mremap */
+       if (!buf)
+               return NOPAGE_OOM;
+
+       page = vmalloc_to_page(buf->start + offset);
+       if (!page)
+               return NOPAGE_OOM;
+       get_page(page);
+
+       if (type)
+               *type = VM_FAULT_MINOR;
+
+       return page;
+}
+
+/*
+ * vm_ops for relay file mappings.
+ */
+static struct vm_operations_struct relay_file_mmap_ops = {
+       .nopage = relay_buf_nopage,
+       .close = relay_file_mmap_close,
+};
+
+/**
+ *     relay_mmap_buf: - mmap channel buffer to process address space
+ *     @buf: relay channel buffer
+ *     @vma: vm_area_struct describing memory to be mapped
+ *
+ *     Returns 0 if ok, negative on error
+ *
+ *     Caller should already have grabbed mmap_sem.
+ */
+int relay_mmap_buf(struct rchan_buf *buf, struct vm_area_struct *vma)
+{
+       unsigned long length = vma->vm_end - vma->vm_start;
+       struct file *filp = vma->vm_file;
+
+       if (!buf)
+               return -EBADF;
+
+       if (length != (unsigned long)buf->chan->alloc_size)
+               return -EINVAL;
+
+       vma->vm_ops = &relay_file_mmap_ops;
+       vma->vm_private_data = buf;
+       buf->chan->cb->buf_mapped(buf, filp);
+
+       return 0;
+}
+
+/**
+ *     relay_alloc_buf - allocate a channel buffer
+ *     @buf: the buffer struct
+ *     @size: total size of the buffer
+ *
+ *     Returns a pointer to the resulting buffer, NULL if unsuccessful
+ */
+static void *relay_alloc_buf(struct rchan_buf *buf, unsigned long size)
+{
+       void *mem;
+       unsigned int i, j, n_pages;
+
+       size = PAGE_ALIGN(size);
+       n_pages = size >> PAGE_SHIFT;
+
+       buf->page_array = kcalloc(n_pages, sizeof(struct page *), GFP_KERNEL);
+       if (!buf->page_array)
+               return NULL;
+
+       for (i = 0; i < n_pages; i++) {
+               buf->page_array[i] = alloc_page(GFP_KERNEL);
+               if (unlikely(!buf->page_array[i]))
+                       goto depopulate;
+       }
+       mem = vmap(buf->page_array, n_pages, GFP_KERNEL, PAGE_KERNEL);
+       if (!mem)
+               goto depopulate;
+
+       memset(mem, 0, size);
+       buf->page_count = n_pages;
+       return mem;
+
+depopulate:
+       for (j = 0; j < i; j++)
+               __free_page(buf->page_array[j]);
+       kfree(buf->page_array);
+       return NULL;
+}
+
+/**
+ *     relay_create_buf - allocate and initialize a channel buffer
+ *     @alloc_size: size of the buffer to allocate
+ *     @n_subbufs: number of sub-buffers in the channel
+ *
+ *     Returns channel buffer if successful, NULL otherwise
+ */
+struct rchan_buf *relay_create_buf(struct rchan *chan)
+{
+       struct rchan_buf *buf = kcalloc(1, sizeof(struct rchan_buf), GFP_KERNEL);
+       if (!buf)
+               return NULL;
+
+       buf->padding = kmalloc(chan->n_subbufs * sizeof(size_t *), GFP_KERNEL);
+       if (!buf->padding)
+               goto free_buf;
+
+       buf->start = relay_alloc_buf(buf, chan->alloc_size);
+       if (!buf->start)
+               goto free_buf;
+
+       buf->chan = chan;
+       kref_get(&buf->chan->kref);
+       return buf;
+
+free_buf:
+       kfree(buf->padding);
+       kfree(buf);
+       return NULL;
+}
+
+/**
+ *     relay_destroy_buf - destroy an rchan_buf struct and associated buffer
+ *     @buf: the buffer struct
+ */
+void relay_destroy_buf(struct rchan_buf *buf)
+{
+       struct rchan *chan = buf->chan;
+       unsigned int i;
+
+       if (likely(buf->start)) {
+               vunmap(buf->start);
+               for (i = 0; i < buf->page_count; i++)
+                       __free_page(buf->page_array[i]);
+               kfree(buf->page_array);
+       }
+       kfree(buf->padding);
+       kfree(buf);
+       kref_put(&chan->kref, relay_destroy_channel);
+}
+
+/**
+ *     relay_remove_buf - remove a channel buffer
+ *
+ *     Removes the file from the relayfs fileystem, which also frees the
+ *     rchan_buf_struct and the channel buffer.  Should only be called from
+ *     kref_put().
+ */
+void relay_remove_buf(struct kref *kref)
+{
+       struct rchan_buf *buf = container_of(kref, struct rchan_buf, kref);
+       relayfs_remove(buf->dentry);
+}
diff --git a/fs/relayfs/buffers.h b/fs/relayfs/buffers.h
new file mode 100644 (file)
index 0000000..37a1249
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _BUFFERS_H
+#define _BUFFERS_H
+
+/* This inspired by rtai/shmem */
+#define FIX_SIZE(x) (((x) - 1) & PAGE_MASK) + PAGE_SIZE
+
+extern int relay_mmap_buf(struct rchan_buf *buf, struct vm_area_struct *vma);
+extern struct rchan_buf *relay_create_buf(struct rchan *chan);
+extern void relay_destroy_buf(struct rchan_buf *buf);
+extern void relay_remove_buf(struct kref *kref);
+
+#endif/* _BUFFERS_H */
diff --git a/fs/relayfs/inode.c b/fs/relayfs/inode.c
new file mode 100644 (file)
index 0000000..0f7f88d
--- /dev/null
@@ -0,0 +1,609 @@
+/*
+ * VFS-related code for RelayFS, a high-speed data relay filesystem.
+ *
+ * Copyright (C) 2003-2005 - Tom Zanussi <zanussi@us.ibm.com>, IBM Corp
+ * Copyright (C) 2003-2005 - Karim Yaghmour <karim@opersys.com>
+ *
+ * Based on ramfs, Copyright (C) 2002 - Linus Torvalds
+ *
+ * This file is released under the GPL.
+ */
+
+#include <linux/module.h>
+#include <linux/fs.h>
+#include <linux/mount.h>
+#include <linux/pagemap.h>
+#include <linux/init.h>
+#include <linux/string.h>
+#include <linux/backing-dev.h>
+#include <linux/namei.h>
+#include <linux/poll.h>
+#include <linux/relayfs_fs.h>
+#include "relay.h"
+#include "buffers.h"
+
+#define RELAYFS_MAGIC                  0xF0B4A981
+
+static struct vfsmount *               relayfs_mount;
+static int                             relayfs_mount_count;
+static kmem_cache_t *                  relayfs_inode_cachep;
+
+static struct backing_dev_info         relayfs_backing_dev_info = {
+       .ra_pages       = 0,    /* No readahead */
+       .capabilities   = BDI_CAP_NO_ACCT_DIRTY | BDI_CAP_NO_WRITEBACK,
+};
+
+static struct inode *relayfs_get_inode(struct super_block *sb, int mode,
+                                      struct rchan *chan)
+{
+       struct rchan_buf *buf = NULL;
+       struct inode *inode;
+
+       if (S_ISREG(mode)) {
+               BUG_ON(!chan);
+               buf = relay_create_buf(chan);
+               if (!buf)
+                       return NULL;
+       }
+
+       inode = new_inode(sb);
+       if (!inode) {
+               relay_destroy_buf(buf);
+               return NULL;
+       }
+
+       inode->i_mode = mode;
+       inode->i_uid = 0;
+       inode->i_gid = 0;
+       inode->i_blksize = PAGE_CACHE_SIZE;
+       inode->i_blocks = 0;
+       inode->i_mapping->backing_dev_info = &relayfs_backing_dev_info;
+       inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+       switch (mode & S_IFMT) {
+       case S_IFREG:
+               inode->i_fop = &relayfs_file_operations;
+               RELAYFS_I(inode)->buf = buf;
+               break;
+       case S_IFDIR:
+               inode->i_op = &simple_dir_inode_operations;
+               inode->i_fop = &simple_dir_operations;
+
+               /* directory inodes start off with i_nlink == 2 (for "." entry) */
+               inode->i_nlink++;
+               break;
+       default:
+               break;
+       }
+
+       return inode;
+}
+
+/**
+ *     relayfs_create_entry - create a relayfs directory or file
+ *     @name: the name of the file to create
+ *     @parent: parent directory
+ *     @mode: mode
+ *     @chan: relay channel associated with the file
+ *
+ *     Returns the new dentry, NULL on failure
+ *
+ *     Creates a file or directory with the specifed permissions.
+ */
+static struct dentry *relayfs_create_entry(const char *name,
+                                          struct dentry *parent,
+                                          int mode,
+                                          struct rchan *chan)
+{
+       struct dentry *d;
+       struct inode *inode;
+       int error = 0;
+
+       BUG_ON(!name || !(S_ISREG(mode) || S_ISDIR(mode)));
+
+       error = simple_pin_fs("relayfs", &relayfs_mount, &relayfs_mount_count);
+       if (error) {
+               printk(KERN_ERR "Couldn't mount relayfs: errcode %d\n", error);
+               return NULL;
+       }
+
+       if (!parent && relayfs_mount && relayfs_mount->mnt_sb)
+               parent = relayfs_mount->mnt_sb->s_root;
+
+       if (!parent) {
+               simple_release_fs(&relayfs_mount, &relayfs_mount_count);
+               return NULL;
+       }
+
+       parent = dget(parent);
+       down(&parent->d_inode->i_sem);
+       d = lookup_one_len(name, parent, strlen(name));
+       if (IS_ERR(d)) {
+               d = NULL;
+               goto release_mount;
+       }
+
+       if (d->d_inode) {
+               d = NULL;
+               goto release_mount;
+       }
+
+       inode = relayfs_get_inode(parent->d_inode->i_sb, mode, chan);
+       if (!inode) {
+               d = NULL;
+               goto release_mount;
+       }
+
+       d_instantiate(d, inode);
+       dget(d);        /* Extra count - pin the dentry in core */
+
+       if (S_ISDIR(mode))
+               parent->d_inode->i_nlink++;
+
+       goto exit;
+
+release_mount:
+       simple_release_fs(&relayfs_mount, &relayfs_mount_count);
+
+exit:
+       up(&parent->d_inode->i_sem);
+       dput(parent);
+       return d;
+}
+
+/**
+ *     relayfs_create_file - create a file in the relay filesystem
+ *     @name: the name of the file to create
+ *     @parent: parent directory
+ *     @mode: mode, if not specied the default perms are used
+ *     @chan: channel associated with the file
+ *
+ *     Returns file dentry if successful, NULL otherwise.
+ *
+ *     The file will be created user r on behalf of current user.
+ */
+struct dentry *relayfs_create_file(const char *name, struct dentry *parent,
+                                  int mode, struct rchan *chan)
+{
+       if (!mode)
+               mode = S_IRUSR;
+       mode = (mode & S_IALLUGO) | S_IFREG;
+
+       return relayfs_create_entry(name, parent, mode, chan);
+}
+
+/**
+ *     relayfs_create_dir - create a directory in the relay filesystem
+ *     @name: the name of the directory to create
+ *     @parent: parent directory, NULL if parent should be fs root
+ *
+ *     Returns directory dentry if successful, NULL otherwise.
+ *
+ *     The directory will be created world rwx on behalf of current user.
+ */
+struct dentry *relayfs_create_dir(const char *name, struct dentry *parent)
+{
+       int mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO;
+       return relayfs_create_entry(name, parent, mode, NULL);
+}
+
+/**
+ *     relayfs_remove - remove a file or directory in the relay filesystem
+ *     @dentry: file or directory dentry
+ *
+ *     Returns 0 if successful, negative otherwise.
+ */
+int relayfs_remove(struct dentry *dentry)
+{
+       struct dentry *parent;
+       int error = 0;
+
+       if (!dentry)
+               return -EINVAL;
+       parent = dentry->d_parent;
+       if (!parent)
+               return -EINVAL;
+
+       parent = dget(parent);
+       down(&parent->d_inode->i_sem);
+       if (dentry->d_inode) {
+               if (S_ISDIR(dentry->d_inode->i_mode))
+                       error = simple_rmdir(parent->d_inode, dentry);
+               else
+                       error = simple_unlink(parent->d_inode, dentry);
+               if (!error)
+                       d_delete(dentry);
+       }
+       if (!error)
+               dput(dentry);
+       up(&parent->d_inode->i_sem);
+       dput(parent);
+
+       if (!error)
+               simple_release_fs(&relayfs_mount, &relayfs_mount_count);
+
+       return error;
+}
+
+/**
+ *     relayfs_remove_dir - remove a directory in the relay filesystem
+ *     @dentry: directory dentry
+ *
+ *     Returns 0 if successful, negative otherwise.
+ */
+int relayfs_remove_dir(struct dentry *dentry)
+{
+       return relayfs_remove(dentry);
+}
+
+/**
+ *     relayfs_open - open file op for relayfs files
+ *     @inode: the inode
+ *     @filp: the file
+ *
+ *     Increments the channel buffer refcount.
+ */
+static int relayfs_open(struct inode *inode, struct file *filp)
+{
+       struct rchan_buf *buf = RELAYFS_I(inode)->buf;
+       kref_get(&buf->kref);
+
+       return 0;
+}
+
+/**
+ *     relayfs_mmap - mmap file op for relayfs files
+ *     @filp: the file
+ *     @vma: the vma describing what to map
+ *
+ *     Calls upon relay_mmap_buf to map the file into user space.
+ */
+static int relayfs_mmap(struct file *filp, struct vm_area_struct *vma)
+{
+       struct inode *inode = filp->f_dentry->d_inode;
+       return relay_mmap_buf(RELAYFS_I(inode)->buf, vma);
+}
+
+/**
+ *     relayfs_poll - poll file op for relayfs files
+ *     @filp: the file
+ *     @wait: poll table
+ *
+ *     Poll implemention.
+ */
+static unsigned int relayfs_poll(struct file *filp, poll_table *wait)
+{
+       unsigned int mask = 0;
+       struct inode *inode = filp->f_dentry->d_inode;
+       struct rchan_buf *buf = RELAYFS_I(inode)->buf;
+
+       if (buf->finalized)
+               return POLLERR;
+
+       if (filp->f_mode & FMODE_READ) {
+               poll_wait(filp, &buf->read_wait, wait);
+               if (!relay_buf_empty(buf))
+                       mask |= POLLIN | POLLRDNORM;
+       }
+
+       return mask;
+}
+
+/**
+ *     relayfs_release - release file op for relayfs files
+ *     @inode: the inode
+ *     @filp: the file
+ *
+ *     Decrements the channel refcount, as the filesystem is
+ *     no longer using it.
+ */
+static int relayfs_release(struct inode *inode, struct file *filp)
+{
+       struct rchan_buf *buf = RELAYFS_I(inode)->buf;
+       kref_put(&buf->kref, relay_remove_buf);
+
+       return 0;
+}
+
+/**
+ *     relayfs_read_consume - update the consumed count for the buffer
+ */
+static void relayfs_read_consume(struct rchan_buf *buf,
+                                size_t read_pos,
+                                size_t bytes_consumed)
+{
+       size_t subbuf_size = buf->chan->subbuf_size;
+       size_t n_subbufs = buf->chan->n_subbufs;
+       size_t read_subbuf;
+
+       if (buf->bytes_consumed + bytes_consumed > subbuf_size) {
+               relay_subbufs_consumed(buf->chan, buf->cpu, 1);
+               buf->bytes_consumed = 0;
+       }
+
+       buf->bytes_consumed += bytes_consumed;
+       read_subbuf = read_pos / buf->chan->subbuf_size;
+       if (buf->bytes_consumed + buf->padding[read_subbuf] == subbuf_size) {
+               if ((read_subbuf == buf->subbufs_produced % n_subbufs) &&
+                   (buf->offset == subbuf_size))
+                       return;
+               relay_subbufs_consumed(buf->chan, buf->cpu, 1);
+               buf->bytes_consumed = 0;
+       }
+}
+
+/**
+ *     relayfs_read_avail - boolean, are there unconsumed bytes available?
+ */
+static int relayfs_read_avail(struct rchan_buf *buf, size_t read_pos)
+{
+       size_t bytes_produced, bytes_consumed, write_offset;
+       size_t subbuf_size = buf->chan->subbuf_size;
+       size_t n_subbufs = buf->chan->n_subbufs;
+       size_t produced = buf->subbufs_produced % n_subbufs;
+       size_t consumed = buf->subbufs_consumed % n_subbufs;
+
+       write_offset = buf->offset > subbuf_size ? subbuf_size : buf->offset;
+
+       if (consumed > produced) {
+               if ((produced > n_subbufs) &&
+                   (produced + n_subbufs - consumed <= n_subbufs))
+                       produced += n_subbufs;
+       } else if (consumed == produced) {
+               if (buf->offset > subbuf_size) {
+                       produced += n_subbufs;
+                       if (buf->subbufs_produced == buf->subbufs_consumed)
+                               consumed += n_subbufs;
+               }
+       }
+
+       if (buf->offset > subbuf_size)
+               bytes_produced = (produced - 1) * subbuf_size + write_offset;
+       else
+               bytes_produced = produced * subbuf_size + write_offset;
+       bytes_consumed = consumed * subbuf_size + buf->bytes_consumed;
+
+       if (bytes_produced == bytes_consumed)
+               return 0;
+
+       relayfs_read_consume(buf, read_pos, 0);
+
+       return 1;
+}
+
+/**
+ *     relayfs_read_subbuf_avail - return bytes available in sub-buffer
+ */
+static size_t relayfs_read_subbuf_avail(size_t read_pos,
+                                       struct rchan_buf *buf)
+{
+       size_t padding, avail = 0;
+       size_t read_subbuf, read_offset, write_subbuf, write_offset;
+       size_t subbuf_size = buf->chan->subbuf_size;
+
+       write_subbuf = (buf->data - buf->start) / subbuf_size;
+       write_offset = buf->offset > subbuf_size ? subbuf_size : buf->offset;
+       read_subbuf = read_pos / subbuf_size;
+       read_offset = read_pos % subbuf_size;
+       padding = buf->padding[read_subbuf];
+
+       if (read_subbuf == write_subbuf) {
+               if (read_offset + padding < write_offset)
+                       avail = write_offset - (read_offset + padding);
+       } else
+               avail = (subbuf_size - padding) - read_offset;
+
+       return avail;
+}
+
+/**
+ *     relayfs_read_start_pos - find the first available byte to read
+ *
+ *     If the read_pos is in the middle of padding, return the
+ *     position of the first actually available byte, otherwise
+ *     return the original value.
+ */
+static size_t relayfs_read_start_pos(size_t read_pos,
+                                    struct rchan_buf *buf)
+{
+       size_t read_subbuf, padding, padding_start, padding_end;
+       size_t subbuf_size = buf->chan->subbuf_size;
+       size_t n_subbufs = buf->chan->n_subbufs;
+
+       read_subbuf = read_pos / subbuf_size;
+       padding = buf->padding[read_subbuf];
+       padding_start = (read_subbuf + 1) * subbuf_size - padding;
+       padding_end = (read_subbuf + 1) * subbuf_size;
+       if (read_pos >= padding_start && read_pos < padding_end) {
+               read_subbuf = (read_subbuf + 1) % n_subbufs;
+               read_pos = read_subbuf * subbuf_size;
+       }
+
+       return read_pos;
+}
+
+/**
+ *     relayfs_read_end_pos - return the new read position
+ */
+static size_t relayfs_read_end_pos(struct rchan_buf *buf,
+                                  size_t read_pos,
+                                  size_t count)
+{
+       size_t read_subbuf, padding, end_pos;
+       size_t subbuf_size = buf->chan->subbuf_size;
+       size_t n_subbufs = buf->chan->n_subbufs;
+
+       read_subbuf = read_pos / subbuf_size;
+       padding = buf->padding[read_subbuf];
+       if (read_pos % subbuf_size + count + padding == subbuf_size)
+               end_pos = (read_subbuf + 1) * subbuf_size;
+       else
+               end_pos = read_pos + count;
+       if (end_pos >= subbuf_size * n_subbufs)
+               end_pos = 0;
+
+       return end_pos;
+}
+
+/**
+ *     relayfs_read - read file op for relayfs files
+ *     @filp: the file
+ *     @buffer: the userspace buffer
+ *     @count: number of bytes to read
+ *     @ppos: position to read from
+ *
+ *     Reads count bytes or the number of bytes available in the
+ *     current sub-buffer being read, whichever is smaller.
+ */
+static ssize_t relayfs_read(struct file *filp,
+                           char __user *buffer,
+                           size_t count,
+                           loff_t *ppos)
+{
+       struct inode *inode = filp->f_dentry->d_inode;
+       struct rchan_buf *buf = RELAYFS_I(inode)->buf;
+       size_t read_start, avail;
+       ssize_t ret = 0;
+       void *from;
+
+       down(&inode->i_sem);
+       if(!relayfs_read_avail(buf, *ppos))
+               goto out;
+
+       read_start = relayfs_read_start_pos(*ppos, buf);
+       avail = relayfs_read_subbuf_avail(read_start, buf);
+       if (!avail)
+               goto out;
+
+       from = buf->start + read_start;
+       ret = count = min(count, avail);
+       if (copy_to_user(buffer, from, count)) {
+               ret = -EFAULT;
+               goto out;
+       }
+       relayfs_read_consume(buf, read_start, count);
+       *ppos = relayfs_read_end_pos(buf, read_start, count);
+out:
+       up(&inode->i_sem);
+       return ret;
+}
+
+/**
+ *     relayfs alloc_inode() implementation
+ */
+static struct inode *relayfs_alloc_inode(struct super_block *sb)
+{
+       struct relayfs_inode_info *p = kmem_cache_alloc(relayfs_inode_cachep, SLAB_KERNEL);
+       if (!p)
+               return NULL;
+       p->buf = NULL;
+
+       return &p->vfs_inode;
+}
+
+/**
+ *     relayfs destroy_inode() implementation
+ */
+static void relayfs_destroy_inode(struct inode *inode)
+{
+       if (RELAYFS_I(inode)->buf)
+               relay_destroy_buf(RELAYFS_I(inode)->buf);
+
+       kmem_cache_free(relayfs_inode_cachep, RELAYFS_I(inode));
+}
+
+static void init_once(void *p, kmem_cache_t *cachep, unsigned long flags)
+{
+       struct relayfs_inode_info *i = p;
+       if ((flags & (SLAB_CTOR_VERIFY | SLAB_CTOR_CONSTRUCTOR)) == SLAB_CTOR_CONSTRUCTOR)
+               inode_init_once(&i->vfs_inode);
+}
+
+struct file_operations relayfs_file_operations = {
+       .open           = relayfs_open,
+       .poll           = relayfs_poll,
+       .mmap           = relayfs_mmap,
+       .read           = relayfs_read,
+       .llseek         = no_llseek,
+       .release        = relayfs_release,
+};
+
+static struct super_operations relayfs_ops = {
+       .statfs         = simple_statfs,
+       .drop_inode     = generic_delete_inode,
+       .alloc_inode    = relayfs_alloc_inode,
+       .destroy_inode  = relayfs_destroy_inode,
+};
+
+static int relayfs_fill_super(struct super_block * sb, void * data, int silent)
+{
+       struct inode *inode;
+       struct dentry *root;
+       int mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO;
+
+       sb->s_blocksize = PAGE_CACHE_SIZE;
+       sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
+       sb->s_magic = RELAYFS_MAGIC;
+       sb->s_op = &relayfs_ops;
+       inode = relayfs_get_inode(sb, mode, NULL);
+
+       if (!inode)
+               return -ENOMEM;
+
+       root = d_alloc_root(inode);
+       if (!root) {
+               iput(inode);
+               return -ENOMEM;
+       }
+       sb->s_root = root;
+
+       return 0;
+}
+
+static struct super_block * relayfs_get_sb(struct file_system_type *fs_type,
+                                          int flags, const char *dev_name,
+                                          void *data)
+{
+       return get_sb_single(fs_type, flags, data, relayfs_fill_super);
+}
+
+static struct file_system_type relayfs_fs_type = {
+       .owner          = THIS_MODULE,
+       .name           = "relayfs",
+       .get_sb         = relayfs_get_sb,
+       .kill_sb        = kill_litter_super,
+};
+
+static int __init init_relayfs_fs(void)
+{
+       int err;
+
+       relayfs_inode_cachep = kmem_cache_create("relayfs_inode_cache",
+                               sizeof(struct relayfs_inode_info), 0,
+                               0, init_once, NULL);
+       if (!relayfs_inode_cachep)
+               return -ENOMEM;
+
+       err = register_filesystem(&relayfs_fs_type);
+       if (err)
+               kmem_cache_destroy(relayfs_inode_cachep);
+
+       return err;
+}
+
+static void __exit exit_relayfs_fs(void)
+{
+       unregister_filesystem(&relayfs_fs_type);
+       kmem_cache_destroy(relayfs_inode_cachep);
+}
+
+module_init(init_relayfs_fs)
+module_exit(exit_relayfs_fs)
+
+EXPORT_SYMBOL_GPL(relayfs_file_operations);
+EXPORT_SYMBOL_GPL(relayfs_create_dir);
+EXPORT_SYMBOL_GPL(relayfs_remove_dir);
+
+MODULE_AUTHOR("Tom Zanussi <zanussi@us.ibm.com> and Karim Yaghmour <karim@opersys.com>");
+MODULE_DESCRIPTION("Relay Filesystem");
+MODULE_LICENSE("GPL");
+
diff --git a/fs/relayfs/relay.c b/fs/relayfs/relay.c
new file mode 100644 (file)
index 0000000..16446a1
--- /dev/null
@@ -0,0 +1,431 @@
+/*
+ * Public API and common code for RelayFS.
+ *
+ * See Documentation/filesystems/relayfs.txt for an overview of relayfs.
+ *
+ * Copyright (C) 2002-2005 - Tom Zanussi (zanussi@us.ibm.com), IBM Corp
+ * Copyright (C) 1999-2005 - Karim Yaghmour (karim@opersys.com)
+ *
+ * This file is released under the GPL.
+ */
+
+#include <linux/errno.h>
+#include <linux/stddef.h>
+#include <linux/slab.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include <linux/relayfs_fs.h>
+#include "relay.h"
+#include "buffers.h"
+
+/**
+ *     relay_buf_empty - boolean, is the channel buffer empty?
+ *     @buf: channel buffer
+ *
+ *     Returns 1 if the buffer is empty, 0 otherwise.
+ */
+int relay_buf_empty(struct rchan_buf *buf)
+{
+       return (buf->subbufs_produced - buf->subbufs_consumed) ? 0 : 1;
+}
+
+/**
+ *     relay_buf_full - boolean, is the channel buffer full?
+ *     @buf: channel buffer
+ *
+ *     Returns 1 if the buffer is full, 0 otherwise.
+ */
+int relay_buf_full(struct rchan_buf *buf)
+{
+       size_t ready = buf->subbufs_produced - buf->subbufs_consumed;
+       return (ready >= buf->chan->n_subbufs) ? 1 : 0;
+}
+
+/*
+ * High-level relayfs kernel API and associated functions.
+ */
+
+/*
+ * rchan_callback implementations defining default channel behavior.  Used
+ * in place of corresponding NULL values in client callback struct.
+ */
+
+/*
+ * subbuf_start() default callback.  Does nothing.
+ */
+static int subbuf_start_default_callback (struct rchan_buf *buf,
+                                         void *subbuf,
+                                         void *prev_subbuf,
+                                         size_t prev_padding)
+{
+       if (relay_buf_full(buf))
+               return 0;
+
+       return 1;
+}
+
+/*
+ * buf_mapped() default callback.  Does nothing.
+ */
+static void buf_mapped_default_callback(struct rchan_buf *buf,
+                                       struct file *filp)
+{
+}
+
+/*
+ * buf_unmapped() default callback.  Does nothing.
+ */
+static void buf_unmapped_default_callback(struct rchan_buf *buf,
+                                         struct file *filp)
+{
+}
+
+/* relay channel default callbacks */
+static struct rchan_callbacks default_channel_callbacks = {
+       .subbuf_start = subbuf_start_default_callback,
+       .buf_mapped = buf_mapped_default_callback,
+       .buf_unmapped = buf_unmapped_default_callback,
+};
+
+/**
+ *     wakeup_readers - wake up readers waiting on a channel
+ *     @private: the channel buffer
+ *
+ *     This is the work function used to defer reader waking.  The
+ *     reason waking is deferred is that calling directly from write
+ *     causes problems if you're writing from say the scheduler.
+ */
+static void wakeup_readers(void *private)
+{
+       struct rchan_buf *buf = private;
+       wake_up_interruptible(&buf->read_wait);
+}
+
+/**
+ *     __relay_reset - reset a channel buffer
+ *     @buf: the channel buffer
+ *     @init: 1 if this is a first-time initialization
+ *
+ *     See relay_reset for description of effect.
+ */
+static inline void __relay_reset(struct rchan_buf *buf, unsigned int init)
+{
+       size_t i;
+
+       if (init) {
+               init_waitqueue_head(&buf->read_wait);
+               kref_init(&buf->kref);
+               INIT_WORK(&buf->wake_readers, NULL, NULL);
+       } else {
+               cancel_delayed_work(&buf->wake_readers);
+               flush_scheduled_work();
+       }
+
+       buf->subbufs_produced = 0;
+       buf->subbufs_consumed = 0;
+       buf->bytes_consumed = 0;
+       buf->finalized = 0;
+       buf->data = buf->start;
+       buf->offset = 0;
+
+       for (i = 0; i < buf->chan->n_subbufs; i++)
+               buf->padding[i] = 0;
+
+       buf->chan->cb->subbuf_start(buf, buf->data, NULL, 0);
+}
+
+/**
+ *     relay_reset - reset the channel
+ *     @chan: the channel
+ *
+ *     This has the effect of erasing all data from all channel buffers
+ *     and restarting the channel in its initial state.  The buffers
+ *     are not freed, so any mappings are still in effect.
+ *
+ *     NOTE: Care should be taken that the channel isn't actually
+ *     being used by anything when this call is made.
+ */
+void relay_reset(struct rchan *chan)
+{
+       unsigned int i;
+
+       if (!chan)
+               return;
+
+       for (i = 0; i < NR_CPUS; i++) {
+               if (!chan->buf[i])
+                       continue;
+               __relay_reset(chan->buf[i], 0);
+       }
+}
+
+/**
+ *     relay_open_buf - create a new channel buffer in relayfs
+ *
+ *     Internal - used by relay_open().
+ */
+static struct rchan_buf *relay_open_buf(struct rchan *chan,
+                                       const char *filename,
+                                       struct dentry *parent)
+{
+       struct rchan_buf *buf;
+       struct dentry *dentry;
+
+       /* Create file in fs */
+       dentry = relayfs_create_file(filename, parent, S_IRUSR, chan);
+       if (!dentry)
+               return NULL;
+
+       buf = RELAYFS_I(dentry->d_inode)->buf;
+       buf->dentry = dentry;
+       __relay_reset(buf, 1);
+
+       return buf;
+}
+
+/**
+ *     relay_close_buf - close a channel buffer
+ *     @buf: channel buffer
+ *
+ *     Marks the buffer finalized and restores the default callbacks.
+ *     The channel buffer and channel buffer data structure are then freed
+ *     automatically when the last reference is given up.
+ */
+static inline void relay_close_buf(struct rchan_buf *buf)
+{
+       buf->finalized = 1;
+       buf->chan->cb = &default_channel_callbacks;
+       cancel_delayed_work(&buf->wake_readers);
+       flush_scheduled_work();
+       kref_put(&buf->kref, relay_remove_buf);
+}
+
+static inline void setup_callbacks(struct rchan *chan,
+                                  struct rchan_callbacks *cb)
+{
+       if (!cb) {
+               chan->cb = &default_channel_callbacks;
+               return;
+       }
+
+       if (!cb->subbuf_start)
+               cb->subbuf_start = subbuf_start_default_callback;
+       if (!cb->buf_mapped)
+               cb->buf_mapped = buf_mapped_default_callback;
+       if (!cb->buf_unmapped)
+               cb->buf_unmapped = buf_unmapped_default_callback;
+       chan->cb = cb;
+}
+
+/**
+ *     relay_open - create a new relayfs channel
+ *     @base_filename: base name of files to create
+ *     @parent: dentry of parent directory, NULL for root directory
+ *     @subbuf_size: size of sub-buffers
+ *     @n_subbufs: number of sub-buffers
+ *     @cb: client callback functions
+ *
+ *     Returns channel pointer if successful, NULL otherwise.
+ *
+ *     Creates a channel buffer for each cpu using the sizes and
+ *     attributes specified.  The created channel buffer files
+ *     will be named base_filename0...base_filenameN-1.  File
+ *     permissions will be S_IRUSR.
+ */
+struct rchan *relay_open(const char *base_filename,
+                        struct dentry *parent,
+                        size_t subbuf_size,
+                        size_t n_subbufs,
+                        struct rchan_callbacks *cb)
+{
+       unsigned int i;
+       struct rchan *chan;
+       char *tmpname;
+
+       if (!base_filename)
+               return NULL;
+
+       if (!(subbuf_size && n_subbufs))
+               return NULL;
+
+       chan = kcalloc(1, sizeof(struct rchan), GFP_KERNEL);
+       if (!chan)
+               return NULL;
+
+       chan->version = RELAYFS_CHANNEL_VERSION;
+       chan->n_subbufs = n_subbufs;
+       chan->subbuf_size = subbuf_size;
+       chan->alloc_size = FIX_SIZE(subbuf_size * n_subbufs);
+       setup_callbacks(chan, cb);
+       kref_init(&chan->kref);
+
+       tmpname = kmalloc(NAME_MAX + 1, GFP_KERNEL);
+       if (!tmpname)
+               goto free_chan;
+
+       for_each_online_cpu(i) {
+               sprintf(tmpname, "%s%d", base_filename, i);
+               chan->buf[i] = relay_open_buf(chan, tmpname, parent);
+               chan->buf[i]->cpu = i;
+               if (!chan->buf[i])
+                       goto free_bufs;
+       }
+
+       kfree(tmpname);
+       return chan;
+
+free_bufs:
+       for (i = 0; i < NR_CPUS; i++) {
+               if (!chan->buf[i])
+                       break;
+               relay_close_buf(chan->buf[i]);
+       }
+       kfree(tmpname);
+
+free_chan:
+       kref_put(&chan->kref, relay_destroy_channel);
+       return NULL;
+}
+
+/**
+ *     relay_switch_subbuf - switch to a new sub-buffer
+ *     @buf: channel buffer
+ *     @length: size of current event
+ *
+ *     Returns either the length passed in or 0 if full.
+
+ *     Performs sub-buffer-switch tasks such as invoking callbacks,
+ *     updating padding counts, waking up readers, etc.
+ */
+size_t relay_switch_subbuf(struct rchan_buf *buf, size_t length)
+{
+       void *old, *new;
+       size_t old_subbuf, new_subbuf;
+
+       if (unlikely(length > buf->chan->subbuf_size))
+               goto toobig;
+
+       if (buf->offset != buf->chan->subbuf_size + 1) {
+               buf->prev_padding = buf->chan->subbuf_size - buf->offset;
+               old_subbuf = buf->subbufs_produced % buf->chan->n_subbufs;
+               buf->padding[old_subbuf] = buf->prev_padding;
+               buf->subbufs_produced++;
+               if (waitqueue_active(&buf->read_wait)) {
+                       PREPARE_WORK(&buf->wake_readers, wakeup_readers, buf);
+                       schedule_delayed_work(&buf->wake_readers, 1);
+               }
+       }
+
+       old = buf->data;
+       new_subbuf = buf->subbufs_produced % buf->chan->n_subbufs;
+       new = buf->start + new_subbuf * buf->chan->subbuf_size;
+       buf->offset = 0;
+       if (!buf->chan->cb->subbuf_start(buf, new, old, buf->prev_padding)) {
+               buf->offset = buf->chan->subbuf_size + 1;
+               return 0;
+       }
+       buf->data = new;
+       buf->padding[new_subbuf] = 0;
+
+       if (unlikely(length + buf->offset > buf->chan->subbuf_size))
+               goto toobig;
+
+       return length;
+
+toobig:
+       printk(KERN_WARNING "relayfs: event too large (%Zd)\n", length);
+       WARN_ON(1);
+       return 0;
+}
+
+/**
+ *     relay_subbufs_consumed - update the buffer's sub-buffers-consumed count
+ *     @chan: the channel
+ *     @cpu: the cpu associated with the channel buffer to update
+ *     @subbufs_consumed: number of sub-buffers to add to current buf's count
+ *
+ *     Adds to the channel buffer's consumed sub-buffer count.
+ *     subbufs_consumed should be the number of sub-buffers newly consumed,
+ *     not the total consumed.
+ *
+ *     NOTE: kernel clients don't need to call this function if the channel
+ *     mode is 'overwrite'.
+ */
+void relay_subbufs_consumed(struct rchan *chan,
+                           unsigned int cpu,
+                           size_t subbufs_consumed)
+{
+       struct rchan_buf *buf;
+
+       if (!chan)
+               return;
+
+       if (cpu >= NR_CPUS || !chan->buf[cpu])
+               return;
+
+       buf = chan->buf[cpu];
+       buf->subbufs_consumed += subbufs_consumed;
+       if (buf->subbufs_consumed > buf->subbufs_produced)
+               buf->subbufs_consumed = buf->subbufs_produced;
+}
+
+/**
+ *     relay_destroy_channel - free the channel struct
+ *
+ *     Should only be called from kref_put().
+ */
+void relay_destroy_channel(struct kref *kref)
+{
+       struct rchan *chan = container_of(kref, struct rchan, kref);
+       kfree(chan);
+}
+
+/**
+ *     relay_close - close the channel
+ *     @chan: the channel
+ *
+ *     Closes all channel buffers and frees the channel.
+ */
+void relay_close(struct rchan *chan)
+{
+       unsigned int i;
+
+       if (!chan)
+               return;
+
+       for (i = 0; i < NR_CPUS; i++) {
+               if (!chan->buf[i])
+                       continue;
+               relay_close_buf(chan->buf[i]);
+       }
+
+       kref_put(&chan->kref, relay_destroy_channel);
+}
+
+/**
+ *     relay_flush - close the channel
+ *     @chan: the channel
+ *
+ *     Flushes all channel buffers i.e. forces buffer switch.
+ */
+void relay_flush(struct rchan *chan)
+{
+       unsigned int i;
+
+       if (!chan)
+               return;
+
+       for (i = 0; i < NR_CPUS; i++) {
+               if (!chan->buf[i])
+                       continue;
+               relay_switch_subbuf(chan->buf[i], 0);
+       }
+}
+
+EXPORT_SYMBOL_GPL(relay_open);
+EXPORT_SYMBOL_GPL(relay_close);
+EXPORT_SYMBOL_GPL(relay_flush);
+EXPORT_SYMBOL_GPL(relay_reset);
+EXPORT_SYMBOL_GPL(relay_subbufs_consumed);
+EXPORT_SYMBOL_GPL(relay_switch_subbuf);
+EXPORT_SYMBOL_GPL(relay_buf_full);
diff --git a/fs/relayfs/relay.h b/fs/relayfs/relay.h
new file mode 100644 (file)
index 0000000..703503f
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _RELAY_H
+#define _RELAY_H
+
+struct dentry *relayfs_create_file(const char *name,
+                                  struct dentry *parent,
+                                  int mode,
+                                  struct rchan *chan);
+extern int relayfs_remove(struct dentry *dentry);
+extern int relay_buf_empty(struct rchan_buf *buf);
+extern void relay_destroy_channel(struct kref *kref);
+
+#endif /* _RELAY_H */
index 997640c99c7d88030d2de6e980deee138a18db0e..faf1512173eb23d36cf861b651b3572ded618999 100644 (file)
@@ -114,8 +114,7 @@ void ufs_free_fragments (struct inode * inode, unsigned fragment, unsigned count
        ubh_mark_buffer_dirty (USPI_UBH);
        ubh_mark_buffer_dirty (UCPI_UBH);
        if (sb->s_flags & MS_SYNCHRONOUS) {
-               ubh_wait_on_buffer (UCPI_UBH);
-               ubh_ll_rw_block (WRITE, 1, (struct ufs_buffer_head **)&ucpi);
+               ubh_ll_rw_block (SWRITE, 1, (struct ufs_buffer_head **)&ucpi);
                ubh_wait_on_buffer (UCPI_UBH);
        }
        sb->s_dirt = 1;
@@ -200,8 +199,7 @@ do_more:
        ubh_mark_buffer_dirty (USPI_UBH);
        ubh_mark_buffer_dirty (UCPI_UBH);
        if (sb->s_flags & MS_SYNCHRONOUS) {
-               ubh_wait_on_buffer (UCPI_UBH);
-               ubh_ll_rw_block (WRITE, 1, (struct ufs_buffer_head **)&ucpi);
+               ubh_ll_rw_block (SWRITE, 1, (struct ufs_buffer_head **)&ucpi);
                ubh_wait_on_buffer (UCPI_UBH);
        }
 
@@ -459,8 +457,7 @@ ufs_add_fragments (struct inode * inode, unsigned fragment,
        ubh_mark_buffer_dirty (USPI_UBH);
        ubh_mark_buffer_dirty (UCPI_UBH);
        if (sb->s_flags & MS_SYNCHRONOUS) {
-               ubh_wait_on_buffer (UCPI_UBH);
-               ubh_ll_rw_block (WRITE, 1, (struct ufs_buffer_head **)&ucpi);
+               ubh_ll_rw_block (SWRITE, 1, (struct ufs_buffer_head **)&ucpi);
                ubh_wait_on_buffer (UCPI_UBH);
        }
        sb->s_dirt = 1;
@@ -585,8 +582,7 @@ succed:
        ubh_mark_buffer_dirty (USPI_UBH);
        ubh_mark_buffer_dirty (UCPI_UBH);
        if (sb->s_flags & MS_SYNCHRONOUS) {
-               ubh_wait_on_buffer (UCPI_UBH);
-               ubh_ll_rw_block (WRITE, 1, (struct ufs_buffer_head **)&ucpi);
+               ubh_ll_rw_block (SWRITE, 1, (struct ufs_buffer_head **)&ucpi);
                ubh_wait_on_buffer (UCPI_UBH);
        }
        sb->s_dirt = 1;
index 61a6b1542fc5f01eb239cca652aaf7c2bd6d2b35..0938945b9cbc2c628750061a05f772ebeee670e5 100644 (file)
@@ -124,8 +124,7 @@ void ufs_free_inode (struct inode * inode)
        ubh_mark_buffer_dirty (USPI_UBH);
        ubh_mark_buffer_dirty (UCPI_UBH);
        if (sb->s_flags & MS_SYNCHRONOUS) {
-               ubh_wait_on_buffer (UCPI_UBH);
-               ubh_ll_rw_block (WRITE, 1, (struct ufs_buffer_head **) &ucpi);
+               ubh_ll_rw_block (SWRITE, 1, (struct ufs_buffer_head **) &ucpi);
                ubh_wait_on_buffer (UCPI_UBH);
        }
        
@@ -249,8 +248,7 @@ cg_found:
        ubh_mark_buffer_dirty (USPI_UBH);
        ubh_mark_buffer_dirty (UCPI_UBH);
        if (sb->s_flags & MS_SYNCHRONOUS) {
-               ubh_wait_on_buffer (UCPI_UBH);
-               ubh_ll_rw_block (WRITE, 1, (struct ufs_buffer_head **) &ucpi);
+               ubh_ll_rw_block (SWRITE, 1, (struct ufs_buffer_head **) &ucpi);
                ubh_wait_on_buffer (UCPI_UBH);
        }
        sb->s_dirt = 1;
index e312bf8bad9fd5432e44df7c9c36d31e1a63e545..61d2e35012a462e2cb6be0f9fc27bd10e20db0b1 100644 (file)
@@ -285,8 +285,7 @@ next:;
                }
        }
        if (IS_SYNC(inode) && ind_ubh && ubh_buffer_dirty(ind_ubh)) {
-               ubh_wait_on_buffer (ind_ubh);
-               ubh_ll_rw_block (WRITE, 1, &ind_ubh);
+               ubh_ll_rw_block (SWRITE, 1, &ind_ubh);
                ubh_wait_on_buffer (ind_ubh);
        }
        ubh_brelse (ind_ubh);
@@ -353,8 +352,7 @@ static int ufs_trunc_dindirect (struct inode *inode, unsigned offset, __fs32 *p)
                }
        }
        if (IS_SYNC(inode) && dind_bh && ubh_buffer_dirty(dind_bh)) {
-               ubh_wait_on_buffer (dind_bh);
-               ubh_ll_rw_block (WRITE, 1, &dind_bh);
+               ubh_ll_rw_block (SWRITE, 1, &dind_bh);
                ubh_wait_on_buffer (dind_bh);
        }
        ubh_brelse (dind_bh);
@@ -418,8 +416,7 @@ static int ufs_trunc_tindirect (struct inode * inode)
                }
        }
        if (IS_SYNC(inode) && tind_bh && ubh_buffer_dirty(tind_bh)) {
-               ubh_wait_on_buffer (tind_bh);
-               ubh_ll_rw_block (WRITE, 1, &tind_bh);
+               ubh_ll_rw_block (SWRITE, 1, &tind_bh);
                ubh_wait_on_buffer (tind_bh);
        }
        ubh_brelse (tind_bh);
diff --git a/fs/umsdos/notes b/fs/umsdos/notes
deleted file mode 100644 (file)
index 3c47d1f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-This file contain idea and things I don't want to forget
-
-Possible bug in fs/read_write.c
-Function sys_readdir()
-
-       There is a call the verify_area that does not take in account
-       the count parameter. I guess it should read
-
-       error = verify_area(VERIFY_WRITE, dirent, count*sizeof (*dirent));
-
-       instead of
-
-       error = verify_area(VERIFY_WRITE, dirent, sizeof (*dirent));
-
-       Of course, now , count is always 1
-
-
index dc8bc7624f26be341900d900340cb0e7bcb6ce60..3f9c64bea151fd7c6df4297e8bfa01b626a02bd5 100644 (file)
@@ -325,6 +325,8 @@ removexattr(struct dentry *d, char __user *name)
                down(&d->d_inode->i_sem);
                error = d->d_inode->i_op->removexattr(d, kname);
                up(&d->d_inode->i_sem);
+               if (!error)
+                       fsnotify_xattr(d);
        }
 out:
        return error;
index c92306f0fdc578e4f4e125acc1fa77b6e13ccb0d..8e8f32dabe53160b2b8bd4f714bbe6c55f39b7eb 100644 (file)
@@ -1,5 +1,3 @@
-menu "XFS support"
-
 config XFS_FS
        tristate "XFS filesystem support"
        select EXPORTFS if NFSD!=n
@@ -22,27 +20,11 @@ config XFS_FS
 
 config XFS_EXPORT
        bool
-       default y if XFS_FS && EXPORTFS
-
-config XFS_RT
-       bool "Realtime support (EXPERIMENTAL)"
-       depends on XFS_FS && EXPERIMENTAL
-       help
-         If you say Y here you will be able to mount and use XFS filesystems
-         which contain a realtime subvolume. The realtime subvolume is a
-         separate area of disk space where only file data is stored. The
-         realtime subvolume is designed to provide very deterministic
-         data rates suitable for media streaming applications.
-
-         See the xfs man page in section 5 for a bit more information.
-
-         This feature is unsupported at this time, is not yet fully
-         functional, and may cause serious problems.
-
-         If unsure, say N.
+       depends on XFS_FS && EXPORTFS
+       default y
 
 config XFS_QUOTA
-       bool "Quota support"
+       tristate "XFS Quota support"
        depends on XFS_FS
        help
          If you say Y here, you will be able to set limits for disk usage on
@@ -59,7 +41,7 @@ config XFS_QUOTA
          they are completely independent subsystems.
 
 config XFS_SECURITY
-       bool "Security Label support"
+       bool "XFS Security Label support"
        depends on XFS_FS
        help
          Security labels support alternative access control models
@@ -71,7 +53,7 @@ config XFS_SECURITY
          extended attributes for inode security labels, say N.
 
 config XFS_POSIX_ACL
-       bool "POSIX ACL support"
+       bool "XFS POSIX ACL support"
        depends on XFS_FS
        help
          POSIX Access Control Lists (ACLs) support permissions for users and
@@ -82,4 +64,19 @@ config XFS_POSIX_ACL
 
          If you don't know what Access Control Lists are, say N.
 
-endmenu
+config XFS_RT
+       bool "XFS Realtime support (EXPERIMENTAL)"
+       depends on XFS_FS && EXPERIMENTAL
+       help
+         If you say Y here you will be able to mount and use XFS filesystems
+         which contain a realtime subvolume. The realtime subvolume is a
+         separate area of disk space where only file data is stored. The
+         realtime subvolume is designed to provide very deterministic
+         data rates suitable for media streaming applications.
+
+         See the xfs man page in section 5 for a bit more information.
+
+         This feature is unsupported at this time, is not yet fully
+         functional, and may cause serious problems.
+
+         If unsure, say N.
index d3ff78354638d671be016821323e4a3279f47446..49e3e7e5e3dc90902ae5ffcaed0fd3256fef3e52 100644 (file)
@@ -1,150 +1 @@
-#
-# Copyright (c) 2000-2004 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/SGIGPLNoticeExplan/
-#
-
-EXTRA_CFLAGS +=         -Ifs/xfs -Ifs/xfs/linux-2.6 -funsigned-char
-
-ifeq ($(CONFIG_XFS_DEBUG),y)
-       EXTRA_CFLAGS += -g -DSTATIC="" -DDEBUG
-       EXTRA_CFLAGS += -DPAGEBUF_LOCK_TRACKING
-endif
-ifeq ($(CONFIG_XFS_TRACE),y)
-       EXTRA_CFLAGS += -DXFS_ALLOC_TRACE
-       EXTRA_CFLAGS += -DXFS_ATTR_TRACE
-       EXTRA_CFLAGS += -DXFS_BLI_TRACE
-       EXTRA_CFLAGS += -DXFS_BMAP_TRACE
-       EXTRA_CFLAGS += -DXFS_BMBT_TRACE
-       EXTRA_CFLAGS += -DXFS_DIR_TRACE
-       EXTRA_CFLAGS += -DXFS_DIR2_TRACE
-       EXTRA_CFLAGS += -DXFS_DQUOT_TRACE
-       EXTRA_CFLAGS += -DXFS_ILOCK_TRACE
-       EXTRA_CFLAGS += -DXFS_LOG_TRACE
-       EXTRA_CFLAGS += -DXFS_RW_TRACE
-       EXTRA_CFLAGS += -DPAGEBUF_TRACE
-       EXTRA_CFLAGS += -DXFS_VNODE_TRACE
-endif
-
-obj-$(CONFIG_XFS_FS)           += xfs.o
-
-xfs-$(CONFIG_XFS_QUOTA)                += $(addprefix quota/, \
-                                  xfs_dquot.o \
-                                  xfs_dquot_item.o \
-                                  xfs_trans_dquot.o \
-                                  xfs_qm_syscalls.o \
-                                  xfs_qm_bhv.o \
-                                  xfs_qm.o)
-ifeq ($(CONFIG_XFS_QUOTA),y)
-xfs-$(CONFIG_PROC_FS)          += quota/xfs_qm_stats.o
-endif
-
-xfs-$(CONFIG_XFS_RT)           += xfs_rtalloc.o
-xfs-$(CONFIG_XFS_POSIX_ACL)    += xfs_acl.o
-xfs-$(CONFIG_PROC_FS)          += linux-2.6/xfs_stats.o
-xfs-$(CONFIG_SYSCTL)           += linux-2.6/xfs_sysctl.o
-xfs-$(CONFIG_COMPAT)           += linux-2.6/xfs_ioctl32.o
-xfs-$(CONFIG_XFS_EXPORT)       += linux-2.6/xfs_export.o
-
-
-xfs-y                          += xfs_alloc.o \
-                                  xfs_alloc_btree.o \
-                                  xfs_attr.o \
-                                  xfs_attr_leaf.o \
-                                  xfs_behavior.o \
-                                  xfs_bit.o \
-                                  xfs_bmap.o \
-                                  xfs_bmap_btree.o \
-                                  xfs_btree.o \
-                                  xfs_buf_item.o \
-                                  xfs_da_btree.o \
-                                  xfs_dir.o \
-                                  xfs_dir2.o \
-                                  xfs_dir2_block.o \
-                                  xfs_dir2_data.o \
-                                  xfs_dir2_leaf.o \
-                                  xfs_dir2_node.o \
-                                  xfs_dir2_sf.o \
-                                  xfs_dir_leaf.o \
-                                  xfs_error.o \
-                                  xfs_extfree_item.o \
-                                  xfs_fsops.o \
-                                  xfs_ialloc.o \
-                                  xfs_ialloc_btree.o \
-                                  xfs_iget.o \
-                                  xfs_inode.o \
-                                  xfs_inode_item.o \
-                                  xfs_iocore.o \
-                                  xfs_iomap.o \
-                                  xfs_itable.o \
-                                  xfs_dfrag.o \
-                                  xfs_log.o \
-                                  xfs_log_recover.o \
-                                  xfs_macros.o \
-                                  xfs_mount.o \
-                                  xfs_rename.o \
-                                  xfs_trans.o \
-                                  xfs_trans_ail.o \
-                                  xfs_trans_buf.o \
-                                  xfs_trans_extfree.o \
-                                  xfs_trans_inode.o \
-                                  xfs_trans_item.o \
-                                  xfs_utils.o \
-                                  xfs_vfsops.o \
-                                  xfs_vnodeops.o \
-                                  xfs_rw.o \
-                                  xfs_dmops.o \
-                                  xfs_qmops.o
-
-xfs-$(CONFIG_XFS_TRACE)                += xfs_dir2_trace.o
-
-# Objects in linux-2.6/
-xfs-y                          += $(addprefix linux-2.6/, \
-                                  kmem.o \
-                                  xfs_aops.o \
-                                  xfs_buf.o \
-                                  xfs_file.o \
-                                  xfs_fs_subr.o \
-                                  xfs_globals.o \
-                                  xfs_ioctl.o \
-                                  xfs_iops.o \
-                                  xfs_lrw.o \
-                                  xfs_super.o \
-                                  xfs_vfs.o \
-                                  xfs_vnode.o)
-
-# Objects in support/
-xfs-y                          += $(addprefix support/, \
-                                  debug.o \
-                                  move.o \
-                                  qsort.o \
-                                  uuid.o)
-
-xfs-$(CONFIG_XFS_TRACE)                += support/ktrace.o
-
+include $(TOPDIR)/fs/xfs/Makefile-linux-$(VERSION).$(PATCHLEVEL)
diff --git a/fs/xfs/Makefile-linux-2.6 b/fs/xfs/Makefile-linux-2.6
new file mode 100644 (file)
index 0000000..8e18ff1
--- /dev/null
@@ -0,0 +1,141 @@
+#
+# Copyright (c) 2000-2004 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/SGIGPLNoticeExplan/
+#
+
+EXTRA_CFLAGS +=         -Ifs/xfs -Ifs/xfs/linux-2.6 -funsigned-char
+
+XFS_LINUX := linux-2.6
+
+ifeq ($(CONFIG_XFS_DEBUG),y)
+       EXTRA_CFLAGS += -g -DSTATIC="" -DDEBUG
+       EXTRA_CFLAGS += -DPAGEBUF_LOCK_TRACKING
+endif
+ifeq ($(CONFIG_XFS_TRACE),y)
+       EXTRA_CFLAGS += -DXFS_ALLOC_TRACE
+       EXTRA_CFLAGS += -DXFS_ATTR_TRACE
+       EXTRA_CFLAGS += -DXFS_BLI_TRACE
+       EXTRA_CFLAGS += -DXFS_BMAP_TRACE
+       EXTRA_CFLAGS += -DXFS_BMBT_TRACE
+       EXTRA_CFLAGS += -DXFS_DIR_TRACE
+       EXTRA_CFLAGS += -DXFS_DIR2_TRACE
+       EXTRA_CFLAGS += -DXFS_DQUOT_TRACE
+       EXTRA_CFLAGS += -DXFS_ILOCK_TRACE
+       EXTRA_CFLAGS += -DXFS_LOG_TRACE
+       EXTRA_CFLAGS += -DXFS_RW_TRACE
+       EXTRA_CFLAGS += -DPAGEBUF_TRACE
+       EXTRA_CFLAGS += -DXFS_VNODE_TRACE
+endif
+
+obj-$(CONFIG_XFS_FS)           += xfs.o
+xfs-$(CONFIG_XFS_QUOTA)                += quota/
+
+xfs-$(CONFIG_XFS_RT)           += xfs_rtalloc.o
+xfs-$(CONFIG_XFS_POSIX_ACL)    += xfs_acl.o
+xfs-$(CONFIG_PROC_FS)          += $(XFS_LINUX)/xfs_stats.o
+xfs-$(CONFIG_SYSCTL)           += $(XFS_LINUX)/xfs_sysctl.o
+xfs-$(CONFIG_COMPAT)           += $(XFS_LINUX)/xfs_ioctl32.o
+xfs-$(CONFIG_XFS_EXPORT)       += $(XFS_LINUX)/xfs_export.o
+
+
+xfs-y                          += xfs_alloc.o \
+                                  xfs_alloc_btree.o \
+                                  xfs_attr.o \
+                                  xfs_attr_leaf.o \
+                                  xfs_behavior.o \
+                                  xfs_bit.o \
+                                  xfs_bmap.o \
+                                  xfs_bmap_btree.o \
+                                  xfs_btree.o \
+                                  xfs_buf_item.o \
+                                  xfs_da_btree.o \
+                                  xfs_dir.o \
+                                  xfs_dir2.o \
+                                  xfs_dir2_block.o \
+                                  xfs_dir2_data.o \
+                                  xfs_dir2_leaf.o \
+                                  xfs_dir2_node.o \
+                                  xfs_dir2_sf.o \
+                                  xfs_dir_leaf.o \
+                                  xfs_error.o \
+                                  xfs_extfree_item.o \
+                                  xfs_fsops.o \
+                                  xfs_ialloc.o \
+                                  xfs_ialloc_btree.o \
+                                  xfs_iget.o \
+                                  xfs_inode.o \
+                                  xfs_inode_item.o \
+                                  xfs_iocore.o \
+                                  xfs_iomap.o \
+                                  xfs_itable.o \
+                                  xfs_dfrag.o \
+                                  xfs_log.o \
+                                  xfs_log_recover.o \
+                                  xfs_macros.o \
+                                  xfs_mount.o \
+                                  xfs_rename.o \
+                                  xfs_trans.o \
+                                  xfs_trans_ail.o \
+                                  xfs_trans_buf.o \
+                                  xfs_trans_extfree.o \
+                                  xfs_trans_inode.o \
+                                  xfs_trans_item.o \
+                                  xfs_utils.o \
+                                  xfs_vfsops.o \
+                                  xfs_vnodeops.o \
+                                  xfs_rw.o \
+                                  xfs_dmops.o \
+                                  xfs_qmops.o
+
+xfs-$(CONFIG_XFS_TRACE)                += xfs_dir2_trace.o
+
+# Objects in linux/
+xfs-y                          += $(addprefix $(XFS_LINUX)/, \
+                                  kmem.o \
+                                  xfs_aops.o \
+                                  xfs_buf.o \
+                                  xfs_file.o \
+                                  xfs_fs_subr.o \
+                                  xfs_globals.o \
+                                  xfs_ioctl.o \
+                                  xfs_iops.o \
+                                  xfs_lrw.o \
+                                  xfs_super.o \
+                                  xfs_vfs.o \
+                                  xfs_vnode.o)
+
+# Objects in support/
+xfs-y                          += $(addprefix support/, \
+                                  debug.o \
+                                  move.o \
+                                  uuid.o)
+
+xfs-$(CONFIG_XFS_TRACE)                += support/ktrace.o
+
index 364ea8c386b1825b36ecbe1a8332bc6ff4be4b98..4b184559f23155bf4cec7d529b1561ea804b8bf3 100644 (file)
 
 
 void *
-kmem_alloc(size_t size, int flags)
+kmem_alloc(size_t size, unsigned int __nocast flags)
 {
-       int     retries = 0;
-       int     lflags = kmem_flags_convert(flags);
-       void    *ptr;
+       int             retries = 0;
+       unsigned int    lflags = kmem_flags_convert(flags);
+       void            *ptr;
 
        do {
                if (size < MAX_SLAB_SIZE || retries > MAX_VMALLOCS)
@@ -67,7 +67,7 @@ kmem_alloc(size_t size, int flags)
 }
 
 void *
-kmem_zalloc(size_t size, int flags)
+kmem_zalloc(size_t size, unsigned int __nocast flags)
 {
        void    *ptr;
 
@@ -89,7 +89,8 @@ kmem_free(void *ptr, size_t size)
 }
 
 void *
-kmem_realloc(void *ptr, size_t newsize, size_t oldsize, int flags)
+kmem_realloc(void *ptr, size_t newsize, size_t oldsize,
+            unsigned int __nocast flags)
 {
        void    *new;
 
@@ -104,11 +105,11 @@ kmem_realloc(void *ptr, size_t newsize, size_t oldsize, int flags)
 }
 
 void *
-kmem_zone_alloc(kmem_zone_t *zone, int flags)
+kmem_zone_alloc(kmem_zone_t *zone, unsigned int __nocast flags)
 {
-       int     retries = 0;
-       int     lflags = kmem_flags_convert(flags);
-       void    *ptr;
+       int             retries = 0;
+       unsigned int    lflags = kmem_flags_convert(flags);
+       void            *ptr;
 
        do {
                ptr = kmem_cache_alloc(zone, lflags);
@@ -123,7 +124,7 @@ kmem_zone_alloc(kmem_zone_t *zone, int flags)
 }
 
 void *
-kmem_zone_zalloc(kmem_zone_t *zone, int flags)
+kmem_zone_zalloc(kmem_zone_t *zone, unsigned int __nocast flags)
 {
        void    *ptr;
 
index 1397b669b059feab5002c67a1a2fb6a7817b29a3..109fcf27e256edf9ac40a02e955124d7d41126ca 100644 (file)
 /*
  * memory management routines
  */
-#define KM_SLEEP       0x0001
-#define KM_NOSLEEP     0x0002
-#define KM_NOFS                0x0004
-#define KM_MAYFAIL     0x0008
+#define KM_SLEEP       0x0001u
+#define KM_NOSLEEP     0x0002u
+#define KM_NOFS                0x0004u
+#define KM_MAYFAIL     0x0008u
 
 #define        kmem_zone       kmem_cache_s
 #define kmem_zone_t    kmem_cache_t
@@ -81,9 +81,9 @@ typedef unsigned long xfs_pflags_t;
        *(NSTATEP) = *(OSTATEP);        \
 } while (0)
 
-static __inline unsigned int kmem_flags_convert(int flags)
+static __inline unsigned int kmem_flags_convert(unsigned int __nocast flags)
 {
-       int     lflags = __GFP_NOWARN;  /* we'll report problems, if need be */
+       unsigned int    lflags = __GFP_NOWARN;  /* we'll report problems, if need be */
 
 #ifdef DEBUG
        if (unlikely(flags & ~(KM_SLEEP|KM_NOSLEEP|KM_NOFS|KM_MAYFAIL))) {
@@ -125,12 +125,13 @@ kmem_zone_destroy(kmem_zone_t *zone)
                BUG();
 }
 
-extern void        *kmem_zone_zalloc(kmem_zone_t *, int);
-extern void        *kmem_zone_alloc(kmem_zone_t *, int);
+extern void        *kmem_zone_zalloc(kmem_zone_t *, unsigned int __nocast);
+extern void        *kmem_zone_alloc(kmem_zone_t *, unsigned int __nocast);
 
-extern void        *kmem_alloc(size_t, int);
-extern void        *kmem_realloc(void *, size_t, size_t, int);
-extern void        *kmem_zalloc(size_t, int);
+extern void        *kmem_alloc(size_t, unsigned int __nocast);
+extern void        *kmem_realloc(void *, size_t, size_t,
+                                 unsigned int __nocast);
+extern void        *kmem_zalloc(size_t, unsigned int __nocast);
 extern void         kmem_free(void *, size_t);
 
 typedef struct shrinker *kmem_shaker_t;
index bcf60a0b8df0ee71211cf35939694dacdfe3416f..0039504069a51c378de0906bf2b50262f1152d86 100644 (file)
@@ -45,6 +45,9 @@
 typedef spinlock_t lock_t;
 
 #define SPLDECL(s)                     unsigned long s
+#ifndef DEFINE_SPINLOCK
+#define DEFINE_SPINLOCK(s)             spinlock_t s = SPIN_LOCK_UNLOCKED
+#endif
 
 #define spinlock_init(lock, name)      spin_lock_init(lock)
 #define        spinlock_destroy(lock)
index a3a4b5aaf5d985020672a47e0c6858a21b190ad4..c6c077978fe38bbc662e11de0d40cf0846a5dcfc 100644 (file)
@@ -104,66 +104,114 @@ xfs_page_trace(
 #define xfs_page_trace(tag, inode, page, mask)
 #endif
 
-void
-linvfs_unwritten_done(
-       struct buffer_head      *bh,
-       int                     uptodate)
+/*
+ * Schedule IO completion handling on a xfsdatad if this was
+ * the final hold on this ioend.
+ */
+STATIC void
+xfs_finish_ioend(
+       xfs_ioend_t             *ioend)
 {
-       xfs_buf_t               *pb = (xfs_buf_t *)bh->b_private;
+       if (atomic_dec_and_test(&ioend->io_remaining))
+               queue_work(xfsdatad_workqueue, &ioend->io_work);
+}
 
-       ASSERT(buffer_unwritten(bh));
-       bh->b_end_io = NULL;
-       clear_buffer_unwritten(bh);
-       if (!uptodate)
-               pagebuf_ioerror(pb, EIO);
-       if (atomic_dec_and_test(&pb->pb_io_remaining) == 1) {
-               pagebuf_iodone(pb, 1, 1);
-       }
-       end_buffer_async_write(bh, uptodate);
+STATIC void
+xfs_destroy_ioend(
+       xfs_ioend_t             *ioend)
+{
+       vn_iowake(ioend->io_vnode);
+       mempool_free(ioend, xfs_ioend_pool);
 }
 
 /*
  * Issue transactions to convert a buffer range from unwritten
- * to written extents (buffered IO).
+ * to written extents.
  */
 STATIC void
-linvfs_unwritten_convert(
-       xfs_buf_t       *bp)
+xfs_end_bio_unwritten(
+       void                    *data)
 {
-       vnode_t         *vp = XFS_BUF_FSPRIVATE(bp, vnode_t *);
-       int             error;
+       xfs_ioend_t             *ioend = data;
+       vnode_t                 *vp = ioend->io_vnode;
+       xfs_off_t               offset = ioend->io_offset;
+       size_t                  size = ioend->io_size;
+       struct buffer_head      *bh, *next;
+       int                     error;
+
+       if (ioend->io_uptodate)
+               VOP_BMAP(vp, offset, size, BMAPI_UNWRITTEN, NULL, NULL, error);
+
+       /* ioend->io_buffer_head is only non-NULL for buffered I/O */
+       for (bh = ioend->io_buffer_head; bh; bh = next) {
+               next = bh->b_private;
+
+               bh->b_end_io = NULL;
+               clear_buffer_unwritten(bh);
+               end_buffer_async_write(bh, ioend->io_uptodate);
+       }
 
-       BUG_ON(atomic_read(&bp->pb_hold) < 1);
-       VOP_BMAP(vp, XFS_BUF_OFFSET(bp), XFS_BUF_SIZE(bp),
-                       BMAPI_UNWRITTEN, NULL, NULL, error);
-       XFS_BUF_SET_FSPRIVATE(bp, NULL);
-       XFS_BUF_CLR_IODONE_FUNC(bp);
-       XFS_BUF_UNDATAIO(bp);
-       iput(LINVFS_GET_IP(vp));
-       pagebuf_iodone(bp, 0, 0);
+       xfs_destroy_ioend(ioend);
 }
 
 /*
- * Issue transactions to convert a buffer range from unwritten
- * to written extents (direct IO).
+ * Allocate and initialise an IO completion structure.
+ * We need to track unwritten extent write completion here initially.
+ * We'll need to extend this for updating the ondisk inode size later
+ * (vs. incore size).
  */
-STATIC void
-linvfs_unwritten_convert_direct(
-       struct kiocb    *iocb,
-       loff_t          offset,
-       ssize_t         size,
-       void            *private)
+STATIC xfs_ioend_t *
+xfs_alloc_ioend(
+       struct inode            *inode)
 {
-       struct inode    *inode = iocb->ki_filp->f_dentry->d_inode;
-       ASSERT(!private || inode == (struct inode *)private);
+       xfs_ioend_t             *ioend;
 
-       /* private indicates an unwritten extent lay beneath this IO */
-       if (private && size > 0) {
-               vnode_t *vp = LINVFS_GET_VP(inode);
-               int     error;
+       ioend = mempool_alloc(xfs_ioend_pool, GFP_NOFS);
 
-               VOP_BMAP(vp, offset, size, BMAPI_UNWRITTEN, NULL, NULL, error);
-       }
+       /*
+        * Set the count to 1 initially, which will prevent an I/O
+        * completion callback from happening before we have started
+        * all the I/O from calling the completion routine too early.
+        */
+       atomic_set(&ioend->io_remaining, 1);
+       ioend->io_uptodate = 1; /* cleared if any I/O fails */
+       ioend->io_vnode = LINVFS_GET_VP(inode);
+       ioend->io_buffer_head = NULL;
+       atomic_inc(&ioend->io_vnode->v_iocount);
+       ioend->io_offset = 0;
+       ioend->io_size = 0;
+
+       INIT_WORK(&ioend->io_work, xfs_end_bio_unwritten, ioend);
+
+       return ioend;
+}
+
+void
+linvfs_unwritten_done(
+       struct buffer_head      *bh,
+       int                     uptodate)
+{
+       xfs_ioend_t             *ioend = bh->b_private;
+       static spinlock_t       unwritten_done_lock = SPIN_LOCK_UNLOCKED;
+       unsigned long           flags;
+
+       ASSERT(buffer_unwritten(bh));
+       bh->b_end_io = NULL;
+
+       if (!uptodate)
+               ioend->io_uptodate = 0;
+
+       /*
+        * Deep magic here.  We reuse b_private in the buffer_heads to build
+        * a chain for completing the I/O from user context after we've issued
+        * a transaction to convert the unwritten extent.
+        */
+       spin_lock_irqsave(&unwritten_done_lock, flags);
+       bh->b_private = ioend->io_buffer_head;
+       ioend->io_buffer_head = bh;
+       spin_unlock_irqrestore(&unwritten_done_lock, flags);
+
+       xfs_finish_ioend(ioend);
 }
 
 STATIC int
@@ -255,7 +303,7 @@ xfs_probe_unwritten_page(
        struct address_space    *mapping,
        pgoff_t                 index,
        xfs_iomap_t             *iomapp,
-       xfs_buf_t               *pb,
+       xfs_ioend_t             *ioend,
        unsigned long           max_offset,
        unsigned long           *fsbs,
        unsigned int            bbits)
@@ -283,7 +331,7 @@ xfs_probe_unwritten_page(
                                break;
                        xfs_map_at_offset(page, bh, p_offset, bbits, iomapp);
                        set_buffer_unwritten_io(bh);
-                       bh->b_private = pb;
+                       bh->b_private = ioend;
                        p_offset += bh->b_size;
                        (*fsbs)++;
                } while ((bh = bh->b_this_page) != head);
@@ -434,34 +482,15 @@ xfs_map_unwritten(
 {
        struct buffer_head      *bh = curr;
        xfs_iomap_t             *tmp;
-       xfs_buf_t               *pb;
-       loff_t                  offset, size;
+       xfs_ioend_t             *ioend;
+       loff_t                  offset;
        unsigned long           nblocks = 0;
 
        offset = start_page->index;
        offset <<= PAGE_CACHE_SHIFT;
        offset += p_offset;
 
-       /* get an "empty" pagebuf to manage IO completion
-        * Proper values will be set before returning */
-       pb = pagebuf_lookup(iomapp->iomap_target, 0, 0, 0);
-       if (!pb)
-               return -EAGAIN;
-
-       /* Take a reference to the inode to prevent it from
-        * being reclaimed while we have outstanding unwritten
-        * extent IO on it.
-        */
-       if ((igrab(inode)) != inode) {
-               pagebuf_free(pb);
-               return -EAGAIN;
-       }
-
-       /* Set the count to 1 initially, this will stop an I/O
-        * completion callout which happens before we have started
-        * all the I/O from calling pagebuf_iodone too early.
-        */
-       atomic_set(&pb->pb_io_remaining, 1);
+       ioend = xfs_alloc_ioend(inode);
 
        /* First map forwards in the page consecutive buffers
         * covering this unwritten extent
@@ -474,12 +503,12 @@ xfs_map_unwritten(
                        break;
                xfs_map_at_offset(start_page, bh, p_offset, block_bits, iomapp);
                set_buffer_unwritten_io(bh);
-               bh->b_private = pb;
+               bh->b_private = ioend;
                p_offset += bh->b_size;
                nblocks++;
        } while ((bh = bh->b_this_page) != head);
 
-       atomic_add(nblocks, &pb->pb_io_remaining);
+       atomic_add(nblocks, &ioend->io_remaining);
 
        /* If we reached the end of the page, map forwards in any
         * following pages which are also covered by this extent.
@@ -496,13 +525,13 @@ xfs_map_unwritten(
                tloff = min(tlast, tloff);
                for (tindex = start_page->index + 1; tindex < tloff; tindex++) {
                        page = xfs_probe_unwritten_page(mapping,
-                                               tindex, iomapp, pb,
+                                               tindex, iomapp, ioend,
                                                PAGE_CACHE_SIZE, &bs, bbits);
                        if (!page)
                                break;
                        nblocks += bs;
-                       atomic_add(bs, &pb->pb_io_remaining);
-                       xfs_convert_page(inode, page, iomapp, wbc, pb,
+                       atomic_add(bs, &ioend->io_remaining);
+                       xfs_convert_page(inode, page, iomapp, wbc, ioend,
                                                        startio, all_bh);
                        /* stop if converting the next page might add
                         * enough blocks that the corresponding byte
@@ -514,12 +543,12 @@ xfs_map_unwritten(
                if (tindex == tlast &&
                    (pg_offset = (i_size_read(inode) & (PAGE_CACHE_SIZE - 1)))) {
                        page = xfs_probe_unwritten_page(mapping,
-                                                       tindex, iomapp, pb,
+                                                       tindex, iomapp, ioend,
                                                        pg_offset, &bs, bbits);
                        if (page) {
                                nblocks += bs;
-                               atomic_add(bs, &pb->pb_io_remaining);
-                               xfs_convert_page(inode, page, iomapp, wbc, pb,
+                               atomic_add(bs, &ioend->io_remaining);
+                               xfs_convert_page(inode, page, iomapp, wbc, ioend,
                                                        startio, all_bh);
                                if (nblocks >= ((ULONG_MAX - PAGE_SIZE) >> block_bits))
                                        goto enough;
@@ -528,21 +557,9 @@ xfs_map_unwritten(
        }
 
 enough:
-       size = nblocks;         /* NB: using 64bit number here */
-       size <<= block_bits;    /* convert fsb's to byte range */
-
-       XFS_BUF_DATAIO(pb);
-       XFS_BUF_ASYNC(pb);
-       XFS_BUF_SET_SIZE(pb, size);
-       XFS_BUF_SET_COUNT(pb, size);
-       XFS_BUF_SET_OFFSET(pb, offset);
-       XFS_BUF_SET_FSPRIVATE(pb, LINVFS_GET_VP(inode));
-       XFS_BUF_SET_IODONE_FUNC(pb, linvfs_unwritten_convert);
-
-       if (atomic_dec_and_test(&pb->pb_io_remaining) == 1) {
-               pagebuf_iodone(pb, 1, 1);
-       }
-
+       ioend->io_size = (xfs_off_t)nblocks << block_bits;
+       ioend->io_offset = offset;
+       xfs_finish_ioend(ioend);
        return 0;
 }
 
@@ -787,7 +804,7 @@ xfs_page_state_convert(
                                continue;
                        if (!iomp) {
                                err = xfs_map_blocks(inode, offset, len, &iomap,
-                                               BMAPI_READ|BMAPI_IGNSTATE);
+                                               BMAPI_WRITE|BMAPI_IGNSTATE);
                                if (err) {
                                        goto error;
                                }
@@ -1028,6 +1045,44 @@ linvfs_get_blocks_direct(
                                        create, 1, BMAPI_WRITE|BMAPI_DIRECT);
 }
 
+STATIC void
+linvfs_end_io_direct(
+       struct kiocb    *iocb,
+       loff_t          offset,
+       ssize_t         size,
+       void            *private)
+{
+       xfs_ioend_t     *ioend = iocb->private;
+
+       /*
+        * Non-NULL private data means we need to issue a transaction to
+        * convert a range from unwritten to written extents.  This needs
+        * to happen from process contect but aio+dio I/O completion
+        * happens from irq context so we need to defer it to a workqueue.
+        * This is not nessecary for synchronous direct I/O, but we do
+        * it anyway to keep the code uniform and simpler.
+        *
+        * The core direct I/O code might be changed to always call the
+        * completion handler in the future, in which case all this can
+        * go away.
+        */
+       if (private && size > 0) {
+               ioend->io_offset = offset;
+               ioend->io_size = size;
+               xfs_finish_ioend(ioend);
+       } else {
+               ASSERT(size >= 0);
+               xfs_destroy_ioend(ioend);
+       }
+
+       /*
+        * blockdev_direct_IO can return an error even afer the I/O
+        * completion handler was called.  Thus we need to protect
+        * against double-freeing.
+        */
+       iocb->private = NULL;
+}
+
 STATIC ssize_t
 linvfs_direct_IO(
        int                     rw,
@@ -1042,16 +1097,23 @@ linvfs_direct_IO(
        xfs_iomap_t     iomap;
        int             maps = 1;
        int             error;
+       ssize_t         ret;
 
        VOP_BMAP(vp, offset, 0, BMAPI_DEVICE, &iomap, &maps, error);
        if (error)
                return -error;
 
-       return blockdev_direct_IO_own_locking(rw, iocb, inode,
+       iocb->private = xfs_alloc_ioend(inode);
+
+       ret = blockdev_direct_IO_own_locking(rw, iocb, inode,
                iomap.iomap_target->pbr_bdev,
                iov, offset, nr_segs,
                linvfs_get_blocks_direct,
-               linvfs_unwritten_convert_direct);
+               linvfs_end_io_direct);
+
+       if (unlikely(ret <= 0 && iocb->private))
+               xfs_destroy_ioend(iocb->private);
+       return ret;
 }
 
 
@@ -1202,6 +1264,16 @@ out_unlock:
        return error;
 }
 
+STATIC int
+linvfs_invalidate_page(
+       struct page             *page,
+       unsigned long           offset)
+{
+       xfs_page_trace(XFS_INVALIDPAGE_ENTER,
+                       page->mapping->host, page, offset);
+       return block_invalidatepage(page, offset);
+}
+
 /*
  * Called to move a page into cleanable state - and from there
  * to be released. Possibly the page is already clean. We always
@@ -1279,6 +1351,7 @@ struct address_space_operations linvfs_aops = {
        .writepage              = linvfs_writepage,
        .sync_page              = block_sync_page,
        .releasepage            = linvfs_release_page,
+       .invalidatepage         = linvfs_invalidate_page,
        .prepare_write          = linvfs_prepare_write,
        .commit_write           = generic_commit_write,
        .bmap                   = linvfs_bmap,
diff --git a/fs/xfs/linux-2.6/xfs_aops.h b/fs/xfs/linux-2.6/xfs_aops.h
new file mode 100644 (file)
index 0000000..2fa6297
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2005 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/SGIGPLNoticeExplan/
+ */
+#ifndef __XFS_AOPS_H__
+#define __XFS_AOPS_H__
+
+extern struct workqueue_struct *xfsdatad_workqueue;
+extern mempool_t *xfs_ioend_pool;
+
+typedef void (*xfs_ioend_func_t)(void *);
+
+typedef struct xfs_ioend {
+       unsigned int            io_uptodate;    /* I/O status register */
+       atomic_t                io_remaining;   /* hold count */
+       struct vnode            *io_vnode;      /* file being written to */
+       struct buffer_head      *io_buffer_head;/* buffer linked list head */
+       size_t                  io_size;        /* size of the extent */
+       xfs_off_t               io_offset;      /* offset in the file */
+       struct work_struct      io_work;        /* xfsdatad work queue */
+} xfs_ioend_t;
+
+#endif /* __XFS_IOPS_H__ */
index df0cba239dd589b2ac7b9fbb90aa0909190a5ac3..655bf4a78afeb72a57eaf4668b2034b3c85c6aa7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2005 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
@@ -54,6 +54,7 @@
 #include <linux/percpu.h>
 #include <linux/blkdev.h>
 #include <linux/hash.h>
+#include <linux/kthread.h>
 
 #include "xfs_linux.h"
 
@@ -67,7 +68,7 @@ STATIC int xfsbufd_wakeup(int, unsigned int);
 STATIC void pagebuf_delwri_queue(xfs_buf_t *, int);
 
 STATIC struct workqueue_struct *xfslogd_workqueue;
-STATIC struct workqueue_struct *xfsdatad_workqueue;
+struct workqueue_struct *xfsdatad_workqueue;
 
 /*
  * Pagebuf debugging
@@ -590,8 +591,10 @@ found:
                PB_SET_OWNER(pb);
        }
 
-       if (pb->pb_flags & PBF_STALE)
+       if (pb->pb_flags & PBF_STALE) {
+               ASSERT((pb->pb_flags & _PBF_DELWRI_Q) == 0);
                pb->pb_flags &= PBF_MAPPED;
+       }
        PB_TRACE(pb, "got_lock", 0);
        XFS_STATS_INC(pb_get_locked);
        return (pb);
@@ -699,25 +702,6 @@ xfs_buf_read_flags(
        return NULL;
 }
 
-/*
- * Create a skeletal pagebuf (no pages associated with it).
- */
-xfs_buf_t *
-pagebuf_lookup(
-       xfs_buftarg_t           *target,
-       loff_t                  ioff,
-       size_t                  isize,
-       page_buf_flags_t        flags)
-{
-       xfs_buf_t               *pb;
-
-       pb = pagebuf_allocate(flags);
-       if (pb) {
-               _pagebuf_initialize(pb, target, ioff, isize, flags);
-       }
-       return pb;
-}
-
 /*
  * If we are not low on memory then do the readahead in a deadlock
  * safe manner.
@@ -913,22 +897,23 @@ pagebuf_rele(
                        do_free = 0;
                }
 
-               if (pb->pb_flags & PBF_DELWRI) {
-                       pb->pb_flags |= PBF_ASYNC;
-                       atomic_inc(&pb->pb_hold);
-                       pagebuf_delwri_queue(pb, 0);
-                       do_free = 0;
-               } else if (pb->pb_flags & PBF_FS_MANAGED) {
+               if (pb->pb_flags & PBF_FS_MANAGED) {
                        do_free = 0;
                }
 
                if (do_free) {
+                       ASSERT((pb->pb_flags & (PBF_DELWRI|_PBF_DELWRI_Q)) == 0);
                        list_del_init(&pb->pb_hash_list);
                        spin_unlock(&hash->bh_lock);
                        pagebuf_free(pb);
                } else {
                        spin_unlock(&hash->bh_lock);
                }
+       } else {
+               /*
+                * Catch reference count leaks
+                */
+               ASSERT(atomic_read(&pb->pb_hold) >= 0);
        }
 }
 
@@ -1006,13 +991,24 @@ pagebuf_lock(
  *     pagebuf_unlock
  *
  *     pagebuf_unlock releases the lock on the buffer object created by
- *     pagebuf_lock or pagebuf_cond_lock (not any
- *     pinning of underlying pages created by pagebuf_pin).
+ *     pagebuf_lock or pagebuf_cond_lock (not any pinning of underlying pages
+ *     created by pagebuf_pin).
+ *
+ *     If the buffer is marked delwri but is not queued, do so before we
+ *     unlock the buffer as we need to set flags correctly. We also need to
+ *     take a reference for the delwri queue because the unlocker is going to
+ *     drop their's and they don't know we just queued it.
  */
 void
 pagebuf_unlock(                                /* unlock buffer                */
        xfs_buf_t               *pb)    /* buffer to unlock             */
 {
+       if ((pb->pb_flags & (PBF_DELWRI|_PBF_DELWRI_Q)) == PBF_DELWRI) {
+               atomic_inc(&pb->pb_hold);
+               pb->pb_flags |= PBF_ASYNC;
+               pagebuf_delwri_queue(pb, 0);
+       }
+
        PB_CLEAR_OWNER(pb);
        up(&pb->pb_sema);
        PB_TRACE(pb, "unlock", 0);
@@ -1249,8 +1245,8 @@ bio_end_io_pagebuf(
        int                     error)
 {
        xfs_buf_t               *pb = (xfs_buf_t *)bio->bi_private;
-       unsigned int            i, blocksize = pb->pb_target->pbr_bsize;
-       struct bio_vec          *bvec = bio->bi_io_vec;
+       unsigned int            blocksize = pb->pb_target->pbr_bsize;
+       struct bio_vec          *bvec = bio->bi_io_vec + bio->bi_vcnt - 1;
 
        if (bio->bi_size)
                return 1;
@@ -1258,10 +1254,12 @@ bio_end_io_pagebuf(
        if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
                pb->pb_error = EIO;
 
-       for (i = 0; i < bio->bi_vcnt; i++, bvec++) {
+       do {
                struct page     *page = bvec->bv_page;
 
-               if (pb->pb_error) {
+               if (unlikely(pb->pb_error)) {
+                       if (pb->pb_flags & PBF_READ)
+                               ClearPageUptodate(page);
                        SetPageError(page);
                } else if (blocksize == PAGE_CACHE_SIZE) {
                        SetPageUptodate(page);
@@ -1270,10 +1268,13 @@ bio_end_io_pagebuf(
                        set_page_region(page, bvec->bv_offset, bvec->bv_len);
                }
 
+               if (--bvec >= bio->bi_io_vec)
+                       prefetchw(&bvec->bv_page->flags);
+
                if (_pagebuf_iolocked(pb)) {
                        unlock_page(page);
                }
-       }
+       } while (bvec >= bio->bi_io_vec);
 
        _pagebuf_iodone(pb, 1);
        bio_put(bio);
@@ -1511,6 +1512,11 @@ again:
                        ASSERT(btp == bp->pb_target);
                        if (!(bp->pb_flags & PBF_FS_MANAGED)) {
                                spin_unlock(&hash->bh_lock);
+                               /*
+                                * Catch superblock reference count leaks
+                                * immediately
+                                */
+                               BUG_ON(bp->pb_bn == 0);
                                delay(100);
                                goto again;
                        }
@@ -1686,17 +1692,20 @@ pagebuf_delwri_queue(
        int                     unlock)
 {
        PB_TRACE(pb, "delwri_q", (long)unlock);
-       ASSERT(pb->pb_flags & PBF_DELWRI);
+       ASSERT((pb->pb_flags & (PBF_DELWRI|PBF_ASYNC)) ==
+                                       (PBF_DELWRI|PBF_ASYNC));
 
        spin_lock(&pbd_delwrite_lock);
        /* If already in the queue, dequeue and place at tail */
        if (!list_empty(&pb->pb_list)) {
+               ASSERT(pb->pb_flags & _PBF_DELWRI_Q);
                if (unlock) {
                        atomic_dec(&pb->pb_hold);
                }
                list_del(&pb->pb_list);
        }
 
+       pb->pb_flags |= _PBF_DELWRI_Q;
        list_add_tail(&pb->pb_list, &pbd_delwrite_queue);
        pb->pb_queuetime = jiffies;
        spin_unlock(&pbd_delwrite_lock);
@@ -1713,10 +1722,11 @@ pagebuf_delwri_dequeue(
 
        spin_lock(&pbd_delwrite_lock);
        if ((pb->pb_flags & PBF_DELWRI) && !list_empty(&pb->pb_list)) {
+               ASSERT(pb->pb_flags & _PBF_DELWRI_Q);
                list_del_init(&pb->pb_list);
                dequeued = 1;
        }
-       pb->pb_flags &= ~PBF_DELWRI;
+       pb->pb_flags &= ~(PBF_DELWRI|_PBF_DELWRI_Q);
        spin_unlock(&pbd_delwrite_lock);
 
        if (dequeued)
@@ -1733,9 +1743,7 @@ pagebuf_runall_queues(
 }
 
 /* Defines for pagebuf daemon */
-STATIC DECLARE_COMPLETION(xfsbufd_done);
 STATIC struct task_struct *xfsbufd_task;
-STATIC int xfsbufd_active;
 STATIC int xfsbufd_force_flush;
 STATIC int xfsbufd_force_sleep;
 
@@ -1761,14 +1769,8 @@ xfsbufd(
        xfs_buftarg_t           *target;
        xfs_buf_t               *pb, *n;
 
-       /*  Set up the thread  */
-       daemonize("xfsbufd");
        current->flags |= PF_MEMALLOC;
 
-       xfsbufd_task = current;
-       xfsbufd_active = 1;
-       barrier();
-
        INIT_LIST_HEAD(&tmp);
        do {
                if (unlikely(freezing(current))) {
@@ -1795,7 +1797,7 @@ xfsbufd(
                                        break;
                                }
 
-                               pb->pb_flags &= ~PBF_DELWRI;
+                               pb->pb_flags &= ~(PBF_DELWRI|_PBF_DELWRI_Q);
                                pb->pb_flags |= PBF_WRITE;
                                list_move(&pb->pb_list, &tmp);
                        }
@@ -1816,9 +1818,9 @@ xfsbufd(
                        purge_addresses();
 
                xfsbufd_force_flush = 0;
-       } while (xfsbufd_active);
+       } while (!kthread_should_stop());
 
-       complete_and_exit(&xfsbufd_done, 0);
+       return 0;
 }
 
 /*
@@ -1845,15 +1847,13 @@ xfs_flush_buftarg(
                if (pb->pb_target != target)
                        continue;
 
-               ASSERT(pb->pb_flags & PBF_DELWRI);
+               ASSERT(pb->pb_flags & (PBF_DELWRI|_PBF_DELWRI_Q));
                PB_TRACE(pb, "walkq2", (long)pagebuf_ispin(pb));
                if (pagebuf_ispin(pb)) {
                        pincount++;
                        continue;
                }
 
-               pb->pb_flags &= ~PBF_DELWRI;
-               pb->pb_flags |= PBF_WRITE;
                list_move(&pb->pb_list, &tmp);
        }
        spin_unlock(&pbd_delwrite_lock);
@@ -1862,12 +1862,14 @@ xfs_flush_buftarg(
         * Dropped the delayed write list lock, now walk the temporary list
         */
        list_for_each_entry_safe(pb, n, &tmp, pb_list) {
+               pagebuf_lock(pb);
+               pb->pb_flags &= ~(PBF_DELWRI|_PBF_DELWRI_Q);
+               pb->pb_flags |= PBF_WRITE;
                if (wait)
                        pb->pb_flags &= ~PBF_ASYNC;
                else
                        list_del_init(&pb->pb_list);
 
-               pagebuf_lock(pb);
                pagebuf_iostrategy(pb);
        }
 
@@ -1901,9 +1903,11 @@ xfs_buf_daemons_start(void)
        if (!xfsdatad_workqueue)
                goto out_destroy_xfslogd_workqueue;
 
-       error = kernel_thread(xfsbufd, NULL, CLONE_FS|CLONE_FILES);
-       if (error < 0)
+       xfsbufd_task = kthread_run(xfsbufd, NULL, "xfsbufd");
+       if (IS_ERR(xfsbufd_task)) {
+               error = PTR_ERR(xfsbufd_task);
                goto out_destroy_xfsdatad_workqueue;
+       }
        return 0;
 
  out_destroy_xfsdatad_workqueue:
@@ -1920,10 +1924,7 @@ xfs_buf_daemons_start(void)
 STATIC void
 xfs_buf_daemons_stop(void)
 {
-       xfsbufd_active = 0;
-       barrier();
-       wait_for_completion(&xfsbufd_done);
-
+       kthread_stop(xfsbufd_task);
        destroy_workqueue(xfslogd_workqueue);
        destroy_workqueue(xfsdatad_workqueue);
 }
index 3f8f69a66aeaba714b75a03a50c63b0fc6b59097..67c19f7992325ee57d743f3f77e0123a9b39588d 100644 (file)
@@ -89,6 +89,7 @@ typedef enum page_buf_flags_e {               /* pb_flags values */
        _PBF_PAGE_CACHE = (1 << 17),/* backed by pagecache                 */
        _PBF_KMEM_ALLOC = (1 << 18),/* backed by kmem_alloc()              */
        _PBF_RUN_QUEUES = (1 << 19),/* run block device task queue         */
+       _PBF_DELWRI_Q = (1 << 21),   /* buffer on delwri queue             */
 } page_buf_flags_t;
 
 #define PBF_UPDATE (PBF_READ | PBF_WRITE)
@@ -206,13 +207,6 @@ extern xfs_buf_t *xfs_buf_read_flags(      /* allocate and read a buffer   */
 #define xfs_buf_read(target, blkno, len, flags) \
        xfs_buf_read_flags((target), (blkno), (len), PBF_LOCK | PBF_MAPPED)
 
-extern xfs_buf_t *pagebuf_lookup(
-               xfs_buftarg_t *,
-               loff_t,                 /* starting offset of range     */
-               size_t,                 /* length of range              */
-               page_buf_flags_t);      /* PBF_READ, PBF_WRITE,         */
-                                       /* PBF_FORCEIO,                 */
-
 extern xfs_buf_t *pagebuf_get_empty(   /* allocate pagebuf struct with */
                                        /*  no memory or disk address   */
                size_t len,
@@ -344,8 +338,6 @@ extern void pagebuf_trace(
 
 
 
-
-
 /* These are just for xfs_syncsub... it sets an internal variable
  * then passes it to VOP_FLUSH_PAGES or adds the flags to a newly gotten buf_t
  */
@@ -452,7 +444,7 @@ extern void pagebuf_trace(
 
 #define XFS_BUF_PTR(bp)                (xfs_caddr_t)((bp)->pb_addr)
 
-extern inline xfs_caddr_t xfs_buf_offset(xfs_buf_t *bp, size_t offset)
+static inline xfs_caddr_t xfs_buf_offset(xfs_buf_t *bp, size_t offset)
 {
        if (bp->pb_flags & PBF_MAPPED)
                return XFS_BUF_PTR(bp) + offset;
index f1ce4323f56e905c499e3889734d878d82c7b566..3881622bcf081abcf35d81dbe720f184a7720d3d 100644 (file)
@@ -311,6 +311,31 @@ linvfs_fsync(
 
 #define nextdp(dp)      ((struct xfs_dirent *)((char *)(dp) + (dp)->d_reclen))
 
+#ifdef CONFIG_XFS_DMAPI
+
+STATIC struct page *
+linvfs_filemap_nopage(
+       struct vm_area_struct   *area,
+       unsigned long           address,
+       int                     *type)
+{
+       struct inode    *inode = area->vm_file->f_dentry->d_inode;
+       vnode_t         *vp = LINVFS_GET_VP(inode);
+       xfs_mount_t     *mp = XFS_VFSTOM(vp->v_vfsp);
+       int             error;
+
+       ASSERT_ALWAYS(vp->v_vfsp->vfs_flag & VFS_DMI);
+
+       error = XFS_SEND_MMAP(mp, area, 0);
+       if (error)
+               return NULL;
+
+       return filemap_nopage(area, address, type);
+}
+
+#endif /* CONFIG_XFS_DMAPI */
+
+
 STATIC int
 linvfs_readdir(
        struct file     *filp,
@@ -390,14 +415,6 @@ done:
        return -error;
 }
 
-#ifdef CONFIG_XFS_DMAPI
-STATIC void
-linvfs_mmap_close(
-       struct vm_area_struct   *vma)
-{
-       xfs_dm_mm_put(vma);
-}
-#endif /* CONFIG_XFS_DMAPI */
 
 STATIC int
 linvfs_file_mmap(
@@ -411,16 +428,11 @@ linvfs_file_mmap(
 
        vma->vm_ops = &linvfs_file_vm_ops;
 
-       if (vp->v_vfsp->vfs_flag & VFS_DMI) {
-               xfs_mount_t     *mp = XFS_VFSTOM(vp->v_vfsp);
-
-               error = -XFS_SEND_MMAP(mp, vma, 0);
-               if (error)
-                       return error;
 #ifdef CONFIG_XFS_DMAPI
+       if (vp->v_vfsp->vfs_flag & VFS_DMI) {
                vma->vm_ops = &linvfs_dmapi_file_vm_ops;
-#endif
        }
+#endif /* CONFIG_XFS_DMAPI */
 
        VOP_SETATTR(vp, &va, XFS_AT_UPDATIME, NULL, error);
        if (!error)
@@ -474,6 +486,7 @@ linvfs_ioctl_invis(
        return error;
 }
 
+#ifdef CONFIG_XFS_DMAPI
 #ifdef HAVE_VMOP_MPROTECT
 STATIC int
 linvfs_mprotect(
@@ -494,6 +507,7 @@ linvfs_mprotect(
        return error;
 }
 #endif /* HAVE_VMOP_MPROTECT */
+#endif /* CONFIG_XFS_DMAPI */
 
 #ifdef HAVE_FOP_OPEN_EXEC
 /* If the user is attempting to execute a file that is offline then
@@ -528,49 +542,10 @@ open_exec_out:
 }
 #endif /* HAVE_FOP_OPEN_EXEC */
 
-/*
- * Temporary workaround to the AIO direct IO write problem.
- * This code can go and we can revert to do_sync_write once
- * the writepage(s) rework is merged.
- */
-STATIC ssize_t
-linvfs_write(
-       struct file     *filp,
-       const char      __user *buf,
-       size_t          len,
-       loff_t          *ppos)
-{
-       struct kiocb    kiocb;
-       ssize_t         ret;
-
-       init_sync_kiocb(&kiocb, filp);
-       kiocb.ki_pos = *ppos;
-       ret = __linvfs_write(&kiocb, buf, 0, len, kiocb.ki_pos);
-       *ppos = kiocb.ki_pos;
-       return ret;
-}
-STATIC ssize_t
-linvfs_write_invis(
-       struct file     *filp,
-       const char      __user *buf,
-       size_t          len,
-       loff_t          *ppos)
-{
-       struct kiocb    kiocb;
-       ssize_t         ret;
-
-       init_sync_kiocb(&kiocb, filp);
-       kiocb.ki_pos = *ppos;
-       ret = __linvfs_write(&kiocb, buf, IO_INVIS, len, kiocb.ki_pos);
-       *ppos = kiocb.ki_pos;
-       return ret;
-}
-
-
 struct file_operations linvfs_file_operations = {
        .llseek         = generic_file_llseek,
        .read           = do_sync_read,
-       .write          = linvfs_write,
+       .write          = do_sync_write,
        .readv          = linvfs_readv,
        .writev         = linvfs_writev,
        .aio_read       = linvfs_aio_read,
@@ -592,7 +567,7 @@ struct file_operations linvfs_file_operations = {
 struct file_operations linvfs_invis_file_operations = {
        .llseek         = generic_file_llseek,
        .read           = do_sync_read,
-       .write          = linvfs_write_invis,
+       .write          = do_sync_write,
        .readv          = linvfs_readv_invis,
        .writev         = linvfs_writev_invis,
        .aio_read       = linvfs_aio_read_invis,
@@ -626,8 +601,7 @@ static struct vm_operations_struct linvfs_file_vm_ops = {
 
 #ifdef CONFIG_XFS_DMAPI
 static struct vm_operations_struct linvfs_dmapi_file_vm_ops = {
-       .close          = linvfs_mmap_close,
-       .nopage         = filemap_nopage,
+       .nopage         = linvfs_filemap_nopage,
        .populate       = filemap_populate,
 #ifdef HAVE_VMOP_MPROTECT
        .mprotect       = linvfs_mprotect,
index 05a447e51cc023c4d19f2aa4dd275d4b59d87db6..6a3326bcd8d015f86c5a66a00263b0229a1396ef 100644 (file)
@@ -141,13 +141,19 @@ xfs_find_handle(
                return -XFS_ERROR(EINVAL);
        }
 
-       /* we need the vnode */
-       vp = LINVFS_GET_VP(inode);
-       if (vp->v_type != VREG && vp->v_type != VDIR && vp->v_type != VLNK) {
+       switch (inode->i_mode & S_IFMT) {
+       case S_IFREG:
+       case S_IFDIR:
+       case S_IFLNK:
+               break;
+       default:
                iput(inode);
                return -XFS_ERROR(EBADF);
        }
 
+       /* we need the vnode */
+       vp = LINVFS_GET_VP(inode);
+
        /* now we can grab the fsid */
        memcpy(&handle.ha_fsid, vp->v_vfsp->vfs_altfsid, sizeof(xfs_fsid_t));
        hsize = sizeof(xfs_fsid_t);
@@ -386,7 +392,7 @@ xfs_readlink_by_handle(
                return -error;
 
        /* Restrict this handle operation to symlinks only. */
-       if (vp->v_type != VLNK) {
+       if (!S_ISLNK(inode->i_mode)) {
                VN_RELE(vp);
                return -XFS_ERROR(EINVAL);
        }
@@ -982,10 +988,10 @@ xfs_ioc_space(
        if (vp->v_inode.i_flags & (S_IMMUTABLE|S_APPEND))
                return -XFS_ERROR(EPERM);
 
-       if (!(filp->f_flags & FMODE_WRITE))
+       if (!(filp->f_mode & FMODE_WRITE))
                return -XFS_ERROR(EBADF);
 
-       if (vp->v_type != VREG)
+       if (!VN_ISREG(vp))
                return -XFS_ERROR(EINVAL);
 
        if (copy_from_user(&bf, arg, sizeof(bf)))
index 0f8f1384eb36a88a20e0e89e34f884436b8063b2..4636b7f86f1fa204be576d8eb976c1711effa200 100644 (file)
 #include "xfs_vnode.h"
 #include "xfs_dfrag.h"
 
+#define  _NATIVE_IOC(cmd, type) \
+         _IOC(_IOC_DIR(cmd), _IOC_TYPE(cmd), _IOC_NR(cmd), sizeof(type))
+
 #if defined(CONFIG_IA64) || defined(CONFIG_X86_64)
 #define BROKEN_X86_ALIGNMENT
+/* on ia32 l_start is on a 32-bit boundary */
+typedef struct xfs_flock64_32 {
+       __s16           l_type;
+       __s16           l_whence;
+       __s64           l_start __attribute__((packed));
+                       /* len == 0 means until end of file */
+       __s64           l_len __attribute__((packed));
+       __s32           l_sysid;
+       __u32           l_pid;
+       __s32           l_pad[4];       /* reserve area */
+} xfs_flock64_32_t;
+
+#define XFS_IOC_ALLOCSP_32     _IOW ('X', 10, struct xfs_flock64_32)
+#define XFS_IOC_FREESP_32      _IOW ('X', 11, struct xfs_flock64_32)
+#define XFS_IOC_ALLOCSP64_32   _IOW ('X', 36, struct xfs_flock64_32)
+#define XFS_IOC_FREESP64_32    _IOW ('X', 37, struct xfs_flock64_32)
+#define XFS_IOC_RESVSP_32      _IOW ('X', 40, struct xfs_flock64_32)
+#define XFS_IOC_UNRESVSP_32    _IOW ('X', 41, struct xfs_flock64_32)
+#define XFS_IOC_RESVSP64_32    _IOW ('X', 42, struct xfs_flock64_32)
+#define XFS_IOC_UNRESVSP64_32  _IOW ('X', 43, struct xfs_flock64_32)
+
+/* just account for different alignment */
+STATIC unsigned long
+xfs_ioctl32_flock(
+       unsigned long           arg)
+{
+       xfs_flock64_32_t        __user *p32 = (void __user *)arg;
+       xfs_flock64_t           __user *p = compat_alloc_user_space(sizeof(*p));
+
+       if (copy_in_user(&p->l_type,    &p32->l_type,   sizeof(s16)) ||
+           copy_in_user(&p->l_whence,  &p32->l_whence, sizeof(s16)) ||
+           copy_in_user(&p->l_start,   &p32->l_start,  sizeof(s64)) ||
+           copy_in_user(&p->l_len,     &p32->l_len,    sizeof(s64)) ||
+           copy_in_user(&p->l_sysid,   &p32->l_sysid,  sizeof(s32)) ||
+           copy_in_user(&p->l_pid,     &p32->l_pid,    sizeof(u32)) ||
+           copy_in_user(&p->l_pad,     &p32->l_pad,    4*sizeof(u32)))
+               return -EFAULT;
+       
+       return (unsigned long)p;
+}
+
 #else
 
 typedef struct xfs_fsop_bulkreq32 {
@@ -103,7 +147,6 @@ __linvfs_compat_ioctl(int mode, struct file *f, unsigned cmd, unsigned long arg)
 /* not handled
        case XFS_IOC_FD_TO_HANDLE:
        case XFS_IOC_PATH_TO_HANDLE:
-       case XFS_IOC_PATH_TO_HANDLE:
        case XFS_IOC_PATH_TO_FSHANDLE:
        case XFS_IOC_OPEN_BY_HANDLE:
        case XFS_IOC_FSSETDM_BY_HANDLE:
@@ -124,8 +167,21 @@ __linvfs_compat_ioctl(int mode, struct file *f, unsigned cmd, unsigned long arg)
        case XFS_IOC_ERROR_CLEARALL:
                break;
 
-#ifndef BROKEN_X86_ALIGNMENT
-       /* xfs_flock_t and xfs_bstat_t have wrong u32 vs u64 alignment */
+#ifdef BROKEN_X86_ALIGNMENT
+       /* xfs_flock_t has wrong u32 vs u64 alignment */
+       case XFS_IOC_ALLOCSP_32:
+       case XFS_IOC_FREESP_32:
+       case XFS_IOC_ALLOCSP64_32:
+       case XFS_IOC_FREESP64_32:
+       case XFS_IOC_RESVSP_32:
+       case XFS_IOC_UNRESVSP_32:
+       case XFS_IOC_RESVSP64_32:
+       case XFS_IOC_UNRESVSP64_32:
+               arg = xfs_ioctl32_flock(arg);
+               cmd = _NATIVE_IOC(cmd, struct xfs_flock64);
+               break;
+
+#else /* These are handled fine if no alignment issues */
        case XFS_IOC_ALLOCSP:
        case XFS_IOC_FREESP:
        case XFS_IOC_RESVSP:
@@ -134,6 +190,9 @@ __linvfs_compat_ioctl(int mode, struct file *f, unsigned cmd, unsigned long arg)
        case XFS_IOC_FREESP64:
        case XFS_IOC_RESVSP64:
        case XFS_IOC_UNRESVSP64:
+               break;
+
+       /* xfs_bstat_t still has wrong u32 vs u64 alignment */
        case XFS_IOC_SWAPEXT:
                break;
 
index f252605514eb1dce23393e4f904d6f5789c3d535..77708a8c9f87b78afc74125879071a2617493e88 100644 (file)
@@ -140,7 +140,6 @@ linvfs_mknod(
 
        memset(&va, 0, sizeof(va));
        va.va_mask = XFS_AT_TYPE|XFS_AT_MODE;
-       va.va_type = IFTOVT(mode);
        va.va_mode = mode;
 
        switch (mode & S_IFMT) {
@@ -308,14 +307,13 @@ linvfs_symlink(
        cvp = NULL;
 
        memset(&va, 0, sizeof(va));
-       va.va_type = VLNK;
-       va.va_mode = irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO;
+       va.va_mode = S_IFLNK |
+               (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO);
        va.va_mask = XFS_AT_TYPE|XFS_AT_MODE;
 
        error = 0;
        VOP_SYMLINK(dvp, dentry, &va, (char *)symname, &cvp, NULL, error);
        if (!error && cvp) {
-               ASSERT(cvp->v_type == VLNK);
                ip = LINVFS_GET_IP(cvp);
                d_instantiate(dentry, ip);
                validate_fields(dir);
@@ -425,9 +423,14 @@ linvfs_follow_link(
        return NULL;
 }
 
-static void linvfs_put_link(struct dentry *dentry, struct nameidata *nd, void *p)
+STATIC void
+linvfs_put_link(
+       struct dentry   *dentry,
+       struct nameidata *nd,
+       void            *p)
 {
-       char *s = nd_get_link(nd);
+       char            *s = nd_get_link(nd);
+
        if (!IS_ERR(s))
                kfree(s);
 }
index 42dc5e4662ed9f950506ba25fd7d1ead729251dc..68c5d885ed9c214e737975a3d8a37379f8dbf834 100644 (file)
@@ -64,7 +64,6 @@
 #include <sema.h>
 #include <time.h>
 
-#include <support/qsort.h>
 #include <support/ktrace.h>
 #include <support/debug.h>
 #include <support/move.h>
 #include <xfs_stats.h>
 #include <xfs_sysctl.h>
 #include <xfs_iops.h>
+#include <xfs_aops.h>
 #include <xfs_super.h>
 #include <xfs_globals.h>
 #include <xfs_fs_subr.h>
@@ -254,11 +254,18 @@ static inline void set_buffer_unwritten_io(struct buffer_head *bh)
 #define MAX(a,b)       (max(a,b))
 #define howmany(x, y)  (((x)+((y)-1))/(y))
 #define roundup(x, y)  ((((x)+((y)-1))/(y))*(y))
+#define qsort(a,n,s,fn)        sort(a,n,s,fn,NULL)
 
+/*
+ * Various platform dependent calls that don't fit anywhere else
+ */
 #define xfs_stack_trace()      dump_stack()
-
 #define xfs_itruncate_data(ip, off)    \
        (-vmtruncate(LINVFS_GET_IP(XFS_ITOV(ip)), (off)))
+#define xfs_statvfs_fsid(statp, mp)    \
+       ({ u64 id = huge_encode_dev((mp)->m_dev);       \
+          __kernel_fsid_t *fsid = &(statp)->f_fsid;    \
+       (fsid->val[0] = (u32)id, fsid->val[1] = (u32)(id >> 32)); })
 
 
 /* Move the kernel do_div definition off to one side */
@@ -371,6 +378,4 @@ static inline __uint64_t roundup_64(__uint64_t x, __uint32_t y)
        return(x * y);
 }
 
-#define qsort(a, n, s, cmp) sort(a, n, s, cmp, NULL)
-
 #endif /* __XFS_LINUX__ */
index acab58c48043bd77c471c724090fbfe0156b120b..3b5fabe8dae908474c779517ef27ecaeb3b49024 100644 (file)
@@ -660,9 +660,6 @@ xfs_write(
                        (xip->i_d.di_flags & XFS_DIFLAG_REALTIME) ?
                                mp->m_rtdev_targp : mp->m_ddev_targp;
 
-               if (ioflags & IO_ISAIO)
-                       return XFS_ERROR(-ENOSYS);
-
                if ((pos & target->pbr_smask) || (count & target->pbr_smask))
                        return XFS_ERROR(-EINVAL);
 
index f197a720e394db5b1bca538a3f826882cc3b7f46..6294dcdb797cc97ae98b7e24aebed23292a6f2f4 100644 (file)
@@ -70,9 +70,10 @@ struct xfs_iomap;
 #define        XFS_SENDFILE_ENTER      21
 #define        XFS_WRITEPAGE_ENTER     22
 #define        XFS_RELEASEPAGE_ENTER   23
-#define        XFS_IOMAP_ALLOC_ENTER   24
-#define        XFS_IOMAP_ALLOC_MAP     25
-#define        XFS_IOMAP_UNWRITTEN     26
+#define        XFS_INVALIDPAGE_ENTER   24
+#define        XFS_IOMAP_ALLOC_ENTER   25
+#define        XFS_IOMAP_ALLOC_MAP     26
+#define        XFS_IOMAP_UNWRITTEN     27
 extern void xfs_rw_enter_trace(int, struct xfs_iocore *,
                                void *, size_t, loff_t, int);
 extern void xfs_inval_cached_trace(struct xfs_iocore *,
index f6dd7de2592748c95dee026e0f865ec37d5ca89b..0da87bfc999999e74a32985ffbde515c429cd111 100644 (file)
 #include <linux/namei.h>
 #include <linux/init.h>
 #include <linux/mount.h>
+#include <linux/mempool.h>
 #include <linux/writeback.h>
+#include <linux/kthread.h>
 
 STATIC struct quotactl_ops linvfs_qops;
 STATIC struct super_operations linvfs_sops;
-STATIC kmem_zone_t *linvfs_inode_zone;
+STATIC kmem_zone_t *xfs_vnode_zone;
+STATIC kmem_zone_t *xfs_ioend_zone;
+mempool_t *xfs_ioend_pool;
 
 STATIC struct xfs_mount_args *
 xfs_args_allocate(
@@ -138,24 +142,25 @@ STATIC __inline__ void
 xfs_set_inodeops(
        struct inode            *inode)
 {
-       vnode_t                 *vp = LINVFS_GET_VP(inode);
-
-       if (vp->v_type == VNON) {
-               vn_mark_bad(vp);
-       } else if (S_ISREG(inode->i_mode)) {
+       switch (inode->i_mode & S_IFMT) {
+       case S_IFREG:
                inode->i_op = &linvfs_file_inode_operations;
                inode->i_fop = &linvfs_file_operations;
                inode->i_mapping->a_ops = &linvfs_aops;
-       } else if (S_ISDIR(inode->i_mode)) {
+               break;
+       case S_IFDIR:
                inode->i_op = &linvfs_dir_inode_operations;
                inode->i_fop = &linvfs_dir_operations;
-       } else if (S_ISLNK(inode->i_mode)) {
+               break;
+       case S_IFLNK:
                inode->i_op = &linvfs_symlink_inode_operations;
                if (inode->i_blocks)
                        inode->i_mapping->a_ops = &linvfs_aops;
-       } else {
+               break;
+       default:
                inode->i_op = &linvfs_file_inode_operations;
                init_special_inode(inode, inode->i_mode, inode->i_rdev);
+               break;
        }
 }
 
@@ -167,16 +172,23 @@ xfs_revalidate_inode(
 {
        struct inode            *inode = LINVFS_GET_IP(vp);
 
-       inode->i_mode   = (ip->i_d.di_mode & MODEMASK) | VTTOIF(vp->v_type);
+       inode->i_mode   = ip->i_d.di_mode;
        inode->i_nlink  = ip->i_d.di_nlink;
        inode->i_uid    = ip->i_d.di_uid;
        inode->i_gid    = ip->i_d.di_gid;
-       if (((1 << vp->v_type) & ((1<<VBLK) | (1<<VCHR))) == 0) {
+
+       switch (inode->i_mode & S_IFMT) {
+       case S_IFBLK:
+       case S_IFCHR:
+               inode->i_rdev =
+                       MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff,
+                             sysv_minor(ip->i_df.if_u2.if_rdev));
+               break;
+       default:
                inode->i_rdev = 0;
-       } else {
-               xfs_dev_t dev = ip->i_df.if_u2.if_rdev;
-               inode->i_rdev = MKDEV(sysv_major(dev) & 0x1ff, sysv_minor(dev));
+               break;
        }
+
        inode->i_blksize = PAGE_CACHE_SIZE;
        inode->i_generation = ip->i_d.di_gen;
        i_size_write(inode, ip->i_d.di_size);
@@ -231,7 +243,6 @@ xfs_initialize_vnode(
         * finish our work.
         */
        if (ip->i_d.di_mode != 0 && unlock && (inode->i_state & I_NEW)) {
-               vp->v_type = IFTOVT(ip->i_d.di_mode);
                xfs_revalidate_inode(XFS_BHVTOM(bdp), vp, ip);
                xfs_set_inodeops(inode);
        
@@ -274,8 +285,7 @@ linvfs_alloc_inode(
 {
        vnode_t                 *vp;
 
-       vp = (vnode_t *)kmem_cache_alloc(linvfs_inode_zone, 
-                kmem_flags_convert(KM_SLEEP));
+       vp = kmem_cache_alloc(xfs_vnode_zone, kmem_flags_convert(KM_SLEEP));
        if (!vp)
                return NULL;
        return LINVFS_GET_IP(vp);
@@ -285,11 +295,11 @@ STATIC void
 linvfs_destroy_inode(
        struct inode            *inode)
 {
-       kmem_cache_free(linvfs_inode_zone, LINVFS_GET_VP(inode));
+       kmem_zone_free(xfs_vnode_zone, LINVFS_GET_VP(inode));
 }
 
 STATIC void
-init_once(
+linvfs_inode_init_once(
        void                    *data,
        kmem_cache_t            *cachep,
        unsigned long           flags)
@@ -302,21 +312,41 @@ init_once(
 }
 
 STATIC int
-init_inodecache( void )
+linvfs_init_zones(void)
 {
-       linvfs_inode_zone = kmem_cache_create("linvfs_icache",
+       xfs_vnode_zone = kmem_cache_create("xfs_vnode",
                                sizeof(vnode_t), 0, SLAB_RECLAIM_ACCOUNT,
-                               init_once, NULL);
-       if (linvfs_inode_zone == NULL)
-               return -ENOMEM;
+                               linvfs_inode_init_once, NULL);
+       if (!xfs_vnode_zone)
+               goto out;
+
+       xfs_ioend_zone = kmem_zone_init(sizeof(xfs_ioend_t), "xfs_ioend");
+       if (!xfs_ioend_zone)
+               goto out_destroy_vnode_zone;
+
+       xfs_ioend_pool = mempool_create(4 * MAX_BUF_PER_PAGE,
+                       mempool_alloc_slab, mempool_free_slab,
+                       xfs_ioend_zone);
+       if (!xfs_ioend_pool)
+               goto out_free_ioend_zone;
+
        return 0;
+
+
+ out_free_ioend_zone:
+       kmem_zone_destroy(xfs_ioend_zone);
+ out_destroy_vnode_zone:
+       kmem_zone_destroy(xfs_vnode_zone);
+ out:
+       return -ENOMEM;
 }
 
 STATIC void
-destroy_inodecache( void )
+linvfs_destroy_zones(void)
 {
-       if (kmem_cache_destroy(linvfs_inode_zone))
-               printk(KERN_WARNING "%s: cache still in use!\n", __FUNCTION__);
+       mempool_destroy(xfs_ioend_pool);
+       kmem_zone_destroy(xfs_vnode_zone);
+       kmem_zone_destroy(xfs_ioend_zone);
 }
 
 /*
@@ -354,17 +384,38 @@ linvfs_clear_inode(
        struct inode            *inode)
 {
        vnode_t                 *vp = LINVFS_GET_VP(inode);
+       int                     error, cache;
 
-       if (vp) {
-               vn_rele(vp);
-               vn_trace_entry(vp, __FUNCTION__, (inst_t *)__return_address);
-               /*
-                * Do all our cleanup, and remove this vnode.
-                */
-               vn_remove(vp);
+       vn_trace_entry(vp, "clear_inode", (inst_t *)__return_address);
+
+       XFS_STATS_INC(vn_rele);
+       XFS_STATS_INC(vn_remove);
+       XFS_STATS_INC(vn_reclaim);
+       XFS_STATS_DEC(vn_active);
+
+       /*
+        * This can happen because xfs_iget_core calls xfs_idestroy if we
+        * find an inode with di_mode == 0 but without IGET_CREATE set.
+        */
+       if (vp->v_fbhv)
+               VOP_INACTIVE(vp, NULL, cache);
+
+       VN_LOCK(vp);
+       vp->v_flag &= ~VMODIFIED;
+       VN_UNLOCK(vp, 0);
+
+       if (vp->v_fbhv) {
+               VOP_RECLAIM(vp, error);
+               if (error)
+                       panic("vn_purge: cannot reclaim");
        }
-}
 
+       ASSERT(vp->v_fbhv == NULL);
+
+#ifdef XFS_VNODE_TRACE
+       ktrace_free(vp->v_trace);
+#endif
+}
 
 /*
  * Enqueue a work item to be picked up by the vfs xfssyncd thread.
@@ -466,25 +517,16 @@ xfssyncd(
 {
        long                    timeleft;
        vfs_t                   *vfsp = (vfs_t *) arg;
-       struct list_head        tmp;
        struct vfs_sync_work    *work, *n;
+       LIST_HEAD               (tmp);
 
-       daemonize("xfssyncd");
-
-       vfsp->vfs_sync_work.w_vfs = vfsp;
-       vfsp->vfs_sync_work.w_syncer = vfs_sync_worker;
-       vfsp->vfs_sync_task = current;
-       wmb();
-       wake_up(&vfsp->vfs_wait_sync_task);
-
-       INIT_LIST_HEAD(&tmp);
        timeleft = (xfs_syncd_centisecs * HZ) / 100;
        for (;;) {
                set_current_state(TASK_INTERRUPTIBLE);
                timeleft = schedule_timeout(timeleft);
                /* swsusp */
                try_to_freeze();
-               if (vfsp->vfs_flag & VFS_UMOUNT)
+               if (kthread_should_stop())
                        break;
 
                spin_lock(&vfsp->vfs_sync_lock);
@@ -513,10 +555,6 @@ xfssyncd(
                }
        }
 
-       vfsp->vfs_sync_task = NULL;
-       wmb();
-       wake_up(&vfsp->vfs_wait_sync_task);
-
        return 0;
 }
 
@@ -524,13 +562,11 @@ STATIC int
 linvfs_start_syncd(
        vfs_t                   *vfsp)
 {
-       int                     pid;
-
-       pid = kernel_thread(xfssyncd, (void *) vfsp,
-                       CLONE_VM | CLONE_FS | CLONE_FILES);
-       if (pid < 0)
-               return -pid;
-       wait_event(vfsp->vfs_wait_sync_task, vfsp->vfs_sync_task);
+       vfsp->vfs_sync_work.w_syncer = vfs_sync_worker;
+       vfsp->vfs_sync_work.w_vfs = vfsp;
+       vfsp->vfs_sync_task = kthread_run(xfssyncd, vfsp, "xfssyncd");
+       if (IS_ERR(vfsp->vfs_sync_task))
+               return -PTR_ERR(vfsp->vfs_sync_task);
        return 0;
 }
 
@@ -538,11 +574,7 @@ STATIC void
 linvfs_stop_syncd(
        vfs_t                   *vfsp)
 {
-       vfsp->vfs_flag |= VFS_UMOUNT;
-       wmb();
-
-       wake_up_process(vfsp->vfs_sync_task);
-       wait_event(vfsp->vfs_wait_sync_task, !vfsp->vfs_sync_task);
+       kthread_stop(vfsp->vfs_sync_task);
 }
 
 STATIC void
@@ -866,9 +898,9 @@ init_xfs_fs( void )
 
        ktrace_init(64);
 
-       error = init_inodecache();
+       error = linvfs_init_zones();
        if (error < 0)
-               goto undo_inodecache;
+               goto undo_zones;
 
        error = pagebuf_init();
        if (error < 0)
@@ -889,9 +921,9 @@ undo_register:
        pagebuf_terminate();
 
 undo_pagebuf:
-       destroy_inodecache();
+       linvfs_destroy_zones();
 
-undo_inodecache:
+undo_zones:
        return error;
 }
 
@@ -903,7 +935,7 @@ exit_xfs_fs( void )
        unregister_filesystem(&xfs_fs_type);
        xfs_cleanup();
        pagebuf_terminate();
-       destroy_inodecache();
+       linvfs_destroy_zones();
        ktrace_uninit();
 }
 
index 669c61644959cb9165ff52bbe919937d9299a537..34cc902ec11949c4395f35e1ee70db3038022443 100644 (file)
@@ -251,7 +251,6 @@ vfs_allocate( void )
        bhv_head_init(VFS_BHVHEAD(vfsp), "vfs");
        INIT_LIST_HEAD(&vfsp->vfs_sync_list);
        spin_lock_init(&vfsp->vfs_sync_lock);
-       init_waitqueue_head(&vfsp->vfs_wait_sync_task);
        init_waitqueue_head(&vfsp->vfs_wait_single_sync_task);
        return vfsp;
 }
index 7ee1f714e9babfcefe02864f9a785fcb4ab52973..f0ab574fb47acef1efd9f7a6b64cd374b5c41af6 100644 (file)
@@ -65,7 +65,6 @@ typedef struct vfs {
        spinlock_t              vfs_sync_lock;  /* work item list lock */
        int                     vfs_sync_seq;   /* sync thread generation no. */
        wait_queue_head_t       vfs_wait_single_sync_task;
-       wait_queue_head_t       vfs_wait_sync_task;
 } vfs_t;
 
 #define vfs_fbhv               vfs_bh.bh_first /* 1st on vfs behavior chain */
@@ -96,7 +95,6 @@ typedef enum {
 #define VFS_RDONLY             0x0001  /* read-only vfs */
 #define VFS_GRPID              0x0002  /* group-ID assigned from directory */
 #define VFS_DMI                        0x0004  /* filesystem has the DMI enabled */
-#define VFS_UMOUNT             0x0008  /* unmount in progress */
 #define VFS_END                        0x0008  /* max flag */
 
 #define SYNC_ATTR              0x0001  /* sync attributes */
index 250cad54e8920e4226f3fab93c05b4b3afb44a0d..268f45bf6a9a8b8a54234eb4f5a797738255e5d2 100644 (file)
@@ -42,93 +42,33 @@ DEFINE_SPINLOCK(vnumber_lock);
  */
 #define NVSYNC                  37
 #define vptosync(v)             (&vsync[((unsigned long)v) % NVSYNC])
-sv_t vsync[NVSYNC];
-
-/*
- * Translate stat(2) file types to vnode types and vice versa.
- * Aware of numeric order of S_IFMT and vnode type values.
- */
-enum vtype iftovt_tab[] = {
-       VNON, VFIFO, VCHR, VNON, VDIR, VNON, VBLK, VNON,
-       VREG, VNON, VLNK, VNON, VSOCK, VNON, VNON, VNON
-};
-
-u_short vttoif_tab[] = {
-       0, S_IFREG, S_IFDIR, S_IFBLK, S_IFCHR, S_IFLNK, S_IFIFO, 0, S_IFSOCK
-};
+STATIC wait_queue_head_t vsync[NVSYNC];
 
 
 void
 vn_init(void)
 {
-       register sv_t *svp;
-       register int i;
+       int i;
 
-       for (svp = vsync, i = 0; i < NVSYNC; i++, svp++)
-               init_sv(svp, SV_DEFAULT, "vsy", i);
+       for (i = 0; i < NVSYNC; i++)
+               init_waitqueue_head(&vsync[i]);
 }
 
-/*
- * Clean a vnode of filesystem-specific data and prepare it for reuse.
- */
-STATIC int
-vn_reclaim(
+void
+vn_iowait(
        struct vnode    *vp)
 {
-       int             error;
+       wait_queue_head_t *wq = vptosync(vp);
 
-       XFS_STATS_INC(vn_reclaim);
-       vn_trace_entry(vp, "vn_reclaim", (inst_t *)__return_address);
-
-       /*
-        * Only make the VOP_RECLAIM call if there are behaviors
-        * to call.
-        */
-       if (vp->v_fbhv) {
-               VOP_RECLAIM(vp, error);
-               if (error)
-                       return -error;
-       }
-       ASSERT(vp->v_fbhv == NULL);
-
-       VN_LOCK(vp);
-       vp->v_flag &= (VRECLM|VWAIT);
-       VN_UNLOCK(vp, 0);
-
-       vp->v_type = VNON;
-       vp->v_fbhv = NULL;
-
-#ifdef XFS_VNODE_TRACE
-       ktrace_free(vp->v_trace);
-       vp->v_trace = NULL;
-#endif
-
-       return 0;
-}
-
-STATIC void
-vn_wakeup(
-       struct vnode    *vp)
-{
-       VN_LOCK(vp);
-       if (vp->v_flag & VWAIT)
-               sv_broadcast(vptosync(vp));
-       vp->v_flag &= ~(VRECLM|VWAIT|VMODIFIED);
-       VN_UNLOCK(vp, 0);
+       wait_event(*wq, (atomic_read(&vp->v_iocount) == 0));
 }
 
-int
-vn_wait(
+void
+vn_iowake(
        struct vnode    *vp)
 {
-       VN_LOCK(vp);
-       if (vp->v_flag & (VINACT | VRECLM)) {
-               vp->v_flag |= VWAIT;
-               sv_wait(vptosync(vp), PINOD, &vp->v_lock, 0);
-               return 1;
-       }
-       VN_UNLOCK(vp, 0);
-       return 0;
+       if (atomic_dec_and_test(&vp->v_iocount))
+               wake_up(vptosync(vp));
 }
 
 struct vnode *
@@ -154,6 +94,8 @@ vn_initialize(
        /* Initialize the first behavior and the behavior chain head. */
        vn_bhv_head_init(VN_BHV_HEAD(vp), "vnode");
 
+       atomic_set(&vp->v_iocount, 0);
+
 #ifdef XFS_VNODE_TRACE
        vp->v_trace = ktrace_alloc(VNODE_TRACE_SIZE, KM_SLEEP);
 #endif /* XFS_VNODE_TRACE */
@@ -162,30 +104,6 @@ vn_initialize(
        return vp;
 }
 
-/*
- * Get a reference on a vnode.
- */
-vnode_t *
-vn_get(
-       struct vnode    *vp,
-       vmap_t          *vmap)
-{
-       struct inode    *inode;
-
-       XFS_STATS_INC(vn_get);
-       inode = LINVFS_GET_IP(vp);
-       if (inode->i_state & I_FREEING)
-               return NULL;
-
-       inode = ilookup(vmap->v_vfsp->vfs_super, vmap->v_ino);
-       if (!inode)     /* Inode not present */
-               return NULL;
-
-       vn_trace_exit(vp, "vn_get", (inst_t *)__return_address);
-
-       return vp;
-}
-
 /*
  * Revalidate the Linux inode from the vattr.
  * Note: i_size _not_ updated; we must hold the inode
@@ -198,7 +116,7 @@ vn_revalidate_core(
 {
        struct inode    *inode = LINVFS_GET_IP(vp);
 
-       inode->i_mode       = VTTOIF(vap->va_type) | vap->va_mode;
+       inode->i_mode       = vap->va_mode;
        inode->i_nlink      = vap->va_nlink;
        inode->i_uid        = vap->va_uid;
        inode->i_gid        = vap->va_gid;
@@ -246,71 +164,6 @@ vn_revalidate(
        return -error;
 }
 
-/*
- * purge a vnode from the cache
- * At this point the vnode is guaranteed to have no references (vn_count == 0)
- * The caller has to make sure that there are no ways someone could
- * get a handle (via vn_get) on the vnode (usually done via a mount/vfs lock).
- */
-void
-vn_purge(
-       struct vnode    *vp,
-       vmap_t          *vmap)
-{
-       vn_trace_entry(vp, "vn_purge", (inst_t *)__return_address);
-
-again:
-       /*
-        * Check whether vp has already been reclaimed since our caller
-        * sampled its version while holding a filesystem cache lock that
-        * its VOP_RECLAIM function acquires.
-        */
-       VN_LOCK(vp);
-       if (vp->v_number != vmap->v_number) {
-               VN_UNLOCK(vp, 0);
-               return;
-       }
-
-       /*
-        * If vp is being reclaimed or inactivated, wait until it is inert,
-        * then proceed.  Can't assume that vnode is actually reclaimed
-        * just because the reclaimed flag is asserted -- a vn_alloc
-        * reclaim can fail.
-        */
-       if (vp->v_flag & (VINACT | VRECLM)) {
-               ASSERT(vn_count(vp) == 0);
-               vp->v_flag |= VWAIT;
-               sv_wait(vptosync(vp), PINOD, &vp->v_lock, 0);
-               goto again;
-       }
-
-       /*
-        * Another process could have raced in and gotten this vnode...
-        */
-       if (vn_count(vp) > 0) {
-               VN_UNLOCK(vp, 0);
-               return;
-       }
-
-       XFS_STATS_DEC(vn_active);
-       vp->v_flag |= VRECLM;
-       VN_UNLOCK(vp, 0);
-
-       /*
-        * Call VOP_RECLAIM and clean vp. The FSYNC_INVAL flag tells
-        * vp's filesystem to flush and invalidate all cached resources.
-        * When vn_reclaim returns, vp should have no private data,
-        * either in a system cache or attached to v_data.
-        */
-       if (vn_reclaim(vp) != 0)
-               panic("vn_purge: cannot reclaim");
-
-       /*
-        * Wakeup anyone waiting for vp to be reclaimed.
-        */
-       vn_wakeup(vp);
-}
-
 /*
  * Add a reference to a referenced vnode.
  */
@@ -330,80 +183,6 @@ vn_hold(
        return vp;
 }
 
-/*
- *  Call VOP_INACTIVE on last reference.
- */
-void
-vn_rele(
-       struct vnode    *vp)
-{
-       int             vcnt;
-       int             cache;
-
-       XFS_STATS_INC(vn_rele);
-
-       VN_LOCK(vp);
-
-       vn_trace_entry(vp, "vn_rele", (inst_t *)__return_address);
-       vcnt = vn_count(vp);
-
-       /*
-        * Since we always get called from put_inode we know
-        * that i_count won't be decremented after we
-        * return.
-        */
-       if (!vcnt) {
-               /*
-                * As soon as we turn this on, noone can find us in vn_get
-                * until we turn off VINACT or VRECLM
-                */
-               vp->v_flag |= VINACT;
-               VN_UNLOCK(vp, 0);
-
-               /*
-                * Do not make the VOP_INACTIVE call if there
-                * are no behaviors attached to the vnode to call.
-                */
-               if (vp->v_fbhv)
-                       VOP_INACTIVE(vp, NULL, cache);
-
-               VN_LOCK(vp);
-               if (vp->v_flag & VWAIT)
-                       sv_broadcast(vptosync(vp));
-
-               vp->v_flag &= ~(VINACT|VWAIT|VRECLM|VMODIFIED);
-       }
-
-       VN_UNLOCK(vp, 0);
-
-       vn_trace_exit(vp, "vn_rele", (inst_t *)__return_address);
-}
-
-/*
- * Finish the removal of a vnode.
- */
-void
-vn_remove(
-       struct vnode    *vp)
-{
-       vmap_t          vmap;
-
-       /* Make sure we don't do this to the same vnode twice */
-       if (!(vp->v_fbhv))
-               return;
-
-       XFS_STATS_INC(vn_remove);
-       vn_trace_exit(vp, "vn_remove", (inst_t *)__return_address);
-
-       /*
-        * After the following purge the vnode
-        * will no longer exist.
-        */
-       VMAP(vp, vmap);
-       vn_purge(vp, &vmap);
-}
-
-
 #ifdef XFS_VNODE_TRACE
 
 #define KTRACE_ENTER(vp, vk, s, line, ra)                      \
index a6e57c647be4f3ae7a9ada8f6508e13967f94c17..35f306cebb87d2e2ac86d11bfea2906caec56d4b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2003 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2005 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
@@ -65,10 +65,6 @@ struct vattr;
 struct xfs_iomap;
 struct attrlist_cursor_kern;
 
-/*
- * Vnode types.  VNON means no type.
- */
-enum vtype     { VNON, VREG, VDIR, VBLK, VCHR, VLNK, VFIFO, VBAD, VSOCK };
 
 typedef xfs_ino_t vnumber_t;
 typedef struct dentry vname_t;
@@ -77,15 +73,14 @@ typedef bhv_head_t vn_bhv_head_t;
 /*
  * MP locking protocols:
  *     v_flag, v_vfsp                          VN_LOCK/VN_UNLOCK
- *     v_type                                  read-only or fs-dependent
  */
 typedef struct vnode {
        __u32           v_flag;                 /* vnode flags (see below) */
-       enum vtype      v_type;                 /* vnode type */
        struct vfs      *v_vfsp;                /* ptr to containing VFS */
        vnumber_t       v_number;               /* in-core vnode number */
        vn_bhv_head_t   v_bh;                   /* behavior head */
        spinlock_t      v_lock;                 /* VN_LOCK/VN_UNLOCK */
+       atomic_t        v_iocount;              /* outstanding I/O count */
 #ifdef XFS_VNODE_TRACE
        struct ktrace   *v_trace;               /* trace header structure    */
 #endif
@@ -93,6 +88,12 @@ typedef struct vnode {
        /* inode MUST be last */
 } vnode_t;
 
+#define VN_ISLNK(vp)   S_ISLNK((vp)->v_inode.i_mode)
+#define VN_ISREG(vp)   S_ISREG((vp)->v_inode.i_mode)
+#define VN_ISDIR(vp)   S_ISDIR((vp)->v_inode.i_mode)
+#define VN_ISCHR(vp)   S_ISCHR((vp)->v_inode.i_mode)
+#define VN_ISBLK(vp)   S_ISBLK((vp)->v_inode.i_mode)
+
 #define v_fbhv                 v_bh.bh_first          /* first behavior */
 #define v_fops                 v_bh.bh_first->bd_ops  /* first behavior ops */
 
@@ -132,23 +133,9 @@ typedef enum {
 #define LINVFS_GET_VP(inode)   ((vnode_t *)list_entry(inode, vnode_t, v_inode))
 #define LINVFS_GET_IP(vp)      (&(vp)->v_inode)
 
-/*
- * Convert between vnode types and inode formats (since POSIX.1
- * defines mode word of stat structure in terms of inode formats).
- */
-extern enum vtype      iftovt_tab[];
-extern u_short         vttoif_tab[];
-#define IFTOVT(mode)   (iftovt_tab[((mode) & S_IFMT) >> 12])
-#define VTTOIF(indx)   (vttoif_tab[(int)(indx)])
-#define MAKEIMODE(indx, mode)  (int)(VTTOIF(indx) | (mode))
-
-
 /*
  * Vnode flags.
  */
-#define VINACT                0x1      /* vnode is being inactivated   */
-#define VRECLM                0x2      /* vnode is being reclaimed     */
-#define VWAIT                 0x4      /* waiting for VINACT/VRECLM to end */
 #define VMODIFIED             0x8      /* XFS inode state possibly differs */
                                        /* to the Linux inode state.    */
 
@@ -408,7 +395,6 @@ typedef struct vnodeops {
  */
 typedef struct vattr {
        int             va_mask;        /* bit-mask of attributes present */
-       enum vtype      va_type;        /* vnode type (for create) */
        mode_t          va_mode;        /* file access mode and type */
        xfs_nlink_t     va_nlink;       /* number of references to file */
        uid_t           va_uid;         /* owner user id */
@@ -498,26 +484,11 @@ typedef struct vattr {
  * Check whether mandatory file locking is enabled.
  */
 #define MANDLOCK(vp, mode)     \
-       ((vp)->v_type == VREG && ((mode) & (VSGID|(VEXEC>>3))) == VSGID)
+       (VN_ISREG(vp) && ((mode) & (VSGID|(VEXEC>>3))) == VSGID)
 
 extern void    vn_init(void);
-extern int     vn_wait(struct vnode *);
 extern vnode_t *vn_initialize(struct inode *);
 
-/*
- * Acquiring and invalidating vnodes:
- *
- *     if (vn_get(vp, version, 0))
- *             ...;
- *     vn_purge(vp, version);
- *
- * vn_get and vn_purge must be called with vmap_t arguments, sampled
- * while a lock that the vnode's VOP_RECLAIM function acquires is
- * held, to ensure that the vnode sampled with the lock held isn't
- * recycled (VOP_RECLAIMed) or deallocated between the release of the lock
- * and the subsequent vn_get or vn_purge.
- */
-
 /*
  * vnode_map structures _must_ match vn_epoch and vnode structure sizes.
  */
@@ -531,11 +502,11 @@ typedef struct vnode_map {
                         (vmap).v_number = (vp)->v_number,      \
                         (vmap).v_ino    = (vp)->v_inode.i_ino; }
 
-extern void    vn_purge(struct vnode *, vmap_t *);
-extern vnode_t *vn_get(struct vnode *, vmap_t *);
 extern int     vn_revalidate(struct vnode *);
 extern void    vn_revalidate_core(struct vnode *, vattr_t *);
-extern void    vn_remove(struct vnode *);
+
+extern void    vn_iowait(struct vnode *vp);
+extern void    vn_iowake(struct vnode *vp);
 
 static inline int vn_count(struct vnode *vp)
 {
@@ -546,7 +517,6 @@ static inline int vn_count(struct vnode *vp)
  * Vnode reference counting functions (and macros for compatibility).
  */
 extern vnode_t *vn_hold(struct vnode *);
-extern void    vn_rele(struct vnode *);
 
 #if defined(XFS_VNODE_TRACE)
 #define VN_HOLD(vp)            \
@@ -560,6 +530,12 @@ extern void        vn_rele(struct vnode *);
 #define VN_RELE(vp)            (iput(LINVFS_GET_IP(vp)))
 #endif
 
+static inline struct vnode *vn_grab(struct vnode *vp)
+{
+       struct inode *inode = igrab(LINVFS_GET_IP(vp));
+       return inode ? LINVFS_GET_VP(inode) : NULL;
+}
+
 /*
  * Vname handling macros.
  */
diff --git a/fs/xfs/quota/Makefile b/fs/xfs/quota/Makefile
new file mode 100644 (file)
index 0000000..7a4f725
--- /dev/null
@@ -0,0 +1 @@
+include $(TOPDIR)/fs/xfs/quota/Makefile-linux-$(VERSION).$(PATCHLEVEL)
diff --git a/fs/xfs/quota/Makefile-linux-2.6 b/fs/xfs/quota/Makefile-linux-2.6
new file mode 100644 (file)
index 0000000..93e60e8
--- /dev/null
@@ -0,0 +1,53 @@
+#
+# 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
+# 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/SGIGPLNoticeExplan/
+#
+
+EXTRA_CFLAGS += -I $(TOPDIR)/fs/xfs -I $(TOPDIR)/fs/xfs/linux-2.6
+
+ifeq ($(CONFIG_XFS_DEBUG),y)
+       EXTRA_CFLAGS += -g -DDEBUG
+       #EXTRA_CFLAGS += -DQUOTADEBUG
+endif
+ifeq ($(CONFIG_XFS_TRACE),y)
+       EXTRA_CFLAGS += -DXFS_DQUOT_TRACE
+       EXTRA_CFLAGS += -DXFS_VNODE_TRACE
+endif
+
+xfs-$(CONFIG_XFS_QUOTA)                += xfs_dquot.o \
+                                  xfs_dquot_item.o \
+                                  xfs_trans_dquot.o \
+                                  xfs_qm_syscalls.o \
+                                  xfs_qm_bhv.o \
+                                  xfs_qm.o
+
+ifeq ($(CONFIG_XFS_QUOTA),y)
+xfs-$(CONFIG_PROC_FS)          += xfs_qm_stats.o
+endif
index 46ce1e3ce1d6c04c90b93ec46d86d2e4f64651fc..e2e8d35fa4d0361517bdb1d76f7c08c6de512f20 100644 (file)
@@ -421,7 +421,7 @@ xfs_qm_init_dquot_blk(
  */
 STATIC int
 xfs_qm_dqalloc(
-       xfs_trans_t     *tp,
+       xfs_trans_t     **tpp,
        xfs_mount_t     *mp,
        xfs_dquot_t     *dqp,
        xfs_inode_t     *quotip,
@@ -433,6 +433,7 @@ xfs_qm_dqalloc(
        xfs_bmbt_irec_t map;
        int             nmaps, error, committed;
        xfs_buf_t       *bp;
+       xfs_trans_t     *tp = *tpp;
 
        ASSERT(tp != NULL);
        xfs_dqtrace_entry(dqp, "DQALLOC");
@@ -492,10 +493,32 @@ xfs_qm_dqalloc(
        xfs_qm_init_dquot_blk(tp, mp, INT_GET(dqp->q_core.d_id, ARCH_CONVERT),
                              dqp->dq_flags & XFS_DQ_ALLTYPES, bp);
 
-       if ((error = xfs_bmap_finish(&tp, &flist, firstblock, &committed))) {
+       /*
+        * xfs_bmap_finish() may commit the current transaction and
+        * start a second transaction if the freelist is not empty.
+        *
+        * Since we still want to modify this buffer, we need to
+        * ensure that the buffer is not released on commit of
+        * the first transaction and ensure the buffer is added to the
+        * second transaction.
+        *
+        * If there is only one transaction then don't stop the buffer
+        * from being released when it commits later on.
+        */
+
+       xfs_trans_bhold(tp, bp);
+
+       if ((error = xfs_bmap_finish(tpp, &flist, firstblock, &committed))) {
                goto error1;
        }
 
+       if (committed) {
+               tp = *tpp;
+               xfs_trans_bjoin(tp, bp);
+       } else {
+               xfs_trans_bhold_release(tp, bp);
+       }
+
        *O_bpp = bp;
        return 0;
 
@@ -514,7 +537,7 @@ xfs_qm_dqalloc(
  */
 STATIC int
 xfs_qm_dqtobp(
-       xfs_trans_t             *tp,
+       xfs_trans_t             **tpp,
        xfs_dquot_t             *dqp,
        xfs_disk_dquot_t        **O_ddpp,
        xfs_buf_t               **O_bpp,
@@ -528,6 +551,7 @@ xfs_qm_dqtobp(
        xfs_disk_dquot_t *ddq;
        xfs_dqid_t      id;
        boolean_t       newdquot;
+       xfs_trans_t     *tp = (tpp ? *tpp : NULL);
 
        mp = dqp->q_mount;
        id = INT_GET(dqp->q_core.d_id, ARCH_CONVERT);
@@ -579,9 +603,10 @@ xfs_qm_dqtobp(
                                return (ENOENT);
 
                        ASSERT(tp);
-                       if ((error = xfs_qm_dqalloc(tp, mp, dqp, quotip,
+                       if ((error = xfs_qm_dqalloc(tpp, mp, dqp, quotip,
                                                dqp->q_fileoffset, &bp)))
                                return (error);
+                       tp = *tpp;
                        newdquot = B_TRUE;
                } else {
                        /*
@@ -645,7 +670,7 @@ xfs_qm_dqtobp(
 /* ARGSUSED */
 STATIC int
 xfs_qm_dqread(
-       xfs_trans_t     *tp,
+       xfs_trans_t     **tpp,
        xfs_dqid_t      id,
        xfs_dquot_t     *dqp,   /* dquot to get filled in */
        uint            flags)
@@ -653,15 +678,19 @@ xfs_qm_dqread(
        xfs_disk_dquot_t *ddqp;
        xfs_buf_t        *bp;
        int              error;
+       xfs_trans_t      *tp;
+
+       ASSERT(tpp);
 
        /*
         * get a pointer to the on-disk dquot and the buffer containing it
         * dqp already knows its own type (GROUP/USER).
         */
        xfs_dqtrace_entry(dqp, "DQREAD");
-       if ((error = xfs_qm_dqtobp(tp, dqp, &ddqp, &bp, flags))) {
+       if ((error = xfs_qm_dqtobp(tpp, dqp, &ddqp, &bp, flags))) {
                return (error);
        }
+       tp = *tpp;
 
        /* copy everything from disk dquot to the incore dquot */
        memcpy(&dqp->q_core, ddqp, sizeof(xfs_disk_dquot_t));
@@ -740,7 +769,7 @@ xfs_qm_idtodq(
         * Read it from disk; xfs_dqread() takes care of
         * all the necessary initialization of dquot's fields (locks, etc)
         */
-       if ((error = xfs_qm_dqread(tp, id, dqp, flags))) {
+       if ((error = xfs_qm_dqread(&tp, id, dqp, flags))) {
                /*
                 * This can happen if quotas got turned off (ESRCH),
                 * or if the dquot didn't exist on disk and we ask to
index 39175103c8e0ca5ec2c81a859d5dc846aa6dab0e..8ebc87176c78c464f32a7069def5fbe6fbca127a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2005 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
@@ -113,20 +113,6 @@ typedef struct xfs_dquot {
 
 #define XFS_DQHOLD(dqp)                ((dqp)->q_nrefs++)
 
-/*
- * Quota Accounting/Enforcement flags
- */
-#define XFS_ALL_QUOTA_ACCT     \
-               (XFS_UQUOTA_ACCT | XFS_GQUOTA_ACCT | XFS_PQUOTA_ACCT)
-#define XFS_ALL_QUOTA_ENFD     (XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD)
-#define XFS_ALL_QUOTA_CHKD     (XFS_UQUOTA_CHKD | XFS_OQUOTA_CHKD)
-
-#define XFS_IS_QUOTA_RUNNING(mp)       ((mp)->m_qflags & XFS_ALL_QUOTA_ACCT)
-#define XFS_IS_QUOTA_ENFORCED(mp)      ((mp)->m_qflags & XFS_ALL_QUOTA_ENFD)
-#define XFS_IS_UQUOTA_RUNNING(mp)      ((mp)->m_qflags & XFS_UQUOTA_ACCT)
-#define XFS_IS_PQUOTA_RUNNING(mp)      ((mp)->m_qflags & XFS_PQUOTA_ACCT)
-#define XFS_IS_GQUOTA_RUNNING(mp)      ((mp)->m_qflags & XFS_GQUOTA_ACCT)
-
 #ifdef DEBUG
 static inline int
 XFS_DQ_IS_LOCKED(xfs_dquot_t *dqp)
index f5271b7b1e84196c2d1202cc4c630747b9f54183..e74eaa7dd1bc6914a51f1e775d919354778432ca 100644 (file)
@@ -509,6 +509,7 @@ xfs_qm_qoff_logitem_format(xfs_qoff_logitem_t       *qf,
 
        log_vector->i_addr = (xfs_caddr_t)&(qf->qql_format);
        log_vector->i_len = sizeof(xfs_qoff_logitem_t);
+       XLOG_VEC_SET_TYPE(log_vector, XLOG_REG_TYPE_QUOTAOFF);
        qf->qql_format.qf_size = 1;
 }
 
index f665ca8f9e960c93c65d0cc31c244fded5f3e73a..efde16e0a91345b182aa1731c42f8388dd8cf31e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2005 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
@@ -365,16 +365,6 @@ xfs_qm_mount_quotas(
        int             error = 0;
        uint            sbf;
 
-       /*
-        * If a file system had quotas running earlier, but decided to
-        * mount without -o uquota/pquota/gquota options, revoke the
-        * quotachecked license, and bail out.
-        */
-       if (! XFS_IS_QUOTA_ON(mp) &&
-           (mp->m_sb.sb_qflags & XFS_ALL_QUOTA_ACCT)) {
-               mp->m_qflags = 0;
-               goto write_changes;
-       }
 
        /*
         * If quotas on realtime volumes is not supported, we disable
@@ -388,11 +378,8 @@ xfs_qm_mount_quotas(
                goto write_changes;
        }
 
-#if defined(DEBUG) && defined(XFS_LOUD_RECOVERY)
-       cmn_err(CE_NOTE, "Attempting to turn on disk quotas.");
-#endif
-
        ASSERT(XFS_IS_QUOTA_RUNNING(mp));
+
        /*
         * Allocate the quotainfo structure inside the mount struct, and
         * create quotainode(s), and change/rev superblock if necessary.
@@ -410,19 +397,14 @@ xfs_qm_mount_quotas(
         */
        if (XFS_QM_NEED_QUOTACHECK(mp) &&
                !(mfsi_flags & XFS_MFSI_NO_QUOTACHECK)) {
-#ifdef DEBUG
-               cmn_err(CE_NOTE, "Doing a quotacheck. Please wait.");
-#endif
                if ((error = xfs_qm_quotacheck(mp))) {
                        /* Quotacheck has failed and quotas have
                         * been disabled.
                         */
                        return XFS_ERROR(error);
                }
-#ifdef DEBUG
-               cmn_err(CE_NOTE, "Done quotacheck.");
-#endif
        }
+
  write_changes:
        /*
         * We actually don't have to acquire the SB_LOCK at all.
@@ -2010,7 +1992,7 @@ xfs_qm_quotacheck(
                ASSERT(mp->m_quotainfo != NULL);
                ASSERT(xfs_Gqm != NULL);
                xfs_qm_destroy_quotainfo(mp);
-               xfs_mount_reset_sbqflags(mp);
+               (void)xfs_mount_reset_sbqflags(mp);
        } else {
                cmn_err(CE_NOTE, "XFS quotacheck %s: Done.", mp->m_fsname);
        }
index b03eecf3b6cb19c4dba39596ce440178ebd858fd..0b00b3c67015eede68ce28da43a5d27beb19aeee 100644 (file)
@@ -184,8 +184,6 @@ typedef struct xfs_dquot_acct {
 #define XFS_QM_HOLD(xqm)       ((xqm)->qm_nrefs++)
 #define XFS_QM_RELE(xqm)       ((xqm)->qm_nrefs--)
 
-extern void            xfs_mount_reset_sbqflags(xfs_mount_t *);
-
 extern void            xfs_qm_destroy_quotainfo(xfs_mount_t *);
 extern int             xfs_qm_mount_quotas(xfs_mount_t *, int);
 extern void            xfs_qm_mount_quotainit(xfs_mount_t *, uint);
index dc3c37a1e1585702eeb814da992b216b57f4c96d..8890a18a99d8cc98857d694fc55368eb41ede195 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2005 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
@@ -229,48 +229,6 @@ xfs_qm_syncall(
        return error;
 }
 
-/*
- * Clear the quotaflags in memory and in the superblock.
- */
-void
-xfs_mount_reset_sbqflags(
-       xfs_mount_t             *mp)
-{
-       xfs_trans_t             *tp;
-       unsigned long           s;
-
-       mp->m_qflags = 0;
-       /*
-        * It is OK to look at sb_qflags here in mount path,
-        * without SB_LOCK.
-        */
-       if (mp->m_sb.sb_qflags == 0)
-               return;
-       s = XFS_SB_LOCK(mp);
-       mp->m_sb.sb_qflags = 0;
-       XFS_SB_UNLOCK(mp, s);
-
-       /*
-        * if the fs is readonly, let the incore superblock run
-        * with quotas off but don't flush the update out to disk
-        */
-       if (XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY)
-               return;
-#ifdef QUOTADEBUG
-       xfs_fs_cmn_err(CE_NOTE, mp, "Writing superblock quota changes");
-#endif
-       tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SBCHANGE);
-       if (xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0,
-                                     XFS_DEFAULT_LOG_COUNT)) {
-               xfs_trans_cancel(tp, 0);
-               xfs_fs_cmn_err(CE_ALERT, mp,
-                       "xfs_mount_reset_sbqflags: Superblock update failed!");
-               return;
-       }
-       xfs_mod_sb(tp, XFS_SB_QFLAGS);
-       xfs_trans_commit(tp, 0, NULL);
-}
-
 STATIC int
 xfs_qm_newmount(
        xfs_mount_t     *mp,
index 68e98962dbefe0db3f303204c97c53b82b6da975..15e02e8a9d4fc23c2850eac3b1e936f4350a859f 100644 (file)
@@ -1053,7 +1053,6 @@ xfs_qm_dqrele_all_inodes(
        struct xfs_mount *mp,
        uint             flags)
 {
-       vmap_t          vmap;
        xfs_inode_t     *ip, *topino;
        uint            ireclaims;
        vnode_t         *vp;
@@ -1061,8 +1060,8 @@ xfs_qm_dqrele_all_inodes(
 
        ASSERT(mp->m_quotainfo);
 
-again:
        XFS_MOUNT_ILOCK(mp);
+again:
        ip = mp->m_inodes;
        if (ip == NULL) {
                XFS_MOUNT_IUNLOCK(mp);
@@ -1090,18 +1089,14 @@ again:
                }
                vnode_refd = B_FALSE;
                if (xfs_ilock_nowait(ip, XFS_ILOCK_EXCL) == 0) {
-                       /*
-                        * Sample vp mapping while holding the mplock, lest
-                        * we come across a non-existent vnode.
-                        */
-                       VMAP(vp, vmap);
                        ireclaims = mp->m_ireclaims;
                        topino = mp->m_inodes;
-                       XFS_MOUNT_IUNLOCK(mp);
+                       vp = vn_grab(vp);
+                       if (!vp)
+                               goto again;
 
+                       XFS_MOUNT_IUNLOCK(mp);
                        /* XXX restart limit ? */
-                       if ( ! (vp = vn_get(vp, &vmap)))
-                               goto again;
                        xfs_ilock(ip, XFS_ILOCK_EXCL);
                        vnode_refd = B_TRUE;
                } else {
@@ -1137,7 +1132,6 @@ again:
                 */
                if (topino != mp->m_inodes || mp->m_ireclaims != ireclaims) {
                        /* XXX use a sentinel */
-                       XFS_MOUNT_IUNLOCK(mp);
                        goto again;
                }
                ip = ip->i_mnext;
index 4ed7b6928cd78c4e6a02f0e4930116174295f4f2..4e1a5ec22fa370b3c6d4056d1e64cc746dd6444c 100644 (file)
@@ -31,6 +31,7 @@
  */
 
 #include "debug.h"
+#include "spin.h"
 
 #include <asm/page.h>
 #include <linux/sched.h>
index 8d01dce8c532fd2d1fd3093128ff9e4607d08e52..92fd1d67f878f4fc0c3ed2a8b75a9ff65a3ba7a5 100644 (file)
@@ -85,7 +85,7 @@ xfs_acl_vhasacl_default(
 {
        int             error;
 
-       if (vp->v_type != VDIR)
+       if (!VN_ISDIR(vp))
                return 0;
        xfs_acl_get_attr(vp, NULL, _ACL_TYPE_DEFAULT, ATTR_KERNOVAL, &error);
        return (error == 0);
@@ -389,7 +389,7 @@ xfs_acl_allow_set(
 
        if (vp->v_inode.i_flags & (S_IMMUTABLE|S_APPEND))
                return EPERM;
-       if (kind == _ACL_TYPE_DEFAULT && vp->v_type != VDIR)
+       if (kind == _ACL_TYPE_DEFAULT && !VN_ISDIR(vp))
                return ENOTDIR;
        if (vp->v_vfsp->vfs_flag & VFS_RDONLY)
                return EROFS;
@@ -750,7 +750,7 @@ xfs_acl_inherit(
         * If the new file is a directory, its default ACL is a copy of
         * the containing directory's default ACL.
         */
-       if (vp->v_type == VDIR)
+       if (VN_ISDIR(vp))
                xfs_acl_set_attr(vp, pdaclp, _ACL_TYPE_DEFAULT, &error);
        if (!error && !basicperms)
                xfs_acl_set_attr(vp, cacl, _ACL_TYPE_ACCESS, &error);
index ae35189b3d70050ead6c62e5d9f2e0013d7cde31..5ab0dd885b1b9d74627e73ba9aada509f4dff339 100644 (file)
 
 #include <asm/byteorder.h>
 
-#ifdef __LITTLE_ENDIAN
-# define __BYTE_ORDER  __LITTLE_ENDIAN
-#endif
 #ifdef __BIG_ENDIAN
-# define __BYTE_ORDER  __BIG_ENDIAN
+#define        XFS_NATIVE_HOST 1
+#else
+#undef XFS_NATIVE_HOST
+#endif
+
+#else /* __KERNEL__ */
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+#define        XFS_NATIVE_HOST 1
+#else
+#undef XFS_NATIVE_HOST
 #endif
 
 #endif /* __KERNEL__ */
 
 /* do we need conversion? */
-
 #define ARCH_NOCONVERT 1
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-# define ARCH_CONVERT  0
-#else
+#ifdef XFS_NATIVE_HOST
 # define ARCH_CONVERT  ARCH_NOCONVERT
+#else
+# define ARCH_CONVERT  0
 #endif
 
 /* generic swapping macros */
index 6f5d283888aa2b9ab243d93f8df1fe25c4e8cc34..3e76def1283d191c8827588b221e94b981f34845 100644 (file)
@@ -4754,10 +4754,20 @@ xfs_bmapi(
                                        error = xfs_mod_incore_sb(mp,
                                                        XFS_SBS_FDBLOCKS,
                                                        -(alen), rsvd);
-                               if (!error)
+                               if (!error) {
                                        error = xfs_mod_incore_sb(mp,
                                                        XFS_SBS_FDBLOCKS,
                                                        -(indlen), rsvd);
+                                       if (error && rt) {
+                                               xfs_mod_incore_sb(ip->i_mount,
+                                                       XFS_SBS_FREXTENTS,
+                                                       extsz, rsvd);
+                                       } else if (error) {
+                                               xfs_mod_incore_sb(ip->i_mount,
+                                                       XFS_SBS_FDBLOCKS,
+                                                       alen, rsvd);
+                                       }
+                               }
 
                                if (error) {
                                        if (XFS_IS_QUOTA_ON(ip->i_mount))
index 09c413576ba81b838254837c3f708ca24797e88c..09a77b17565b06c9c4fde3a8cde2e2e739a4f708 100644 (file)
@@ -2017,7 +2017,7 @@ xfs_bmbt_get_state(
                                ext_flag);
 }
 
-#if __BYTE_ORDER != __BIG_ENDIAN
+#ifndef XFS_NATIVE_HOST
 /* Endian flipping versions of the bmbt extraction functions */
 void
 xfs_bmbt_disk_get_all(
@@ -2087,7 +2087,7 @@ xfs_bmbt_disk_get_state(
        return xfs_extent_state(xfs_bmbt_disk_get_blockcount(r),
                                ext_flag);
 }
-#endif
+#endif /* XFS_NATIVE_HOST */
 
 
 /*
@@ -2531,7 +2531,7 @@ xfs_bmbt_set_allf(
 #endif /* XFS_BIG_BLKNOS */
 }
 
-#if __BYTE_ORDER != __BIG_ENDIAN
+#ifndef XFS_NATIVE_HOST
 /*
  * Set all the fields in a bmap extent record from the uncompressed form.
  */
@@ -2617,7 +2617,7 @@ xfs_bmbt_disk_set_allf(
        }
 #endif /* XFS_BIG_BLKNOS */
 }
-#endif
+#endif /* XFS_NATIVE_HOST */
 
 /*
  * Set the blockcount field in a bmap extent record.
index 0a40cf126c285cfb940b5915f898722fc6ca1ea3..2cf4fe45cbcb16f73a8e1accd97512dae046623b 100644 (file)
@@ -62,7 +62,7 @@ typedef struct xfs_bmdr_block
  *  l1:0-20 are blockcount.
  */
 
-#if __BYTE_ORDER == __LITTLE_ENDIAN
+#ifndef XFS_NATIVE_HOST
 
 #define BMBT_TOTAL_BITLEN      128     /* 128 bits, 16 bytes */
 #define BMBT_EXNTFLAG_BITOFF   0
@@ -87,7 +87,7 @@ typedef struct xfs_bmdr_block
 #define BMBT_BLOCKCOUNT_BITOFF 64 /* Start of second 64 bit container */
 #define BMBT_BLOCKCOUNT_BITLEN 21
 
-#endif
+#endif /* XFS_NATIVE_HOST */
 
 
 #define BMBT_USE_64    1
@@ -505,7 +505,7 @@ xfs_exntst_t
 xfs_bmbt_get_state(
        xfs_bmbt_rec_t  *r);
 
-#if __BYTE_ORDER != __BIG_ENDIAN
+#ifndef XFS_NATIVE_HOST
 void
 xfs_bmbt_disk_get_all(
        xfs_bmbt_rec_t  *r,
@@ -538,7 +538,7 @@ xfs_bmbt_disk_get_startoff(
        xfs_bmbt_get_blockcount(r)
 #define xfs_bmbt_disk_get_startoff(r) \
        xfs_bmbt_get_startoff(r)
-#endif
+#endif /* XFS_NATIVE_HOST */
 
 int
 xfs_bmbt_increment(
@@ -623,7 +623,7 @@ xfs_bmbt_set_state(
        xfs_bmbt_rec_t  *r,
        xfs_exntst_t    v);
 
-#if __BYTE_ORDER != __BIG_ENDIAN
+#ifndef XFS_NATIVE_HOST
 void
 xfs_bmbt_disk_set_all(
        xfs_bmbt_rec_t  *r,
@@ -641,7 +641,7 @@ xfs_bmbt_disk_set_allf(
        xfs_bmbt_set_all(r, s)
 #define xfs_bmbt_disk_set_allf(r, o, b, c, v) \
        xfs_bmbt_set_allf(r, o, b, c, v)
-#endif
+#endif /* XFS_NATIVE_HOST */
 
 void
 xfs_bmbt_to_bmdr(
index 30b8285ad4769de7f6ee5b5007ae80dee9519b29..a264657acfd9ed069452fc59725e170ba77222ea 100644 (file)
@@ -274,6 +274,7 @@ xfs_buf_item_format(
                       ((bip->bli_format.blf_map_size - 1) * sizeof(uint)));
        vecp->i_addr = (xfs_caddr_t)&bip->bli_format;
        vecp->i_len = base_size;
+       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_BFORMAT);
        vecp++;
        nvecs = 1;
 
@@ -320,12 +321,14 @@ xfs_buf_item_format(
                        buffer_offset = first_bit * XFS_BLI_CHUNK;
                        vecp->i_addr = xfs_buf_offset(bp, buffer_offset);
                        vecp->i_len = nbits * XFS_BLI_CHUNK;
+                       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_BCHUNK);
                        nvecs++;
                        break;
                } else if (next_bit != last_bit + 1) {
                        buffer_offset = first_bit * XFS_BLI_CHUNK;
                        vecp->i_addr = xfs_buf_offset(bp, buffer_offset);
                        vecp->i_len = nbits * XFS_BLI_CHUNK;
+                       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_BCHUNK);
                        nvecs++;
                        vecp++;
                        first_bit = next_bit;
@@ -337,6 +340,7 @@ xfs_buf_item_format(
                        buffer_offset = first_bit * XFS_BLI_CHUNK;
                        vecp->i_addr = xfs_buf_offset(bp, buffer_offset);
                        vecp->i_len = nbits * XFS_BLI_CHUNK;
+                       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_BCHUNK);
 /* You would think we need to bump the nvecs here too, but we do not
  * this number is used by recovery, and it gets confused by the boundary
  * split here
index dd423ce1bc8d082a177effddde9f35b341932996..480bffc1f29fd64cbd6df39c788ffc30a683b472 100644 (file)
@@ -127,13 +127,13 @@ typedef union {
         * Watch the order here (endian-ness dependent).
         */
        struct {
-#if __BYTE_ORDER == __LITTLE_ENDIAN
+#ifndef XFS_NATIVE_HOST
                xfs_dahash_t    h;      /* hash value */
                __uint32_t      be;     /* block and entry */
-#else  /* __BYTE_ORDER == __BIG_ENDIAN */
+#else
                __uint32_t      be;     /* block and entry */
                xfs_dahash_t    h;      /* hash value */
-#endif /* __BYTE_ORDER == __BIG_ENDIAN */
+#endif /* XFS_NATIVE_HOST */
        } s;
 } xfs_dircook_t;
 
index 55c17adaaa37d64e3c7b22be419bbd6398a9c428..19e872856f6bdc0e32129499e5c64004c127d23d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2005 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
index db7cbd1bc8573e81d5f05699032b7731573a5bf2..cc7d1494a45d1a449151451f3a109d4abec8589d 100644 (file)
@@ -107,6 +107,7 @@ xfs_efi_item_format(xfs_efi_log_item_t      *efip,
 
        log_vector->i_addr = (xfs_caddr_t)&(efip->efi_format);
        log_vector->i_len = size;
+       XLOG_VEC_SET_TYPE(log_vector, XLOG_REG_TYPE_EFI_FORMAT);
        ASSERT(size >= sizeof(xfs_efi_log_format_t));
 }
 
@@ -426,6 +427,7 @@ xfs_efd_item_format(xfs_efd_log_item_t      *efdp,
 
        log_vector->i_addr = (xfs_caddr_t)&(efdp->efd_format);
        log_vector->i_len = size;
+       XLOG_VEC_SET_TYPE(log_vector, XLOG_REG_TYPE_EFD_FORMAT);
        ASSERT(size >= sizeof(xfs_efd_log_format_t));
 }
 
index d3da00045f260074fca466319a23bfdc34ed14c3..0d9ae8fb41386c956bc43e07d383ffac7697d7fb 100644 (file)
@@ -30,6 +30,8 @@
  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  */
 
+#include <linux/delay.h>
+
 #include "xfs.h"
 
 #include "xfs_macros.h"
@@ -505,17 +507,15 @@ xfs_iget(
        vnode_t         *vp = NULL;
        int             error;
 
-retry:
        XFS_STATS_INC(xs_ig_attempts);
 
+retry:
        if ((inode = iget_locked(XFS_MTOVFS(mp)->vfs_super, ino))) {
                bhv_desc_t      *bdp;
                xfs_inode_t     *ip;
-               int             newnode;
 
                vp = LINVFS_GET_VP(inode);
                if (inode->i_state & I_NEW) {
-inode_allocate:
                        vn_initialize(inode);
                        error = xfs_iget_core(vp, mp, tp, ino, flags,
                                        lock_flags, ipp, bno);
@@ -526,32 +526,25 @@ inode_allocate:
                                iput(inode);
                        }
                } else {
-                       /* These are true if the inode is in inactive or
-                        * reclaim. The linux inode is about to go away,
-                        * wait for that path to finish, and try again.
+                       /*
+                        * If the inode is not fully constructed due to
+                        * filehandle mistmatches wait for the inode to go
+                        * away and try again.
+                        *
+                        * iget_locked will call __wait_on_freeing_inode
+                        * to wait for the inode to go away.
                         */
-                       if (vp->v_flag & (VINACT | VRECLM)) {
-                               vn_wait(vp);
+                       if (is_bad_inode(inode) ||
+                           ((bdp = vn_bhv_lookup(VN_BHV_HEAD(vp),
+                                                 &xfs_vnodeops)) == NULL)) {
                                iput(inode);
+                               delay(1);
                                goto retry;
                        }
 
-                       if (is_bad_inode(inode)) {
-                               iput(inode);
-                               return EIO;
-                       }
-
-                       bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), &xfs_vnodeops);
-                       if (bdp == NULL) {
-                               XFS_STATS_INC(xs_ig_dup);
-                               goto inode_allocate;
-                       }
                        ip = XFS_BHVTOI(bdp);
                        if (lock_flags != 0)
                                xfs_ilock(ip, lock_flags);
-                       newnode = (ip->i_d.di_mode == 0);
-                       if (newnode)
-                               xfs_iocore_inode_reinit(ip);
                        XFS_STATS_INC(xs_ig_found);
                        *ipp = ip;
                        error = 0;
index 34bdf5909687b30d0619e3e9f6d42feee4de4098..db43308aae9329597e961bc71b8c844c8fc313cd 100644 (file)
@@ -1128,7 +1128,6 @@ xfs_ialloc(
        ASSERT(ip != NULL);
 
        vp = XFS_ITOV(ip);
-       vp->v_type = IFTOVT(mode);
        ip->i_d.di_mode = (__uint16_t)mode;
        ip->i_d.di_onlink = 0;
        ip->i_d.di_nlink = nlink;
@@ -1250,7 +1249,7 @@ xfs_ialloc(
         */
        xfs_trans_log_inode(tp, ip, flags);
 
-       /* now that we have a v_type we can set Linux inode ops (& unlock) */
+       /* now that we have an i_mode  we can set Linux inode ops (& unlock) */
        VFS_INIT_VNODE(XFS_MTOVFS(tp->t_mountp), vp, XFS_ITOBHV(ip), 1);
 
        *ipp = ip;
index 0eed30f5cb19de82e45518bb1f2b08c963f9d7d3..50e2cadf9091a57d5f1b6ca4b70b18cd32c4be9f 100644 (file)
@@ -248,6 +248,7 @@ xfs_inode_item_format(
 
        vecp->i_addr = (xfs_caddr_t)&iip->ili_format;
        vecp->i_len  = sizeof(xfs_inode_log_format_t);
+       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_IFORMAT);
        vecp++;
        nvecs        = 1;
 
@@ -292,6 +293,7 @@ xfs_inode_item_format(
 
        vecp->i_addr = (xfs_caddr_t)&ip->i_d;
        vecp->i_len  = sizeof(xfs_dinode_core_t);
+       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_ICORE);
        vecp++;
        nvecs++;
        iip->ili_format.ilf_fields |= XFS_ILOG_CORE;
@@ -339,7 +341,7 @@ xfs_inode_item_format(
                        nrecs = ip->i_df.if_bytes /
                                (uint)sizeof(xfs_bmbt_rec_t);
                        ASSERT(nrecs > 0);
-#if __BYTE_ORDER == __BIG_ENDIAN
+#ifdef XFS_NATIVE_HOST
                        if (nrecs == ip->i_d.di_nextents) {
                                /*
                                 * There are no delayed allocation
@@ -349,6 +351,7 @@ xfs_inode_item_format(
                                vecp->i_addr =
                                        (char *)(ip->i_df.if_u1.if_extents);
                                vecp->i_len = ip->i_df.if_bytes;
+                               XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_IEXT);
                        } else
 #endif
                        {
@@ -367,6 +370,7 @@ xfs_inode_item_format(
                                vecp->i_addr = (xfs_caddr_t)ext_buffer;
                                vecp->i_len = xfs_iextents_copy(ip, ext_buffer,
                                                XFS_DATA_FORK);
+                               XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_IEXT);
                        }
                        ASSERT(vecp->i_len <= ip->i_df.if_bytes);
                        iip->ili_format.ilf_dsize = vecp->i_len;
@@ -384,6 +388,7 @@ xfs_inode_item_format(
                        ASSERT(ip->i_df.if_broot != NULL);
                        vecp->i_addr = (xfs_caddr_t)ip->i_df.if_broot;
                        vecp->i_len = ip->i_df.if_broot_bytes;
+                       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_IBROOT);
                        vecp++;
                        nvecs++;
                        iip->ili_format.ilf_dsize = ip->i_df.if_broot_bytes;
@@ -409,6 +414,7 @@ xfs_inode_item_format(
                        ASSERT((ip->i_df.if_real_bytes == 0) ||
                               (ip->i_df.if_real_bytes == data_bytes));
                        vecp->i_len = (int)data_bytes;
+                       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_ILOCAL);
                        vecp++;
                        nvecs++;
                        iip->ili_format.ilf_dsize = (unsigned)data_bytes;
@@ -467,7 +473,7 @@ xfs_inode_item_format(
 #endif
                        ASSERT(nrecs > 0);
                        ASSERT(nrecs == ip->i_d.di_anextents);
-#if __BYTE_ORDER == __BIG_ENDIAN
+#ifdef XFS_NATIVE_HOST
                        /*
                         * There are not delayed allocation extents
                         * for attributes, so just point at the array.
@@ -486,6 +492,7 @@ xfs_inode_item_format(
                        vecp->i_len = xfs_iextents_copy(ip, ext_buffer,
                                        XFS_ATTR_FORK);
 #endif
+                       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_IATTR_EXT);
                        iip->ili_format.ilf_asize = vecp->i_len;
                        vecp++;
                        nvecs++;
@@ -500,6 +507,7 @@ xfs_inode_item_format(
                        ASSERT(ip->i_afp->if_broot != NULL);
                        vecp->i_addr = (xfs_caddr_t)ip->i_afp->if_broot;
                        vecp->i_len = ip->i_afp->if_broot_bytes;
+                       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_IATTR_BROOT);
                        vecp++;
                        nvecs++;
                        iip->ili_format.ilf_asize = ip->i_afp->if_broot_bytes;
@@ -523,6 +531,7 @@ xfs_inode_item_format(
                        ASSERT((ip->i_afp->if_real_bytes == 0) ||
                               (ip->i_afp->if_real_bytes == data_bytes));
                        vecp->i_len = (int)data_bytes;
+                       XLOG_VEC_SET_TYPE(vecp, XLOG_REG_TYPE_IATTR_LOCAL);
                        vecp++;
                        nvecs++;
                        iip->ili_format.ilf_asize = (unsigned)data_bytes;
index 2edd6769e5d328d18da1d854d69595ff3cb5a996..d0f5be63cddb71b0e0a647d124550c57ac5b3114 100644 (file)
@@ -226,13 +226,12 @@ xfs_iomap(
                xfs_iomap_enter_trace(XFS_IOMAP_READ_ENTER, io, offset, count);
                lockmode = XFS_LCK_MAP_SHARED(mp, io);
                bmapi_flags = XFS_BMAPI_ENTIRE;
-               if (flags & BMAPI_IGNSTATE)
-                       bmapi_flags |= XFS_BMAPI_IGSTATE;
                break;
        case BMAPI_WRITE:
                xfs_iomap_enter_trace(XFS_IOMAP_WRITE_ENTER, io, offset, count);
                lockmode = XFS_ILOCK_EXCL|XFS_EXTSIZE_WR;
-               bmapi_flags = 0;
+               if (flags & BMAPI_IGNSTATE)
+                       bmapi_flags |= XFS_BMAPI_IGSTATE|XFS_BMAPI_ENTIRE;
                XFS_ILOCK(mp, io, lockmode);
                break;
        case BMAPI_ALLOCATE:
@@ -391,9 +390,9 @@ xfs_iomap_write_direct(
        xfs_bmbt_irec_t imap[XFS_WRITE_IMAPS], *imapp;
        xfs_bmap_free_t free_list;
        int             aeof;
-       xfs_filblks_t   datablocks, qblocks, resblks;
+       xfs_filblks_t   qblocks, resblks;
        int             committed;
-       int             numrtextents;
+       int             resrtextents;
 
        /*
         * Make sure that the dquots are there. This doesn't hold
@@ -434,14 +433,14 @@ xfs_iomap_write_direct(
 
                if (!(extsz = ip->i_d.di_extsize))
                        extsz = mp->m_sb.sb_rextsize;
-               numrtextents = qblocks = (count_fsb + extsz - 1);
-               do_div(numrtextents, mp->m_sb.sb_rextsize);
+               resrtextents = qblocks = (count_fsb + extsz - 1);
+               do_div(resrtextents, mp->m_sb.sb_rextsize);
+               resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0);
                quota_flag = XFS_QMOPT_RES_RTBLKS;
-               datablocks = 0;
        } else {
-               datablocks = qblocks = count_fsb;
+               resrtextents = 0;
+               resblks = qblocks = XFS_DIOSTRAT_SPACE_RES(mp, count_fsb);
                quota_flag = XFS_QMOPT_RES_REGBLKS;
-               numrtextents = 0;
        }
 
        /*
@@ -449,9 +448,8 @@ xfs_iomap_write_direct(
         */
        xfs_iunlock(ip, XFS_ILOCK_EXCL);
        tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT);
-       resblks = XFS_DIOSTRAT_SPACE_RES(mp, datablocks);
        error = xfs_trans_reserve(tp, resblks,
-                       XFS_WRITE_LOG_RES(mp), numrtextents,
+                       XFS_WRITE_LOG_RES(mp), resrtextents,
                        XFS_TRANS_PERM_LOG_RES,
                        XFS_WRITE_LOG_COUNT);
 
index 1cd2ac1638778b3e69c67acd6a47280cdc52cd3a..54a6f114240311867fa4a55a7deaa2612584abfa 100644 (file)
@@ -159,11 +159,15 @@ xfs_buftarg_t *xlog_target;
 void
 xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string)
 {
-       if (! log->l_grant_trace) {
-               log->l_grant_trace = ktrace_alloc(1024, KM_NOSLEEP);
-               if (! log->l_grant_trace)
+       unsigned long cnts;
+
+       if (!log->l_grant_trace) {
+               log->l_grant_trace = ktrace_alloc(2048, KM_NOSLEEP);
+               if (!log->l_grant_trace)
                        return;
        }
+       /* ticket counts are 1 byte each */
+       cnts = ((unsigned long)tic->t_ocnt) | ((unsigned long)tic->t_cnt) << 8;
 
        ktrace_enter(log->l_grant_trace,
                     (void *)tic,
@@ -178,10 +182,10 @@ xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string)
                     (void *)((unsigned long)CYCLE_LSN(log->l_tail_lsn)),
                     (void *)((unsigned long)BLOCK_LSN(log->l_tail_lsn)),
                     (void *)string,
-                    (void *)((unsigned long)13),
-                    (void *)((unsigned long)14),
-                    (void *)((unsigned long)15),
-                    (void *)((unsigned long)16));
+                    (void *)((unsigned long)tic->t_trans_type),
+                    (void *)cnts,
+                    (void *)((unsigned long)tic->t_curr_res),
+                    (void *)((unsigned long)tic->t_unit_res));
 }
 
 void
@@ -274,9 +278,11 @@ xfs_log_done(xfs_mount_t   *mp,
                 * Release ticket if not permanent reservation or a specifc
                 * request has been made to release a permanent reservation.
                 */
+               xlog_trace_loggrant(log, ticket, "xfs_log_done: (non-permanent)");
                xlog_ungrant_log_space(log, ticket);
                xlog_state_put_ticket(log, ticket);
        } else {
+               xlog_trace_loggrant(log, ticket, "xfs_log_done: (permanent)");
                xlog_regrant_reserve_log_space(log, ticket);
        }
 
@@ -399,7 +405,8 @@ xfs_log_reserve(xfs_mount_t  *mp,
                int              cnt,
                xfs_log_ticket_t *ticket,
                __uint8_t        client,
-               uint             flags)
+               uint             flags,
+               uint             t_type)
 {
        xlog_t          *log = mp->m_log;
        xlog_ticket_t   *internal_ticket;
@@ -421,13 +428,19 @@ xfs_log_reserve(xfs_mount_t        *mp,
        if (*ticket != NULL) {
                ASSERT(flags & XFS_LOG_PERM_RESERV);
                internal_ticket = (xlog_ticket_t *)*ticket;
+               xlog_trace_loggrant(log, internal_ticket, "xfs_log_reserve: existing ticket (permanent trans)");
                xlog_grant_push_ail(mp, internal_ticket->t_unit_res);
                retval = xlog_regrant_write_log_space(log, internal_ticket);
        } else {
                /* may sleep if need to allocate more tickets */
                internal_ticket = xlog_ticket_get(log, unit_bytes, cnt,
                                                  client, flags);
+               internal_ticket->t_trans_type = t_type;
                *ticket = internal_ticket;
+               xlog_trace_loggrant(log, internal_ticket, 
+                       (internal_ticket->t_flags & XLOG_TIC_PERM_RESERV) ?
+                       "xfs_log_reserve: create new ticket (permanent trans)" :
+                       "xfs_log_reserve: create new ticket");
                xlog_grant_push_ail(mp,
                                    (internal_ticket->t_unit_res *
                                     internal_ticket->t_cnt));
@@ -601,8 +614,9 @@ xfs_log_unmount_write(xfs_mount_t *mp)
        if (! (XLOG_FORCED_SHUTDOWN(log))) {
                reg[0].i_addr = (void*)&magic;
                reg[0].i_len  = sizeof(magic);
+               XLOG_VEC_SET_TYPE(&reg[0], XLOG_REG_TYPE_UNMOUNT);
 
-               error = xfs_log_reserve(mp, 600, 1, &tic, XFS_LOG, 0);
+               error = xfs_log_reserve(mp, 600, 1, &tic, XFS_LOG, 0, 0);
                if (!error) {
                        /* remove inited flag */
                        ((xlog_ticket_t *)tic)->t_flags = 0;
@@ -1272,6 +1286,7 @@ xlog_commit_record(xfs_mount_t  *mp,
 
        reg[0].i_addr = NULL;
        reg[0].i_len = 0;
+       XLOG_VEC_SET_TYPE(&reg[0], XLOG_REG_TYPE_COMMIT);
 
        ASSERT_ALWAYS(iclog);
        if ((error = xlog_write(mp, reg, 1, ticket, commitlsnp,
@@ -1604,6 +1619,117 @@ xlog_state_finish_copy(xlog_t           *log,
 
 
 
+/*
+ * print out info relating to regions written which consume
+ * the reservation
+ */
+#if defined(XFS_LOG_RES_DEBUG)
+STATIC void
+xlog_print_tic_res(xfs_mount_t *mp, xlog_ticket_t *ticket)
+{
+       uint i;
+       uint ophdr_spc = ticket->t_res_num_ophdrs * (uint)sizeof(xlog_op_header_t);
+
+       /* match with XLOG_REG_TYPE_* in xfs_log.h */
+       static char *res_type_str[XLOG_REG_TYPE_MAX] = {
+           "bformat",
+           "bchunk",
+           "efi_format",
+           "efd_format",
+           "iformat",
+           "icore",
+           "iext",
+           "ibroot",
+           "ilocal",
+           "iattr_ext",
+           "iattr_broot",
+           "iattr_local",
+           "qformat",
+           "dquot",
+           "quotaoff",
+           "LR header",
+           "unmount",
+           "commit",
+           "trans header"
+       };
+       static char *trans_type_str[XFS_TRANS_TYPE_MAX] = {
+           "SETATTR_NOT_SIZE",
+           "SETATTR_SIZE",
+           "INACTIVE",
+           "CREATE",
+           "CREATE_TRUNC",
+           "TRUNCATE_FILE",
+           "REMOVE",
+           "LINK",
+           "RENAME",
+           "MKDIR",
+           "RMDIR",
+           "SYMLINK",
+           "SET_DMATTRS",
+           "GROWFS",
+           "STRAT_WRITE",
+           "DIOSTRAT",
+           "WRITE_SYNC",
+           "WRITEID",
+           "ADDAFORK",
+           "ATTRINVAL",
+           "ATRUNCATE",
+           "ATTR_SET",
+           "ATTR_RM",
+           "ATTR_FLAG",
+           "CLEAR_AGI_BUCKET",
+           "QM_SBCHANGE",
+           "DUMMY1",
+           "DUMMY2",
+           "QM_QUOTAOFF",
+           "QM_DQALLOC",
+           "QM_SETQLIM",
+           "QM_DQCLUSTER",
+           "QM_QINOCREATE",
+           "QM_QUOTAOFF_END",
+           "SB_UNIT",
+           "FSYNC_TS",
+           "GROWFSRT_ALLOC",
+           "GROWFSRT_ZERO",
+           "GROWFSRT_FREE",
+           "SWAPEXT"
+       };
+
+       xfs_fs_cmn_err(CE_WARN, mp,
+                       "xfs_log_write: reservation summary:\n"
+                       "  trans type  = %s (%u)\n"
+                       "  unit res    = %d bytes\n"
+                       "  current res = %d bytes\n"
+                       "  total reg   = %u bytes (o/flow = %u bytes)\n"
+                       "  ophdrs      = %u (ophdr space = %u bytes)\n"
+                       "  ophdr + reg = %u bytes\n"
+                       "  num regions = %u\n",
+                       ((ticket->t_trans_type <= 0 ||
+                         ticket->t_trans_type > XFS_TRANS_TYPE_MAX) ?
+                         "bad-trans-type" : trans_type_str[ticket->t_trans_type-1]),
+                       ticket->t_trans_type,
+                       ticket->t_unit_res,
+                       ticket->t_curr_res,
+                       ticket->t_res_arr_sum, ticket->t_res_o_flow,
+                       ticket->t_res_num_ophdrs, ophdr_spc,
+                       ticket->t_res_arr_sum + 
+                         ticket->t_res_o_flow + ophdr_spc,
+                       ticket->t_res_num);
+
+       for (i = 0; i < ticket->t_res_num; i++) {
+               uint r_type = ticket->t_res_arr[i].r_type; 
+               cmn_err(CE_WARN,
+                           "region[%u]: %s - %u bytes\n",
+                           i, 
+                           ((r_type <= 0 || r_type > XLOG_REG_TYPE_MAX) ?
+                           "bad-rtype" : res_type_str[r_type-1]),
+                           ticket->t_res_arr[i].r_len);
+       }
+}
+#else
+#define xlog_print_tic_res(mp, ticket)
+#endif
+
 /*
  * Write some region out to in-core log
  *
@@ -1677,16 +1803,21 @@ xlog_write(xfs_mount_t *        mp,
      * xlog_op_header_t and may need to be double word aligned.
      */
     len = 0;
-    if (ticket->t_flags & XLOG_TIC_INITED)     /* acct for start rec of xact */
+    if (ticket->t_flags & XLOG_TIC_INITED) {    /* acct for start rec of xact */
        len += sizeof(xlog_op_header_t);
+       XLOG_TIC_ADD_OPHDR(ticket);
+    }
 
     for (index = 0; index < nentries; index++) {
        len += sizeof(xlog_op_header_t);            /* each region gets >= 1 */
+       XLOG_TIC_ADD_OPHDR(ticket);
        len += reg[index].i_len;
+       XLOG_TIC_ADD_REGION(ticket, reg[index].i_len, reg[index].i_type);
     }
     contwr = *start_lsn = 0;
 
     if (ticket->t_curr_res < len) {
+       xlog_print_tic_res(mp, ticket);
 #ifdef DEBUG
        xlog_panic(
                "xfs_log_write: reservation ran out. Need to up reservation");
@@ -1790,6 +1921,7 @@ xlog_write(xfs_mount_t *  mp,
                len += sizeof(xlog_op_header_t); /* from splitting of region */
                /* account for new log op header */
                ticket->t_curr_res -= sizeof(xlog_op_header_t);
+               XLOG_TIC_ADD_OPHDR(ticket);
            }
            xlog_verify_dest_ptr(log, ptr);
 
@@ -2282,6 +2414,9 @@ restart:
         */
        if (log_offset == 0) {
                ticket->t_curr_res -= log->l_iclog_hsize;
+               XLOG_TIC_ADD_REGION(ticket,
+                                   log->l_iclog_hsize,
+                                   XLOG_REG_TYPE_LRHEADER);
                INT_SET(head->h_cycle, ARCH_CONVERT, log->l_curr_cycle);
                ASSIGN_LSN(head->h_lsn, log);
                ASSERT(log->l_curr_block >= 0);
@@ -2468,6 +2603,7 @@ xlog_regrant_write_log_space(xlog_t          *log,
 #endif
 
        tic->t_curr_res = tic->t_unit_res;
+       XLOG_TIC_RESET_RES(tic);
 
        if (tic->t_cnt > 0)
                return (0);
@@ -2608,6 +2744,7 @@ xlog_regrant_reserve_log_space(xlog_t          *log,
        XLOG_GRANT_SUB_SPACE(log, ticket->t_curr_res, 'w');
        XLOG_GRANT_SUB_SPACE(log, ticket->t_curr_res, 'r');
        ticket->t_curr_res = ticket->t_unit_res;
+       XLOG_TIC_RESET_RES(ticket);
        xlog_trace_loggrant(log, ticket,
                            "xlog_regrant_reserve_log_space: sub current res");
        xlog_verify_grant_head(log, 1);
@@ -2624,6 +2761,7 @@ xlog_regrant_reserve_log_space(xlog_t          *log,
        xlog_verify_grant_head(log, 0);
        GRANT_UNLOCK(log, s);
        ticket->t_curr_res = ticket->t_unit_res;
+       XLOG_TIC_RESET_RES(ticket);
 }      /* xlog_regrant_reserve_log_space */
 
 
@@ -3179,29 +3317,57 @@ xlog_ticket_get(xlog_t          *log,
         * and their unit amount is the total amount of space required.
         *
         * The following lines of code account for non-transaction data
-        * which occupy space in the on-disk log. 
+        * which occupy space in the on-disk log.
+        *
+        * Normal form of a transaction is:
+        * <oph><trans-hdr><start-oph><reg1-oph><reg1><reg2-oph>...<commit-oph>
+        * and then there are LR hdrs, split-recs and roundoff at end of syncs.
+        *
+        * We need to account for all the leadup data and trailer data
+        * around the transaction data.
+        * And then we need to account for the worst case in terms of using
+        * more space.
+        * The worst case will happen if:
+        * - the placement of the transaction happens to be such that the
+        *   roundoff is at its maximum
+        * - the transaction data is synced before the commit record is synced
+        *   i.e. <transaction-data><roundoff> | <commit-rec><roundoff>
+        *   Therefore the commit record is in its own Log Record.
+        *   This can happen as the commit record is called with its
+        *   own region to xlog_write().
+        *   This then means that in the worst case, roundoff can happen for
+        *   the commit-rec as well.
+        *   The commit-rec is smaller than padding in this scenario and so it is
+        *   not added separately.
         */
 
+       /* for trans header */
+       unit_bytes += sizeof(xlog_op_header_t);
+       unit_bytes += sizeof(xfs_trans_header_t);
+
        /* for start-rec */
-       unit_bytes += sizeof(xlog_op_header_t); 
+       unit_bytes += sizeof(xlog_op_header_t);
+
+       /* for LR headers */
+       num_headers = ((unit_bytes + log->l_iclog_size-1) >> log->l_iclog_size_log);
+       unit_bytes += log->l_iclog_hsize * num_headers;
+
+       /* for commit-rec LR header - note: padding will subsume the ophdr */
+       unit_bytes += log->l_iclog_hsize;
+
+       /* for split-recs - ophdrs added when data split over LRs */
+       unit_bytes += sizeof(xlog_op_header_t) * num_headers;
 
-       /* for padding */
+       /* for roundoff padding for transaction data and one for commit record */
        if (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb) &&
-               log->l_mp->m_sb.sb_logsunit > 1) {
+           log->l_mp->m_sb.sb_logsunit > 1) {
                /* log su roundoff */
-               unit_bytes += log->l_mp->m_sb.sb_logsunit;  
+               unit_bytes += 2*log->l_mp->m_sb.sb_logsunit;
        } else {
                /* BB roundoff */
-               unit_bytes += BBSIZE;
+               unit_bytes += 2*BBSIZE;
         }
 
-       /* for commit-rec */
-       unit_bytes += sizeof(xlog_op_header_t);
-       /* for LR headers */
-       num_headers = ((unit_bytes + log->l_iclog_size-1) >> log->l_iclog_size_log);
-       unit_bytes += log->l_iclog_hsize * num_headers;
-
        tic->t_unit_res         = unit_bytes;
        tic->t_curr_res         = unit_bytes;
        tic->t_cnt              = cnt;
@@ -3209,10 +3375,13 @@ xlog_ticket_get(xlog_t          *log,
        tic->t_tid              = (xlog_tid_t)((__psint_t)tic & 0xffffffff);
        tic->t_clientid         = client;
        tic->t_flags            = XLOG_TIC_INITED;
+       tic->t_trans_type       = 0;
        if (xflags & XFS_LOG_PERM_RESERV)
                tic->t_flags |= XLOG_TIC_PERM_RESERV;
        sv_init(&(tic->t_sema), SV_DEFAULT, "logtick");
 
+       XLOG_TIC_RESET_RES(tic);
+
        return tic;
 }      /* xlog_ticket_get */
 
index 0db122ddda3f3f1322ed27bf498c620cdaaf05cb..18961119fc65c34e89cafde638a882950c4a5732 100644 (file)
@@ -114,9 +114,44 @@ xfs_lsn_t  _lsn_cmp(xfs_lsn_t lsn1, xfs_lsn_t lsn2)
 #define XFS_VOLUME             0x2
 #define XFS_LOG                        0xaa
 
+
+/* Region types for iovec's i_type */
+#if defined(XFS_LOG_RES_DEBUG)
+#define XLOG_REG_TYPE_BFORMAT          1
+#define XLOG_REG_TYPE_BCHUNK           2
+#define XLOG_REG_TYPE_EFI_FORMAT       3
+#define XLOG_REG_TYPE_EFD_FORMAT       4
+#define XLOG_REG_TYPE_IFORMAT          5
+#define XLOG_REG_TYPE_ICORE            6
+#define XLOG_REG_TYPE_IEXT             7
+#define XLOG_REG_TYPE_IBROOT           8
+#define XLOG_REG_TYPE_ILOCAL           9
+#define XLOG_REG_TYPE_IATTR_EXT                10
+#define XLOG_REG_TYPE_IATTR_BROOT      11
+#define XLOG_REG_TYPE_IATTR_LOCAL      12
+#define XLOG_REG_TYPE_QFORMAT          13
+#define XLOG_REG_TYPE_DQUOT            14
+#define XLOG_REG_TYPE_QUOTAOFF         15
+#define XLOG_REG_TYPE_LRHEADER         16
+#define XLOG_REG_TYPE_UNMOUNT          17
+#define XLOG_REG_TYPE_COMMIT           18
+#define XLOG_REG_TYPE_TRANSHDR         19
+#define XLOG_REG_TYPE_MAX              19
+#endif
+
+#if defined(XFS_LOG_RES_DEBUG)
+#define XLOG_VEC_SET_TYPE(vecp, t) ((vecp)->i_type = (t))
+#else
+#define XLOG_VEC_SET_TYPE(vecp, t)
+#endif
+
+
 typedef struct xfs_log_iovec {
        xfs_caddr_t             i_addr;         /* beginning address of region */
        int             i_len;          /* length in bytes of region */
+#if defined(XFS_LOG_RES_DEBUG)
+       uint            i_type;         /* type of region */
+#endif
 } xfs_log_iovec_t;
 
 typedef void* xfs_log_ticket_t;
@@ -159,7 +194,8 @@ int   xfs_log_reserve(struct xfs_mount *mp,
                          int              count,
                          xfs_log_ticket_t *ticket,
                          __uint8_t        clientid,
-                         uint             flags);
+                         uint             flags,
+                         uint             t_type);
 int      xfs_log_write(struct xfs_mount *mp,
                        xfs_log_iovec_t  region[],
                        int              nentries,
index 1a1d452f15f97b023f8ce0d33c9e74aad32f4ad6..a884cea82fcaf0aa7792b2a0ab41b6bc15aa1ac9 100644 (file)
@@ -112,7 +112,7 @@ struct xfs_mount;
  * this has endian issues, of course.
  */
 
-#if __BYTE_ORDER == __LITTLE_ENDIAN
+#ifndef XFS_NATIVE_HOST
 #define GET_CLIENT_ID(i,arch) \
     ((i) & 0xff)
 #else
@@ -335,18 +335,66 @@ typedef __uint32_t xlog_tid_t;
 
 #define XLOG_COVER_OPS         5
 
+
+/* Ticket reservation region accounting */ 
+#if defined(XFS_LOG_RES_DEBUG)
+#define XLOG_TIC_LEN_MAX       15
+#define XLOG_TIC_RESET_RES(t) ((t)->t_res_num = \
+                               (t)->t_res_arr_sum = (t)->t_res_num_ophdrs = 0)
+#define XLOG_TIC_ADD_OPHDR(t) ((t)->t_res_num_ophdrs++)
+#define XLOG_TIC_ADD_REGION(t, len, type)                              \
+       do {                                                            \
+               if ((t)->t_res_num == XLOG_TIC_LEN_MAX) {               \
+                       /* add to overflow and start again */           \
+                       (t)->t_res_o_flow += (t)->t_res_arr_sum;        \
+                       (t)->t_res_num = 0;                             \
+                       (t)->t_res_arr_sum = 0;                         \
+               }                                                       \
+               (t)->t_res_arr[(t)->t_res_num].r_len = (len);           \
+               (t)->t_res_arr[(t)->t_res_num].r_type = (type);         \
+               (t)->t_res_arr_sum += (len);                            \
+               (t)->t_res_num++;                                       \
+       } while (0)
+
+/*
+ * Reservation region
+ * As would be stored in xfs_log_iovec but without the i_addr which
+ * we don't care about.
+ */
+typedef struct xlog_res {
+       uint    r_len;
+       uint    r_type;
+} xlog_res_t;
+#else
+#define XLOG_TIC_RESET_RES(t)
+#define XLOG_TIC_ADD_OPHDR(t)
+#define XLOG_TIC_ADD_REGION(t, len, type)
+#endif
+
+
 typedef struct xlog_ticket {
-       sv_t               t_sema;       /* sleep on this semaphore      :20 */
-       struct xlog_ticket *t_next;      /*                              : 4 */
-       struct xlog_ticket *t_prev;      /*                              : 4 */
-       xlog_tid_t         t_tid;        /* transaction identifier       : 4 */
-       int                t_curr_res;   /* current reservation in bytes : 4 */
-       int                t_unit_res;   /* unit reservation in bytes    : 4 */
-       __uint8_t          t_ocnt;       /* original count               : 1 */
-       __uint8_t          t_cnt;        /* current count                : 1 */
-       __uint8_t          t_clientid;   /* who does this belong to;     : 1 */
-       __uint8_t          t_flags;      /* properties of reservation    : 1 */
+       sv_t               t_sema;       /* sleep on this semaphore      : 20 */
+       struct xlog_ticket *t_next;      /*                              :4|8 */
+       struct xlog_ticket *t_prev;      /*                              :4|8 */
+       xlog_tid_t         t_tid;        /* transaction identifier       : 4  */
+       int                t_curr_res;   /* current reservation in bytes : 4  */
+       int                t_unit_res;   /* unit reservation in bytes    : 4  */
+       char               t_ocnt;       /* original count               : 1  */
+       char               t_cnt;        /* current count                : 1  */
+       char               t_clientid;   /* who does this belong to;     : 1  */
+       char               t_flags;      /* properties of reservation    : 1  */
+       uint               t_trans_type; /* transaction type             : 4  */
+
+#if defined (XFS_LOG_RES_DEBUG)
+        /* reservation array fields */
+       uint               t_res_num;                    /* num in array : 4 */
+       xlog_res_t         t_res_arr[XLOG_TIC_LEN_MAX];  /* array of res : X */ 
+       uint               t_res_num_ophdrs;             /* num op hdrs  : 4 */
+       uint               t_res_arr_sum;                /* array sum    : 4 */
+       uint               t_res_o_flow;                 /* sum overflow : 4 */
+#endif
 } xlog_ticket_t;
+
 #endif
 
 
@@ -366,14 +414,10 @@ typedef struct xlog_op_header {
 #define XLOG_FMT_IRIX_BE  3
 
 /* our fmt */
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define XLOG_FMT XLOG_FMT_LINUX_LE
-#else
-#if __BYTE_ORDER == __BIG_ENDIAN
+#ifdef XFS_NATIVE_HOST
 #define XLOG_FMT XLOG_FMT_LINUX_BE
 #else
-#error unknown byte order
-#endif
+#define XLOG_FMT XLOG_FMT_LINUX_LE
 #endif
 
 typedef struct xlog_rec_header {
index 0aac28ddb81c6bc00d6b37ee341fa4db5258d119..14faabaabf29150c902d33a41a4252346623f464 100644 (file)
@@ -1387,7 +1387,7 @@ xlog_recover_add_to_cont_trans(
        old_ptr = item->ri_buf[item->ri_cnt-1].i_addr;
        old_len = item->ri_buf[item->ri_cnt-1].i_len;
 
-       ptr = kmem_realloc(old_ptr, len+old_len, old_len, 0);
+       ptr = kmem_realloc(old_ptr, len+old_len, old_len, 0u);
        memcpy(&ptr[old_len], dp, len); /* d, s, l */
        item->ri_buf[item->ri_cnt-1].i_len += len;
        item->ri_buf[item->ri_cnt-1].i_addr = ptr;
index 4f40c92863d51ffda17cf7d7832f0dec86a3b536..a6cd6324e946af65d2f1e949606a6e7c25be0f90 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2003 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2005 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
@@ -42,7 +42,8 @@
 #include "xfs_dir2.h"
 #include "xfs_dmapi.h"
 #include "xfs_mount.h"
-
+#include "xfs_quota.h"
+#include "xfs_error.h"
 
 STATIC struct xfs_dquot *
 xfs_dqvopchown_default(
@@ -54,8 +55,79 @@ xfs_dqvopchown_default(
        return NULL;
 }
 
+/*
+ * Clear the quotaflags in memory and in the superblock.
+ */
+int
+xfs_mount_reset_sbqflags(xfs_mount_t *mp)
+{
+       int                     error;
+       xfs_trans_t             *tp;
+       unsigned long           s;
+
+       mp->m_qflags = 0;
+       /*
+        * It is OK to look at sb_qflags here in mount path,
+        * without SB_LOCK.
+        */
+       if (mp->m_sb.sb_qflags == 0)
+               return 0;
+       s = XFS_SB_LOCK(mp);
+       mp->m_sb.sb_qflags = 0;
+       XFS_SB_UNLOCK(mp, s);
+
+       /*
+        * if the fs is readonly, let the incore superblock run
+        * with quotas off but don't flush the update out to disk
+        */
+       if (XFS_MTOVFS(mp)->vfs_flag & VFS_RDONLY)
+               return 0;
+#ifdef QUOTADEBUG
+       xfs_fs_cmn_err(CE_NOTE, mp, "Writing superblock quota changes");
+#endif
+       tp = xfs_trans_alloc(mp, XFS_TRANS_QM_SBCHANGE);
+       if ((error = xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0,
+                                     XFS_DEFAULT_LOG_COUNT))) {
+               xfs_trans_cancel(tp, 0);
+               xfs_fs_cmn_err(CE_ALERT, mp,
+                       "xfs_mount_reset_sbqflags: Superblock update failed!");
+               return error;
+       }
+       xfs_mod_sb(tp, XFS_SB_QFLAGS);
+       error = xfs_trans_commit(tp, 0, NULL);
+       return error;
+}
+
+STATIC int
+xfs_noquota_init(
+       xfs_mount_t     *mp,
+       uint            *needquotamount,
+       uint            *quotaflags)
+{
+       int             error = 0;
+
+       *quotaflags = 0;
+       *needquotamount = B_FALSE;
+
+       ASSERT(!XFS_IS_QUOTA_ON(mp));
+
+       /*
+        * If a file system had quotas running earlier, but decided to
+        * mount without -o uquota/pquota/gquota options, revoke the
+        * quotachecked license.
+        */
+       if (mp->m_sb.sb_qflags & XFS_ALL_QUOTA_ACCT) {
+               cmn_err(CE_NOTE,
+                        "XFS resetting qflags for filesystem %s",
+                        mp->m_fsname);
+
+               error = xfs_mount_reset_sbqflags(mp);
+       }
+       return error;
+}
+
 xfs_qmops_t    xfs_qmcore_stub = {
-       .xfs_qminit             = (xfs_qminit_t) fs_noerr,
+       .xfs_qminit             = (xfs_qminit_t) xfs_noquota_init,
        .xfs_qmdone             = (xfs_qmdone_t) fs_noerr,
        .xfs_qmmount            = (xfs_qmmount_t) fs_noerr,
        .xfs_qmunmount          = (xfs_qmunmount_t) fs_noerr,
index 7134576ae7faed4f64e1dbb0661bc634a0dbd611..32cb79752d5d57a5306069269fc4acf051998cb7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2003 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2005 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
@@ -159,6 +159,20 @@ typedef struct xfs_qoff_logformat {
 #define XFS_OQUOTA_CHKD        0x0020  /* quotacheck run on other (grp/prj) quotas */
 #define XFS_GQUOTA_ACCT        0x0040  /* group quota accounting ON */
 
+/*
+ * Quota Accounting/Enforcement flags
+ */
+#define XFS_ALL_QUOTA_ACCT     \
+               (XFS_UQUOTA_ACCT | XFS_GQUOTA_ACCT | XFS_PQUOTA_ACCT)
+#define XFS_ALL_QUOTA_ENFD     (XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD)
+#define XFS_ALL_QUOTA_CHKD     (XFS_UQUOTA_CHKD | XFS_OQUOTA_CHKD)
+
+#define XFS_IS_QUOTA_RUNNING(mp)       ((mp)->m_qflags & XFS_ALL_QUOTA_ACCT)
+#define XFS_IS_QUOTA_ENFORCED(mp)      ((mp)->m_qflags & XFS_ALL_QUOTA_ENFD)
+#define XFS_IS_UQUOTA_RUNNING(mp)      ((mp)->m_qflags & XFS_UQUOTA_ACCT)
+#define XFS_IS_PQUOTA_RUNNING(mp)      ((mp)->m_qflags & XFS_PQUOTA_ACCT)
+#define XFS_IS_GQUOTA_RUNNING(mp)      ((mp)->m_qflags & XFS_GQUOTA_ACCT)
+
 /*
  * Incore only flags for quotaoff - these bits get cleared when quota(s)
  * are in the process of getting turned off. These flags are in m_qflags but
@@ -362,6 +376,7 @@ typedef struct xfs_dqtrxops {
                                f | XFS_QMOPT_RES_REGBLKS)
 
 extern int xfs_qm_dqcheck(xfs_disk_dquot_t *, xfs_dqid_t, uint, uint, char *);
+extern int xfs_mount_reset_sbqflags(struct xfs_mount *);
 
 extern struct bhv_vfsops xfs_qmops;
 
index 06dfca531f79880fc146845b6863d8dc28b6e1d4..92efe272b83d6d0ea79d1ad184a93d76da690055 100644 (file)
@@ -276,7 +276,7 @@ xfs_trans_reserve(
 
                error = xfs_log_reserve(tp->t_mountp, logspace, logcount,
                                        &tp->t_ticket,
-                                       XFS_TRANSACTION, log_flags);
+                                       XFS_TRANSACTION, log_flags, tp->t_type);
                if (error) {
                        goto undo_blocks;
                }
@@ -1032,6 +1032,7 @@ xfs_trans_fill_vecs(
        tp->t_header.th_num_items = nitems;
        log_vector->i_addr = (xfs_caddr_t)&tp->t_header;
        log_vector->i_len = sizeof(xfs_trans_header_t);
+       XLOG_VEC_SET_TYPE(log_vector, XLOG_REG_TYPE_TRANSHDR);
 }
 
 
index ec541d66fa2a47309a8ec76523435d3756edf71e..a263aec8b3a6532b8dd8b887cc6f073bf4348f42 100644 (file)
@@ -112,6 +112,7 @@ typedef struct xfs_trans_header {
 #define        XFS_TRANS_GROWFSRT_ZERO         38
 #define        XFS_TRANS_GROWFSRT_FREE         39
 #define        XFS_TRANS_SWAPEXT               40
+#define        XFS_TRANS_TYPE_MAX              40
 /* new transaction types need to be reflected in xfs_logprint(8) */
 
 
@@ -998,6 +999,7 @@ struct xfs_buf      *xfs_trans_getsb(xfs_trans_t *, struct xfs_mount *, int);
 void           xfs_trans_brelse(xfs_trans_t *, struct xfs_buf *);
 void           xfs_trans_bjoin(xfs_trans_t *, struct xfs_buf *);
 void           xfs_trans_bhold(xfs_trans_t *, struct xfs_buf *);
+void           xfs_trans_bhold_release(xfs_trans_t *, struct xfs_buf *);
 void           xfs_trans_binval(xfs_trans_t *, struct xfs_buf *);
 void           xfs_trans_inode_buf(xfs_trans_t *, struct xfs_buf *);
 void           xfs_trans_inode_buf(xfs_trans_t *, struct xfs_buf *);
index 7bc5eab4c2c19cb703cb09539fe627a55383f6dd..2a71b4f91bfa1bf9a50909fde4b8a0a682b75eca 100644 (file)
@@ -379,8 +379,8 @@ xfs_trans_delete_ail(
                else {
                        xfs_cmn_err(XFS_PTAG_AILDELETE, CE_ALERT, mp,
                                "xfs_trans_delete_ail: attempting to delete a log item that is not in the AIL");
-                       xfs_force_shutdown(mp, XFS_CORRUPT_INCORE);
                        AIL_UNLOCK(mp, s);
+                       xfs_force_shutdown(mp, XFS_CORRUPT_INCORE);
                }
        }
 }
index 144da7a85466c2e85fbffe66ff1f15e08c0873ec..e733293dd7f488f24a8d7bedf5dc7b3cf1428085 100644 (file)
@@ -713,6 +713,29 @@ xfs_trans_bhold(xfs_trans_t        *tp,
        xfs_buf_item_trace("BHOLD", bip);
 }
 
+/*
+ * Cancel the previous buffer hold request made on this buffer
+ * for this transaction.
+ */
+void
+xfs_trans_bhold_release(xfs_trans_t    *tp,
+                       xfs_buf_t       *bp)
+{
+       xfs_buf_log_item_t      *bip;
+
+       ASSERT(XFS_BUF_ISBUSY(bp));
+       ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp);
+       ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL);
+
+       bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *);
+       ASSERT(!(bip->bli_flags & XFS_BLI_STALE));
+       ASSERT(!(bip->bli_format.blf_flags & XFS_BLI_CANCEL));
+       ASSERT(atomic_read(&bip->bli_refcount) > 0);
+       ASSERT(bip->bli_flags & XFS_BLI_HOLD);
+       bip->bli_flags &= ~XFS_BLI_HOLD;
+       xfs_buf_item_trace("BHOLD RELEASE", bip);
+}
+
 /*
  * This is called to mark bytes first through last inclusive of the given
  * buffer as needing to be logged when the transaction is committed.
index 42bcc0215203b16f19e71c844a395a2b3398fb72..f1a904e23adeff9d1c838f958940a0d42e13a14a 100644 (file)
@@ -795,7 +795,6 @@ xfs_statvfs(
        xfs_mount_t     *mp;
        xfs_sb_t        *sbp;
        unsigned long   s;
-       u64 id;
 
        mp = XFS_BHVTOM(bdp);
        sbp = &(mp->m_sb);
@@ -823,9 +822,7 @@ xfs_statvfs(
        statp->f_ffree = statp->f_files - (sbp->sb_icount - sbp->sb_ifree);
        XFS_SB_UNLOCK(mp, s);
 
-       id = huge_encode_dev(mp->m_dev);
-       statp->f_fsid.val[0] = (u32)id;
-       statp->f_fsid.val[1] = (u32)(id >> 32);
+       xfs_statvfs_fsid(statp, mp);
        statp->f_namelen = MAXNAMELEN - 1;
 
        return 0;
@@ -906,7 +903,6 @@ xfs_sync_inodes(
        xfs_inode_t     *ip_next;
        xfs_buf_t       *bp;
        vnode_t         *vp = NULL;
-       vmap_t          vmap;
        int             error;
        int             last_error;
        uint64_t        fflag;
@@ -1101,48 +1097,21 @@ xfs_sync_inodes(
                 * lock in xfs_ireclaim() after the inode is pulled from
                 * the mount list will sleep until we release it here.
                 * This keeps the vnode from being freed while we reference
-                * it.  It is also cheaper and simpler than actually doing
-                * a vn_get() for every inode we touch here.
+                * it.
                 */
                if (xfs_ilock_nowait(ip, lock_flags) == 0) {
-
                        if ((flags & SYNC_BDFLUSH) || (vp == NULL)) {
                                ip = ip->i_mnext;
                                continue;
                        }
 
-                       /*
-                        * We need to unlock the inode list lock in order
-                        * to lock the inode. Insert a marker record into
-                        * the inode list to remember our position, dropping
-                        * the lock is now done inside the IPOINTER_INSERT
-                        * macro.
-                        *
-                        * We also use the inode list lock to protect us
-                        * in taking a snapshot of the vnode version number
-                        * for use in calling vn_get().
-                        */
-                       VMAP(vp, vmap);
-                       IPOINTER_INSERT(ip, mp);
-
-                       vp = vn_get(vp, &vmap);
+                       vp = vn_grab(vp);
                        if (vp == NULL) {
-                               /*
-                                * The vnode was reclaimed once we let go
-                                * of the inode list lock.  Skip to the
-                                * next list entry. Remove the marker.
-                                */
-
-                               XFS_MOUNT_ILOCK(mp);
-
-                               mount_locked = B_TRUE;
-                               vnode_refed  = B_FALSE;
-
-                               IPOINTER_REMOVE(ip, mp);
-
+                               ip = ip->i_mnext;
                                continue;
                        }
 
+                       IPOINTER_INSERT(ip, mp);
                        xfs_ilock(ip, lock_flags);
 
                        ASSERT(vp == XFS_ITOV(ip));
@@ -1533,7 +1502,10 @@ xfs_syncsub(
         * eventually kicked out of the cache.
         */
        if (flags & SYNC_REFCACHE) {
-               xfs_refcache_purge_some(mp);
+               if (flags & SYNC_WAIT)
+                       xfs_refcache_purge_mp(mp);
+               else
+                       xfs_refcache_purge_some(mp);
        }
 
        /*
@@ -1649,6 +1621,10 @@ xfs_vget(
 #define MNTOPT_SWIDTH  "swidth"        /* data volume stripe width */
 #define MNTOPT_NOUUID  "nouuid"        /* ignore filesystem UUID */
 #define MNTOPT_MTPT    "mtpt"          /* filesystem mount point */
+#define MNTOPT_GRPID   "grpid"         /* group-ID from parent directory */
+#define MNTOPT_NOGRPID "nogrpid"       /* group-ID from current process */
+#define MNTOPT_BSDGROUPS    "bsdgroups"    /* group-ID from parent directory */
+#define MNTOPT_SYSVGROUPS   "sysvgroups"   /* group-ID from current process */
 #define MNTOPT_ALLOCSIZE    "allocsize"    /* preferred allocation size */
 #define MNTOPT_IHASHSIZE    "ihashsize"    /* size of inode hash table */
 #define MNTOPT_NORECOVERY   "norecovery"   /* don't run XFS recovery */
@@ -1769,6 +1745,12 @@ xfs_parseargs(
                        }
                        args->flags |= XFSMNT_IHASHSIZE;
                        args->ihashsize = simple_strtoul(value, &eov, 10);
+               } else if (!strcmp(this_char, MNTOPT_GRPID) ||
+                          !strcmp(this_char, MNTOPT_BSDGROUPS)) {
+                       vfsp->vfs_flag |= VFS_GRPID;
+               } else if (!strcmp(this_char, MNTOPT_NOGRPID) ||
+                          !strcmp(this_char, MNTOPT_SYSVGROUPS)) {
+                       vfsp->vfs_flag &= ~VFS_GRPID;
                } else if (!strcmp(this_char, MNTOPT_WSYNC)) {
                        args->flags |= XFSMNT_WSYNC;
                } else if (!strcmp(this_char, MNTOPT_OSYNCISOSYNC)) {
@@ -1890,6 +1872,7 @@ xfs_showargs(
        };
        struct proc_xfs_info    *xfs_infop;
        struct xfs_mount        *mp = XFS_BHVTOM(bhv);
+       struct vfs              *vfsp = XFS_MTOVFS(mp);
 
        for (xfs_infop = xfs_info; xfs_infop->flag; xfs_infop++) {
                if (mp->m_flags & xfs_infop->flag)
@@ -1926,7 +1909,10 @@ xfs_showargs(
 
        if (!(mp->m_flags & XFS_MOUNT_32BITINOOPT))
                seq_printf(m, "," MNTOPT_64BITINODE);
-       
+
+       if (vfsp->vfs_flag & VFS_GRPID)
+               seq_printf(m, "," MNTOPT_GRPID);
+
        return 0;
 }
 
index 1377c868f3f4929aec4106f187b01c03f480c433..58bfe629b93316168b5c2ded720b6ea9cf0b6a7a 100644 (file)
@@ -104,7 +104,7 @@ xfs_open(
         * If it's a directory with any blocks, read-ahead block 0
         * as we're almost certain to have the next operation be a read there.
         */
-       if (vp->v_type == VDIR && ip->i_d.di_nextents > 0) {
+       if (VN_ISDIR(vp) && ip->i_d.di_nextents > 0) {
                mode = xfs_ilock_map_shared(ip);
                if (ip->i_d.di_nextents > 0)
                        (void)xfs_da_reada_buf(NULL, ip, 0, XFS_DATA_FORK);
@@ -163,18 +163,21 @@ xfs_getattr(
        /*
         * Copy from in-core inode.
         */
-       vap->va_type = vp->v_type;
-       vap->va_mode = ip->i_d.di_mode & MODEMASK;
+       vap->va_mode = ip->i_d.di_mode;
        vap->va_uid = ip->i_d.di_uid;
        vap->va_gid = ip->i_d.di_gid;
        vap->va_projid = ip->i_d.di_projid;
 
        /*
         * Check vnode type block/char vs. everything else.
-        * Do it with bitmask because that's faster than looking
-        * for multiple values individually.
         */
-       if (((1 << vp->v_type) & ((1<<VBLK) | (1<<VCHR))) == 0) {
+       switch (ip->i_d.di_mode & S_IFMT) {
+       case S_IFBLK:
+       case S_IFCHR:
+               vap->va_rdev = ip->i_df.if_u2.if_rdev;
+               vap->va_blocksize = BLKDEV_IOSIZE;
+               break;
+       default:
                vap->va_rdev = 0;
 
                if (!(ip->i_d.di_flags & XFS_DIFLAG_REALTIME)) {
@@ -224,9 +227,7 @@ xfs_getattr(
                                (ip->i_d.di_extsize << mp->m_sb.sb_blocklog) :
                                (mp->m_sb.sb_rextsize << mp->m_sb.sb_blocklog);
                }
-       } else {
-               vap->va_rdev = ip->i_df.if_u2.if_rdev;
-               vap->va_blocksize = BLKDEV_IOSIZE;
+               break;
        }
 
        vap->va_atime.tv_sec = ip->i_d.di_atime.t_sec;
@@ -468,7 +469,7 @@ xfs_setattr(
                                m |= S_ISGID;
 #if 0
                        /* Linux allows this, Irix doesn't. */
-                       if ((vap->va_mode & S_ISVTX) && vp->v_type != VDIR)
+                       if ((vap->va_mode & S_ISVTX) && !VN_ISDIR(vp))
                                m |= S_ISVTX;
 #endif
                        if (m && !capable(CAP_FSETID))
@@ -546,10 +547,10 @@ xfs_setattr(
                        goto error_return;
                }
 
-               if (vp->v_type == VDIR) {
+               if (VN_ISDIR(vp)) {
                        code = XFS_ERROR(EISDIR);
                        goto error_return;
-               } else if (vp->v_type != VREG) {
+               } else if (!VN_ISREG(vp)) {
                        code = XFS_ERROR(EINVAL);
                        goto error_return;
                }
@@ -1567,7 +1568,7 @@ xfs_release(
        vp = BHV_TO_VNODE(bdp);
        ip = XFS_BHVTOI(bdp);
 
-       if ((vp->v_type != VREG) || (ip->i_d.di_mode == 0)) {
+       if (!VN_ISREG(vp) || (ip->i_d.di_mode == 0)) {
                return 0;
        }
 
@@ -1895,7 +1896,7 @@ xfs_create(
        dp = XFS_BHVTOI(dir_bdp);
        mp = dp->i_mount;
 
-       dm_di_mode = vap->va_mode|VTTOIF(vap->va_type);
+       dm_di_mode = vap->va_mode;
        namelen = VNAMELEN(dentry);
 
        if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_CREATE)) {
@@ -1973,8 +1974,7 @@ xfs_create(
            (error = XFS_DIR_CANENTER(mp, tp, dp, name, namelen)))
                goto error_return;
        rdev = (vap->va_mask & XFS_AT_RDEV) ? vap->va_rdev : 0;
-       error = xfs_dir_ialloc(&tp, dp,
-                       MAKEIMODE(vap->va_type,vap->va_mode), 1,
+       error = xfs_dir_ialloc(&tp, dp, vap->va_mode, 1,
                        rdev, credp, prid, resblks > 0,
                        &ip, &committed);
        if (error) {
@@ -2620,7 +2620,7 @@ xfs_link(
        vn_trace_entry(src_vp, __FUNCTION__, (inst_t *)__return_address);
 
        target_namelen = VNAMELEN(dentry);
-       if (src_vp->v_type == VDIR)
+       if (VN_ISDIR(src_vp))
                return XFS_ERROR(EPERM);
 
        src_bdp = vn_bhv_lookup_unlocked(VN_BHV_HEAD(src_vp), &xfs_vnodeops);
@@ -2805,7 +2805,7 @@ xfs_mkdir(
 
        tp = NULL;
        dp_joined_to_trans = B_FALSE;
-       dm_di_mode = vap->va_mode|VTTOIF(vap->va_type);
+       dm_di_mode = vap->va_mode;
 
        if (DM_EVENT_ENABLED(dir_vp->v_vfsp, dp, DM_EVENT_CREATE)) {
                error = XFS_SEND_NAMESP(mp, DM_EVENT_CREATE,
@@ -2879,8 +2879,7 @@ xfs_mkdir(
        /*
         * create the directory inode.
         */
-       error = xfs_dir_ialloc(&tp, dp,
-                       MAKEIMODE(vap->va_type,vap->va_mode), 2,
+       error = xfs_dir_ialloc(&tp, dp, vap->va_mode, 2,
                        0, credp, prid, resblks > 0,
                &cdp, NULL);
        if (error) {
@@ -3650,7 +3649,7 @@ xfs_rwlock(
        vnode_t         *vp;
 
        vp = BHV_TO_VNODE(bdp);
-       if (vp->v_type == VDIR)
+       if (VN_ISDIR(vp))
                return 1;
        ip = XFS_BHVTOI(bdp);
        if (locktype == VRWLOCK_WRITE) {
@@ -3681,7 +3680,7 @@ xfs_rwunlock(
        vnode_t         *vp;
 
        vp = BHV_TO_VNODE(bdp);
-       if (vp->v_type == VDIR)
+       if (VN_ISDIR(vp))
                return;
        ip = XFS_BHVTOI(bdp);
        if (locktype == VRWLOCK_WRITE) {
@@ -3847,51 +3846,10 @@ xfs_reclaim(
                return 0;
        }
 
-       if ((ip->i_d.di_mode & S_IFMT) == S_IFREG) {
-               if (ip->i_d.di_size > 0) {
-                       /*
-                        * Flush and invalidate any data left around that is
-                        * a part of this file.
-                        *
-                        * Get the inode's i/o lock so that buffers are pushed
-                        * out while holding the proper lock.  We can't hold
-                        * the inode lock here since flushing out buffers may
-                        * cause us to try to get the lock in xfs_strategy().
-                        *
-                        * We don't have to call remapf() here, because there
-                        * cannot be any mapped file references to this vnode
-                        * since it is being reclaimed.
-                        */
-                       xfs_ilock(ip, XFS_IOLOCK_EXCL);
-
-                       /*
-                        * If we hit an IO error, we need to make sure that the
-                        * buffer and page caches of file data for
-                        * the file are tossed away. We don't want to use
-                        * VOP_FLUSHINVAL_PAGES here because we don't want dirty
-                        * pages to stay attached to the vnode, but be
-                        * marked P_BAD. pdflush/vnode_pagebad
-                        * hates that.
-                        */
-                       if (!XFS_FORCED_SHUTDOWN(ip->i_mount)) {
-                               VOP_FLUSHINVAL_PAGES(vp, 0, -1, FI_NONE);
-                       } else {
-                               VOP_TOSS_PAGES(vp, 0, -1, FI_NONE);
-                       }
+       vn_iowait(vp);
 
-                       ASSERT(VN_CACHED(vp) == 0);
-                       ASSERT(XFS_FORCED_SHUTDOWN(ip->i_mount) ||
-                              ip->i_delayed_blks == 0);
-                       xfs_iunlock(ip, XFS_IOLOCK_EXCL);
-               } else if (XFS_FORCED_SHUTDOWN(ip->i_mount)) {
-                       /*
-                        * di_size field may not be quite accurate if we're
-                        * shutting down.
-                        */
-                       VOP_TOSS_PAGES(vp, 0, -1, FI_NONE);
-                       ASSERT(VN_CACHED(vp) == 0);
-               }
-       }
+       ASSERT(XFS_FORCED_SHUTDOWN(ip->i_mount) || ip->i_delayed_blks == 0);
+       ASSERT(VN_CACHED(vp) == 0);
 
        /* If we have nothing to flush with this inode then complete the
         * teardown now, otherwise break the link between the xfs inode
@@ -4567,7 +4525,7 @@ xfs_change_file_space(
        /*
         * must be a regular file and have write permission
         */
-       if (vp->v_type != VREG)
+       if (!VN_ISREG(vp))
                return XFS_ERROR(EINVAL);
 
        xfs_ilock(ip, XFS_ILOCK_SHARED);
index 2f6ab189fc6f0703ef65d00f2c1712cf55ffef0d..427cff1a3f8321ea786c9a104acd21f5e0f67cc1 100644 (file)
@@ -44,7 +44,6 @@
 #ifndef _ACCONFIG_H
 #define _ACCONFIG_H
 
-
 /******************************************************************************
  *
  * Configuration options
@@ -64,7 +63,7 @@
 
 /* Version string */
 
-#define ACPI_CA_VERSION                 0x20050408
+#define ACPI_CA_VERSION                 0x20050902
 
 /*
  * OS name, used for the _OS object.  The _OS object is essentially obsolete,
 
 /* Maximum objects in the various object caches */
 
-#define ACPI_MAX_STATE_CACHE_DEPTH      64          /* State objects */
-#define ACPI_MAX_PARSE_CACHE_DEPTH      96          /* Parse tree objects */
-#define ACPI_MAX_EXTPARSE_CACHE_DEPTH   64          /* Parse tree objects */
-#define ACPI_MAX_OBJECT_CACHE_DEPTH     64          /* Interpreter operand objects */
-#define ACPI_MAX_WALK_CACHE_DEPTH       4           /* Objects for parse tree walks */
+#define ACPI_MAX_STATE_CACHE_DEPTH      96     /* State objects */
+#define ACPI_MAX_PARSE_CACHE_DEPTH      96     /* Parse tree objects */
+#define ACPI_MAX_EXTPARSE_CACHE_DEPTH   96     /* Parse tree objects */
+#define ACPI_MAX_OBJECT_CACHE_DEPTH     96     /* Interpreter operand objects */
 
 /*
  * Should the subystem abort the loading of an ACPI table if the
@@ -90,7 +88,6 @@
  */
 #define ACPI_CHECKSUM_ABORT             FALSE
 
-
 /******************************************************************************
  *
  * Subsystem Constants
 /* String size constants */
 
 #define ACPI_MAX_STRING_LENGTH          512
-#define ACPI_PATHNAME_MAX               256         /* A full namespace pathname */
+#define ACPI_PATHNAME_MAX               256    /* A full namespace pathname */
 
 /* Maximum count for a semaphore object */
 
 
 #define ACPI_SYSMEM_REGION_WINDOW_SIZE  4096
 
-
 /******************************************************************************
  *
  * ACPI Specification constants (Do not change unless the specification changes)
 /* Names within the namespace are 4 bytes long */
 
 #define ACPI_NAME_SIZE                  4
-#define ACPI_PATH_SEGMENT_LENGTH        5           /* 4 chars for name + 1 char for separator */
+#define ACPI_PATH_SEGMENT_LENGTH        5      /* 4 chars for name + 1 char for separator */
 #define ACPI_PATH_SEPARATOR             '.'
 
 /* Constants used in searching for the RSDP in low memory */
 
-#define ACPI_EBDA_PTR_LOCATION          0x0000040E     /* Physical Address */
+#define ACPI_EBDA_PTR_LOCATION          0x0000040E     /* Physical Address */
 #define ACPI_EBDA_PTR_LENGTH            2
 #define ACPI_EBDA_WINDOW_SIZE           1024
-#define ACPI_HI_RSDP_WINDOW_BASE        0x000E0000     /* Physical Address */
+#define ACPI_HI_RSDP_WINDOW_BASE        0x000E0000     /* Physical Address */
 #define ACPI_HI_RSDP_WINDOW_SIZE        0x00020000
 #define ACPI_RSDP_SCAN_STEP             16
 
 
 #define ACPI_NUM_OSI_STRINGS            10
 
-
 /******************************************************************************
  *
  * ACPI AML Debugger
  *
  *****************************************************************************/
 
-#define ACPI_DEBUGGER_MAX_ARGS          8  /* Must be max method args + 1 */
+#define ACPI_DEBUGGER_MAX_ARGS          8      /* Must be max method args + 1 */
 
 #define ACPI_DEBUGGER_COMMAND_PROMPT    '-'
 #define ACPI_DEBUGGER_EXECUTE_PROMPT    '%'
 
-
-#endif /* _ACCONFIG_H */
-
+#endif                         /* _ACCONFIG_H */
index 8ba372b0f2456c6fe849ac0b04eb02a9969e3bab..70ce3b4d006edc99a0171372005f262a7284db84 100644 (file)
 #ifndef __ACDEBUG_H__
 #define __ACDEBUG_H__
 
-
 #define ACPI_DEBUG_BUFFER_SIZE  4196
 
-struct command_info
-{
-       char                            *name;          /* Command Name */
-       u8                              min_args;       /* Minimum arguments required */
+struct command_info {
+       char *name;             /* Command Name */
+       u8 min_args;            /* Minimum arguments required */
 };
 
-
-struct argument_info
-{
-       char                            *name;          /* Argument Name */
+struct argument_info {
+       char *name;             /* Argument Name */
 };
 
-
 #define PARAM_LIST(pl)                  pl
 #define DBTEST_OUTPUT_LEVEL(lvl)        if (acpi_gbl_db_opt_verbose)
 #define VERBOSE_PRINT(fp)               DBTEST_OUTPUT_LEVEL(lvl) {\
@@ -68,275 +63,155 @@ struct argument_info
 #define EX_NO_SINGLE_STEP               1
 #define EX_SINGLE_STEP                  2
 
-
 /*
  * dbxface - external debugger interfaces
  */
-acpi_status
-acpi_db_initialize (
-       void);
+acpi_status acpi_db_initialize(void);
 
-void
-acpi_db_terminate (
-       void);
+void acpi_db_terminate(void);
 
 acpi_status
-acpi_db_single_step (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       u32                             op_type);
-
+acpi_db_single_step(struct acpi_walk_state *walk_state,
+                   union acpi_parse_object *op, u32 op_type);
 
 /*
  * dbcmds - debug commands and output routines
  */
-acpi_status
-acpi_db_disassemble_method (
-       char                            *name);
+acpi_status acpi_db_disassemble_method(char *name);
 
-void
-acpi_db_display_table_info (
-       char                            *table_arg);
+void acpi_db_display_table_info(char *table_arg);
 
-void
-acpi_db_unload_acpi_table (
-       char                            *table_arg,
-       char                            *instance_arg);
+void acpi_db_unload_acpi_table(char *table_arg, char *instance_arg);
 
 void
-acpi_db_set_method_breakpoint (
-       char                            *location,
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op);
+acpi_db_set_method_breakpoint(char *location,
+                             struct acpi_walk_state *walk_state,
+                             union acpi_parse_object *op);
 
-void
-acpi_db_set_method_call_breakpoint (
-       union acpi_parse_object         *op);
+void acpi_db_set_method_call_breakpoint(union acpi_parse_object *op);
 
-void
-acpi_db_disassemble_aml (
-       char                            *statements,
-       union acpi_parse_object         *op);
+void acpi_db_get_bus_info(void);
 
-void
-acpi_db_dump_namespace (
-       char                            *start_arg,
-       char                            *depth_arg);
+void acpi_db_disassemble_aml(char *statements, union acpi_parse_object *op);
 
-void
-acpi_db_dump_namespace_by_owner (
-       char                            *owner_arg,
-       char                            *depth_arg);
+void acpi_db_dump_namespace(char *start_arg, char *depth_arg);
 
-void
-acpi_db_send_notify (
-       char                            *name,
-       u32                             value);
+void acpi_db_dump_namespace_by_owner(char *owner_arg, char *depth_arg);
 
-void
-acpi_db_set_method_data (
-       char                            *type_arg,
-       char                            *index_arg,
-       char                            *value_arg);
+void acpi_db_send_notify(char *name, u32 value);
 
-acpi_status
-acpi_db_display_objects (
-       char                            *obj_type_arg,
-       char                            *display_count_arg);
+void acpi_db_set_method_data(char *type_arg, char *index_arg, char *value_arg);
 
 acpi_status
-acpi_db_find_name_in_namespace (
-       char                            *name_arg);
+acpi_db_display_objects(char *obj_type_arg, char *display_count_arg);
 
-void
-acpi_db_set_scope (
-       char                            *name);
+acpi_status acpi_db_find_name_in_namespace(char *name_arg);
 
-acpi_status
-acpi_db_sleep (
-       char                            *object_arg);
+void acpi_db_set_scope(char *name);
 
-void
-acpi_db_find_references (
-       char                            *object_arg);
+acpi_status acpi_db_sleep(char *object_arg);
 
-void
-acpi_db_display_locks (
-       void);
+void acpi_db_find_references(char *object_arg);
 
-void
-acpi_db_display_resources (
-       char                            *object_arg);
+void acpi_db_display_locks(void);
 
-void
-acpi_db_display_gpes (
-       void);
+void acpi_db_display_resources(char *object_arg);
 
-void
-acpi_db_check_integrity (
-       void);
+void acpi_db_display_gpes(void);
 
-void
-acpi_db_generate_gpe (
-       char                            *gpe_arg,
-       char                            *block_arg);
+void acpi_db_check_integrity(void);
 
+void acpi_db_generate_gpe(char *gpe_arg, char *block_arg);
 
 /*
  * dbdisply - debug display commands
  */
-void
-acpi_db_display_method_info (
-       union acpi_parse_object         *op);
+void acpi_db_display_method_info(union acpi_parse_object *op);
 
-void
-acpi_db_decode_and_display_object (
-       char                            *target,
-       char                            *output_type);
+void acpi_db_decode_and_display_object(char *target, char *output_type);
 
 void
-acpi_db_display_result_object (
-       union acpi_operand_object       *obj_desc,
-       struct acpi_walk_state          *walk_state);
+acpi_db_display_result_object(union acpi_operand_object *obj_desc,
+                             struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_db_display_all_methods (
-       char                            *display_count_arg);
+acpi_status acpi_db_display_all_methods(char *display_count_arg);
 
-void
-acpi_db_display_arguments (
-       void);
+void acpi_db_display_arguments(void);
 
-void
-acpi_db_display_locals (
-       void);
+void acpi_db_display_locals(void);
 
-void
-acpi_db_display_results (
-       void);
+void acpi_db_display_results(void);
 
-void
-acpi_db_display_calling_tree (
-       void);
+void acpi_db_display_calling_tree(void);
 
-void
-acpi_db_display_object_type (
-       char                            *object_arg);
+void acpi_db_display_object_type(char *object_arg);
 
 void
-acpi_db_display_argument_object (
-       union acpi_operand_object       *obj_desc,
-       struct acpi_walk_state          *walk_state);
-
+acpi_db_display_argument_object(union acpi_operand_object *obj_desc,
+                               struct acpi_walk_state *walk_state);
 
 /*
  * dbexec - debugger control method execution
  */
-void
-acpi_db_execute (
-       char                            *name,
-       char                            **args,
-       u32                             flags);
+void acpi_db_execute(char *name, char **args, u32 flags);
 
 void
-acpi_db_create_execution_threads (
-       char                            *num_threads_arg,
-       char                            *num_loops_arg,
-       char                            *method_name_arg);
-
+acpi_db_create_execution_threads(char *num_threads_arg,
+                                char *num_loops_arg, char *method_name_arg);
 
 /*
  * dbfileio - Debugger file I/O commands
  */
 acpi_object_type
-acpi_db_match_argument (
-       char                            *user_argument,
-       struct argument_info            *arguments);
+acpi_db_match_argument(char *user_argument, struct argument_info *arguments);
 
-void
-acpi_db_close_debug_file (
-       void);
+void acpi_db_close_debug_file(void);
 
-void
-acpi_db_open_debug_file (
-       char                            *name);
+void acpi_db_open_debug_file(char *name);
 
-acpi_status
-acpi_db_load_acpi_table (
-       char                            *filename);
+acpi_status acpi_db_load_acpi_table(char *filename);
 
 acpi_status
-acpi_db_get_table_from_file (
-       char                            *filename,
-       struct acpi_table_header        **table);
+acpi_db_get_table_from_file(char *filename, struct acpi_table_header **table);
 
 acpi_status
-acpi_db_read_table_from_file (
-       char                            *filename,
-       struct acpi_table_header        **table);
-
+acpi_db_read_table_from_file(char *filename, struct acpi_table_header **table);
 
 /*
  * dbhistry - debugger HISTORY command
  */
-void
-acpi_db_add_to_history (
-       char                            *command_line);
+void acpi_db_add_to_history(char *command_line);
 
-void
-acpi_db_display_history (
-       void);
-
-char *
-acpi_db_get_from_history (
-       char                            *command_num_arg);
+void acpi_db_display_history(void);
 
+char *acpi_db_get_from_history(char *command_num_arg);
 
 /*
  * dbinput - user front-end to the AML debugger
  */
 acpi_status
-acpi_db_command_dispatch (
-       char                            *input_buffer,
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op);
-
-void ACPI_SYSTEM_XFACE
-acpi_db_execute_thread (
-       void                            *context);
+acpi_db_command_dispatch(char *input_buffer,
+                        struct acpi_walk_state *walk_state,
+                        union acpi_parse_object *op);
 
+void ACPI_SYSTEM_XFACE acpi_db_execute_thread(void *context);
 
 /*
  * dbstats - Generation and display of ACPI table statistics
  */
-void
-acpi_db_generate_statistics (
-       union acpi_parse_object         *root,
-       u8                              is_method);
-
-acpi_status
-acpi_db_display_statistics (
-       char                            *type_arg);
+void acpi_db_generate_statistics(union acpi_parse_object *root, u8 is_method);
 
+acpi_status acpi_db_display_statistics(char *type_arg);
 
 /*
  * dbutils - AML debugger utilities
  */
-void
-acpi_db_set_output_destination (
-       u32                             where);
+void acpi_db_set_output_destination(u32 where);
 
-void
-acpi_db_dump_object (
-       union acpi_object               *obj_desc,
-       u32                             level);
+void acpi_db_dump_external_object(union acpi_object *obj_desc, u32 level);
 
-void
-acpi_db_prep_namestring (
-       char                            *name);
+void acpi_db_prep_namestring(char *name);
 
-struct acpi_namespace_node *
-acpi_db_local_ns_lookup (
-       char                            *name);
+struct acpi_namespace_node *acpi_db_local_ns_lookup(char *name);
 
-#endif  /* __ACDEBUG_H__ */
+#endif                         /* __ACDEBUG_H__ */
index dbfa877121ba57b2d7a7a7ecc49ca31b39b41e9f..3d96dcb1bb4bb3725946f76a692a96d34389a0f3 100644 (file)
 
 #include "amlresrc.h"
 
-
 #define BLOCK_NONE              0
 #define BLOCK_PAREN             1
 #define BLOCK_BRACE             2
 #define BLOCK_COMMA_LIST        4
 
-struct acpi_external_list
-{
-       char                                *path;
-       struct acpi_external_list           *next;
+struct acpi_external_list {
+       char *path;
+       struct acpi_external_list *next;
 };
 
-extern struct acpi_external_list        *acpi_gbl_external_list;
-extern const char                       *acpi_gbl_io_decode[2];
-extern const char                       *acpi_gbl_word_decode[4];
-extern const char                       *acpi_gbl_consume_decode[2];
-extern const char                       *acpi_gbl_min_decode[2];
-extern const char                       *acpi_gbl_max_decode[2];
-extern const char                       *acpi_gbl_DECdecode[2];
-extern const char                       *acpi_gbl_RNGdecode[4];
-extern const char                       *acpi_gbl_MEMdecode[4];
-extern const char                       *acpi_gbl_RWdecode[2];
-extern const char                       *acpi_gbl_irq_decode[2];
-extern const char                       *acpi_gbl_HEdecode[2];
-extern const char                       *acpi_gbl_LLdecode[2];
-extern const char                       *acpi_gbl_SHRdecode[2];
-extern const char                       *acpi_gbl_TYPdecode[4];
-extern const char                       *acpi_gbl_BMdecode[2];
-extern const char                       *acpi_gbl_SIZdecode[4];
-extern const char                       *acpi_gbl_TTPdecode[2];
-extern const char                       *acpi_gbl_MTPdecode[4];
-extern const char                       *acpi_gbl_TRSdecode[2];
-
-
-extern const char                       *acpi_gbl_lock_rule[ACPI_NUM_LOCK_RULES];
-extern const char                       *acpi_gbl_access_types[ACPI_NUM_ACCESS_TYPES];
-extern const char                       *acpi_gbl_update_rules[ACPI_NUM_UPDATE_RULES];
-extern const char                       *acpi_gbl_match_ops[ACPI_NUM_MATCH_OPS];
-
-
-struct acpi_op_walk_info
-{
-       u32                             level;
-       u32                             bit_offset;
+extern struct acpi_external_list *acpi_gbl_external_list;
+extern const char *acpi_gbl_io_decode[2];
+extern const char *acpi_gbl_word_decode[4];
+extern const char *acpi_gbl_consume_decode[2];
+extern const char *acpi_gbl_min_decode[2];
+extern const char *acpi_gbl_max_decode[2];
+extern const char *acpi_gbl_DECdecode[2];
+extern const char *acpi_gbl_RNGdecode[4];
+extern const char *acpi_gbl_MEMdecode[4];
+extern const char *acpi_gbl_RWdecode[2];
+extern const char *acpi_gbl_irq_decode[2];
+extern const char *acpi_gbl_HEdecode[2];
+extern const char *acpi_gbl_LLdecode[2];
+extern const char *acpi_gbl_SHRdecode[2];
+extern const char *acpi_gbl_TYPdecode[4];
+extern const char *acpi_gbl_BMdecode[2];
+extern const char *acpi_gbl_SIZdecode[4];
+extern const char *acpi_gbl_TTPdecode[2];
+extern const char *acpi_gbl_MTPdecode[4];
+extern const char *acpi_gbl_TRSdecode[2];
+
+extern const char *acpi_gbl_lock_rule[ACPI_NUM_LOCK_RULES];
+extern const char *acpi_gbl_access_types[ACPI_NUM_ACCESS_TYPES];
+extern const char *acpi_gbl_update_rules[ACPI_NUM_UPDATE_RULES];
+extern const char *acpi_gbl_match_ops[ACPI_NUM_MATCH_OPS];
+
+struct acpi_op_walk_info {
+       u32 level;
+       u32 bit_offset;
+       struct acpi_walk_state *walk_state;
 };
 
 typedef
-acpi_status (*asl_walk_callback) (
-       union acpi_parse_object             *op,
-       u32                                 level,
-       void                                *context);
-
+acpi_status(*asl_walk_callback) (union acpi_parse_object * op,
+                                u32 level, void *context);
 
 /*
  * dmwalk
  */
 void
-acpi_dm_disassemble (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *origin,
-       u32                             num_opcodes);
-
+acpi_dm_disassemble(struct acpi_walk_state *walk_state,
+                   union acpi_parse_object *origin, u32 num_opcodes);
 
 /*
  * dmopcode
  */
 void
-acpi_dm_disassemble_one_op (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_op_walk_info        *info,
-       union acpi_parse_object         *op);
+acpi_dm_disassemble_one_op(struct acpi_walk_state *walk_state,
+                          struct acpi_op_walk_info *info,
+                          union acpi_parse_object *op);
 
-void
-acpi_dm_decode_internal_object (
-       union acpi_operand_object       *obj_desc);
+void acpi_dm_decode_internal_object(union acpi_operand_object *obj_desc);
 
-u32
-acpi_dm_list_type (
-       union acpi_parse_object         *op);
+u32 acpi_dm_list_type(union acpi_parse_object *op);
 
-void
-acpi_dm_method_flags (
-       union acpi_parse_object         *op);
-
-void
-acpi_dm_field_flags (
-       union acpi_parse_object         *op);
+void acpi_dm_method_flags(union acpi_parse_object *op);
 
-void
-acpi_dm_address_space (
-       u8                              space_id);
+void acpi_dm_field_flags(union acpi_parse_object *op);
 
-void
-acpi_dm_region_flags (
-       union acpi_parse_object         *op);
+void acpi_dm_address_space(u8 space_id);
 
-void
-acpi_dm_match_op (
-       union acpi_parse_object         *op);
+void acpi_dm_region_flags(union acpi_parse_object *op);
 
-u8
-acpi_dm_comma_if_list_member (
-       union acpi_parse_object         *op);
+void acpi_dm_match_op(union acpi_parse_object *op);
 
-void
-acpi_dm_comma_if_field_member (
-       union acpi_parse_object         *op);
+u8 acpi_dm_comma_if_list_member(union acpi_parse_object *op);
 
+void acpi_dm_comma_if_field_member(union acpi_parse_object *op);
 
 /*
  * dmnames
  */
-u32
-acpi_dm_dump_name (
-       char                            *name);
+u32 acpi_dm_dump_name(char *name);
 
 acpi_status
-acpi_ps_display_object_pathname (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op);
-
-void
-acpi_dm_namestring (
-       char                            *name);
+acpi_ps_display_object_pathname(struct acpi_walk_state *walk_state,
+                               union acpi_parse_object *op);
 
+void acpi_dm_namestring(char *name);
 
 /*
  * dmobject
  */
 void
-acpi_dm_display_internal_object (
-       union acpi_operand_object       *obj_desc,
-       struct acpi_walk_state          *walk_state);
+acpi_dm_display_internal_object(union acpi_operand_object *obj_desc,
+                               struct acpi_walk_state *walk_state);
 
-void
-acpi_dm_display_arguments (
-       struct acpi_walk_state          *walk_state);
+void acpi_dm_display_arguments(struct acpi_walk_state *walk_state);
 
-void
-acpi_dm_display_locals (
-       struct acpi_walk_state          *walk_state);
+void acpi_dm_display_locals(struct acpi_walk_state *walk_state);
 
 void
-acpi_dm_dump_method_info (
-       acpi_status                     status,
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op);
-
+acpi_dm_dump_method_info(acpi_status status,
+                        struct acpi_walk_state *walk_state,
+                        union acpi_parse_object *op);
 
 /*
  * dmbuffer
  */
-void
-acpi_dm_disasm_byte_list (
-       u32                             level,
-       u8                              *byte_data,
-       u32                             byte_count);
+void acpi_dm_disasm_byte_list(u32 level, u8 * byte_data, u32 byte_count);
 
 void
-acpi_dm_byte_list (
-       struct acpi_op_walk_info        *info,
-       union acpi_parse_object         *op);
+acpi_dm_byte_list(struct acpi_op_walk_info *info, union acpi_parse_object *op);
 
-void
-acpi_is_eisa_id (
-       union acpi_parse_object         *op);
+void acpi_dm_is_eisa_id(union acpi_parse_object *op);
 
-void
-acpi_dm_eisa_id (
-       u32                             encoded_id);
-
-u8
-acpi_dm_is_unicode_buffer (
-       union acpi_parse_object         *op);
+void acpi_dm_eisa_id(u32 encoded_id);
 
-u8
-acpi_dm_is_string_buffer (
-       union acpi_parse_object         *op);
+u8 acpi_dm_is_unicode_buffer(union acpi_parse_object *op);
 
+u8 acpi_dm_is_string_buffer(union acpi_parse_object *op);
 
 /*
  * dmresrc
  */
 void
-acpi_dm_resource_descriptor (
-       struct acpi_op_walk_info        *info,
-       u8                              *byte_data,
-       u32                             byte_count);
+acpi_dm_resource_descriptor(struct acpi_op_walk_info *info,
+                           u8 * byte_data, u32 byte_count);
 
-u8
-acpi_dm_is_resource_descriptor (
-       union acpi_parse_object         *op);
+u8 acpi_dm_is_resource_descriptor(union acpi_parse_object *op);
 
-void
-acpi_dm_indent (
-       u32                             level);
+void acpi_dm_indent(u32 level);
 
-void
-acpi_dm_bit_list (
-       u16                             mask);
-
-void
-acpi_dm_decode_attribute (
-       u8                              attribute);
+void acpi_dm_bit_list(u16 mask);
 
+void acpi_dm_decode_attribute(u8 attribute);
 
 /*
  * dmresrcl
  */
 void
-acpi_dm_word_descriptor (
-       struct asl_word_address_desc    *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_word_descriptor(struct asl_word_address_desc *resource,
+                       u32 length, u32 level);
 
 void
-acpi_dm_dword_descriptor (
-       struct asl_dword_address_desc   *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_dword_descriptor(struct asl_dword_address_desc *resource,
+                        u32 length, u32 level);
 
 void
-acpi_dm_extended_descriptor (
-       struct asl_extended_address_desc   *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_extended_descriptor(struct asl_extended_address_desc *resource,
+                           u32 length, u32 level);
 
 void
-acpi_dm_qword_descriptor (
-       struct asl_qword_address_desc   *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_qword_descriptor(struct asl_qword_address_desc *resource,
+                        u32 length, u32 level);
 
 void
-acpi_dm_memory24_descriptor (
-       struct asl_memory_24_desc       *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_memory24_descriptor(struct asl_memory_24_desc *resource,
+                           u32 length, u32 level);
 
 void
-acpi_dm_memory32_descriptor (
-       struct asl_memory_32_desc       *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_memory32_descriptor(struct asl_memory_32_desc *resource,
+                           u32 length, u32 level);
 
 void
-acpi_dm_fixed_mem32_descriptor (
-       struct asl_fixed_memory_32_desc *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_fixed_mem32_descriptor(struct asl_fixed_memory_32_desc *resource,
+                              u32 length, u32 level);
 
 void
-acpi_dm_generic_register_descriptor (
-       struct asl_general_register_desc *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_generic_register_descriptor(struct asl_general_register_desc *resource,
+                                   u32 length, u32 level);
 
 void
-acpi_dm_interrupt_descriptor (
-       struct asl_extended_xrupt_desc *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_interrupt_descriptor(struct asl_extended_xrupt_desc *resource,
+                            u32 length, u32 level);
 
 void
-acpi_dm_vendor_large_descriptor (
-       struct asl_large_vendor_desc    *resource,
-       u32                             length,
-       u32                             level);
-
+acpi_dm_vendor_large_descriptor(struct asl_large_vendor_desc *resource,
+                               u32 length, u32 level);
 
 /*
  * dmresrcs
  */
 void
-acpi_dm_irq_descriptor (
-       struct asl_irq_format_desc      *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_irq_descriptor(struct asl_irq_format_desc *resource,
+                      u32 length, u32 level);
 
 void
-acpi_dm_dma_descriptor (
-       struct asl_dma_format_desc      *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_dma_descriptor(struct asl_dma_format_desc *resource,
+                      u32 length, u32 level);
 
 void
-acpi_dm_io_descriptor (
-       struct asl_io_port_desc         *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_io_descriptor(struct asl_io_port_desc *resource, u32 length, u32 level);
 
 void
-acpi_dm_fixed_io_descriptor (
-       struct asl_fixed_io_port_desc   *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_fixed_io_descriptor(struct asl_fixed_io_port_desc *resource,
+                           u32 length, u32 level);
 
 void
-acpi_dm_start_dependent_descriptor (
-       struct asl_start_dependent_desc *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_start_dependent_descriptor(struct asl_start_dependent_desc *resource,
+                                  u32 length, u32 level);
 
 void
-acpi_dm_end_dependent_descriptor (
-       struct asl_start_dependent_desc *resource,
-       u32                             length,
-       u32                             level);
+acpi_dm_end_dependent_descriptor(struct asl_start_dependent_desc *resource,
+                                u32 length, u32 level);
 
 void
-acpi_dm_vendor_small_descriptor (
-       struct asl_small_vendor_desc    *resource,
-       u32                             length,
-       u32                             level);
-
+acpi_dm_vendor_small_descriptor(struct asl_small_vendor_desc *resource,
+                               u32 length, u32 level);
 
 /*
  * dmutils
  */
-void
-acpi_dm_add_to_external_list (
-       char                            *path);
+void acpi_dm_add_to_external_list(char *path);
 
-#endif  /* __ACDISASM_H__ */
+#endif                         /* __ACDISASM_H__ */
index 8f5f2f71b1de9a33d617912e1e5169a3324c9cce..065f24a77cfcb44010f053127a0dbdc934e2f2bd 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #ifndef _ACDISPAT_H_
 #define _ACDISPAT_H_
 
-
 #define NAMEOF_LOCAL_NTE    "__L0"
 #define NAMEOF_ARG_NTE      "__A0"
 
-
 /*
  * dsopcode - support for late evaluation
  */
 acpi_status
-acpi_ds_get_buffer_field_arguments (
-       union acpi_operand_object       *obj_desc);
-
-acpi_status
-acpi_ds_get_region_arguments (
-       union acpi_operand_object       *rgn_desc);
+acpi_ds_get_buffer_field_arguments(union acpi_operand_object *obj_desc);
 
-acpi_status
-acpi_ds_get_buffer_arguments (
-       union acpi_operand_object       *obj_desc);
+acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *rgn_desc);
 
-acpi_status
-acpi_ds_get_package_arguments (
-       union acpi_operand_object       *obj_desc);
+acpi_status acpi_ds_get_buffer_arguments(union acpi_operand_object *obj_desc);
 
-acpi_status
-acpi_ds_eval_buffer_field_operands (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op);
+acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc);
 
 acpi_status
-acpi_ds_eval_region_operands (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op);
+acpi_ds_eval_buffer_field_operands(struct acpi_walk_state *walk_state,
+                                  union acpi_parse_object *op);
 
 acpi_status
-acpi_ds_eval_data_object_operands (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       union acpi_operand_object       *obj_desc);
+acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,
+                            union acpi_parse_object *op);
 
 acpi_status
-acpi_ds_initialize_region (
-       acpi_handle                     obj_handle);
+acpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state,
+                                 union acpi_parse_object *op,
+                                 union acpi_operand_object *obj_desc);
 
+acpi_status acpi_ds_initialize_region(acpi_handle obj_handle);
 
 /*
  * dsctrl - Parser/Interpreter interface, control stack routines
  */
 acpi_status
-acpi_ds_exec_begin_control_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op);
+acpi_ds_exec_begin_control_op(struct acpi_walk_state *walk_state,
+                             union acpi_parse_object *op);
 
 acpi_status
-acpi_ds_exec_end_control_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op);
-
+acpi_ds_exec_end_control_op(struct acpi_walk_state *walk_state,
+                           union acpi_parse_object *op);
 
 /*
  * dsexec - Parser/Interpreter interface, method execution callbacks
  */
 acpi_status
-acpi_ds_get_predicate_value (
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       *result_obj);
-
-acpi_status
-acpi_ds_exec_begin_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         **out_op);
+acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
+                           union acpi_operand_object *result_obj);
 
 acpi_status
-acpi_ds_exec_end_op (
-       struct acpi_walk_state          *state);
+acpi_ds_exec_begin_op(struct acpi_walk_state *walk_state,
+                     union acpi_parse_object **out_op);
 
+acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *state);
 
 /*
  * dsfield - Parser/Interpreter interface for AML fields
  */
 acpi_status
-acpi_ds_create_field (
-       union acpi_parse_object         *op,
-       struct acpi_namespace_node      *region_node,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_create_field(union acpi_parse_object *op,
+                    struct acpi_namespace_node *region_node,
+                    struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_create_bank_field (
-       union acpi_parse_object         *op,
-       struct acpi_namespace_node      *region_node,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_create_bank_field(union acpi_parse_object *op,
+                         struct acpi_namespace_node *region_node,
+                         struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_create_index_field (
-       union acpi_parse_object         *op,
-       struct acpi_namespace_node      *region_node,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_create_index_field(union acpi_parse_object *op,
+                          struct acpi_namespace_node *region_node,
+                          struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_create_buffer_field (
-       union acpi_parse_object         *op,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_create_buffer_field(union acpi_parse_object *op,
+                           struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_init_field_objects (
-       union acpi_parse_object         *op,
-       struct acpi_walk_state          *walk_state);
-
+acpi_ds_init_field_objects(union acpi_parse_object *op,
+                          struct acpi_walk_state *walk_state);
 
 /*
  * dsload - Parser/Interpreter interface, namespace load callbacks
  */
 acpi_status
-acpi_ds_load1_begin_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         **out_op);
+acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,
+                      union acpi_parse_object **out_op);
 
-acpi_status
-acpi_ds_load1_end_op (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_load2_begin_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         **out_op);
+acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
+                      union acpi_parse_object **out_op);
 
-acpi_status
-acpi_ds_load2_end_op (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_init_callbacks (
-       struct acpi_walk_state          *walk_state,
-       u32                             pass_number);
-
+acpi_ds_init_callbacks(struct acpi_walk_state *walk_state, u32 pass_number);
 
 /*
  * dsmthdat - method data (locals/args)
  */
 acpi_status
-acpi_ds_store_object_to_local (
-       u16                             opcode,
-       u32                             index,
-       union acpi_operand_object       *src_desc,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_store_object_to_local(u16 opcode,
+                             u32 index,
+                             union acpi_operand_object *src_desc,
+                             struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_method_data_get_entry (
-       u16                             opcode,
-       u32                             index,
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       ***node);
+acpi_ds_method_data_get_entry(u16 opcode,
+                             u32 index,
+                             struct acpi_walk_state *walk_state,
+                             union acpi_operand_object ***node);
 
-void
-acpi_ds_method_data_delete_all (
-       struct acpi_walk_state          *walk_state);
+void acpi_ds_method_data_delete_all(struct acpi_walk_state *walk_state);
 
-u8
-acpi_ds_is_method_value (
-       union acpi_operand_object       *obj_desc);
+u8 acpi_ds_is_method_value(union acpi_operand_object *obj_desc);
 
 acpi_status
-acpi_ds_method_data_get_value (
-       u16                             opcode,
-       u32                             index,
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       **dest_desc);
+acpi_ds_method_data_get_value(u16 opcode,
+                             u32 index,
+                             struct acpi_walk_state *walk_state,
+                             union acpi_operand_object **dest_desc);
 
 acpi_status
-acpi_ds_method_data_init_args (
-       union acpi_operand_object       **params,
-       u32                             max_param_count,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_method_data_init_args(union acpi_operand_object **params,
+                             u32 max_param_count,
+                             struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_method_data_get_node (
-       u16                             opcode,
-       u32                             index,
-       struct acpi_walk_state          *walk_state,
-       struct acpi_namespace_node      **node);
-
-void
-acpi_ds_method_data_init (
-       struct acpi_walk_state          *walk_state);
+acpi_ds_method_data_get_node(u16 opcode,
+                            u32 index,
+                            struct acpi_walk_state *walk_state,
+                            struct acpi_namespace_node **node);
 
+void acpi_ds_method_data_init(struct acpi_walk_state *walk_state);
 
 /*
  * dsmethod - Parser/Interpreter interface - control method parsing
  */
-acpi_status
-acpi_ds_parse_method (
-       acpi_handle                     obj_handle);
+acpi_status acpi_ds_parse_method(struct acpi_namespace_node *node);
 
 acpi_status
-acpi_ds_call_control_method (
-       struct acpi_thread_state        *thread,
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op);
+acpi_ds_call_control_method(struct acpi_thread_state *thread,
+                           struct acpi_walk_state *walk_state,
+                           union acpi_parse_object *op);
 
 acpi_status
-acpi_ds_restart_control_method (
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       *return_desc);
+acpi_ds_restart_control_method(struct acpi_walk_state *walk_state,
+                              union acpi_operand_object *return_desc);
 
-acpi_status
-acpi_ds_terminate_control_method (
-       struct acpi_walk_state          *walk_state);
+void acpi_ds_terminate_control_method(struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_begin_method_execution (
-       struct acpi_namespace_node      *method_node,
-       union acpi_operand_object       *obj_desc,
-       struct acpi_namespace_node      *calling_method_node);
-
+acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
+                              union acpi_operand_object *obj_desc,
+                              struct acpi_namespace_node *calling_method_node);
 
 /*
  * dsinit
  */
 acpi_status
-acpi_ds_initialize_objects (
-       struct acpi_table_desc          *table_desc,
-       struct acpi_namespace_node      *start_node);
-
+acpi_ds_initialize_objects(struct acpi_table_desc *table_desc,
+                          struct acpi_namespace_node *start_node);
 
 /*
  * dsobject - Parser/Interpreter interface - object initialization and conversion
  */
 acpi_status
-acpi_ds_build_internal_buffer_obj (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       u32                             buffer_length,
-       union acpi_operand_object       **obj_desc_ptr);
+acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
+                                 union acpi_parse_object *op,
+                                 u32 buffer_length,
+                                 union acpi_operand_object **obj_desc_ptr);
 
 acpi_status
-acpi_ds_build_internal_package_obj (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       u32                             package_length,
-       union acpi_operand_object       **obj_desc);
+acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
+                                  union acpi_parse_object *op,
+                                  u32 package_length,
+                                  union acpi_operand_object **obj_desc);
 
 acpi_status
-acpi_ds_init_object_from_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       u16                             opcode,
-       union acpi_operand_object       **obj_desc);
+acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
+                           union acpi_parse_object *op,
+                           u16 opcode, union acpi_operand_object **obj_desc);
 
 acpi_status
-acpi_ds_create_node (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_namespace_node      *node,
-       union acpi_parse_object         *op);
-
+acpi_ds_create_node(struct acpi_walk_state *walk_state,
+                   struct acpi_namespace_node *node,
+                   union acpi_parse_object *op);
 
 /*
  * dsutils - Parser/Interpreter interface utility routines
  */
-void
-acpi_ds_clear_implicit_return (
-       struct acpi_walk_state          *walk_state);
+void acpi_ds_clear_implicit_return(struct acpi_walk_state *walk_state);
 
 u8
-acpi_ds_do_implicit_return (
-       union acpi_operand_object       *return_desc,
-       struct acpi_walk_state          *walk_state,
-       u8                              add_reference);
+acpi_ds_do_implicit_return(union acpi_operand_object *return_desc,
+                          struct acpi_walk_state *walk_state,
+                          u8 add_reference);
 
 u8
-acpi_ds_is_result_used (
-       union acpi_parse_object         *op,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_is_result_used(union acpi_parse_object *op,
+                      struct acpi_walk_state *walk_state);
 
 void
-acpi_ds_delete_result_if_not_used (
-       union acpi_parse_object         *op,
-       union acpi_operand_object       *result_obj,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_delete_result_if_not_used(union acpi_parse_object *op,
+                                 union acpi_operand_object *result_obj,
+                                 struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_create_operand (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *arg,
-       u32                             args_remaining);
+acpi_ds_create_operand(struct acpi_walk_state *walk_state,
+                      union acpi_parse_object *arg, u32 args_remaining);
 
 acpi_status
-acpi_ds_create_operands (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *first_arg);
+acpi_ds_create_operands(struct acpi_walk_state *walk_state,
+                       union acpi_parse_object *first_arg);
 
-acpi_status
-acpi_ds_resolve_operands (
-       struct acpi_walk_state          *walk_state);
-
-void
-acpi_ds_clear_operands (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ds_resolve_operands(struct acpi_walk_state *walk_state);
 
+void acpi_ds_clear_operands(struct acpi_walk_state *walk_state);
 
 /*
  * dswscope - Scope Stack manipulation
  */
 acpi_status
-acpi_ds_scope_stack_push (
-       struct acpi_namespace_node      *node,
-       acpi_object_type                type,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_scope_stack_push(struct acpi_namespace_node *node,
+                        acpi_object_type type,
+                        struct acpi_walk_state *walk_state);
 
+acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ds_scope_stack_pop (
-       struct acpi_walk_state          *walk_state);
-
-void
-acpi_ds_scope_stack_clear (
-       struct acpi_walk_state          *walk_state);
-
+void acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state);
 
 /*
  * dswstate - parser WALK_STATE management routines
  */
 acpi_status
-acpi_ds_obj_stack_push (
-       void                            *object,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_obj_stack_push(void *object, struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_obj_stack_pop (
-       u32                             pop_count,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state *walk_state);
 
-struct acpi_walk_state *
-acpi_ds_create_walk_state (
-       acpi_owner_id                   owner_id,
-       union acpi_parse_object         *origin,
-       union acpi_operand_object       *mth_desc,
-       struct acpi_thread_state        *thread);
+struct acpi_walk_state *acpi_ds_create_walk_state(acpi_owner_id owner_id,
+                                                 union acpi_parse_object
+                                                 *origin,
+                                                 union acpi_operand_object
+                                                 *mth_desc,
+                                                 struct acpi_thread_state
+                                                 *thread);
 
 acpi_status
-acpi_ds_init_aml_walk (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       struct acpi_namespace_node      *method_node,
-       u8                              *aml_start,
-       u32                             aml_length,
-       struct acpi_parameter_info      *info,
-       u32                             pass_number);
+acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
+                     union acpi_parse_object *op,
+                     struct acpi_namespace_node *method_node,
+                     u8 * aml_start,
+                     u32 aml_length,
+                     struct acpi_parameter_info *info, u8 pass_number);
 
 acpi_status
-acpi_ds_obj_stack_pop_and_delete (
-       u32                             pop_count,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
+                                struct acpi_walk_state *walk_state);
 
-void
-acpi_ds_delete_walk_state (
-       struct acpi_walk_state          *walk_state);
+void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state);
 
-struct acpi_walk_state *
-acpi_ds_pop_walk_state (
-       struct acpi_thread_state        *thread);
+struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state
+                                              *thread);
 
 void
-acpi_ds_push_walk_state (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_thread_state        *thread);
+acpi_ds_push_walk_state(struct acpi_walk_state *walk_state,
+                       struct acpi_thread_state *thread);
 
-acpi_status
-acpi_ds_result_stack_pop (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ds_result_stack_pop(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ds_result_stack_push (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ds_result_stack_push(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ds_result_stack_clear (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ds_result_stack_clear(struct acpi_walk_state *walk_state);
 
-struct acpi_walk_state *
-acpi_ds_get_current_walk_state (
-       struct acpi_thread_state        *thread);
+struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state
+                                                      *thread);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_ds_result_remove (
-       union acpi_operand_object       **object,
-       u32                             index,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_result_remove(union acpi_operand_object **object,
+                     u32 index, struct acpi_walk_state *walk_state);
 #endif
 
 acpi_status
-acpi_ds_result_pop (
-       union acpi_operand_object       **object,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_result_pop(union acpi_operand_object **object,
+                  struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_result_push (
-       union acpi_operand_object       *object,
-       struct acpi_walk_state          *walk_state);
+acpi_ds_result_push(union acpi_operand_object *object,
+                   struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ds_result_pop_from_bottom (
-       union acpi_operand_object       **object,
-       struct acpi_walk_state          *walk_state);
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
-void
-acpi_ds_delete_walk_state_cache (
-       void);
-#endif
+acpi_ds_result_pop_from_bottom(union acpi_operand_object **object,
+                              struct acpi_walk_state *walk_state);
 
-#endif /* _ACDISPAT_H_ */
+#endif                         /* _ACDISPAT_H_ */
index 61a27c8c50795f3d2e46ea3d4c475f7a958f9508..bfa54600ecd9748244db27ea8190f95233919085 100644 (file)
 #ifndef __ACEVENTS_H__
 #define __ACEVENTS_H__
 
-
 /*
  * evevent
  */
-acpi_status
-acpi_ev_initialize_events (
-       void);
+acpi_status acpi_ev_initialize_events(void);
 
-acpi_status
-acpi_ev_install_xrupt_handlers (
-       void);
-
-u32
-acpi_ev_fixed_event_detect (
-       void);
+acpi_status acpi_ev_install_xrupt_handlers(void);
 
+u32 acpi_ev_fixed_event_detect(void);
 
 /*
  * evmisc
  */
-u8
-acpi_ev_is_notify_object (
-       struct acpi_namespace_node      *node);
+u8 acpi_ev_is_notify_object(struct acpi_namespace_node *node);
 
-acpi_status
-acpi_ev_acquire_global_lock(
-       u16                             timeout);
+acpi_status acpi_ev_acquire_global_lock(u16 timeout);
 
-acpi_status
-acpi_ev_release_global_lock(
-       void);
+acpi_status acpi_ev_release_global_lock(void);
 
-acpi_status
-acpi_ev_init_global_lock_handler (
-       void);
+acpi_status acpi_ev_init_global_lock_handler(void);
 
-u32
-acpi_ev_get_gpe_number_index (
-       u32                             gpe_number);
+u32 acpi_ev_get_gpe_number_index(u32 gpe_number);
 
 acpi_status
-acpi_ev_queue_notify_request (
-       struct acpi_namespace_node      *node,
-       u32                             notify_value);
-
+acpi_ev_queue_notify_request(struct acpi_namespace_node *node,
+                            u32 notify_value);
 
 /*
  * evgpe - GPE handling and dispatch
  */
 acpi_status
-acpi_ev_update_gpe_enable_masks (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       u8                              type);
+acpi_ev_update_gpe_enable_masks(struct acpi_gpe_event_info *gpe_event_info,
+                               u8 type);
 
 acpi_status
-acpi_ev_enable_gpe (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       u8                              write_to_hardware);
+acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info,
+                  u8 write_to_hardware);
 
-acpi_status
-acpi_ev_disable_gpe (
-       struct acpi_gpe_event_info      *gpe_event_info);
-
-struct acpi_gpe_event_info *
-acpi_ev_get_gpe_event_info (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number);
+acpi_status acpi_ev_disable_gpe(struct acpi_gpe_event_info *gpe_event_info);
 
+struct acpi_gpe_event_info *acpi_ev_get_gpe_event_info(acpi_handle gpe_device,
+                                                      u32 gpe_number);
 
 /*
  * evgpeblk
  */
-u8
-acpi_ev_valid_gpe_event (
-       struct acpi_gpe_event_info      *gpe_event_info);
-
-acpi_status
-acpi_ev_walk_gpe_list (
-       ACPI_GPE_CALLBACK       gpe_walk_callback,
-       u32                             flags);
+u8 acpi_ev_valid_gpe_event(struct acpi_gpe_event_info *gpe_event_info);
 
-acpi_status
-acpi_ev_delete_gpe_handlers (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
+acpi_status acpi_ev_walk_gpe_list(ACPI_GPE_CALLBACK gpe_walk_callback);
 
 acpi_status
-acpi_ev_create_gpe_block (
-       struct acpi_namespace_node      *gpe_device,
-       struct acpi_generic_address     *gpe_block_address,
-       u32                             register_count,
-       u8                              gpe_block_base_number,
-       u32                             interrupt_level,
-       struct acpi_gpe_block_info      **return_gpe_block);
+acpi_ev_delete_gpe_handlers(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
+                           struct acpi_gpe_block_info *gpe_block);
 
 acpi_status
-acpi_ev_delete_gpe_block (
-       struct acpi_gpe_block_info      *gpe_block);
+acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
+                        struct acpi_generic_address *gpe_block_address,
+                        u32 register_count,
+                        u8 gpe_block_base_number,
+                        u32 interrupt_number,
+                        struct acpi_gpe_block_info **return_gpe_block);
 
-u32
-acpi_ev_gpe_dispatch (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       u32                             gpe_number);
+acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block);
 
 u32
-acpi_ev_gpe_detect (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_list);
+acpi_ev_gpe_dispatch(struct acpi_gpe_event_info *gpe_event_info,
+                    u32 gpe_number);
 
-acpi_status
-acpi_ev_set_gpe_type (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       u8                              type);
+u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info *gpe_xrupt_list);
 
 acpi_status
-acpi_ev_check_for_wake_only_gpe (
-       struct acpi_gpe_event_info      *gpe_event_info);
+acpi_ev_set_gpe_type(struct acpi_gpe_event_info *gpe_event_info, u8 type);
 
 acpi_status
-acpi_ev_gpe_initialize (
-       void);
+acpi_ev_check_for_wake_only_gpe(struct acpi_gpe_event_info *gpe_event_info);
 
+acpi_status acpi_ev_gpe_initialize(void);
 
 /*
  * evregion - Address Space handling
  */
-acpi_status
-acpi_ev_install_region_handlers (
-       void);
+acpi_status acpi_ev_install_region_handlers(void);
 
-acpi_status
-acpi_ev_initialize_op_regions (
-       void);
+acpi_status acpi_ev_initialize_op_regions(void);
 
 acpi_status
-acpi_ev_address_space_dispatch (
-       union acpi_operand_object      *region_obj,
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       void                            *value);
+acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,
+                              u32 function,
+                              acpi_physical_address address,
+                              u32 bit_width, void *value);
 
 acpi_status
-acpi_ev_attach_region (
-       union acpi_operand_object       *handler_obj,
-       union acpi_operand_object       *region_obj,
-       u8                              acpi_ns_is_locked);
+acpi_ev_attach_region(union acpi_operand_object *handler_obj,
+                     union acpi_operand_object *region_obj,
+                     u8 acpi_ns_is_locked);
 
 void
-acpi_ev_detach_region (
-       union acpi_operand_object      *region_obj,
-       u8                              acpi_ns_is_locked);
+acpi_ev_detach_region(union acpi_operand_object *region_obj,
+                     u8 acpi_ns_is_locked);
 
 acpi_status
-acpi_ev_install_space_handler (
-       struct acpi_namespace_node      *node,
-       acpi_adr_space_type             space_id,
-       acpi_adr_space_handler          handler,
-       acpi_adr_space_setup            setup,
-       void                            *context);
+acpi_ev_install_space_handler(struct acpi_namespace_node *node,
+                             acpi_adr_space_type space_id,
+                             acpi_adr_space_handler handler,
+                             acpi_adr_space_setup setup, void *context);
 
 acpi_status
-acpi_ev_execute_reg_methods (
-       struct acpi_namespace_node      *node,
-       acpi_adr_space_type             space_id);
+acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,
+                           acpi_adr_space_type space_id);
 
 acpi_status
-acpi_ev_execute_reg_method (
-       union acpi_operand_object      *region_obj,
-       u32                             function);
-
+acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function);
 
 /*
  * evregini - Region initialization and setup
  */
 acpi_status
-acpi_ev_system_memory_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context);
+acpi_ev_system_memory_region_setup(acpi_handle handle,
+                                  u32 function,
+                                  void *handler_context,
+                                  void **region_context);
 
 acpi_status
-acpi_ev_io_space_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context);
+acpi_ev_io_space_region_setup(acpi_handle handle,
+                             u32 function,
+                             void *handler_context, void **region_context);
 
 acpi_status
-acpi_ev_pci_config_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context);
+acpi_ev_pci_config_region_setup(acpi_handle handle,
+                               u32 function,
+                               void *handler_context, void **region_context);
 
 acpi_status
-acpi_ev_cmos_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context);
+acpi_ev_cmos_region_setup(acpi_handle handle,
+                         u32 function,
+                         void *handler_context, void **region_context);
 
 acpi_status
-acpi_ev_pci_bar_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context);
+acpi_ev_pci_bar_region_setup(acpi_handle handle,
+                            u32 function,
+                            void *handler_context, void **region_context);
 
 acpi_status
-acpi_ev_default_region_setup (
-       acpi_handle                     handle,
-       u32                             function,
-       void                            *handler_context,
-       void                            **region_context);
+acpi_ev_default_region_setup(acpi_handle handle,
+                            u32 function,
+                            void *handler_context, void **region_context);
 
 acpi_status
-acpi_ev_initialize_region (
-       union acpi_operand_object       *region_obj,
-       u8                              acpi_ns_locked);
-
+acpi_ev_initialize_region(union acpi_operand_object *region_obj,
+                         u8 acpi_ns_locked);
 
 /*
  * evsci - SCI (System Control Interrupt) handling/dispatch
  */
-u32 ACPI_SYSTEM_XFACE
-acpi_ev_gpe_xrupt_handler (
-       void                            *context);
-
-u32
-acpi_ev_install_sci_handler (
-       void);
+u32 ACPI_SYSTEM_XFACE acpi_ev_gpe_xrupt_handler(void *context);
 
-acpi_status
-acpi_ev_remove_sci_handler (
-       void);
+u32 acpi_ev_install_sci_handler(void);
 
-u32
-acpi_ev_initialize_sCI (
-       u32                             program_sCI);
+acpi_status acpi_ev_remove_sci_handler(void);
 
-void
-acpi_ev_terminate (
-       void);
+u32 acpi_ev_initialize_sCI(u32 program_sCI);
 
+void acpi_ev_terminate(void);
 
-#endif  /* __ACEVENTS_H__  */
+#endif                         /* __ACEVENTS_H__  */
index 60d737b2d70f2dde682c7ea9a5f1202ede670be5..4f005eb659281b0156fbc232633b5f634982e9cb 100644 (file)
@@ -44,7 +44,6 @@
 #ifndef __ACEXCEP_H__
 #define __ACEXCEP_H__
 
-
 /*
  * Exceptions returned by external ACPI interfaces
  */
 #define AE_CODE_CONTROL                 0x4000
 #define AE_CODE_MASK                    0xF000
 
-
 #define ACPI_SUCCESS(a)                 (!(a))
 #define ACPI_FAILURE(a)                 (a)
 
-
 #define AE_OK                           (acpi_status) 0x0000
 
 /*
@@ -95,9 +92,9 @@
 #define AE_ABORT_METHOD                 (acpi_status) (0x001C | AE_CODE_ENVIRONMENTAL)
 #define AE_SAME_HANDLER                 (acpi_status) (0x001D | AE_CODE_ENVIRONMENTAL)
 #define AE_WAKE_ONLY_GPE                (acpi_status) (0x001E | AE_CODE_ENVIRONMENTAL)
+#define AE_OWNER_ID_LIMIT               (acpi_status) (0x001F | AE_CODE_ENVIRONMENTAL)
 
-#define AE_CODE_ENV_MAX                 0x001E
-
+#define AE_CODE_ENV_MAX                 0x001F
 
 /*
  * Programmer exceptions
 
 #define AE_CODE_PGM_MAX                 0x0009
 
-
 /*
  * Acpi table exceptions
  */
 
 #define AE_CODE_TBL_MAX                 0x0006
 
-
 /*
  * AML exceptions.  These are caused by problems with
  * the actual AML byte stream
 
 #define AE_CODE_AML_MAX                 0x0021
 
-
 /*
  * Internal exceptions used for control
  */
 
 #define AE_CODE_CTRL_MAX                0x000B
 
-
 #ifdef DEFINE_ACPI_GLOBALS
 
-
 /*
  * String versions of the exception codes above
  * These strings must match the corresponding defines exactly
  */
-char const   *acpi_gbl_exception_names_env[] =
-{
+char const *acpi_gbl_exception_names_env[] = {
        "AE_OK",
        "AE_ERROR",
        "AE_NO_ACPI_TABLES",
@@ -226,11 +217,11 @@ char const   *acpi_gbl_exception_names_env[] =
        "AE_LOGICAL_ADDRESS",
        "AE_ABORT_METHOD",
        "AE_SAME_HANDLER",
-       "AE_WAKE_ONLY_GPE"
+       "AE_WAKE_ONLY_GPE",
+       "AE_OWNER_ID_LIMIT"
 };
 
-char const   *acpi_gbl_exception_names_pgm[] =
-{
+char const *acpi_gbl_exception_names_pgm[] = {
        "AE_BAD_PARAMETER",
        "AE_BAD_CHARACTER",
        "AE_BAD_PATHNAME",
@@ -242,8 +233,7 @@ char const   *acpi_gbl_exception_names_pgm[] =
        "AE_BAD_DECIMAL_CONSTANT"
 };
 
-char const   *acpi_gbl_exception_names_tbl[] =
-{
+char const *acpi_gbl_exception_names_tbl[] = {
        "AE_BAD_SIGNATURE",
        "AE_BAD_HEADER",
        "AE_BAD_CHECKSUM",
@@ -252,8 +242,7 @@ char const   *acpi_gbl_exception_names_tbl[] =
        "AE_INVALID_TABLE_LENGTH"
 };
 
-char const   *acpi_gbl_exception_names_aml[] =
-{
+char const *acpi_gbl_exception_names_aml[] = {
        "AE_AML_ERROR",
        "AE_AML_PARSE",
        "AE_AML_BAD_OPCODE",
@@ -289,8 +278,7 @@ char const   *acpi_gbl_exception_names_aml[] =
        "AE_AML_BAD_RESOURCE_LENGTH"
 };
 
-char const   *acpi_gbl_exception_names_ctrl[] =
-{
+char const *acpi_gbl_exception_names_ctrl[] = {
        "AE_CTRL_RETURN_VALUE",
        "AE_CTRL_PENDING",
        "AE_CTRL_TERMINATE",
@@ -304,6 +292,6 @@ char const   *acpi_gbl_exception_names_ctrl[] =
        "AE_CTRL_SKIP"
 };
 
-#endif /* ACPI GLOBALS */
+#endif                         /* ACPI GLOBALS */
 
-#endif /* __ACEXCEP_H__ */
+#endif                         /* __ACEXCEP_H__ */
index 4946696088c3a520fe14794be5d47ffe5d83a981..e9c2790139ecfa47165f006afd285705618e34d9 100644 (file)
@@ -44,7 +44,6 @@
 #ifndef __ACGLOBAL_H__
 #define __ACGLOBAL_H__
 
-
 /*
  * Ensure that the globals are actually defined and initialized only once.
  *
@@ -63,9 +62,8 @@
  * Keep local copies of these FADT-based registers.  NOTE: These globals
  * are first in this file for alignment reasons on 64-bit systems.
  */
-ACPI_EXTERN struct acpi_generic_address         acpi_gbl_xpm1a_enable;
-ACPI_EXTERN struct acpi_generic_address         acpi_gbl_xpm1b_enable;
-
+ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1a_enable;
+ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1b_enable;
 
 /*****************************************************************************
  *
@@ -75,13 +73,12 @@ ACPI_EXTERN struct acpi_generic_address         acpi_gbl_xpm1b_enable;
 
 /* Runtime configuration of debug print levels */
 
-extern      u32                                 acpi_dbg_level;
-extern      u32                                 acpi_dbg_layer;
+extern u32 acpi_dbg_level;
+extern u32 acpi_dbg_layer;
 
 /* Procedure nesting level for debug output */
 
-extern      u32                                 acpi_gbl_nesting_level;
-
+extern u32 acpi_gbl_nesting_level;
 
 /*****************************************************************************
  *
@@ -98,7 +95,7 @@ extern      u32                                 acpi_gbl_nesting_level;
  * 3) Allow access to uninitialized locals/args (auto-init to integer 0)
  * 4) Allow ANY object type to be a source operand for the Store() operator
  */
-ACPI_EXTERN u8       ACPI_INIT_GLOBAL (acpi_gbl_enable_interpreter_slack, FALSE);
+ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_enable_interpreter_slack, FALSE);
 
 /*
  * Automatically serialize ALL control methods? Default is FALSE, meaning
@@ -106,22 +103,21 @@ ACPI_EXTERN u8       ACPI_INIT_GLOBAL (acpi_gbl_enable_interpreter_slack, FALSE)
  * Only change this if the ASL code is poorly written and cannot handle
  * reentrancy even though methods are marked "not_serialized".
  */
-ACPI_EXTERN u8       ACPI_INIT_GLOBAL (acpi_gbl_all_methods_serialized, FALSE);
+ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_all_methods_serialized, FALSE);
 
 /*
  * Create the predefined _OSI method in the namespace? Default is TRUE
  * because ACPI CA is fully compatible with other ACPI implementations.
  * Changing this will revert ACPI CA (and machine ASL) to pre-OSI behavior.
  */
-ACPI_EXTERN u8       ACPI_INIT_GLOBAL (acpi_gbl_create_osi_method, TRUE);
+ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_create_osi_method, TRUE);
 
 /*
  * Disable wakeup GPEs during runtime? Default is TRUE because WAKE and
  * RUNTIME GPEs should never be shared, and WAKE GPEs should typically only
  * be enabled just before going to sleep.
  */
-ACPI_EXTERN u8       ACPI_INIT_GLOBAL (acpi_gbl_leave_wake_gpes_disabled, TRUE);
-
+ACPI_EXTERN u8 ACPI_INIT_GLOBAL(acpi_gbl_leave_wake_gpes_disabled, TRUE);
 
 /*****************************************************************************
  *
@@ -137,42 +133,46 @@ ACPI_EXTERN u8       ACPI_INIT_GLOBAL (acpi_gbl_leave_wake_gpes_disabled, TRUE);
  * These tables are single-table only; meaning that there can be at most one
  * of each in the system.  Each global points to the actual table.
  */
-ACPI_EXTERN u32                                 acpi_gbl_table_flags;
-ACPI_EXTERN u32                                 acpi_gbl_rsdt_table_count;
-ACPI_EXTERN struct rsdp_descriptor             *acpi_gbl_RSDP;
-ACPI_EXTERN XSDT_DESCRIPTOR            *acpi_gbl_XSDT;
-ACPI_EXTERN FADT_DESCRIPTOR            *acpi_gbl_FADT;
-ACPI_EXTERN struct acpi_table_header           *acpi_gbl_DSDT;
-ACPI_EXTERN FACS_DESCRIPTOR            *acpi_gbl_FACS;
-ACPI_EXTERN struct acpi_common_facs             acpi_gbl_common_fACS;
+ACPI_EXTERN u32 acpi_gbl_table_flags;
+ACPI_EXTERN u32 acpi_gbl_rsdt_table_count;
+ACPI_EXTERN struct rsdp_descriptor *acpi_gbl_RSDP;
+ACPI_EXTERN XSDT_DESCRIPTOR *acpi_gbl_XSDT;
+ACPI_EXTERN FADT_DESCRIPTOR *acpi_gbl_FADT;
+ACPI_EXTERN struct acpi_table_header *acpi_gbl_DSDT;
+ACPI_EXTERN FACS_DESCRIPTOR *acpi_gbl_FACS;
+ACPI_EXTERN struct acpi_common_facs acpi_gbl_common_fACS;
 /*
  * Since there may be multiple SSDTs and PSDTs, a single pointer is not
  * sufficient; Therefore, there isn't one!
  */
 
+/* The root table can be either an RSDT or an XSDT */
+
+ACPI_EXTERN u8 acpi_gbl_root_table_type;
+#define     ACPI_TABLE_TYPE_RSDT        'R'
+#define     ACPI_TABLE_TYPE_XSDT        'X'
 
 /*
  * Handle both ACPI 1.0 and ACPI 2.0 Integer widths:
  * If we are executing a method that exists in a 32-bit ACPI table,
  * use only the lower 32 bits of the (internal) 64-bit Integer.
  */
-ACPI_EXTERN u8                                  acpi_gbl_integer_bit_width;
-ACPI_EXTERN u8                                  acpi_gbl_integer_byte_width;
-ACPI_EXTERN u8                                  acpi_gbl_integer_nybble_width;
+ACPI_EXTERN u8 acpi_gbl_integer_bit_width;
+ACPI_EXTERN u8 acpi_gbl_integer_byte_width;
+ACPI_EXTERN u8 acpi_gbl_integer_nybble_width;
 
 /*
  * ACPI Table info arrays
  */
-extern      struct acpi_table_list              acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES];
-extern      struct acpi_table_support           acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES];
+extern struct acpi_table_list acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES];
+extern struct acpi_table_support acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES];
 
 /*
  * Predefined mutex objects.  This array contains the
  * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs.
  * (The table maps local handles to the real OS handles)
  */
-ACPI_EXTERN struct acpi_mutex_info              acpi_gbl_mutex_info[NUM_MUTEX];
-
+ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[NUM_MUTEX];
 
 /*****************************************************************************
  *
@@ -180,41 +180,56 @@ ACPI_EXTERN struct acpi_mutex_info              acpi_gbl_mutex_info[NUM_MUTEX];
  *
  ****************************************************************************/
 
+#ifdef ACPI_DBG_TRACK_ALLOCATIONS
+
+/* Lists for tracking memory allocations */
 
-ACPI_EXTERN struct acpi_memory_list             acpi_gbl_memory_lists[ACPI_NUM_MEM_LISTS];
-ACPI_EXTERN struct acpi_object_notify_handler   acpi_gbl_device_notify;
-ACPI_EXTERN struct acpi_object_notify_handler   acpi_gbl_system_notify;
-ACPI_EXTERN acpi_exception_handler              acpi_gbl_exception_handler;
-ACPI_EXTERN acpi_init_handler                   acpi_gbl_init_handler;
-ACPI_EXTERN struct acpi_walk_state             *acpi_gbl_breakpoint_walk;
-ACPI_EXTERN acpi_handle                         acpi_gbl_global_lock_semaphore;
-
-ACPI_EXTERN u32                                 acpi_gbl_global_lock_thread_count;
-ACPI_EXTERN u32                                 acpi_gbl_original_mode;
-ACPI_EXTERN u32                                 acpi_gbl_rsdp_original_location;
-ACPI_EXTERN u32                                 acpi_gbl_ns_lookup_count;
-ACPI_EXTERN u32                                 acpi_gbl_ps_find_count;
-ACPI_EXTERN u16                                 acpi_gbl_pm1_enable_register_save;
-ACPI_EXTERN u16                                 acpi_gbl_next_table_owner_id;
-ACPI_EXTERN u16                                 acpi_gbl_next_method_owner_id;
-ACPI_EXTERN u16                                 acpi_gbl_global_lock_handle;
-ACPI_EXTERN u8                                  acpi_gbl_debugger_configuration;
-ACPI_EXTERN u8                                  acpi_gbl_global_lock_acquired;
-ACPI_EXTERN u8                                  acpi_gbl_step_to_next_call;
-ACPI_EXTERN u8                                  acpi_gbl_acpi_hardware_present;
-ACPI_EXTERN u8                                  acpi_gbl_global_lock_present;
-ACPI_EXTERN u8                                  acpi_gbl_events_initialized;
-ACPI_EXTERN u8                                  acpi_gbl_system_awake_and_running;
-
-extern u8                                       acpi_gbl_shutdown;
-extern u32                                      acpi_gbl_startup_flags;
-extern const u8                                 acpi_gbl_decode_to8bit[8];
-extern const char                              *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT];
-extern const char                              *acpi_gbl_highest_dstate_names[4];
-extern const struct acpi_opcode_info            acpi_gbl_aml_op_info[AML_NUM_OPCODES];
-extern const char                              *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS];
-extern const char                              *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS];
+ACPI_EXTERN struct acpi_memory_list *acpi_gbl_global_list;
+ACPI_EXTERN struct acpi_memory_list *acpi_gbl_ns_node_list;
+#endif
 
+/* Object caches */
+
+ACPI_EXTERN acpi_cache_t *acpi_gbl_state_cache;
+ACPI_EXTERN acpi_cache_t *acpi_gbl_ps_node_cache;
+ACPI_EXTERN acpi_cache_t *acpi_gbl_ps_node_ext_cache;
+ACPI_EXTERN acpi_cache_t *acpi_gbl_operand_cache;
+
+/* Global handlers */
+
+ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_device_notify;
+ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_system_notify;
+ACPI_EXTERN acpi_exception_handler acpi_gbl_exception_handler;
+ACPI_EXTERN acpi_init_handler acpi_gbl_init_handler;
+ACPI_EXTERN struct acpi_walk_state *acpi_gbl_breakpoint_walk;
+ACPI_EXTERN acpi_handle acpi_gbl_global_lock_semaphore;
+
+/* Misc */
+
+ACPI_EXTERN u32 acpi_gbl_global_lock_thread_count;
+ACPI_EXTERN u32 acpi_gbl_original_mode;
+ACPI_EXTERN u32 acpi_gbl_rsdp_original_location;
+ACPI_EXTERN u32 acpi_gbl_ns_lookup_count;
+ACPI_EXTERN u32 acpi_gbl_ps_find_count;
+ACPI_EXTERN u32 acpi_gbl_owner_id_mask;
+ACPI_EXTERN u16 acpi_gbl_pm1_enable_register_save;
+ACPI_EXTERN u16 acpi_gbl_global_lock_handle;
+ACPI_EXTERN u8 acpi_gbl_debugger_configuration;
+ACPI_EXTERN u8 acpi_gbl_global_lock_acquired;
+ACPI_EXTERN u8 acpi_gbl_step_to_next_call;
+ACPI_EXTERN u8 acpi_gbl_acpi_hardware_present;
+ACPI_EXTERN u8 acpi_gbl_global_lock_present;
+ACPI_EXTERN u8 acpi_gbl_events_initialized;
+ACPI_EXTERN u8 acpi_gbl_system_awake_and_running;
+
+extern u8 acpi_gbl_shutdown;
+extern u32 acpi_gbl_startup_flags;
+extern const u8 acpi_gbl_decode_to8bit[8];
+extern const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT];
+extern const char *acpi_gbl_highest_dstate_names[4];
+extern const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES];
+extern const char *acpi_gbl_region_types[ACPI_NUM_PREDEFINED_REGIONS];
+extern const char *acpi_gbl_valid_osi_strings[ACPI_NUM_OSI_STRINGS];
 
 /*****************************************************************************
  *
@@ -230,36 +245,34 @@ extern const char                              *acpi_gbl_valid_osi_strings[ACPI_
 #define NUM_PREDEFINED_NAMES            9
 #endif
 
-ACPI_EXTERN struct acpi_namespace_node          acpi_gbl_root_node_struct;
-ACPI_EXTERN struct acpi_namespace_node         *acpi_gbl_root_node;
-ACPI_EXTERN struct acpi_namespace_node         *acpi_gbl_fadt_gpe_device;
+ACPI_EXTERN struct acpi_namespace_node acpi_gbl_root_node_struct;
+ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_root_node;
+ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_fadt_gpe_device;
 
-extern const u8                                 acpi_gbl_ns_properties[NUM_NS_TYPES];
-extern const struct acpi_predefined_names       acpi_gbl_pre_defined_names [NUM_PREDEFINED_NAMES];
+extern const u8 acpi_gbl_ns_properties[NUM_NS_TYPES];
+extern const struct acpi_predefined_names
+    acpi_gbl_pre_defined_names[NUM_PREDEFINED_NAMES];
 
 #ifdef ACPI_DEBUG_OUTPUT
-ACPI_EXTERN u32                                 acpi_gbl_current_node_count;
-ACPI_EXTERN u32                                 acpi_gbl_current_node_size;
-ACPI_EXTERN u32                                 acpi_gbl_max_concurrent_node_count;
-ACPI_EXTERN acpi_size                           acpi_gbl_entry_stack_pointer;
-ACPI_EXTERN acpi_size                           acpi_gbl_lowest_stack_pointer;
-ACPI_EXTERN u32                                 acpi_gbl_deepest_nesting;
+ACPI_EXTERN u32 acpi_gbl_current_node_count;
+ACPI_EXTERN u32 acpi_gbl_current_node_size;
+ACPI_EXTERN u32 acpi_gbl_max_concurrent_node_count;
+ACPI_EXTERN acpi_size acpi_gbl_entry_stack_pointer;
+ACPI_EXTERN acpi_size acpi_gbl_lowest_stack_pointer;
+ACPI_EXTERN u32 acpi_gbl_deepest_nesting;
 #endif
 
-
 /*****************************************************************************
  *
  * Interpreter globals
  *
  ****************************************************************************/
 
-
-ACPI_EXTERN struct acpi_thread_state           *acpi_gbl_current_walk_list;
+ACPI_EXTERN struct acpi_thread_state *acpi_gbl_current_walk_list;
 
 /* Control method single step flag */
 
-ACPI_EXTERN u8                                  acpi_gbl_cm_single_step;
-
+ACPI_EXTERN u8 acpi_gbl_cm_single_step;
 
 /*****************************************************************************
  *
@@ -267,8 +280,7 @@ ACPI_EXTERN u8                                  acpi_gbl_cm_single_step;
  *
  ****************************************************************************/
 
-ACPI_EXTERN union acpi_parse_object            *acpi_gbl_parsed_namespace_root;
-
+ACPI_EXTERN union acpi_parse_object *acpi_gbl_parsed_namespace_root;
 
 /*****************************************************************************
  *
@@ -276,10 +288,10 @@ ACPI_EXTERN union acpi_parse_object            *acpi_gbl_parsed_namespace_root;
  *
  ****************************************************************************/
 
-extern      struct acpi_bit_register_info       acpi_gbl_bit_register_info[ACPI_NUM_BITREG];
-ACPI_EXTERN u8                                  acpi_gbl_sleep_type_a;
-ACPI_EXTERN u8                                  acpi_gbl_sleep_type_b;
-
+extern struct acpi_bit_register_info
+    acpi_gbl_bit_register_info[ACPI_NUM_BITREG];
+ACPI_EXTERN u8 acpi_gbl_sleep_type_a;
+ACPI_EXTERN u8 acpi_gbl_sleep_type_b;
 
 /*****************************************************************************
  *
@@ -287,12 +299,14 @@ ACPI_EXTERN u8                                  acpi_gbl_sleep_type_b;
  *
  ****************************************************************************/
 
-extern      struct acpi_fixed_event_info        acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS];
-ACPI_EXTERN struct acpi_fixed_event_handler     acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS];
-ACPI_EXTERN struct acpi_gpe_xrupt_info         *acpi_gbl_gpe_xrupt_list_head;
-ACPI_EXTERN struct acpi_gpe_block_info         *acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS];
-ACPI_EXTERN acpi_handle                         acpi_gbl_gpe_lock;
-
+extern struct acpi_fixed_event_info
+    acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS];
+ACPI_EXTERN struct acpi_fixed_event_handler
+    acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS];
+ACPI_EXTERN struct acpi_gpe_xrupt_info *acpi_gbl_gpe_xrupt_list_head;
+ACPI_EXTERN struct acpi_gpe_block_info
+    *acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS];
+ACPI_EXTERN acpi_handle acpi_gbl_gpe_lock;
 
 /*****************************************************************************
  *
@@ -300,58 +314,55 @@ ACPI_EXTERN acpi_handle                         acpi_gbl_gpe_lock;
  *
  ****************************************************************************/
 
-ACPI_EXTERN u8                                  acpi_gbl_db_output_flags;
+ACPI_EXTERN u8 acpi_gbl_db_output_flags;
 
 #ifdef ACPI_DISASSEMBLER
 
-ACPI_EXTERN u8                                  acpi_gbl_db_opt_disasm;
-ACPI_EXTERN u8                                  acpi_gbl_db_opt_verbose;
+ACPI_EXTERN u8 acpi_gbl_db_opt_disasm;
+ACPI_EXTERN u8 acpi_gbl_db_opt_verbose;
 #endif
 
-
 #ifdef ACPI_DEBUGGER
 
-extern      u8                                  acpi_gbl_method_executing;
-extern      u8                                  acpi_gbl_abort_method;
-extern      u8                                  acpi_gbl_db_terminate_threads;
-
-ACPI_EXTERN int                                 optind;
-ACPI_EXTERN char                               *optarg;
-
-ACPI_EXTERN u8                                  acpi_gbl_db_opt_tables;
-ACPI_EXTERN u8                                  acpi_gbl_db_opt_stats;
-ACPI_EXTERN u8                                  acpi_gbl_db_opt_ini_methods;
-
-
-ACPI_EXTERN char                               *acpi_gbl_db_args[ACPI_DEBUGGER_MAX_ARGS];
-ACPI_EXTERN char                                acpi_gbl_db_line_buf[80];
-ACPI_EXTERN char                                acpi_gbl_db_parsed_buf[80];
-ACPI_EXTERN char                                acpi_gbl_db_scope_buf[40];
-ACPI_EXTERN char                                acpi_gbl_db_debug_filename[40];
-ACPI_EXTERN u8                                  acpi_gbl_db_output_to_file;
-ACPI_EXTERN char                               *acpi_gbl_db_buffer;
-ACPI_EXTERN char                               *acpi_gbl_db_filename;
-ACPI_EXTERN u32                                 acpi_gbl_db_debug_level;
-ACPI_EXTERN u32                                 acpi_gbl_db_console_debug_level;
-ACPI_EXTERN struct acpi_table_header           *acpi_gbl_db_table_ptr;
-ACPI_EXTERN struct acpi_namespace_node         *acpi_gbl_db_scope_node;
+extern u8 acpi_gbl_method_executing;
+extern u8 acpi_gbl_abort_method;
+extern u8 acpi_gbl_db_terminate_threads;
+
+ACPI_EXTERN int optind;
+ACPI_EXTERN char *optarg;
+
+ACPI_EXTERN u8 acpi_gbl_db_opt_tables;
+ACPI_EXTERN u8 acpi_gbl_db_opt_stats;
+ACPI_EXTERN u8 acpi_gbl_db_opt_ini_methods;
+
+ACPI_EXTERN char *acpi_gbl_db_args[ACPI_DEBUGGER_MAX_ARGS];
+ACPI_EXTERN char acpi_gbl_db_line_buf[80];
+ACPI_EXTERN char acpi_gbl_db_parsed_buf[80];
+ACPI_EXTERN char acpi_gbl_db_scope_buf[40];
+ACPI_EXTERN char acpi_gbl_db_debug_filename[40];
+ACPI_EXTERN u8 acpi_gbl_db_output_to_file;
+ACPI_EXTERN char *acpi_gbl_db_buffer;
+ACPI_EXTERN char *acpi_gbl_db_filename;
+ACPI_EXTERN u32 acpi_gbl_db_debug_level;
+ACPI_EXTERN u32 acpi_gbl_db_console_debug_level;
+ACPI_EXTERN struct acpi_table_header *acpi_gbl_db_table_ptr;
+ACPI_EXTERN struct acpi_namespace_node *acpi_gbl_db_scope_node;
 
 /*
  * Statistic globals
  */
-ACPI_EXTERN u16                                 acpi_gbl_obj_type_count[ACPI_TYPE_NS_NODE_MAX+1];
-ACPI_EXTERN u16                                 acpi_gbl_node_type_count[ACPI_TYPE_NS_NODE_MAX+1];
-ACPI_EXTERN u16                                 acpi_gbl_obj_type_count_misc;
-ACPI_EXTERN u16                                 acpi_gbl_node_type_count_misc;
-ACPI_EXTERN u32                                 acpi_gbl_num_nodes;
-ACPI_EXTERN u32                                 acpi_gbl_num_objects;
-
+ACPI_EXTERN u16 acpi_gbl_obj_type_count[ACPI_TYPE_NS_NODE_MAX + 1];
+ACPI_EXTERN u16 acpi_gbl_node_type_count[ACPI_TYPE_NS_NODE_MAX + 1];
+ACPI_EXTERN u16 acpi_gbl_obj_type_count_misc;
+ACPI_EXTERN u16 acpi_gbl_node_type_count_misc;
+ACPI_EXTERN u32 acpi_gbl_num_nodes;
+ACPI_EXTERN u32 acpi_gbl_num_objects;
 
-ACPI_EXTERN u32                                 acpi_gbl_size_of_parse_tree;
-ACPI_EXTERN u32                                 acpi_gbl_size_of_method_trees;
-ACPI_EXTERN u32                                 acpi_gbl_size_of_node_entries;
-ACPI_EXTERN u32                                 acpi_gbl_size_of_acpi_objects;
+ACPI_EXTERN u32 acpi_gbl_size_of_parse_tree;
+ACPI_EXTERN u32 acpi_gbl_size_of_method_trees;
+ACPI_EXTERN u32 acpi_gbl_size_of_node_entries;
+ACPI_EXTERN u32 acpi_gbl_size_of_acpi_objects;
 
-#endif /* ACPI_DEBUGGER */
+#endif                         /* ACPI_DEBUGGER */
 
-#endif /* __ACGLOBAL_H__ */
+#endif                         /* __ACGLOBAL_H__ */
index 9d63641b8e7dc4acf02f01286b19448440f17669..3644d7248e7e7fd54bf3716b9b2b04736ab5f32e 100644 (file)
@@ -44,7 +44,6 @@
 #ifndef __ACHWARE_H__
 #define __ACHWARE_H__
 
-
 /* PM Timer ticks per second (HZ) */
 
 #define PM_TIMER_FREQUENCY  3579545
 #define ACPI_SST_SLEEPING       3
 #define ACPI_SST_SLEEP_CONTEXT  4
 
-
 /* Prototypes */
 
-
 /*
  * hwacpi - high level functions
  */
-acpi_status
-acpi_hw_initialize (
-       void);
+acpi_status acpi_hw_initialize(void);
 
-acpi_status
-acpi_hw_set_mode (
-       u32                             mode);
-
-u32
-acpi_hw_get_mode (
-       void);
+acpi_status acpi_hw_set_mode(u32 mode);
 
+u32 acpi_hw_get_mode(void);
 
 /*
  * hwregs - ACPI Register I/O
  */
-struct acpi_bit_register_info *
-acpi_hw_get_bit_register_info (
-       u32                             register_id);
-
-acpi_status
-acpi_hw_register_read (
-       u8                              use_lock,
-       u32                             register_id,
-       u32                             *return_value);
+struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id);
 
 acpi_status
-acpi_hw_register_write (
-       u8                              use_lock,
-       u32                             register_id,
-       u32                             value);
+acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value);
 
-acpi_status
-acpi_hw_low_level_read (
-       u32                             width,
-       u32                             *value,
-       struct acpi_generic_address     *reg);
+acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value);
 
 acpi_status
-acpi_hw_low_level_write (
-       u32                             width,
-       u32                             value,
-       struct acpi_generic_address     *reg);
+acpi_hw_low_level_read(u32 width,
+                      u32 * value, struct acpi_generic_address *reg);
 
 acpi_status
-acpi_hw_clear_acpi_status (
-       u32                             flags);
+acpi_hw_low_level_write(u32 width, u32 value, struct acpi_generic_address *reg);
 
+acpi_status acpi_hw_clear_acpi_status(u32 flags);
 
 /*
  * hwgpe - GPE support
  */
 acpi_status
-acpi_hw_write_gpe_enable_reg (
-       struct acpi_gpe_event_info      *gpe_event_info);
+acpi_hw_write_gpe_enable_reg(struct acpi_gpe_event_info *gpe_event_info);
 
 acpi_status
-acpi_hw_disable_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
+acpi_hw_disable_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
+                         struct acpi_gpe_block_info *gpe_block);
 
-acpi_status
-acpi_hw_clear_gpe (
-       struct acpi_gpe_event_info      *gpe_event_info);
+acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info *gpe_event_info);
 
 acpi_status
-acpi_hw_clear_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
+acpi_hw_clear_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
+                       struct acpi_gpe_block_info *gpe_block);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_hw_get_gpe_status (
-       struct acpi_gpe_event_info      *gpe_event_info,
-       acpi_event_status               *event_status);
-#endif /* ACPI_FUTURE_USAGE */
+acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info,
+                      acpi_event_status * event_status);
+#endif                         /* ACPI_FUTURE_USAGE */
 
-acpi_status
-acpi_hw_disable_all_gpes (
-       u32                             flags);
+acpi_status acpi_hw_disable_all_gpes(void);
 
-acpi_status
-acpi_hw_enable_all_runtime_gpes (
-       u32                             flags);
+acpi_status acpi_hw_enable_all_runtime_gpes(void);
 
-acpi_status
-acpi_hw_enable_all_wakeup_gpes (
-       u32                             flags);
+acpi_status acpi_hw_enable_all_wakeup_gpes(void);
 
 acpi_status
-acpi_hw_enable_runtime_gpe_block (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
-
+acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
+                                struct acpi_gpe_block_info *gpe_block);
 
 #ifdef ACPI_FUTURE_USAGE
 /*
  * hwtimer - ACPI Timer prototypes
  */
-acpi_status
-acpi_get_timer_resolution (
-       u32                             *resolution);
+acpi_status acpi_get_timer_resolution(u32 * resolution);
 
-acpi_status
-acpi_get_timer (
-       u32                             *ticks);
+acpi_status acpi_get_timer(u32 * ticks);
 
 acpi_status
-acpi_get_timer_duration (
-       u32                             start_ticks,
-       u32                             end_ticks,
-       u32                             *time_elapsed);
-#endif /* ACPI_FUTURE_USAGE */
-
+acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed);
+#endif                         /* ACPI_FUTURE_USAGE */
 
-#endif /* __ACHWARE_H__ */
+#endif                         /* __ACHWARE_H__ */
index 5c7172477a0f5d356ef9ce86bbf991e4c391b392..2c9c1a1d1b7f05c742fb51758e48bbee7f31571a 100644 (file)
 #ifndef __ACINTERP_H__
 #define __ACINTERP_H__
 
-
 #define ACPI_WALK_OPERANDS       (&(walk_state->operands [walk_state->num_operands -1]))
 
-
 /*
  * exconvrt - object conversion
  */
 acpi_status
-acpi_ex_convert_to_integer (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **result_desc,
-       u32                             flags);
+acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
+                          union acpi_operand_object **result_desc, u32 flags);
 
 acpi_status
-acpi_ex_convert_to_buffer (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **result_desc);
+acpi_ex_convert_to_buffer(union acpi_operand_object *obj_desc,
+                         union acpi_operand_object **result_desc);
 
 acpi_status
-acpi_ex_convert_to_string (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **result_desc,
-       u32                             type);
+acpi_ex_convert_to_string(union acpi_operand_object *obj_desc,
+                         union acpi_operand_object **result_desc, u32 type);
 
 /* Types for ->String conversion */
 
@@ -76,587 +69,412 @@ acpi_ex_convert_to_string (
 #define ACPI_EXPLICIT_CONVERT_DECIMAL   0x00000003
 
 acpi_status
-acpi_ex_convert_to_target_type (
-       acpi_object_type                destination_type,
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       **result_desc,
-       struct acpi_walk_state          *walk_state);
-
+acpi_ex_convert_to_target_type(acpi_object_type destination_type,
+                              union acpi_operand_object *source_desc,
+                              union acpi_operand_object **result_desc,
+                              struct acpi_walk_state *walk_state);
 
 /*
  * exfield - ACPI AML (p-code) execution - field manipulation
  */
 acpi_status
-acpi_ex_common_buffer_setup (
-       union acpi_operand_object       *obj_desc,
-       u32                             buffer_length,
-       u32                             *datum_count);
+acpi_ex_common_buffer_setup(union acpi_operand_object *obj_desc,
+                           u32 buffer_length, u32 * datum_count);
 
 acpi_status
-acpi_ex_write_with_update_rule (
-       union acpi_operand_object       *obj_desc,
-       acpi_integer                    mask,
-       acpi_integer                    field_value,
-       u32                             field_datum_byte_offset);
+acpi_ex_write_with_update_rule(union acpi_operand_object *obj_desc,
+                              acpi_integer mask,
+                              acpi_integer field_value,
+                              u32 field_datum_byte_offset);
 
 void
-acpi_ex_get_buffer_datum(
-       acpi_integer                    *datum,
-       void                            *buffer,
-       u32                             buffer_length,
-       u32                             byte_granularity,
-       u32                             buffer_offset);
+acpi_ex_get_buffer_datum(acpi_integer * datum,
+                        void *buffer,
+                        u32 buffer_length,
+                        u32 byte_granularity, u32 buffer_offset);
 
 void
-acpi_ex_set_buffer_datum (
-       acpi_integer                    merged_datum,
-       void                            *buffer,
-       u32                             buffer_length,
-       u32                             byte_granularity,
-       u32                             buffer_offset);
+acpi_ex_set_buffer_datum(acpi_integer merged_datum,
+                        void *buffer,
+                        u32 buffer_length,
+                        u32 byte_granularity, u32 buffer_offset);
 
 acpi_status
-acpi_ex_read_data_from_field (
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **ret_buffer_desc);
+acpi_ex_read_data_from_field(struct acpi_walk_state *walk_state,
+                            union acpi_operand_object *obj_desc,
+                            union acpi_operand_object **ret_buffer_desc);
 
 acpi_status
-acpi_ex_write_data_to_field (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **result_desc);
-
+acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
+                           union acpi_operand_object *obj_desc,
+                           union acpi_operand_object **result_desc);
 
 /*
  * exfldio - low level field I/O
  */
 acpi_status
-acpi_ex_extract_from_field (
-       union acpi_operand_object       *obj_desc,
-       void                            *buffer,
-       u32                             buffer_length);
+acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
+                          void *buffer, u32 buffer_length);
 
 acpi_status
-acpi_ex_insert_into_field (
-       union acpi_operand_object       *obj_desc,
-       void                            *buffer,
-       u32                             buffer_length);
+acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
+                         void *buffer, u32 buffer_length);
 
 acpi_status
-acpi_ex_access_region (
-       union acpi_operand_object       *obj_desc,
-       u32                             field_datum_byte_offset,
-       acpi_integer                    *value,
-       u32                             read_write);
-
+acpi_ex_access_region(union acpi_operand_object *obj_desc,
+                     u32 field_datum_byte_offset,
+                     acpi_integer * value, u32 read_write);
 
 /*
  * exmisc - misc support routines
  */
 acpi_status
-acpi_ex_get_object_reference (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       **return_desc,
-       struct acpi_walk_state          *walk_state);
+acpi_ex_get_object_reference(union acpi_operand_object *obj_desc,
+                            union acpi_operand_object **return_desc,
+                            struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ex_concat_template (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       *obj_desc2,
-       union acpi_operand_object       **actual_return_desc,
-       struct acpi_walk_state          *walk_state);
+acpi_ex_concat_template(union acpi_operand_object *obj_desc,
+                       union acpi_operand_object *obj_desc2,
+                       union acpi_operand_object **actual_return_desc,
+                       struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ex_do_concatenate (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       *obj_desc2,
-       union acpi_operand_object       **actual_return_desc,
-       struct acpi_walk_state          *walk_state);
+acpi_ex_do_concatenate(union acpi_operand_object *obj_desc,
+                      union acpi_operand_object *obj_desc2,
+                      union acpi_operand_object **actual_return_desc,
+                      struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ex_do_logical_numeric_op (
-       u16                             opcode,
-       acpi_integer                    integer0,
-       acpi_integer                    integer1,
-       u8                              *logical_result);
+acpi_ex_do_logical_numeric_op(u16 opcode,
+                             acpi_integer integer0,
+                             acpi_integer integer1, u8 * logical_result);
 
 acpi_status
-acpi_ex_do_logical_op (
-       u16                             opcode,
-       union acpi_operand_object       *operand0,
-       union acpi_operand_object       *operand1,
-       u8                              *logical_result);
+acpi_ex_do_logical_op(u16 opcode,
+                     union acpi_operand_object *operand0,
+                     union acpi_operand_object *operand1, u8 * logical_result);
 
 acpi_integer
-acpi_ex_do_math_op (
-       u16                             opcode,
-       acpi_integer                    operand0,
-       acpi_integer                    operand1);
+acpi_ex_do_math_op(u16 opcode, acpi_integer operand0, acpi_integer operand1);
 
-acpi_status
-acpi_ex_create_mutex (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_create_mutex(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_create_processor (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_create_processor(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_create_power_resource (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_create_power_resource(struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ex_create_region (
-       u8                              *aml_start,
-       u32                             aml_length,
-       u8                              region_space,
-       struct acpi_walk_state          *walk_state);
+acpi_ex_create_region(u8 * aml_start,
+                     u32 aml_length,
+                     u8 region_space, struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_create_table_region (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_create_table_region(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_create_event (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_create_event(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_create_alias (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_create_alias(struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ex_create_method (
-       u8                              *aml_start,
-       u32                             aml_length,
-       struct acpi_walk_state          *walk_state);
-
+acpi_ex_create_method(u8 * aml_start,
+                     u32 aml_length, struct acpi_walk_state *walk_state);
 
 /*
  * exconfig - dynamic table load/unload
  */
 acpi_status
-acpi_ex_load_op (
-       union acpi_operand_object       *obj_desc,
-       union acpi_operand_object       *target,
-       struct acpi_walk_state          *walk_state);
+acpi_ex_load_op(union acpi_operand_object *obj_desc,
+               union acpi_operand_object *target,
+               struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ex_load_table_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       **return_desc);
-
-acpi_status
-acpi_ex_unload_table (
-       union acpi_operand_object       *ddb_handle);
+acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
+                     union acpi_operand_object **return_desc);
 
+acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle);
 
 /*
  * exmutex - mutex support
  */
 acpi_status
-acpi_ex_acquire_mutex (
-       union acpi_operand_object       *time_desc,
-       union acpi_operand_object       *obj_desc,
-       struct acpi_walk_state          *walk_state);
+acpi_ex_acquire_mutex(union acpi_operand_object *time_desc,
+                     union acpi_operand_object *obj_desc,
+                     struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ex_release_mutex (
-       union acpi_operand_object       *obj_desc,
-       struct acpi_walk_state          *walk_state);
+acpi_ex_release_mutex(union acpi_operand_object *obj_desc,
+                     struct acpi_walk_state *walk_state);
 
-void
-acpi_ex_release_all_mutexes (
-       struct acpi_thread_state        *thread);
-
-void
-acpi_ex_unlink_mutex (
-       union acpi_operand_object       *obj_desc);
+void acpi_ex_release_all_mutexes(struct acpi_thread_state *thread);
 
+void acpi_ex_unlink_mutex(union acpi_operand_object *obj_desc);
 
 /*
  * exprep - ACPI AML execution - prep utilities
  */
 acpi_status
-acpi_ex_prep_common_field_object (
-       union acpi_operand_object       *obj_desc,
-       u8                              field_flags,
-       u8                              field_attribute,
-       u32                             field_bit_position,
-       u32                             field_bit_length);
-
-acpi_status
-acpi_ex_prep_field_value (
-       struct acpi_create_field_info   *info);
+acpi_ex_prep_common_field_object(union acpi_operand_object *obj_desc,
+                                u8 field_flags,
+                                u8 field_attribute,
+                                u32 field_bit_position, u32 field_bit_length);
 
+acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info);
 
 /*
  * exsystem - Interface to OS services
  */
 acpi_status
-acpi_ex_system_do_notify_op (
-       union acpi_operand_object       *value,
-       union acpi_operand_object       *obj_desc);
+acpi_ex_system_do_notify_op(union acpi_operand_object *value,
+                           union acpi_operand_object *obj_desc);
 
-acpi_status
-acpi_ex_system_do_suspend(
-       acpi_integer                    time);
+acpi_status acpi_ex_system_do_suspend(acpi_integer time);
 
-acpi_status
-acpi_ex_system_do_stall (
-       u32                             time);
+acpi_status acpi_ex_system_do_stall(u32 time);
 
 acpi_status
-acpi_ex_system_acquire_mutex(
-       union acpi_operand_object       *time,
-       union acpi_operand_object       *obj_desc);
+acpi_ex_system_acquire_mutex(union acpi_operand_object *time,
+                            union acpi_operand_object *obj_desc);
 
-acpi_status
-acpi_ex_system_release_mutex(
-       union acpi_operand_object       *obj_desc);
+acpi_status acpi_ex_system_release_mutex(union acpi_operand_object *obj_desc);
 
-acpi_status
-acpi_ex_system_signal_event(
-       union acpi_operand_object       *obj_desc);
+acpi_status acpi_ex_system_signal_event(union acpi_operand_object *obj_desc);
 
 acpi_status
-acpi_ex_system_wait_event(
-       union acpi_operand_object       *time,
-       union acpi_operand_object       *obj_desc);
+acpi_ex_system_wait_event(union acpi_operand_object *time,
+                         union acpi_operand_object *obj_desc);
 
-acpi_status
-acpi_ex_system_reset_event(
-       union acpi_operand_object       *obj_desc);
-
-acpi_status
-acpi_ex_system_wait_semaphore (
-       acpi_handle                     semaphore,
-       u16                             timeout);
+acpi_status acpi_ex_system_reset_event(union acpi_operand_object *obj_desc);
 
+acpi_status acpi_ex_system_wait_semaphore(acpi_handle semaphore, u16 timeout);
 
 /*
  * exoparg1 - ACPI AML execution, 1 operand
  */
-acpi_status
-acpi_ex_opcode_0A_0T_1R (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_opcode_0A_0T_1R(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_opcode_1A_0T_0R (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_opcode_1A_0T_0R(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_opcode_1A_0T_1R (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_opcode_1A_1T_1R (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_opcode_1A_1T_0R (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_opcode_1A_1T_0R(struct acpi_walk_state *walk_state);
 
 /*
  * exoparg2 - ACPI AML execution, 2 operands
  */
-acpi_status
-acpi_ex_opcode_2A_0T_0R (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_opcode_2A_0T_0R(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_opcode_2A_0T_1R (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_opcode_2A_0T_1R(struct acpi_walk_state *walk_state);
 
-acpi_status
-acpi_ex_opcode_2A_1T_1R (
-       struct acpi_walk_state          *walk_state);
-
-acpi_status
-acpi_ex_opcode_2A_2T_1R (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state);
 
+acpi_status acpi_ex_opcode_2A_2T_1R(struct acpi_walk_state *walk_state);
 
 /*
  * exoparg3 - ACPI AML execution, 3 operands
  */
-acpi_status
-acpi_ex_opcode_3A_0T_0R (
-       struct acpi_walk_state          *walk_state);
-
-acpi_status
-acpi_ex_opcode_3A_1T_1R (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ex_opcode_3A_0T_0R(struct acpi_walk_state *walk_state);
 
+acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state);
 
 /*
  * exoparg6 - ACPI AML execution, 6 operands
  */
-acpi_status
-acpi_ex_opcode_6A_0T_1R (
-       struct acpi_walk_state          *walk_state);
-
+acpi_status acpi_ex_opcode_6A_0T_1R(struct acpi_walk_state *walk_state);
 
 /*
  * exresolv - Object resolution and get value functions
  */
 acpi_status
-acpi_ex_resolve_to_value (
-       union acpi_operand_object       **stack_ptr,
-       struct acpi_walk_state          *walk_state);
+acpi_ex_resolve_to_value(union acpi_operand_object **stack_ptr,
+                        struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ex_resolve_multiple (
-       struct acpi_walk_state          *walk_state,
-       union acpi_operand_object       *operand,
-       acpi_object_type                *return_type,
-       union acpi_operand_object       **return_desc);
-
+acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state,
+                        union acpi_operand_object *operand,
+                        acpi_object_type * return_type,
+                        union acpi_operand_object **return_desc);
 
 /*
  * exresnte - resolve namespace node
  */
 acpi_status
-acpi_ex_resolve_node_to_value (
-       struct acpi_namespace_node      **stack_ptr,
-       struct acpi_walk_state          *walk_state);
-
+acpi_ex_resolve_node_to_value(struct acpi_namespace_node **stack_ptr,
+                             struct acpi_walk_state *walk_state);
 
 /*
  * exresop - resolve operand to value
  */
 acpi_status
-acpi_ex_resolve_operands (
-       u16                             opcode,
-       union acpi_operand_object       **stack_ptr,
-       struct acpi_walk_state          *walk_state);
-
+acpi_ex_resolve_operands(u16 opcode,
+                        union acpi_operand_object **stack_ptr,
+                        struct acpi_walk_state *walk_state);
 
 /*
  * exdump - Interpreter debug output routines
  */
-void
-acpi_ex_dump_operand (
-       union acpi_operand_object       *obj_desc,
-       u32                             depth);
+void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth);
 
 void
-acpi_ex_dump_operands (
-       union acpi_operand_object       **operands,
-       acpi_interpreter_mode           interpreter_mode,
-       char                            *ident,
-       u32                             num_levels,
-       char                            *note,
-       char                            *module_name,
-       u32                             line_number);
+acpi_ex_dump_operands(union acpi_operand_object **operands,
+                     acpi_interpreter_mode interpreter_mode,
+                     char *ident,
+                     u32 num_levels,
+                     char *note, char *module_name, u32 line_number);
 
 #ifdef ACPI_FUTURE_USAGE
 void
-acpi_ex_dump_object_descriptor (
-       union acpi_operand_object       *object,
-       u32                             flags);
-
-void
-acpi_ex_dump_node (
-       struct acpi_namespace_node      *node,
-       u32                             flags);
-#endif /* ACPI_FUTURE_USAGE */
+acpi_ex_dump_object_descriptor(union acpi_operand_object *object, u32 flags);
 
+void acpi_ex_dump_node(struct acpi_namespace_node *node, u32 flags);
+#endif                         /* ACPI_FUTURE_USAGE */
 
 /*
  * exnames - AML namestring support
  */
 acpi_status
-acpi_ex_get_name_string (
-       acpi_object_type                data_type,
-       u8                              *in_aml_address,
-       char                            **out_name_string,
-       u32                             *out_name_length);
-
+acpi_ex_get_name_string(acpi_object_type data_type,
+                       u8 * in_aml_address,
+                       char **out_name_string, u32 * out_name_length);
 
 /*
  * exstore - Object store support
  */
 acpi_status
-acpi_ex_store (
-       union acpi_operand_object       *val_desc,
-       union acpi_operand_object       *dest_desc,
-       struct acpi_walk_state          *walk_state);
+acpi_ex_store(union acpi_operand_object *val_desc,
+             union acpi_operand_object *dest_desc,
+             struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ex_store_object_to_node (
-       union acpi_operand_object       *source_desc,
-       struct acpi_namespace_node      *node,
-       struct acpi_walk_state          *walk_state,
-       u8                              implicit_conversion);
+acpi_ex_store_object_to_node(union acpi_operand_object *source_desc,
+                            struct acpi_namespace_node *node,
+                            struct acpi_walk_state *walk_state,
+                            u8 implicit_conversion);
 
 #define ACPI_IMPLICIT_CONVERSION        TRUE
 #define ACPI_NO_IMPLICIT_CONVERSION     FALSE
 
-
 /*
  * exstoren - resolve/store object
  */
 acpi_status
-acpi_ex_resolve_object (
-       union acpi_operand_object       **source_desc_ptr,
-       acpi_object_type                target_type,
-       struct acpi_walk_state          *walk_state);
+acpi_ex_resolve_object(union acpi_operand_object **source_desc_ptr,
+                      acpi_object_type target_type,
+                      struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ex_store_object_to_object (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *dest_desc,
-       union acpi_operand_object       **new_desc,
-       struct acpi_walk_state          *walk_state);
-
+acpi_ex_store_object_to_object(union acpi_operand_object *source_desc,
+                              union acpi_operand_object *dest_desc,
+                              union acpi_operand_object **new_desc,
+                              struct acpi_walk_state *walk_state);
 
 /*
  * exstorob - store object - buffer/string
  */
 acpi_status
-acpi_ex_store_buffer_to_buffer (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *target_desc);
+acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
+                              union acpi_operand_object *target_desc);
 
 acpi_status
-acpi_ex_store_string_to_string (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *target_desc);
-
+acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
+                              union acpi_operand_object *target_desc);
 
 /*
  * excopy - object copy
  */
 acpi_status
-acpi_ex_copy_integer_to_index_field (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *target_desc);
+acpi_ex_copy_integer_to_index_field(union acpi_operand_object *source_desc,
+                                   union acpi_operand_object *target_desc);
 
 acpi_status
-acpi_ex_copy_integer_to_bank_field (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *target_desc);
+acpi_ex_copy_integer_to_bank_field(union acpi_operand_object *source_desc,
+                                  union acpi_operand_object *target_desc);
 
 acpi_status
-acpi_ex_copy_data_to_named_field (
-       union acpi_operand_object       *source_desc,
-       struct acpi_namespace_node      *node);
+acpi_ex_copy_data_to_named_field(union acpi_operand_object *source_desc,
+                                struct acpi_namespace_node *node);
 
 acpi_status
-acpi_ex_copy_integer_to_buffer_field (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       *target_desc);
-
+acpi_ex_copy_integer_to_buffer_field(union acpi_operand_object *source_desc,
+                                    union acpi_operand_object *target_desc);
 
 /*
  * exutils - interpreter/scanner utilities
  */
-acpi_status
-acpi_ex_enter_interpreter (
-       void);
+acpi_status acpi_ex_enter_interpreter(void);
 
-void
-acpi_ex_exit_interpreter (
-       void);
+void acpi_ex_exit_interpreter(void);
 
-void
-acpi_ex_truncate_for32bit_table (
-       union acpi_operand_object       *obj_desc);
+void acpi_ex_truncate_for32bit_table(union acpi_operand_object *obj_desc);
 
-u8
-acpi_ex_acquire_global_lock (
-       u32                             rule);
+u8 acpi_ex_acquire_global_lock(u32 rule);
 
-void
-acpi_ex_release_global_lock (
-       u8                              locked);
+void acpi_ex_release_global_lock(u8 locked);
 
-void
-acpi_ex_eisa_id_to_string (
-       u32                             numeric_id,
-       char                            *out_string);
-
-void
-acpi_ex_unsigned_integer_to_string (
-       acpi_integer                    value,
-       char                            *out_string);
+void acpi_ex_eisa_id_to_string(u32 numeric_id, char *out_string);
 
+void acpi_ex_unsigned_integer_to_string(acpi_integer value, char *out_string);
 
 /*
  * exregion - default op_region handlers
  */
 acpi_status
-acpi_ex_system_memory_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context);
-
-acpi_status
-acpi_ex_system_io_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context);
-
-acpi_status
-acpi_ex_pci_config_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context);
-
-acpi_status
-acpi_ex_cmos_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context);
-
-acpi_status
-acpi_ex_pci_bar_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context);
-
-acpi_status
-acpi_ex_embedded_controller_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context);
-
-acpi_status
-acpi_ex_sm_bus_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context);
-
-
-acpi_status
-acpi_ex_data_table_space_handler (
-       u32                             function,
-       acpi_physical_address           address,
-       u32                             bit_width,
-       acpi_integer                    *value,
-       void                            *handler_context,
-       void                            *region_context);
-
-#endif /* __INTERP_H__ */
+acpi_ex_system_memory_space_handler(u32 function,
+                                   acpi_physical_address address,
+                                   u32 bit_width,
+                                   acpi_integer * value,
+                                   void *handler_context,
+                                   void *region_context);
+
+acpi_status
+acpi_ex_system_io_space_handler(u32 function,
+                               acpi_physical_address address,
+                               u32 bit_width,
+                               acpi_integer * value,
+                               void *handler_context, void *region_context);
+
+acpi_status
+acpi_ex_pci_config_space_handler(u32 function,
+                                acpi_physical_address address,
+                                u32 bit_width,
+                                acpi_integer * value,
+                                void *handler_context, void *region_context);
+
+acpi_status
+acpi_ex_cmos_space_handler(u32 function,
+                          acpi_physical_address address,
+                          u32 bit_width,
+                          acpi_integer * value,
+                          void *handler_context, void *region_context);
+
+acpi_status
+acpi_ex_pci_bar_space_handler(u32 function,
+                             acpi_physical_address address,
+                             u32 bit_width,
+                             acpi_integer * value,
+                             void *handler_context, void *region_context);
+
+acpi_status
+acpi_ex_embedded_controller_space_handler(u32 function,
+                                         acpi_physical_address address,
+                                         u32 bit_width,
+                                         acpi_integer * value,
+                                         void *handler_context,
+                                         void *region_context);
+
+acpi_status
+acpi_ex_sm_bus_space_handler(u32 function,
+                            acpi_physical_address address,
+                            u32 bit_width,
+                            acpi_integer * value,
+                            void *handler_context, void *region_context);
+
+acpi_status
+acpi_ex_data_table_space_handler(u32 function,
+                                acpi_physical_address address,
+                                u32 bit_width,
+                                acpi_integer * value,
+                                void *handler_context, void *region_context);
+
+#endif                         /* __INTERP_H__ */
index 030e641115cb6c663568d65a90f09eb6938bbe36..9fba0fddda909f408509de845f50955aa4c4698f 100644 (file)
 #ifndef __ACLOCAL_H__
 #define __ACLOCAL_H__
 
+#define ACPI_WAIT_FOREVER               0xFFFF /* u16, as per ACPI spec */
 
-#define ACPI_WAIT_FOREVER               0xFFFF  /* u16, as per ACPI spec */
-
-typedef void *                                  acpi_mutex;
-typedef u32                                     acpi_mutex_handle;
-
+typedef void *acpi_mutex;
+typedef u32 acpi_mutex_handle;
 
 /* Total number of aml opcodes defined */
 
 #define AML_NUM_OPCODES                 0x7F
 
+/* Forward declarations */
+
+struct acpi_walk_state;
+struct acpi_obj_mutex;
+union acpi_parse_object;
 
 /*****************************************************************************
  *
@@ -62,7 +65,6 @@ typedef u32                                     acpi_mutex_handle;
  *
  ****************************************************************************/
 
-
 /*
  * Predefined handles for the mutex objects used within the subsystem
  * All mutex objects are automatically created by acpi_ut_mutex_initialize.
@@ -89,14 +91,12 @@ typedef u32                                     acpi_mutex_handle;
 #define MAX_MUTEX                       12
 #define NUM_MUTEX                       MAX_MUTEX+1
 
-
 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 #ifdef DEFINE_ACPI_GLOBALS
 
 /* Names for the mutexes used in the subsystem */
 
-static char                         *acpi_gbl_mutex_names[] =
-{
+static char *acpi_gbl_mutex_names[] = {
        "ACPI_MTX_Execute",
        "ACPI_MTX_Interpreter",
        "ACPI_MTX_Parser",
@@ -115,34 +115,28 @@ static char                         *acpi_gbl_mutex_names[] =
 #endif
 #endif
 
+/* Owner IDs are used to track namespace nodes for selective deletion */
 
-/* Table for the global mutexes */
+typedef u8 acpi_owner_id;
+#define ACPI_OWNER_ID_MAX               0xFF
 
-struct acpi_mutex_info
-{
-       acpi_mutex                          mutex;
-       u32                                 use_count;
-       u32                                 owner_id;
-};
+/* This Thread ID means that the mutex is not in use (unlocked) */
 
-/* This owner ID means that the mutex is not in use (unlocked) */
+#define ACPI_MUTEX_NOT_ACQUIRED         (u32) -1
 
-#define ACPI_MUTEX_NOT_ACQUIRED         (u32) (-1)
+/* Table for the global mutexes */
 
+struct acpi_mutex_info {
+       acpi_mutex mutex;
+       u32 use_count;
+       u32 thread_id;
+};
 
 /* Lock flag parameter for various interfaces */
 
 #define ACPI_MTX_DO_NOT_LOCK            0
 #define ACPI_MTX_LOCK                   1
 
-
-typedef u16                                     acpi_owner_id;
-#define ACPI_OWNER_TYPE_TABLE           0x0
-#define ACPI_OWNER_TYPE_METHOD          0x1
-#define ACPI_FIRST_METHOD_ID            0x0001
-#define ACPI_FIRST_TABLE_ID             0xF000
-
-
 /* Field access granularities */
 
 #define ACPI_FIELD_BYTE_GRANULARITY     1
@@ -150,7 +144,6 @@ typedef u16                                     acpi_owner_id;
 #define ACPI_FIELD_DWORD_GRANULARITY    4
 #define ACPI_FIELD_QWORD_GRANULARITY    8
 
-
 /*****************************************************************************
  *
  * Namespace typedefs and structs
@@ -159,15 +152,12 @@ typedef u16                                     acpi_owner_id;
 
 /* Operational modes of the AML interpreter/scanner */
 
-typedef enum
-{
-       ACPI_IMODE_LOAD_PASS1               = 0x01,
-       ACPI_IMODE_LOAD_PASS2               = 0x02,
-       ACPI_IMODE_EXECUTE                  = 0x0E
-
+typedef enum {
+       ACPI_IMODE_LOAD_PASS1 = 0x01,
+       ACPI_IMODE_LOAD_PASS2 = 0x02,
+       ACPI_IMODE_EXECUTE = 0x0E
 } acpi_interpreter_mode;
 
-
 /*
  * The Node describes a named object that appears in the AML
  * An acpi_node is used to store Nodes.
@@ -175,34 +165,37 @@ typedef enum
  * data_type is used to differentiate between internal descriptors, and MUST
  * be the first byte in this structure.
  */
-union acpi_name_union
-{
-       u32                                 integer;
-       char                                ascii[4];
-};
-
-struct acpi_namespace_node
-{
-       u8                                  descriptor;     /* Used to differentiate object descriptor types */
-       u8                                  type;           /* Type associated with this name */
-       u16                                 owner_id;
-       union acpi_name_union               name;           /* ACPI Name, always 4 chars per ACPI spec */
-       union acpi_operand_object           *object;        /* Pointer to attached ACPI object (optional) */
-       struct acpi_namespace_node          *child;         /* First child */
-       struct acpi_namespace_node          *peer;          /* Next peer*/
-       u16                                 reference_count; /* Current count of references and children */
-       u8                                  flags;
+union acpi_name_union {
+       u32 integer;
+       char ascii[4];
+};
+
+struct acpi_namespace_node {
+       u8 descriptor;          /* Used to differentiate object descriptor types */
+       u8 type;                /* Type associated with this name */
+       u16 reference_count;    /* Current count of references and children */
+       union acpi_name_union name;     /* ACPI Name, always 4 chars per ACPI spec */
+       union acpi_operand_object *object;      /* Pointer to attached ACPI object (optional) */
+       struct acpi_namespace_node *child;      /* First child */
+       struct acpi_namespace_node *peer;       /* Next peer */
+       u8 owner_id;            /* Who created this node */
+       u8 flags;
+
+       /* Fields used by the ASL compiler only */
+
+#ifdef ACPI_ASL_COMPILER
+       u32 value;
+       union acpi_parse_object *op;
+#endif
 };
 
-
 #define ACPI_ENTRY_NOT_FOUND            NULL
 
-
 /* Node flags */
 
 #define ANOBJ_RESERVED                  0x01
 #define ANOBJ_END_OF_PEER_LIST          0x02
-#define ANOBJ_DATA_WIDTH_32             0x04     /* Parent table is 64-bits */
+#define ANOBJ_DATA_WIDTH_32             0x04   /* Parent table is 64-bits */
 #define ANOBJ_METHOD_ARG                0x08
 #define ANOBJ_METHOD_LOCAL              0x10
 #define ANOBJ_METHOD_NO_RETVAL          0x20
@@ -212,91 +205,77 @@ struct acpi_namespace_node
 /*
  * ACPI Table Descriptor.  One per ACPI table
  */
-struct acpi_table_desc
-{
-       struct acpi_table_desc          *prev;
-       struct acpi_table_desc          *next;
-       struct acpi_table_desc          *installed_desc;
-       struct acpi_table_header        *pointer;
-       u8                              *aml_start;
-       u64                             physical_address;
-       u32                             aml_length;
-       acpi_size                       length;
-       acpi_owner_id                   table_id;
-       u8                              type;
-       u8                              allocation;
-       u8                              loaded_into_namespace;
+struct acpi_table_desc {
+       struct acpi_table_desc *prev;
+       struct acpi_table_desc *next;
+       struct acpi_table_desc *installed_desc;
+       struct acpi_table_header *pointer;
+       u8 *aml_start;
+       u64 physical_address;
+       u32 aml_length;
+       acpi_size length;
+       acpi_owner_id owner_id;
+       u8 type;
+       u8 allocation;
+       u8 loaded_into_namespace;
 };
 
-struct acpi_table_list
-{
-       struct acpi_table_desc          *next;
-       u32                             count;
+struct acpi_table_list {
+       struct acpi_table_desc *next;
+       u32 count;
 };
 
-
-struct acpi_find_context
-{
-       char                            *search_for;
-       acpi_handle                     *list;
-       u32                             *count;
+struct acpi_find_context {
+       char *search_for;
+       acpi_handle *list;
+       u32 *count;
 };
 
-
-struct acpi_ns_search_data
-{
-       struct acpi_namespace_node      *node;
+struct acpi_ns_search_data {
+       struct acpi_namespace_node *node;
 };
 
-
 /*
  * Predefined Namespace items
  */
-struct acpi_predefined_names
-{
-       char                            *name;
-       u8                              type;
-       char                            *val;
+struct acpi_predefined_names {
+       char *name;
+       u8 type;
+       char *val;
 };
 
-
 /* Object types used during package copies */
 
-
 #define ACPI_COPY_TYPE_SIMPLE           0
 #define ACPI_COPY_TYPE_PACKAGE          1
 
 /* Info structure used to convert external<->internal namestrings */
 
-struct acpi_namestring_info
-{
-       char                            *external_name;
-       char                            *next_external_char;
-       char                            *internal_name;
-       u32                             length;
-       u32                             num_segments;
-       u32                             num_carats;
-       u8                              fully_qualified;
+struct acpi_namestring_info {
+       char *external_name;
+       char *next_external_char;
+       char *internal_name;
+       u32 length;
+       u32 num_segments;
+       u32 num_carats;
+       u8 fully_qualified;
 };
 
-
 /* Field creation info */
 
-struct acpi_create_field_info
-{
-       struct acpi_namespace_node      *region_node;
-       struct acpi_namespace_node      *field_node;
-       struct acpi_namespace_node      *register_node;
-       struct acpi_namespace_node      *data_register_node;
-       u32                             bank_value;
-       u32                             field_bit_position;
-       u32                             field_bit_length;
-       u8                              field_flags;
-       u8                              attribute;
-       u8                              field_type;
+struct acpi_create_field_info {
+       struct acpi_namespace_node *region_node;
+       struct acpi_namespace_node *field_node;
+       struct acpi_namespace_node *register_node;
+       struct acpi_namespace_node *data_register_node;
+       u32 bank_value;
+       u32 field_bit_position;
+       u32 field_bit_length;
+       u8 field_flags;
+       u8 attribute;
+       u8 field_type;
 };
 
-
 /*****************************************************************************
  *
  * Event typedefs and structs
@@ -305,108 +284,95 @@ struct acpi_create_field_info
 
 /* Dispatch info for each GPE -- either a method or handler, cannot be both */
 
-struct acpi_handler_info
-{
-       acpi_event_handler                      address;        /* Address of handler, if any */
-       void                                    *context;       /* Context to be passed to handler */
-       struct acpi_namespace_node              *method_node;   /* Method node for this GPE level (saved) */
+struct acpi_handler_info {
+       acpi_event_handler address;     /* Address of handler, if any */
+       void *context;          /* Context to be passed to handler */
+       struct acpi_namespace_node *method_node;        /* Method node for this GPE level (saved) */
 };
 
-union acpi_gpe_dispatch_info
-{
-       struct acpi_namespace_node              *method_node;   /* Method node for this GPE level */
-       struct acpi_handler_info                *handler;
+union acpi_gpe_dispatch_info {
+       struct acpi_namespace_node *method_node;        /* Method node for this GPE level */
+       struct acpi_handler_info *handler;
 };
 
 /*
  * Information about a GPE, one per each GPE in an array.
  * NOTE: Important to keep this struct as small as possible.
  */
-struct acpi_gpe_event_info
-{
-       union acpi_gpe_dispatch_info    dispatch;       /* Either Method or Handler */
-       struct acpi_gpe_register_info           *register_info; /* Backpointer to register info */
-       u8                                      flags;          /* Misc info about this GPE */
-       u8                                      register_bit;   /* This GPE bit within the register */
+struct acpi_gpe_event_info {
+       union acpi_gpe_dispatch_info dispatch;  /* Either Method or Handler */
+       struct acpi_gpe_register_info *register_info;   /* Backpointer to register info */
+       u8 flags;               /* Misc info about this GPE */
+       u8 register_bit;        /* This GPE bit within the register */
 };
 
 /* Information about a GPE register pair, one per each status/enable pair in an array */
 
-struct acpi_gpe_register_info
-{
-       struct acpi_generic_address             status_address; /* Address of status reg */
-       struct acpi_generic_address             enable_address; /* Address of enable reg */
-       u8                                      enable_for_wake; /* GPEs to keep enabled when sleeping */
-       u8                                      enable_for_run; /* GPEs to keep enabled when running */
-       u8                                      base_gpe_number; /* Base GPE number for this register */
+struct acpi_gpe_register_info {
+       struct acpi_generic_address status_address;     /* Address of status reg */
+       struct acpi_generic_address enable_address;     /* Address of enable reg */
+       u8 enable_for_wake;     /* GPEs to keep enabled when sleeping */
+       u8 enable_for_run;      /* GPEs to keep enabled when running */
+       u8 base_gpe_number;     /* Base GPE number for this register */
 };
 
 /*
  * Information about a GPE register block, one per each installed block --
  * GPE0, GPE1, and one per each installed GPE Block Device.
  */
-struct acpi_gpe_block_info
-{
-       struct acpi_namespace_node              *node;
-       struct acpi_gpe_block_info              *previous;
-       struct acpi_gpe_block_info              *next;
-       struct acpi_gpe_xrupt_info              *xrupt_block;   /* Backpointer to interrupt block */
-       struct acpi_gpe_register_info           *register_info; /* One per GPE register pair */
-       struct acpi_gpe_event_info              *event_info;    /* One for each GPE */
-       struct acpi_generic_address             block_address;  /* Base address of the block */
-       u32                                     register_count; /* Number of register pairs in block */
-       u8                                      block_base_number;/* Base GPE number for this block */
+struct acpi_gpe_block_info {
+       struct acpi_namespace_node *node;
+       struct acpi_gpe_block_info *previous;
+       struct acpi_gpe_block_info *next;
+       struct acpi_gpe_xrupt_info *xrupt_block;        /* Backpointer to interrupt block */
+       struct acpi_gpe_register_info *register_info;   /* One per GPE register pair */
+       struct acpi_gpe_event_info *event_info; /* One for each GPE */
+       struct acpi_generic_address block_address;      /* Base address of the block */
+       u32 register_count;     /* Number of register pairs in block */
+       u8 block_base_number;   /* Base GPE number for this block */
 };
 
 /* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */
 
-struct acpi_gpe_xrupt_info
-{
-       struct acpi_gpe_xrupt_info              *previous;
-       struct acpi_gpe_xrupt_info              *next;
-       struct acpi_gpe_block_info              *gpe_block_list_head; /* List of GPE blocks for this xrupt */
-       u32                                     interrupt_level;    /* System interrupt level */
+struct acpi_gpe_xrupt_info {
+       struct acpi_gpe_xrupt_info *previous;
+       struct acpi_gpe_xrupt_info *next;
+       struct acpi_gpe_block_info *gpe_block_list_head;        /* List of GPE blocks for this xrupt */
+       u32 interrupt_number;   /* System interrupt number */
 };
 
-
-struct acpi_gpe_walk_info
-{
-       struct acpi_namespace_node              *gpe_device;
-       struct acpi_gpe_block_info              *gpe_block;
+struct acpi_gpe_walk_info {
+       struct acpi_namespace_node *gpe_device;
+       struct acpi_gpe_block_info *gpe_block;
 };
 
-
-typedef acpi_status (*ACPI_GPE_CALLBACK) (
-       struct acpi_gpe_xrupt_info      *gpe_xrupt_info,
-       struct acpi_gpe_block_info      *gpe_block);
-
+typedef acpi_status(*ACPI_GPE_CALLBACK) (struct acpi_gpe_xrupt_info *
+                                        gpe_xrupt_info,
+                                        struct acpi_gpe_block_info *
+                                        gpe_block);
 
 /* Information about each particular fixed event */
 
-struct acpi_fixed_event_handler
-{
-       acpi_event_handler              handler;        /* Address of handler. */
-       void                            *context;       /* Context to be passed to handler */
+struct acpi_fixed_event_handler {
+       acpi_event_handler handler;     /* Address of handler. */
+       void *context;          /* Context to be passed to handler */
 };
 
-struct acpi_fixed_event_info
-{
-       u8                              status_register_id;
-       u8                              enable_register_id;
-       u16                             status_bit_mask;
-       u16                             enable_bit_mask;
+struct acpi_fixed_event_info {
+       u8 status_register_id;
+       u8 enable_register_id;
+       u16 status_bit_mask;
+       u16 enable_bit_mask;
 };
 
 /* Information used during field processing */
 
-struct acpi_field_info
-{
-       u8                              skip_field;
-       u8                              field_flag;
-       u32                             pkg_length;
+struct acpi_field_info {
+       u8 skip_field;
+       u8 field_flag;
+       u32 pkg_length;
 };
 
-
 /*****************************************************************************
  *
  * Generic "state" object for stacks
@@ -419,14 +385,6 @@ struct acpi_field_info
 #define ACPI_CONTROL_PREDICATE_FALSE         0xC3
 #define ACPI_CONTROL_PREDICATE_TRUE          0xC4
 
-
-/* Forward declarations */
-
-struct acpi_walk_state        ;
-struct acpi_obj_mutex;
-union acpi_parse_object        ;
-
-
 #define ACPI_STATE_COMMON                  /* Two 32-bit fields and a pointer */\
        u8                                  data_type;          /* To differentiate various internal objs */\
        u8                                  flags;      \
@@ -435,147 +393,112 @@ union acpi_parse_object        ;
        u16                                 reserved;   \
        void                                *next;      \
 
-struct acpi_common_state
-{
-       ACPI_STATE_COMMON
-};
-
+struct acpi_common_state {
+ACPI_STATE_COMMON};
 
 /*
  * Update state - used to traverse complex objects such as packages
  */
-struct acpi_update_state
-{
-       ACPI_STATE_COMMON
-       union acpi_operand_object           *object;
+struct acpi_update_state {
+       ACPI_STATE_COMMON union acpi_operand_object *object;
 };
 
-
 /*
  * Pkg state - used to traverse nested package structures
  */
-struct acpi_pkg_state
-{
-       ACPI_STATE_COMMON
-       union acpi_operand_object           *source_object;
-       union acpi_operand_object           *dest_object;
-       struct acpi_walk_state              *walk_state;
-       void                                *this_target_obj;
-       u32                                 num_packages;
-       u16                                 index;
+struct acpi_pkg_state {
+       ACPI_STATE_COMMON union acpi_operand_object *source_object;
+       union acpi_operand_object *dest_object;
+       struct acpi_walk_state *walk_state;
+       void *this_target_obj;
+       u32 num_packages;
+       u16 index;
 };
 
-
 /*
  * Control state - one per if/else and while constructs.
  * Allows nesting of these constructs
  */
-struct acpi_control_state
-{
-       ACPI_STATE_COMMON
-       union acpi_parse_object             *predicate_op;
-       u8                                  *aml_predicate_start;   /* Start of if/while predicate */
-       u8                                  *package_end;           /* End of if/while block */
-       u16                                 opcode;
+struct acpi_control_state {
+       ACPI_STATE_COMMON union acpi_parse_object *predicate_op;
+       u8 *aml_predicate_start;        /* Start of if/while predicate */
+       u8 *package_end;        /* End of if/while block */
+       u16 opcode;
 };
 
-
 /*
  * Scope state - current scope during namespace lookups
  */
-struct acpi_scope_state
-{
-       ACPI_STATE_COMMON
-       struct acpi_namespace_node          *node;
+struct acpi_scope_state {
+       ACPI_STATE_COMMON struct acpi_namespace_node *node;
 };
 
-
-struct acpi_pscope_state
-{
-       ACPI_STATE_COMMON
-       union acpi_parse_object             *op;                    /* Current op being parsed */
-       u8                                  *arg_end;               /* Current argument end */
-       u8                                  *pkg_end;               /* Current package end */
-       u32                                 arg_list;               /* Next argument to parse */
-       u32                                 arg_count;              /* Number of fixed arguments */
+struct acpi_pscope_state {
+       ACPI_STATE_COMMON union acpi_parse_object *op;  /* Current op being parsed */
+       u8 *arg_end;            /* Current argument end */
+       u8 *pkg_end;            /* Current package end */
+       u32 arg_list;           /* Next argument to parse */
+       u32 arg_count;          /* Number of fixed arguments */
 };
 
-
 /*
  * Thread state - one per thread across multiple walk states.  Multiple walk
  * states are created when there are nested control methods executing.
  */
-struct acpi_thread_state
-{
-       ACPI_STATE_COMMON
-       struct acpi_walk_state              *walk_state_list;       /* Head of list of walk_states for this thread */
-       union acpi_operand_object           *acquired_mutex_list;   /* List of all currently acquired mutexes */
-       u32                                 thread_id;              /* Running thread ID */
-       u8                                  current_sync_level;     /* Mutex Sync (nested acquire) level */
+struct acpi_thread_state {
+       ACPI_STATE_COMMON struct acpi_walk_state *walk_state_list;      /* Head of list of walk_states for this thread */
+       union acpi_operand_object *acquired_mutex_list; /* List of all currently acquired mutexes */
+       u32 thread_id;          /* Running thread ID */
+       u8 current_sync_level;  /* Mutex Sync (nested acquire) level */
 };
 
-
 /*
  * Result values - used to accumulate the results of nested
  * AML arguments
  */
-struct acpi_result_values
-{
+struct acpi_result_values {
        ACPI_STATE_COMMON
-       union acpi_operand_object           *obj_desc [ACPI_OBJ_NUM_OPERANDS];
-       u8                                  num_results;
-       u8                                  last_insert;
+           union acpi_operand_object *obj_desc[ACPI_OBJ_NUM_OPERANDS];
+       u8 num_results;
+       u8 last_insert;
 };
 
-
-typedef
-acpi_status (*acpi_parse_downwards) (
-       struct acpi_walk_state              *walk_state,
-       union acpi_parse_object             **out_op);
-
 typedef
-acpi_status (*acpi_parse_upwards) (
-       struct acpi_walk_state              *walk_state);
+acpi_status(*acpi_parse_downwards) (struct acpi_walk_state * walk_state,
+                                   union acpi_parse_object ** out_op);
 
+typedef acpi_status(*acpi_parse_upwards) (struct acpi_walk_state * walk_state);
 
 /*
  * Notify info - used to pass info to the deferred notify
  * handler/dispatcher.
  */
-struct acpi_notify_info
-{
-       ACPI_STATE_COMMON
-       struct acpi_namespace_node          *node;
-       union acpi_operand_object           *handler_obj;
+struct acpi_notify_info {
+       ACPI_STATE_COMMON struct acpi_namespace_node *node;
+       union acpi_operand_object *handler_obj;
 };
 
-
 /* Generic state is union of structs above */
 
-union acpi_generic_state
-{
-       struct acpi_common_state            common;
-       struct acpi_control_state           control;
-       struct acpi_update_state            update;
-       struct acpi_scope_state             scope;
-       struct acpi_pscope_state            parse_scope;
-       struct acpi_pkg_state               pkg;
-       struct acpi_thread_state            thread;
-       struct acpi_result_values           results;
-       struct acpi_notify_info             notify;
+union acpi_generic_state {
+       struct acpi_common_state common;
+       struct acpi_control_state control;
+       struct acpi_update_state update;
+       struct acpi_scope_state scope;
+       struct acpi_pscope_state parse_scope;
+       struct acpi_pkg_state pkg;
+       struct acpi_thread_state thread;
+       struct acpi_result_values results;
+       struct acpi_notify_info notify;
 };
 
-
 /*****************************************************************************
  *
  * Interpreter typedefs and structs
  *
  ****************************************************************************/
 
-typedef
-acpi_status (*ACPI_EXECUTE_OP) (
-       struct acpi_walk_state              *walk_state);
-
+typedef acpi_status(*ACPI_EXECUTE_OP) (struct acpi_walk_state * walk_state);
 
 /*****************************************************************************
  *
@@ -586,28 +509,26 @@ acpi_status (*ACPI_EXECUTE_OP) (
 /*
  * AML opcode, name, and argument layout
  */
-struct acpi_opcode_info
-{
+struct acpi_opcode_info {
 #if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
-       char                                *name;          /* Opcode name (disassembler/debug only) */
+       char *name;             /* Opcode name (disassembler/debug only) */
 #endif
-       u32                                 parse_args;     /* Grammar/Parse time arguments */
-       u32                                 runtime_args;   /* Interpret time arguments */
-       u32                                 flags;          /* Misc flags */
-       u8                                  object_type;    /* Corresponding internal object type */
-       u8                                  class;          /* Opcode class */
-       u8                                  type;           /* Opcode type */
+       u32 parse_args;         /* Grammar/Parse time arguments */
+       u32 runtime_args;       /* Interpret time arguments */
+       u32 flags;              /* Misc flags */
+       u8 object_type;         /* Corresponding internal object type */
+       u8 class;               /* Opcode class */
+       u8 type;                /* Opcode type */
 };
 
-union acpi_parse_value
-{
-       acpi_integer                        integer;        /* Integer constant (Up to 64 bits) */
-       struct uint64_struct                integer64;      /* Structure overlay for 2 32-bit Dwords */
-       u32                                 size;           /* bytelist or field size */
-       char                                *string;        /* NULL terminated string */
-       u8                                  *buffer;        /* buffer or string */
-       char                                *name;          /* NULL terminated string */
-       union acpi_parse_object             *arg;           /* arguments and contained ops */
+union acpi_parse_value {
+       acpi_integer integer;   /* Integer constant (Up to 64 bits) */
+       struct uint64_struct integer64; /* Structure overlay for 2 32-bit Dwords */
+       u32 size;               /* bytelist or field size */
+       char *string;           /* NULL terminated string */
+       u8 *buffer;             /* buffer or string */
+       char *name;             /* NULL terminated string */
+       union acpi_parse_object *arg;   /* arguments and contained ops */
 };
 
 #define ACPI_PARSE_COMMON \
@@ -636,84 +557,72 @@ union acpi_parse_value
 /*
  * generic operation (for example:  If, While, Store)
  */
-struct acpi_parse_obj_common
-{
-       ACPI_PARSE_COMMON
-};
-
+struct acpi_parse_obj_common {
+ACPI_PARSE_COMMON};
 
 /*
  * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and op_regions),
  * and bytelists.
  */
-struct acpi_parse_obj_named
-{
-       ACPI_PARSE_COMMON
-       u8                                  *path;
-       u8                                  *data;          /* AML body or bytelist data */
-       u32                                 length;         /* AML length */
-       u32                                 name;           /* 4-byte name or zero if no name */
+struct acpi_parse_obj_named {
+       ACPI_PARSE_COMMON u8 * path;
+       u8 *data;               /* AML body or bytelist data */
+       u32 length;             /* AML length */
+       u32 name;               /* 4-byte name or zero if no name */
 };
 
-
 /* The parse node is the fundamental element of the parse tree */
 
-struct acpi_parse_obj_asl
-{
-       ACPI_PARSE_COMMON
-       union acpi_parse_object             *child;
-       union acpi_parse_object             *parent_method;
-       char                                *filename;
-       char                                *external_name;
-       char                                *namepath;
-       char                                name_seg[4];
-       u32                                 extra_value;
-       u32                                 column;
-       u32                                 line_number;
-       u32                                 logical_line_number;
-       u32                                 logical_byte_offset;
-       u32                                 end_line;
-       u32                                 end_logical_line;
-       u32                                 acpi_btype;
-       u32                                 aml_length;
-       u32                                 aml_subtree_length;
-       u32                                 final_aml_length;
-       u32                                 final_aml_offset;
-       u32                                 compile_flags;
-       u16                                 parse_opcode;
-       u8                                  aml_opcode_length;
-       u8                                  aml_pkg_len_bytes;
-       u8                                  extra;
-       char                                parse_op_name[12];
-};
-
-union acpi_parse_object
-{
-       struct acpi_parse_obj_common        common;
-       struct acpi_parse_obj_named         named;
-       struct acpi_parse_obj_asl           asl;
+struct acpi_parse_obj_asl {
+       ACPI_PARSE_COMMON union acpi_parse_object *child;
+       union acpi_parse_object *parent_method;
+       char *filename;
+       char *external_name;
+       char *namepath;
+       char name_seg[4];
+       u32 extra_value;
+       u32 column;
+       u32 line_number;
+       u32 logical_line_number;
+       u32 logical_byte_offset;
+       u32 end_line;
+       u32 end_logical_line;
+       u32 acpi_btype;
+       u32 aml_length;
+       u32 aml_subtree_length;
+       u32 final_aml_length;
+       u32 final_aml_offset;
+       u32 compile_flags;
+       u16 parse_opcode;
+       u8 aml_opcode_length;
+       u8 aml_pkg_len_bytes;
+       u8 extra;
+       char parse_op_name[12];
+};
+
+union acpi_parse_object {
+       struct acpi_parse_obj_common common;
+       struct acpi_parse_obj_named named;
+       struct acpi_parse_obj_asl asl;
 };
 
-
 /*
  * Parse state - one state per parser invocation and each control
  * method.
  */
-struct acpi_parse_state
-{
-       u32                                 aml_size;
-       u8                                  *aml_start;     /* First AML byte */
-       u8                                  *aml;           /* Next AML byte */
-       u8                                  *aml_end;       /* (last + 1) AML byte */
-       u8                                  *pkg_start;     /* Current package begin */
-       u8                                  *pkg_end;       /* Current package end */
-       union acpi_parse_object             *start_op;      /* Root of parse tree */
-       struct acpi_namespace_node          *start_node;
-       union acpi_generic_state            *scope;         /* Current scope */
-       union acpi_parse_object             *start_scope;
+struct acpi_parse_state {
+       u32 aml_size;
+       u8 *aml_start;          /* First AML byte */
+       u8 *aml;                /* Next AML byte */
+       u8 *aml_end;            /* (last + 1) AML byte */
+       u8 *pkg_start;          /* Current package begin */
+       u8 *pkg_end;            /* Current package end */
+       union acpi_parse_object *start_op;      /* Root of parse tree */
+       struct acpi_namespace_node *start_node;
+       union acpi_generic_state *scope;        /* Current scope */
+       union acpi_parse_object *start_scope;
 };
 
-
 /* Parse object flags */
 
 #define ACPI_PARSEOP_GENERIC                    0x01
@@ -729,7 +638,6 @@ struct acpi_parse_state
 #define ACPI_PARSEOP_EMPTY_TERMLIST             0x04
 #define ACPI_PARSEOP_SPECIAL                    0x10
 
-
 /*****************************************************************************
  *
  * Hardware (ACPI registers) and PNP
@@ -737,15 +645,14 @@ struct acpi_parse_state
  ****************************************************************************/
 
 #define PCI_ROOT_HID_STRING         "PNP0A03"
+#define PCI_EXPRESS_ROOT_HID_STRING "PNP0A08"
 
-struct acpi_bit_register_info
-{
-       u8                                  parent_register;
-       u8                                  bit_position;
-       u16                                 access_bit_mask;
+struct acpi_bit_register_info {
+       u8 parent_register;
+       u8 bit_position;
+       u16 access_bit_mask;
 };
 
-
 /*
  * Register IDs
  * These are the full ACPI registers
@@ -760,7 +667,6 @@ struct acpi_bit_register_info
 #define ACPI_REGISTER_PROCESSOR_BLOCK           0x08
 #define ACPI_REGISTER_SMI_COMMAND_BLOCK         0x09
 
-
 /* Masks used to access the bit_registers */
 
 #define ACPI_BITMASK_TIMER_STATUS               0x0001
@@ -769,7 +675,7 @@ struct acpi_bit_register_info
 #define ACPI_BITMASK_POWER_BUTTON_STATUS        0x0100
 #define ACPI_BITMASK_SLEEP_BUTTON_STATUS        0x0200
 #define ACPI_BITMASK_RT_CLOCK_STATUS            0x0400
-#define ACPI_BITMASK_PCIEXP_WAKE_STATUS         0x4000    /* ACPI 3.0 */
+#define ACPI_BITMASK_PCIEXP_WAKE_STATUS         0x4000 /* ACPI 3.0 */
 #define ACPI_BITMASK_WAKE_STATUS                0x8000
 
 #define ACPI_BITMASK_ALL_FIXED_STATUS           (ACPI_BITMASK_TIMER_STATUS          | \
@@ -785,7 +691,7 @@ struct acpi_bit_register_info
 #define ACPI_BITMASK_POWER_BUTTON_ENABLE        0x0100
 #define ACPI_BITMASK_SLEEP_BUTTON_ENABLE        0x0200
 #define ACPI_BITMASK_RT_CLOCK_ENABLE            0x0400
-#define ACPI_BITMASK_PCIEXP_WAKE_DISABLE        0x4000    /* ACPI 3.0 */
+#define ACPI_BITMASK_PCIEXP_WAKE_DISABLE        0x4000 /* ACPI 3.0 */
 
 #define ACPI_BITMASK_SCI_ENABLE                 0x0001
 #define ACPI_BITMASK_BUS_MASTER_RLD             0x0002
@@ -795,7 +701,6 @@ struct acpi_bit_register_info
 
 #define ACPI_BITMASK_ARB_DISABLE                0x0001
 
-
 /* Raw bit position of each bit_register */
 
 #define ACPI_BITPOSITION_TIMER_STATUS           0x00
@@ -804,7 +709,7 @@ struct acpi_bit_register_info
 #define ACPI_BITPOSITION_POWER_BUTTON_STATUS    0x08
 #define ACPI_BITPOSITION_SLEEP_BUTTON_STATUS    0x09
 #define ACPI_BITPOSITION_RT_CLOCK_STATUS        0x0A
-#define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS     0x0E    /* ACPI 3.0 */
+#define ACPI_BITPOSITION_PCIEXP_WAKE_STATUS     0x0E   /* ACPI 3.0 */
 #define ACPI_BITPOSITION_WAKE_STATUS            0x0F
 
 #define ACPI_BITPOSITION_TIMER_ENABLE           0x00
@@ -812,7 +717,7 @@ struct acpi_bit_register_info
 #define ACPI_BITPOSITION_POWER_BUTTON_ENABLE    0x08
 #define ACPI_BITPOSITION_SLEEP_BUTTON_ENABLE    0x09
 #define ACPI_BITPOSITION_RT_CLOCK_ENABLE        0x0A
-#define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE    0x0E    /* ACPI 3.0 */
+#define ACPI_BITPOSITION_PCIEXP_WAKE_DISABLE    0x0E   /* ACPI 3.0 */
 
 #define ACPI_BITPOSITION_SCI_ENABLE             0x00
 #define ACPI_BITPOSITION_BUS_MASTER_RLD         0x01
@@ -822,7 +727,6 @@ struct acpi_bit_register_info
 
 #define ACPI_BITPOSITION_ARB_DISABLE            0x00
 
-
 /*****************************************************************************
  *
  * Resource descriptors
@@ -841,8 +745,7 @@ struct acpi_bit_register_info
 #define ACPI_RDESC_TYPE_SMALL                   0x00
 
 #define ACPI_RDESC_TYPE_MASK                    0x80
-#define ACPI_RDESC_SMALL_MASK                   0x78 /* Only bits 6:3 contain the type */
-
+#define ACPI_RDESC_SMALL_MASK                   0x78   /* Only bits 6:3 contain the type */
 
 /*
  * Small resource descriptor types
@@ -871,7 +774,6 @@ struct acpi_bit_register_info
 #define ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE     0x8A
 #define ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE  0x8B
 
-
 /*****************************************************************************
  *
  * Miscellaneous
@@ -880,49 +782,36 @@ struct acpi_bit_register_info
 
 #define ACPI_ASCII_ZERO                      0x30
 
-
 /*****************************************************************************
  *
  * Debugger
  *
  ****************************************************************************/
 
-struct acpi_db_method_info
-{
-       acpi_handle                     thread_gate;
-       char                            *name;
-       char                            **args;
-       u32                             flags;
-       u32                             num_loops;
-       char                            pathname[128];
+struct acpi_db_method_info {
+       acpi_handle thread_gate;
+       char *name;
+       char **args;
+       u32 flags;
+       u32 num_loops;
+       char pathname[128];
 };
 
-struct acpi_integrity_info
-{
-       u32                         nodes;
-       u32                         objects;
+struct acpi_integrity_info {
+       u32 nodes;
+       u32 objects;
 };
 
-
 #define ACPI_DB_REDIRECTABLE_OUTPUT  0x01
 #define ACPI_DB_CONSOLE_OUTPUT       0x02
 #define ACPI_DB_DUPLICATE_OUTPUT     0x03
 
-
 /*****************************************************************************
  *
  * Debug
  *
  ****************************************************************************/
 
-struct acpi_debug_print_info
-{
-       u32                             component_id;
-       char                            *proc_name;
-       char                            *module_name;
-};
-
-
 /* Entry for a memory allocation (debug only) */
 
 #define ACPI_MEM_MALLOC                      0
@@ -938,51 +827,36 @@ struct acpi_debug_print_info
        char                                module[ACPI_MAX_MODULE_NAME]; \
        u8                                  alloc_type;
 
-struct acpi_debug_mem_header
-{
-       ACPI_COMMON_DEBUG_MEM_HEADER
-};
+struct acpi_debug_mem_header {
+ACPI_COMMON_DEBUG_MEM_HEADER};
 
-struct acpi_debug_mem_block
-{
-       ACPI_COMMON_DEBUG_MEM_HEADER
-       u64                                 user_space;
+struct acpi_debug_mem_block {
+       ACPI_COMMON_DEBUG_MEM_HEADER u64 user_space;
 };
 
-
 #define ACPI_MEM_LIST_GLOBAL            0
 #define ACPI_MEM_LIST_NSNODE            1
+#define ACPI_MEM_LIST_MAX               1
+#define ACPI_NUM_MEM_LISTS              2
 
-#define ACPI_MEM_LIST_FIRST_CACHE_LIST  2
-#define ACPI_MEM_LIST_STATE             2
-#define ACPI_MEM_LIST_PSNODE            3
-#define ACPI_MEM_LIST_PSNODE_EXT        4
-#define ACPI_MEM_LIST_OPERAND           5
-#define ACPI_MEM_LIST_WALK              6
-#define ACPI_MEM_LIST_MAX               6
-#define ACPI_NUM_MEM_LISTS              7
-
-
-struct acpi_memory_list
-{
-       void                                *list_head;
-       u16                                 link_offset;
-       u16                                 max_cache_depth;
-       u16                                 cache_depth;
-       u16                                 object_size;
+struct acpi_memory_list {
+       char *list_name;
+       void *list_head;
+       u16 object_size;
+       u16 max_depth;
+       u16 current_depth;
+       u16 link_offset;
 
 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
 
        /* Statistics for debug memory tracking only */
 
-       u32                                 total_allocated;
-       u32                                 total_freed;
-       u32                                 current_total_size;
-       u32                                 cache_requests;
-       u32                                 cache_hits;
-       char                                *list_name;
+       u32 total_allocated;
+       u32 total_freed;
+       u32 current_total_size;
+       u32 requests;
+       u32 hits;
 #endif
 };
 
-
-#endif /* __ACLOCAL_H__ */
+#endif                         /* __ACLOCAL_H__ */
index 09be937d2c3916217bd501a89dac5f1dc74159be..702cc4e57f5f727b431e494a794154aead07f760 100644 (file)
@@ -44,7 +44,6 @@
 #ifndef __ACMACROS_H__
 #define __ACMACROS_H__
 
-
 /*
  * Data manipulation macros
  */
@@ -57,7 +56,6 @@
 #define ACPI_CLEAR_BIT(target,bit)      ((target) &= ~(bit))
 #define ACPI_MIN(a,b)                   (((a)<(b))?(a):(b))
 
-
 #if ACPI_MACHINE_WIDTH == 16
 
 /*
 
 /* 32-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate to 16 */
+#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* Truncate to 16 */
 
 #define ACPI_MOVE_32_TO_32(d,s)         {((  u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[3];\
                                                                          ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[2];\
 
 /* 64-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate to 16 */
+#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* Truncate to 16 */
 
-#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)    /* Truncate to 32 */
+#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)        /* Truncate to 32 */
 
 #define ACPI_MOVE_64_TO_64(d,s)         {((  u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[7];\
                                                                                 ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[6];\
 
 /* 32-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate to 16 */
+#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* Truncate to 16 */
 #define ACPI_MOVE_32_TO_32(d,s)         *(u32 *)(void *)(d) = *(u32 *)(void *)(s)
 #define ACPI_MOVE_32_TO_64(d,s)         ACPI_MOVE_32_TO_32(d,s)
 
 /* 64-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate to 16 */
-#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)    /* Truncate to 32 */
+#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* Truncate to 16 */
+#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)        /* Truncate to 32 */
 #define ACPI_MOVE_64_TO_64(d,s)         ACPI_MOVE_32_TO_32(d,s)
 
 #else
 
 /* 32-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate to 16 */
+#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* Truncate to 16 */
 #define ACPI_MOVE_32_TO_32(d,s)         *(u32 *)(void *)(d) = *(u32 *)(void *)(s)
 #define ACPI_MOVE_32_TO_64(d,s)         *(u64 *)(void *)(d) = *(u32 *)(void *)(s)
 
 /* 64-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate to 16 */
-#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)    /* Truncate to 32 */
+#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* Truncate to 16 */
+#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)        /* Truncate to 32 */
 #define ACPI_MOVE_64_TO_64(d,s)         *(u64 *)(void *)(d) = *(u64 *)(void *)(s)
 #endif
 
 
 /* 32-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate to 16 */
+#define ACPI_MOVE_32_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* Truncate to 16 */
 
 #define ACPI_MOVE_32_TO_32(d,s)         {((  u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
                                                                                 ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
 
 /* 64-bit source, 16/32/64 destination */
 
-#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)    /* Truncate to 16 */
-#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)    /* Truncate to 32 */
+#define ACPI_MOVE_64_TO_16(d,s)         ACPI_MOVE_16_TO_16(d,s)        /* Truncate to 16 */
+#define ACPI_MOVE_64_TO_32(d,s)         ACPI_MOVE_32_TO_32(d,s)        /* Truncate to 32 */
 #define ACPI_MOVE_64_TO_64(d,s)         {((  u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0];\
                                                                                 ((  u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1];\
                                                                                 ((  u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2];\
 #error unknown ACPI_MACHINE_WIDTH
 #endif
 
-
 /*
  * Fast power-of-two math macros for non-optimized compilers
  */
 #define ACPI_MUL_16(a)                  _ACPI_MUL(a,4)
 #define ACPI_MOD_16(a)                  _ACPI_MOD(a,16)
 
-
 /*
  * Rounding macros (Power of two boundaries only)
  */
 #define ACPI_ROUND_UP_to_64_bITS(a)          ACPI_ROUND_UP(a,8)
 #define ACPI_ROUND_UP_TO_NATIVE_WORD(a)      ACPI_ROUND_UP(a,ALIGNED_ADDRESS_BOUNDARY)
 
-
 #define ACPI_ROUND_BITS_UP_TO_BYTES(a)       ACPI_DIV_8((a) + 7)
 #define ACPI_ROUND_BITS_DOWN_TO_BYTES(a)     ACPI_DIV_8((a))
 
 
 #define ACPI_IS_OCTAL_DIGIT(d)               (((char)(d) >= '0') && ((char)(d) <= '7'))
 
-
 /* Bitfields within ACPI registers */
 
 #define ACPI_REGISTER_PREPARE_BITS(val, pos, mask)      ((val << pos) & mask)
 #define ACPI_GET_DESCRIPTOR_TYPE(d)     (((union acpi_descriptor *)(void *)(d))->descriptor_id)
 #define ACPI_SET_DESCRIPTOR_TYPE(d,t)   (((union acpi_descriptor *)(void *)(d))->descriptor_id = t)
 
-
 /* Macro to test the object type */
 
 #define ACPI_GET_OBJECT_TYPE(d)         (((union acpi_operand_object *)(void *)(d))->common.type)
 #define GET_CURRENT_ARG_TYPE(list)      (list & ((u32) 0x1F))
 #define INCREMENT_ARG_LIST(list)        (list >>= ((u32) ARG_TYPE_WIDTH))
 
-
 /*
  * Reporting macros that are never compiled out
  */
 #define ACPI_PARAM_LIST(pl)                 pl
 
 /*
- * Error reporting.  These versions add callers module and line#.  Since
- * _THIS_MODULE gets compiled out when ACPI_DEBUG_OUTPUT isn't defined, only
- * use it in debug mode.
+ * Error reporting.  These versions add callers module and line#.
+ *
+ * Since _acpi_module_name gets compiled out when ACPI_DEBUG_OUTPUT
+ * isn't defined, only use it in debug mode.
  */
 #ifdef ACPI_DEBUG_OUTPUT
 
-#define ACPI_REPORT_INFO(fp)                {acpi_ut_report_info(_THIS_MODULE,__LINE__,_COMPONENT); \
+#define ACPI_REPORT_INFO(fp)                {acpi_ut_report_info(_acpi_module_name,__LINE__,_COMPONENT); \
                                                                                                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define ACPI_REPORT_ERROR(fp)               {acpi_ut_report_error(_THIS_MODULE,__LINE__,_COMPONENT); \
+#define ACPI_REPORT_ERROR(fp)               {acpi_ut_report_error(_acpi_module_name,__LINE__,_COMPONENT); \
                                                                                                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define ACPI_REPORT_WARNING(fp)             {acpi_ut_report_warning(_THIS_MODULE,__LINE__,_COMPONENT); \
+#define ACPI_REPORT_WARNING(fp)             {acpi_ut_report_warning(_acpi_module_name,__LINE__,_COMPONENT); \
                                                                                                acpi_os_printf ACPI_PARAM_LIST(fp);}
-#define ACPI_REPORT_NSERROR(s,e)            acpi_ns_report_error(_THIS_MODULE,__LINE__,_COMPONENT, s, e);
+#define ACPI_REPORT_NSERROR(s,e)            acpi_ns_report_error(_acpi_module_name,__LINE__,_COMPONENT, s, e);
 
-#define ACPI_REPORT_METHOD_ERROR(s,n,p,e)   acpi_ns_report_method_error(_THIS_MODULE,__LINE__,_COMPONENT, s, n, p, e);
+#define ACPI_REPORT_METHOD_ERROR(s,n,p,e)   acpi_ns_report_method_error(_acpi_module_name,__LINE__,_COMPONENT, s, n, p, e);
 
 #else
 
  * Debug macros that are conditionally compiled
  */
 #ifdef ACPI_DEBUG_OUTPUT
+#define ACPI_MODULE_NAME(name)          static char ACPI_UNUSED_VAR *_acpi_module_name = name;
 
-#define ACPI_MODULE_NAME(name)               static char ACPI_UNUSED_VAR *_THIS_MODULE = name;
+/*
+ * Common parameters used for debug output functions:
+ * line number, function name, module(file) name, component ID
+ */
+#define ACPI_DEBUG_PARAMETERS           __LINE__, ACPI_GET_FUNCTION_NAME, _acpi_module_name, _COMPONENT
 
 /*
- * Function entry tracing.
- * The first parameter should be the procedure name as a quoted string.  This is declared
- * as a local string ("_proc_name) so that it can be also used by the function exit macros below.
+ * Function entry tracing
+ */
+
+/*
+ * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header,
+ * define it now. This is the case where there the compiler does not support
+ * a __FUNCTION__ macro or equivalent. We save the function name on the
+ * local stack.
+ */
+#ifndef ACPI_GET_FUNCTION_NAME
+#define ACPI_GET_FUNCTION_NAME          _acpi_function_name
+/*
+ * The Name parameter should be the procedure name as a quoted string.
+ * This is declared as a local string ("my_function_name") so that it can
+ * be also used by the function exit macros below.
+ * Note: (const char) is used to be compatible with the debug interfaces
+ * and macros such as __FUNCTION__.
  */
-#define ACPI_FUNCTION_NAME(a)               struct acpi_debug_print_info _debug_info; \
-                                                                                               _debug_info.component_id = _COMPONENT; \
-                                                                                               _debug_info.proc_name  = a; \
-                                                                                               _debug_info.module_name = _THIS_MODULE;
-
-#define ACPI_FUNCTION_TRACE(a)              ACPI_FUNCTION_NAME(a) \
-                                                                                               acpi_ut_trace(__LINE__,&_debug_info)
-#define ACPI_FUNCTION_TRACE_PTR(a,b)        ACPI_FUNCTION_NAME(a) \
-                                                                                               acpi_ut_trace_ptr(__LINE__,&_debug_info,(void *)b)
-#define ACPI_FUNCTION_TRACE_U32(a,b)        ACPI_FUNCTION_NAME(a) \
-                                                                                               acpi_ut_trace_u32(__LINE__,&_debug_info,(u32)b)
-#define ACPI_FUNCTION_TRACE_STR(a,b)        ACPI_FUNCTION_NAME(a) \
-                                                                                               acpi_ut_trace_str(__LINE__,&_debug_info,(char *)b)
-
-#define ACPI_FUNCTION_ENTRY()               acpi_ut_track_stack_ptr()
+#define ACPI_FUNCTION_NAME(name)        const char *_acpi_function_name = name;
+
+#else
+/* Compiler supports __FUNCTION__ (or equivalent) -- Ignore this macro */
+
+#define ACPI_FUNCTION_NAME(name)
+#endif
+
+#define ACPI_FUNCTION_TRACE(a)          ACPI_FUNCTION_NAME(a) \
+                                                                                       acpi_ut_trace(ACPI_DEBUG_PARAMETERS)
+#define ACPI_FUNCTION_TRACE_PTR(a,b)    ACPI_FUNCTION_NAME(a) \
+                                                                                       acpi_ut_trace_ptr(ACPI_DEBUG_PARAMETERS,(void *)b)
+#define ACPI_FUNCTION_TRACE_U32(a,b)    ACPI_FUNCTION_NAME(a) \
+                                                                                       acpi_ut_trace_u32(ACPI_DEBUG_PARAMETERS,(u32)b)
+#define ACPI_FUNCTION_TRACE_STR(a,b)    ACPI_FUNCTION_NAME(a) \
+                                                                                       acpi_ut_trace_str(ACPI_DEBUG_PARAMETERS,(char *)b)
+
+#define ACPI_FUNCTION_ENTRY()           acpi_ut_track_stack_ptr()
 
 /*
  * Function exit tracing.
  * WARNING: These macros include a return statement.  This is usually considered
  * bad form, but having a separate exit macro is very ugly and difficult to maintain.
  * One of the FUNCTION_TRACE macros above must be used in conjunction with these macros
- * so that "_proc_name" is defined.
+ * so that "_acpi_function_name" is defined.
  */
 #ifdef ACPI_USE_DO_WHILE_0
 #define ACPI_DO_WHILE0(a)               do a while(0)
 #define ACPI_DO_WHILE0(a)               a
 #endif
 
-#define return_VOID                     ACPI_DO_WHILE0 ({acpi_ut_exit(__LINE__,&_debug_info);return;})
-#define return_ACPI_STATUS(s)           ACPI_DO_WHILE0 ({acpi_ut_status_exit(__LINE__,&_debug_info,(s));return((s));})
-#define return_VALUE(s)                 ACPI_DO_WHILE0 ({acpi_ut_value_exit(__LINE__,&_debug_info,(acpi_integer)(s));return((s));})
-#define return_PTR(s)                   ACPI_DO_WHILE0 ({acpi_ut_ptr_exit(__LINE__,&_debug_info,(u8 *)(s));return((s));})
+#define return_VOID                     ACPI_DO_WHILE0 ({acpi_ut_exit(ACPI_DEBUG_PARAMETERS);return;})
+#define return_ACPI_STATUS(s)           ACPI_DO_WHILE0 ({acpi_ut_status_exit(ACPI_DEBUG_PARAMETERS,(s));return((s));})
+#define return_VALUE(s)                 ACPI_DO_WHILE0 ({acpi_ut_value_exit(ACPI_DEBUG_PARAMETERS,(acpi_integer)(s));return((s));})
+#define return_PTR(s)                   ACPI_DO_WHILE0 ({acpi_ut_ptr_exit(ACPI_DEBUG_PARAMETERS,(u8 *)(s));return((s));})
 
 /* Conditional execution */
 
 #define ACPI_DEBUG_ONLY_MEMBERS(a)      a;
 #define _VERBOSE_STRUCTURES
 
-
 /* Stack and buffer dumping */
 
 #define ACPI_DUMP_STACK_ENTRY(a)        acpi_ex_dump_operand((a),0)
-#define ACPI_DUMP_OPERANDS(a,b,c,d,e)   acpi_ex_dump_operands(a,b,c,d,e,_THIS_MODULE,__LINE__)
-
+#define ACPI_DUMP_OPERANDS(a,b,c,d,e)   acpi_ex_dump_operands(a,b,c,d,e,_acpi_module_name,__LINE__)
 
 #define ACPI_DUMP_ENTRY(a,b)            acpi_ns_dump_entry (a,b)
 #define ACPI_DUMP_PATHNAME(a,b,c,d)     acpi_ns_dump_pathname(a,b,c,d)
 #define ACPI_DUMP_BUFFER(a,b)           acpi_ut_dump_buffer((u8 *)a,b,DB_BYTE_DISPLAY,_COMPONENT)
 #define ACPI_BREAK_MSG(a)               acpi_os_signal (ACPI_SIGNAL_BREAKPOINT,(a))
 
-
 /*
  * Generate INT3 on ACPI_ERROR (Debug only!)
  */
 #define ACPI_DEBUG_PRINT(pl)            acpi_ut_debug_print ACPI_PARAM_LIST(pl)
 #define ACPI_DEBUG_PRINT_RAW(pl)        acpi_ut_debug_print_raw ACPI_PARAM_LIST(pl)
 
-
 #else
 /*
  * This is the non-debug case -- make everything go away,
  * leaving no executable debug code!
  */
 #define ACPI_MODULE_NAME(name)
-#define _THIS_MODULE ""
+#define _acpi_module_name ""
 
 #define ACPI_DEBUG_EXEC(a)
 #define ACPI_NORMAL_EXEC(a)             a;
 #define ACPI_DEBUGGER_EXEC(a)
 #endif
 
-
 /*
  * For 16-bit code, we want to shrink some things even though
  * we are using ACPI_DEBUG_OUTPUT to get the debug output
 #define ACPI_DEBUG_ONLY_MEMBERS(a)
 #endif
 
-
 #ifdef ACPI_DEBUG_OUTPUT
 /*
  * 1) Set name to blanks
 #define ACPI_ADD_OBJECT_NAME(a,b)
 #endif
 
-
 /*
  * Memory allocation tracking (DEBUG ONLY)
  */
 
 /* Memory allocation */
 
-#define ACPI_MEM_ALLOCATE(a)            acpi_ut_allocate((acpi_size)(a),_COMPONENT,_THIS_MODULE,__LINE__)
-#define ACPI_MEM_CALLOCATE(a)           acpi_ut_callocate((acpi_size)(a), _COMPONENT,_THIS_MODULE,__LINE__)
+#define ACPI_MEM_ALLOCATE(a)            acpi_ut_allocate((acpi_size)(a),_COMPONENT,_acpi_module_name,__LINE__)
+#define ACPI_MEM_CALLOCATE(a)           acpi_ut_callocate((acpi_size)(a), _COMPONENT,_acpi_module_name,__LINE__)
 #define ACPI_MEM_FREE(a)                acpi_os_free(a)
 #define ACPI_MEM_TRACKING(a)
 
-
 #else
 
 /* Memory allocation */
 
-#define ACPI_MEM_ALLOCATE(a)            acpi_ut_allocate_and_track((acpi_size)(a),_COMPONENT,_THIS_MODULE,__LINE__)
-#define ACPI_MEM_CALLOCATE(a)           acpi_ut_callocate_and_track((acpi_size)(a), _COMPONENT,_THIS_MODULE,__LINE__)
-#define ACPI_MEM_FREE(a)                acpi_ut_free_and_track(a,_COMPONENT,_THIS_MODULE,__LINE__)
+#define ACPI_MEM_ALLOCATE(a)            acpi_ut_allocate_and_track((acpi_size)(a),_COMPONENT,_acpi_module_name,__LINE__)
+#define ACPI_MEM_CALLOCATE(a)           acpi_ut_callocate_and_track((acpi_size)(a), _COMPONENT,_acpi_module_name,__LINE__)
+#define ACPI_MEM_FREE(a)                acpi_ut_free_and_track(a,_COMPONENT,_acpi_module_name,__LINE__)
 #define ACPI_MEM_TRACKING(a)            a
 
-#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
+#endif                         /* ACPI_DBG_TRACK_ALLOCATIONS */
 
-#endif /* ACMACROS_H */
+#endif                         /* ACMACROS_H */
index deb7cb06f5f0a0639e50bb6498d4d0d866990307..4f9063f3e951af91b66c6d876acb14b3fb1b0dd6 100644 (file)
 
 /* Definitions of the predefined namespace names  */
 
-#define ACPI_UNKNOWN_NAME       (u32) 0x3F3F3F3F     /* Unknown name is  "????" */
-#define ACPI_ROOT_NAME          (u32) 0x5F5F5F5C     /* Root name is     "\___" */
-#define ACPI_SYS_BUS_NAME       (u32) 0x5F53425F     /* Sys bus name is  "_SB_" */
+#define ACPI_UNKNOWN_NAME       (u32) 0x3F3F3F3F       /* Unknown name is "????" */
+#define ACPI_ROOT_NAME          (u32) 0x5F5F5F5C       /* Root name is    "\___" */
+
+#define ACPI_PREFIX_MIXED       (u32) 0x69706341       /* "Acpi" */
+#define ACPI_PREFIX_LOWER       (u32) 0x69706361       /* "acpi" */
 
 #define ACPI_NS_ROOT_PATH       "\\"
 #define ACPI_NS_SYSTEM_BUS      "_SB_"
 
-
-#endif  /* __ACNAMES_H__  */
-
-
+#endif                         /* __ACNAMES_H__  */
index d1b3ce80056f44f878dc53111c37c1768ae5318a..dd3501f7e5d683bb47110fd47e5b16f838d88be3 100644 (file)
@@ -44,7 +44,6 @@
 #ifndef __ACNAMESP_H__
 #define __ACNAMESP_H__
 
-
 /* To search the entire name space, pass this as search_base */
 
 #define ACPI_NS_ALL                 ((acpi_handle)0)
@@ -54,8 +53,8 @@
  * and should be one-to-one with values of acpi_object_type
  */
 #define ACPI_NS_NORMAL              0
-#define ACPI_NS_NEWSCOPE            1   /* a definition of this type opens a name scope */
-#define ACPI_NS_LOCAL               2   /* suppress search of enclosing scopes */
+#define ACPI_NS_NEWSCOPE            1  /* a definition of this type opens a name scope */
+#define ACPI_NS_LOCAL               2  /* suppress search of enclosing scopes */
 
 /* Flags for acpi_ns_lookup, acpi_ns_search_and_enter */
 
 #define ACPI_NS_WALK_UNLOCK         TRUE
 #define ACPI_NS_WALK_NO_UNLOCK      FALSE
 
-
 /*
  * nsinit - Namespace initialization
  */
-acpi_status
-acpi_ns_initialize_objects (
-       void);
-
-acpi_status
-acpi_ns_initialize_devices (
-       void);
+acpi_status acpi_ns_initialize_objects(void);
 
+acpi_status acpi_ns_initialize_devices(void);
 
 /*
  * nsload -  Namespace loading
  */
-acpi_status
-acpi_ns_load_namespace (
-       void);
+acpi_status acpi_ns_load_namespace(void);
 
 acpi_status
-acpi_ns_load_table (
-       struct acpi_table_desc          *table_desc,
-       struct acpi_namespace_node      *node);
-
+acpi_ns_load_table(struct acpi_table_desc *table_desc,
+                  struct acpi_namespace_node *node);
 
 /*
  * nswalk - walk the namespace
  */
 acpi_status
-acpi_ns_walk_namespace (
-       acpi_object_type                type,
-       acpi_handle                     start_object,
-       u32                             max_depth,
-       u8                              unlock_before_callback,
-       acpi_walk_callback              user_function,
-       void                            *context,
-       void                            **return_value);
-
-struct acpi_namespace_node *
-acpi_ns_get_next_node (
-       acpi_object_type                type,
-       struct acpi_namespace_node      *parent,
-       struct acpi_namespace_node      *child);
-
+acpi_ns_walk_namespace(acpi_object_type type,
+                      acpi_handle start_object,
+                      u32 max_depth,
+                      u8 unlock_before_callback,
+                      acpi_walk_callback user_function,
+                      void *context, void **return_value);
+
+struct acpi_namespace_node *acpi_ns_get_next_node(acpi_object_type type,
+                                                 struct acpi_namespace_node
+                                                 *parent,
+                                                 struct acpi_namespace_node
+                                                 *child);
 
 /*
  * nsparse - table parsing
  */
 acpi_status
-acpi_ns_parse_table (
-       struct acpi_table_desc          *table_desc,
-       struct acpi_namespace_node      *scope);
+acpi_ns_parse_table(struct acpi_table_desc *table_desc,
+                   struct acpi_namespace_node *scope);
 
 acpi_status
-acpi_ns_one_complete_parse (
-       u32                             pass_number,
-       struct acpi_table_desc          *table_desc);
-
+acpi_ns_one_complete_parse(u8 pass_number, struct acpi_table_desc *table_desc);
 
 /*
  * nsaccess - Top-level namespace access
  */
-acpi_status
-acpi_ns_root_initialize (
-       void);
+acpi_status acpi_ns_root_initialize(void);
 
 acpi_status
-acpi_ns_lookup (
-       union acpi_generic_state        *scope_info,
-       char                            *name,
-       acpi_object_type                type,
-       acpi_interpreter_mode           interpreter_mode,
-       u32                             flags,
-       struct acpi_walk_state          *walk_state,
-       struct acpi_namespace_node      **ret_node);
-
+acpi_ns_lookup(union acpi_generic_state *scope_info,
+              char *name,
+              acpi_object_type type,
+              acpi_interpreter_mode interpreter_mode,
+              u32 flags,
+              struct acpi_walk_state *walk_state,
+              struct acpi_namespace_node **ret_node);
 
 /*
  * nsalloc - Named object allocation/deallocation
  */
-struct acpi_namespace_node *
-acpi_ns_create_node (
-       u32                             name);
-
-void
-acpi_ns_delete_node (
-       struct acpi_namespace_node      *node);
+struct acpi_namespace_node *acpi_ns_create_node(u32 name);
 
-void
-acpi_ns_delete_namespace_subtree (
-       struct acpi_namespace_node      *parent_handle);
+void acpi_ns_delete_node(struct acpi_namespace_node *node);
 
 void
-acpi_ns_delete_namespace_by_owner (
-       u16                             table_id);
+acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_handle);
 
-void
-acpi_ns_detach_object (
-       struct acpi_namespace_node      *node);
+void acpi_ns_delete_namespace_by_owner(acpi_owner_id owner_id);
 
-void
-acpi_ns_delete_children (
-       struct acpi_namespace_node      *parent);
+void acpi_ns_detach_object(struct acpi_namespace_node *node);
 
-int
-acpi_ns_compare_names (
-       char                            *name1,
-       char                            *name2);
+void acpi_ns_delete_children(struct acpi_namespace_node *parent);
 
+int acpi_ns_compare_names(char *name1, char *name2);
 
 /*
  * nsdump - Namespace dump/print utilities
  */
 #ifdef ACPI_FUTURE_USAGE
-void
-acpi_ns_dump_tables (
-       acpi_handle                     search_base,
-       u32                             max_depth);
-#endif /* ACPI_FUTURE_USAGE */
+void acpi_ns_dump_tables(acpi_handle search_base, u32 max_depth);
+#endif                         /* ACPI_FUTURE_USAGE */
 
-void
-acpi_ns_dump_entry (
-       acpi_handle                     handle,
-       u32                             debug_level);
+void acpi_ns_dump_entry(acpi_handle handle, u32 debug_level);
 
 void
-acpi_ns_dump_pathname (
-       acpi_handle                     handle,
-       char                            *msg,
-       u32                             level,
-       u32                             component);
+acpi_ns_dump_pathname(acpi_handle handle, char *msg, u32 level, u32 component);
 
-void
-acpi_ns_print_pathname (
-       u32                             num_segments,
-       char                            *pathname);
+void acpi_ns_print_pathname(u32 num_segments, char *pathname);
 
 acpi_status
-acpi_ns_dump_one_object (
-       acpi_handle                     obj_handle,
-       u32                             level,
-       void                            *context,
-       void                            **return_value);
+acpi_ns_dump_one_object(acpi_handle obj_handle,
+                       u32 level, void *context, void **return_value);
 
 #ifdef ACPI_FUTURE_USAGE
 void
-acpi_ns_dump_objects (
-       acpi_object_type                type,
-       u8                              display_type,
-       u32                             max_depth,
-       u32                             ownder_id,
-       acpi_handle                     start_handle);
-#endif /* ACPI_FUTURE_USAGE */
-
+acpi_ns_dump_objects(acpi_object_type type,
+                    u8 display_type,
+                    u32 max_depth,
+                    acpi_owner_id owner_id, acpi_handle start_handle);
+#endif                         /* ACPI_FUTURE_USAGE */
 
 /*
  * nseval - Namespace evaluation functions
  */
-acpi_status
-acpi_ns_evaluate_by_handle (
-       struct acpi_parameter_info      *info);
+acpi_status acpi_ns_evaluate_by_handle(struct acpi_parameter_info *info);
 
 acpi_status
-acpi_ns_evaluate_by_name (
-       char                            *pathname,
-       struct acpi_parameter_info      *info);
+acpi_ns_evaluate_by_name(char *pathname, struct acpi_parameter_info *info);
 
 acpi_status
-acpi_ns_evaluate_relative (
-       char                            *pathname,
-       struct acpi_parameter_info      *info);
-
+acpi_ns_evaluate_relative(char *pathname, struct acpi_parameter_info *info);
 
 /*
  * nsnames - Name and Scope manipulation
  */
-u32
-acpi_ns_opens_scope (
-       acpi_object_type                type);
+u32 acpi_ns_opens_scope(acpi_object_type type);
 
-char *
-acpi_ns_get_external_pathname (
-       struct acpi_namespace_node      *node);
+char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node);
 
-char *
-acpi_ns_name_of_current_scope (
-       struct acpi_walk_state          *walk_state);
+char *acpi_ns_name_of_current_scope(struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ns_handle_to_pathname (
-       acpi_handle                     target_handle,
-       struct acpi_buffer              *buffer);
+acpi_ns_handle_to_pathname(acpi_handle target_handle,
+                          struct acpi_buffer *buffer);
 
 u8
-acpi_ns_pattern_match (
-       struct acpi_namespace_node      *obj_node,
-       char                            *search_for);
+acpi_ns_pattern_match(struct acpi_namespace_node *obj_node, char *search_for);
 
 acpi_status
-acpi_ns_get_node_by_path (
-       char                            *external_pathname,
-       struct acpi_namespace_node      *in_prefix_node,
-       u32                             flags,
-       struct acpi_namespace_node      **out_node);
-
-acpi_size
-acpi_ns_get_pathname_length (
-       struct acpi_namespace_node      *node);
+acpi_ns_get_node_by_path(char *external_pathname,
+                        struct acpi_namespace_node *in_prefix_node,
+                        u32 flags, struct acpi_namespace_node **out_node);
 
+acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node);
 
 /*
  * nsobject - Object management for namespace nodes
  */
 acpi_status
-acpi_ns_attach_object (
-       struct acpi_namespace_node      *node,
-       union acpi_operand_object       *object,
-       acpi_object_type                type);
+acpi_ns_attach_object(struct acpi_namespace_node *node,
+                     union acpi_operand_object *object, acpi_object_type type);
 
-union acpi_operand_object *
-acpi_ns_get_attached_object (
-       struct acpi_namespace_node      *node);
+union acpi_operand_object *acpi_ns_get_attached_object(struct
+                                                      acpi_namespace_node
+                                                      *node);
 
-union acpi_operand_object *
-acpi_ns_get_secondary_object (
-       union acpi_operand_object       *obj_desc);
+union acpi_operand_object *acpi_ns_get_secondary_object(union
+                                                       acpi_operand_object
+                                                       *obj_desc);
 
 acpi_status
-acpi_ns_attach_data (
-       struct acpi_namespace_node      *node,
-       acpi_object_handler             handler,
-       void                            *data);
+acpi_ns_attach_data(struct acpi_namespace_node *node,
+                   acpi_object_handler handler, void *data);
 
 acpi_status
-acpi_ns_detach_data (
-       struct acpi_namespace_node      *node,
-       acpi_object_handler             handler);
+acpi_ns_detach_data(struct acpi_namespace_node *node,
+                   acpi_object_handler handler);
 
 acpi_status
-acpi_ns_get_attached_data (
-       struct acpi_namespace_node      *node,
-       acpi_object_handler             handler,
-       void                            **data);
-
+acpi_ns_get_attached_data(struct acpi_namespace_node *node,
+                         acpi_object_handler handler, void **data);
 
 /*
  * nssearch - Namespace searching and entry
  */
 acpi_status
-acpi_ns_search_and_enter (
-       u32                             entry_name,
-       struct acpi_walk_state          *walk_state,
-       struct acpi_namespace_node      *node,
-       acpi_interpreter_mode           interpreter_mode,
-       acpi_object_type                type,
-       u32                             flags,
-       struct acpi_namespace_node      **ret_node);
+acpi_ns_search_and_enter(u32 entry_name,
+                        struct acpi_walk_state *walk_state,
+                        struct acpi_namespace_node *node,
+                        acpi_interpreter_mode interpreter_mode,
+                        acpi_object_type type,
+                        u32 flags, struct acpi_namespace_node **ret_node);
 
 acpi_status
-acpi_ns_search_node (
-       u32                             entry_name,
-       struct acpi_namespace_node      *node,
-       acpi_object_type                type,
-       struct acpi_namespace_node      **ret_node);
+acpi_ns_search_node(u32 entry_name,
+                   struct acpi_namespace_node *node,
+                   acpi_object_type type,
+                   struct acpi_namespace_node **ret_node);
 
 void
-acpi_ns_install_node (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_namespace_node      *parent_node,
-       struct acpi_namespace_node      *node,
-       acpi_object_type                type);
-
+acpi_ns_install_node(struct acpi_walk_state *walk_state,
+                    struct acpi_namespace_node *parent_node,
+                    struct acpi_namespace_node *node, acpi_object_type type);
 
 /*
  * nsutils - Utility functions
  */
-u8
-acpi_ns_valid_root_prefix (
-       char                            prefix);
+u8 acpi_ns_valid_root_prefix(char prefix);
 
-acpi_object_type
-acpi_ns_get_type (
-       struct acpi_namespace_node      *node);
+acpi_object_type acpi_ns_get_type(struct acpi_namespace_node *node);
 
-u32
-acpi_ns_local (
-       acpi_object_type                type);
+u32 acpi_ns_local(acpi_object_type type);
 
 void
-acpi_ns_report_error (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id,
-       char                            *internal_name,
-       acpi_status                     lookup_status);
+acpi_ns_report_error(char *module_name,
+                    u32 line_number,
+                    u32 component_id,
+                    char *internal_name, acpi_status lookup_status);
 
 void
-acpi_ns_report_method_error (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id,
-       char                            *message,
-       struct acpi_namespace_node      *node,
-       char                            *path,
-       acpi_status                     lookup_status);
+acpi_ns_report_method_error(char *module_name,
+                           u32 line_number,
+                           u32 component_id,
+                           char *message,
+                           struct acpi_namespace_node *node,
+                           char *path, acpi_status lookup_status);
 
-void
-acpi_ns_print_node_pathname (
-       struct acpi_namespace_node      *node,
-       char                            *msg);
+void acpi_ns_print_node_pathname(struct acpi_namespace_node *node, char *msg);
 
-acpi_status
-acpi_ns_build_internal_name (
-       struct acpi_namestring_info     *info);
+acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info);
 
-void
-acpi_ns_get_internal_name_length (
-       struct acpi_namestring_info     *info);
+void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info);
 
-acpi_status
-acpi_ns_internalize_name (
-       char                            *dotted_name,
-       char                            **converted_name);
+acpi_status acpi_ns_internalize_name(char *dotted_name, char **converted_name);
 
 acpi_status
-acpi_ns_externalize_name (
-       u32                             internal_name_length,
-       char                            *internal_name,
-       u32                             *converted_name_length,
-       char                            **converted_name);
+acpi_ns_externalize_name(u32 internal_name_length,
+                        char *internal_name,
+                        u32 * converted_name_length, char **converted_name);
 
-struct acpi_namespace_node *
-acpi_ns_map_handle_to_node (
-       acpi_handle                     handle);
+struct acpi_namespace_node *acpi_ns_map_handle_to_node(acpi_handle handle);
 
-acpi_handle
-acpi_ns_convert_entry_to_handle(
-       struct acpi_namespace_node      *node);
-
-void
-acpi_ns_terminate (
-       void);
+acpi_handle acpi_ns_convert_entry_to_handle(struct acpi_namespace_node *node);
 
-struct acpi_namespace_node *
-acpi_ns_get_parent_node (
-       struct acpi_namespace_node      *node);
+void acpi_ns_terminate(void);
 
+struct acpi_namespace_node *acpi_ns_get_parent_node(struct acpi_namespace_node
+                                                   *node);
 
-struct acpi_namespace_node *
-acpi_ns_get_next_valid_node (
-       struct acpi_namespace_node      *node);
+struct acpi_namespace_node *acpi_ns_get_next_valid_node(struct
+                                                       acpi_namespace_node
+                                                       *node);
 
-#endif /* __ACNAMESP_H__ */
+#endif                         /* __ACNAMESP_H__ */
index e079b94e4fce4d5933d72cee885e9c2bdfbf45e2..4a326ba6d482c99d84cee3db9b822ea4e7f4bcce 100644 (file)
@@ -45,7 +45,6 @@
 #ifndef _ACOBJECT_H
 #define _ACOBJECT_H
 
-
 /*
  * The union acpi_operand_object    is used to pass AML operands from the dispatcher
  * to the interpreter, and to keep track of the various handlers such as
@@ -81,7 +80,6 @@
 #define AOPOBJ_SETUP_COMPLETE       0x10
 #define AOPOBJ_SINGLE_DATUM         0x20
 
-
 /*
  * Common bitfield for the field objects
  * "Field Datum"  -- a datum from the actual field object
@@ -96,8 +94,7 @@
        u8                                      start_field_bit_offset;/* Bit offset within first field datum (0-63) */\
        u8                                      access_bit_width;   /* Read/Write size in bits (8-64) */\
        u32                                     value;              /* Value to store into the Bank or Index register */\
-       struct acpi_namespace_node              *node;              /* Link back to parent node */
-
+       struct acpi_namespace_node              *node;  /* Link back to parent node */
 
 /*
  * Fields common to both Strings and Buffers
 #define ACPI_COMMON_BUFFER_INFO \
        u32                                     length;
 
-
 /*
  * Common fields for objects that support ASL notifications
  */
 #define ACPI_COMMON_NOTIFY_INFO \
        union acpi_operand_object               *system_notify;     /* Handler for system notifies */\
        union acpi_operand_object               *device_notify;     /* Handler for driver notifies */\
-       union acpi_operand_object               *handler;           /* Handler for Address space */
-
+       union acpi_operand_object               *handler;       /* Handler for Address space */
 
 /******************************************************************************
  *
  *
  *****************************************************************************/
 
-struct acpi_object_common
-{
-       ACPI_OBJECT_COMMON_HEADER
-};
+struct acpi_object_common {
+ACPI_OBJECT_COMMON_HEADER};
 
-
-struct acpi_object_integer
-{
-       ACPI_OBJECT_COMMON_HEADER
-       acpi_integer                            value;
+struct acpi_object_integer {
+       ACPI_OBJECT_COMMON_HEADER acpi_integer value;
 };
 
-
 /*
  * Note: The String and Buffer object must be identical through the Pointer
  * element.  There is code that depends on this.
  */
-struct acpi_object_string           /* Null terminated, ASCII characters only */
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_BUFFER_INFO
-       char                                    *pointer;           /* String in AML stream or allocated string */
+struct acpi_object_string {    /* Null terminated, ASCII characters only */
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO char *pointer;        /* String in AML stream or allocated string */
 };
 
-
-struct acpi_object_buffer
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_BUFFER_INFO
-       u8                                      *pointer;           /* Buffer in AML stream or allocated buffer */
-       struct acpi_namespace_node              *node;              /* Link back to parent node */
-       u8                                      *aml_start;
-       u32                                     aml_length;
+struct acpi_object_buffer {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_BUFFER_INFO u8 * pointer; /* Buffer in AML stream or allocated buffer */
+       struct acpi_namespace_node *node;       /* Link back to parent node */
+       u8 *aml_start;
+       u32 aml_length;
 };
 
-
-struct acpi_object_package
-{
-       ACPI_OBJECT_COMMON_HEADER
-
-       u32                                     count;              /* # of elements in package */
-       u32                                     aml_length;
-       u8                                      *aml_start;
-       struct acpi_namespace_node              *node;              /* Link back to parent node */
-       union acpi_operand_object               **elements;         /* Array of pointers to acpi_objects */
+struct acpi_object_package {
+       ACPI_OBJECT_COMMON_HEADER u32 count;    /* # of elements in package */
+       u32 aml_length;
+       u8 *aml_start;
+       struct acpi_namespace_node *node;       /* Link back to parent node */
+       union acpi_operand_object **elements;   /* Array of pointers to acpi_objects */
 };
 
-
 /******************************************************************************
  *
  * Complex data types
  *
  *****************************************************************************/
 
-struct acpi_object_event
-{
-       ACPI_OBJECT_COMMON_HEADER
-       void                                    *semaphore;
+struct acpi_object_event {
+       ACPI_OBJECT_COMMON_HEADER void *semaphore;
 };
 
-
 #define ACPI_INFINITE_CONCURRENCY   0xFF
 
 typedef
-acpi_status (*ACPI_INTERNAL_METHOD) (
-       struct acpi_walk_state          *walk_state);
-
-struct acpi_object_method
-{
-       ACPI_OBJECT_COMMON_HEADER
-       u8                                      method_flags;
-       u8                                      param_count;
-       u32                                     aml_length;
-       void                                    *semaphore;
-       u8                                      *aml_start;
-       ACPI_INTERNAL_METHOD            implementation;
-       u8                                      concurrency;
-       u8                                      thread_count;
-       acpi_owner_id                           owning_id;
+acpi_status(*ACPI_INTERNAL_METHOD) (struct acpi_walk_state * walk_state);
+
+struct acpi_object_method {
+       ACPI_OBJECT_COMMON_HEADER u8 method_flags;
+       u8 param_count;
+       u32 aml_length;
+       void *semaphore;
+       u8 *aml_start;
+       ACPI_INTERNAL_METHOD implementation;
+       u8 concurrency;
+       u8 thread_count;
+       acpi_owner_id owner_id;
 };
 
-
-struct acpi_object_mutex
-{
-       ACPI_OBJECT_COMMON_HEADER
-       u8                                      sync_level;         /* 0-15, specified in Mutex() call */
-       u16                                     acquisition_depth;  /* Allow multiple Acquires, same thread */
-       struct acpi_thread_state                *owner_thread;      /* Current owner of the mutex */
-       void                                    *semaphore;         /* Actual OS synchronization object */
-       union acpi_operand_object               *prev;              /* Link for list of acquired mutexes */
-       union acpi_operand_object               *next;              /* Link for list of acquired mutexes */
-       struct acpi_namespace_node              *node;              /* Containing namespace node */
-       u8                                      original_sync_level; /* Owner's original sync level (0-15) */
+struct acpi_object_mutex {
+       ACPI_OBJECT_COMMON_HEADER u8 sync_level;        /* 0-15, specified in Mutex() call */
+       u16 acquisition_depth;  /* Allow multiple Acquires, same thread */
+       struct acpi_thread_state *owner_thread; /* Current owner of the mutex */
+       void *semaphore;        /* Actual OS synchronization object */
+       union acpi_operand_object *prev;        /* Link for list of acquired mutexes */
+       union acpi_operand_object *next;        /* Link for list of acquired mutexes */
+       struct acpi_namespace_node *node;       /* Containing namespace node */
+       u8 original_sync_level; /* Owner's original sync level (0-15) */
 };
 
-
-struct acpi_object_region
-{
-       ACPI_OBJECT_COMMON_HEADER
-
-       u8                                      space_id;
-       union acpi_operand_object               *handler;           /* Handler for region access */
-       struct acpi_namespace_node              *node;              /* Containing namespace node */
-       union acpi_operand_object               *next;
-       u32                                     length;
-       acpi_physical_address                   address;
+struct acpi_object_region {
+       ACPI_OBJECT_COMMON_HEADER u8 space_id;
+       union acpi_operand_object *handler;     /* Handler for region access */
+       struct acpi_namespace_node *node;       /* Containing namespace node */
+       union acpi_operand_object *next;
+       u32 length;
+       acpi_physical_address address;
 };
 
-
 /******************************************************************************
  *
  * Objects that can be notified.  All share a common notify_info area.
  *
  *****************************************************************************/
 
-struct acpi_object_notify_common            /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_NOTIFY_INFO
-};
-
-
-struct acpi_object_device
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_NOTIFY_INFO
-       struct acpi_gpe_block_info              *gpe_block;
-};
-
+struct acpi_object_notify_common {     /* COMMON NOTIFY for POWER, PROCESSOR, DEVICE, and THERMAL */
+ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO};
 
-struct acpi_object_power_resource
-{
+struct acpi_object_device {
        ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_NOTIFY_INFO
-       u32                                     system_level;
-       u32                                     resource_order;
+           ACPI_COMMON_NOTIFY_INFO struct acpi_gpe_block_info *gpe_block;
 };
 
-
-struct acpi_object_processor
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_NOTIFY_INFO
-       u32                                     proc_id;
-       u32                                     length;
-       acpi_io_address                         address;
+struct acpi_object_power_resource {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO u32 system_level;
+       u32 resource_order;
 };
 
-
-struct acpi_object_thermal_zone
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_NOTIFY_INFO
+struct acpi_object_processor {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO u32 proc_id;
+       u32 length;
+       acpi_io_address address;
 };
 
+struct acpi_object_thermal_zone {
+ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_NOTIFY_INFO};
 
 /******************************************************************************
  *
@@ -283,90 +227,63 @@ struct acpi_object_thermal_zone
  *
  *****************************************************************************/
 
-struct acpi_object_field_common                         /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_FIELD_INFO
-       union acpi_operand_object               *region_obj;        /* Containing Operation Region object */
-                         /* (REGION/BANK fields only) */
+struct acpi_object_field_common {      /* COMMON FIELD (for BUFFER, REGION, BANK, and INDEX fields) */
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *region_obj; /* Containing Operation Region object */
+       /* (REGION/BANK fields only) */
 };
 
-
-struct acpi_object_region_field
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_FIELD_INFO
-       union acpi_operand_object               *region_obj;        /* Containing op_region object */
+struct acpi_object_region_field {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *region_obj; /* Containing op_region object */
 };
 
-
-struct acpi_object_bank_field
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_FIELD_INFO
-       union acpi_operand_object               *region_obj;        /* Containing op_region object */
-       union acpi_operand_object               *bank_obj;          /* bank_select Register object */
+struct acpi_object_bank_field {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *region_obj; /* Containing op_region object */
+       union acpi_operand_object *bank_obj;    /* bank_select Register object */
 };
 
-
-struct acpi_object_index_field
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_FIELD_INFO
-
-       /*
-        * No "region_obj" pointer needed since the Index and Data registers
-        * are each field definitions unto themselves.
-        */
-       union acpi_operand_object               *index_obj;         /* Index register */
-       union acpi_operand_object               *data_obj;          /* Data register */
+struct acpi_object_index_field {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO
+           /*
+            * No "region_obj" pointer needed since the Index and Data registers
+            * are each field definitions unto themselves.
+            */
+       union acpi_operand_object *index_obj;   /* Index register */
+       union acpi_operand_object *data_obj;    /* Data register */
 };
 
-
 /* The buffer_field is different in that it is part of a Buffer, not an op_region */
 
-struct acpi_object_buffer_field
-{
-       ACPI_OBJECT_COMMON_HEADER
-       ACPI_COMMON_FIELD_INFO
-       union acpi_operand_object               *buffer_obj;        /* Containing Buffer object */
+struct acpi_object_buffer_field {
+       ACPI_OBJECT_COMMON_HEADER ACPI_COMMON_FIELD_INFO union acpi_operand_object *buffer_obj; /* Containing Buffer object */
 };
 
-
 /******************************************************************************
  *
  * Objects for handlers
  *
  *****************************************************************************/
 
-struct acpi_object_notify_handler
-{
-       ACPI_OBJECT_COMMON_HEADER
-       struct acpi_namespace_node              *node;              /* Parent device */
-       acpi_notify_handler                     handler;
-       void                                    *context;
+struct acpi_object_notify_handler {
+       ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *node;     /* Parent device */
+       acpi_notify_handler handler;
+       void *context;
 };
 
-
 /* Flags for address handler */
 
 #define ACPI_ADDR_HANDLER_DEFAULT_INSTALLED  0x1
 
-
-struct acpi_object_addr_handler
-{
-       ACPI_OBJECT_COMMON_HEADER
-       u8                                      space_id;
-       u16                                     hflags;
-       acpi_adr_space_handler                  handler;
-       struct acpi_namespace_node              *node;              /* Parent device */
-       void                                    *context;
-       acpi_adr_space_setup                    setup;
-       union acpi_operand_object               *region_list;       /* regions using this handler */
-       union acpi_operand_object               *next;
+struct acpi_object_addr_handler {
+       ACPI_OBJECT_COMMON_HEADER u8 space_id;
+       u16 hflags;
+       acpi_adr_space_handler handler;
+       struct acpi_namespace_node *node;       /* Parent device */
+       void *context;
+       acpi_adr_space_setup setup;
+       union acpi_operand_object *region_list; /* regions using this handler */
+       union acpi_operand_object *next;
 };
 
-
 /******************************************************************************
  *
  * Special internal objects
@@ -377,18 +294,15 @@ struct acpi_object_addr_handler
  * The Reference object type is used for these opcodes:
  * Arg[0-6], Local[0-7], index_op, name_op, zero_op, one_op, ones_op, debug_op
  */
-struct acpi_object_reference
-{
-       ACPI_OBJECT_COMMON_HEADER
-       u8                                      target_type;        /* Used for index_op */
-       u16                                     opcode;
-       u32                                     offset;             /* Used for arg_op, local_op, and index_op */
-       void                                    *object;            /* name_op=>HANDLE to obj, index_op=>union acpi_operand_object  */
-       struct acpi_namespace_node              *node;
-       union acpi_operand_object               **where;
+struct acpi_object_reference {
+       ACPI_OBJECT_COMMON_HEADER u8 target_type;       /* Used for index_op */
+       u16 opcode;
+       u32 offset;             /* Used for arg_op, local_op, and index_op */
+       void *object;           /* name_op=>HANDLE to obj, index_op=>union acpi_operand_object  */
+       struct acpi_namespace_node *node;
+       union acpi_operand_object **where;
 };
 
-
 /*
  * Extra object is used as additional storage for types that
  * have AML code in their declarations (term_args) that must be
@@ -396,73 +310,62 @@ struct acpi_object_reference
  *
  * Currently: Region and field_unit types
  */
-struct acpi_object_extra
-{
-       ACPI_OBJECT_COMMON_HEADER
-       u8                                      byte_fill1;
-       u16                                     word_fill1;
-       u32                                     aml_length;
-       u8                                      *aml_start;
-       struct acpi_namespace_node              *method_REG;        /* _REG method for this region (if any) */
-       void                                    *region_context;    /* Region-specific data */
+struct acpi_object_extra {
+       ACPI_OBJECT_COMMON_HEADER u8 byte_fill1;
+       u16 word_fill1;
+       u32 aml_length;
+       u8 *aml_start;
+       struct acpi_namespace_node *method_REG; /* _REG method for this region (if any) */
+       void *region_context;   /* Region-specific data */
 };
 
-
 /* Additional data that can be attached to namespace nodes */
 
-struct acpi_object_data
-{
-       ACPI_OBJECT_COMMON_HEADER
-       acpi_object_handler                     handler;
-       void                                    *pointer;
+struct acpi_object_data {
+       ACPI_OBJECT_COMMON_HEADER acpi_object_handler handler;
+       void *pointer;
 };
 
-
 /* Structure used when objects are cached for reuse */
 
-struct acpi_object_cache_list
-{
-       ACPI_OBJECT_COMMON_HEADER
-       union acpi_operand_object               *next;              /* Link for object cache and internal lists*/
+struct acpi_object_cache_list {
+       ACPI_OBJECT_COMMON_HEADER union acpi_operand_object *next;      /* Link for object cache and internal lists */
 };
 
-
 /******************************************************************************
  *
  * union acpi_operand_object Descriptor - a giant union of all of the above
  *
  *****************************************************************************/
 
-union acpi_operand_object
-{
-       struct acpi_object_common               common;
-       struct acpi_object_integer              integer;
-       struct acpi_object_string               string;
-       struct acpi_object_buffer               buffer;
-       struct acpi_object_package              package;
-       struct acpi_object_event                event;
-       struct acpi_object_method               method;
-       struct acpi_object_mutex                mutex;
-       struct acpi_object_region               region;
-       struct acpi_object_notify_common        common_notify;
-       struct acpi_object_device               device;
-       struct acpi_object_power_resource       power_resource;
-       struct acpi_object_processor            processor;
-       struct acpi_object_thermal_zone         thermal_zone;
-       struct acpi_object_field_common         common_field;
-       struct acpi_object_region_field         field;
-       struct acpi_object_buffer_field         buffer_field;
-       struct acpi_object_bank_field           bank_field;
-       struct acpi_object_index_field          index_field;
-       struct acpi_object_notify_handler       notify;
-       struct acpi_object_addr_handler         address_space;
-       struct acpi_object_reference            reference;
-       struct acpi_object_extra                extra;
-       struct acpi_object_data                 data;
-       struct acpi_object_cache_list           cache;
+union acpi_operand_object {
+       struct acpi_object_common common;
+       struct acpi_object_integer integer;
+       struct acpi_object_string string;
+       struct acpi_object_buffer buffer;
+       struct acpi_object_package package;
+       struct acpi_object_event event;
+       struct acpi_object_method method;
+       struct acpi_object_mutex mutex;
+       struct acpi_object_region region;
+       struct acpi_object_notify_common common_notify;
+       struct acpi_object_device device;
+       struct acpi_object_power_resource power_resource;
+       struct acpi_object_processor processor;
+       struct acpi_object_thermal_zone thermal_zone;
+       struct acpi_object_field_common common_field;
+       struct acpi_object_region_field field;
+       struct acpi_object_buffer_field buffer_field;
+       struct acpi_object_bank_field bank_field;
+       struct acpi_object_index_field index_field;
+       struct acpi_object_notify_handler notify;
+       struct acpi_object_addr_handler address_space;
+       struct acpi_object_reference reference;
+       struct acpi_object_extra extra;
+       struct acpi_object_data data;
+       struct acpi_object_cache_list cache;
 };
 
-
 /******************************************************************************
  *
  * union acpi_descriptor - objects that share a common descriptor identifier
@@ -471,7 +374,7 @@ union acpi_operand_object
 
 /* Object descriptor types */
 
-#define ACPI_DESC_TYPE_CACHED           0x01        /* Used only when object is cached */
+#define ACPI_DESC_TYPE_CACHED           0x01   /* Used only when object is cached */
 #define ACPI_DESC_TYPE_STATE            0x02
 #define ACPI_DESC_TYPE_STATE_UPDATE     0x03
 #define ACPI_DESC_TYPE_STATE_PACKAGE    0x04
@@ -488,14 +391,11 @@ union acpi_operand_object
 #define ACPI_DESC_TYPE_NAMED            0x0F
 #define ACPI_DESC_TYPE_MAX              0x0F
 
-
-union acpi_descriptor
-{
-       u8                                      descriptor_id;  /* To differentiate various internal objs */\
-       union acpi_operand_object               object;
-       struct acpi_namespace_node              node;
-       union acpi_parse_object                 op;
+union acpi_descriptor {
+       u8 descriptor_id;       /* To differentiate various internal objs */
+       union acpi_operand_object object;
+       struct acpi_namespace_node node;
+       union acpi_parse_object op;
 };
 
-
-#endif /* _ACOBJECT_H */
+#endif                         /* _ACOBJECT_H */
index 118ecba4cf05e056f255f9dc4922e8434e03e2df..64da42992199f58e826aee308277e31ba3cc3a60 100644 (file)
@@ -62,7 +62,6 @@
 #define _NAM                        0x6C
 #define _PFX                        0x6D
 
-
 /*
  * All AML opcodes and the parse-time arguments for each.  Used by the AML
  * parser  Each list is compressed into a 32-bit number and stored in the
 #define ARGP_WORD_OP                    ARGP_LIST1 (ARGP_WORDDATA)
 #define ARGP_ZERO_OP                    ARG_NONE
 
-
 /*
  * All AML opcodes and the runtime arguments for each.  Used by the AML
  * interpreter  Each list is compressed into a 32-bit number and stored
 #define ARGI_FIELD_OP                   ARGI_INVALID_OPCODE
 #define ARGI_FIND_SET_LEFT_BIT_OP       ARGI_LIST2 (ARGI_INTEGER,    ARGI_TARGETREF)
 #define ARGI_FIND_SET_RIGHT_BIT_OP      ARGI_LIST2 (ARGI_INTEGER,    ARGI_TARGETREF)
-#define ARGI_FROM_BCD_OP                ARGI_LIST2 (ARGI_INTEGER,    ARGI_TARGETREF)
+#define ARGI_FROM_BCD_OP                ARGI_LIST2 (ARGI_INTEGER,    ARGI_FIXED_TARGET)
 #define ARGI_IF_OP                      ARGI_INVALID_OPCODE
 #define ARGI_INCREMENT_OP               ARGI_LIST1 (ARGI_INTEGER_REF)
 #define ARGI_INDEX_FIELD_OP             ARGI_INVALID_OPCODE
 #define ARGI_WORD_OP                    ARGI_INVALID_OPCODE
 #define ARGI_ZERO_OP                    ARG_NONE
 
-#endif /* __ACOPCODE_H__ */
+#endif                         /* __ACOPCODE_H__ */
index 2fbe180fee6b47841c515d1893847523ea54757e..68d7edf0f6979ebe87007ed2d215859d11526e99 100644 (file)
 #define ACPI_ALL_COMPONENTS         0x00003FFF
 #define ACPI_COMPONENT_DEFAULT      (ACPI_ALL_COMPONENTS)
 
-
 /* Component IDs reserved for ACPI drivers */
 
 #define ACPI_ALL_DRIVERS            0xFFFF0000
 
-
 /*
  * Raw debug output levels, do not use these in the DEBUG_PRINT macros
  */
 
 #define ACPI_LV_VERBOSE             0xF0000000
 
-
 /*
  * Debug level macros that are used in the DEBUG_PRINT macros
  */
-#define ACPI_DEBUG_LEVEL(dl)        (u32) dl,__LINE__,&_debug_info
+#define ACPI_DEBUG_LEVEL(dl)        (u32) dl,ACPI_DEBUG_PARAMETERS
 
 /* Exception level -- used in the global "debug_level" */
 
 #define ACPI_DB_INFO                ACPI_DEBUG_LEVEL (ACPI_LV_INFO)
 #define ACPI_DB_ALL_EXCEPTIONS      ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS)
 
-
 /* Trace level -- also used in the global "debug_level" */
 
 #define ACPI_DB_INIT_NAMES          ACPI_DEBUG_LEVEL (ACPI_LV_INIT_NAMES)
 
 #define ACPI_DB_ALL                 ACPI_DEBUG_LEVEL (ACPI_LV_ALL)
 
-
 /* Defaults for debug_level, debug and normal */
 
 #define ACPI_DEBUG_DEFAULT          (ACPI_LV_INIT | ACPI_LV_WARN | ACPI_LV_ERROR | ACPI_LV_DEBUG_OBJECT)
 #define ACPI_NORMAL_DEFAULT         (ACPI_LV_INIT | ACPI_LV_WARN | ACPI_LV_ERROR | ACPI_LV_DEBUG_OBJECT)
 #define ACPI_DEBUG_ALL              (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
 
-
-#endif /* __ACOUTPUT_H__ */
+#endif                         /* __ACOUTPUT_H__ */
index 69827657181864dec118477184d5658c2b8e8348..d352d40de1f3210ae66a1571ec73dd5afa857ed2 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #ifndef __ACPARSER_H__
 #define __ACPARSER_H__
 
-
 #define OP_HAS_RETURN_VALUE             1
 
 /* variable # arguments */
 
 #define ACPI_VAR_ARGS                   ACPI_UINT32_MAX
 
-
 #define ACPI_PARSE_DELETE_TREE          0x0001
 #define ACPI_PARSE_NO_TREE_DELETE       0x0000
 #define ACPI_PARSE_TREE_MASK            0x0001
@@ -63,7 +60,7 @@
 #define ACPI_PARSE_MODE_MASK            0x0030
 
 #define ACPI_PARSE_DEFERRED_OP          0x0100
-
+#define ACPI_PARSE_DISASSEMBLE          0x0200
 
 /******************************************************************************
  *
  *
  *****************************************************************************/
 
-
 /*
  * psxface - Parser external interfaces
  */
-acpi_status
-acpi_psx_load_table (
-       u8                              *pcode_addr,
-       u32                             pcode_length);
-
-acpi_status
-acpi_psx_execute (
-       struct acpi_parameter_info      *info);
-
+acpi_status acpi_ps_execute_method(struct acpi_parameter_info *info);
 
 /*
  * psargs - Parse AML opcode arguments
  */
-u8 *
-acpi_ps_get_next_package_end (
-       struct acpi_parse_state         *parser_state);
+u8 *acpi_ps_get_next_package_end(struct acpi_parse_state *parser_state);
 
-char *
-acpi_ps_get_next_namestring (
-       struct acpi_parse_state         *parser_state);
+char *acpi_ps_get_next_namestring(struct acpi_parse_state *parser_state);
 
 void
-acpi_ps_get_next_simple_arg (
-       struct acpi_parse_state         *parser_state,
-       u32                             arg_type,
-       union acpi_parse_object         *arg);
+acpi_ps_get_next_simple_arg(struct acpi_parse_state *parser_state,
+                           u32 arg_type, union acpi_parse_object *arg);
 
 acpi_status
-acpi_ps_get_next_namepath (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_parse_state         *parser_state,
-       union acpi_parse_object         *arg,
-       u8                              method_call);
+acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
+                         struct acpi_parse_state *parser_state,
+                         union acpi_parse_object *arg, u8 method_call);
 
 acpi_status
-acpi_ps_get_next_arg (
-       struct acpi_walk_state          *walk_state,
-       struct acpi_parse_state         *parser_state,
-       u32                             arg_type,
-       union acpi_parse_object         **return_arg);
-
+acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
+                    struct acpi_parse_state *parser_state,
+                    u32 arg_type, union acpi_parse_object **return_arg);
 
 /*
  * psfind
  */
-union acpi_parse_object *
-acpi_ps_find_name (
-       union acpi_parse_object         *scope,
-       u32                             name,
-       u32                             opcode);
-
-union acpi_parse_object*
-acpi_ps_get_parent (
-       union acpi_parse_object         *op);
+union acpi_parse_object *acpi_ps_find_name(union acpi_parse_object *scope,
+                                          u32 name, u32 opcode);
 
+union acpi_parse_object *acpi_ps_get_parent(union acpi_parse_object *op);
 
 /*
  * psopcode - AML Opcode information
  */
-const struct acpi_opcode_info *
-acpi_ps_get_opcode_info (
-       u16                             opcode);
-
-char *
-acpi_ps_get_opcode_name (
-       u16                             opcode);
+const struct acpi_opcode_info *acpi_ps_get_opcode_info(u16 opcode);
 
+char *acpi_ps_get_opcode_name(u16 opcode);
 
 /*
  * psparse - top level parsing routines
  */
-acpi_status
-acpi_ps_parse_aml (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state);
 
-u32
-acpi_ps_get_opcode_size (
-       u32                             opcode);
+u32 acpi_ps_get_opcode_size(u32 opcode);
 
-u16
-acpi_ps_peek_opcode (
-       struct acpi_parse_state         *state);
+u16 acpi_ps_peek_opcode(struct acpi_parse_state *state);
 
+acpi_status
+acpi_ps_complete_this_op(struct acpi_walk_state *walk_state,
+                        union acpi_parse_object *op);
+
+acpi_status
+acpi_ps_next_parse_state(struct acpi_walk_state *walk_state,
+                        union acpi_parse_object *op,
+                        acpi_status callback_status);
+
+/*
+ * psloop - main parse loop
+ */
+acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state);
 
 /*
  * psscope - Scope stack management routines
  */
 acpi_status
-acpi_ps_init_scope (
-       struct acpi_parse_state         *parser_state,
-       union acpi_parse_object         *root);
+acpi_ps_init_scope(struct acpi_parse_state *parser_state,
+                  union acpi_parse_object *root);
 
-union acpi_parse_object *
-acpi_ps_get_parent_scope (
-       struct acpi_parse_state         *state);
+union acpi_parse_object *acpi_ps_get_parent_scope(struct acpi_parse_state
+                                                 *state);
 
-u8
-acpi_ps_has_completed_scope (
-       struct acpi_parse_state         *parser_state);
+u8 acpi_ps_has_completed_scope(struct acpi_parse_state *parser_state);
 
 void
-acpi_ps_pop_scope (
-       struct acpi_parse_state         *parser_state,
-       union acpi_parse_object         **op,
-       u32                             *arg_list,
-       u32                             *arg_count);
+acpi_ps_pop_scope(struct acpi_parse_state *parser_state,
+                 union acpi_parse_object **op,
+                 u32 * arg_list, u32 * arg_count);
 
 acpi_status
-acpi_ps_push_scope (
-       struct acpi_parse_state         *parser_state,
-       union acpi_parse_object         *op,
-       u32                             remaining_args,
-       u32                             arg_count);
-
-void
-acpi_ps_cleanup_scope (
-       struct acpi_parse_state         *state);
+acpi_ps_push_scope(struct acpi_parse_state *parser_state,
+                  union acpi_parse_object *op,
+                  u32 remaining_args, u32 arg_count);
 
+void acpi_ps_cleanup_scope(struct acpi_parse_state *state);
 
 /*
  * pstree - parse tree manipulation routines
  */
 void
-acpi_ps_append_arg(
-       union acpi_parse_object         *op,
-       union acpi_parse_object         *arg);
-
-union acpi_parse_object*
-acpi_ps_find (
-       union acpi_parse_object         *scope,
-       char                            *path,
-       u16                             opcode,
-       u32                             create);
-
-union acpi_parse_object *
-acpi_ps_get_arg(
-       union acpi_parse_object         *op,
-       u32                              argn);
+acpi_ps_append_arg(union acpi_parse_object *op, union acpi_parse_object *arg);
 
-#ifdef ACPI_FUTURE_USAGE
-union acpi_parse_object *
-acpi_ps_get_depth_next (
-       union acpi_parse_object         *origin,
-       union acpi_parse_object         *op);
-#endif /* ACPI_FUTURE_USAGE */
+union acpi_parse_object *acpi_ps_find(union acpi_parse_object *scope,
+                                     char *path, u16 opcode, u32 create);
 
+union acpi_parse_object *acpi_ps_get_arg(union acpi_parse_object *op, u32 argn);
+
+#ifdef ACPI_FUTURE_USAGE
+union acpi_parse_object *acpi_ps_get_depth_next(union acpi_parse_object *origin,
+                                               union acpi_parse_object *op);
+#endif                         /* ACPI_FUTURE_USAGE */
 
 /*
  * pswalk - parse tree walk routines
  */
 acpi_status
-acpi_ps_walk_parsed_aml (
-       union acpi_parse_object         *start_op,
-       union acpi_parse_object         *end_op,
-       union acpi_operand_object       *mth_desc,
-       struct acpi_namespace_node      *start_node,
-       union acpi_operand_object       **params,
-       union acpi_operand_object       **caller_return_desc,
-       acpi_owner_id                   owner_id,
-       acpi_parse_downwards            descending_callback,
-       acpi_parse_upwards              ascending_callback);
-
-acpi_status
-acpi_ps_get_next_walk_op (
-       struct acpi_walk_state          *walk_state,
-       union acpi_parse_object         *op,
-       acpi_parse_upwards              ascending_callback);
+acpi_ps_walk_parsed_aml(union acpi_parse_object *start_op,
+                       union acpi_parse_object *end_op,
+                       union acpi_operand_object *mth_desc,
+                       struct acpi_namespace_node *start_node,
+                       union acpi_operand_object **params,
+                       union acpi_operand_object **caller_return_desc,
+                       acpi_owner_id owner_id,
+                       acpi_parse_downwards descending_callback,
+                       acpi_parse_upwards ascending_callback);
 
 acpi_status
-acpi_ps_delete_completed_op (
-       struct acpi_walk_state          *walk_state);
+acpi_ps_get_next_walk_op(struct acpi_walk_state *walk_state,
+                        union acpi_parse_object *op,
+                        acpi_parse_upwards ascending_callback);
 
-void
-acpi_ps_delete_parse_tree (
-       union acpi_parse_object         *root);
+acpi_status acpi_ps_delete_completed_op(struct acpi_walk_state *walk_state);
 
+void acpi_ps_delete_parse_tree(union acpi_parse_object *root);
 
 /*
  * psutils - parser utilities
  */
-union acpi_parse_object *
-acpi_ps_create_scope_op (
-       void);
+union acpi_parse_object *acpi_ps_create_scope_op(void);
 
-void
-acpi_ps_init_op (
-       union acpi_parse_object         *op,
-       u16                             opcode);
+void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode);
 
-union acpi_parse_object *
-acpi_ps_alloc_op (
-       u16                             opcode);
+union acpi_parse_object *acpi_ps_alloc_op(u16 opcode);
 
-void
-acpi_ps_free_op (
-       union acpi_parse_object         *op);
+void acpi_ps_free_op(union acpi_parse_object *op);
 
-u8
-acpi_ps_is_leading_char (
-       u32                             c);
+u8 acpi_ps_is_leading_char(u32 c);
 
-u8
-acpi_ps_is_prefix_char (
-       u32                             c);
+u8 acpi_ps_is_prefix_char(u32 c);
 
 #ifdef ACPI_FUTURE_USAGE
-u32
-acpi_ps_get_name(
-       union acpi_parse_object         *op);
-#endif /* ACPI_FUTURE_USAGE */
-
-void
-acpi_ps_set_name(
-       union acpi_parse_object         *op,
-       u32                             name);
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
-void
-acpi_ps_delete_parse_cache (
-       void);
-#endif
+u32 acpi_ps_get_name(union acpi_parse_object *op);
+#endif                         /* ACPI_FUTURE_USAGE */
 
+void acpi_ps_set_name(union acpi_parse_object *op, u32 name);
 
 /*
  * psdump - display parser tree
  */
 u32
-acpi_ps_sprint_path (
-       char                            *buffer_start,
-       u32                             buffer_size,
-       union acpi_parse_object         *op);
+acpi_ps_sprint_path(char *buffer_start,
+                   u32 buffer_size, union acpi_parse_object *op);
 
 u32
-acpi_ps_sprint_op (
-       char                            *buffer_start,
-       u32                             buffer_size,
-       union acpi_parse_object         *op);
-
-void
-acpi_ps_show (
-       union acpi_parse_object         *op);
+acpi_ps_sprint_op(char *buffer_start,
+                 u32 buffer_size, union acpi_parse_object *op);
 
+void acpi_ps_show(union acpi_parse_object *op);
 
-#endif /* __ACPARSER_H__ */
+#endif                         /* __ACPARSER_H__ */
index a69d78942040c549f8362db736da55318bec4a08..ccf34f9dac642c4baf08a102bec003ab3ab4c388 100644 (file)
  * We put them here because we don't want to duplicate them
  * in the rest of the source code again and again.
  */
-#include "acnames.h"            /* Global ACPI names and strings */
-#include "acconfig.h"           /* Configuration constants */
-#include "platform/acenv.h"     /* Target environment specific items */
-#include "actypes.h"            /* Fundamental common data types */
-#include "acexcep.h"            /* ACPI exception codes */
-#include "acmacros.h"           /* C macros */
-#include "actbl.h"              /* ACPI table definitions */
-#include "aclocal.h"            /* Internal data types */
-#include "acoutput.h"           /* Error output and Debug macros */
-#include "acpiosxf.h"           /* Interfaces to the ACPI-to-OS layer*/
-#include "acpixf.h"             /* ACPI core subsystem external interfaces */
-#include "acobject.h"           /* ACPI internal object */
-#include "acstruct.h"           /* Common structures */
-#include "acglobal.h"           /* All global variables */
-#include "achware.h"            /* Hardware defines and interfaces */
-#include "acutils.h"            /* Utility interfaces */
+#include "acnames.h"           /* Global ACPI names and strings */
+#include "acconfig.h"          /* Configuration constants */
+#include "platform/acenv.h"    /* Target environment specific items */
+#include "actypes.h"           /* Fundamental common data types */
+#include "acexcep.h"           /* ACPI exception codes */
+#include "acmacros.h"          /* C macros */
+#include "actbl.h"             /* ACPI table definitions */
+#include "aclocal.h"           /* Internal data types */
+#include "acoutput.h"          /* Error output and Debug macros */
+#include "acpiosxf.h"          /* Interfaces to the ACPI-to-OS layer */
+#include "acpixf.h"            /* ACPI core subsystem external interfaces */
+#include "acobject.h"          /* ACPI internal object */
+#include "acstruct.h"          /* Common structures */
+#include "acglobal.h"          /* All global variables */
+#include "achware.h"           /* Hardware defines and interfaces */
+#include "acutils.h"           /* Utility interfaces */
 
-
-#endif /* __ACPI_H__ */
+#endif                         /* __ACPI_H__ */
index 8d0e1290bc7626eef77e6cf264687c1b3559cfe5..0b54e9a4a8a1fdbdc9d2f8a560720fef51f55fe0 100644 (file)
 /* TBD: Make dynamic */
 #define ACPI_MAX_HANDLES       10
 struct acpi_handle_list {
-       u32                     count;
-       acpi_handle             handles[ACPI_MAX_HANDLES];
+       u32 count;
+       acpi_handle handles[ACPI_MAX_HANDLES];
 };
 
-
 /* acpi_utils.h */
 acpi_status
-acpi_extract_package (
-       union acpi_object       *package,
-       struct acpi_buffer      *format,
-       struct acpi_buffer      *buffer);
+acpi_extract_package(union acpi_object *package,
+                    struct acpi_buffer *format, struct acpi_buffer *buffer);
 acpi_status
-acpi_evaluate_integer (
-       acpi_handle             handle,
-       acpi_string             pathname,
-       struct acpi_object_list *arguments,
-       unsigned long           *data);
+acpi_evaluate_integer(acpi_handle handle,
+                     acpi_string pathname,
+                     struct acpi_object_list *arguments, unsigned long *data);
 acpi_status
-acpi_evaluate_reference (
-       acpi_handle             handle,
-       acpi_string             pathname,
-       struct acpi_object_list *arguments,
-       struct acpi_handle_list *list);
-
+acpi_evaluate_reference(acpi_handle handle,
+                       acpi_string pathname,
+                       struct acpi_object_list *arguments,
+                       struct acpi_handle_list *list);
 
-#ifdef CONFIG_ACPI_BUS
+#ifdef CONFIG_ACPI
 
 #include <linux/proc_fs.h>
 
 #define ACPI_BUS_FILE_ROOT     "acpi"
-extern struct proc_dir_entry   *acpi_root_dir;
-extern FADT_DESCRIPTOR         acpi_fadt;
+extern struct proc_dir_entry *acpi_root_dir;
+extern FADT_DESCRIPTOR acpi_fadt;
 
 enum acpi_bus_removal_type {
-       ACPI_BUS_REMOVAL_NORMAL = 0,
+       ACPI_BUS_REMOVAL_NORMAL = 0,
        ACPI_BUS_REMOVAL_EJECT,
        ACPI_BUS_REMOVAL_SUPRISE,
        ACPI_BUS_REMOVAL_TYPE_COUNT
 };
 
 enum acpi_bus_device_type {
-       ACPI_BUS_TYPE_DEVICE    = 0,
+       ACPI_BUS_TYPE_DEVICE = 0,
        ACPI_BUS_TYPE_POWER,
        ACPI_BUS_TYPE_PROCESSOR,
        ACPI_BUS_TYPE_THERMAL,
@@ -89,61 +82,60 @@ enum acpi_bus_device_type {
 struct acpi_driver;
 struct acpi_device;
 
-
 /*
  * ACPI Driver
  * -----------
  */
 
-typedef int (*acpi_op_add)     (struct acpi_device *device);
-typedef int (*acpi_op_remove)  (struct acpi_device *device, int type);
-typedef int (*acpi_op_lock)    (struct acpi_device *device, int type);
-typedef int (*acpi_op_start)   (struct acpi_device *device);
-typedef int (*acpi_op_stop)    (struct acpi_device *device, int type);
-typedef int (*acpi_op_suspend) (struct acpi_device *device, int state);
-typedef int (*acpi_op_resume)  (struct acpi_device *device, int state);
-typedef int (*acpi_op_scan)    (struct acpi_device *device);
-typedef int (*acpi_op_bind)    (struct acpi_device *device);
-typedef int (*acpi_op_unbind)  (struct acpi_device *device);
-typedef int (*acpi_op_match)   (struct acpi_device *device,
-                                struct acpi_driver *driver);
+typedef int (*acpi_op_add) (struct acpi_device * device);
+typedef int (*acpi_op_remove) (struct acpi_device * device, int type);
+typedef int (*acpi_op_lock) (struct acpi_device * device, int type);
+typedef int (*acpi_op_start) (struct acpi_device * device);
+typedef int (*acpi_op_stop) (struct acpi_device * device, int type);
+typedef int (*acpi_op_suspend) (struct acpi_device * device, int state);
+typedef int (*acpi_op_resume) (struct acpi_device * device, int state);
+typedef int (*acpi_op_scan) (struct acpi_device * device);
+typedef int (*acpi_op_bind) (struct acpi_device * device);
+typedef int (*acpi_op_unbind) (struct acpi_device * device);
+typedef int (*acpi_op_match) (struct acpi_device * device,
+                             struct acpi_driver * driver);
 
 struct acpi_bus_ops {
-       u32                     acpi_op_add:1;
-       u32                     acpi_op_remove:1;
-       u32                     acpi_op_lock:1;
-       u32                     acpi_op_start:1;
-       u32                     acpi_op_stop:1;
-       u32                     acpi_op_suspend:1;
-       u32                     acpi_op_resume:1;
-       u32                     acpi_op_scan:1;
-       u32                     acpi_op_bind:1;
-       u32                     acpi_op_unbind:1;
-       u32                     acpi_op_match:1;
-       u32                     reserved:21;
+       u32 acpi_op_add:1;
+       u32 acpi_op_remove:1;
+       u32 acpi_op_lock:1;
+       u32 acpi_op_start:1;
+       u32 acpi_op_stop:1;
+       u32 acpi_op_suspend:1;
+       u32 acpi_op_resume:1;
+       u32 acpi_op_scan:1;
+       u32 acpi_op_bind:1;
+       u32 acpi_op_unbind:1;
+       u32 acpi_op_match:1;
+       u32 reserved:21;
 };
 
 struct acpi_device_ops {
-       acpi_op_add             add;
-       acpi_op_remove          remove;
-       acpi_op_lock            lock;
-       acpi_op_start           start;
-       acpi_op_stop            stop;
-       acpi_op_suspend         suspend;
-       acpi_op_resume          resume;
-       acpi_op_scan            scan;
-       acpi_op_bind            bind;
-       acpi_op_unbind          unbind;
-       acpi_op_match           match;
+       acpi_op_add add;
+       acpi_op_remove remove;
+       acpi_op_lock lock;
+       acpi_op_start start;
+       acpi_op_stop stop;
+       acpi_op_suspend suspend;
+       acpi_op_resume resume;
+       acpi_op_scan scan;
+       acpi_op_bind bind;
+       acpi_op_unbind unbind;
+       acpi_op_match match;
 };
 
 struct acpi_driver {
-       struct list_head        node;
-       char                    name[80];
-       char                    class[80];
-       atomic_t                references;
-       char                    *ids;           /* Supported Hardware IDs */
-       struct acpi_device_ops  ops;
+       struct list_head node;
+       char name[80];
+       char class[80];
+       atomic_t references;
+       char *ids;              /* Supported Hardware IDs */
+       struct acpi_device_ops ops;
 };
 
 /*
@@ -154,60 +146,57 @@ struct acpi_driver {
 /* Status (_STA) */
 
 struct acpi_device_status {
-       u32                     present:1;
-       u32                     enabled:1;
-       u32                     show_in_ui:1;
-       u32                     functional:1;
-       u32                     battery_present:1;
-       u32                     reserved:27;
+       u32 present:1;
+       u32 enabled:1;
+       u32 show_in_ui:1;
+       u32 functional:1;
+       u32 battery_present:1;
+       u32 reserved:27;
 };
 
-
 /* Flags */
 
 struct acpi_device_flags {
-       u32                     dynamic_status:1;
-       u32                     hardware_id:1;
-       u32                     compatible_ids:1;
-       u32                     bus_address:1;
-       u32                     unique_id:1;
-       u32                     removable:1;
-       u32                     ejectable:1;
-       u32                     lockable:1;
-       u32                     suprise_removal_ok:1;
-       u32                     power_manageable:1;
-       u32                     performance_manageable:1;
-       u32                     wake_capable:1; /* Wakeup(_PRW) supported? */
-       u32                     reserved:20;
+       u32 dynamic_status:1;
+       u32 hardware_id:1;
+       u32 compatible_ids:1;
+       u32 bus_address:1;
+       u32 unique_id:1;
+       u32 removable:1;
+       u32 ejectable:1;
+       u32 lockable:1;
+       u32 suprise_removal_ok:1;
+       u32 power_manageable:1;
+       u32 performance_manageable:1;
+       u32 wake_capable:1;     /* Wakeup(_PRW) supported? */
+       u32 reserved:20;
 };
 
-
 /* File System */
 
 struct acpi_device_dir {
-       struct proc_dir_entry   *entry;
+       struct proc_dir_entry *entry;
 };
 
 #define acpi_device_dir(d)     ((d)->dir.entry)
 
-
 /* Plug and Play */
 
-typedef char                   acpi_bus_id[5];
-typedef unsigned long          acpi_bus_address;
-typedef char                   acpi_hardware_id[9];
-typedef char                   acpi_unique_id[9];
-typedef char                   acpi_device_name[40];
-typedef char                   acpi_device_class[20];
+typedef char acpi_bus_id[5];
+typedef unsigned long acpi_bus_address;
+typedef char acpi_hardware_id[9];
+typedef char acpi_unique_id[9];
+typedef char acpi_device_name[40];
+typedef char acpi_device_class[20];
 
 struct acpi_device_pnp {
-       acpi_bus_id             bus_id;                        /* Object name */
-       acpi_bus_address        bus_address;                          /* _ADR */
-       acpi_hardware_id        hardware_id;                          /* _HID */
-       struct acpi_compatible_id_list *cid_list;                    /* _CIDs */
-       acpi_unique_id          unique_id;                            /* _UID */
-       acpi_device_name        device_name;             /* Driver-determined */
-       acpi_device_class       device_class;            /*        "          */
+       acpi_bus_id bus_id;     /* Object name */
+       acpi_bus_address bus_address;   /* _ADR */
+       acpi_hardware_id hardware_id;   /* _HID */
+       struct acpi_compatible_id_list *cid_list;       /* _CIDs */
+       acpi_unique_id unique_id;       /* _UID */
+       acpi_device_name device_name;   /* Driver-determined */
+       acpi_device_class device_class; /*        "          */
 };
 
 #define acpi_device_bid(d)     ((d)->pnp.bus_id)
@@ -217,114 +206,111 @@ struct acpi_device_pnp {
 #define acpi_device_name(d)    ((d)->pnp.device_name)
 #define acpi_device_class(d)   ((d)->pnp.device_class)
 
-
 /* Power Management */
 
 struct acpi_device_power_flags {
-       u32                     explicit_get:1;              /* _PSC present? */
-       u32                     power_resources:1;         /* Power resources */
-       u32                     inrush_current:1;         /* Serialize Dx->D0 */
-       u32                     power_removed:1;           /* Optimize Dx->D0 */
-       u32                     reserved:28;
+       u32 explicit_get:1;     /* _PSC present? */
+       u32 power_resources:1;  /* Power resources */
+       u32 inrush_current:1;   /* Serialize Dx->D0 */
+       u32 power_removed:1;    /* Optimize Dx->D0 */
+       u32 reserved:28;
 };
 
 struct acpi_device_power_state {
        struct {
-               u8                      valid:1;        
-               u8                      explicit_set:1;      /* _PSx present? */
-               u8                      reserved:6;
-       }                       flags;
-       int                     power;            /* % Power (compared to D0) */
-       int                     latency;        /* Dx->D0 time (microseconds) */
-       struct acpi_handle_list resources;      /* Power resources referenced */
+               u8 valid:1;
+               u8 explicit_set:1;      /* _PSx present? */
+               u8 reserved:6;
+       } flags;
+       int power;              /* % Power (compared to D0) */
+       int latency;            /* Dx->D0 time (microseconds) */
+       struct acpi_handle_list resources;      /* Power resources referenced */
 };
 
 struct acpi_device_power {
-       int                     state;                       /* Current state */
+       int state;              /* Current state */
        struct acpi_device_power_flags flags;
-       struct acpi_device_power_state states[4];     /* Power states (D0-D3) */
+       struct acpi_device_power_state states[4];       /* Power states (D0-D3) */
 };
 
-
 /* Performance Management */
 
 struct acpi_device_perf_flags {
-       u8                      reserved:8;
+       u8 reserved:8;
 };
 
 struct acpi_device_perf_state {
        struct {
-               u8                      valid:1;        
-               u8                      reserved:7;
-       }                       flags;
-       u8                      power;            /* % Power (compared to P0) */
-       u8                      performance;      /* % Performance (    "   ) */
-       int                     latency;        /* Px->P0 time (microseconds) */
+               u8 valid:1;
+               u8 reserved:7;
+       } flags;
+       u8 power;               /* % Power (compared to P0) */
+       u8 performance;         /* % Performance (    "   ) */
+       int latency;            /* Px->P0 time (microseconds) */
 };
 
 struct acpi_device_perf {
-       int                     state;
+       int state;
        struct acpi_device_perf_flags flags;
-       int                     state_count;
+       int state_count;
        struct acpi_device_perf_state *states;
 };
 
 /* Wakeup Management */
 struct acpi_device_wakeup_flags {
-       u8      valid:1; /* Can successfully enable wakeup? */
-       u8      run_wake:1; /* Run-Wake GPE devices */
+       u8 valid:1;             /* Can successfully enable wakeup? */
+       u8 run_wake:1;          /* Run-Wake GPE devices */
 };
 
 struct acpi_device_wakeup_state {
-       u8      enabled:1;
-       u8      active:1;
+       u8 enabled:1;
+       u8 active:1;
 };
 
 struct acpi_device_wakeup {
-       acpi_handle             gpe_device;
-       acpi_integer            gpe_number;;
-       acpi_integer            sleep_state;
-       struct acpi_handle_list resources;
-       struct acpi_device_wakeup_state state;
-       struct acpi_device_wakeup_flags flags;
+       acpi_handle gpe_device;
+       acpi_integer gpe_number;;
+       acpi_integer sleep_state;
+       struct acpi_handle_list resources;
+       struct acpi_device_wakeup_state state;
+       struct acpi_device_wakeup_flags flags;
 };
 
 /* Device */
 
 struct acpi_device {
-       acpi_handle             handle;
-       struct acpi_device      *parent;
-       struct list_head        children;
-       struct list_head        node;
-       struct list_head        wakeup_list;
-       struct list_head        g_list;
+       acpi_handle handle;
+       struct acpi_device *parent;
+       struct list_head children;
+       struct list_head node;
+       struct list_head wakeup_list;
+       struct list_head g_list;
        struct acpi_device_status status;
        struct acpi_device_flags flags;
-       struct acpi_device_pnp  pnp;
+       struct acpi_device_pnp pnp;
        struct acpi_device_power power;
        struct acpi_device_wakeup wakeup;
-       struct acpi_device_perf performance;
-       struct acpi_device_dir  dir;
-       struct acpi_device_ops  ops;
-       struct acpi_driver      *driver;
-       void                    *driver_data;
-       struct kobject          kobj;
+       struct acpi_device_perf performance;
+       struct acpi_device_dir dir;
+       struct acpi_device_ops ops;
+       struct acpi_driver *driver;
+       void *driver_data;
+       struct kobject kobj;
 };
 
 #define acpi_driver_data(d)    ((d)->driver_data)
 
-
 /*
  * Events
  * ------
  */
 
 struct acpi_bus_event {
-       struct list_head        node;
-       acpi_device_class       device_class;
-       acpi_bus_id             bus_id;
-       u32                     type;
-       u32                     data;
+       struct list_head node;
+       acpi_device_class device_class;
+       acpi_bus_id bus_id;
+       u32 type;
+       u32 data;
 };
 
 extern struct subsystem acpi_subsys;
@@ -335,34 +321,32 @@ extern struct subsystem acpi_subsys;
 
 int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device);
 void acpi_bus_data_handler(acpi_handle handle, u32 function, void *context);
-int acpi_bus_get_status (struct acpi_device *device);
-int acpi_bus_get_power (acpi_handle handle, int *state);
-int acpi_bus_set_power (acpi_handle handle, int state);
-int acpi_bus_generate_event (struct acpi_device *device, u8 type, int data);
-int acpi_bus_receive_event (struct acpi_bus_event *event);
-int acpi_bus_register_driver (struct acpi_driver *driver);
-int acpi_bus_unregister_driver (struct acpi_driver *driver);
-int acpi_bus_add (struct acpi_device **child, struct acpi_device *parent,
-               acpi_handle handle, int type);
-int acpi_bus_start (struct acpi_device *device);
-
-
-int acpi_match_ids (struct acpi_device *device, char   *ids);
+int acpi_bus_get_status(struct acpi_device *device);
+int acpi_bus_get_power(acpi_handle handle, int *state);
+int acpi_bus_set_power(acpi_handle handle, int state);
+int acpi_bus_generate_event(struct acpi_device *device, u8 type, int data);
+int acpi_bus_receive_event(struct acpi_bus_event *event);
+int acpi_bus_register_driver(struct acpi_driver *driver);
+int acpi_bus_unregister_driver(struct acpi_driver *driver);
+int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent,
+                acpi_handle handle, int type);
+int acpi_bus_start(struct acpi_device *device);
+
+int acpi_match_ids(struct acpi_device *device, char *ids);
 int acpi_create_dir(struct acpi_device *);
 void acpi_remove_dir(struct acpi_device *);
 
-
 /*
  * Bind physical devices with ACPI devices
  */
 #include <linux/device.h>
 struct acpi_bus_type {
-       struct list_head        list;
-       struct bus_type         *bus;
-       /* For general devices under the bus*/
-       int (*find_device)(struct device *, acpi_handle*);
+       struct list_head list;
+       struct bus_type *bus;
+       /* For general devices under the bus */
+       int (*find_device) (struct device *, acpi_handle *);
        /* For bridges, such as PCI root bridge, IDE controller */
-       int (*find_bridge)(struct device *, acpi_handle *);
+       int (*find_bridge) (struct device *, acpi_handle *);
 };
 int register_acpi_bus_type(struct acpi_bus_type *);
 int unregister_acpi_bus_type(struct acpi_bus_type *);
@@ -372,6 +356,6 @@ acpi_handle acpi_get_child(acpi_handle, acpi_integer);
 acpi_handle acpi_get_pci_rootbridge_handle(unsigned int, unsigned int);
 #define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->firmware_data))
 
-#endif /*CONFIG_ACPI_BUS*/
+#endif /* CONFIG_ACPI */
 
 #endif /*__ACPI_BUS_H__*/
index 579fe191b7e7d3415fe9163568b575403e409a6a..c1b4e1f882e4a28c19e25e5c3518fed589c3eb11 100644 (file)
@@ -29,7 +29,6 @@
 #include <linux/acpi.h>
 #include <acpi/acpi_bus.h>
 
-
 #define ACPI_MAX_STRING                        80
 
 #define ACPI_BUS_COMPONENT             0x00010000
 #define ACPI_BUTTON_HID_POWERF         "ACPI_FPB"
 #define ACPI_BUTTON_HID_SLEEPF         "ACPI_FSB"
 
-
 /* --------------------------------------------------------------------------
                                        PCI
    -------------------------------------------------------------------------- */
 
-#ifdef CONFIG_ACPI_PCI
-
 #define ACPI_PCI_COMPONENT             0x00400000
 
 /* ACPI PCI Interrupt Link (pci_link.c) */
 
-int acpi_irq_penalty_init (void);
-int acpi_pci_link_allocate_irq (acpi_handle handle, int index, int *edge_level,
-       int *active_high_low, char **name);
+int acpi_irq_penalty_init(void);
+int acpi_pci_link_allocate_irq(acpi_handle handle, int index, int *edge_level,
+                              int *active_high_low, char **name);
 int acpi_pci_link_free_irq(acpi_handle handle);
 
 /* ACPI PCI Interrupt Routing (pci_irq.c) */
 
-int acpi_pci_irq_add_prt (acpi_handle handle, int segment, int bus);
-void acpi_pci_irq_del_prt (int segment, int bus);
+int acpi_pci_irq_add_prt(acpi_handle handle, int segment, int bus);
+void acpi_pci_irq_del_prt(int segment, int bus);
 
 /* ACPI PCI Device Binding (pci_bind.c) */
 
 struct pci_bus;
 
-acpi_status acpi_get_pci_id (acpi_handle handle, struct acpi_pci_id *id);
-int acpi_pci_bind (struct acpi_device *device);
-int acpi_pci_unbind (struct acpi_device *device);
-int acpi_pci_bind_root (struct acpi_device *device, struct acpi_pci_id *id, struct pci_bus *bus);
+acpi_status acpi_get_pci_id(acpi_handle handle, struct acpi_pci_id *id);
+int acpi_pci_bind(struct acpi_device *device);
+int acpi_pci_unbind(struct acpi_device *device);
+int acpi_pci_bind_root(struct acpi_device *device, struct acpi_pci_id *id,
+                      struct pci_bus *bus);
 
 /* Arch-defined function to add a bus to the system */
 
-struct pci_bus *pci_acpi_scan_root(struct acpi_device *device, int domain, int bus);
-
-#endif /*CONFIG_ACPI_PCI*/
-
+struct pci_bus *pci_acpi_scan_root(struct acpi_device *device, int domain,
+                                  int bus);
 
 /* --------------------------------------------------------------------------
                                   Power Resource
    -------------------------------------------------------------------------- */
 
 #ifdef CONFIG_ACPI_POWER
-int acpi_enable_wakeup_device_power (struct acpi_device *dev);
-int acpi_disable_wakeup_device_power (struct acpi_device *dev);
-int acpi_power_get_inferred_state (struct acpi_device *device);
-int acpi_power_transition (struct acpi_device *device, int state);
+int acpi_enable_wakeup_device_power(struct acpi_device *dev);
+int acpi_disable_wakeup_device_power(struct acpi_device *dev);
+int acpi_power_get_inferred_state(struct acpi_device *device);
+int acpi_power_transition(struct acpi_device *device, int state);
 #endif
 
-
 /* --------------------------------------------------------------------------
                                   Embedded Controller
    -------------------------------------------------------------------------- */
 #ifdef CONFIG_ACPI_EC
-int acpi_ec_ecdt_probe (void);
+int acpi_ec_ecdt_probe(void);
 #endif
 
 /* --------------------------------------------------------------------------
index ea489f2352160e3670772b235a2fe275bbcfc710..98e0b8cd14ed81bc4860b706950b99237976aeac 100644 (file)
@@ -7,7 +7,6 @@
  *
  *****************************************************************************/
 
-
 /*
  * Copyright (C) 2000 - 2005, R. Byron Moore
  * All rights reserved.
@@ -51,7 +50,6 @@
 #include "platform/acenv.h"
 #include "actypes.h"
 
-
 /* Priorities for acpi_os_queue_for_execution */
 
 #define OSD_PRIORITY_GPE            1
 #define ACPI_NO_UNIT_LIMIT          ((u32) -1)
 #define ACPI_MUTEX_SEM              1
 
-
 /* Functions for acpi_os_signal */
 
 #define ACPI_SIGNAL_FATAL           0
 #define ACPI_SIGNAL_BREAKPOINT      1
 
-struct acpi_signal_fatal_info
-{
-       u32                             type;
-       u32                             code;
-       u32                             argument;
+struct acpi_signal_fatal_info {
+       u32 type;
+       u32 code;
+       u32 argument;
 };
 
-
 /*
  * OSL Initialization and shutdown primitives
  */
-acpi_status
-acpi_os_initialize (
-       void);
-
-acpi_status
-acpi_os_terminate (
-       void);
+acpi_status acpi_os_initialize(void);
 
+acpi_status acpi_os_terminate(void);
 
 /*
  * ACPI Table interfaces
  */
-acpi_status
-acpi_os_get_root_pointer (
-       u32                             flags,
-       struct acpi_pointer             *address);
+acpi_status acpi_os_get_root_pointer(u32 flags, struct acpi_pointer *address);
 
 acpi_status
-acpi_os_predefined_override (
-       const struct acpi_predefined_names *init_val,
-       acpi_string                         *new_val);
+acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
+                           acpi_string * new_val);
 
 acpi_status
-acpi_os_table_override (
-       struct acpi_table_header        *existing_table,
-       struct acpi_table_header        **new_table);
-
+acpi_os_table_override(struct acpi_table_header *existing_table,
+                      struct acpi_table_header **new_table);
 
 /*
  * Synchronization primitives
  */
 acpi_status
-acpi_os_create_semaphore (
-       u32                             max_units,
-       u32                             initial_units,
-       acpi_handle                     *out_handle);
-
-acpi_status
-acpi_os_delete_semaphore (
-       acpi_handle                     handle);
+acpi_os_create_semaphore(u32 max_units,
+                        u32 initial_units, acpi_handle * out_handle);
 
-acpi_status
-acpi_os_wait_semaphore (
-       acpi_handle                     handle,
-       u32                             units,
-       u16                             timeout);
+acpi_status acpi_os_delete_semaphore(acpi_handle handle);
 
-acpi_status
-acpi_os_signal_semaphore (
-       acpi_handle                     handle,
-       u32                             units);
+acpi_status acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 timeout);
 
-acpi_status
-acpi_os_create_lock (
-       acpi_handle                     *out_handle);
+acpi_status acpi_os_signal_semaphore(acpi_handle handle, u32 units);
 
-void
-acpi_os_delete_lock (
-       acpi_handle                     handle);
+acpi_status acpi_os_create_lock(acpi_handle * out_handle);
 
-void
-acpi_os_acquire_lock (
-       acpi_handle                     handle,
-       u32                             flags);
+void acpi_os_delete_lock(acpi_handle handle);
 
-void
-acpi_os_release_lock (
-       acpi_handle                     handle,
-       u32                             flags);
+unsigned long acpi_os_acquire_lock(acpi_handle handle);
 
+void acpi_os_release_lock(acpi_handle handle, unsigned long flags);
 
 /*
  * Memory allocation and mapping
  */
-void *
-acpi_os_allocate (
-       acpi_size                       size);
+void *acpi_os_allocate(acpi_size size);
 
-void
-acpi_os_free (
-       void *                          memory);
+void acpi_os_free(void *memory);
 
 acpi_status
-acpi_os_map_memory (
-       acpi_physical_address           physical_address,
-       acpi_size                       size,
-       void __iomem                  **logical_address);
+acpi_os_map_memory(acpi_physical_address physical_address,
+                  acpi_size size, void __iomem ** logical_address);
 
-void
-acpi_os_unmap_memory (
-       void __iomem                  *logical_address,
-       acpi_size                       size);
+void acpi_os_unmap_memory(void __iomem * logical_address, acpi_size size);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_os_get_physical_address (
-       void                            *logical_address,
-       acpi_physical_address           *physical_address);
+acpi_os_get_physical_address(void *logical_address,
+                            acpi_physical_address * physical_address);
 #endif
 
+/*
+ * Memory/Object Cache
+ */
+acpi_status
+acpi_os_create_cache(char *cache_name,
+                    u16 object_size,
+                    u16 max_depth, acpi_cache_t ** return_cache);
+
+acpi_status acpi_os_delete_cache(acpi_cache_t * cache);
+
+acpi_status acpi_os_purge_cache(acpi_cache_t * cache);
+
+void *acpi_os_acquire_object(acpi_cache_t * cache);
+
+acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object);
 
 /*
  * Interrupt handlers
  */
 acpi_status
-acpi_os_install_interrupt_handler (
-       u32                             gsi,
-       acpi_osd_handler                service_routine,
-       void                            *context);
+acpi_os_install_interrupt_handler(u32 gsi,
+                                 acpi_osd_handler service_routine,
+                                 void *context);
 
 acpi_status
-acpi_os_remove_interrupt_handler (
-       u32                             gsi,
-       acpi_osd_handler                service_routine);
-
+acpi_os_remove_interrupt_handler(u32 gsi, acpi_osd_handler service_routine);
 
 /*
  * Threads and Scheduling
  */
-u32
-acpi_os_get_thread_id (
-       void);
+u32 acpi_os_get_thread_id(void);
 
 acpi_status
-acpi_os_queue_for_execution (
-       u32                             priority,
-       acpi_osd_exec_callback          function,
-       void                            *context);
+acpi_os_queue_for_execution(u32 priority,
+                           acpi_osd_exec_callback function, void *context);
 
-void
-acpi_os_wait_events_complete(
-       void * context);
+void acpi_os_wait_events_complete(void *context);
 
-void
-acpi_os_wait_events_complete (
-       void                            *context);
+void acpi_os_wait_events_complete(void *context);
 
-void
-acpi_os_sleep (
-       acpi_integer                    milliseconds);
-
-void
-acpi_os_stall (
-       u32                             microseconds);
+void acpi_os_sleep(acpi_integer milliseconds);
 
+void acpi_os_stall(u32 microseconds);
 
 /*
  * Platform and hardware-independent I/O interfaces
  */
-acpi_status
-acpi_os_read_port (
-       acpi_io_address                 address,
-       u32                             *value,
-       u32                             width);
-
-acpi_status
-acpi_os_write_port (
-       acpi_io_address                 address,
-       u32                             value,
-       u32                             width);
+acpi_status acpi_os_read_port(acpi_io_address address, u32 * value, u32 width);
 
+acpi_status acpi_os_write_port(acpi_io_address address, u32 value, u32 width);
 
 /*
  * Platform and hardware-independent physical memory interfaces
  */
 acpi_status
-acpi_os_read_memory (
-       acpi_physical_address           address,
-       u32                             *value,
-       u32                             width);
+acpi_os_read_memory(acpi_physical_address address, u32 * value, u32 width);
 
 acpi_status
-acpi_os_write_memory (
-       acpi_physical_address           address,
-       u32                             value,
-       u32                             width);
-
+acpi_os_write_memory(acpi_physical_address address, u32 value, u32 width);
 
 /*
  * Platform and hardware-independent PCI configuration space access
@@ -263,111 +197,69 @@ acpi_os_write_memory (
  * certain compilers complain.
  */
 acpi_status
-acpi_os_read_pci_configuration (
-       struct acpi_pci_id              *pci_id,
-       u32                             reg,
-       void                            *value,
-       u32                             width);
+acpi_os_read_pci_configuration(struct acpi_pci_id *pci_id,
+                              u32 reg, void *value, u32 width);
 
 acpi_status
-acpi_os_write_pci_configuration (
-       struct acpi_pci_id              *pci_id,
-       u32                             reg,
-       acpi_integer                    value,
-       u32                             width);
+acpi_os_write_pci_configuration(struct acpi_pci_id *pci_id,
+                               u32 reg, acpi_integer value, u32 width);
 
 /*
  * Interim function needed for PCI IRQ routing
  */
 void
-acpi_os_derive_pci_id(
-       acpi_handle                     rhandle,
-       acpi_handle                     chandle,
-       struct acpi_pci_id              **pci_id);
+acpi_os_derive_pci_id(acpi_handle rhandle,
+                     acpi_handle chandle, struct acpi_pci_id **pci_id);
 
 /*
  * Miscellaneous
  */
-u8
-acpi_os_readable (
-       void                            *pointer,
-       acpi_size                       length);
+u8 acpi_os_readable(void *pointer, acpi_size length);
 
 #ifdef ACPI_FUTURE_USAGE
-u8
-acpi_os_writable (
-       void                            *pointer,
-       acpi_size                       length);
+u8 acpi_os_writable(void *pointer, acpi_size length);
 #endif
 
-u64
-acpi_os_get_timer (
-       void);
+u64 acpi_os_get_timer(void);
 
-acpi_status
-acpi_os_signal (
-       u32                             function,
-       void                            *info);
+acpi_status acpi_os_signal(u32 function, void *info);
 
 /*
  * Debug print routines
  */
-void ACPI_INTERNAL_VAR_XFACE
-acpi_os_printf (
-       const char                      *format,
-       ...);
-
-void
-acpi_os_vprintf (
-       const char                      *format,
-       va_list                 args);
+void ACPI_INTERNAL_VAR_XFACE acpi_os_printf(const char *format, ...);
 
-void
-acpi_os_redirect_output (
-       void                            *destination);
+void acpi_os_vprintf(const char *format, va_list args);
 
+void acpi_os_redirect_output(void *destination);
 
 #ifdef ACPI_FUTURE_USAGE
 /*
  * Debug input
  */
-u32
-acpi_os_get_line (
-       char                            *buffer);
+u32 acpi_os_get_line(char *buffer);
 #endif
 
-
 /*
  * Directory manipulation
  */
-void *
-acpi_os_open_directory (
-       char                            *pathname,
-       char                            *wildcard_spec,
-       char                            requested_file_type);
+void *acpi_os_open_directory(char *pathname,
+                            char *wildcard_spec, char requested_file_type);
 
 /* requeste_file_type values */
 
 #define REQUEST_FILE_ONLY                   0
 #define REQUEST_DIR_ONLY                    1
 
+char *acpi_os_get_next_filename(void *dir_handle);
 
-char *
-acpi_os_get_next_filename (
-       void                            *dir_handle);
-
-void
-acpi_os_close_directory (
-       void                            *dir_handle);
+void acpi_os_close_directory(void *dir_handle);
 
 /*
  * Debug
  */
 void
-acpi_os_dbg_assert(
-       void                            *failed_assertion,
-       void                            *file_name,
-       u32                             line_number,
-       char                            *message);
+acpi_os_dbg_assert(void *failed_assertion,
+                  void *file_name, u32 line_number, char *message);
 
-#endif /* __ACPIOSXF_H__ */
+#endif                         /* __ACPIOSXF_H__ */
index f8f619f8e4f8f1f7b19eac252b2a1b1f7ddb018f..2a9dbc13b0f2d41a1cdbb773bf1613cd75964ec5 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #ifndef __ACXFACE_H__
 #define __ACXFACE_H__
 
 #include "actypes.h"
 #include "actbl.h"
 
-
 /*
  * Global interfaces
  */
-acpi_status
-acpi_initialize_subsystem (
-       void);
+acpi_status acpi_initialize_subsystem(void);
 
-acpi_status
-acpi_enable_subsystem (
-       u32                             flags);
+acpi_status acpi_enable_subsystem(u32 flags);
 
-acpi_status
-acpi_initialize_objects (
-       u32                             flags);
+acpi_status acpi_initialize_objects(u32 flags);
 
-acpi_status
-acpi_terminate (
-       void);
+acpi_status acpi_terminate(void);
 
 #ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_subsystem_status (
-       void);
+acpi_status acpi_subsystem_status(void);
 #endif
 
-acpi_status
-acpi_enable (
-       void);
+acpi_status acpi_enable(void);
 
-acpi_status
-acpi_disable (
-       void);
+acpi_status acpi_disable(void);
 
 #ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_get_system_info (
-       struct acpi_buffer              *ret_buffer);
+acpi_status acpi_get_system_info(struct acpi_buffer *ret_buffer);
 #endif
 
-const char *
-acpi_format_exception (
-       acpi_status                     exception);
+const char *acpi_format_exception(acpi_status exception);
 
-acpi_status
-acpi_purge_cached_objects (
-       void);
+acpi_status acpi_purge_cached_objects(void);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_install_initialization_handler (
-       acpi_init_handler               handler,
-       u32                             function);
+acpi_install_initialization_handler(acpi_init_handler handler, u32 function);
 #endif
 
 /*
  * ACPI Memory managment
  */
-void *
-acpi_allocate (
-       u32                             size);
-
-void *
-acpi_callocate (
-       u32                             size);
+void *acpi_allocate(u32 size);
 
-void
-acpi_free (
-       void                            *address);
+void *acpi_callocate(u32 size);
 
+void acpi_free(void *address);
 
 /*
  * ACPI table manipulation interfaces
  */
 acpi_status
-acpi_find_root_pointer (
-       u32                             flags,
-       struct acpi_pointer             *rsdp_address);
+acpi_find_root_pointer(u32 flags, struct acpi_pointer *rsdp_address);
 
-acpi_status
-acpi_load_tables (
-       void);
+acpi_status acpi_load_tables(void);
 
 #ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_load_table (
-       struct acpi_table_header        *table_ptr);
+acpi_status acpi_load_table(struct acpi_table_header *table_ptr);
 
-acpi_status
-acpi_unload_table (
-       acpi_table_type                 table_type);
+acpi_status acpi_unload_table(acpi_table_type table_type);
 
 acpi_status
-acpi_get_table_header (
-       acpi_table_type                 table_type,
-       u32                             instance,
-       struct acpi_table_header        *out_table_header);
-#endif  /*  ACPI_FUTURE_USAGE  */
+acpi_get_table_header(acpi_table_type table_type,
+                     u32 instance, struct acpi_table_header *out_table_header);
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 acpi_status
-acpi_get_table (
-       acpi_table_type                 table_type,
-       u32                             instance,
-       struct acpi_buffer              *ret_buffer);
+acpi_get_table(acpi_table_type table_type,
+              u32 instance, struct acpi_buffer *ret_buffer);
 
 acpi_status
-acpi_get_firmware_table (
-       acpi_string                     signature,
-       u32                             instance,
-       u32                             flags,
-       struct acpi_table_header        **table_pointer);
-
+acpi_get_firmware_table(acpi_string signature,
+                       u32 instance,
+                       u32 flags, struct acpi_table_header **table_pointer);
 
 /*
  * Namespace and name interfaces
  */
 acpi_status
-acpi_walk_namespace (
-       acpi_object_type                type,
-       acpi_handle                     start_object,
-       u32                             max_depth,
-       acpi_walk_callback              user_function,
-       void                            *context,
-       void                            **return_value);
+acpi_walk_namespace(acpi_object_type type,
+                   acpi_handle start_object,
+                   u32 max_depth,
+                   acpi_walk_callback user_function,
+                   void *context, void **return_value);
 
 acpi_status
-acpi_get_devices (
-       char                            *HID,
-       acpi_walk_callback              user_function,
-       void                            *context,
-       void                            **return_value);
+acpi_get_devices(char *HID,
+                acpi_walk_callback user_function,
+                void *context, void **return_value);
 
 acpi_status
-acpi_get_name (
-       acpi_handle                     handle,
-       u32                             name_type,
-       struct acpi_buffer              *ret_path_ptr);
+acpi_get_name(acpi_handle handle,
+             u32 name_type, struct acpi_buffer *ret_path_ptr);
 
 acpi_status
-acpi_get_handle (
-       acpi_handle                     parent,
-       acpi_string                     pathname,
-       acpi_handle                     *ret_handle);
+acpi_get_handle(acpi_handle parent,
+               acpi_string pathname, acpi_handle * ret_handle);
 
 acpi_status
-acpi_attach_data (
-       acpi_handle                     obj_handle,
-       acpi_object_handler             handler,
-       void                            *data);
+acpi_attach_data(acpi_handle obj_handle,
+                acpi_object_handler handler, void *data);
 
 acpi_status
-acpi_detach_data (
-       acpi_handle                     obj_handle,
-       acpi_object_handler             handler);
+acpi_detach_data(acpi_handle obj_handle, acpi_object_handler handler);
 
 acpi_status
-acpi_get_data (
-       acpi_handle                     obj_handle,
-       acpi_object_handler             handler,
-       void                            **data);
-
+acpi_get_data(acpi_handle obj_handle, acpi_object_handler handler, void **data);
 
 /*
  * Object manipulation and enumeration
  */
 acpi_status
-acpi_evaluate_object (
-       acpi_handle                     object,
-       acpi_string                     pathname,
-       struct acpi_object_list         *parameter_objects,
-       struct acpi_buffer              *return_object_buffer);
+acpi_evaluate_object(acpi_handle object,
+                    acpi_string pathname,
+                    struct acpi_object_list *parameter_objects,
+                    struct acpi_buffer *return_object_buffer);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_evaluate_object_typed (
-       acpi_handle                     object,
-       acpi_string                     pathname,
-       struct acpi_object_list         *external_params,
-       struct acpi_buffer              *return_buffer,
-       acpi_object_type                return_type);
+acpi_evaluate_object_typed(acpi_handle object,
+                          acpi_string pathname,
+                          struct acpi_object_list *external_params,
+                          struct acpi_buffer *return_buffer,
+                          acpi_object_type return_type);
 #endif
 
 acpi_status
-acpi_get_object_info (
-       acpi_handle                     handle,
-       struct acpi_buffer              *return_buffer);
+acpi_get_object_info(acpi_handle handle, struct acpi_buffer *return_buffer);
 
 acpi_status
-acpi_get_next_object (
-       acpi_object_type                type,
-       acpi_handle                     parent,
-       acpi_handle                     child,
-       acpi_handle                     *out_handle);
+acpi_get_next_object(acpi_object_type type,
+                    acpi_handle parent,
+                    acpi_handle child, acpi_handle * out_handle);
 
-acpi_status
-acpi_get_type (
-       acpi_handle                     object,
-       acpi_object_type                *out_type);
-
-acpi_status
-acpi_get_parent (
-       acpi_handle                     object,
-       acpi_handle                     *out_handle);
+acpi_status acpi_get_type(acpi_handle object, acpi_object_type * out_type);
 
+acpi_status acpi_get_parent(acpi_handle object, acpi_handle * out_handle);
 
 /*
  * Event handler interfaces
  */
 acpi_status
-acpi_install_fixed_event_handler (
-       u32                             acpi_event,
-       acpi_event_handler              handler,
-       void                            *context);
+acpi_install_fixed_event_handler(u32 acpi_event,
+                                acpi_event_handler handler, void *context);
 
 acpi_status
-acpi_remove_fixed_event_handler (
-       u32                             acpi_event,
-       acpi_event_handler              handler);
+acpi_remove_fixed_event_handler(u32 acpi_event, acpi_event_handler handler);
 
 acpi_status
-acpi_install_notify_handler (
-       acpi_handle                     device,
-       u32                             handler_type,
-       acpi_notify_handler             handler,
-       void                            *context);
+acpi_install_notify_handler(acpi_handle device,
+                           u32 handler_type,
+                           acpi_notify_handler handler, void *context);
 
 acpi_status
-acpi_remove_notify_handler (
-       acpi_handle                     device,
-       u32                             handler_type,
-       acpi_notify_handler             handler);
+acpi_remove_notify_handler(acpi_handle device,
+                          u32 handler_type, acpi_notify_handler handler);
 
 acpi_status
-acpi_install_address_space_handler (
-       acpi_handle                     device,
-       acpi_adr_space_type             space_id,
-       acpi_adr_space_handler          handler,
-       acpi_adr_space_setup            setup,
-       void                            *context);
+acpi_install_address_space_handler(acpi_handle device,
+                                  acpi_adr_space_type space_id,
+                                  acpi_adr_space_handler handler,
+                                  acpi_adr_space_setup setup, void *context);
 
 acpi_status
-acpi_remove_address_space_handler (
-       acpi_handle                     device,
-       acpi_adr_space_type             space_id,
-       acpi_adr_space_handler          handler);
+acpi_remove_address_space_handler(acpi_handle device,
+                                 acpi_adr_space_type space_id,
+                                 acpi_adr_space_handler handler);
 
 acpi_status
-acpi_install_gpe_handler (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             type,
-       acpi_event_handler              address,
-       void                            *context);
+acpi_install_gpe_handler(acpi_handle gpe_device,
+                        u32 gpe_number,
+                        u32 type, acpi_event_handler address, void *context);
 
 #ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_install_exception_handler (
-       acpi_exception_handler          handler);
+acpi_status acpi_install_exception_handler(acpi_exception_handler handler);
 #endif
 
-
 /*
  * Event interfaces
  */
-acpi_status
-acpi_acquire_global_lock (
-       u16                             timeout,
-       u32                             *handle);
+acpi_status acpi_acquire_global_lock(u16 timeout, u32 * handle);
 
-acpi_status
-acpi_release_global_lock (
-       u32                             handle);
+acpi_status acpi_release_global_lock(u32 handle);
 
 acpi_status
-acpi_remove_gpe_handler (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       acpi_event_handler              address);
+acpi_remove_gpe_handler(acpi_handle gpe_device,
+                       u32 gpe_number, acpi_event_handler address);
 
-acpi_status
-acpi_enable_event (
-       u32                             event,
-       u32                             flags);
+acpi_status acpi_enable_event(u32 event, u32 flags);
 
-acpi_status
-acpi_disable_event (
-       u32                             event,
-       u32                             flags);
+acpi_status acpi_disable_event(u32 event, u32 flags);
 
-acpi_status
-acpi_clear_event (
-       u32                             event);
+acpi_status acpi_clear_event(u32 event);
 
 #ifdef ACPI_FUTURE_USAGE
-acpi_status
-acpi_get_event_status (
-       u32                             event,
-       acpi_event_status               *event_status);
-#endif  /*  ACPI_FUTURE_USAGE  */
+acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status);
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
-acpi_status
-acpi_set_gpe_type (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u8                              type);
+acpi_status acpi_set_gpe_type(acpi_handle gpe_device, u32 gpe_number, u8 type);
 
-acpi_status
-acpi_enable_gpe (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags);
+acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags);
 
-acpi_status
-acpi_disable_gpe (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags);
+acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags);
 
-acpi_status
-acpi_clear_gpe (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags);
+acpi_status acpi_clear_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_get_gpe_status (
-       acpi_handle                     gpe_device,
-       u32                             gpe_number,
-       u32                             flags,
-       acpi_event_status               *event_status);
-#endif  /*  ACPI_FUTURE_USAGE  */
+acpi_get_gpe_status(acpi_handle gpe_device,
+                   u32 gpe_number,
+                   u32 flags, acpi_event_status * event_status);
+#endif                         /*  ACPI_FUTURE_USAGE  */
 
 acpi_status
-acpi_install_gpe_block (
-       acpi_handle                     gpe_device,
-       struct acpi_generic_address     *gpe_block_address,
-       u32                             register_count,
-       u32                             interrupt_level);
-
-acpi_status
-acpi_remove_gpe_block (
-       acpi_handle                     gpe_device);
+acpi_install_gpe_block(acpi_handle gpe_device,
+                      struct acpi_generic_address *gpe_block_address,
+                      u32 register_count, u32 interrupt_number);
 
+acpi_status acpi_remove_gpe_block(acpi_handle gpe_device);
 
 /*
  * Resource interfaces
  */
 typedef
-acpi_status (*ACPI_WALK_RESOURCE_CALLBACK) (
-       struct acpi_resource            *resource,
-       void                            *context);
-
+acpi_status(*ACPI_WALK_RESOURCE_CALLBACK) (struct acpi_resource * resource,
+                                          void *context);
 
 acpi_status
-acpi_get_current_resources(
-       acpi_handle                     device_handle,
-       struct acpi_buffer              *ret_buffer);
+acpi_get_current_resources(acpi_handle device_handle,
+                          struct acpi_buffer *ret_buffer);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_get_possible_resources(
-       acpi_handle                     device_handle,
-       struct acpi_buffer              *ret_buffer);
+acpi_get_possible_resources(acpi_handle device_handle,
+                           struct acpi_buffer *ret_buffer);
 #endif
 
 acpi_status
-acpi_walk_resources (
-       acpi_handle                             device_handle,
-       char                                    *path,
-       ACPI_WALK_RESOURCE_CALLBACK     user_function,
-       void                                    *context);
+acpi_walk_resources(acpi_handle device_handle,
+                   char *path,
+                   ACPI_WALK_RESOURCE_CALLBACK user_function, void *context);
 
 acpi_status
-acpi_set_current_resources (
-       acpi_handle                     device_handle,
-       struct acpi_buffer              *in_buffer);
+acpi_set_current_resources(acpi_handle device_handle,
+                          struct acpi_buffer *in_buffer);
 
 acpi_status
-acpi_get_irq_routing_table (
-       acpi_handle                     bus_device_handle,
-       struct acpi_buffer              *ret_buffer);
+acpi_get_irq_routing_table(acpi_handle bus_device_handle,
+                          struct acpi_buffer *ret_buffer);
 
 acpi_status
-acpi_resource_to_address64 (
-       struct acpi_resource            *resource,
-       struct acpi_resource_address64 *out);
+acpi_resource_to_address64(struct acpi_resource *resource,
+                          struct acpi_resource_address64 *out);
 
 /*
  * Hardware (ACPI device) interfaces
  */
-acpi_status
-acpi_get_register (
-       u32                             register_id,
-       u32                             *return_value,
-       u32                             flags);
+acpi_status acpi_get_register(u32 register_id, u32 * return_value, u32 flags);
 
-acpi_status
-acpi_set_register (
-       u32                             register_id,
-       u32                             value,
-       u32                             flags);
+acpi_status acpi_set_register(u32 register_id, u32 value, u32 flags);
 
 acpi_status
-acpi_set_firmware_waking_vector (
-       acpi_physical_address           physical_address);
+acpi_set_firmware_waking_vector(acpi_physical_address physical_address);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_get_firmware_waking_vector (
-       acpi_physical_address           *physical_address);
+acpi_get_firmware_waking_vector(acpi_physical_address * physical_address);
 #endif
 
 acpi_status
-acpi_get_sleep_type_data (
-       u8                              sleep_state,
-       u8                              *slp_typ_a,
-       u8                              *slp_typ_b);
+acpi_get_sleep_type_data(u8 sleep_state, u8 * slp_typ_a, u8 * slp_typ_b);
 
-acpi_status
-acpi_enter_sleep_state_prep (
-       u8                              sleep_state);
+acpi_status acpi_enter_sleep_state_prep(u8 sleep_state);
 
-acpi_status asmlinkage
-acpi_enter_sleep_state (
-       u8                              sleep_state);
+acpi_status asmlinkage acpi_enter_sleep_state(u8 sleep_state);
 
-acpi_status asmlinkage
-acpi_enter_sleep_state_s4bios (
-       void);
-
-acpi_status
-acpi_leave_sleep_state (
-       u8                              sleep_state);
+acpi_status asmlinkage acpi_enter_sleep_state_s4bios(void);
 
+acpi_status acpi_leave_sleep_state(u8 sleep_state);
 
-#endif /* __ACXFACE_H__ */
+#endif                         /* __ACXFACE_H__ */
index ed679264c12c96debab75b04eaf91eb7168415aa..38e798b05d088f826ca56f1ff67ba91edcb303c5 100644 (file)
 #ifndef __ACRESRC_H__
 #define __ACRESRC_H__
 
-
 /*
  *  Function prototypes called from Acpi* APIs
  */
 acpi_status
-acpi_rs_get_prt_method_data (
-       acpi_handle                     handle,
-       struct acpi_buffer              *ret_buffer);
-
+acpi_rs_get_prt_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer);
 
 acpi_status
-acpi_rs_get_crs_method_data (
-       acpi_handle                     handle,
-       struct acpi_buffer              *ret_buffer);
+acpi_rs_get_crs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_rs_get_prs_method_data (
-       acpi_handle                     handle,
-       struct acpi_buffer              *ret_buffer);
-#endif /* ACPI_FUTURE_USAGE */
+acpi_rs_get_prs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer);
+#endif                         /* ACPI_FUTURE_USAGE */
 
 acpi_status
-acpi_rs_get_method_data (
-       acpi_handle                     handle,
-       char                            *path,
-       struct acpi_buffer              *ret_buffer);
+acpi_rs_get_method_data(acpi_handle handle,
+                       char *path, struct acpi_buffer *ret_buffer);
 
 acpi_status
-acpi_rs_set_srs_method_data (
-       acpi_handle                     handle,
-       struct acpi_buffer              *ret_buffer);
+acpi_rs_set_srs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer);
 
 acpi_status
-acpi_rs_create_resource_list (
-       union acpi_operand_object       *byte_stream_buffer,
-       struct acpi_buffer              *output_buffer);
+acpi_rs_create_resource_list(union acpi_operand_object *byte_stream_buffer,
+                            struct acpi_buffer *output_buffer);
 
 acpi_status
-acpi_rs_create_byte_stream (
-       struct acpi_resource            *linked_list_buffer,
-       struct acpi_buffer              *output_buffer);
+acpi_rs_create_byte_stream(struct acpi_resource *linked_list_buffer,
+                          struct acpi_buffer *output_buffer);
 
 acpi_status
-acpi_rs_create_pci_routing_table (
-       union acpi_operand_object       *package_object,
-       struct acpi_buffer              *output_buffer);
-
+acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
+                                struct acpi_buffer *output_buffer);
 
 /*
  * rsdump
  */
 #ifdef ACPI_FUTURE_USAGE
-void
-acpi_rs_dump_resource_list (
-       struct acpi_resource            *resource);
-
-void
-acpi_rs_dump_irq_list (
-       u8                              *route_table);
-#endif /* ACPI_FUTURE_USAGE */
+void acpi_rs_dump_resource_list(struct acpi_resource *resource);
 
+void acpi_rs_dump_irq_list(u8 * route_table);
+#endif                         /* ACPI_FUTURE_USAGE */
 
 /*
  * rscalc
  */
 acpi_status
-acpi_rs_get_byte_stream_start (
-       u8                              *byte_stream_buffer,
-       u8                              **byte_stream_start,
-       u32                             *size);
+acpi_rs_get_byte_stream_start(u8 * byte_stream_buffer,
+                             u8 ** byte_stream_start, u32 * size);
 
 acpi_status
-acpi_rs_get_list_length (
-       u8                              *byte_stream_buffer,
-       u32                             byte_stream_buffer_length,
-       acpi_size                       *size_needed);
+acpi_rs_get_list_length(u8 * byte_stream_buffer,
+                       u32 byte_stream_buffer_length, acpi_size * size_needed);
 
 acpi_status
-acpi_rs_get_byte_stream_length (
-       struct acpi_resource            *linked_list_buffer,
-       acpi_size                       *size_needed);
+acpi_rs_get_byte_stream_length(struct acpi_resource *linked_list_buffer,
+                              acpi_size * size_needed);
 
 acpi_status
-acpi_rs_get_pci_routing_table_length (
-       union acpi_operand_object       *package_object,
-       acpi_size                       *buffer_size_needed);
+acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
+                                    acpi_size * buffer_size_needed);
 
 acpi_status
-acpi_rs_byte_stream_to_list (
-       u8                              *byte_stream_buffer,
-       u32                             byte_stream_buffer_length,
-       u8                              *output_buffer);
+acpi_rs_byte_stream_to_list(u8 * byte_stream_buffer,
+                           u32 byte_stream_buffer_length, u8 * output_buffer);
 
 acpi_status
-acpi_rs_list_to_byte_stream (
-       struct acpi_resource            *linked_list,
-       acpi_size                       byte_stream_size_needed,
-       u8                              *output_buffer);
+acpi_rs_list_to_byte_stream(struct acpi_resource *linked_list,
+                           acpi_size byte_stream_size_needed,
+                           u8 * output_buffer);
 
 acpi_status
-acpi_rs_io_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_io_resource(u8 * byte_stream_buffer,
+                   acpi_size * bytes_consumed,
+                   u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_fixed_io_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_fixed_io_resource(u8 * byte_stream_buffer,
+                         acpi_size * bytes_consumed,
+                         u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_io_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_io_stream(struct acpi_resource *linked_list,
+                 u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_fixed_io_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_fixed_io_stream(struct acpi_resource *linked_list,
+                       u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_irq_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_irq_resource(u8 * byte_stream_buffer,
+                    acpi_size * bytes_consumed,
+                    u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_irq_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_irq_stream(struct acpi_resource *linked_list,
+                  u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_dma_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_dma_resource(u8 * byte_stream_buffer,
+                    acpi_size * bytes_consumed,
+                    u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_dma_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_dma_stream(struct acpi_resource *linked_list,
+                  u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_address16_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_address16_resource(u8 * byte_stream_buffer,
+                          acpi_size * bytes_consumed,
+                          u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_address16_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_address16_stream(struct acpi_resource *linked_list,
+                        u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_address32_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_address32_resource(u8 * byte_stream_buffer,
+                          acpi_size * bytes_consumed,
+                          u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_address32_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_address32_stream(struct acpi_resource *linked_list,
+                        u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_address64_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_address64_resource(u8 * byte_stream_buffer,
+                          acpi_size * bytes_consumed,
+                          u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_address64_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_address64_stream(struct acpi_resource *linked_list,
+                        u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_start_depend_fns_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_start_depend_fns_resource(u8 * byte_stream_buffer,
+                                 acpi_size * bytes_consumed,
+                                 u8 ** output_buffer,
+                                 acpi_size * structure_size);
 
 acpi_status
-acpi_rs_end_depend_fns_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_end_depend_fns_resource(u8 * byte_stream_buffer,
+                               acpi_size * bytes_consumed,
+                               u8 ** output_buffer,
+                               acpi_size * structure_size);
 
 acpi_status
-acpi_rs_start_depend_fns_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_start_depend_fns_stream(struct acpi_resource *linked_list,
+                               u8 ** output_buffer,
+                               acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_end_depend_fns_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_end_depend_fns_stream(struct acpi_resource *linked_list,
+                             u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_memory24_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_memory24_resource(u8 * byte_stream_buffer,
+                         acpi_size * bytes_consumed,
+                         u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_memory24_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_memory24_stream(struct acpi_resource *linked_list,
+                       u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_memory32_range_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_memory32_range_resource(u8 * byte_stream_buffer,
+                               acpi_size * bytes_consumed,
+                               u8 ** output_buffer,
+                               acpi_size * structure_size);
 
 acpi_status
-acpi_rs_fixed_memory32_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_fixed_memory32_resource(u8 * byte_stream_buffer,
+                               acpi_size * bytes_consumed,
+                               u8 ** output_buffer,
+                               acpi_size * structure_size);
 
 acpi_status
-acpi_rs_memory32_range_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_memory32_range_stream(struct acpi_resource *linked_list,
+                             u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_fixed_memory32_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_fixed_memory32_stream(struct acpi_resource *linked_list,
+                             u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_extended_irq_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_extended_irq_resource(u8 * byte_stream_buffer,
+                             acpi_size * bytes_consumed,
+                             u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_extended_irq_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_extended_irq_stream(struct acpi_resource *linked_list,
+                           u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_end_tag_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_end_tag_resource(u8 * byte_stream_buffer,
+                        acpi_size * bytes_consumed,
+                        u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_end_tag_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_end_tag_stream(struct acpi_resource *linked_list,
+                      u8 ** output_buffer, acpi_size * bytes_consumed);
 
 acpi_status
-acpi_rs_vendor_resource (
-       u8                              *byte_stream_buffer,
-       acpi_size                       *bytes_consumed,
-       u8                              **output_buffer,
-       acpi_size                       *structure_size);
+acpi_rs_vendor_resource(u8 * byte_stream_buffer,
+                       acpi_size * bytes_consumed,
+                       u8 ** output_buffer, acpi_size * structure_size);
 
 acpi_status
-acpi_rs_vendor_stream (
-       struct acpi_resource            *linked_list,
-       u8                              **output_buffer,
-       acpi_size                       *bytes_consumed);
+acpi_rs_vendor_stream(struct acpi_resource *linked_list,
+                     u8 ** output_buffer, acpi_size * bytes_consumed);
 
-u8
-acpi_rs_get_resource_type (
-       u8                              resource_start_byte);
+u8 acpi_rs_get_resource_type(u8 resource_start_byte);
 
-#endif  /* __ACRESRC_H__ */
+#endif                         /* __ACRESRC_H__ */
index e6b9e36a2eda31d4cd4a032546f67ae1f7f1106c..99d2353398016c3bb47df71b892672f0380486e3 100644 (file)
 #ifndef __ACSTRUCT_H__
 #define __ACSTRUCT_H__
 
-
 /*****************************************************************************
  *
  * Tree walking typedefs and structs
  *
  ****************************************************************************/
 
-
 /*
  * Walk state - current state of a parse tree walk.  Used for both a leisurely stroll through
  * the tree (for whatever reason), and for control method execution.
 #define ACPI_WALK_CONST_REQUIRED    3
 #define ACPI_WALK_CONST_OPTIONAL    4
 
-struct acpi_walk_state
-{
-       u8                                  data_type;                          /* To differentiate various internal objs MUST BE FIRST!*/\
-       u8                                  walk_type;
-       acpi_owner_id                       owner_id;                           /* Owner of objects created during the walk */
-       u8                                  last_predicate;                     /* Result of last predicate */
-       u8                                  reserved;                           /* For alignment */
-       u8                                  current_result;                     /* */
-       u8                                  next_op_info;                       /* Info about next_op */
-       u8                                  num_operands;                       /* Stack pointer for Operands[] array */
-       u8                                  return_used;
-       u16                                 opcode;                             /* Current AML opcode */
-       u8                                  scope_depth;
-       u8                                  reserved1;
-       u32                                 arg_count;                          /* push for fixed or var args */
-       u32                                 aml_offset;
-       u32                                 arg_types;
-       u32                                 method_breakpoint;                  /* For single stepping */
-       u32                                 user_breakpoint;                    /* User AML breakpoint */
-       u32                                 parse_flags;
-       u32                                 prev_arg_types;
-
-       u8                                  *aml_last_while;
-       struct acpi_namespace_node          arguments[ACPI_METHOD_NUM_ARGS];    /* Control method arguments */
-       union acpi_operand_object           **caller_return_desc;
-       union acpi_generic_state            *control_state;                     /* List of control states (nested IFs) */
-       struct acpi_namespace_node          *deferred_node;                     /* Used when executing deferred opcodes */
-       struct acpi_gpe_event_info          *gpe_event_info;                    /* Info for GPE (_Lxx/_Exx methods only */
-       union acpi_operand_object           *implicit_return_obj;
-       struct acpi_namespace_node          local_variables[ACPI_METHOD_NUM_LOCALS];    /* Control method locals */
-       struct acpi_namespace_node          *method_call_node;                  /* Called method Node*/
-       union acpi_parse_object             *method_call_op;                    /* method_call Op if running a method */
-       union acpi_operand_object           *method_desc;                       /* Method descriptor if running a method */
-       struct acpi_namespace_node          *method_node;                       /* Method node if running a method. */
-       union acpi_parse_object             *op;                                /* Current parser op */
-       union acpi_operand_object           *operands[ACPI_OBJ_NUM_OPERANDS+1]; /* Operands passed to the interpreter (+1 for NULL terminator) */
-       const struct acpi_opcode_info       *op_info;                           /* Info on current opcode */
-       union acpi_parse_object             *origin;                            /* Start of walk [Obsolete] */
-       union acpi_operand_object           **params;
-       struct acpi_parse_state             parser_state;                       /* Current state of parser */
-       union acpi_operand_object           *result_obj;
-       union acpi_generic_state            *results;                           /* Stack of accumulated results */
-       union acpi_operand_object           *return_desc;                       /* Return object, if any */
-       union acpi_generic_state            *scope_info;                        /* Stack of nested scopes */
-
-       union acpi_parse_object             *prev_op;                           /* Last op that was processed */
-       union acpi_parse_object             *next_op;                           /* next op to be processed */
-       acpi_parse_downwards                descending_callback;
-       acpi_parse_upwards                  ascending_callback;
-       struct acpi_thread_state            *thread;
-       struct acpi_walk_state              *next;                              /* Next walk_state in list */
+struct acpi_walk_state {
+       u8 data_type;           /* To differentiate various internal objs MUST BE FIRST! */
+       u8 walk_type;
+       acpi_owner_id owner_id; /* Owner of objects created during the walk */
+       u8 last_predicate;      /* Result of last predicate */
+       u8 current_result;      /* */
+       u8 next_op_info;        /* Info about next_op */
+       u8 num_operands;        /* Stack pointer for Operands[] array */
+       u8 return_used;
+       u16 opcode;             /* Current AML opcode */
+       u8 scope_depth;
+       u8 pass_number;         /* Parse pass during table load */
+       u32 arg_count;          /* push for fixed or var args */
+       u32 aml_offset;
+       u32 arg_types;
+       u32 method_breakpoint;  /* For single stepping */
+       u32 user_breakpoint;    /* User AML breakpoint */
+       u32 parse_flags;
+       u32 prev_arg_types;
+
+       u8 *aml_last_while;
+       struct acpi_namespace_node arguments[ACPI_METHOD_NUM_ARGS];     /* Control method arguments */
+       union acpi_operand_object **caller_return_desc;
+       union acpi_generic_state *control_state;        /* List of control states (nested IFs) */
+       struct acpi_namespace_node *deferred_node;      /* Used when executing deferred opcodes */
+       struct acpi_gpe_event_info *gpe_event_info;     /* Info for GPE (_Lxx/_Exx methods only */
+       union acpi_operand_object *implicit_return_obj;
+       struct acpi_namespace_node local_variables[ACPI_METHOD_NUM_LOCALS];     /* Control method locals */
+       struct acpi_namespace_node *method_call_node;   /* Called method Node */
+       union acpi_parse_object *method_call_op;        /* method_call Op if running a method */
+       union acpi_operand_object *method_desc; /* Method descriptor if running a method */
+       struct acpi_namespace_node *method_node;        /* Method node if running a method. */
+       union acpi_parse_object *op;    /* Current parser op */
+       union acpi_operand_object *operands[ACPI_OBJ_NUM_OPERANDS + 1]; /* Operands passed to the interpreter (+1 for NULL terminator) */
+       const struct acpi_opcode_info *op_info; /* Info on current opcode */
+       union acpi_parse_object *origin;        /* Start of walk [Obsolete] */
+       union acpi_operand_object **params;
+       struct acpi_parse_state parser_state;   /* Current state of parser */
+       union acpi_operand_object *result_obj;
+       union acpi_generic_state *results;      /* Stack of accumulated results */
+       union acpi_operand_object *return_desc; /* Return object, if any */
+       union acpi_generic_state *scope_info;   /* Stack of nested scopes */
+
+       union acpi_parse_object *prev_op;       /* Last op that was processed */
+       union acpi_parse_object *next_op;       /* next op to be processed */
+       acpi_parse_downwards descending_callback;
+       acpi_parse_upwards ascending_callback;
+       struct acpi_thread_state *thread;
+       struct acpi_walk_state *next;   /* Next walk_state in list */
 };
 
-
 /* Info used by acpi_ps_init_objects */
 
-struct acpi_init_walk_info
-{
-       u16                             method_count;
-       u16                             device_count;
-       u16                             op_region_count;
-       u16                             field_count;
-       u16                             buffer_count;
-       u16                             package_count;
-       u16                             op_region_init;
-       u16                             field_init;
-       u16                             buffer_init;
-       u16                             package_init;
-       u16                             object_count;
-       struct acpi_table_desc          *table_desc;
+struct acpi_init_walk_info {
+       u16 method_count;
+       u16 device_count;
+       u16 op_region_count;
+       u16 field_count;
+       u16 buffer_count;
+       u16 package_count;
+       u16 op_region_init;
+       u16 field_init;
+       u16 buffer_init;
+       u16 package_init;
+       u16 object_count;
+       struct acpi_table_desc *table_desc;
 };
 
-
 /* Info used by acpi_ns_initialize_devices */
 
-struct acpi_device_walk_info
-{
-       u16                             device_count;
-       u16                             num_STA;
-       u16                             num_INI;
-       struct acpi_table_desc          *table_desc;
+struct acpi_device_walk_info {
+       u16 device_count;
+       u16 num_STA;
+       u16 num_INI;
+       struct acpi_table_desc *table_desc;
 };
 
-
 /* TBD: [Restructure] Merge with struct above */
 
-struct acpi_walk_info
-{
-       u32                             debug_level;
-       u32                             owner_id;
-       u8                              display_type;
+struct acpi_walk_info {
+       u32 debug_level;
+       u32 count;
+       acpi_owner_id owner_id;
+       u8 display_type;
 };
 
 /* Display Types */
 
-#define ACPI_DISPLAY_SUMMARY    0
-#define ACPI_DISPLAY_OBJECTS    1
+#define ACPI_DISPLAY_SUMMARY    (u8) 0
+#define ACPI_DISPLAY_OBJECTS    (u8) 1
+#define ACPI_DISPLAY_MASK       (u8) 1
 
-struct acpi_get_devices_info
-{
-       acpi_walk_callback              user_function;
-       void                            *context;
-       char                            *hid;
-};
+#define ACPI_DISPLAY_SHORT      (u8) 2
 
+struct acpi_get_devices_info {
+       acpi_walk_callback user_function;
+       void *context;
+       char *hid;
+};
 
-union acpi_aml_operands
-{
-       union acpi_operand_object           *operands[7];
+union acpi_aml_operands {
+       union acpi_operand_object *operands[7];
 
-       struct
-       {
-               struct acpi_object_integer      *type;
-               struct acpi_object_integer      *code;
-               struct acpi_object_integer      *argument;
+       struct {
+               struct acpi_object_integer *type;
+               struct acpi_object_integer *code;
+               struct acpi_object_integer *argument;
 
        } fatal;
 
-       struct
-       {
-               union acpi_operand_object       *source;
-               struct acpi_object_integer      *index;
-               union acpi_operand_object       *target;
+       struct {
+               union acpi_operand_object *source;
+               struct acpi_object_integer *index;
+               union acpi_operand_object *target;
 
        } index;
 
-       struct
-       {
-               union acpi_operand_object       *source;
-               struct acpi_object_integer      *index;
-               struct acpi_object_integer      *length;
-               union acpi_operand_object       *target;
+       struct {
+               union acpi_operand_object *source;
+               struct acpi_object_integer *index;
+               struct acpi_object_integer *length;
+               union acpi_operand_object *target;
 
        } mid;
 };
 
-
 /* Internal method parameter list */
 
-struct acpi_parameter_info
-{
-       struct acpi_namespace_node      *node;
-       union acpi_operand_object       **parameters;
-       union acpi_operand_object       *return_object;
-       u8                              parameter_type;
-       u8                              return_object_type;
+struct acpi_parameter_info {
+       struct acpi_namespace_node *node;
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object **parameters;
+       union acpi_operand_object *return_object;
+       u8 pass_number;
+       u8 parameter_type;
+       u8 return_object_type;
 };
 
 /* Types for parameter_type above */
@@ -218,5 +206,4 @@ struct acpi_parameter_info
 #define ACPI_PARAM_ARGS                 0
 #define ACPI_PARAM_GPE                  1
 
-
 #endif
index 39df92e21a0d9f72e05ad0e2e66c410875f62c27..f92c1858b8084f5bca9f455fcf70dc8b81942f70 100644 (file)
 #ifndef __ACTABLES_H__
 #define __ACTABLES_H__
 
-
 /* Used in acpi_tb_map_acpi_table for size parameter if table header is to be used */
 
 #define SIZE_IN_HEADER          0
 
-
 /*
  * tbconvrt - Table conversion routines
  */
-acpi_status
-acpi_tb_convert_to_xsdt (
-       struct acpi_table_desc          *table_info);
+acpi_status acpi_tb_convert_to_xsdt(struct acpi_table_desc *table_info);
 
-acpi_status
-acpi_tb_convert_table_fadt (
-       void);
+acpi_status acpi_tb_convert_table_fadt(void);
 
-acpi_status
-acpi_tb_build_common_facs (
-       struct acpi_table_desc          *table_info);
+acpi_status acpi_tb_build_common_facs(struct acpi_table_desc *table_info);
 
 u32
-acpi_tb_get_table_count (
-       struct rsdp_descriptor          *RSDP,
-       struct acpi_table_header        *RSDT);
-
+acpi_tb_get_table_count(struct rsdp_descriptor *RSDP,
+                       struct acpi_table_header *RSDT);
 
 /*
  * tbget - Table "get" routines
  */
 acpi_status
-acpi_tb_get_table (
-       struct acpi_pointer             *address,
-       struct acpi_table_desc          *table_info);
-
-acpi_status
-acpi_tb_get_table_header (
-       struct acpi_pointer             *address,
-       struct acpi_table_header        *return_header);
+acpi_tb_get_table(struct acpi_pointer *address,
+                 struct acpi_table_desc *table_info);
 
 acpi_status
-acpi_tb_get_table_body (
-       struct acpi_pointer             *address,
-       struct acpi_table_header        *header,
-       struct acpi_table_desc          *table_info);
+acpi_tb_get_table_header(struct acpi_pointer *address,
+                        struct acpi_table_header *return_header);
 
 acpi_status
-acpi_tb_get_table_ptr (
-       acpi_table_type                 table_type,
-       u32                             instance,
-       struct acpi_table_header        **table_ptr_loc);
+acpi_tb_get_table_body(struct acpi_pointer *address,
+                      struct acpi_table_header *header,
+                      struct acpi_table_desc *table_info);
 
 acpi_status
-acpi_tb_verify_rsdp (
-       struct acpi_pointer             *address);
+acpi_tb_get_table_ptr(acpi_table_type table_type,
+                     u32 instance, struct acpi_table_header **table_ptr_loc);
 
-void
-acpi_tb_get_rsdt_address (
-       struct acpi_pointer             *out_address);
+acpi_status acpi_tb_verify_rsdp(struct acpi_pointer *address);
 
-acpi_status
-acpi_tb_validate_rsdt (
-       struct acpi_table_header        *table_ptr);
+void acpi_tb_get_rsdt_address(struct acpi_pointer *out_address);
 
+acpi_status acpi_tb_validate_rsdt(struct acpi_table_header *table_ptr);
 
 /*
  * tbgetall - get multiple required tables
  */
-acpi_status
-acpi_tb_get_required_tables (
-       void);
-
+acpi_status acpi_tb_get_required_tables(void);
 
 /*
  * tbinstall - Table installation
  */
-acpi_status
-acpi_tb_install_table (
-       struct acpi_table_desc          *table_info);
+acpi_status acpi_tb_install_table(struct acpi_table_desc *table_info);
 
 acpi_status
-acpi_tb_recognize_table (
-       struct acpi_table_desc          *table_info,
-       u8                              search_type);
+acpi_tb_recognize_table(struct acpi_table_desc *table_info, u8 search_type);
 
 acpi_status
-acpi_tb_init_table_descriptor (
-       acpi_table_type                 table_type,
-       struct acpi_table_desc          *table_info);
-
+acpi_tb_init_table_descriptor(acpi_table_type table_type,
+                             struct acpi_table_desc *table_info);
 
 /*
  * tbremove - Table removal and deletion
  */
-void
-acpi_tb_delete_all_tables (
-       void);
-
-void
-acpi_tb_delete_tables_by_type (
-       acpi_table_type                 type);
+void acpi_tb_delete_all_tables(void);
 
-void
-acpi_tb_delete_single_table (
-       struct acpi_table_desc          *table_desc);
+void acpi_tb_delete_tables_by_type(acpi_table_type type);
 
-struct acpi_table_desc *
-acpi_tb_uninstall_table (
-       struct acpi_table_desc          *table_desc);
+void acpi_tb_delete_single_table(struct acpi_table_desc *table_desc);
 
+struct acpi_table_desc *acpi_tb_uninstall_table(struct acpi_table_desc
+                                               *table_desc);
 
 /*
  * tbxfroot - RSDP, RSDT utilities
  */
 acpi_status
-acpi_tb_find_table (
-       char                            *signature,
-       char                            *oem_id,
-       char                            *oem_table_id,
-       struct acpi_table_header        **table_ptr);
+acpi_tb_find_table(char *signature,
+                  char *oem_id,
+                  char *oem_table_id, struct acpi_table_header **table_ptr);
 
-acpi_status
-acpi_tb_get_table_rsdt (
-       void);
+acpi_status acpi_tb_get_table_rsdt(void);
 
+acpi_status acpi_tb_validate_rsdp(struct rsdp_descriptor *rsdp);
 
 /*
  * tbutils - common table utilities
  */
+acpi_status acpi_tb_is_table_installed(struct acpi_table_desc *new_table_desc);
+
 acpi_status
-acpi_tb_verify_table_checksum (
-       struct acpi_table_header        *table_header);
+acpi_tb_verify_table_checksum(struct acpi_table_header *table_header);
 
-u8
-acpi_tb_checksum (
-       void                            *buffer,
-       u32                             length);
+u8 acpi_tb_generate_checksum(void *buffer, u32 length);
 
 acpi_status
-acpi_tb_validate_table_header (
-       struct acpi_table_header        *table_header);
+acpi_tb_validate_table_header(struct acpi_table_header *table_header);
 
-#endif /* __ACTABLES_H__ */
+#endif                         /* __ACTABLES_H__ */
index b5cdcca444c812a75434d8d9c22d06db8518613b..a46f406e1c94528c79034886dc94c0c130535116 100644 (file)
 #ifndef __ACTBL_H__
 #define __ACTBL_H__
 
-
 /*
  *  Values for description table header signatures
  */
 #define RSDP_NAME               "RSDP"
-#define RSDP_SIG                "RSD PTR "  /* RSDT Pointer signature */
-#define APIC_SIG                "APIC"      /* Multiple APIC Description Table */
-#define DSDT_SIG                "DSDT"      /* Differentiated System Description Table */
-#define FADT_SIG                "FACP"      /* Fixed ACPI Description Table */
-#define FACS_SIG                "FACS"      /* Firmware ACPI Control Structure */
-#define PSDT_SIG                "PSDT"      /* Persistent System Description Table */
-#define RSDT_SIG                "RSDT"      /* Root System Description Table */
-#define XSDT_SIG                "XSDT"      /* Extended  System Description Table */
-#define SSDT_SIG                "SSDT"      /* Secondary System Description Table */
-#define SBST_SIG                "SBST"      /* Smart Battery Specification Table */
-#define SPIC_SIG                "SPIC"      /* IOSAPIC table */
-#define BOOT_SIG                "BOOT"      /* Boot table */
-
-
-#define GL_OWNED                0x02        /* Ownership of global lock is bit 1 */
-
+#define RSDP_SIG                "RSD PTR "     /* RSDT Pointer signature */
+#define APIC_SIG                "APIC" /* Multiple APIC Description Table */
+#define DSDT_SIG                "DSDT" /* Differentiated System Description Table */
+#define FADT_SIG                "FACP" /* Fixed ACPI Description Table */
+#define FACS_SIG                "FACS" /* Firmware ACPI Control Structure */
+#define PSDT_SIG                "PSDT" /* Persistent System Description Table */
+#define RSDT_SIG                "RSDT" /* Root System Description Table */
+#define XSDT_SIG                "XSDT" /* Extended  System Description Table */
+#define SSDT_SIG                "SSDT" /* Secondary System Description Table */
+#define SBST_SIG                "SBST" /* Smart Battery Specification Table */
+#define SPIC_SIG                "SPIC" /* IOSAPIC table */
+#define BOOT_SIG                "BOOT" /* Boot table */
+
+#define GL_OWNED                0x02   /* Ownership of global lock is bit 1 */
 
 /*
  * Common table types.  The base code can remain
@@ -75,7 +72,6 @@
 #define FACS_DESCRIPTOR         struct facs_descriptor_rev2
 #define FADT_DESCRIPTOR         struct fadt_descriptor_rev2
 
-
 #pragma pack(1)
 
 /*
  * NOTE: The tables that are specific to ACPI versions (1.0, 2.0, etc.)
  * are in separate files.
  */
-struct rsdp_descriptor         /* Root System Descriptor Pointer */
-{
-       char                            signature [8];          /* ACPI signature, contains "RSD PTR " */
-       u8                              checksum;               /* To make sum of struct == 0 */
-       char                            oem_id [6];             /* OEM identification */
-       u8                              revision;               /* Must be 0 for 1.0, 2 for 2.0 */
-       u32                             rsdt_physical_address;  /* 32-bit physical address of RSDT */
-       u32                             length;                 /* XSDT Length in bytes including hdr */
-       u64                             xsdt_physical_address;  /* 64-bit physical address of XSDT */
-       u8                              extended_checksum;      /* Checksum of entire table */
-       char                            reserved [3];           /* Reserved field must be 0 */
+struct rsdp_descriptor {       /* Root System Descriptor Pointer */
+       char signature[8];      /* ACPI signature, contains "RSD PTR " */
+       u8 checksum;            /* ACPI 1.0 checksum */
+       char oem_id[6];         /* OEM identification */
+       u8 revision;            /* Must be (0) for ACPI 1.0 or (2) for ACPI 2.0+ */
+       u32 rsdt_physical_address;      /* 32-bit physical address of the RSDT */
+       u32 length;             /* XSDT Length in bytes, including header */
+       u64 xsdt_physical_address;      /* 64-bit physical address of the XSDT */
+       u8 extended_checksum;   /* Checksum of entire table (ACPI 2.0) */
+       char reserved[3];       /* Reserved, must be zero */
 };
 
-
-struct acpi_common_facs          /* Common FACS for internal use */
-{
-       u32                             *global_lock;
-       u64                             *firmware_waking_vector;
-       u8                              vector_width;
+struct acpi_common_facs {      /* Common FACS for internal use */
+       u32 *global_lock;
+       u64 *firmware_waking_vector;
+       u8 vector_width;
 };
 
-
 #define ACPI_TABLE_HEADER_DEF   /* ACPI common table header */ \
-       char                            signature [4];          /* ACPI signature (4 ASCII characters) */\
-       u32                             length;                 /* Length of table, in bytes, including header */\
+       char                            signature[4];           /* ASCII table signature */\
+       u32                             length;                 /* Length of table in bytes, including this header */\
        u8                              revision;               /* ACPI Specification minor version # */\
        u8                              checksum;               /* To make sum of entire table == 0 */\
-       char                            oem_id [6];             /* OEM identification */\
-       char                            oem_table_id [8];       /* OEM table identification */\
+       char                            oem_id[6];              /* ASCII OEM identification */\
+       char                            oem_table_id[8];        /* ASCII OEM table identification */\
        u32                             oem_revision;           /* OEM revision number */\
-       char                            asl_compiler_id [4];    /* ASL compiler vendor ID */\
-       u32                             asl_compiler_revision;  /* ASL compiler revision number */
-
-
-struct acpi_table_header         /* ACPI common table header */
-{
-       ACPI_TABLE_HEADER_DEF
-};
+       char                            asl_compiler_id [4];    /* ASCII ASL compiler vendor ID */\
+       u32                             asl_compiler_revision;  /* ASL compiler version */
 
+struct acpi_table_header {     /* ACPI common table header */
+ACPI_TABLE_HEADER_DEF};
 
 /*
  * MADT values and structures
@@ -135,12 +123,15 @@ struct acpi_table_header         /* ACPI common table header */
 
 /* Master MADT */
 
-struct multiple_apic_table
-{
-       ACPI_TABLE_HEADER_DEF                           /* ACPI common table header */
-       u32                             local_apic_address;     /* Physical address of local APIC */
-       u32                             PCATcompat      : 1;    /* A one indicates system also has dual 8259s */
-       u32                             reserved1       : 31;
+struct multiple_apic_table {
+       ACPI_TABLE_HEADER_DEF   /* ACPI common table header */
+       u32 local_apic_address; /* Physical address of local APIC */
+
+       /* Flags (32 bits) */
+
+       u8 PCATcompat:1;        /* 00:    System also has dual 8259s */
+        u8:7;                  /* 01-07: Reserved, must be zero */
+       u8 reserved1[3];        /* 08-31: Reserved, must be zero */
 };
 
 /* Values for Type in APIC_HEADER_DEF */
@@ -154,7 +145,7 @@ struct multiple_apic_table
 #define APIC_IO_SAPIC           6
 #define APIC_LOCAL_SAPIC        7
 #define APIC_XRUPT_SOURCE       8
-#define APIC_RESERVED           9           /* 9 and greater are reserved */
+#define APIC_RESERVED           9      /* 9 and greater are reserved */
 
 /*
  * MADT sub-structures (Follow MULTIPLE_APIC_DESCRIPTION_TABLE)
@@ -163,10 +154,8 @@ struct multiple_apic_table
        u8                              type; \
        u8                              length;
 
-struct apic_header
-{
-       APIC_HEADER_DEF
-};
+struct apic_header {
+APIC_HEADER_DEF};
 
 /* Values for MPS INTI flags */
 
@@ -180,117 +169,90 @@ struct apic_header
 #define TRIGGER_RESERVED        2
 #define TRIGGER_LEVEL           3
 
-/* Common flag definitions */
+/* Common flag definitions (16 bits each) */
 
 #define MPS_INTI_FLAGS \
-       u16                             polarity        : 2;    /* Polarity of APIC I/O input signals */\
-       u16                             trigger_mode    : 2;    /* Trigger mode of APIC input signals */\
-       u16                             reserved1       : 12;   /* Reserved, must be zero */
+       u8                              polarity        : 2;    /* 00-01: Polarity of APIC I/O input signals */\
+       u8                              trigger_mode    : 2;    /* 02-03: Trigger mode of APIC input signals */\
+       u8                                              : 4;    /* 04-07: Reserved, must be zero */\
+       u8                              reserved1;      /* 08-15: Reserved, must be zero */
 
 #define LOCAL_APIC_FLAGS \
-       u32                             processor_enabled: 1;   /* Processor is usable if set */\
-       u32                             reserved2       : 31;   /* Reserved, must be zero */
+       u8                              processor_enabled: 1;   /* 00:    Processor is usable if set */\
+       u8                                              : 7;    /* 01-07: Reserved, must be zero */\
+       u8                              reserved2;      /* 08-15: Reserved, must be zero */
 
 /* Sub-structures for MADT */
 
-struct madt_processor_apic
-{
-       APIC_HEADER_DEF
-       u8                              processor_id;           /* ACPI processor id */
-       u8                              local_apic_id;          /* Processor's local APIC id */
-       LOCAL_APIC_FLAGS
-};
-
-struct madt_io_apic
-{
-       APIC_HEADER_DEF
-       u8                              io_apic_id;             /* I/O APIC ID */
-       u8                              reserved;               /* Reserved - must be zero */
-       u32                             address;                /* APIC physical address */
-       u32                             interrupt;              /* Global system interrupt where INTI
-                         * lines start */
+struct madt_processor_apic {
+       APIC_HEADER_DEF u8 processor_id;        /* ACPI processor id */
+       u8 local_apic_id;       /* Processor's local APIC id */
+ LOCAL_APIC_FLAGS};
+
+struct madt_io_apic {
+       APIC_HEADER_DEF u8 io_apic_id;  /* I/O APIC ID */
+       u8 reserved;            /* Reserved - must be zero */
+       u32 address;            /* APIC physical address */
+       u32 interrupt;          /* Global system interrupt where INTI
+                                * lines start */
 };
 
-struct madt_interrupt_override
-{
-       APIC_HEADER_DEF
-       u8                              bus;                    /* 0 - ISA */
-       u8                              source;                 /* Interrupt source (IRQ) */
-       u32                             interrupt;              /* Global system interrupt */
-       MPS_INTI_FLAGS
-};
+struct madt_interrupt_override {
+       APIC_HEADER_DEF u8 bus; /* 0 - ISA */
+       u8 source;              /* Interrupt source (IRQ) */
+       u32 interrupt;          /* Global system interrupt */
+ MPS_INTI_FLAGS};
 
-struct madt_nmi_source
-{
-       APIC_HEADER_DEF
-       MPS_INTI_FLAGS
-       u32                             interrupt;              /* Global system interrupt */
+struct madt_nmi_source {
+       APIC_HEADER_DEF MPS_INTI_FLAGS u32 interrupt;   /* Global system interrupt */
 };
 
-struct madt_local_apic_nmi
-{
-       APIC_HEADER_DEF
-       u8                              processor_id;           /* ACPI processor id */
-       MPS_INTI_FLAGS
-       u8                              lint;                   /* LINTn to which NMI is connected */
+struct madt_local_apic_nmi {
+       APIC_HEADER_DEF u8 processor_id;        /* ACPI processor id */
+       MPS_INTI_FLAGS u8 lint; /* LINTn to which NMI is connected */
 };
 
-struct madt_address_override
-{
-       APIC_HEADER_DEF
-       u16                             reserved;               /* Reserved - must be zero */
-       u64                             address;                /* APIC physical address */
+struct madt_address_override {
+       APIC_HEADER_DEF u16 reserved;   /* Reserved, must be zero */
+       u64 address;            /* APIC physical address */
 };
 
-struct madt_io_sapic
-{
-       APIC_HEADER_DEF
-       u8                              io_sapic_id;            /* I/O SAPIC ID */
-       u8                              reserved;               /* Reserved - must be zero */
-       u32                             interrupt_base;         /* Glocal interrupt for SAPIC start */
-       u64                             address;                /* SAPIC physical address */
+struct madt_io_sapic {
+       APIC_HEADER_DEF u8 io_sapic_id; /* I/O SAPIC ID */
+       u8 reserved;            /* Reserved, must be zero */
+       u32 interrupt_base;     /* Glocal interrupt for SAPIC start */
+       u64 address;            /* SAPIC physical address */
 };
 
-struct madt_local_sapic
-{
-       APIC_HEADER_DEF
-       u8                              processor_id;           /* ACPI processor id */
-       u8                              local_sapic_id;         /* SAPIC ID */
-       u8                              local_sapic_eid;        /* SAPIC EID */
-       u8                              reserved [3];           /* Reserved - must be zero */
-       LOCAL_APIC_FLAGS
-       u32                             processor_uID;          /* Numeric UID - ACPI 3.0 */
-       char                            processor_uIDstring[1]; /* String UID  - ACPI 3.0 */
+struct madt_local_sapic {
+       APIC_HEADER_DEF u8 processor_id;        /* ACPI processor id */
+       u8 local_sapic_id;      /* SAPIC ID */
+       u8 local_sapic_eid;     /* SAPIC EID */
+       u8 reserved[3];         /* Reserved, must be zero */
+        LOCAL_APIC_FLAGS u32 processor_uID;    /* Numeric UID - ACPI 3.0 */
+       char processor_uIDstring[1];    /* String UID  - ACPI 3.0 */
 };
 
-struct madt_interrupt_source
-{
-       APIC_HEADER_DEF
-       MPS_INTI_FLAGS
-       u8                              interrupt_type;         /* 1=PMI, 2=INIT, 3=corrected */
-       u8                              processor_id;           /* Processor ID */
-       u8                              processor_eid;          /* Processor EID */
-       u8                              io_sapic_vector;        /* Vector value for PMI interrupts */
-       u32                             interrupt;              /* Global system interrupt */
-       u32                             flags;                  /* Interrupt Source Flags */
+struct madt_interrupt_source {
+       APIC_HEADER_DEF MPS_INTI_FLAGS u8 interrupt_type;       /* 1=PMI, 2=INIT, 3=corrected */
+       u8 processor_id;        /* Processor ID */
+       u8 processor_eid;       /* Processor EID */
+       u8 io_sapic_vector;     /* Vector value for PMI interrupts */
+       u32 interrupt;          /* Global system interrupt */
+       u32 flags;              /* Interrupt Source Flags */
 };
 
-
 /*
  * Smart Battery
  */
-struct smart_battery_table
-{
-       ACPI_TABLE_HEADER_DEF
-       u32                             warning_level;
-       u32                             low_level;
-       u32                             critical_level;
+struct smart_battery_table {
+       ACPI_TABLE_HEADER_DEF u32 warning_level;
+       u32 low_level;
+       u32 critical_level;
 };
 
-
 #pragma pack()
 
-
 /*
  * ACPI Table information.  We save the table address, length,
  * and type of memory allocation (mapped or allocated) for each
@@ -314,39 +276,35 @@ struct smart_battery_table
 
 /* Data about each known table type */
 
-struct acpi_table_support
-{
-       char                            *name;
-       char                            *signature;
-       void                            **global_ptr;
-       u8                              sig_length;
-       u8                              flags;
+struct acpi_table_support {
+       char *name;
+       char *signature;
+       void **global_ptr;
+       u8 sig_length;
+       u8 flags;
 };
 
-
 /*
  * Get the ACPI version-specific tables
  */
-#include "actbl1.h"   /* Acpi 1.0 table definitions */
-#include "actbl2.h"   /* Acpi 2.0 table definitions */
+#include "actbl1.h"            /* Acpi 1.0 table definitions */
+#include "actbl2.h"            /* Acpi 2.0 table definitions */
 
-extern u8 acpi_fadt_is_v1; /* is set to 1 if FADT is revision 1,
-                           * needed for certain workarounds */
+extern u8 acpi_fadt_is_v1;     /* is set to 1 if FADT is revision 1,
+                                * needed for certain workarounds */
 
 #pragma pack(1)
 /*
  * High performance timer
  */
-struct hpet_table
-{
-       ACPI_TABLE_HEADER_DEF
-       u32                             hardware_id;
-       struct acpi_generic_address     base_address;
-       u8                              hpet_number;
-       u16                             clock_tick;
-       u8                              attributes;
+struct hpet_table {
+       ACPI_TABLE_HEADER_DEF u32 hardware_id;
+       struct acpi_generic_address base_address;
+       u8 hpet_number;
+       u16 clock_tick;
+       u8 attributes;
 };
 
 #pragma pack()
 
-#endif /* __ACTBL_H__ */
+#endif                         /* __ACTBL_H__ */
index 33de5f4d2cccc8afdf31ea889ab14dc6c19bb0fd..67312c3a915a711b044f209c65bc8571305840dd 100644 (file)
 /*
  * ACPI 1.0 Root System Description Table (RSDT)
  */
-struct rsdt_descriptor_rev1
-{
-       ACPI_TABLE_HEADER_DEF                           /* ACPI common table header */
-       u32                             table_offset_entry [1]; /* Array of pointers to other */
-                        /* ACPI tables */
+struct rsdt_descriptor_rev1 {
+       ACPI_TABLE_HEADER_DEF   /* ACPI common table header */
+       u32 table_offset_entry[1];      /* Array of pointers to ACPI tables */
 };
 
-
 /*
  * ACPI 1.0 Firmware ACPI Control Structure (FACS)
  */
-struct facs_descriptor_rev1
-{
-       char                            signature[4];           /* ACPI Signature */
-       u32                             length;                 /* Length of structure, in bytes */
-       u32                             hardware_signature;     /* Hardware configuration signature */
-       u32                             firmware_waking_vector; /* ACPI OS waking vector */
-       u32                             global_lock;            /* Global Lock */
-       u32                             S4bios_f        : 1;    /* Indicates if S4BIOS support is present */
-       u32                             reserved1       : 31;   /* Must be 0 */
-       u8                              resverved3 [40];        /* Reserved - must be zero */
-};
+struct facs_descriptor_rev1 {
+       char signature[4];      /* ASCII table signature */
+       u32 length;             /* Length of structure in bytes */
+       u32 hardware_signature; /* Hardware configuration signature */
+       u32 firmware_waking_vector;     /* ACPI OS waking vector */
+       u32 global_lock;        /* Global Lock */
+
+       /* Flags (32 bits) */
 
+       u8 S4bios_f:1;          /* 00:    S4BIOS support is present */
+        u8:7;                  /* 01-07: Reserved, must be zero */
+       u8 reserved1[3];        /* 08-31: Reserved, must be zero */
+
+       u8 reserved2[40];       /* Reserved, must be zero */
+};
 
 /*
  * ACPI 1.0 Fixed ACPI Description Table (FADT)
  */
-struct fadt_descriptor_rev1
-{
-       ACPI_TABLE_HEADER_DEF                           /* ACPI common table header */
-       u32                             firmware_ctrl;          /* Physical address of FACS */
-       u32                             dsdt;                   /* Physical address of DSDT */
-       u8                              model;                  /* System Interrupt Model */
-       u8                              reserved1;              /* Reserved */
-       u16                             sci_int;                /* System vector of SCI interrupt */
-       u32                             smi_cmd;                /* Port address of SMI command port */
-       u8                              acpi_enable;            /* Value to write to smi_cmd to enable ACPI */
-       u8                              acpi_disable;           /* Value to write to smi_cmd to disable ACPI */
-       u8                              S4bios_req;             /* Value to write to SMI CMD to enter S4BIOS state */
-       u8                              reserved2;              /* Reserved - must be zero */
-       u32                             pm1a_evt_blk;           /* Port address of Power Mgt 1a acpi_event Reg Blk */
-       u32                             pm1b_evt_blk;           /* Port address of Power Mgt 1b acpi_event Reg Blk */
-       u32                             pm1a_cnt_blk;           /* Port address of Power Mgt 1a Control Reg Blk */
-       u32                             pm1b_cnt_blk;           /* Port address of Power Mgt 1b Control Reg Blk */
-       u32                             pm2_cnt_blk;            /* Port address of Power Mgt 2 Control Reg Blk */
-       u32                             pm_tmr_blk;             /* Port address of Power Mgt Timer Ctrl Reg Blk */
-       u32                             gpe0_blk;               /* Port addr of General Purpose acpi_event 0 Reg Blk */
-       u32                             gpe1_blk;               /* Port addr of General Purpose acpi_event 1 Reg Blk */
-       u8                              pm1_evt_len;            /* Byte length of ports at pm1_x_evt_blk */
-       u8                              pm1_cnt_len;            /* Byte length of ports at pm1_x_cnt_blk */
-       u8                              pm2_cnt_len;            /* Byte Length of ports at pm2_cnt_blk */
-       u8                              pm_tm_len;              /* Byte Length of ports at pm_tm_blk */
-       u8                              gpe0_blk_len;           /* Byte Length of ports at gpe0_blk */
-       u8                              gpe1_blk_len;           /* Byte Length of ports at gpe1_blk */
-       u8                              gpe1_base;              /* Offset in gpe model where gpe1 events start */
-       u8                              reserved3;              /* Reserved */
-       u16                             plvl2_lat;              /* Worst case HW latency to enter/exit C2 state */
-       u16                             plvl3_lat;              /* Worst case HW latency to enter/exit C3 state */
-       u16                             flush_size;             /* Size of area read to flush caches */
-       u16                             flush_stride;           /* Stride used in flushing caches */
-       u8                              duty_offset;            /* Bit location of duty cycle field in p_cnt reg */
-       u8                              duty_width;             /* Bit width of duty cycle field in p_cnt reg */
-       u8                              day_alrm;               /* Index to day-of-month alarm in RTC CMOS RAM */
-       u8                              mon_alrm;               /* Index to month-of-year alarm in RTC CMOS RAM */
-       u8                              century;                /* Index to century in RTC CMOS RAM */
-       u8                              reserved4;              /* Reserved */
-       u8                              reserved4a;             /* Reserved */
-       u8                              reserved4b;             /* Reserved */
-       u32                             wb_invd         : 1;    /* The wbinvd instruction works properly */
-       u32                             wb_invd_flush   : 1;    /* The wbinvd flushes but does not invalidate */
-       u32                             proc_c1         : 1;    /* All processors support C1 state */
-       u32                             plvl2_up        : 1;    /* C2 state works on MP system */
-       u32                             pwr_button      : 1;    /* Power button is handled as a generic feature */
-       u32                             sleep_button    : 1;    /* Sleep button is handled as a generic feature, or not present */
-       u32                             fixed_rTC       : 1;    /* RTC wakeup stat not in fixed register space */
-       u32                             rtcs4           : 1;    /* RTC wakeup stat not possible from S4 */
-       u32                             tmr_val_ext     : 1;    /* The tmr_val width is 32 bits (0 = 24 bits) */
-       u32                             reserved5       : 23;   /* Reserved - must be zero */
-};
+struct fadt_descriptor_rev1 {
+       ACPI_TABLE_HEADER_DEF   /* ACPI common table header */
+       u32 firmware_ctrl;      /* Physical address of FACS */
+       u32 dsdt;               /* Physical address of DSDT */
+       u8 model;               /* System Interrupt Model */
+       u8 reserved1;           /* Reserved, must be zero */
+       u16 sci_int;            /* System vector of SCI interrupt */
+       u32 smi_cmd;            /* Port address of SMI command port */
+       u8 acpi_enable;         /* Value to write to smi_cmd to enable ACPI */
+       u8 acpi_disable;        /* Value to write to smi_cmd to disable ACPI */
+       u8 S4bios_req;          /* Value to write to SMI CMD to enter S4BIOS state */
+       u8 reserved2;           /* Reserved, must be zero */
+       u32 pm1a_evt_blk;       /* Port address of Power Mgt 1a acpi_event Reg Blk */
+       u32 pm1b_evt_blk;       /* Port address of Power Mgt 1b acpi_event Reg Blk */
+       u32 pm1a_cnt_blk;       /* Port address of Power Mgt 1a Control Reg Blk */
+       u32 pm1b_cnt_blk;       /* Port address of Power Mgt 1b Control Reg Blk */
+       u32 pm2_cnt_blk;        /* Port address of Power Mgt 2 Control Reg Blk */
+       u32 pm_tmr_blk;         /* Port address of Power Mgt Timer Ctrl Reg Blk */
+       u32 gpe0_blk;           /* Port addr of General Purpose acpi_event 0 Reg Blk */
+       u32 gpe1_blk;           /* Port addr of General Purpose acpi_event 1 Reg Blk */
+       u8 pm1_evt_len;         /* Byte length of ports at pm1_x_evt_blk */
+       u8 pm1_cnt_len;         /* Byte length of ports at pm1_x_cnt_blk */
+       u8 pm2_cnt_len;         /* Byte Length of ports at pm2_cnt_blk */
+       u8 pm_tm_len;           /* Byte Length of ports at pm_tm_blk */
+       u8 gpe0_blk_len;        /* Byte Length of ports at gpe0_blk */
+       u8 gpe1_blk_len;        /* Byte Length of ports at gpe1_blk */
+       u8 gpe1_base;           /* Offset in gpe model where gpe1 events start */
+       u8 reserved3;           /* Reserved, must be zero */
+       u16 plvl2_lat;          /* Worst case HW latency to enter/exit C2 state */
+       u16 plvl3_lat;          /* Worst case HW latency to enter/exit C3 state */
+       u16 flush_size;         /* Size of area read to flush caches */
+       u16 flush_stride;       /* Stride used in flushing caches */
+       u8 duty_offset;         /* Bit location of duty cycle field in p_cnt reg */
+       u8 duty_width;          /* Bit width of duty cycle field in p_cnt reg */
+       u8 day_alrm;            /* Index to day-of-month alarm in RTC CMOS RAM */
+       u8 mon_alrm;            /* Index to month-of-year alarm in RTC CMOS RAM */
+       u8 century;             /* Index to century in RTC CMOS RAM */
+       u8 reserved4[3];        /* Reserved, must be zero */
 
-#pragma pack()
+       /* Flags (32 bits) */
 
-#endif /* __ACTBL1_H__ */
+       u8 wb_invd:1;           /* 00:    The wbinvd instruction works properly */
+       u8 wb_invd_flush:1;     /* 01:    The wbinvd flushes but does not invalidate */
+       u8 proc_c1:1;           /* 02:    All processors support C1 state */
+       u8 plvl2_up:1;          /* 03:    C2 state works on MP system */
+       u8 pwr_button:1;        /* 04:    Power button is handled as a generic feature */
+       u8 sleep_button:1;      /* 05:    Sleep button is handled as a generic feature, or not present */
+       u8 fixed_rTC:1;         /* 06:    RTC wakeup stat not in fixed register space */
+       u8 rtcs4:1;             /* 07:    RTC wakeup stat not possible from S4 */
+       u8 tmr_val_ext:1;       /* 08:    tmr_val width is 32 bits (0 = 24 bits) */
+        u8:7;                  /* 09-15: Reserved, must be zero */
+       u8 reserved5[2];        /* 16-31: Reserved, must be zero */
+};
 
+#pragma pack()
 
+#endif                         /* __ACTBL1_H__ */
index e1729c967e052af28f7c0b884207e454a953dd1b..50305ce2681abf38f8659bed86a44df6f3cf0e8d 100644 (file)
 #define FADT2_REVISION_ID               3
 #define FADT2_MINUS_REVISION_ID         2
 
-
 #pragma pack(1)
 
 /*
  * ACPI 2.0 Root System Description Table (RSDT)
  */
-struct rsdt_descriptor_rev2
-{
-       ACPI_TABLE_HEADER_DEF                           /* ACPI common table header */
-       u32                             table_offset_entry [1]; /* Array of pointers to  */
-                        /* ACPI table headers */
+struct rsdt_descriptor_rev2 {
+       ACPI_TABLE_HEADER_DEF   /* ACPI common table header */
+       u32 table_offset_entry[1];      /* Array of pointers to ACPI tables */
 };
 
-
 /*
  * ACPI 2.0 Extended System Description Table (XSDT)
  */
-struct xsdt_descriptor_rev2
-{
-       ACPI_TABLE_HEADER_DEF                           /* ACPI common table header */
-       u64                             table_offset_entry [1]; /* Array of pointers to  */
-                        /* ACPI table headers */
+struct xsdt_descriptor_rev2 {
+       ACPI_TABLE_HEADER_DEF   /* ACPI common table header */
+       u64 table_offset_entry[1];      /* Array of pointers to ACPI tables */
 };
 
-
 /*
  * ACPI 2.0 Firmware ACPI Control Structure (FACS)
  */
-struct facs_descriptor_rev2
-{
-       char                            signature[4];           /* ACPI signature */
-       u32                             length;                 /* Length of structure, in bytes */
-       u32                             hardware_signature;     /* Hardware configuration signature */
-       u32                             firmware_waking_vector; /* 32bit physical address of the Firmware Waking Vector. */
-       u32                             global_lock;            /* Global Lock used to synchronize access to shared hardware resources */
-       u32                             S4bios_f        : 1;    /* S4Bios_f - Indicates if S4BIOS support is present */
-       u32                             reserved1       : 31;   /* Must be 0 */
-       u64                             xfirmware_waking_vector; /* 64bit physical address of the Firmware Waking Vector. */
-       u8                              version;                /* Version of this table */
-       u8                              reserved3 [31];         /* Reserved - must be zero */
+struct facs_descriptor_rev2 {
+       char signature[4];      /* ASCII table signature */
+       u32 length;             /* Length of structure, in bytes */
+       u32 hardware_signature; /* Hardware configuration signature */
+       u32 firmware_waking_vector;     /* 32-bit physical address of the Firmware Waking Vector. */
+       u32 global_lock;        /* Global Lock used to synchronize access to shared hardware resources */
+
+       /* Flags (32 bits) */
+
+       u8 S4bios_f:1;          /* 00:    S4BIOS support is present */
+        u8:7;                  /* 01-07: Reserved, must be zero */
+       u8 reserved1[3];        /* 08-31: Reserved, must be zero */
+
+       u64 xfirmware_waking_vector;    /* 64-bit physical address of the Firmware Waking Vector. */
+       u8 version;             /* Version of this table */
+       u8 reserved3[31];       /* Reserved, must be zero */
 };
 
-
 /*
  * ACPI 2.0+ Generic Address Structure (GAS)
  */
-struct acpi_generic_address
-{
-       u8                              address_space_id;       /* Address space where struct or register exists. */
-       u8                              register_bit_width;     /* Size in bits of given register */
-       u8                              register_bit_offset;    /* Bit offset within the register */
-       u8                              access_width;           /* Minimum Access size (ACPI 3.0) */
-       u64                             address;                /* 64-bit address of struct or register */
+struct acpi_generic_address {
+       u8 address_space_id;    /* Address space where struct or register exists. */
+       u8 register_bit_width;  /* Size in bits of given register */
+       u8 register_bit_offset; /* Bit offset within the register */
+       u8 access_width;        /* Minimum Access size (ACPI 3.0) */
+       u64 address;            /* 64-bit address of struct or register */
 };
 
-
 #define FADT_REV2_COMMON \
        u32                             V1_firmware_ctrl;   /* 32-bit physical address of FACS */ \
        u32                             V1_dsdt;            /* 32-bit physical address of DSDT */ \
@@ -161,129 +155,123 @@ struct acpi_generic_address
 /*
  * ACPI 2.0+ Fixed ACPI Description Table (FADT)
  */
-struct fadt_descriptor_rev2
-{
-       ACPI_TABLE_HEADER_DEF                       /* ACPI common table header */
-       FADT_REV2_COMMON
-       u8                              reserved2;          /* Reserved */
-       u32                             wb_invd     : 1;    /* The wbinvd instruction works properly */
-       u32                             wb_invd_flush : 1;  /* The wbinvd flushes but does not invalidate */
-       u32                             proc_c1     : 1;    /* All processors support C1 state */
-       u32                             plvl2_up    : 1;    /* C2 state works on MP system */
-       u32                             pwr_button  : 1;    /* Power button is handled as a generic feature */
-       u32                             sleep_button : 1;   /* Sleep button is handled as a generic feature, or not present */
-       u32                             fixed_rTC   : 1;    /* RTC wakeup stat not in fixed register space */
-       u32                             rtcs4       : 1;    /* RTC wakeup stat not possible from S4 */
-       u32                             tmr_val_ext : 1;    /* Indicates tmr_val is 32 bits 0=24-bits */
-       u32                             dock_cap    : 1;    /* Supports Docking */
-       u32                             reset_reg_sup : 1;  /* Indicates system supports system reset via the FADT RESET_REG */
-       u32                             sealed_case : 1;    /* Indicates system has no internal expansion capabilities and case is sealed */
-       u32                             headless    : 1;    /* Indicates system does not have local video capabilities or local input devices */
-       u32                             cpu_sw_sleep : 1;   /* Indicates to OSPM that a processor native instruction */
-                          /* must be executed after writing the SLP_TYPx register */
-       /* ACPI 3.0 flag bits */
-
-       u32                             pci_exp_wak                         : 1; /* System supports PCIEXP_WAKE (STS/EN) bits */
-       u32                             use_platform_clock                  : 1; /* OSPM should use platform-provided timer */
-       u32                             S4rtc_sts_valid                     : 1; /* Contents of RTC_STS valid after S4 wake */
-       u32                             remote_power_on_capable             : 1; /* System is compatible with remote power on */
-       u32                             force_apic_cluster_model            : 1; /* All local APICs must use cluster model */
-       u32                             force_apic_physical_destination_mode : 1; /* all local x_aPICs must use physical dest mode */
-       u32                             reserved6                           : 12;/* Reserved - must be zero */
-
-       struct acpi_generic_address     reset_register;     /* Reset register address in GAS format */
-       u8                              reset_value;        /* Value to write to the reset_register port to reset the system */
-       u8                              reserved7[3];       /* These three bytes must be zero */
-       u64                             xfirmware_ctrl;     /* 64-bit physical address of FACS */
-       u64                             Xdsdt;              /* 64-bit physical address of DSDT */
-       struct acpi_generic_address     xpm1a_evt_blk;      /* Extended Power Mgt 1a acpi_event Reg Blk address */
-       struct acpi_generic_address     xpm1b_evt_blk;      /* Extended Power Mgt 1b acpi_event Reg Blk address */
-       struct acpi_generic_address     xpm1a_cnt_blk;      /* Extended Power Mgt 1a Control Reg Blk address */
-       struct acpi_generic_address     xpm1b_cnt_blk;      /* Extended Power Mgt 1b Control Reg Blk address */
-       struct acpi_generic_address     xpm2_cnt_blk;       /* Extended Power Mgt 2 Control Reg Blk address */
-       struct acpi_generic_address     xpm_tmr_blk;        /* Extended Power Mgt Timer Ctrl Reg Blk address */
-       struct acpi_generic_address     xgpe0_blk;          /* Extended General Purpose acpi_event 0 Reg Blk address */
-       struct acpi_generic_address     xgpe1_blk;          /* Extended General Purpose acpi_event 1 Reg Blk address */
+struct fadt_descriptor_rev2 {
+       ACPI_TABLE_HEADER_DEF   /* ACPI common table header */
+       FADT_REV2_COMMON u8 reserved2;  /* Reserved, must be zero */
+
+       /* Flags (32 bits) */
+
+       u8 wb_invd:1;           /* 00:    The wbinvd instruction works properly */
+       u8 wb_invd_flush:1;     /* 01:    The wbinvd flushes but does not invalidate */
+       u8 proc_c1:1;           /* 02:    All processors support C1 state */
+       u8 plvl2_up:1;          /* 03:    C2 state works on MP system */
+       u8 pwr_button:1;        /* 04:    Power button is handled as a generic feature */
+       u8 sleep_button:1;      /* 05:    Sleep button is handled as a generic feature, or not present */
+       u8 fixed_rTC:1;         /* 06:    RTC wakeup stat not in fixed register space */
+       u8 rtcs4:1;             /* 07:    RTC wakeup stat not possible from S4 */
+       u8 tmr_val_ext:1;       /* 08:    tmr_val is 32 bits 0=24-bits */
+       u8 dock_cap:1;          /* 09:    Docking supported */
+       u8 reset_reg_sup:1;     /* 10:    System reset via the FADT RESET_REG supported */
+       u8 sealed_case:1;       /* 11:    No internal expansion capabilities and case is sealed */
+       u8 headless:1;          /* 12:    No local video capabilities or local input devices */
+       u8 cpu_sw_sleep:1;      /* 13:    Must execute native instruction after writing SLP_TYPx register */
+
+       u8 pci_exp_wak:1;       /* 14:    System supports PCIEXP_WAKE (STS/EN) bits (ACPI 3.0) */
+       u8 use_platform_clock:1;        /* 15:    OSPM should use platform-provided timer (ACPI 3.0) */
+       u8 S4rtc_sts_valid:1;   /* 16:    Contents of RTC_STS valid after S4 wake (ACPI 3.0) */
+       u8 remote_power_on_capable:1;   /* 17:    System is compatible with remote power on (ACPI 3.0) */
+       u8 force_apic_cluster_model:1;  /* 18:    All local APICs must use cluster model (ACPI 3.0) */
+       u8 force_apic_physical_destination_mode:1;      /* 19:   all local x_aPICs must use physical dest mode (ACPI 3.0) */
+        u8:4;                  /* 20-23: Reserved, must be zero */
+       u8 reserved3;           /* 24-31: Reserved, must be zero */
+
+       struct acpi_generic_address reset_register;     /* Reset register address in GAS format */
+       u8 reset_value;         /* Value to write to the reset_register port to reset the system */
+       u8 reserved4[3];        /* These three bytes must be zero */
+       u64 xfirmware_ctrl;     /* 64-bit physical address of FACS */
+       u64 Xdsdt;              /* 64-bit physical address of DSDT */
+       struct acpi_generic_address xpm1a_evt_blk;      /* Extended Power Mgt 1a acpi_event Reg Blk address */
+       struct acpi_generic_address xpm1b_evt_blk;      /* Extended Power Mgt 1b acpi_event Reg Blk address */
+       struct acpi_generic_address xpm1a_cnt_blk;      /* Extended Power Mgt 1a Control Reg Blk address */
+       struct acpi_generic_address xpm1b_cnt_blk;      /* Extended Power Mgt 1b Control Reg Blk address */
+       struct acpi_generic_address xpm2_cnt_blk;       /* Extended Power Mgt 2 Control Reg Blk address */
+       struct acpi_generic_address xpm_tmr_blk;        /* Extended Power Mgt Timer Ctrl Reg Blk address */
+       struct acpi_generic_address xgpe0_blk;  /* Extended General Purpose acpi_event 0 Reg Blk address */
+       struct acpi_generic_address xgpe1_blk;  /* Extended General Purpose acpi_event 1 Reg Blk address */
 };
 
-
 /* "Down-revved" ACPI 2.0 FADT descriptor */
 
-struct fadt_descriptor_rev2_minus
-{
-       ACPI_TABLE_HEADER_DEF                       /* ACPI common table header */
-       FADT_REV2_COMMON
-       u8                              reserved2;          /* Reserved */
-       u32                             flags;
-       struct acpi_generic_address     reset_register;     /* Reset register address in GAS format */
-       u8                              reset_value;        /* Value to write to the reset_register port to reset the system. */
-       u8                              reserved7[3];       /* These three bytes must be zero */
+struct fadt_descriptor_rev2_minus {
+       ACPI_TABLE_HEADER_DEF   /* ACPI common table header */
+       FADT_REV2_COMMON u8 reserved2;  /* Reserved, must be zero */
+       u32 flags;
+       struct acpi_generic_address reset_register;     /* Reset register address in GAS format */
+       u8 reset_value;         /* Value to write to the reset_register port to reset the system. */
+       u8 reserved7[3];        /* Reserved, must be zero */
 };
 
-
 /* ECDT - Embedded Controller Boot Resources Table */
 
-struct ec_boot_resources
-{
-       ACPI_TABLE_HEADER_DEF
-       struct acpi_generic_address     ec_control;         /* Address of EC command/status register */
-       struct acpi_generic_address     ec_data;            /* Address of EC data register */
-       u32                             uid;                /* Unique ID - must be same as the EC _UID method */
-       u8                              gpe_bit;            /* The GPE for the EC */
-       u8                              ec_id[1];           /* Full namepath of the EC in the ACPI namespace */
+struct ec_boot_resources {
+       ACPI_TABLE_HEADER_DEF struct acpi_generic_address ec_control;   /* Address of EC command/status register */
+       struct acpi_generic_address ec_data;    /* Address of EC data register */
+       u32 uid;                /* Unique ID - must be same as the EC _UID method */
+       u8 gpe_bit;             /* The GPE for the EC */
+       u8 ec_id[1];            /* Full namepath of the EC in the ACPI namespace */
 };
 
-
 /* SRAT - System Resource Affinity Table */
 
-struct static_resource_alloc
-{
-       u8                              type;
-       u8                              length;
-       u8                              proximity_domain_lo;
-       u8                              apic_id;
-       u32                             enabled         :1;
-       u32                             reserved3       :31;
-       u8                              local_sapic_eid;
-       u8                              proximity_domain_hi[3];
-       u32                             reserved4;
-};
+struct static_resource_alloc {
+       u8 type;
+       u8 length;
+       u8 proximity_domain_lo;
+       u8 apic_id;
 
-struct memory_affinity
-{
-       u8                              type;
-       u8                              length;
-       u32                             proximity_domain;
-       u16                             reserved3;
-       u64                             base_address;
-       u64                             address_length;
-       u32                             reserved4;
-       u32                             enabled         :1;
-       u32                             hot_pluggable   :1;
-       u32                             non_volatile    :1;
-       u32                             reserved5       :29;
-       u64                             reserved6;
+       /* Flags (32 bits) */
+
+       u8 enabled:1;           /* 00:    Use affinity structure */
+        u8:7;                  /* 01-07: Reserved, must be zero */
+       u8 reserved3[3];        /* 08-31: Reserved, must be zero */
+
+       u8 local_sapic_eid;
+       u8 proximity_domain_hi[3];
+       u32 reserved4;          /* Reserved, must be zero */
 };
 
-struct system_resource_affinity
-{
-       ACPI_TABLE_HEADER_DEF
-       u32                             reserved1;          /* Must be value '1' */
-       u64                             reserved2;
+struct memory_affinity {
+       u8 type;
+       u8 length;
+       u32 proximity_domain;
+       u16 reserved3;
+       u64 base_address;
+       u64 address_length;
+       u32 reserved4;
+
+       /* Flags (32 bits) */
+
+       u8 enabled:1;           /* 00:    Use affinity structure */
+       u8 hot_pluggable:1;     /* 01:    Memory region is hot pluggable */
+       u8 non_volatile:1;      /* 02:    Memory is non-volatile */
+        u8:5;                  /* 03-07: Reserved, must be zero */
+       u8 reserved5[3];        /* 08-31: Reserved, must be zero */
+
+       u64 reserved6;          /* Reserved, must be zero */
 };
 
+struct system_resource_affinity {
+       ACPI_TABLE_HEADER_DEF u32 reserved1;    /* Must be value '1' */
+       u64 reserved2;          /* Reserved, must be zero */
+};
 
 /* SLIT - System Locality Distance Information Table */
 
-struct system_locality_info
-{
-       ACPI_TABLE_HEADER_DEF
-       u64                             locality_count;
-       u8                              entry[1][1];
+struct system_locality_info {
+       ACPI_TABLE_HEADER_DEF u64 locality_count;
+       u8 entry[1][1];
 };
 
-
 #pragma pack()
 
-#endif /* __ACTBL2_H__ */
-
+#endif                         /* __ACTBL2_H__ */
index 7b4fb44261f3c46a6c6e1441c279670db436995e..10ac05bb36bc04b37fdd5ef074e5bb68ee108ca3 100644 (file)
@@ -27,7 +27,6 @@
 #ifndef __ACTBL71_H__
 #define __ACTBL71_H__
 
-
 /* 0.71 FADT address_space data item bitmasks defines */
 /* If the associated bit is zero then it is in memory space else in io space */
 
 
 /* Only for clarity in declarations */
 
-typedef u64                         IO_ADDRESS;
-
+typedef u64 IO_ADDRESS;
 
 #pragma pack(1)
-struct  /* Root System Descriptor Pointer */
-{
-       NATIVE_CHAR             signature [8];          /* contains "RSD PTR " */
-       u8                              checksum;               /* to make sum of struct == 0 */
-       NATIVE_CHAR             oem_id [6];             /* OEM identification */
-       u8                              reserved;               /* Must be 0 for 1.0, 2 for 2.0 */
-       u64                             rsdt_physical_address;  /* 64-bit physical address of RSDT */
+struct {                       /* Root System Descriptor Pointer */
+       NATIVE_CHAR signature[8];       /* contains "RSD PTR " */
+       u8 checksum;            /* to make sum of struct == 0 */
+       NATIVE_CHAR oem_id[6];  /* OEM identification */
+       u8 reserved;            /* Must be 0 for 1.0, 2 for 2.0 */
+       u64 rsdt_physical_address;      /* 64-bit physical address of RSDT */
 };
 
-
 /*****************************************/
 /* IA64 Extensions to ACPI Spec Rev 0.71 */
 /* for the Root System Description Table */
 /*****************************************/
-struct
-{
-       struct acpi_table_header    header;                 /* Table header */
-       u32                         reserved_pad;           /* IA64 alignment, must be 0 */
-       u64                         table_offset_entry [1]; /* Array of pointers to other */
-                          /* tables' headers */
+struct {
+       struct acpi_table_header header;        /* Table header */
+       u32 reserved_pad;       /* IA64 alignment, must be 0 */
+       u64 table_offset_entry[1];      /* Array of pointers to other */
+       /* tables' headers */
 };
 
-
 /*******************************************/
 /* IA64 Extensions to ACPI Spec Rev 0.71   */
 /* for the Firmware ACPI Control Structure */
 /*******************************************/
-struct
-{
-       NATIVE_CHAR         signature[4];         /* signature "FACS" */
-       u32                         length;               /* length of structure, in bytes */
-       u32                         hardware_signature;   /* hardware configuration signature */
-       u32                         reserved4;            /* must be 0 */
-       u64                         firmware_waking_vector; /* ACPI OS waking vector */
-       u64                         global_lock;          /* Global Lock */
-       u32                         S4bios_f      : 1;    /* Indicates if S4BIOS support is present */
-       u32                         reserved1     : 31;   /* must be 0 */
-       u8                          reserved3 [28];       /* reserved - must be zero */
+struct {
+       NATIVE_CHAR signature[4];       /* signature "FACS" */
+       u32 length;             /* length of structure, in bytes */
+       u32 hardware_signature; /* hardware configuration signature */
+       u32 reserved4;          /* must be 0 */
+       u64 firmware_waking_vector;     /* ACPI OS waking vector */
+       u64 global_lock;        /* Global Lock */
+       u32 S4bios_f:1;         /* Indicates if S4BIOS support is present */
+       u32 reserved1:31;       /* must be 0 */
+       u8 reserved3[28];       /* reserved - must be zero */
 };
 
-
 /******************************************/
 /* IA64 Extensions to ACPI Spec Rev 0.71  */
 /* for the Fixed ACPI Description Table   */
 /******************************************/
-struct
-{
-       struct acpi_table_header    header;             /* table header */
-       u32                         reserved_pad;       /* IA64 alignment, must be 0 */
-       u64                         firmware_ctrl;      /* 64-bit Physical address of FACS */
-       u64                         dsdt;               /* 64-bit Physical address of DSDT */
-       u8                          model;              /* System Interrupt Model */
-       u8                          address_space;      /* Address Space Bitmask */
-       u16                         sci_int;            /* System vector of SCI interrupt */
-       u8                          acpi_enable;        /* value to write to smi_cmd to enable ACPI */
-       u8                          acpi_disable;       /* value to write to smi_cmd to disable ACPI */
-       u8                          S4bios_req;         /* Value to write to SMI CMD to enter S4BIOS state */
-       u8                          reserved2;          /* reserved - must be zero */
-       u64                         smi_cmd;            /* Port address of SMI command port */
-       u64                         pm1a_evt_blk;       /* Port address of Power Mgt 1a acpi_event Reg Blk */
-       u64                         pm1b_evt_blk;       /* Port address of Power Mgt 1b acpi_event Reg Blk */
-       u64                         pm1a_cnt_blk;       /* Port address of Power Mgt 1a Control Reg Blk */
-       u64                         pm1b_cnt_blk;       /* Port address of Power Mgt 1b Control Reg Blk */
-       u64                         pm2_cnt_blk;        /* Port address of Power Mgt 2 Control Reg Blk */
-       u64                         pm_tmr_blk;         /* Port address of Power Mgt Timer Ctrl Reg Blk */
-       u64                         gpe0_blk;           /* Port addr of General Purpose acpi_event 0 Reg Blk */
-       u64                         gpe1_blk;           /* Port addr of General Purpose acpi_event 1 Reg Blk */
-       u8                          pm1_evt_len;        /* Byte length of ports at pm1_x_evt_blk */
-       u8                          pm1_cnt_len;        /* Byte length of ports at pm1_x_cnt_blk */
-       u8                          pm2_cnt_len;        /* Byte Length of ports at pm2_cnt_blk */
-       u8                          pm_tm_len;          /* Byte Length of ports at pm_tm_blk */
-       u8                          gpe0_blk_len;       /* Byte Length of ports at gpe0_blk */
-       u8                          gpe1_blk_len;       /* Byte Length of ports at gpe1_blk */
-       u8                          gpe1_base;          /* offset in gpe model where gpe1 events start */
-       u8                          reserved3;          /* reserved */
-       u16                         plvl2_lat;          /* worst case HW latency to enter/exit C2 state */
-       u16                         plvl3_lat;          /* worst case HW latency to enter/exit C3 state */
-       u8                          day_alrm;           /* index to day-of-month alarm in RTC CMOS RAM */
-       u8                          mon_alrm;           /* index to month-of-year alarm in RTC CMOS RAM */
-       u8                          century;            /* index to century in RTC CMOS RAM */
-       u8                          reserved4;          /* reserved */
-       u32                         flush_cash  : 1;    /* PAL_FLUSH_CACHE is correctly supported */
-       u32                         reserved5   : 1;    /* reserved - must be zero */
-       u32                         proc_c1     : 1;    /* all processors support C1 state */
-       u32                         plvl2_up    : 1;    /* C2 state works on MP system */
-       u32                         pwr_button  : 1;    /* Power button is handled as a generic feature */
-       u32                         sleep_button : 1;   /* Sleep button is handled as a generic feature, or not present */
-       u32                         fixed_rTC   : 1;    /* RTC wakeup stat not in fixed register space */
-       u32                         rtcs4       : 1;    /* RTC wakeup stat not possible from S4 */
-       u32                         tmr_val_ext : 1;    /* tmr_val is 32 bits */
-       u32                         dock_cap    : 1;    /* Supports Docking */
-       u32                         reserved6   : 22;    /* reserved - must be zero */
+struct {
+       struct acpi_table_header header;        /* table header */
+       u32 reserved_pad;       /* IA64 alignment, must be 0 */
+       u64 firmware_ctrl;      /* 64-bit Physical address of FACS */
+       u64 dsdt;               /* 64-bit Physical address of DSDT */
+       u8 model;               /* System Interrupt Model */
+       u8 address_space;       /* Address Space Bitmask */
+       u16 sci_int;            /* System vector of SCI interrupt */
+       u8 acpi_enable;         /* value to write to smi_cmd to enable ACPI */
+       u8 acpi_disable;        /* value to write to smi_cmd to disable ACPI */
+       u8 S4bios_req;          /* Value to write to SMI CMD to enter S4BIOS state */
+       u8 reserved2;           /* reserved - must be zero */
+       u64 smi_cmd;            /* Port address of SMI command port */
+       u64 pm1a_evt_blk;       /* Port address of Power Mgt 1a acpi_event Reg Blk */
+       u64 pm1b_evt_blk;       /* Port address of Power Mgt 1b acpi_event Reg Blk */
+       u64 pm1a_cnt_blk;       /* Port address of Power Mgt 1a Control Reg Blk */
+       u64 pm1b_cnt_blk;       /* Port address of Power Mgt 1b Control Reg Blk */
+       u64 pm2_cnt_blk;        /* Port address of Power Mgt 2 Control Reg Blk */
+       u64 pm_tmr_blk;         /* Port address of Power Mgt Timer Ctrl Reg Blk */
+       u64 gpe0_blk;           /* Port addr of General Purpose acpi_event 0 Reg Blk */
+       u64 gpe1_blk;           /* Port addr of General Purpose acpi_event 1 Reg Blk */
+       u8 pm1_evt_len;         /* Byte length of ports at pm1_x_evt_blk */
+       u8 pm1_cnt_len;         /* Byte length of ports at pm1_x_cnt_blk */
+       u8 pm2_cnt_len;         /* Byte Length of ports at pm2_cnt_blk */
+       u8 pm_tm_len;           /* Byte Length of ports at pm_tm_blk */
+       u8 gpe0_blk_len;        /* Byte Length of ports at gpe0_blk */
+       u8 gpe1_blk_len;        /* Byte Length of ports at gpe1_blk */
+       u8 gpe1_base;           /* offset in gpe model where gpe1 events start */
+       u8 reserved3;           /* reserved */
+       u16 plvl2_lat;          /* worst case HW latency to enter/exit C2 state */
+       u16 plvl3_lat;          /* worst case HW latency to enter/exit C3 state */
+       u8 day_alrm;            /* index to day-of-month alarm in RTC CMOS RAM */
+       u8 mon_alrm;            /* index to month-of-year alarm in RTC CMOS RAM */
+       u8 century;             /* index to century in RTC CMOS RAM */
+       u8 reserved4;           /* reserved */
+       u32 flush_cash:1;       /* PAL_FLUSH_CACHE is correctly supported */
+       u32 reserved5:1;        /* reserved - must be zero */
+       u32 proc_c1:1;          /* all processors support C1 state */
+       u32 plvl2_up:1;         /* C2 state works on MP system */
+       u32 pwr_button:1;       /* Power button is handled as a generic feature */
+       u32 sleep_button:1;     /* Sleep button is handled as a generic feature, or not present */
+       u32 fixed_rTC:1;        /* RTC wakeup stat not in fixed register space */
+       u32 rtcs4:1;            /* RTC wakeup stat not possible from S4 */
+       u32 tmr_val_ext:1;      /* tmr_val is 32 bits */
+       u32 dock_cap:1;         /* Supports Docking */
+       u32 reserved6:22;       /* reserved - must be zero */
 };
 
 #pragma pack()
 
-#endif /* __ACTBL71_H__ */
-
+#endif                         /* __ACTBL71_H__ */
index 3a451dc48ac865eb4d1f71ad3ecb52e1a999fff5..6213b27516e8b583dc852475c5cf4f04e9eb26ee 100644 (file)
 
 /*! [Begin] no source code translation (keep the typedefs) */
 
-
-
 /*
  * Data type ranges
  * Note: These macros are designed to be compiler independent as well as
  * working around problems that some 32-bit compilers have with 64-bit
  * constants.
  */
-#define ACPI_UINT8_MAX                  (UINT8) (~((UINT8)  0)) /* 0xFF               */
-#define ACPI_UINT16_MAX                 (UINT16)(~((UINT16) 0)) /* 0xFFFF             */
-#define ACPI_UINT32_MAX                 (UINT32)(~((UINT32) 0)) /* 0xFFFFFFFF         */
-#define ACPI_UINT64_MAX                 (UINT64)(~((UINT64) 0)) /* 0xFFFFFFFFFFFFFFFF */
+#define ACPI_UINT8_MAX                  (UINT8) (~((UINT8)  0))        /* 0xFF               */
+#define ACPI_UINT16_MAX                 (UINT16)(~((UINT16) 0))        /* 0xFFFF             */
+#define ACPI_UINT32_MAX                 (UINT32)(~((UINT32) 0))        /* 0xFFFFFFFF         */
+#define ACPI_UINT64_MAX                 (UINT64)(~((UINT64) 0))        /* 0xFFFFFFFFFFFFFFFF */
 #define ACPI_ASCII_MAX                  0x7F
 
-
 #ifdef DEFINE_ALTERNATE_TYPES
 /*
  * Types used only in translated source, defined here to enable
  * cross-platform compilation only.
  */
-typedef int                             s32;
-typedef unsigned char                   u8;
-typedef unsigned short                  u16;
-typedef unsigned int                    u32;
-typedef COMPILER_DEPENDENT_UINT64       u64;
+typedef int s32;
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned int u32;
+typedef COMPILER_DEPENDENT_UINT64 u64;
 
 #endif
 
-
 /*
  * Data types - Fixed across all compilation models (16/32/64)
  *
@@ -102,30 +98,29 @@ typedef COMPILER_DEPENDENT_UINT64       u64;
 /*
  * 64-bit type definitions
  */
-typedef unsigned char                   UINT8;
-typedef unsigned char                   BOOLEAN;
-typedef unsigned short                  UINT16;
-typedef int                             INT32;
-typedef unsigned int                    UINT32;
-typedef COMPILER_DEPENDENT_INT64        INT64;
-typedef COMPILER_DEPENDENT_UINT64       UINT64;
+typedef unsigned char UINT8;
+typedef unsigned char BOOLEAN;
+typedef unsigned short UINT16;
+typedef int INT32;
+typedef unsigned int UINT32;
+typedef COMPILER_DEPENDENT_INT64 INT64;
+typedef COMPILER_DEPENDENT_UINT64 UINT64;
 
 /*! [End] no source code translation !*/
 
-typedef s64                                     acpi_native_int;
-typedef u64                                     acpi_native_uint;
+typedef s64 acpi_native_int;
+typedef u64 acpi_native_uint;
 
-typedef u64                                     acpi_table_ptr;
-typedef u64                                     acpi_io_address;
-typedef u64                                     acpi_physical_address;
-typedef u64                                     acpi_size;
+typedef u64 acpi_table_ptr;
+typedef u64 acpi_io_address;
+typedef u64 acpi_physical_address;
+typedef u64 acpi_size;
 
-#define ALIGNED_ADDRESS_BOUNDARY        0x00000008      /* No hardware alignment support in IA64 */
-#define ACPI_USE_NATIVE_DIVIDE                          /* Native 64-bit integer support */
+#define ALIGNED_ADDRESS_BOUNDARY        0x00000008     /* No hardware alignment support in IA64 */
+#define ACPI_USE_NATIVE_DIVIDE /* Native 64-bit integer support */
 #define ACPI_MAX_PTR                    ACPI_UINT64_MAX
 #define ACPI_SIZE_MAX                   ACPI_UINT64_MAX
 
-
 #elif ACPI_MACHINE_WIDTH == 16
 
 /*! [Begin] no source code translation (keep the typedefs) */
@@ -133,32 +128,31 @@ typedef u64                                     acpi_size;
 /*
  * 16-bit type definitions
  */
-typedef unsigned char                   UINT8;
-typedef unsigned char                   BOOLEAN;
-typedef unsigned int                    UINT16;
-typedef long                            INT32;
-typedef int                             INT16;
-typedef unsigned long                   UINT32;
-
-struct
-{
-       UINT32                                  Lo;
-       UINT32                                  Hi;
+typedef unsigned char UINT8;
+typedef unsigned char BOOLEAN;
+typedef unsigned int UINT16;
+typedef long INT32;
+typedef int INT16;
+typedef unsigned long UINT32;
+
+struct {
+       UINT32 Lo;
+       UINT32 Hi;
 };
 
 /*! [End] no source code translation !*/
 
-typedef u16                                     acpi_native_uint;
-typedef s16                                     acpi_native_int;
+typedef u16 acpi_native_uint;
+typedef s16 acpi_native_int;
 
-typedef u32                                     acpi_table_ptr;
-typedef u32                                     acpi_io_address;
-typedef char                                    *acpi_physical_address;
-typedef u16                                     acpi_size;
+typedef u32 acpi_table_ptr;
+typedef u32 acpi_io_address;
+typedef char *acpi_physical_address;
+typedef u16 acpi_size;
 
 #define ALIGNED_ADDRESS_BOUNDARY        0x00000002
 #define ACPI_MISALIGNED_TRANSFERS
-#define ACPI_USE_NATIVE_DIVIDE                          /* No 64-bit integers, ok to use native divide */
+#define ACPI_USE_NATIVE_DIVIDE /* No 64-bit integers, ok to use native divide */
 #define ACPI_MAX_PTR                    ACPI_UINT16_MAX
 #define ACPI_SIZE_MAX                   ACPI_UINT16_MAX
 
@@ -168,7 +162,6 @@ typedef u16                                     acpi_size;
  */
 #define ACPI_NO_INTEGER64_SUPPORT
 
-
 #elif ACPI_MACHINE_WIDTH == 32
 
 /*! [Begin] no source code translation (keep the typedefs) */
@@ -176,23 +169,23 @@ typedef u16                                     acpi_size;
 /*
  * 32-bit type definitions (default)
  */
-typedef unsigned char                   UINT8;
-typedef unsigned char                   BOOLEAN;
-typedef unsigned short                  UINT16;
-typedef int                             INT32;
-typedef unsigned int                    UINT32;
-typedef COMPILER_DEPENDENT_INT64        INT64;
-typedef COMPILER_DEPENDENT_UINT64       UINT64;
+typedef unsigned char UINT8;
+typedef unsigned char BOOLEAN;
+typedef unsigned short UINT16;
+typedef int INT32;
+typedef unsigned int UINT32;
+typedef COMPILER_DEPENDENT_INT64 INT64;
+typedef COMPILER_DEPENDENT_UINT64 UINT64;
 
 /*! [End] no source code translation !*/
 
-typedef s32                                     acpi_native_int;
-typedef u32                                     acpi_native_uint;
+typedef s32 acpi_native_int;
+typedef u32 acpi_native_uint;
 
-typedef u64                                     acpi_table_ptr;
-typedef u32                                     acpi_io_address;
-typedef u64                                     acpi_physical_address;
-typedef u32                                     acpi_size;
+typedef u64 acpi_table_ptr;
+typedef u32 acpi_io_address;
+typedef u64 acpi_physical_address;
+typedef u32 acpi_size;
 
 #define ALIGNED_ADDRESS_BOUNDARY        0x00000004
 #define ACPI_MISALIGNED_TRANSFERS
@@ -203,29 +196,27 @@ typedef u32                                     acpi_size;
 #error unknown ACPI_MACHINE_WIDTH
 #endif
 
-
 /*
- * Miscellaneous common types
+ * This type is used for bitfields in ACPI tables. The only type that is
+ * even remotely portable is u8. Anything else is not portable, so
+ * do not add any more bitfield types.
  */
-typedef u16                                     UINT16_BIT;
-typedef u32                                     UINT32_BIT;
-typedef acpi_native_uint                        ACPI_PTRDIFF;
+typedef u8 UINT8_BIT;
+typedef acpi_native_uint ACPI_PTRDIFF;
 
 /*
  * Pointer overlays to avoid lots of typecasting for
  * code that accepts both physical and logical pointers.
  */
-union acpi_pointers
-{
-       acpi_physical_address               physical;
-       void                                *logical;
-       acpi_table_ptr                      value;
+union acpi_pointers {
+       acpi_physical_address physical;
+       void *logical;
+       acpi_table_ptr value;
 };
 
-struct acpi_pointer
-{
-       u32                                 pointer_type;
-       union acpi_pointers                 pointer;
+struct acpi_pointer {
+       u32 pointer_type;
+       union acpi_pointers pointer;
 };
 
 /* pointer_types for above */
@@ -243,6 +234,14 @@ struct acpi_pointer
 #define ACPI_LOGMODE_PHYSPTR            ACPI_LOGICAL_ADDRESSING  | ACPI_PHYSICAL_POINTER
 #define ACPI_LOGMODE_LOGPTR             ACPI_LOGICAL_ADDRESSING  | ACPI_LOGICAL_POINTER
 
+/*
+ * If acpi_cache_t was not defined in the OS-dependent header,
+ * define it now. This is typically the case where the local cache
+ * manager implementation is to be used (ACPI_USE_LOCAL_CACHE)
+ */
+#ifndef acpi_cache_t
+#define acpi_cache_t                            struct acpi_memory_list
+#endif
 
 /*
  * Useful defines
@@ -261,34 +260,29 @@ struct acpi_pointer
 #define NULL                            (void *) 0
 #endif
 
-
 /*
  * Local datatypes
  */
-typedef u32                                     acpi_status;    /* All ACPI Exceptions */
-typedef u32                                     acpi_name;      /* 4-byte ACPI name */
-typedef char *                                  acpi_string;    /* Null terminated ASCII string */
-typedef void *                                  acpi_handle;    /* Actually a ptr to an Node */
-
-struct uint64_struct
-{
-       u32                                 lo;
-       u32                                 hi;
+typedef u32 acpi_status;       /* All ACPI Exceptions */
+typedef u32 acpi_name;         /* 4-byte ACPI name */
+typedef char *acpi_string;     /* Null terminated ASCII string */
+typedef void *acpi_handle;     /* Actually a ptr to an Node */
+
+struct uint64_struct {
+       u32 lo;
+       u32 hi;
 };
 
-union uint64_overlay
-{
-       u64                                 full;
-       struct uint64_struct                part;
+union uint64_overlay {
+       u64 full;
+       struct uint64_struct part;
 };
 
-struct uint32_struct
-{
-       u32                                 lo;
-       u32                                 hi;
+struct uint32_struct {
+       u32 lo;
+       u32 hi;
 };
 
-
 /*
  * Acpi integer width. In ACPI version 1, integers are
  * 32 bits.  In ACPI version 2, integers are 64 bits.
@@ -300,26 +294,24 @@ struct uint32_struct
 
 /* 32-bit integers only, no 64-bit support */
 
-typedef u32                                     acpi_integer;
+typedef u32 acpi_integer;
 #define ACPI_INTEGER_MAX                ACPI_UINT32_MAX
 #define ACPI_INTEGER_BIT_SIZE           32
-#define ACPI_MAX_DECIMAL_DIGITS         10  /* 2^32 = 4,294,967,296 */
-
-#define ACPI_USE_NATIVE_DIVIDE          /* Use compiler native 32-bit divide */
+#define ACPI_MAX_DECIMAL_DIGITS         10     /* 2^32 = 4,294,967,296 */
 
+#define ACPI_USE_NATIVE_DIVIDE /* Use compiler native 32-bit divide */
 
 #else
 
 /* 64-bit integers */
 
-typedef u64                                     acpi_integer;
+typedef u64 acpi_integer;
 #define ACPI_INTEGER_MAX                ACPI_UINT64_MAX
 #define ACPI_INTEGER_BIT_SIZE           64
-#define ACPI_MAX_DECIMAL_DIGITS         20  /* 2^64 = 18,446,744,073,709,551,616 */
-
+#define ACPI_MAX_DECIMAL_DIGITS         20     /* 2^64 = 18,446,744,073,709,551,616 */
 
 #if ACPI_MACHINE_WIDTH == 64
-#define ACPI_USE_NATIVE_DIVIDE          /* Use compiler native 64-bit divide */
+#define ACPI_USE_NATIVE_DIVIDE /* Use compiler native 64-bit divide */
 #endif
 #endif
 
@@ -333,7 +325,6 @@ typedef u64                                     acpi_integer;
  */
 #define ACPI_ROOT_OBJECT                (acpi_handle) ACPI_PTR_ADD (char, NULL, ACPI_MAX_PTR)
 
-
 /*
  * Initialization sequence
  */
@@ -400,7 +391,7 @@ typedef u64                                     acpi_integer;
 /*
  *  Table types.  These values are passed to the table related APIs
  */
-typedef u32                                     acpi_table_type;
+typedef u32 acpi_table_type;
 
 #define ACPI_TABLE_RSDP                 (acpi_table_type) 0
 #define ACPI_TABLE_DSDT                 (acpi_table_type) 1
@@ -421,22 +412,22 @@ typedef u32                                     acpi_table_type;
  * NOTE: Types must be kept in sync with the global acpi_ns_properties
  * and acpi_ns_type_names arrays.
  */
-typedef u32                                     acpi_object_type;
+typedef u32 acpi_object_type;
 
 #define ACPI_TYPE_ANY                   0x00
-#define ACPI_TYPE_INTEGER               0x01  /* Byte/Word/Dword/Zero/One/Ones */
+#define ACPI_TYPE_INTEGER               0x01   /* Byte/Word/Dword/Zero/One/Ones */
 #define ACPI_TYPE_STRING                0x02
 #define ACPI_TYPE_BUFFER                0x03
-#define ACPI_TYPE_PACKAGE               0x04  /* byte_const, multiple data_term/Constant/super_name */
+#define ACPI_TYPE_PACKAGE               0x04   /* byte_const, multiple data_term/Constant/super_name */
 #define ACPI_TYPE_FIELD_UNIT            0x05
-#define ACPI_TYPE_DEVICE                0x06  /* Name, multiple Node */
+#define ACPI_TYPE_DEVICE                0x06   /* Name, multiple Node */
 #define ACPI_TYPE_EVENT                 0x07
-#define ACPI_TYPE_METHOD                0x08  /* Name, byte_const, multiple Code */
+#define ACPI_TYPE_METHOD                0x08   /* Name, byte_const, multiple Code */
 #define ACPI_TYPE_MUTEX                 0x09
 #define ACPI_TYPE_REGION                0x0A
-#define ACPI_TYPE_POWER                 0x0B  /* Name,byte_const,word_const,multi Node */
-#define ACPI_TYPE_PROCESSOR             0x0C  /* Name,byte_const,Dword_const,byte_const,multi nm_o */
-#define ACPI_TYPE_THERMAL               0x0D  /* Name, multiple Node */
+#define ACPI_TYPE_POWER                 0x0B   /* Name,byte_const,word_const,multi Node */
+#define ACPI_TYPE_PROCESSOR             0x0C   /* Name,byte_const,Dword_const,byte_const,multi nm_o */
+#define ACPI_TYPE_THERMAL               0x0D   /* Name, multiple Node */
 #define ACPI_TYPE_BUFFER_FIELD          0x0E
 #define ACPI_TYPE_DDB_HANDLE            0x0F
 #define ACPI_TYPE_DEBUG_OBJECT          0x10
@@ -453,16 +444,16 @@ typedef u32                                     acpi_object_type;
 #define ACPI_TYPE_LOCAL_REGION_FIELD    0x11
 #define ACPI_TYPE_LOCAL_BANK_FIELD      0x12
 #define ACPI_TYPE_LOCAL_INDEX_FIELD     0x13
-#define ACPI_TYPE_LOCAL_REFERENCE       0x14  /* Arg#, Local#, Name, Debug, ref_of, Index */
+#define ACPI_TYPE_LOCAL_REFERENCE       0x14   /* Arg#, Local#, Name, Debug, ref_of, Index */
 #define ACPI_TYPE_LOCAL_ALIAS           0x15
 #define ACPI_TYPE_LOCAL_METHOD_ALIAS    0x16
 #define ACPI_TYPE_LOCAL_NOTIFY          0x17
 #define ACPI_TYPE_LOCAL_ADDRESS_HANDLER 0x18
 #define ACPI_TYPE_LOCAL_RESOURCE        0x19
 #define ACPI_TYPE_LOCAL_RESOURCE_FIELD  0x1A
-#define ACPI_TYPE_LOCAL_SCOPE           0x1B  /* 1 Name, multiple object_list Nodes */
+#define ACPI_TYPE_LOCAL_SCOPE           0x1B   /* 1 Name, multiple object_list Nodes */
 
-#define ACPI_TYPE_NS_NODE_MAX           0x1B  /* Last typecode used within a NS Node */
+#define ACPI_TYPE_NS_NODE_MAX           0x1B   /* Last typecode used within a NS Node */
 
 /*
  * These are special object types that never appear in
@@ -506,7 +497,7 @@ typedef u32                                     acpi_object_type;
 #define ACPI_BTYPE_DATA                 (ACPI_BTYPE_COMPUTE_DATA  | ACPI_BTYPE_PACKAGE)
 #define ACPI_BTYPE_DATA_REFERENCE       (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
 #define ACPI_BTYPE_DEVICE_OBJECTS       (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
-#define ACPI_BTYPE_OBJECTS_AND_REFS     0x0001FFFF  /* ARG or LOCAL */
+#define ACPI_BTYPE_OBJECTS_AND_REFS     0x0001FFFF     /* ARG or LOCAL */
 #define ACPI_BTYPE_ALL_OBJECTS          0x0000FFFF
 
 /*
@@ -519,7 +510,7 @@ typedef u32                                     acpi_object_type;
 /*
  * Event Types: Fixed & General Purpose
  */
-typedef u32                                     acpi_event_type;
+typedef u32 acpi_event_type;
 
 /*
  * Fixed events
@@ -547,7 +538,7 @@ typedef u32                                     acpi_event_type;
  *          |     +----- Set?
  *          +----------- <Reserved>
  */
-typedef u32                                     acpi_event_status;
+typedef u32 acpi_event_status;
 
 #define ACPI_EVENT_FLAG_DISABLED        (acpi_event_status) 0x00
 #define ACPI_EVENT_FLAG_ENABLED         (acpi_event_status) 0x01
@@ -564,7 +555,6 @@ typedef u32                                     acpi_event_status;
 #define ACPI_GPE_ENABLE                 0
 #define ACPI_GPE_DISABLE                1
 
-
 /*
  * GPE info flags - Per GPE
  * +-+-+-+---+---+-+
@@ -585,22 +575,22 @@ typedef u32                                     acpi_event_status;
 #define ACPI_GPE_TYPE_MASK              (u8) 0x06
 #define ACPI_GPE_TYPE_WAKE_RUN          (u8) 0x06
 #define ACPI_GPE_TYPE_WAKE              (u8) 0x02
-#define ACPI_GPE_TYPE_RUNTIME           (u8) 0x04    /* Default */
+#define ACPI_GPE_TYPE_RUNTIME           (u8) 0x04      /* Default */
 
 #define ACPI_GPE_DISPATCH_MASK          (u8) 0x18
 #define ACPI_GPE_DISPATCH_HANDLER       (u8) 0x08
 #define ACPI_GPE_DISPATCH_METHOD        (u8) 0x10
-#define ACPI_GPE_DISPATCH_NOT_USED      (u8) 0x00    /* Default */
+#define ACPI_GPE_DISPATCH_NOT_USED      (u8) 0x00      /* Default */
 
 #define ACPI_GPE_RUN_ENABLE_MASK        (u8) 0x20
 #define ACPI_GPE_RUN_ENABLED            (u8) 0x20
-#define ACPI_GPE_RUN_DISABLED           (u8) 0x00    /* Default */
+#define ACPI_GPE_RUN_DISABLED           (u8) 0x00      /* Default */
 
 #define ACPI_GPE_WAKE_ENABLE_MASK       (u8) 0x40
 #define ACPI_GPE_WAKE_ENABLED           (u8) 0x40
-#define ACPI_GPE_WAKE_DISABLED          (u8) 0x00    /* Default */
+#define ACPI_GPE_WAKE_DISABLED          (u8) 0x00      /* Default */
 
-#define ACPI_GPE_ENABLE_MASK            (u8) 0x60    /* Both run/wake */
+#define ACPI_GPE_ENABLE_MASK            (u8) 0x60      /* Both run/wake */
 
 #define ACPI_GPE_SYSTEM_MASK            (u8) 0x80
 #define ACPI_GPE_SYSTEM_RUNNING         (u8) 0x80
@@ -609,13 +599,12 @@ typedef u32                                     acpi_event_status;
 /*
  * Flags for GPE and Lock interfaces
  */
-#define ACPI_EVENT_WAKE_ENABLE          0x2             /* acpi_gpe_enable */
-#define ACPI_EVENT_WAKE_DISABLE         0x2             /* acpi_gpe_disable */
+#define ACPI_EVENT_WAKE_ENABLE          0x2    /* acpi_gpe_enable */
+#define ACPI_EVENT_WAKE_DISABLE         0x2    /* acpi_gpe_disable */
 
 #define ACPI_NOT_ISR                    0x1
 #define ACPI_ISR                        0x0
 
-
 /* Notify types */
 
 #define ACPI_SYSTEM_NOTIFY              0x1
@@ -625,10 +614,9 @@ typedef u32                                     acpi_event_status;
 
 #define ACPI_MAX_SYS_NOTIFY             0x7f
 
-
 /* Address Space (Operation Region) Types */
 
-typedef u8                                      acpi_adr_space_type;
+typedef u8 acpi_adr_space_type;
 
 #define ACPI_ADR_SPACE_SYSTEM_MEMORY    (acpi_adr_space_type) 0
 #define ACPI_ADR_SPACE_SYSTEM_IO        (acpi_adr_space_type) 1
@@ -640,7 +628,6 @@ typedef u8                                      acpi_adr_space_type;
 #define ACPI_ADR_SPACE_DATA_TABLE       (acpi_adr_space_type) 7
 #define ACPI_ADR_SPACE_FIXED_HARDWARE   (acpi_adr_space_type) 127
 
-
 /*
  * bit_register IDs
  * These are bitfields defined within the full ACPI registers
@@ -674,74 +661,62 @@ typedef u8                                      acpi_adr_space_type;
 #define ACPI_BITREG_MAX                         0x15
 #define ACPI_NUM_BITREG                         ACPI_BITREG_MAX + 1
 
-
 /*
  * External ACPI object definition
  */
-union acpi_object
-{
-       acpi_object_type                    type;   /* See definition of acpi_ns_type for values */
-       struct
-       {
-               acpi_object_type                    type;
-               acpi_integer                        value;      /* The actual number */
+union acpi_object {
+       acpi_object_type type;  /* See definition of acpi_ns_type for values */
+       struct {
+               acpi_object_type type;
+               acpi_integer value;     /* The actual number */
        } integer;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 length;     /* # of bytes in string, excluding trailing null */
-               char                                *pointer;   /* points to the string value */
+       struct {
+               acpi_object_type type;
+               u32 length;     /* # of bytes in string, excluding trailing null */
+               char *pointer;  /* points to the string value */
        } string;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 length;     /* # of bytes in buffer */
-               u8                                  *pointer;   /* points to the buffer */
+       struct {
+               acpi_object_type type;
+               u32 length;     /* # of bytes in buffer */
+               u8 *pointer;    /* points to the buffer */
        } buffer;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 fill1;
-               acpi_handle                         handle;     /* object reference */
+       struct {
+               acpi_object_type type;
+               u32 fill1;
+               acpi_handle handle;     /* object reference */
        } reference;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 count;      /* # of elements in package */
-               union acpi_object                   *elements;  /* Pointer to an array of ACPI_OBJECTs */
+       struct {
+               acpi_object_type type;
+               u32 count;      /* # of elements in package */
+               union acpi_object *elements;    /* Pointer to an array of ACPI_OBJECTs */
        } package;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 proc_id;
-               acpi_io_address                     pblk_address;
-               u32                                 pblk_length;
+       struct {
+               acpi_object_type type;
+               u32 proc_id;
+               acpi_io_address pblk_address;
+               u32 pblk_length;
        } processor;
 
-       struct
-       {
-               acpi_object_type                    type;
-               u32                                 system_level;
-               u32                                 resource_order;
+       struct {
+               acpi_object_type type;
+               u32 system_level;
+               u32 resource_order;
        } power_resource;
 };
 
-
 /*
  * List of objects, used as a parameter list for control method evaluation
  */
-struct acpi_object_list
-{
-       u32                                 count;
-       union acpi_object                   *pointer;
+struct acpi_object_list {
+       u32 count;
+       union acpi_object *pointer;
 };
 
-
 /*
  * Miscellaneous common Data Structures used by the interfaces
  */
@@ -749,13 +724,11 @@ struct acpi_object_list
 #define ACPI_ALLOCATE_BUFFER        (acpi_size) (-1)
 #define ACPI_ALLOCATE_LOCAL_BUFFER  (acpi_size) (-2)
 
-struct acpi_buffer
-{
-       acpi_size                           length;         /* Length in bytes of the buffer */
-       void                                *pointer;       /* pointer to buffer */
+struct acpi_buffer {
+       acpi_size length;       /* Length in bytes of the buffer */
+       void *pointer;          /* pointer to buffer */
 };
 
-
 /*
  * name_type for acpi_get_name
  */
@@ -763,7 +736,6 @@ struct acpi_buffer
 #define ACPI_SINGLE_NAME                1
 #define ACPI_NAME_TYPE_MAX              1
 
-
 /*
  * Structure and flags for acpi_get_system_info
  */
@@ -772,139 +744,106 @@ struct acpi_buffer
 #define ACPI_SYS_MODE_LEGACY            0x0002
 #define ACPI_SYS_MODES_MASK             0x0003
 
-
 /*
  * ACPI Table Info.  One per ACPI table _type_
  */
-struct acpi_table_info
-{
-       u32                                 count;
+struct acpi_table_info {
+       u32 count;
 };
 
-
 /*
  * System info returned by acpi_get_system_info()
  */
-struct acpi_system_info
-{
-       u32                                 acpi_ca_version;
-       u32                                 flags;
-       u32                                 timer_resolution;
-       u32                                 reserved1;
-       u32                                 reserved2;
-       u32                                 debug_level;
-       u32                                 debug_layer;
-       u32                                 num_table_types;
-       struct acpi_table_info              table_info [NUM_ACPI_TABLE_TYPES];
+struct acpi_system_info {
+       u32 acpi_ca_version;
+       u32 flags;
+       u32 timer_resolution;
+       u32 reserved1;
+       u32 reserved2;
+       u32 debug_level;
+       u32 debug_layer;
+       u32 num_table_types;
+       struct acpi_table_info table_info[NUM_ACPI_TABLE_TYPES];
 };
 
-
 /*
  * Types specific to the OS service interfaces
  */
-typedef u32
-(ACPI_SYSTEM_XFACE *acpi_osd_handler) (
-       void                            *context);
+typedef u32(ACPI_SYSTEM_XFACE * acpi_osd_handler) (void *context);
 
 typedef void
-(ACPI_SYSTEM_XFACE *acpi_osd_exec_callback) (
-       void                            *context);
+ (ACPI_SYSTEM_XFACE * acpi_osd_exec_callback) (void *context);
 
 /*
  * Various handlers and callback procedures
  */
-typedef
-u32 (*acpi_event_handler) (
-       void                                *context);
+typedef u32(*acpi_event_handler) (void *context);
 
 typedef
-void (*acpi_notify_handler) (
-       acpi_handle                         device,
-       u32                                 value,
-       void                                *context);
+void (*acpi_notify_handler) (acpi_handle device, u32 value, void *context);
 
 typedef
-void (*acpi_object_handler) (
-       acpi_handle                         object,
-       u32                                 function,
-       void                                *data);
+void (*acpi_object_handler) (acpi_handle object, u32 function, void *data);
 
-typedef
-acpi_status (*acpi_init_handler) (
-       acpi_handle                         object,
-       u32                                 function);
+typedef acpi_status(*acpi_init_handler) (acpi_handle object, u32 function);
 
 #define ACPI_INIT_DEVICE_INI        1
 
 typedef
-acpi_status (*acpi_exception_handler) (
-       acpi_status                     aml_status,
-       acpi_name                       name,
-       u16                             opcode,
-       u32                             aml_offset,
-       void                            *context);
-
+acpi_status(*acpi_exception_handler) (acpi_status aml_status,
+                                     acpi_name name,
+                                     u16 opcode,
+                                     u32 aml_offset, void *context);
 
 /* Address Spaces (For Operation Regions) */
 
 typedef
-acpi_status (*acpi_adr_space_handler) (
-       u32                                 function,
-       acpi_physical_address               address,
-       u32                                 bit_width,
-       acpi_integer                        *value,
-       void                                *handler_context,
-       void                                *region_context);
+acpi_status(*acpi_adr_space_handler) (u32 function,
+                                     acpi_physical_address address,
+                                     u32 bit_width,
+                                     acpi_integer * value,
+                                     void *handler_context,
+                                     void *region_context);
 
 #define ACPI_DEFAULT_HANDLER        NULL
 
-
 typedef
-acpi_status (*acpi_adr_space_setup) (
-       acpi_handle                         region_handle,
-       u32                                 function,
-       void                                *handler_context,
-       void                                **region_context);
+acpi_status(*acpi_adr_space_setup) (acpi_handle region_handle,
+                                   u32 function,
+                                   void *handler_context,
+                                   void **region_context);
 
 #define ACPI_REGION_ACTIVATE    0
 #define ACPI_REGION_DEACTIVATE  1
 
 typedef
-acpi_status (*acpi_walk_callback) (
-       acpi_handle                         obj_handle,
-       u32                                 nesting_level,
-       void                                *context,
-       void                                **return_value);
-
+acpi_status(*acpi_walk_callback) (acpi_handle obj_handle,
+                                 u32 nesting_level,
+                                 void *context, void **return_value);
 
 /* Interrupt handler return values */
 
 #define ACPI_INTERRUPT_NOT_HANDLED      0x00
 #define ACPI_INTERRUPT_HANDLED          0x01
 
-
 /* Common string version of device HIDs and UIDs */
 
-struct acpi_device_id
-{
-       char                            value[ACPI_DEVICE_ID_LENGTH];
+struct acpi_device_id {
+       char value[ACPI_DEVICE_ID_LENGTH];
 };
 
 /* Common string version of device CIDs */
 
-struct acpi_compatible_id
-{
-       char                            value[ACPI_MAX_CID_LENGTH];
+struct acpi_compatible_id {
+       char value[ACPI_MAX_CID_LENGTH];
 };
 
-struct acpi_compatible_id_list
-{
-       u32                             count;
-       u32                             size;
-       struct acpi_compatible_id       id[1];
+struct acpi_compatible_id_list {
+       u32 count;
+       u32 size;
+       struct acpi_compatible_id id[1];
 };
 
-
 /* Structure and flags for acpi_get_object_info */
 
 #define ACPI_VALID_STA                  0x0001
@@ -914,55 +853,45 @@ struct acpi_compatible_id_list
 #define ACPI_VALID_CID                  0x0010
 #define ACPI_VALID_SXDS                 0x0020
 
-
 #define ACPI_COMMON_OBJ_INFO \
        acpi_object_type                    type;           /* ACPI object type */ \
-       acpi_name                           name            /* ACPI object Name */
-
+       acpi_name                           name        /* ACPI object Name */
 
-struct acpi_obj_info_header
-{
+struct acpi_obj_info_header {
        ACPI_COMMON_OBJ_INFO;
 };
 
-
 /* Structure returned from Get Object Info */
 
-struct acpi_device_info
-{
+struct acpi_device_info {
        ACPI_COMMON_OBJ_INFO;
 
-       u32                                 valid;              /* Indicates which fields below are valid */
-       u32                                 current_status;     /* _STA value */
-       acpi_integer                        address;            /* _ADR value if any */
-       struct acpi_device_id               hardware_id;        /* _HID value if any */
-       struct acpi_device_id               unique_id;          /* _UID value if any */
-       u8                                  highest_dstates[4]; /* _sx_d values: 0xFF indicates not valid */
-       struct acpi_compatible_id_list      compatibility_id;   /* List of _CIDs if any */
+       u32 valid;              /* Indicates which fields below are valid */
+       u32 current_status;     /* _STA value */
+       acpi_integer address;   /* _ADR value if any */
+       struct acpi_device_id hardware_id;      /* _HID value if any */
+       struct acpi_device_id unique_id;        /* _UID value if any */
+       u8 highest_dstates[4];  /* _sx_d values: 0xFF indicates not valid */
+       struct acpi_compatible_id_list compatibility_id;        /* List of _CIDs if any */
 };
 
-
 /* Context structs for address space handlers */
 
-struct acpi_pci_id
-{
-       u16                                 segment;
-       u16                                 bus;
-       u16                                 device;
-       u16                                 function;
+struct acpi_pci_id {
+       u16 segment;
+       u16 bus;
+       u16 device;
+       u16 function;
 };
 
-
-struct acpi_mem_space_context
-{
-       u32                                 length;
-       acpi_physical_address               address;
-       acpi_physical_address               mapped_physical_address;
-       u8                                  *mapped_logical_address;
-       acpi_size                           mapped_length;
+struct acpi_mem_space_context {
+       u32 length;
+       acpi_physical_address address;
+       acpi_physical_address mapped_physical_address;
+       u8 *mapped_logical_address;
+       acpi_size mapped_length;
 };
 
-
 /*
  * Definitions for Resource Attributes
  */
@@ -992,8 +921,8 @@ struct acpi_mem_space_context
 /*
  *  IO Port Descriptor Decode
  */
-#define ACPI_DECODE_10                  (u8) 0x00    /* 10-bit IO address decode */
-#define ACPI_DECODE_16                  (u8) 0x01    /* 16-bit IO address decode */
+#define ACPI_DECODE_10                  (u8) 0x00      /* 10-bit IO address decode */
+#define ACPI_DECODE_16                  (u8) 0x01      /* 16-bit IO address decode */
 
 /*
  *  IRQ Attributes
@@ -1045,32 +974,28 @@ struct acpi_mem_space_context
 #define ACPI_PRODUCER                   (u8) 0x00
 #define ACPI_CONSUMER                   (u8) 0x01
 
-
 /*
  *  Structures used to describe device resources
  */
-struct acpi_resource_irq
-{
-       u32                                 edge_level;
-       u32                                 active_high_low;
-       u32                                 shared_exclusive;
-       u32                                 number_of_interrupts;
-       u32                                 interrupts[1];
+struct acpi_resource_irq {
+       u32 edge_level;
+       u32 active_high_low;
+       u32 shared_exclusive;
+       u32 number_of_interrupts;
+       u32 interrupts[1];
 };
 
-struct acpi_resource_dma
-{
-       u32                                 type;
-       u32                                 bus_master;
-       u32                                 transfer;
-       u32                                 number_of_channels;
-       u32                                 channels[1];
+struct acpi_resource_dma {
+       u32 type;
+       u32 bus_master;
+       u32 transfer;
+       u32 number_of_channels;
+       u32 channels[1];
 };
 
-struct acpi_resource_start_dpf
-{
-       u32                                 compatibility_priority;
-       u32                                 performance_robustness;
+struct acpi_resource_start_dpf {
+       u32 compatibility_priority;
+       u32 performance_robustness;
 };
 
 /*
@@ -1078,149 +1003,127 @@ struct acpi_resource_start_dpf
  * needed because it has no fields
  */
 
-struct acpi_resource_io
-{
-       u32                                 io_decode;
-       u32                                 min_base_address;
-       u32                                 max_base_address;
-       u32                                 alignment;
-       u32                                 range_length;
+struct acpi_resource_io {
+       u32 io_decode;
+       u32 min_base_address;
+       u32 max_base_address;
+       u32 alignment;
+       u32 range_length;
 };
 
-struct acpi_resource_fixed_io
-{
-       u32                                 base_address;
-       u32                                 range_length;
+struct acpi_resource_fixed_io {
+       u32 base_address;
+       u32 range_length;
 };
 
-struct acpi_resource_vendor
-{
-       u32                                 length;
-       u8                                  reserved[1];
+struct acpi_resource_vendor {
+       u32 length;
+       u8 reserved[1];
 };
 
-struct acpi_resource_end_tag
-{
-       u8                                  checksum;
+struct acpi_resource_end_tag {
+       u8 checksum;
 };
 
-struct acpi_resource_mem24
-{
-       u32                                 read_write_attribute;
-       u32                                 min_base_address;
-       u32                                 max_base_address;
-       u32                                 alignment;
-       u32                                 range_length;
+struct acpi_resource_mem24 {
+       u32 read_write_attribute;
+       u32 min_base_address;
+       u32 max_base_address;
+       u32 alignment;
+       u32 range_length;
 };
 
-struct acpi_resource_mem32
-{
-       u32                                 read_write_attribute;
-       u32                                 min_base_address;
-       u32                                 max_base_address;
-       u32                                 alignment;
-       u32                                 range_length;
+struct acpi_resource_mem32 {
+       u32 read_write_attribute;
+       u32 min_base_address;
+       u32 max_base_address;
+       u32 alignment;
+       u32 range_length;
 };
 
-struct acpi_resource_fixed_mem32
-{
-       u32                                 read_write_attribute;
-       u32                                 range_base_address;
-       u32                                 range_length;
+struct acpi_resource_fixed_mem32 {
+       u32 read_write_attribute;
+       u32 range_base_address;
+       u32 range_length;
 };
 
-struct acpi_memory_attribute
-{
-       u16                                 cache_attribute;
-       u16                                 read_write_attribute;
+struct acpi_memory_attribute {
+       u16 cache_attribute;
+       u16 read_write_attribute;
 };
 
-struct acpi_io_attribute
-{
-       u16                                 range_attribute;
-       u16                                 translation_attribute;
+struct acpi_io_attribute {
+       u16 range_attribute;
+       u16 translation_attribute;
 };
 
-struct acpi_bus_attribute
-{
-       u16                                 reserved1;
-       u16                                 reserved2;
+struct acpi_bus_attribute {
+       u16 reserved1;
+       u16 reserved2;
 };
 
-union acpi_resource_attribute
-{
-       struct acpi_memory_attribute        memory;
-       struct acpi_io_attribute            io;
-       struct acpi_bus_attribute           bus;
+union acpi_resource_attribute {
+       struct acpi_memory_attribute memory;
+       struct acpi_io_attribute io;
+       struct acpi_bus_attribute bus;
 };
 
-struct acpi_resource_source
-{
-       u32                                 index;
-       u32                                 string_length;
-       char                                *string_ptr;
+struct acpi_resource_source {
+       u32 index;
+       u32 string_length;
+       char *string_ptr;
 };
 
-struct acpi_resource_address16
-{
-       u32                                 resource_type;
-       u32                                 producer_consumer;
-       u32                                 decode;
-       u32                                 min_address_fixed;
-       u32                                 max_address_fixed;
-       union acpi_resource_attribute       attribute;
-       u32                                 granularity;
-       u32                                 min_address_range;
-       u32                                 max_address_range;
-       u32                                 address_translation_offset;
-       u32                                 address_length;
-       struct acpi_resource_source         resource_source;
-};
+/* Fields common to all address descriptors, 16/32/64 bit */
 
-struct acpi_resource_address32
-{
-       u32                                 resource_type;
-       u32                                 producer_consumer;
-       u32                                 decode;
-       u32                                 min_address_fixed;
-       u32                                 max_address_fixed;
+#define ACPI_RESOURCE_ADDRESS_COMMON \
+       u32                                 resource_type; \
+       u32                                 producer_consumer; \
+       u32                                 decode; \
+       u32                                 min_address_fixed; \
+       u32                                 max_address_fixed; \
        union acpi_resource_attribute       attribute;
-       u32                                 granularity;
-       u32                                 min_address_range;
-       u32                                 max_address_range;
-       u32                                 address_translation_offset;
-       u32                                 address_length;
-       struct acpi_resource_source         resource_source;
+
+struct acpi_resource_address {
+ACPI_RESOURCE_ADDRESS_COMMON};
+
+struct acpi_resource_address16 {
+       ACPI_RESOURCE_ADDRESS_COMMON u32 granularity;
+       u32 min_address_range;
+       u32 max_address_range;
+       u32 address_translation_offset;
+       u32 address_length;
+       struct acpi_resource_source resource_source;
 };
 
-struct acpi_resource_address64
-{
-       u32                                 resource_type;
-       u32                                 producer_consumer;
-       u32                                 decode;
-       u32                                 min_address_fixed;
-       u32                                 max_address_fixed;
-       union acpi_resource_attribute       attribute;
-       u64                                 granularity;
-       u64                                 min_address_range;
-       u64                                 max_address_range;
-       u64                                 address_translation_offset;
-       u64                                 address_length;
-       u64                                 type_specific_attributes;
-       struct acpi_resource_source         resource_source;
+struct acpi_resource_address32 {
+       ACPI_RESOURCE_ADDRESS_COMMON u32 granularity;
+       u32 min_address_range;
+       u32 max_address_range;
+       u32 address_translation_offset;
+       u32 address_length;
+       struct acpi_resource_source resource_source;
 };
 
-struct acpi_resource_ext_irq
-{
-       u32                                 producer_consumer;
-       u32                                 edge_level;
-       u32                                 active_high_low;
-       u32                                 shared_exclusive;
-       u32                                 number_of_interrupts;
-       struct acpi_resource_source         resource_source;
-       u32                                 interrupts[1];
+struct acpi_resource_address64 {
+       ACPI_RESOURCE_ADDRESS_COMMON u64 granularity;
+       u64 min_address_range;
+       u64 max_address_range;
+       u64 address_translation_offset;
+       u64 address_length;
+       u64 type_specific_attributes;
+       struct acpi_resource_source resource_source;
 };
 
+struct acpi_resource_ext_irq {
+       u32 producer_consumer;
+       u32 edge_level;
+       u32 active_high_low;
+       u32 shared_exclusive;
+       u32 number_of_interrupts;
+       struct acpi_resource_source resource_source;
+       u32 interrupts[1];
+};
 
 /* ACPI_RESOURCE_TYPEs */
 
@@ -1240,35 +1143,34 @@ struct acpi_resource_ext_irq
 #define ACPI_RSTYPE_ADDRESS64           13
 #define ACPI_RSTYPE_EXT_IRQ             14
 
-typedef u32                                     acpi_resource_type;
-
-union acpi_resource_data
-{
-       struct acpi_resource_irq            irq;
-       struct acpi_resource_dma            dma;
-       struct acpi_resource_start_dpf      start_dpf;
-       struct acpi_resource_io             io;
-       struct acpi_resource_fixed_io       fixed_io;
-       struct acpi_resource_vendor         vendor_specific;
-       struct acpi_resource_end_tag        end_tag;
-       struct acpi_resource_mem24          memory24;
-       struct acpi_resource_mem32          memory32;
-       struct acpi_resource_fixed_mem32    fixed_memory32;
-       struct acpi_resource_address16      address16;
-       struct acpi_resource_address32      address32;
-       struct acpi_resource_address64      address64;
-       struct acpi_resource_ext_irq        extended_irq;
+typedef u32 acpi_resource_type;
+
+union acpi_resource_data {
+       struct acpi_resource_irq irq;
+       struct acpi_resource_dma dma;
+       struct acpi_resource_start_dpf start_dpf;
+       struct acpi_resource_io io;
+       struct acpi_resource_fixed_io fixed_io;
+       struct acpi_resource_vendor vendor_specific;
+       struct acpi_resource_end_tag end_tag;
+       struct acpi_resource_mem24 memory24;
+       struct acpi_resource_mem32 memory32;
+       struct acpi_resource_fixed_mem32 fixed_memory32;
+       struct acpi_resource_address address;   /* Common 16/32/64 address fields */
+       struct acpi_resource_address16 address16;
+       struct acpi_resource_address32 address32;
+       struct acpi_resource_address64 address64;
+       struct acpi_resource_ext_irq extended_irq;
 };
 
-struct acpi_resource
-{
-       acpi_resource_type                  id;
-       u32                                 length;
-       union acpi_resource_data            data;
+struct acpi_resource {
+       acpi_resource_type id;
+       u32 length;
+       union acpi_resource_data data;
 };
 
 #define ACPI_RESOURCE_LENGTH                12
-#define ACPI_RESOURCE_LENGTH_NO_DATA        8       /* Id + Length fields */
+#define ACPI_RESOURCE_LENGTH_NO_DATA        8  /* Id + Length fields */
 
 #define ACPI_SIZEOF_RESOURCE(type)          (ACPI_RESOURCE_LENGTH_NO_DATA + sizeof (type))
 
@@ -1284,19 +1186,16 @@ struct acpi_resource
  * END: of definitions for Resource Attributes
  */
 
-
-struct acpi_pci_routing_table
-{
-       u32                                 length;
-       u32                                 pin;
-       acpi_integer                        address;        /* here for 64-bit alignment */
-       u32                                 source_index;
-       char                                source[4];      /* pad to 64 bits so sizeof() works in all cases */
+struct acpi_pci_routing_table {
+       u32 length;
+       u32 pin;
+       acpi_integer address;   /* here for 64-bit alignment */
+       u32 source_index;
+       char source[4];         /* pad to 64 bits so sizeof() works in all cases */
 };
 
 /*
  * END: of definitions for PCI Routing tables
  */
 
-
-#endif /* __ACTYPES_H__ */
+#endif                         /* __ACTYPES_H__ */
index 192d0bea3884d0a16ba2b0492c418ff007334332..c1086452696ea63cc0c855a287e0cc11574bf89d 100644 (file)
 #ifndef _ACUTILS_H
 #define _ACUTILS_H
 
-
 typedef
-acpi_status (*acpi_pkg_callback) (
-       u8                              object_type,
-       union acpi_operand_object       *source_object,
-       union acpi_generic_state        *state,
-       void                            *context);
-
-struct acpi_pkg_info
-{
-       u8                              *free_space;
-       acpi_size                       length;
-       u32                             object_space;
-       u32                             num_packages;
+acpi_status(*acpi_pkg_callback) (u8 object_type,
+                                union acpi_operand_object * source_object,
+                                union acpi_generic_state * state,
+                                void *context);
+
+struct acpi_pkg_info {
+       u8 *free_space;
+       acpi_size length;
+       u32 object_space;
+       u32 num_packages;
 };
 
 #define REF_INCREMENT       (u16) 0
@@ -71,167 +68,89 @@ struct acpi_pkg_info
 #define DB_DWORD_DISPLAY    4
 #define DB_QWORD_DISPLAY    8
 
-
 /*
  * utglobal - Global data structures and procedures
  */
-void
-acpi_ut_init_globals (
-       void);
+void acpi_ut_init_globals(void);
 
 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
 
-char *
-acpi_ut_get_mutex_name (
-       u32                             mutex_id);
+char *acpi_ut_get_mutex_name(u32 mutex_id);
 
 #endif
 
-char *
-acpi_ut_get_type_name (
-       acpi_object_type                type);
-
-char *
-acpi_ut_get_node_name (
-       void                            *object);
-
-char *
-acpi_ut_get_descriptor_name (
-       void                            *object);
+char *acpi_ut_get_type_name(acpi_object_type type);
 
-char *
-acpi_ut_get_object_type_name (
-       union acpi_operand_object       *obj_desc);
+char *acpi_ut_get_node_name(void *object);
 
-char *
-acpi_ut_get_region_name (
-       u8                              space_id);
+char *acpi_ut_get_descriptor_name(void *object);
 
-char *
-acpi_ut_get_event_name (
-       u32                             event_id);
+char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc);
 
-char
-acpi_ut_hex_to_ascii_char (
-       acpi_integer                    integer,
-       u32                             position);
+char *acpi_ut_get_region_name(u8 space_id);
 
-u8
-acpi_ut_valid_object_type (
-       acpi_object_type                type);
+char *acpi_ut_get_event_name(u32 event_id);
 
-acpi_owner_id
-acpi_ut_allocate_owner_id (
-       u32                             id_type);
+char acpi_ut_hex_to_ascii_char(acpi_integer integer, u32 position);
 
+u8 acpi_ut_valid_object_type(acpi_object_type type);
 
 /*
  * utinit - miscellaneous initialization and shutdown
  */
-acpi_status
-acpi_ut_hardware_initialize (
-       void);
+acpi_status acpi_ut_hardware_initialize(void);
 
-void
-acpi_ut_subsystem_shutdown (
-       void);
-
-acpi_status
-acpi_ut_validate_fadt (
-       void);
+void acpi_ut_subsystem_shutdown(void);
 
+acpi_status acpi_ut_validate_fadt(void);
 
 /*
  * utclib - Local implementations of C library functions
  */
 #ifndef ACPI_USE_SYSTEM_CLIBRARY
 
-acpi_size
-acpi_ut_strlen (
-       const char                      *string);
-
-char *
-acpi_ut_strcpy (
-       char                            *dst_string,
-       const char                      *src_string);
-
-char *
-acpi_ut_strncpy (
-       char                            *dst_string,
-       const char                      *src_string,
-       acpi_size                       count);
-
-int
-acpi_ut_memcmp (
-       const char                      *buffer1,
-       const char                      *buffer2,
-       acpi_size                       count);
-
-int
-acpi_ut_strncmp (
-       const char                      *string1,
-       const char                      *string2,
-       acpi_size                       count);
-
-int
-acpi_ut_strcmp (
-       const char                      *string1,
-       const char                      *string2);
-
-char *
-acpi_ut_strcat (
-       char                            *dst_string,
-       const char                      *src_string);
-
-char *
-acpi_ut_strncat (
-       char                            *dst_string,
-       const char                      *src_string,
-       acpi_size                       count);
-
-u32
-acpi_ut_strtoul (
-       const char                      *string,
-       char                            **terminator,
-       u32                             base);
-
-char *
-acpi_ut_strstr (
-       char                            *string1,
-       char                            *string2);
-
-void *
-acpi_ut_memcpy (
-       void                            *dest,
-       const void                      *src,
-       acpi_size                       count);
-
-void *
-acpi_ut_memset (
-       void                            *dest,
-       acpi_native_uint                value,
-       acpi_size                       count);
-
-int
-acpi_ut_to_upper (
-       int                             c);
-
-int
-acpi_ut_to_lower (
-       int                             c);
+acpi_size acpi_ut_strlen(const char *string);
+
+char *acpi_ut_strcpy(char *dst_string, const char *src_string);
+
+char *acpi_ut_strncpy(char *dst_string,
+                     const char *src_string, acpi_size count);
+
+int acpi_ut_memcmp(const char *buffer1, const char *buffer2, acpi_size count);
+
+int acpi_ut_strncmp(const char *string1, const char *string2, acpi_size count);
+
+int acpi_ut_strcmp(const char *string1, const char *string2);
+
+char *acpi_ut_strcat(char *dst_string, const char *src_string);
+
+char *acpi_ut_strncat(char *dst_string,
+                     const char *src_string, acpi_size count);
+
+u32 acpi_ut_strtoul(const char *string, char **terminator, u32 base);
+
+char *acpi_ut_strstr(char *string1, char *string2);
+
+void *acpi_ut_memcpy(void *dest, const void *src, acpi_size count);
+
+void *acpi_ut_memset(void *dest, acpi_native_uint value, acpi_size count);
+
+int acpi_ut_to_upper(int c);
+
+int acpi_ut_to_lower(int c);
 
 extern const u8 _acpi_ctype[];
 
-#define _ACPI_XA     0x00    /* extra alphabetic - not supported */
-#define _ACPI_XS     0x40    /* extra space */
-#define _ACPI_BB     0x00    /* BEL, BS, etc. - not supported */
-#define _ACPI_CN     0x20    /* CR, FF, HT, NL, VT */
-#define _ACPI_DI     0x04    /* '0'-'9' */
-#define _ACPI_LO     0x02    /* 'a'-'z' */
-#define _ACPI_PU     0x10    /* punctuation */
-#define _ACPI_SP     0x08    /* space */
-#define _ACPI_UP     0x01    /* 'A'-'Z' */
-#define _ACPI_XD     0x80    /* '0'-'9', 'A'-'F', 'a'-'f' */
+#define _ACPI_XA     0x00      /* extra alphabetic - not supported */
+#define _ACPI_XS     0x40      /* extra space */
+#define _ACPI_BB     0x00      /* BEL, BS, etc. - not supported */
+#define _ACPI_CN     0x20      /* CR, FF, HT, NL, VT */
+#define _ACPI_DI     0x04      /* '0'-'9' */
+#define _ACPI_LO     0x02      /* 'a'-'z' */
+#define _ACPI_PU     0x10      /* punctuation */
+#define _ACPI_SP     0x08      /* space */
+#define _ACPI_UP     0x01      /* 'A'-'Z' */
+#define _ACPI_XD     0x80      /* '0'-'9', 'A'-'F', 'a'-'f' */
 
 #define ACPI_IS_DIGIT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_DI))
 #define ACPI_IS_SPACE(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_SP))
@@ -242,502 +161,323 @@ extern const u8 _acpi_ctype[];
 #define ACPI_IS_ALPHA(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP))
 #define ACPI_IS_ASCII(c)  ((c) < 0x80)
 
-#endif /* ACPI_USE_SYSTEM_CLIBRARY */
-
+#endif                         /* ACPI_USE_SYSTEM_CLIBRARY */
 
 /*
  * utcopy - Object construction and conversion interfaces
  */
 acpi_status
-acpi_ut_build_simple_object(
-       union acpi_operand_object       *obj,
-       union acpi_object               *user_obj,
-       u8                              *data_space,
-       u32                             *buffer_space_used);
+acpi_ut_build_simple_object(union acpi_operand_object *obj,
+                           union acpi_object *user_obj,
+                           u8 * data_space, u32 * buffer_space_used);
 
 acpi_status
-acpi_ut_build_package_object (
-       union acpi_operand_object       *obj,
-       u8                              *buffer,
-       u32                             *space_used);
+acpi_ut_build_package_object(union acpi_operand_object *obj,
+                            u8 * buffer, u32 * space_used);
 
 acpi_status
-acpi_ut_copy_iobject_to_eobject (
-       union acpi_operand_object       *obj,
-       struct acpi_buffer              *ret_buffer);
+acpi_ut_copy_iobject_to_eobject(union acpi_operand_object *obj,
+                               struct acpi_buffer *ret_buffer);
 
 acpi_status
-acpi_ut_copy_eobject_to_iobject (
-       union acpi_object               *obj,
-       union acpi_operand_object       **internal_obj);
+acpi_ut_copy_eobject_to_iobject(union acpi_object *obj,
+                               union acpi_operand_object **internal_obj);
 
 acpi_status
-acpi_ut_copy_isimple_to_isimple (
-       union acpi_operand_object       *source_obj,
-       union acpi_operand_object       *dest_obj);
+acpi_ut_copy_isimple_to_isimple(union acpi_operand_object *source_obj,
+                               union acpi_operand_object *dest_obj);
 
 acpi_status
-acpi_ut_copy_iobject_to_iobject (
-       union acpi_operand_object       *source_desc,
-       union acpi_operand_object       **dest_desc,
-       struct acpi_walk_state          *walk_state);
-
+acpi_ut_copy_iobject_to_iobject(union acpi_operand_object *source_desc,
+                               union acpi_operand_object **dest_desc,
+                               struct acpi_walk_state *walk_state);
 
 /*
  * utcreate - Object creation
  */
 acpi_status
-acpi_ut_update_object_reference (
-       union acpi_operand_object       *object,
-       u16                             action);
-
+acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action);
 
 /*
  * utdebug - Debug interfaces
  */
-void
-acpi_ut_init_stack_ptr_trace (
-       void);
+void acpi_ut_init_stack_ptr_trace(void);
 
-void
-acpi_ut_track_stack_ptr (
-       void);
+void acpi_ut_track_stack_ptr(void);
 
 void
-acpi_ut_trace (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info);
+acpi_ut_trace(u32 line_number,
+             const char *function_name, char *module_name, u32 component_id);
 
 void
-acpi_ut_trace_ptr (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       void                            *pointer);
+acpi_ut_trace_ptr(u32 line_number,
+                 const char *function_name,
+                 char *module_name, u32 component_id, void *pointer);
 
 void
-acpi_ut_trace_u32 (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       u32                             integer);
+acpi_ut_trace_u32(u32 line_number,
+                 const char *function_name,
+                 char *module_name, u32 component_id, u32 integer);
 
 void
-acpi_ut_trace_str (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       char                            *string);
+acpi_ut_trace_str(u32 line_number,
+                 const char *function_name,
+                 char *module_name, u32 component_id, char *string);
 
 void
-acpi_ut_exit (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info);
+acpi_ut_exit(u32 line_number,
+            const char *function_name, char *module_name, u32 component_id);
 
 void
-acpi_ut_status_exit (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       acpi_status                     status);
+acpi_ut_status_exit(u32 line_number,
+                   const char *function_name,
+                   char *module_name, u32 component_id, acpi_status status);
 
 void
-acpi_ut_value_exit (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       acpi_integer                    value);
+acpi_ut_value_exit(u32 line_number,
+                  const char *function_name,
+                  char *module_name, u32 component_id, acpi_integer value);
 
 void
-acpi_ut_ptr_exit (
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       u8                              *ptr);
+acpi_ut_ptr_exit(u32 line_number,
+                const char *function_name,
+                char *module_name, u32 component_id, u8 * ptr);
 
-void
-acpi_ut_report_info (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id);
+void acpi_ut_report_info(char *module_name, u32 line_number, u32 component_id);
 
-void
-acpi_ut_report_error (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id);
+void acpi_ut_report_error(char *module_name, u32 line_number, u32 component_id);
 
 void
-acpi_ut_report_warning (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id);
+acpi_ut_report_warning(char *module_name, u32 line_number, u32 component_id);
 
-void
-acpi_ut_dump_buffer (
-       u8                              *buffer,
-       u32                             count,
-       u32                             display,
-       u32                             component_id);
+void acpi_ut_dump_buffer(u8 * buffer, u32 count, u32 display, u32 component_id);
 
 void ACPI_INTERNAL_VAR_XFACE
-acpi_ut_debug_print (
-       u32                             requested_debug_level,
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       char                            *format,
-       ...) ACPI_PRINTF_LIKE_FUNC;
+acpi_ut_debug_print(u32 requested_debug_level,
+                   u32 line_number,
+                   const char *function_name,
+                   char *module_name,
+                   u32 component_id, char *format, ...) ACPI_PRINTF_LIKE_FUNC;
 
 void ACPI_INTERNAL_VAR_XFACE
-acpi_ut_debug_print_raw (
-       u32                             requested_debug_level,
-       u32                             line_number,
-       struct acpi_debug_print_info    *dbg_info,
-       char                            *format,
-       ...) ACPI_PRINTF_LIKE_FUNC;
-
+acpi_ut_debug_print_raw(u32 requested_debug_level,
+                       u32 line_number,
+                       const char *function_name,
+                       char *module_name,
+                       u32 component_id,
+                       char *format, ...) ACPI_PRINTF_LIKE_FUNC;
 
 /*
  * utdelete - Object deletion and reference counts
  */
-void
-acpi_ut_add_reference (
-       union acpi_operand_object       *object);
+void acpi_ut_add_reference(union acpi_operand_object *object);
 
-void
-acpi_ut_remove_reference (
-       union acpi_operand_object       *object);
+void acpi_ut_remove_reference(union acpi_operand_object *object);
 
-void
-acpi_ut_delete_internal_package_object (
-       union acpi_operand_object       *object);
+void acpi_ut_delete_internal_package_object(union acpi_operand_object *object);
 
-void
-acpi_ut_delete_internal_simple_object (
-       union acpi_operand_object       *object);
-
-void
-acpi_ut_delete_internal_object_list (
-       union acpi_operand_object       **obj_list);
+void acpi_ut_delete_internal_simple_object(union acpi_operand_object *object);
 
+void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list);
 
 /*
  * uteval - object evaluation
  */
-acpi_status
-acpi_ut_osi_implementation (
-       struct acpi_walk_state          *walk_state);
+acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state);
 
 acpi_status
-acpi_ut_evaluate_object (
-       struct acpi_namespace_node      *prefix_node,
-       char                            *path,
-       u32                             expected_return_btypes,
-       union acpi_operand_object       **return_desc);
+acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
+                       char *path,
+                       u32 expected_return_btypes,
+                       union acpi_operand_object **return_desc);
 
 acpi_status
-acpi_ut_evaluate_numeric_object (
-       char                            *object_name,
-       struct acpi_namespace_node      *device_node,
-       acpi_integer                    *address);
+acpi_ut_evaluate_numeric_object(char *object_name,
+                               struct acpi_namespace_node *device_node,
+                               acpi_integer * address);
 
 acpi_status
-acpi_ut_execute_HID (
-       struct acpi_namespace_node      *device_node,
-       struct acpi_device_id           *hid);
+acpi_ut_execute_HID(struct acpi_namespace_node *device_node,
+                   struct acpi_device_id *hid);
 
 acpi_status
-acpi_ut_execute_CID (
-       struct acpi_namespace_node      *device_node,
-       struct acpi_compatible_id_list **return_cid_list);
+acpi_ut_execute_CID(struct acpi_namespace_node *device_node,
+                   struct acpi_compatible_id_list **return_cid_list);
 
 acpi_status
-acpi_ut_execute_STA (
-       struct acpi_namespace_node      *device_node,
-       u32                             *status_flags);
+acpi_ut_execute_STA(struct acpi_namespace_node *device_node,
+                   u32 * status_flags);
 
 acpi_status
-acpi_ut_execute_UID (
-       struct acpi_namespace_node      *device_node,
-       struct acpi_device_id           *uid);
+acpi_ut_execute_UID(struct acpi_namespace_node *device_node,
+                   struct acpi_device_id *uid);
 
 acpi_status
-acpi_ut_execute_sxds (
-       struct acpi_namespace_node      *device_node,
-       u8                              *highest);
-
+acpi_ut_execute_sxds(struct acpi_namespace_node *device_node, u8 * highest);
 
 /*
  * utobject - internal object create/delete/cache routines
  */
-union acpi_operand_object    *
-acpi_ut_create_internal_object_dbg (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id,
-       acpi_object_type                type);
-
-void *
-acpi_ut_allocate_object_desc_dbg (
-       char                            *module_name,
-       u32                             line_number,
-       u32                             component_id);
-
-#define acpi_ut_create_internal_object(t) acpi_ut_create_internal_object_dbg (_THIS_MODULE,__LINE__,_COMPONENT,t)
-#define acpi_ut_allocate_object_desc()  acpi_ut_allocate_object_desc_dbg (_THIS_MODULE,__LINE__,_COMPONENT)
+union acpi_operand_object *acpi_ut_create_internal_object_dbg(char *module_name,
+                                                             u32 line_number,
+                                                             u32 component_id,
+                                                             acpi_object_type
+                                                             type);
 
-void
-acpi_ut_delete_object_desc (
-       union acpi_operand_object       *object);
+void *acpi_ut_allocate_object_desc_dbg(char *module_name,
+                                      u32 line_number, u32 component_id);
 
-u8
-acpi_ut_valid_internal_object (
-       void                            *object);
+#define acpi_ut_create_internal_object(t) acpi_ut_create_internal_object_dbg (_acpi_module_name,__LINE__,_COMPONENT,t)
+#define acpi_ut_allocate_object_desc()  acpi_ut_allocate_object_desc_dbg (_acpi_module_name,__LINE__,_COMPONENT)
 
-union acpi_operand_object *
-acpi_ut_create_buffer_object (
-       acpi_size                       buffer_size);
+void acpi_ut_delete_object_desc(union acpi_operand_object *object);
 
-union acpi_operand_object *
-acpi_ut_create_string_object (
-       acpi_size                       string_size);
+u8 acpi_ut_valid_internal_object(void *object);
 
-acpi_status
-acpi_ut_get_object_size(
-       union acpi_operand_object       *obj,
-       acpi_size                       *obj_length);
+union acpi_operand_object *acpi_ut_create_buffer_object(acpi_size buffer_size);
 
+union acpi_operand_object *acpi_ut_create_string_object(acpi_size string_size);
+
+acpi_status
+acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size * obj_length);
 
 /*
  * utstate - Generic state creation/cache routines
  */
 void
-acpi_ut_push_generic_state (
-       union acpi_generic_state        **list_head,
-       union acpi_generic_state        *state);
+acpi_ut_push_generic_state(union acpi_generic_state **list_head,
+                          union acpi_generic_state *state);
 
-union acpi_generic_state *
-acpi_ut_pop_generic_state (
-       union acpi_generic_state        **list_head);
+union acpi_generic_state *acpi_ut_pop_generic_state(union acpi_generic_state
+                                                   **list_head);
 
+union acpi_generic_state *acpi_ut_create_generic_state(void);
 
-union acpi_generic_state *
-acpi_ut_create_generic_state (
-       void);
+struct acpi_thread_state *acpi_ut_create_thread_state(void);
 
-struct acpi_thread_state *
-acpi_ut_create_thread_state (
-       void);
+union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_object
+                                                     *object, u16 action);
 
-union acpi_generic_state *
-acpi_ut_create_update_state (
-       union acpi_operand_object       *object,
-       u16                             action);
-
-union acpi_generic_state *
-acpi_ut_create_pkg_state (
-       void                            *internal_object,
-       void                            *external_object,
-       u16                             index);
+union acpi_generic_state *acpi_ut_create_pkg_state(void *internal_object,
+                                                  void *external_object,
+                                                  u16 index);
 
 acpi_status
-acpi_ut_create_update_state_and_push (
-       union acpi_operand_object       *object,
-       u16                             action,
-       union acpi_generic_state        **state_list);
+acpi_ut_create_update_state_and_push(union acpi_operand_object *object,
+                                    u16 action,
+                                    union acpi_generic_state **state_list);
 
 #ifdef ACPI_FUTURE_USAGE
 acpi_status
-acpi_ut_create_pkg_state_and_push (
-       void                            *internal_object,
-       void                            *external_object,
-       u16                             index,
-       union acpi_generic_state        **state_list);
-#endif /* ACPI_FUTURE_USAGE */
+acpi_ut_create_pkg_state_and_push(void *internal_object,
+                                 void *external_object,
+                                 u16 index,
+                                 union acpi_generic_state **state_list);
+#endif                         /* ACPI_FUTURE_USAGE */
 
-union acpi_generic_state *
-acpi_ut_create_control_state (
-       void);
-
-void
-acpi_ut_delete_generic_state (
-       union acpi_generic_state        *state);
-
-#ifdef ACPI_ENABLE_OBJECT_CACHE
-void
-acpi_ut_delete_generic_state_cache (
-       void);
-
-void
-acpi_ut_delete_object_cache (
-       void);
-#endif
+union acpi_generic_state *acpi_ut_create_control_state(void);
 
+void acpi_ut_delete_generic_state(union acpi_generic_state *state);
 
 /*
  * utmath
  */
 acpi_status
-acpi_ut_divide (
-       acpi_integer                    in_dividend,
-       acpi_integer                    in_divisor,
-       acpi_integer                    *out_quotient,
-       acpi_integer                    *out_remainder);
+acpi_ut_divide(acpi_integer in_dividend,
+              acpi_integer in_divisor,
+              acpi_integer * out_quotient, acpi_integer * out_remainder);
 
 acpi_status
-acpi_ut_short_divide (
-       acpi_integer                    in_dividend,
-       u32                             divisor,
-       acpi_integer                    *out_quotient,
-       u32                             *out_remainder);
+acpi_ut_short_divide(acpi_integer in_dividend,
+                    u32 divisor,
+                    acpi_integer * out_quotient, u32 * out_remainder);
 
 /*
  * utmisc
  */
+acpi_status acpi_ut_allocate_owner_id(acpi_owner_id * owner_id);
+
+void acpi_ut_release_owner_id(acpi_owner_id * owner_id);
+
 acpi_status
-acpi_ut_walk_package_tree (
-       union acpi_operand_object       *source_object,
-       void                            *target_object,
-       acpi_pkg_callback               walk_callback,
-       void                            *context);
+acpi_ut_walk_package_tree(union acpi_operand_object *source_object,
+                         void *target_object,
+                         acpi_pkg_callback walk_callback, void *context);
 
-char *
-acpi_ut_strupr (
-       char                            *src_string);
+void acpi_ut_strupr(char *src_string);
 
-void
-acpi_ut_print_string (
-       char                            *string,
-       u8                              max_length);
+void acpi_ut_print_string(char *string, u8 max_length);
 
-u8
-acpi_ut_valid_acpi_name (
-       u32                             name);
+u8 acpi_ut_valid_acpi_name(u32 name);
 
-u8
-acpi_ut_valid_acpi_character (
-       char                            character);
+u8 acpi_ut_valid_acpi_character(char character);
 
 acpi_status
-acpi_ut_strtoul64 (
-       char                            *string,
-       u32                             base,
-       acpi_integer                    *ret_integer);
+acpi_ut_strtoul64(char *string, u32 base, acpi_integer * ret_integer);
 
 /* Values for Base above (16=Hex, 10=Decimal) */
 
 #define ACPI_ANY_BASE        0
 
-acpi_status
-acpi_ut_mutex_initialize (
-       void);
-
-void
-acpi_ut_mutex_terminate (
-       void);
-
-acpi_status
-acpi_ut_acquire_mutex (
-       acpi_mutex_handle               mutex_id);
-
-acpi_status
-acpi_ut_release_mutex (
-       acpi_mutex_handle               mutex_id);
-
-u8 *
-acpi_ut_get_resource_end_tag (
-       union acpi_operand_object       *obj_desc);
+u8 *acpi_ut_get_resource_end_tag(union acpi_operand_object *obj_desc);
 
-u8
-acpi_ut_generate_checksum (
-       u8                              *buffer,
-       u32                             length);
+u8 acpi_ut_generate_checksum(u8 * buffer, u32 length);
 
-u32
-acpi_ut_dword_byte_swap (
-       u32                             value);
+u32 acpi_ut_dword_byte_swap(u32 value);
 
-void
-acpi_ut_set_integer_width (
-       u8                              revision);
+void acpi_ut_set_integer_width(u8 revision);
 
 #ifdef ACPI_DEBUG_OUTPUT
 void
-acpi_ut_display_init_pathname (
-       u8                              type,
-       struct acpi_namespace_node      *obj_handle,
-       char                            *path);
+acpi_ut_display_init_pathname(u8 type,
+                             struct acpi_namespace_node *obj_handle,
+                             char *path);
 
 #endif
 
+/*
+ * utmutex - mutex support
+ */
+acpi_status acpi_ut_mutex_initialize(void);
+
+void acpi_ut_mutex_terminate(void);
+
+acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id);
+
+acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id);
 
 /*
  * utalloc - memory allocation and object caching
  */
-void *
-acpi_ut_acquire_from_cache (
-       u32                             list_id);
+acpi_status acpi_ut_create_caches(void);
 
-void
-acpi_ut_release_to_cache (
-       u32                             list_id,
-       void                            *object);
+acpi_status acpi_ut_delete_caches(void);
 
-#ifdef ACPI_ENABLE_OBJECT_CACHE
-void
-acpi_ut_delete_generic_cache (
-       u32                             list_id);
-#endif
+acpi_status acpi_ut_validate_buffer(struct acpi_buffer *buffer);
 
 acpi_status
-acpi_ut_validate_buffer (
-       struct acpi_buffer              *buffer);
+acpi_ut_initialize_buffer(struct acpi_buffer *buffer,
+                         acpi_size required_length);
 
-acpi_status
-acpi_ut_initialize_buffer (
-       struct acpi_buffer              *buffer,
-       acpi_size                       required_length);
-
-void *
-acpi_ut_allocate (
-       acpi_size                       size,
-       u32                             component,
-       char                            *module,
-       u32                             line);
-
-void *
-acpi_ut_callocate (
-       acpi_size                       size,
-       u32                             component,
-       char                            *module,
-       u32                             line);
+void *acpi_ut_allocate(acpi_size size, u32 component, char *module, u32 line);
+
+void *acpi_ut_callocate(acpi_size size, u32 component, char *module, u32 line);
 
 #ifdef ACPI_DBG_TRACK_ALLOCATIONS
-void *
-acpi_ut_allocate_and_track (
-       acpi_size                       size,
-       u32                             component,
-       char                            *module,
-       u32                             line);
-
-void *
-acpi_ut_callocate_and_track (
-       acpi_size                       size,
-       u32                             component,
-       char                            *module,
-       u32                             line);
+void *acpi_ut_allocate_and_track(acpi_size size,
+                                u32 component, char *module, u32 line);
+
+void *acpi_ut_callocate_and_track(acpi_size size,
+                                 u32 component, char *module, u32 line);
 
 void
-acpi_ut_free_and_track (
-       void                            *address,
-       u32                             component,
-       char                            *module,
-       u32                             line);
+acpi_ut_free_and_track(void *address, u32 component, char *module, u32 line);
 
 #ifdef ACPI_FUTURE_USAGE
-void
-acpi_ut_dump_allocation_info (
-       void);
-#endif /* ACPI_FUTURE_USAGE */
+void acpi_ut_dump_allocation_info(void);
+#endif                         /* ACPI_FUTURE_USAGE */
 
-void
-acpi_ut_dump_allocations (
-       u32                             component,
-       char                            *module);
+void acpi_ut_dump_allocations(u32 component, char *module);
 #endif
 
-#endif /* _ACUTILS_H */
+#endif                         /* _ACUTILS_H */
index 55e97ed29190642635e0434a6c321d8d83d3671f..7fdf5299f501104ce305de61d94da85c4135552e 100644 (file)
 #define AML_WORD_OP                 (u16) 0x0b
 #define AML_DWORD_OP                (u16) 0x0c
 #define AML_STRING_OP               (u16) 0x0d
-#define AML_QWORD_OP                (u16) 0x0e     /* ACPI 2.0 */
+#define AML_QWORD_OP                (u16) 0x0e /* ACPI 2.0 */
 #define AML_SCOPE_OP                (u16) 0x10
 #define AML_BUFFER_OP               (u16) 0x11
 #define AML_PACKAGE_OP              (u16) 0x12
-#define AML_VAR_PACKAGE_OP          (u16) 0x13     /* ACPI 2.0 */
+#define AML_VAR_PACKAGE_OP          (u16) 0x13 /* ACPI 2.0 */
 #define AML_METHOD_OP               (u16) 0x14
 #define AML_DUAL_NAME_PREFIX        (u16) 0x2e
 #define AML_MULTI_NAME_PREFIX_OP    (u16) 0x2f
 #define AML_NAME_CHAR_SUBSEQ        (u16) 0x30
 #define AML_NAME_CHAR_FIRST         (u16) 0x41
-#define AML_OP_PREFIX               (u16) 0x5b
+#define AML_EXTENDED_OP_PREFIX      (u16) 0x5b
 #define AML_ROOT_PREFIX             (u16) 0x5c
 #define AML_PARENT_PREFIX           (u16) 0x5e
 #define AML_LOCAL_OP                (u16) 0x60
 #define AML_FIND_SET_LEFT_BIT_OP    (u16) 0x81
 #define AML_FIND_SET_RIGHT_BIT_OP   (u16) 0x82
 #define AML_DEREF_OF_OP             (u16) 0x83
-#define AML_CONCAT_RES_OP           (u16) 0x84     /* ACPI 2.0 */
-#define AML_MOD_OP                  (u16) 0x85     /* ACPI 2.0 */
+#define AML_CONCAT_RES_OP           (u16) 0x84 /* ACPI 2.0 */
+#define AML_MOD_OP                  (u16) 0x85 /* ACPI 2.0 */
 #define AML_NOTIFY_OP               (u16) 0x86
 #define AML_SIZE_OF_OP              (u16) 0x87
 #define AML_INDEX_OP                (u16) 0x88
 #define AML_CREATE_BYTE_FIELD_OP    (u16) 0x8c
 #define AML_CREATE_BIT_FIELD_OP     (u16) 0x8d
 #define AML_TYPE_OP                 (u16) 0x8e
-#define AML_CREATE_QWORD_FIELD_OP   (u16) 0x8f     /* ACPI 2.0 */
+#define AML_CREATE_QWORD_FIELD_OP   (u16) 0x8f /* ACPI 2.0 */
 #define AML_LAND_OP                 (u16) 0x90
 #define AML_LOR_OP                  (u16) 0x91
 #define AML_LNOT_OP                 (u16) 0x92
 #define AML_LEQUAL_OP               (u16) 0x93
 #define AML_LGREATER_OP             (u16) 0x94
 #define AML_LLESS_OP                (u16) 0x95
-#define AML_TO_BUFFER_OP            (u16) 0x96     /* ACPI 2.0 */
-#define AML_TO_DECSTRING_OP         (u16) 0x97     /* ACPI 2.0 */
-#define AML_TO_HEXSTRING_OP         (u16) 0x98     /* ACPI 2.0 */
-#define AML_TO_INTEGER_OP           (u16) 0x99     /* ACPI 2.0 */
-#define AML_TO_STRING_OP            (u16) 0x9c     /* ACPI 2.0 */
-#define AML_COPY_OP                 (u16) 0x9d     /* ACPI 2.0 */
-#define AML_MID_OP                  (u16) 0x9e     /* ACPI 2.0 */
-#define AML_CONTINUE_OP             (u16) 0x9f     /* ACPI 2.0 */
+#define AML_TO_BUFFER_OP            (u16) 0x96 /* ACPI 2.0 */
+#define AML_TO_DECSTRING_OP         (u16) 0x97 /* ACPI 2.0 */
+#define AML_TO_HEXSTRING_OP         (u16) 0x98 /* ACPI 2.0 */
+#define AML_TO_INTEGER_OP           (u16) 0x99 /* ACPI 2.0 */
+#define AML_TO_STRING_OP            (u16) 0x9c /* ACPI 2.0 */
+#define AML_COPY_OP                 (u16) 0x9d /* ACPI 2.0 */
+#define AML_MID_OP                  (u16) 0x9e /* ACPI 2.0 */
+#define AML_CONTINUE_OP             (u16) 0x9f /* ACPI 2.0 */
 #define AML_IF_OP                   (u16) 0xa0
 #define AML_ELSE_OP                 (u16) 0xa1
 #define AML_WHILE_OP                (u16) 0xa2
 
 /* prefixed opcodes */
 
-#define AML_EXTOP                   (u16) 0x005b     /* prefix for 2-byte opcodes */
+#define AML_EXTENDED_OPCODE         (u16) 0x5b00       /* prefix for 2-byte opcodes */
 
 #define AML_MUTEX_OP                (u16) 0x5b01
 #define AML_EVENT_OP                (u16) 0x5b02
 #define AML_SHIFT_LEFT_BIT_OP       (u16) 0x5b11
 #define AML_COND_REF_OF_OP          (u16) 0x5b12
 #define AML_CREATE_FIELD_OP         (u16) 0x5b13
-#define AML_LOAD_TABLE_OP           (u16) 0x5b1f     /* ACPI 2.0 */
+#define AML_LOAD_TABLE_OP           (u16) 0x5b1f       /* ACPI 2.0 */
 #define AML_LOAD_OP                 (u16) 0x5b20
 #define AML_STALL_OP                (u16) 0x5b21
 #define AML_SLEEP_OP                (u16) 0x5b22
 #define AML_REVISION_OP             (u16) 0x5b30
 #define AML_DEBUG_OP                (u16) 0x5b31
 #define AML_FATAL_OP                (u16) 0x5b32
-#define AML_TIMER_OP                (u16) 0x5b33     /* ACPI 3.0 */
+#define AML_TIMER_OP                (u16) 0x5b33       /* ACPI 3.0 */
 #define AML_REGION_OP               (u16) 0x5b80
 #define AML_FIELD_OP                (u16) 0x5b81
 #define AML_DEVICE_OP               (u16) 0x5b82
 #define AML_THERMAL_ZONE_OP         (u16) 0x5b85
 #define AML_INDEX_FIELD_OP          (u16) 0x5b86
 #define AML_BANK_FIELD_OP           (u16) 0x5b87
-#define AML_DATA_REGION_OP          (u16) 0x5b88     /* ACPI 2.0 */
-
+#define AML_DATA_REGION_OP          (u16) 0x5b88       /* ACPI 2.0 */
 
 /* Bogus opcodes (they are actually two separate opcodes) */
 
 #define AML_LLESSEQUAL_OP           (u16) 0x9294
 #define AML_LNOTEQUAL_OP            (u16) 0x9293
 
-
 /*
  * Internal opcodes
  * Use only "Unknown" AML opcodes, don't attempt to use
 #define AML_INT_RETURN_VALUE_OP     (u16) 0x0036
 #define AML_INT_EVAL_SUBTREE_OP     (u16) 0x0037
 
-
 #define ARG_NONE                    0x0
 
 /*
 
 /* Single, simple types */
 
-#define ARGI_ANYTYPE                0x01    /* Don't care */
+#define ARGI_ANYTYPE                0x01       /* Don't care */
 #define ARGI_PACKAGE                0x02
 #define ARGI_EVENT                  0x03
 #define ARGI_MUTEX                  0x04
 #define ARGI_INTEGER                0x06
 #define ARGI_STRING                 0x07
 #define ARGI_BUFFER                 0x08
-#define ARGI_BUFFER_OR_STRING       0x09    /* Used by MID op only */
-#define ARGI_COMPUTEDATA            0x0A    /* Buffer, String, or Integer */
+#define ARGI_BUFFER_OR_STRING       0x09       /* Used by MID op only */
+#define ARGI_COMPUTEDATA            0x0A       /* Buffer, String, or Integer */
 
 /* Reference objects */
 
 #define ARGI_OBJECT_REF             0x0C
 #define ARGI_DEVICE_REF             0x0D
 #define ARGI_REFERENCE              0x0E
-#define ARGI_TARGETREF              0x0F    /* Target, subject to implicit conversion */
-#define ARGI_FIXED_TARGET           0x10    /* Target, no implicit conversion */
-#define ARGI_SIMPLE_TARGET          0x11    /* Name, Local, Arg -- no implicit conversion */
+#define ARGI_TARGETREF              0x0F       /* Target, subject to implicit conversion */
+#define ARGI_FIXED_TARGET           0x10       /* Target, no implicit conversion */
+#define ARGI_SIMPLE_TARGET          0x11       /* Name, Local, Arg -- no implicit conversion */
 
 /* Multiple/complex types */
 
-#define ARGI_DATAOBJECT             0x12    /* Buffer, String, package or reference to a Node - Used only by size_of operator*/
-#define ARGI_COMPLEXOBJ             0x13    /* Buffer, String, or package (Used by INDEX op only) */
-#define ARGI_REF_OR_STRING          0x14    /* Reference or String (Used by DEREFOF op only) */
-#define ARGI_REGION_OR_FIELD        0x15    /* Used by LOAD op only */
+#define ARGI_DATAOBJECT             0x12       /* Buffer, String, package or reference to a Node - Used only by size_of operator */
+#define ARGI_COMPLEXOBJ             0x13       /* Buffer, String, or package (Used by INDEX op only) */
+#define ARGI_REF_OR_STRING          0x14       /* Reference or String (Used by DEREFOF op only) */
+#define ARGI_REGION_OR_FIELD        0x15       /* Used by LOAD op only */
 #define ARGI_DATAREFOBJ             0x16
 
 /* Note: types above can expand to 0x1F maximum */
 
 #define ARGI_INVALID_OPCODE         0xFFFFFFFF
 
-
 /*
  * hash offsets
  */
 #define AML_EXTOP_HASH_OFFSET       22
 #define AML_LNOT_HASH_OFFSET        19
 
-
 /*
  * opcode groups and types
  */
 #define OPGRP_FIELD                 0x02
 #define OPGRP_BYTELIST              0x04
 
-
 /*
  * Opcode information
  */
 /* Convenient flag groupings */
 
 #define AML_FLAGS_EXEC_0A_0T_1R                                     AML_HAS_RETVAL
-#define AML_FLAGS_EXEC_1A_0T_0R     AML_HAS_ARGS                                   /* Monadic1  */
-#define AML_FLAGS_EXEC_1A_0T_1R     AML_HAS_ARGS |                  AML_HAS_RETVAL /* Monadic2  */
+#define AML_FLAGS_EXEC_1A_0T_0R     AML_HAS_ARGS       /* Monadic1  */
+#define AML_FLAGS_EXEC_1A_0T_1R     AML_HAS_ARGS |                  AML_HAS_RETVAL     /* Monadic2  */
 #define AML_FLAGS_EXEC_1A_1T_0R     AML_HAS_ARGS | AML_HAS_TARGET
-#define AML_FLAGS_EXEC_1A_1T_1R     AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* monadic2_r */
-#define AML_FLAGS_EXEC_2A_0T_0R     AML_HAS_ARGS                                   /* Dyadic1   */
-#define AML_FLAGS_EXEC_2A_0T_1R     AML_HAS_ARGS |                  AML_HAS_RETVAL /* Dyadic2   */
-#define AML_FLAGS_EXEC_2A_1T_1R     AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL /* dyadic2_r  */
+#define AML_FLAGS_EXEC_1A_1T_1R     AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL     /* monadic2_r */
+#define AML_FLAGS_EXEC_2A_0T_0R     AML_HAS_ARGS       /* Dyadic1   */
+#define AML_FLAGS_EXEC_2A_0T_1R     AML_HAS_ARGS |                  AML_HAS_RETVAL     /* Dyadic2   */
+#define AML_FLAGS_EXEC_2A_1T_1R     AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL     /* dyadic2_r  */
 #define AML_FLAGS_EXEC_2A_2T_1R     AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL
 #define AML_FLAGS_EXEC_3A_0T_0R     AML_HAS_ARGS
 #define AML_FLAGS_EXEC_3A_1T_1R     AML_HAS_ARGS | AML_HAS_TARGET | AML_HAS_RETVAL
 #define AML_FLAGS_EXEC_6A_0T_1R     AML_HAS_ARGS |                  AML_HAS_RETVAL
 
-
 /*
  * The opcode Type is used in a dispatch table, do not change
  * without updating the table.
  */
 #define AML_TYPE_EXEC_0A_0T_1R      0x00
-#define AML_TYPE_EXEC_1A_0T_0R      0x01 /* Monadic1  */
-#define AML_TYPE_EXEC_1A_0T_1R      0x02 /* Monadic2  */
+#define AML_TYPE_EXEC_1A_0T_0R      0x01       /* Monadic1  */
+#define AML_TYPE_EXEC_1A_0T_1R      0x02       /* Monadic2  */
 #define AML_TYPE_EXEC_1A_1T_0R      0x03
-#define AML_TYPE_EXEC_1A_1T_1R      0x04 /* monadic2_r */
-#define AML_TYPE_EXEC_2A_0T_0R      0x05 /* Dyadic1   */
-#define AML_TYPE_EXEC_2A_0T_1R      0x06 /* Dyadic2   */
-#define AML_TYPE_EXEC_2A_1T_1R      0x07 /* dyadic2_r  */
+#define AML_TYPE_EXEC_1A_1T_1R      0x04       /* monadic2_r */
+#define AML_TYPE_EXEC_2A_0T_0R      0x05       /* Dyadic1   */
+#define AML_TYPE_EXEC_2A_0T_1R      0x06       /* Dyadic2   */
+#define AML_TYPE_EXEC_2A_1T_1R      0x07       /* dyadic2_r  */
 #define AML_TYPE_EXEC_2A_2T_1R      0x08
 #define AML_TYPE_EXEC_3A_0T_0R      0x09
 #define AML_TYPE_EXEC_3A_1T_1R      0x0A
 #define AML_CLASS_METHOD_CALL       0x09
 #define AML_CLASS_UNKNOWN           0x0A
 
-
 /* Predefined Operation Region space_iDs */
 
-typedef enum
-{
-       REGION_MEMORY                   = 0,
+typedef enum {
+       REGION_MEMORY = 0,
        REGION_IO,
        REGION_PCI_CONFIG,
        REGION_EC,
        REGION_SMBUS,
        REGION_CMOS,
        REGION_PCI_BAR,
-       REGION_DATA_TABLE,              /* Internal use only */
-       REGION_FIXED_HW                 = 0x7F
-
+       REGION_DATA_TABLE,      /* Internal use only */
+       REGION_FIXED_HW = 0x7F
 } AML_REGION_TYPES;
 
-
 /* Comparison operation codes for match_op operator */
 
-typedef enum
-{
-       MATCH_MTR                       = 0,
-       MATCH_MEQ                       = 1,
-       MATCH_MLE                       = 2,
-       MATCH_MLT                       = 3,
-       MATCH_MGE                       = 4,
-       MATCH_MGT                       = 5
-
+typedef enum {
+       MATCH_MTR = 0,
+       MATCH_MEQ = 1,
+       MATCH_MLE = 2,
+       MATCH_MLT = 3,
+       MATCH_MGE = 4,
+       MATCH_MGT = 5
 } AML_MATCH_OPERATOR;
 
 #define MAX_MATCH_OPERATOR          5
 
-
 /*
  * field_flags
  *
@@ -450,60 +436,47 @@ typedef enum
 #define AML_FIELD_LOCK_RULE_MASK    0x10
 #define AML_FIELD_UPDATE_RULE_MASK  0x60
 
-
 /* 1) Field Access Types */
 
-typedef enum
-{
-       AML_FIELD_ACCESS_ANY            = 0x00,
-       AML_FIELD_ACCESS_BYTE           = 0x01,
-       AML_FIELD_ACCESS_WORD           = 0x02,
-       AML_FIELD_ACCESS_DWORD          = 0x03,
-       AML_FIELD_ACCESS_QWORD          = 0x04,    /* ACPI 2.0 */
-       AML_FIELD_ACCESS_BUFFER         = 0x05     /* ACPI 2.0 */
-
+typedef enum {
+       AML_FIELD_ACCESS_ANY = 0x00,
+       AML_FIELD_ACCESS_BYTE = 0x01,
+       AML_FIELD_ACCESS_WORD = 0x02,
+       AML_FIELD_ACCESS_DWORD = 0x03,
+       AML_FIELD_ACCESS_QWORD = 0x04,  /* ACPI 2.0 */
+       AML_FIELD_ACCESS_BUFFER = 0x05  /* ACPI 2.0 */
 } AML_ACCESS_TYPE;
 
-
 /* 2) Field Lock Rules */
 
-typedef enum
-{
-       AML_FIELD_LOCK_NEVER            = 0x00,
-       AML_FIELD_LOCK_ALWAYS           = 0x10
-
+typedef enum {
+       AML_FIELD_LOCK_NEVER = 0x00,
+       AML_FIELD_LOCK_ALWAYS = 0x10
 } AML_LOCK_RULE;
 
-
 /* 3) Field Update Rules */
 
-typedef enum
-{
-       AML_FIELD_UPDATE_PRESERVE       = 0x00,
-       AML_FIELD_UPDATE_WRITE_AS_ONES  = 0x20,
+typedef enum {
+       AML_FIELD_UPDATE_PRESERVE = 0x00,
+       AML_FIELD_UPDATE_WRITE_AS_ONES = 0x20,
        AML_FIELD_UPDATE_WRITE_AS_ZEROS = 0x40
-
 } AML_UPDATE_RULE;
 
-
 /*
  * Field Access Attributes.
  * This byte is extracted from the AML via the
  * access_as keyword
  */
-typedef enum
-{
-       AML_FIELD_ATTRIB_SMB_QUICK      = 0x02,
-       AML_FIELD_ATTRIB_SMB_SEND_RCV   = 0x04,
-       AML_FIELD_ATTRIB_SMB_BYTE       = 0x06,
-       AML_FIELD_ATTRIB_SMB_WORD       = 0x08,
-       AML_FIELD_ATTRIB_SMB_BLOCK      = 0x0A,
-       AML_FIELD_ATTRIB_SMB_WORD_CALL  = 0x0C,
+typedef enum {
+       AML_FIELD_ATTRIB_SMB_QUICK = 0x02,
+       AML_FIELD_ATTRIB_SMB_SEND_RCV = 0x04,
+       AML_FIELD_ATTRIB_SMB_BYTE = 0x06,
+       AML_FIELD_ATTRIB_SMB_WORD = 0x08,
+       AML_FIELD_ATTRIB_SMB_BLOCK = 0x0A,
+       AML_FIELD_ATTRIB_SMB_WORD_CALL = 0x0C,
        AML_FIELD_ATTRIB_SMB_BLOCK_CALL = 0x0D
-
 } AML_ACCESS_ATTRIBUTE;
 
-
 /* Bit fields in method_flags byte */
 
 #define AML_METHOD_ARG_COUNT        0x07
@@ -516,5 +489,4 @@ typedef enum
 #define AML_METHOD_RESERVED1        0x02
 #define AML_METHOD_RESERVED2        0x04
 
-
-#endif /* __AMLCODE_H__ */
+#endif                         /* __AMLCODE_H__ */
index b20ec303df074f669844653289ff5bd4a983f104..051786e4b210d9cc80d3dd8aa9da0c1d649bb3d5 100644 (file)
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #ifndef __AMLRESRC_H
 #define __AMLRESRC_H
 
-
 #define ASL_RESNAME_ADDRESS                     "_ADR"
 #define ASL_RESNAME_ALIGNMENT                   "_ALN"
 #define ASL_RESNAME_ADDRESSSPACE                "_ASI"
 #define ASL_RESNAME_ACCESSSIZE                  "_ASZ"
 #define ASL_RESNAME_TYPESPECIFICATTRIBUTES      "_ATT"
 #define ASL_RESNAME_BASEADDRESS                 "_BAS"
-#define ASL_RESNAME_BUSMASTER                   "_BM_"  /* Master(1), Slave(0) */
+#define ASL_RESNAME_BUSMASTER                   "_BM_" /* Master(1), Slave(0) */
 #define ASL_RESNAME_DECODE                      "_DEC"
 #define ASL_RESNAME_DMA                         "_DMA"
-#define ASL_RESNAME_DMATYPE                     "_TYP"  /* Compatible(0), A(1), B(2), F(3) */
+#define ASL_RESNAME_DMATYPE                     "_TYP" /* Compatible(0), A(1), B(2), F(3) */
 #define ASL_RESNAME_GRANULARITY                 "_GRA"
 #define ASL_RESNAME_INTERRUPT                   "_INT"
-#define ASL_RESNAME_INTERRUPTLEVEL              "_LL_"  /* active_lo(1), active_hi(0) */
-#define ASL_RESNAME_INTERRUPTSHARE              "_SHR"  /* Shareable(1), no_share(0) */
-#define ASL_RESNAME_INTERRUPTTYPE               "_HE_"  /* Edge(1), Level(0) */
+#define ASL_RESNAME_INTERRUPTLEVEL              "_LL_" /* active_lo(1), active_hi(0) */
+#define ASL_RESNAME_INTERRUPTSHARE              "_SHR" /* Shareable(1), no_share(0) */
+#define ASL_RESNAME_INTERRUPTTYPE               "_HE_" /* Edge(1), Level(0) */
 #define ASL_RESNAME_LENGTH                      "_LEN"
-#define ASL_RESNAME_MEMATTRIBUTES               "_MTP"  /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
-#define ASL_RESNAME_MEMTYPE                     "_MEM"  /* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
+#define ASL_RESNAME_MEMATTRIBUTES               "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
+#define ASL_RESNAME_MEMTYPE                     "_MEM" /* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
 #define ASL_RESNAME_MAXADDR                     "_MAX"
 #define ASL_RESNAME_MINADDR                     "_MIN"
 #define ASL_RESNAME_MAXTYPE                     "_MAF"
 #define ASL_RESNAME_REGISTERBITOFFSET           "_RBO"
 #define ASL_RESNAME_REGISTERBITWIDTH            "_RBW"
 #define ASL_RESNAME_RANGETYPE                   "_RNG"
-#define ASL_RESNAME_READWRITETYPE               "_RW_"  /* read_only(0), Writeable (1) */
+#define ASL_RESNAME_READWRITETYPE               "_RW_" /* read_only(0), Writeable (1) */
 #define ASL_RESNAME_TRANSLATION                 "_TRA"
-#define ASL_RESNAME_TRANSTYPE                   "_TRS"  /* Sparse(1), Dense(0) */
-#define ASL_RESNAME_TYPE                        "_TTP"  /* Translation(1), Static (0) */
-#define ASL_RESNAME_XFERTYPE                    "_SIz"  /* 8(0), 8_and16(1), 16(2) */
-
+#define ASL_RESNAME_TRANSTYPE                   "_TRS" /* Sparse(1), Dense(0) */
+#define ASL_RESNAME_TYPE                        "_TTP" /* Translation(1), Static (0) */
+#define ASL_RESNAME_XFERTYPE                    "_SIz" /* 8(0), 8_and16(1), 16(2) */
 
 /* Default sizes for "small" resource descriptors */
 
 #define ASL_RDESC_FIXED_IO_SIZE                 0x03
 #define ASL_RDESC_END_TAG_SIZE                  0x01
 
-
-struct asl_resource_node
-{
-       u32                                 buffer_length;
-       void                                *buffer;
-       struct asl_resource_node            *next;
+struct asl_resource_node {
+       u32 buffer_length;
+       void *buffer;
+       struct asl_resource_node *next;
 };
 
-
 /*
  * Resource descriptors defined in the ACPI specification.
  *
@@ -106,214 +100,175 @@ struct asl_resource_node
  */
 #pragma pack(1)
 
-struct asl_irq_format_desc
-{
-       u8                                  descriptor_type;
-       u16                                 irq_mask;
-       u8                                  flags;
+struct asl_irq_format_desc {
+       u8 descriptor_type;
+       u16 irq_mask;
+       u8 flags;
 };
 
-
-struct asl_irq_noflags_desc
-{
-       u8                                  descriptor_type;
-       u16                                 irq_mask;
+struct asl_irq_noflags_desc {
+       u8 descriptor_type;
+       u16 irq_mask;
 };
 
-
-struct asl_dma_format_desc
-{
-       u8                                  descriptor_type;
-       u8                                  dma_channel_mask;
-       u8                                  flags;
+struct asl_dma_format_desc {
+       u8 descriptor_type;
+       u8 dma_channel_mask;
+       u8 flags;
 };
 
-
-struct asl_start_dependent_desc
-{
-       u8                                  descriptor_type;
-       u8                                  flags;
+struct asl_start_dependent_desc {
+       u8 descriptor_type;
+       u8 flags;
 };
 
-
-struct asl_start_dependent_noprio_desc
-{
-       u8                                  descriptor_type;
+struct asl_start_dependent_noprio_desc {
+       u8 descriptor_type;
 };
 
-
-struct asl_end_dependent_desc
-{
-       u8                                  descriptor_type;
+struct asl_end_dependent_desc {
+       u8 descriptor_type;
 };
 
-
-struct asl_io_port_desc
-{
-       u8                                  descriptor_type;
-       u8                                  information;
-       u16                                 address_min;
-       u16                                 address_max;
-       u8                                  alignment;
-       u8                                  length;
+struct asl_io_port_desc {
+       u8 descriptor_type;
+       u8 information;
+       u16 address_min;
+       u16 address_max;
+       u8 alignment;
+       u8 length;
 };
 
-
-struct asl_fixed_io_port_desc
-{
-       u8                                  descriptor_type;
-       u16                                 base_address;
-       u8                                  length;
+struct asl_fixed_io_port_desc {
+       u8 descriptor_type;
+       u16 base_address;
+       u8 length;
 };
 
-
-struct asl_small_vendor_desc
-{
-       u8                                  descriptor_type;
-       u8                                  vendor_defined[7];
+struct asl_small_vendor_desc {
+       u8 descriptor_type;
+       u8 vendor_defined[7];
 };
 
-
-struct asl_end_tag_desc
-{
-       u8                                  descriptor_type;
-       u8                                  checksum;
+struct asl_end_tag_desc {
+       u8 descriptor_type;
+       u8 checksum;
 };
 
-
 /* LARGE descriptors */
 
-struct asl_memory_24_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  information;
-       u16                                 address_min;
-       u16                                 address_max;
-       u16                                 alignment;
-       u16                                 range_length;
+struct asl_memory_24_desc {
+       u8 descriptor_type;
+       u16 length;
+       u8 information;
+       u16 address_min;
+       u16 address_max;
+       u16 alignment;
+       u16 range_length;
 };
 
-
-struct asl_large_vendor_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  vendor_defined[1];
+struct asl_large_vendor_desc {
+       u8 descriptor_type;
+       u16 length;
+       u8 vendor_defined[1];
 };
 
-
-struct asl_memory_32_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  information;
-       u32                                 address_min;
-       u32                                 address_max;
-       u32                                 alignment;
-       u32                                 range_length;
+struct asl_memory_32_desc {
+       u8 descriptor_type;
+       u16 length;
+       u8 information;
+       u32 address_min;
+       u32 address_max;
+       u32 alignment;
+       u32 range_length;
 };
 
-
-struct asl_fixed_memory_32_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  information;
-       u32                                 base_address;
-       u32                                 range_length;
+struct asl_fixed_memory_32_desc {
+       u8 descriptor_type;
+       u16 length;
+       u8 information;
+       u32 base_address;
+       u32 range_length;
 };
 
-
-struct asl_extended_address_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  resource_type;
-       u8                                  flags;
-       u8                                  specific_flags;
-       u8                                  revision_iD;
-       u8                                  reserved;
-       u64                                 granularity;
-       u64                                 address_min;
-       u64                                 address_max;
-       u64                                 translation_offset;
-       u64                                 address_length;
-       u64                                 type_specific_attributes;
-       u8                                  optional_fields[2]; /* Used for length calculation only */
+struct asl_extended_address_desc {
+       u8 descriptor_type;
+       u16 length;
+       u8 resource_type;
+       u8 flags;
+       u8 specific_flags;
+       u8 revision_iD;
+       u8 reserved;
+       u64 granularity;
+       u64 address_min;
+       u64 address_max;
+       u64 translation_offset;
+       u64 address_length;
+       u64 type_specific_attributes;
+       u8 optional_fields[2];  /* Used for length calculation only */
 };
 
-#define ASL_EXTENDED_ADDRESS_DESC_REVISION          1       /* ACPI 3.0 */
-
-
-struct asl_qword_address_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  resource_type;
-       u8                                  flags;
-       u8                                  specific_flags;
-       u64                                 granularity;
-       u64                                 address_min;
-       u64                                 address_max;
-       u64                                 translation_offset;
-       u64                                 address_length;
-       u8                                  optional_fields[2];
+#define ASL_EXTENDED_ADDRESS_DESC_REVISION          1  /* ACPI 3.0 */
+
+struct asl_qword_address_desc {
+       u8 descriptor_type;
+       u16 length;
+       u8 resource_type;
+       u8 flags;
+       u8 specific_flags;
+       u64 granularity;
+       u64 address_min;
+       u64 address_max;
+       u64 translation_offset;
+       u64 address_length;
+       u8 optional_fields[2];
 };
 
-
-struct asl_dword_address_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  resource_type;
-       u8                                  flags;
-       u8                                  specific_flags;
-       u32                                 granularity;
-       u32                                 address_min;
-       u32                                 address_max;
-       u32                                 translation_offset;
-       u32                                 address_length;
-       u8                                  optional_fields[2];
+struct asl_dword_address_desc {
+       u8 descriptor_type;
+       u16 length;
+       u8 resource_type;
+       u8 flags;
+       u8 specific_flags;
+       u32 granularity;
+       u32 address_min;
+       u32 address_max;
+       u32 translation_offset;
+       u32 address_length;
+       u8 optional_fields[2];
 };
 
-
-struct asl_word_address_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  resource_type;
-       u8                                  flags;
-       u8                                  specific_flags;
-       u16                                 granularity;
-       u16                                 address_min;
-       u16                                 address_max;
-       u16                                 translation_offset;
-       u16                                 address_length;
-       u8                                  optional_fields[2];
+struct asl_word_address_desc {
+       u8 descriptor_type;
+       u16 length;
+       u8 resource_type;
+       u8 flags;
+       u8 specific_flags;
+       u16 granularity;
+       u16 address_min;
+       u16 address_max;
+       u16 translation_offset;
+       u16 address_length;
+       u8 optional_fields[2];
 };
 
-
-struct asl_extended_xrupt_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  flags;
-       u8                                  table_length;
-       u32                                 interrupt_number[1];
+struct asl_extended_xrupt_desc {
+       u8 descriptor_type;
+       u16 length;
+       u8 flags;
+       u8 table_length;
+       u32 interrupt_number[1];
        /* res_source_index, res_source optional fields follow */
 };
 
-
-struct asl_general_register_desc
-{
-       u8                                  descriptor_type;
-       u16                                 length;
-       u8                                  address_space_id;
-       u8                                  bit_width;
-       u8                                  bit_offset;
-       u8                                  access_size; /* ACPI 3.0, was Reserved */
-       u64                                 address;
+struct asl_general_register_desc {
+       u8 descriptor_type;
+       u16 length;
+       u8 address_space_id;
+       u8 bit_width;
+       u8 bit_offset;
+       u8 access_size;         /* ACPI 3.0, was Reserved */
+       u64 address;
 };
 
 /* restore default alignment */
@@ -322,32 +277,29 @@ struct asl_general_register_desc
 
 /* Union of all resource descriptors, so we can allocate the worst case */
 
-union asl_resource_desc
-{
-       struct asl_irq_format_desc          irq;
-       struct asl_dma_format_desc          dma;
-       struct asl_start_dependent_desc     std;
-       struct asl_end_dependent_desc       end;
-       struct asl_io_port_desc             iop;
-       struct asl_fixed_io_port_desc       fio;
-       struct asl_small_vendor_desc        smv;
-       struct asl_end_tag_desc             et;
-
-       struct asl_memory_24_desc           M24;
-       struct asl_large_vendor_desc        lgv;
-       struct asl_memory_32_desc           M32;
-       struct asl_fixed_memory_32_desc     F32;
-       struct asl_qword_address_desc       qas;
-       struct asl_dword_address_desc       das;
-       struct asl_word_address_desc        was;
-       struct asl_extended_address_desc    eas;
-       struct asl_extended_xrupt_desc      exx;
-       struct asl_general_register_desc    grg;
-       u32                                 u32_item;
-       u16                                 u16_item;
-       u8                                  U8item;
+union asl_resource_desc {
+       struct asl_irq_format_desc irq;
+       struct asl_dma_format_desc dma;
+       struct asl_start_dependent_desc std;
+       struct asl_end_dependent_desc end;
+       struct asl_io_port_desc iop;
+       struct asl_fixed_io_port_desc fio;
+       struct asl_small_vendor_desc smv;
+       struct asl_end_tag_desc et;
+
+       struct asl_memory_24_desc M24;
+       struct asl_large_vendor_desc lgv;
+       struct asl_memory_32_desc M32;
+       struct asl_fixed_memory_32_desc F32;
+       struct asl_qword_address_desc qas;
+       struct asl_dword_address_desc das;
+       struct asl_word_address_desc was;
+       struct asl_extended_address_desc eas;
+       struct asl_extended_xrupt_desc exx;
+       struct asl_general_register_desc grg;
+       u32 u32_item;
+       u16 u16_item;
+       u8 U8item;
 };
 
-
 #endif
-
index d716df04d9dc505054f7311c843357c4565bb9b7..a703f14e049eeadd9cab2ee5dc8504c6726e8e93 100644 (file)
@@ -9,5 +9,4 @@ struct acpi_container {
        int state;
 };
 
-#endif /* __ACPI_CONTAINER_H */
-
+#endif                         /* __ACPI_CONTAINER_H */
index fd6730e4e567e283821fa412ef5c4517f26da307..91f4a12a99a1900a70e18b985e0b06a789ee8de4 100644 (file)
@@ -14,7 +14,6 @@
 #define ACPI_PDC_SMP_T_SWCOORD         (0x0080)
 #define ACPI_PDC_C_C1_FFH              (0x0100)
 
-
 #define ACPI_PDC_EST_CAPABILITY_SMP    (ACPI_PDC_SMP_C1PT | \
                                         ACPI_PDC_C_C1_HALT)
 
@@ -25,5 +24,4 @@
                                         ACPI_PDC_SMP_C1PT | \
                                         ACPI_PDC_C_C1_HALT)
 
-#endif /* __PDC_INTEL_H__ */
-
+#endif                         /* __PDC_INTEL_H__ */
index adf969efa510dd52d9eeda4bbebb94cc3b52f73c..16609c1ab2eb8f18f711ae44a26183327155ad5b 100644 (file)
 #ifndef __ACENV_H__
 #define __ACENV_H__
 
-
 /*
  * Configuration for ACPI tools and utilities
  */
 
-#ifdef _ACPI_DUMP_APP
+#ifdef ACPI_LIBRARY
+#define ACPI_USE_LOCAL_CACHE
+#endif
+
+#ifdef ACPI_DUMP_APP
 #ifndef MSDOS
 #define ACPI_DEBUG_OUTPUT
 #endif
 #define ACPI_APPLICATION
 #define ACPI_DISASSEMBLER
 #define ACPI_NO_METHOD_EXECUTION
-#define ACPI_USE_SYSTEM_CLIBRARY
-#define ACPI_ENABLE_OBJECT_CACHE
 #endif
 
-#ifdef _ACPI_EXEC_APP
+#ifdef ACPI_EXEC_APP
 #undef DEBUGGER_THREADING
 #define DEBUGGER_THREADING      DEBUGGER_SINGLE_THREADED
 #define ACPI_DEBUG_OUTPUT
 #define ACPI_APPLICATION
 #define ACPI_DEBUGGER
 #define ACPI_DISASSEMBLER
-#define ACPI_USE_SYSTEM_CLIBRARY
-#define ACPI_ENABLE_OBJECT_CACHE
 #endif
 
-#ifdef _ACPI_ASL_COMPILER
+#ifdef ACPI_ASL_COMPILER
 #define ACPI_DEBUG_OUTPUT
 #define ACPI_APPLICATION
 #define ACPI_DISASSEMBLER
 #define ACPI_CONSTANT_EVAL_ONLY
+#endif
+
+#ifdef ACPI_APPLICATION
 #define ACPI_USE_SYSTEM_CLIBRARY
-#define ACPI_ENABLE_OBJECT_CACHE
+#define ACPI_USE_LOCAL_CACHE
 #endif
 
 /*
 #elif defined(WIN64)
 #include "acwin64.h"
 
-#elif defined(MSDOS)        /* Must appear after WIN32 and WIN64 check */
+#elif defined(MSDOS)           /* Must appear after WIN32 and WIN64 check */
 #include "acdos16.h"
 
 #elif defined(__FreeBSD__)
 
 /*! [End] no source code translation !*/
 
-
 /*
  * Debugger threading model
  * Use single threaded if the entire subsystem is contained in an application
 #else
 #define DEBUGGER_THREADING          DEBUGGER_MULTI_THREADED
 #endif
-#endif /* !DEBUGGER_THREADING */
-
+#endif                         /* !DEBUGGER_THREADING */
 
 /******************************************************************************
  *
 #include <string.h>
 #include <ctype.h>
 
-#endif /* ACPI_USE_STANDARD_HEADERS */
+#endif                         /* ACPI_USE_STANDARD_HEADERS */
 
 /*
  * We will be linking to the standard Clib functions
 #define ACPI_MEMCPY(d,s,n)      (void) memcpy((d), (s), (acpi_size)(n))
 #define ACPI_MEMSET(d,s,n)      (void) memset((d), (s), (acpi_size)(n))
 
-#define ACPI_TOUPPER            toupper
-#define ACPI_TOLOWER            tolower
-#define ACPI_IS_XDIGIT          isxdigit
-#define ACPI_IS_DIGIT           isdigit
-#define ACPI_IS_SPACE           isspace
-#define ACPI_IS_UPPER           isupper
-#define ACPI_IS_PRINT           isprint
-#define ACPI_IS_ALPHA           isalpha
-#define ACPI_IS_ASCII           isascii
+#define ACPI_TOUPPER(i)         toupper((int) (i))
+#define ACPI_TOLOWER(i)         tolower((int) (i))
+#define ACPI_IS_XDIGIT(i)       isxdigit((int) (i))
+#define ACPI_IS_DIGIT(i)        isdigit((int) (i))
+#define ACPI_IS_SPACE(i)        isspace((int) (i))
+#define ACPI_IS_UPPER(i)        isupper((int) (i))
+#define ACPI_IS_PRINT(i)        isprint((int) (i))
+#define ACPI_IS_ALPHA(i)        isalpha((int) (i))
+#define ACPI_IS_ASCII(i)        isascii((int) (i))
 
 #else
 
  *****************************************************************************/
 
  /*
- * Use local definitions of C library macros and functions
- * NOTE: The function implementations may not be as efficient
- * as an inline or assembly code implementation provided by a
- * native C library.
- */
 * Use local definitions of C library macros and functions
 * NOTE: The function implementations may not be as efficient
 * as an inline or assembly code implementation provided by a
 * native C library.
 */
 
 #ifndef va_arg
 
 #ifndef _VALIST
 #define _VALIST
 typedef char *va_list;
-#endif /* _VALIST */
+#endif                         /* _VALIST */
 
 /*
  * Storage alignment properties
@@ -284,8 +284,7 @@ typedef char *va_list;
 #define va_end(ap)              (void) 0
 #define va_start(ap, A)         (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))
 
-#endif /* va_arg */
-
+#endif                         /* va_arg */
 
 #define ACPI_STRSTR(s1,s2)      acpi_ut_strstr ((s1), (s2))
 #define ACPI_STRCHR(s1,c)       acpi_ut_strchr ((s1), (c))
@@ -303,8 +302,7 @@ typedef char *va_list;
 #define ACPI_TOUPPER            acpi_ut_to_upper
 #define ACPI_TOLOWER            acpi_ut_to_lower
 
-#endif /* ACPI_USE_SYSTEM_CLIBRARY */
-
+#endif                         /* ACPI_USE_SYSTEM_CLIBRARY */
 
 /******************************************************************************
  *
@@ -345,8 +343,7 @@ typedef char *va_list;
 #define ACPI_ACQUIRE_GLOBAL_LOCK(Glptr, acq)
 #define ACPI_RELEASE_GLOBAL_LOCK(Glptr, acq)
 
-#endif /* ACPI_ASM_MACROS */
-
+#endif                         /* ACPI_ASM_MACROS */
 
 #ifdef ACPI_APPLICATION
 
@@ -356,11 +353,10 @@ typedef char *va_list;
 #define BREAKPOINT3
 #endif
 
-
 /******************************************************************************
  *
  * Compiler-specific information is contained in the compiler-specific
  * headers.
  *
  *****************************************************************************/
-#endif /* __ACENV_H__ */
+#endif                         /* __ACENV_H__ */
index 91fda36b042bad6a0177dd4bab9e87206b18f30f..4c0e0ba09ba0213d4bd83a23314d88282a6f0fea 100644 (file)
 #ifndef __ACGCC_H__
 #define __ACGCC_H__
 
+/* Function name is used for debug output. Non-ANSI, compiler-dependent */
+
+#define ACPI_GET_FUNCTION_NAME          __FUNCTION__
+
 /* This macro is used to tag functions as "printf-like" because
  * some compilers (like GCC) can catch printf format string problems.
  */
-#define ACPI_PRINTF_LIKE_FUNC __attribute__ ((__format__ (__printf__, 4, 5)))
+#define ACPI_PRINTF_LIKE_FUNC __attribute__ ((__format__ (__printf__, 6, 7)))
 
 /* Some compilers complain about unused variables. Sometimes we don't want to
- * use all the variables (most specifically for _THIS_MODULE). This allow us
+ * use all the variables (for example, _acpi_module_name). This allows us
  * to to tell the compiler warning in a per-variable manner that a variable
  * is unused.
  */
 #define ACPI_UNUSED_VAR __attribute__ ((unused))
 
-#endif /* __ACGCC_H__ */
+#endif                         /* __ACGCC_H__ */
index a3de0db856942cad99fa80c16451b4a028cade3f..c93e6562f0e1312ef857a715db84c3379de2d138 100644 (file)
 
 #define ACPI_MACHINE_WIDTH  BITS_PER_LONG
 
-#else /* !__KERNEL__ */
+/* Type(s) for the OSL */
+
+#ifdef ACPI_USE_LOCAL_CACHE
+#define acpi_cache_t   struct acpi_memory_list
+#else
+#include <linux/slab.h>
+#define acpi_cache_t   kmem_cache_t
+#endif
+
+#else                          /* !__KERNEL__ */
 
 #include <stdarg.h>
 #include <string.h>
 
 #define __cdecl
 #define ACPI_FLUSH_CPU_CACHE()
-#endif /* __KERNEL__ */
+#endif                         /* __KERNEL__ */
 
 /* Linux uses GCC */
 
 #include "acgcc.h"
 
-#endif /* __ACLINUX_H__ */
+#endif                         /* __ACLINUX_H__ */
index 50cfea4ff6ca3d1b3d35162ff9d2c56624c9e7ac..7a00d5089de983d0fb91f39f410aa60ee152e2e8 100644 (file)
 struct acpi_processor_cx;
 
 struct acpi_power_register {
-       u8                      descriptor;
-       u16                     length;
-       u8                      space_id;
-       u8                      bit_width;
-       u8                      bit_offset;
-       u8                      reserved;
-       u64                     address;
+       u8 descriptor;
+       u16 length;
+       u8 space_id;
+       u8 bit_width;
+       u8 bit_offset;
+       u8 reserved;
+       u64 address;
 } __attribute__ ((packed));
 
-
 struct acpi_processor_cx_policy {
-       u32                     count;
+       u32 count;
        struct acpi_processor_cx *state;
        struct {
-               u32                     time;
-               u32                     ticks;
-               u32                     count;
-               u32                     bm;
-       }                       threshold;
+               u32 time;
+               u32 ticks;
+               u32 count;
+               u32 bm;
+       } threshold;
 };
 
 struct acpi_processor_cx {
-       u8                      valid;
-       u8                      type;
-       u32                     address;
-       u32                     latency;
-       u32                     latency_ticks;
-       u32                     power;
-       u32                     usage;
+       u8 valid;
+       u8 type;
+       u32 address;
+       u32 latency;
+       u32 latency_ticks;
+       u32 power;
+       u32 usage;
        struct acpi_processor_cx_policy promotion;
        struct acpi_processor_cx_policy demotion;
 };
 
 struct acpi_processor_power {
        struct acpi_processor_cx *state;
-       unsigned long           bm_check_timestamp;
-       u32                     default_state;
-       u32                     bm_activity;
-       int                     count;
+       unsigned long bm_check_timestamp;
+       u32 default_state;
+       u32 bm_activity;
+       int count;
        struct acpi_processor_cx states[ACPI_PROCESSOR_MAX_POWER];
 
        /* the _PDC objects passed by the driver, if any */
@@ -71,85 +70,82 @@ struct acpi_processor_power {
 /* Performance Management */
 
 struct acpi_pct_register {
-       u8                      descriptor;
-       u16                     length;
-       u8                      space_id;
-       u8                      bit_width;
-       u8                      bit_offset;
-       u8                      reserved;
-       u64                     address;
+       u8 descriptor;
+       u16 length;
+       u8 space_id;
+       u8 bit_width;
+       u8 bit_offset;
+       u8 reserved;
+       u64 address;
 } __attribute__ ((packed));
 
 struct acpi_processor_px {
-       acpi_integer            core_frequency;         /* megahertz */
-       acpi_integer            power;                  /* milliWatts */
-       acpi_integer            transition_latency;     /* microseconds */
-       acpi_integer            bus_master_latency;     /* microseconds */
-       acpi_integer            control;                /* control value */
-       acpi_integer            status;                 /* success indicator */
+       acpi_integer core_frequency;    /* megahertz */
+       acpi_integer power;     /* milliWatts */
+       acpi_integer transition_latency;        /* microseconds */
+       acpi_integer bus_master_latency;        /* microseconds */
+       acpi_integer control;   /* control value */
+       acpi_integer status;    /* success indicator */
 };
 
 struct acpi_processor_performance {
-       unsigned int             state;
-       unsigned int             platform_limit;
+       unsigned int state;
+       unsigned int platform_limit;
        struct acpi_pct_register control_register;
        struct acpi_pct_register status_register;
-       unsigned int             state_count;
+       unsigned int state_count;
        struct acpi_processor_px *states;
 
        /* the _PDC objects passed by the driver, if any */
        struct acpi_object_list *pdc;
 };
 
-
-
 /* Throttling Control */
 
 struct acpi_processor_tx {
-       u16                     power;
-       u16                     performance;
+       u16 power;
+       u16 performance;
 };
 
 struct acpi_processor_throttling {
-       int                     state;
-       u32                     address;
-       u8                      duty_offset;
-       u8                      duty_width;
-       int                     state_count;
+       int state;
+       u32 address;
+       u8 duty_offset;
+       u8 duty_width;
+       int state_count;
        struct acpi_processor_tx states[ACPI_PROCESSOR_MAX_THROTTLING];
 };
 
 /* Limit Interface */
 
 struct acpi_processor_lx {
-       int                     px;             /* performace state */  
-       int                     tx;             /* throttle level */
+       int px;                 /* performace state */
+       int tx;                 /* throttle level */
 };
 
 struct acpi_processor_limit {
-       struct acpi_processor_lx state;         /* current limit */
+       struct acpi_processor_lx state; /* current limit */
        struct acpi_processor_lx thermal;       /* thermal limit */
-       struct acpi_processor_lx user;          /* user limit */
+       struct acpi_processor_lx user;  /* user limit */
 };
 
-
 struct acpi_processor_flags {
-       u8                      power:1;
-       u8                      performance:1;
-       u8                      throttling:1;
-       u8                      limit:1;
-       u8                      bm_control:1;
-       u8                      bm_check:1;
-       u8                      has_cst:1;
-       u8                      power_setup_done:1;
+       u8 power:1;
+       u8 performance:1;
+       u8 throttling:1;
+       u8 limit:1;
+       u8 bm_control:1;
+       u8 bm_check:1;
+       u8 has_cst:1;
+       u8 power_setup_done:1;
 };
 
 struct acpi_processor {
-       acpi_handle             handle;
-       u32                     acpi_id;
-       u32                     id;
-       u32                     pblk;
-       int                     performance_platform_limit;
+       acpi_handle handle;
+       u32 acpi_id;
+       u32 id;
+       u32 pblk;
+       int performance_platform_limit;
        struct acpi_processor_flags flags;
        struct acpi_processor_power power;
        struct acpi_processor_performance *performance;
@@ -158,50 +154,49 @@ struct acpi_processor {
 };
 
 struct acpi_processor_errata {
-       u8                      smp;
+       u8 smp;
        struct {
-               u8                      throttle:1;
-               u8                      fdma:1;
-               u8                      reserved:6;
-               u32                     bmisx;
-       }                       piix4;
+               u8 throttle:1;
+               u8 fdma:1;
+               u8 reserved:6;
+               u32 bmisx;
+       } piix4;
 };
 
-extern int acpi_processor_register_performance (
-       struct acpi_processor_performance * performance,
-       unsigned int cpu);
-extern void acpi_processor_unregister_performance (
-       struct acpi_processor_performance * performance,
-       unsigned int cpu);
+extern int acpi_processor_register_performance(struct acpi_processor_performance
+                                              *performance, unsigned int cpu);
+extern void acpi_processor_unregister_performance(struct
+                                                 acpi_processor_performance
+                                                 *performance,
+                                                 unsigned int cpu);
 
 /* note: this locks both the calling module and the processor module
          if a _PPC object exists, rmmod is disallowed then */
 int acpi_processor_notify_smm(struct module *calling_module);
 
-
-
 /* for communication between multiple parts of the processor kernel module */
-extern struct acpi_processor   *processors[NR_CPUS];
+extern struct acpi_processor *processors[NR_CPUS];
 extern struct acpi_processor_errata errata;
 
 int acpi_processor_set_pdc(struct acpi_processor *pr,
-               struct acpi_object_list *pdc_in);
+                          struct acpi_object_list *pdc_in);
 
 #ifdef ARCH_HAS_POWER_PDC_INIT
 void acpi_processor_power_init_pdc(struct acpi_processor_power *pow,
-               unsigned int cpu);
+                                  unsigned int cpu);
 void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags,
-               unsigned int cpu);
+                                       unsigned int cpu);
 #else
-static inline void acpi_processor_power_init_pdc(
-               struct acpi_processor_power *pow, unsigned int cpu)
+static inline void acpi_processor_power_init_pdc(struct acpi_processor_power
+                                                *pow, unsigned int cpu)
 {
        pow->pdc = NULL;
        return;
 }
 
-static inline void acpi_processor_power_init_bm_check(
-               struct acpi_processor_flags *flags, unsigned int cpu)
+static inline void acpi_processor_power_init_bm_check(struct
+                                                     acpi_processor_flags
+                                                     *flags, unsigned int cpu)
 {
        flags->bm_check = 1;
        return;
@@ -215,51 +210,62 @@ void acpi_processor_ppc_init(void);
 void acpi_processor_ppc_exit(void);
 int acpi_processor_ppc_has_changed(struct acpi_processor *pr);
 #else
-static inline void acpi_processor_ppc_init(void) { return; }
-static inline void acpi_processor_ppc_exit(void) { return; }
-static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr) {
+static inline void acpi_processor_ppc_init(void)
+{
+       return;
+}
+static inline void acpi_processor_ppc_exit(void)
+{
+       return;
+}
+static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr)
+{
        static unsigned int printout = 1;
        if (printout) {
-               printk(KERN_WARNING "Warning: Processor Platform Limit event detected, but not handled.\n");
-               printk(KERN_WARNING "Consider compiling CPUfreq support into your kernel.\n");
+               printk(KERN_WARNING
+                      "Warning: Processor Platform Limit event detected, but not handled.\n");
+               printk(KERN_WARNING
+                      "Consider compiling CPUfreq support into your kernel.\n");
                printout = 0;
        }
        return 0;
 }
-#endif /* CONFIG_CPU_FREQ */
+#endif                         /* CONFIG_CPU_FREQ */
 
 /* in processor_throttling.c */
-int acpi_processor_get_throttling_info (struct acpi_processor *pr);
-int acpi_processor_set_throttling (struct acpi_processor *pr, int state);
-ssize_t acpi_processor_write_throttling (
-        struct file            *file,
-        const char             __user *buffer,
-        size_t                 count,
-        loff_t                 *data);
+int acpi_processor_get_throttling_info(struct acpi_processor *pr);
+int acpi_processor_set_throttling(struct acpi_processor *pr, int state);
+ssize_t acpi_processor_write_throttling(struct file *file,
+                                       const char __user * buffer,
+                                       size_t count, loff_t * data);
 extern struct file_operations acpi_processor_throttling_fops;
 
 /* in processor_idle.c */
-int acpi_processor_power_init(struct acpi_processor *pr, struct acpi_device *device);
-int acpi_processor_cst_has_changed (struct acpi_processor *pr);
-int acpi_processor_power_exit(struct acpi_processor *pr, struct acpi_device *device);
-
+int acpi_processor_power_init(struct acpi_processor *pr,
+                             struct acpi_device *device);
+int acpi_processor_cst_has_changed(struct acpi_processor *pr);
+int acpi_processor_power_exit(struct acpi_processor *pr,
+                             struct acpi_device *device);
 
 /* in processor_thermal.c */
-int acpi_processor_get_limit_info (struct acpi_processor *pr);
-ssize_t acpi_processor_write_limit (
-       struct file             *file,
-       const char              __user *buffer,
-       size_t                  count,
-       loff_t                  *data);
+int acpi_processor_get_limit_info(struct acpi_processor *pr);
+ssize_t acpi_processor_write_limit(struct file *file,
+                                  const char __user * buffer,
+                                  size_t count, loff_t * data);
 extern struct file_operations acpi_processor_limit_fops;
 
 #ifdef CONFIG_CPU_FREQ
 void acpi_thermal_cpufreq_init(void);
 void acpi_thermal_cpufreq_exit(void);
 #else
-static inline void acpi_thermal_cpufreq_init(void) { return; }
-static inline void acpi_thermal_cpufreq_exit(void) { return; }
+static inline void acpi_thermal_cpufreq_init(void)
+{
+       return;
+}
+static inline void acpi_thermal_cpufreq_exit(void)
+{
+       return;
+}
 #endif
 
-
 #endif
diff --git a/include/asm-alpha/auxvec.h b/include/asm-alpha/auxvec.h
new file mode 100644 (file)
index 0000000..e96fe88
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef __ASM_ALPHA_AUXVEC_H
+#define __ASM_ALPHA_AUXVEC_H
+
+/* Reserve these numbers for any future use of a VDSO.  */
+#if 0
+#define AT_SYSINFO             32
+#define AT_SYSINFO_EHDR                33
+#endif
+
+/* More complete cache descriptions than AT_[DIU]CACHEBSIZE.  If the
+   value is -1, then the cache doesn't exist.  Otherwise:
+
+      bit 0-3:   Cache set-associativity; 0 means fully associative.
+      bit 4-7:   Log2 of cacheline size.
+      bit 8-31:          Size of the entire cache >> 8.
+      bit 32-63:  Reserved.
+*/
+
+#define AT_L1I_CACHESHAPE      34
+#define AT_L1D_CACHESHAPE      35
+#define AT_L2_CACHESHAPE       36
+#define AT_L3_CACHESHAPE       37
+
+#endif /* __ASM_ALPHA_AUXVEC_H */
index e94a945a231429fe357451f0bacf7e84feabd0f5..6c2d78fba264ac21ce616fcf9622bf1ea9b89fc7 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef __ASM_ALPHA_ELF_H
 #define __ASM_ALPHA_ELF_H
 
+#include <asm/auxvec.h>
+
 /* Special values for the st_other field in the symbol table.  */
 
 #define STO_ALPHA_NOPV         0x80
@@ -142,26 +144,6 @@ extern int dump_elf_task_fp(elf_fpreg_t *dest, struct task_struct *task);
        : amask (AMASK_CIX) ? "ev6" : "ev67");  \
 })
 
-/* Reserve these numbers for any future use of a VDSO.  */
-#if 0
-#define AT_SYSINFO             32
-#define AT_SYSINFO_EHDR                33
-#endif
-
-/* More complete cache descriptions than AT_[DIU]CACHEBSIZE.  If the
-   value is -1, then the cache doesn't exist.  Otherwise:
-
-      bit 0-3:   Cache set-associativity; 0 means fully associative.
-      bit 4-7:   Log2 of cacheline size.
-      bit 8-31:          Size of the entire cache >> 8.
-      bit 32-63:  Reserved.
-*/
-
-#define AT_L1I_CACHESHAPE      34
-#define AT_L1D_CACHESHAPE      35
-#define AT_L2_CACHESHAPE       36
-#define AT_L3_CACHESHAPE       37
-
 #ifdef __KERNEL__
 
 #define SET_PERSONALITY(EX, IBCS2)                             \
index 6b7d6c1649ce9c8d30aef7586ee8abad5bfabe59..87f2cf459e266367be6f16f10c545f85d41e9bbc 100644 (file)
@@ -3,10 +3,6 @@
 
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
-#define O_ACCMODE        0003
-#define O_RDONLY           00
-#define O_WRONLY           01
-#define O_RDWR             02
 #define O_CREAT                 01000  /* not fcntl */
 #define O_TRUNC                 02000  /* not fcntl */
 #define O_EXCL          04000  /* not fcntl */
 
 #define O_NONBLOCK      00004
 #define O_APPEND        00010
-#define O_NDELAY       O_NONBLOCK
 #define O_SYNC         040000
-#define FASYNC         020000  /* fcntl, for BSD compatibility */
 #define O_DIRECTORY    0100000 /* must be a directory */
 #define O_NOFOLLOW     0200000 /* don't follow links */
 #define O_LARGEFILE    0400000 /* will be set by the kernel on every open */
 #define O_DIRECT       02000000 /* direct disk access - should check with OSF/1 */
 #define O_NOATIME      04000000
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
 #define F_GETLK                7
 #define F_SETLK                8
 #define F_SETLKW       9
@@ -37,9 +26,6 @@
 #define F_SETSIG       10      /*  for sockets. */
 #define F_GETSIG       11      /*  for sockets. */
 
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
 /* for posix fcntl() and lockf() */
 #define F_RDLCK                1
 #define F_WRLCK                2
 
 #define F_INPROGRESS   64
 
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW        192     /* ... Which allows concurrent read & write ops */
-struct flock {
-       short l_type;
-       short l_whence;
-       __kernel_off_t l_start;
-       __kernel_off_t l_len;
-       __kernel_pid_t l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
+#include <asm-generic/fcntl.h>
 
 #endif
diff --git a/include/asm-alpha/futex.h b/include/asm-alpha/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-alpha/hdreg.h b/include/asm-alpha/hdreg.h
deleted file mode 100644 (file)
index 7f7fd1a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/hdreg.h>
index 4c39ee750f388f71cff6ac5dd0de7b866f1c7066..22de3b434a22a59d7f16bce6520787efab1fc8f9 100644 (file)
        __access_ok(((unsigned long)(addr)),(size),get_fs());   \
 })
 
-/* this function will go away soon - use access_ok() instead */
-extern inline int __deprecated verify_area(int type, const void __user * addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
 /*
  * These are the main single-value transfer routines.  They automatically
  * use the right size if we just have the right pointer type.
index 79138dcfb4accafa92a10910cdc0a70a93d42e8c..d64ee9211eeddc63fbb888421f01157f72f382a1 100644 (file)
@@ -30,6 +30,9 @@
 #define __ASM_ARCH_OMAP_H4_H
 
 /* Placeholder for H4 specific defines */
+/* GPMC CS1 */
+#define OMAP24XX_ETHR_START             0x08000300
+#define OMAP24XX_ETHR_GPIO_IRQ         92
 
 #endif /*  __ASM_ARCH_OMAP_H4_H */
 
index 0f1abaefe4decf6c81f7c5d8feefb3b8ee24c9bc..79574e0ed13d3c82d03c13cd4fbcc7df69d5f4c2 100644 (file)
 #define OMAP1510P1_EMIFS_PRI_VALUE             0x00
 #define OMAP1510P1_EMIFF_PRI_VALUE             0x00
 
-/*
- * These definitions define an area of FLASH set aside
- * for the use of MTD/JFFS2. This is the area of flash
- * that a JFFS2 filesystem will reside which is mounted
- * at boot with the "root=/dev/mtdblock/0 rw"
- * command line option. The flash address used here must
- * fall within the legal range defined by rrload for storing
- * the filesystem component. This address will be sufficiently
- * deep into the overall flash range to avoid the other
- * components also stored in flash such as the bootloader,
- * the bootloader params, and the kernel.
- * The SW2 settings for the map below are:
- * 1 off, 2 off, 3 on, 4 off.
- */
-
-/* Intel flash_0, partitioned as expected by rrload */
-#define OMAP_FLASH_0_BASE      0xD8000000
-#define OMAP_FLASH_0_START     0x00000000
-#define OMAP_FLASH_0_SIZE      SZ_16M
-
-/* Intel flash_1, used for cramfs or other flash file systems */
-#define OMAP_FLASH_1_BASE      0xD9000000
-#define OMAP_FLASH_1_START     0x01000000
-#define OMAP_FLASH_1_SIZE      SZ_16M
-
 #define NR_FPGA_IRQS           24
 #define NR_IRQS                 IH_BOARD_BASE + NR_FPGA_IRQS
 
index 0c224cc74fe4289678408a1095758723c9a18af1..691e52a52b433f4fe5cf43e9feeabefdd03e04ee 100644 (file)
 #define OMAP_SDRAM_DEVICE              D256M_1X16_4B
 #endif
 
-/*
- * These definitions define an area of FLASH set aside
- * for the use of MTD/JFFS2. This is the area of flash
- * that a JFFS2 filesystem will reside which is mounted
- * at boot with the "root=/dev/mtdblock/0 rw"
- * command line option.
- */
-
-/* Intel flash_0, partitioned as expected by rrload */
-#define OMAP_FLASH_0_BASE      0xD8000000      /* VA */
-#define OMAP_FLASH_0_START     0x00000000      /* PA */
-#define OMAP_FLASH_0_SIZE      SZ_32M
-
 #define MAXIRQNUM              IH_BOARD_BASE
 #define MAXFIQNUM              MAXIRQNUM
 #define MAXSWINUM              MAXIRQNUM
 
 #define NR_IRQS                        (MAXIRQNUM + 1)
 
+/* Samsung NAND flash at CS2B or CS3(NAND Boot) */
+#define OMAP_NAND_FLASH_START1    0x0A000000 /* CS2B */
+#define OMAP_NAND_FLASH_START2    0x0C000000 /* CS3 */
+
 #endif
index 33977b8956fbb1abcaec714b839e39be6a148305..ed6d346ee12344da8fa651956b3742360b433f09 100644 (file)
 #ifndef __ASM_ARCH_VOICEBLUE_H
 #define __ASM_ARCH_VOICEBLUE_H
 
-#if (EXTERNAL_MAX_NR_PORTS < 4)
-#undef EXTERNAL_MAX_NR_PORTS
-#define EXTERNAL_MAX_NR_PORTS  4
-#endif
-
 extern void voiceblue_wdt_enable(void);
 extern void voiceblue_wdt_disable(void);
 extern void voiceblue_wdt_ping(void);
index 95bd625480c13afd715fe45a70e0a40bb9c57cf0..a0040cd86639452426f7a715e5f9043237fdc5ed 100644 (file)
@@ -30,10 +30,23 @@ struct omap_clock_config {
        u8 system_clock_type;
 };
 
+struct omap_mmc_conf {
+       unsigned enabled:1;
+       /* nomux means "standard" muxing is wrong on this board, and that
+        * board-specific code handled it before common init logic.
+        */
+       unsigned nomux:1;
+       /* switch pin can be for card detect (default) or card cover */
+       unsigned cover:1;
+       /* 4 wire signaling is optional, and is only used for SD/SDIO */
+       unsigned wire4:1;
+       s16 power_pin;
+       s16 switch_pin;
+       s16 wp_pin;
+};
+
 struct omap_mmc_config {
-       u8 mmc_blocks;
-       s16 mmc1_power_pin, mmc2_power_pin;
-       s16 mmc1_switch_pin, mmc2_switch_pin;
+       struct omap_mmc_conf mmc[2];
 };
 
 struct omap_serial_console_config {
index e8786713ee5cc561cda61b7360c15e42008b4d60..1119e2b53e724fb9773c35dcaf793cc7b7df62e0 100644 (file)
@@ -38,146 +38,179 @@ extern unsigned int system_rev;
 /*
  * Test if multicore OMAP support is needed
  */
-#undef MULTI_OMAP
+#undef MULTI_OMAP1
+#undef MULTI_OMAP2
 #undef OMAP_NAME
 
 #ifdef CONFIG_ARCH_OMAP730
 # ifdef OMAP_NAME
-#  undef  MULTI_OMAP
-#  define MULTI_OMAP
+#  undef  MULTI_OMAP1
+#  define MULTI_OMAP1
 # else
 #  define OMAP_NAME omap730
 # endif
 #endif
 #ifdef CONFIG_ARCH_OMAP1510
 # ifdef OMAP_NAME
-#  undef  MULTI_OMAP
-#  define MULTI_OMAP
+#  undef  MULTI_OMAP1
+#  define MULTI_OMAP1
 # else
 #  define OMAP_NAME omap1510
 # endif
 #endif
 #ifdef CONFIG_ARCH_OMAP16XX
 # ifdef OMAP_NAME
-#  undef  MULTI_OMAP
-#  define MULTI_OMAP
+#  undef  MULTI_OMAP1
+#  define MULTI_OMAP1
 # else
-#  define OMAP_NAME omap1610
+#  define OMAP_NAME omap16xx
 # endif
 #endif
-#ifdef CONFIG_ARCH_OMAP16XX
-# ifdef OMAP_NAME
-#  undef  MULTI_OMAP
-#  define MULTI_OMAP
+#ifdef CONFIG_ARCH_OMAP24XX
+# if (defined(OMAP_NAME) || defined(MULTI_OMAP1))
+#  error "OMAP1 and OMAP2 can't be selected at the same time"
 # else
-#  define OMAP_NAME omap1710
+#  undef  MULTI_OMAP2
+#  define OMAP_NAME omap24xx
 # endif
 #endif
 
 /*
- * Generate various OMAP cpu specific macros, and cpu class
- * specific macros
+ * Macros to group OMAP into cpu classes.
+ * These can be used in most places.
+ * cpu_is_omap7xx():   True for OMAP730
+ * cpu_is_omap15xx():  True for OMAP1510 and OMAP5910
+ * cpu_is_omap16xx():  True for OMAP1610, OMAP5912 and OMAP1710
+ * cpu_is_omap24xx():  True for OMAP2420
  */
-#define GET_OMAP_TYPE  ((system_rev >> 24) & 0xff)
 #define GET_OMAP_CLASS (system_rev & 0xff)
 
-#define IS_OMAP_TYPE(type, id)                         \
-static inline int is_omap ##type (void)                        \
-{                                                      \
-       return (GET_OMAP_TYPE == (id)) ? 1 : 0;         \
-}
-
 #define IS_OMAP_CLASS(class, id)                       \
 static inline int is_omap ##class (void)               \
 {                                                      \
        return (GET_OMAP_CLASS == (id)) ? 1 : 0;        \
 }
 
-IS_OMAP_TYPE(730, 0x07)
-IS_OMAP_TYPE(1510, 0x15)
-IS_OMAP_TYPE(1610, 0x16)
-IS_OMAP_TYPE(5912, 0x16)
-IS_OMAP_TYPE(1710, 0x17)
-IS_OMAP_TYPE(2420, 0x24)
-
 IS_OMAP_CLASS(7xx, 0x07)
 IS_OMAP_CLASS(15xx, 0x15)
 IS_OMAP_CLASS(16xx, 0x16)
 IS_OMAP_CLASS(24xx, 0x24)
 
-/*
- * Macros to group OMAP types into cpu classes.
- * These can be used in most places.
- * cpu_is_omap15xx():  True for 1510 and 5910
- * cpu_is_omap16xx():  True for 1610, 5912 and 1710
- */
-#if defined(MULTI_OMAP)
-# define cpu_is_omap7xx()              is_omap7xx()
-# define cpu_is_omap15xx()             is_omap15xx()
-# if !(defined(CONFIG_ARCH_OMAP1510) || defined(CONFIG_ARCH_OMAP730))
-#  define cpu_is_omap16xx()            1
-# else
+#define cpu_is_omap7xx()               0
+#define cpu_is_omap15xx()              0
+#define cpu_is_omap16xx()              0
+#define cpu_is_omap24xx()              0
+
+#if defined(MULTI_OMAP1)
+# if defined(CONFIG_ARCH_OMAP730)
+#  undef  cpu_is_omap7xx
+#  define cpu_is_omap7xx()             is_omap7xx()
+# endif
+# if defined(CONFIG_ARCH_OMAP1510)
+#  undef  cpu_is_omap15xx
+#  define cpu_is_omap15xx()            is_omap15xx()
+# endif
+# if defined(CONFIG_ARCH_OMAP16XX)
+#  undef  cpu_is_omap16xx
 #  define cpu_is_omap16xx()            is_omap16xx()
 # endif
 #else
 # if defined(CONFIG_ARCH_OMAP730)
+#  undef  cpu_is_omap7xx
 #  define cpu_is_omap7xx()             1
-# else
-#  define cpu_is_omap7xx()             0
 # endif
 # if defined(CONFIG_ARCH_OMAP1510)
+#  undef  cpu_is_omap15xx
 #  define cpu_is_omap15xx()            1
-# else
-#  define cpu_is_omap15xx()            0
 # endif
 # if defined(CONFIG_ARCH_OMAP16XX)
+#  undef  cpu_is_omap16xx
 #  define cpu_is_omap16xx()            1
-# else
-#  define cpu_is_omap16xx()            0
+# endif
+# if defined(CONFIG_ARCH_OMAP24XX)
+#  undef  cpu_is_omap24xx
+#  define cpu_is_omap24xx()            1
 # endif
 #endif
 
-#if defined(MULTI_OMAP)
-# define cpu_is_omap730()              is_omap730()
-# define cpu_is_omap1510()             is_omap1510()
-# define cpu_is_omap1610()             is_omap1610()
-# define cpu_is_omap5912()             is_omap5912()
-# define cpu_is_omap1710()             is_omap1710()
+/*
+ * Macros to detect individual cpu types.
+ * These are only rarely needed.
+ * cpu_is_omap730():   True for OMAP730
+ * cpu_is_omap1510():  True for OMAP1510
+ * cpu_is_omap1610():  True for OMAP1610
+ * cpu_is_omap1611():  True for OMAP1611
+ * cpu_is_omap5912():  True for OMAP5912
+ * cpu_is_omap1621():  True for OMAP1621
+ * cpu_is_omap1710():  True for OMAP1710
+ * cpu_is_omap2420():  True for OMAP2420
+ */
+#define GET_OMAP_TYPE  ((system_rev >> 16) & 0xffff)
+
+#define IS_OMAP_TYPE(type, id)                         \
+static inline int is_omap ##type (void)                        \
+{                                                      \
+       return (GET_OMAP_TYPE == (id)) ? 1 : 0;         \
+}
+
+IS_OMAP_TYPE(730, 0x0730)
+IS_OMAP_TYPE(1510, 0x1510)
+IS_OMAP_TYPE(1610, 0x1610)
+IS_OMAP_TYPE(1611, 0x1611)
+IS_OMAP_TYPE(5912, 0x1611)
+IS_OMAP_TYPE(1621, 0x1621)
+IS_OMAP_TYPE(1710, 0x1710)
+IS_OMAP_TYPE(2420, 0x2420)
+
+#define cpu_is_omap730()               0
+#define cpu_is_omap1510()              0
+#define cpu_is_omap1610()              0
+#define cpu_is_omap5912()              0
+#define cpu_is_omap1611()              0
+#define cpu_is_omap1621()              0
+#define cpu_is_omap1710()              0
+#define cpu_is_omap2420()              0
+
+#if defined(MULTI_OMAP1)
+# if defined(CONFIG_ARCH_OMAP730)
+#  undef  cpu_is_omap730
+#  define cpu_is_omap730()             is_omap730()
+# endif
+# if defined(CONFIG_ARCH_OMAP1510)
+#  undef  cpu_is_omap1510
+#  define cpu_is_omap1510()            is_omap1510()
+# endif
 #else
 # if defined(CONFIG_ARCH_OMAP730)
+#  undef  cpu_is_omap730
 #  define cpu_is_omap730()             1
-# else
-#  define cpu_is_omap730()             0
 # endif
 # if defined(CONFIG_ARCH_OMAP1510)
+#  undef  cpu_is_omap1510
 #  define cpu_is_omap1510()            1
-# else
-#  define cpu_is_omap1510()            0
 # endif
-# if defined(CONFIG_ARCH_OMAP16XX)
-#  define cpu_is_omap1610()            1
-# else
-#  define cpu_is_omap1610()            0
-# endif
-# if defined(CONFIG_ARCH_OMAP16XX)
-#  define cpu_is_omap5912()            1
-# else
-#  define cpu_is_omap5912()            0
-# endif
-# if defined(CONFIG_ARCH_OMAP16XX)
+#endif
+
+/*
+ * Whether we have MULTI_OMAP1 or not, we still need to distinguish
+ * between 1611B/5912 and 1710.
+ */
+#if defined(CONFIG_ARCH_OMAP16XX)
+# undef  cpu_is_omap1610
+# undef  cpu_is_omap1611
+# undef  cpu_is_omap5912
+# undef  cpu_is_omap1621
+# undef  cpu_is_omap1710
 # define cpu_is_omap1610()             is_omap1610()
+# define cpu_is_omap1611()             is_omap1611()
 # define cpu_is_omap5912()             is_omap5912()
+# define cpu_is_omap1621()             is_omap1621()
 # define cpu_is_omap1710()             is_omap1710()
-# else
-# define cpu_is_omap1610()             0
-# define cpu_is_omap5912()             0
-# define cpu_is_omap1710()             0
-# endif
-# if defined(CONFIG_ARCH_OMAP2420)
+#endif
+
+#if defined(CONFIG_ARCH_OMAP2420)
+#  undef  cpu_is_omap2420
 #  define cpu_is_omap2420()            1
-# else
-#  define cpu_is_omap2420()            0
-# endif
 #endif
 
 #endif
index 83bb458afd0ba7480289e87d0b141596a71c2b9e..ca4f577f967588396bdd07146e74d41cda84682c 100644 (file)
@@ -14,6 +14,7 @@
                .macro  addruart,rx
                mrc     p15, 0, \rx, c1, c0
                tst     \rx, #1                 @ MMU enabled?
+#ifdef CONFIG_ARCH_OMAP1
                moveq   \rx, #0xff000000        @ physical base address
                movne   \rx, #0xfe000000        @ virtual base
                orr     \rx, \rx, #0x00fb0000
 #endif
 #if defined(CONFIG_OMAP_LL_DEBUG_UART2) || defined(CONFIG_OMAP_LL_DEBUG_UART3)
                orr     \rx, \rx, #0x00000800   @ UART 2 & 3
+#endif
+
+#elif  CONFIG_ARCH_OMAP2
+               moveq   \rx, #0x48000000        @ physical base address
+               movne   \rx, #0xd8000000        @ virtual base
+               orr     \rx, \rx, #0x0006a000
+#ifdef CONFIG_OMAP_LL_DEBUG_UART2
+               add     \rx, \rx, #0x00002000   @ UART 2
+#endif
+#ifdef CONFIG_OMAP_LL_DEBUG_UART3
+               add     \rx, \rx, #0x00004000   @ UART 3
+#endif
 #endif
                .endm
 
index ce114ce5af5d6af63d3d44af7e49c35eb9f3b701..04ebef5c6e95d180142d3e25e938630705b4341c 100644 (file)
@@ -240,6 +240,7 @@ extern void omap_dma_unlink_lch (int lch_head, int lch_queue);
 
 extern dma_addr_t omap_get_dma_src_pos(int lch);
 extern dma_addr_t omap_get_dma_dst_pos(int lch);
+extern int omap_get_dma_src_addr_counter(int lch);
 extern void omap_clear_dma(int lch);
 extern int omap_dma_running(void);
 
diff --git a/include/asm-arm/arch-omap/dmtimer.h b/include/asm-arm/arch-omap/dmtimer.h
new file mode 100644 (file)
index 0000000..11772c7
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * linux/include/asm-arm/arm/arch-omap/dmtimer.h
+ *
+ * OMAP Dual-Mode Timers
+ *
+ * Copyright (C) 2005 Nokia Corporation
+ * Author: Lauri Leukkunen <lauri.leukkunen@nokia.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.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * 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 __ASM_ARCH_TIMER_H
+#define __ASM_ARCH_TIMER_H
+
+#include <linux/list.h>
+
+#define OMAP_TIMER_SRC_ARMXOR          0x00
+#define OMAP_TIMER_SRC_32_KHZ          0x01
+#define OMAP_TIMER_SRC_EXT_CLK         0x02
+
+/* timer control reg bits */
+#define OMAP_TIMER_CTRL_CAPTMODE       (1 << 13)
+#define OMAP_TIMER_CTRL_PT             (1 << 12)
+#define OMAP_TIMER_CTRL_TRG_OVERFLOW   (0x1 << 10)
+#define OMAP_TIMER_CTRL_TRG_OFANDMATCH (0x2 << 10)
+#define OMAP_TIMER_CTRL_TCM_LOWTOHIGH  (0x1 << 8)
+#define OMAP_TIMER_CTRL_TCM_HIGHTOLOW  (0x2 << 8)
+#define OMAP_TIMER_CTRL_TCM_BOTHEDGES  (0x3 << 8)
+#define OMAP_TIMER_CTRL_SCPWM          (1 << 7)
+#define OMAP_TIMER_CTRL_CE             (1 << 6)        /* compare enable */
+#define OMAP_TIMER_CTRL_PRE            (1 << 5)        /* prescaler enable */
+#define OMAP_TIMER_CTRL_PTV_SHIFT      2               /* how much to shift the prescaler value */
+#define OMAP_TIMER_CTRL_AR             (1 << 1)        /* auto-reload enable */
+#define OMAP_TIMER_CTRL_ST             (1 << 0)        /* start timer */
+
+/* timer interrupt enable bits */
+#define OMAP_TIMER_INT_CAPTURE         (1 << 2)
+#define OMAP_TIMER_INT_OVERFLOW                (1 << 1)
+#define OMAP_TIMER_INT_MATCH           (1 << 0)
+
+
+struct omap_dm_timer {
+       struct list_head timer_list;
+
+       u32 base;
+       unsigned int irq;
+};
+
+u32 omap_dm_timer_read_reg(struct omap_dm_timer *timer, int reg);
+void omap_dm_timer_write_reg(struct omap_dm_timer *timer, int reg, u32 value);
+
+struct omap_dm_timer * omap_dm_timer_request(void);
+void omap_dm_timer_free(struct omap_dm_timer *timer);
+void omap_dm_timer_set_source(struct omap_dm_timer *timer, int source);
+
+void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, unsigned int value);
+void omap_dm_timer_set_trigger(struct omap_dm_timer *timer, unsigned int value);
+void omap_dm_timer_enable_compare(struct omap_dm_timer *timer);
+void omap_dm_timer_enable_autoreload(struct omap_dm_timer *timer);
+
+void omap_dm_timer_trigger(struct omap_dm_timer *timer);
+void omap_dm_timer_start(struct omap_dm_timer *timer);
+void omap_dm_timer_stop(struct omap_dm_timer *timer);
+
+void omap_dm_timer_set_load(struct omap_dm_timer *timer, unsigned int load);
+void omap_dm_timer_set_match(struct omap_dm_timer *timer, unsigned int match);
+
+unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer);
+void omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value);
+
+unsigned int omap_dm_timer_read_counter(struct omap_dm_timer *timer);
+void omap_dm_timer_reset_counter(struct omap_dm_timer *timer);
+
+int omap_dm_timers_active(void);
+
+#endif /* __ASM_ARCH_TIMER_H */
diff --git a/include/asm-arm/arch-omap/dsp.h b/include/asm-arm/arch-omap/dsp.h
new file mode 100644 (file)
index 0000000..57bf4f3
--- /dev/null
@@ -0,0 +1,244 @@
+/*
+ * linux/include/asm-arm/arch-omap/dsp.h
+ *
+ * Header for OMAP DSP driver
+ *
+ * Copyright (C) 2002-2005 Nokia Corporation
+ *
+ * Written by Toshihiro Kobayashi <toshihiro.kobayashi@nokia.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.
+ *
+ * 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
+ *
+ * 2005/06/01:  DSP Gateway version 3.3
+ */
+
+#ifndef ASM_ARCH_DSP_H
+#define ASM_ARCH_DSP_H
+
+
+/*
+ * for /dev/dspctl/ctl
+ */
+#define OMAP_DSP_IOCTL_RESET                   1
+#define OMAP_DSP_IOCTL_RUN                     2
+#define OMAP_DSP_IOCTL_SETRSTVECT              3
+#define OMAP_DSP_IOCTL_CPU_IDLE                        4
+#define OMAP_DSP_IOCTL_MPUI_WORDSWAP_ON                5
+#define OMAP_DSP_IOCTL_MPUI_WORDSWAP_OFF       6
+#define OMAP_DSP_IOCTL_MPUI_BYTESWAP_ON                7
+#define OMAP_DSP_IOCTL_MPUI_BYTESWAP_OFF       8
+#define OMAP_DSP_IOCTL_GBL_IDLE                        9
+#define OMAP_DSP_IOCTL_DSPCFG                  10
+#define OMAP_DSP_IOCTL_DSPUNCFG                        11
+#define OMAP_DSP_IOCTL_TASKCNT                 12
+#define OMAP_DSP_IOCTL_POLL                    13
+#define OMAP_DSP_IOCTL_REGMEMR                 40
+#define OMAP_DSP_IOCTL_REGMEMW                 41
+#define OMAP_DSP_IOCTL_REGIOR                  42
+#define OMAP_DSP_IOCTL_REGIOW                  43
+#define OMAP_DSP_IOCTL_GETVAR                  44
+#define OMAP_DSP_IOCTL_SETVAR                  45
+#define OMAP_DSP_IOCTL_RUNLEVEL                        50
+#define OMAP_DSP_IOCTL_SUSPEND                 51
+#define OMAP_DSP_IOCTL_RESUME                  52
+#define OMAP_DSP_IOCTL_FBEN                    53
+#define OMAP_DSP_IOCTL_FBDIS                   54
+#define OMAP_DSP_IOCTL_MBSEND                  99
+
+/*
+ * for taskdev
+ * (ioctls below should be >= 0x10000)
+ */
+#define OMAP_DSP_TASK_IOCTL_BFLSH      0x10000
+#define OMAP_DSP_TASK_IOCTL_SETBSZ     0x10001
+#define OMAP_DSP_TASK_IOCTL_LOCK       0x10002
+#define OMAP_DSP_TASK_IOCTL_UNLOCK     0x10003
+#define OMAP_DSP_TASK_IOCTL_GETNAME    0x10004
+
+/*
+ * for /dev/dspctl/mem
+ */
+#define OMAP_DSP_MEM_IOCTL_EXMAP       1
+#define OMAP_DSP_MEM_IOCTL_EXUNMAP     2
+#define OMAP_DSP_MEM_IOCTL_EXMAP_FLUSH 3
+#define OMAP_DSP_MEM_IOCTL_FBEXPORT    5
+#define OMAP_DSP_MEM_IOCTL_MMUITACK    7
+#define OMAP_DSP_MEM_IOCTL_MMUINIT     9
+#define OMAP_DSP_MEM_IOCTL_KMEM_RESERVE        11
+#define OMAP_DSP_MEM_IOCTL_KMEM_RELEASE        12
+
+struct omap_dsp_mapinfo {
+       unsigned long dspadr;
+       unsigned long size;
+};
+
+/*
+ * for /dev/dspctl/twch
+ */
+#define OMAP_DSP_TWCH_IOCTL_MKDEV      1
+#define OMAP_DSP_TWCH_IOCTL_RMDEV      2
+#define OMAP_DSP_TWCH_IOCTL_TADD       11
+#define OMAP_DSP_TWCH_IOCTL_TDEL       12
+#define OMAP_DSP_TWCH_IOCTL_TKILL      13
+
+#define OMAP_DSP_DEVSTATE_NOTASK       0x00000001
+#define OMAP_DSP_DEVSTATE_ATTACHED     0x00000002
+#define OMAP_DSP_DEVSTATE_GARBAGE      0x00000004
+#define OMAP_DSP_DEVSTATE_INVALID      0x00000008
+#define OMAP_DSP_DEVSTATE_ADDREQ       0x00000100
+#define OMAP_DSP_DEVSTATE_DELREQ       0x00000200
+#define OMAP_DSP_DEVSTATE_ADDFAIL      0x00001000
+#define OMAP_DSP_DEVSTATE_ADDING       0x00010000
+#define OMAP_DSP_DEVSTATE_DELING       0x00020000
+#define OMAP_DSP_DEVSTATE_KILLING      0x00040000
+#define OMAP_DSP_DEVSTATE_STATE_MASK   0x7fffffff
+#define OMAP_DSP_DEVSTATE_STALE                0x80000000
+
+struct omap_dsp_taddinfo {
+       unsigned char minor;
+       unsigned long taskadr;
+};
+#define OMAP_DSP_TADD_ABORTADR 0xffffffff
+
+
+/*
+ * error cause definition (for error detection device)
+ */
+#define OMAP_DSP_ERRDT_WDT     0x00000001
+#define OMAP_DSP_ERRDT_MMU     0x00000002
+
+
+/*
+ * mailbox protocol definitions
+ */
+
+struct omap_dsp_mailbox_cmd {
+       unsigned short cmd;
+       unsigned short data;
+};
+
+struct omap_dsp_reginfo {
+       unsigned short adr;
+       unsigned short val;
+};
+
+struct omap_dsp_varinfo {
+       unsigned char varid;
+       unsigned short val[0];
+};
+
+#define OMAP_DSP_MBPROT_REVISION       0x0019
+
+#define OMAP_DSP_MBCMD_WDSND   0x10
+#define OMAP_DSP_MBCMD_WDREQ   0x11
+#define OMAP_DSP_MBCMD_BKSND   0x20
+#define OMAP_DSP_MBCMD_BKREQ   0x21
+#define OMAP_DSP_MBCMD_BKYLD   0x23
+#define OMAP_DSP_MBCMD_BKSNDP  0x24
+#define OMAP_DSP_MBCMD_BKREQP  0x25
+#define OMAP_DSP_MBCMD_TCTL    0x30
+#define OMAP_DSP_MBCMD_TCTLDATA        0x31
+#define OMAP_DSP_MBCMD_POLL    0x32
+#define OMAP_DSP_MBCMD_WDT     0x50    /* v3.3: obsolete */
+#define OMAP_DSP_MBCMD_RUNLEVEL        0x51
+#define OMAP_DSP_MBCMD_PM      0x52
+#define OMAP_DSP_MBCMD_SUSPEND 0x53
+#define OMAP_DSP_MBCMD_KFUNC   0x54
+#define OMAP_DSP_MBCMD_TCFG    0x60
+#define OMAP_DSP_MBCMD_TADD    0x62
+#define OMAP_DSP_MBCMD_TDEL    0x63
+#define OMAP_DSP_MBCMD_TSTOP   0x65
+#define OMAP_DSP_MBCMD_DSPCFG  0x70
+#define OMAP_DSP_MBCMD_REGRW   0x72
+#define OMAP_DSP_MBCMD_GETVAR  0x74
+#define OMAP_DSP_MBCMD_SETVAR  0x75
+#define OMAP_DSP_MBCMD_ERR     0x78
+#define OMAP_DSP_MBCMD_DBG     0x79
+
+#define OMAP_DSP_MBCMD_TCTL_TINIT      0x0000
+#define OMAP_DSP_MBCMD_TCTL_TEN                0x0001
+#define OMAP_DSP_MBCMD_TCTL_TDIS       0x0002
+#define OMAP_DSP_MBCMD_TCTL_TCLR       0x0003
+#define OMAP_DSP_MBCMD_TCTL_TCLR_FORCE 0x0004
+
+#define OMAP_DSP_MBCMD_RUNLEVEL_USER           0x01
+#define OMAP_DSP_MBCMD_RUNLEVEL_SUPER          0x0e
+#define OMAP_DSP_MBCMD_RUNLEVEL_RECOVERY       0x10
+
+#define OMAP_DSP_MBCMD_PM_DISABLE      0x00
+#define OMAP_DSP_MBCMD_PM_ENABLE       0x01
+
+#define OMAP_DSP_MBCMD_KFUNC_FBCTL     0x00
+
+#define OMAP_DSP_MBCMD_FBCTL_ENABLE    0x0002
+#define OMAP_DSP_MBCMD_FBCTL_DISABLE   0x0003
+
+#define OMAP_DSP_MBCMD_TDEL_SAFE       0x0000
+#define OMAP_DSP_MBCMD_TDEL_KILL       0x0001
+
+#define OMAP_DSP_MBCMD_DSPCFG_REQ      0x00
+#define OMAP_DSP_MBCMD_DSPCFG_SYSADRH  0x28
+#define OMAP_DSP_MBCMD_DSPCFG_SYSADRL  0x29
+#define OMAP_DSP_MBCMD_DSPCFG_PROTREV  0x70
+#define OMAP_DSP_MBCMD_DSPCFG_ABORT    0x78
+#define OMAP_DSP_MBCMD_DSPCFG_LAST     0x80
+
+#define OMAP_DSP_MBCMD_REGRW_MEMR      0x00
+#define OMAP_DSP_MBCMD_REGRW_MEMW      0x01
+#define OMAP_DSP_MBCMD_REGRW_IOR       0x02
+#define OMAP_DSP_MBCMD_REGRW_IOW       0x03
+#define OMAP_DSP_MBCMD_REGRW_DATA      0x04
+
+#define OMAP_DSP_MBCMD_VARID_ICRMASK   0x00
+#define OMAP_DSP_MBCMD_VARID_LOADINFO  0x01
+
+#define OMAP_DSP_TTYP_ARCV     0x0001
+#define OMAP_DSP_TTYP_ASND     0x0002
+#define OMAP_DSP_TTYP_BKMD     0x0004
+#define OMAP_DSP_TTYP_BKDM     0x0008
+#define OMAP_DSP_TTYP_PVMD     0x0010
+#define OMAP_DSP_TTYP_PVDM     0x0020
+
+#define OMAP_DSP_EID_BADTID    0x10
+#define OMAP_DSP_EID_BADTCN    0x11
+#define OMAP_DSP_EID_BADBID    0x20
+#define OMAP_DSP_EID_BADCNT    0x21
+#define OMAP_DSP_EID_NOTLOCKED 0x22
+#define OMAP_DSP_EID_STVBUF    0x23
+#define OMAP_DSP_EID_BADADR    0x24
+#define OMAP_DSP_EID_BADTCTL   0x30
+#define OMAP_DSP_EID_BADPARAM  0x50
+#define OMAP_DSP_EID_FATAL     0x58
+#define OMAP_DSP_EID_NOMEM     0xc0
+#define OMAP_DSP_EID_NORES     0xc1
+#define OMAP_DSP_EID_IPBFULL   0xc2
+#define OMAP_DSP_EID_WDT       0xd0
+#define OMAP_DSP_EID_TASKNOTRDY        0xe0
+#define OMAP_DSP_EID_TASKBSY   0xe1
+#define OMAP_DSP_EID_TASKERR   0xef
+#define OMAP_DSP_EID_BADCFGTYP 0xf0
+#define OMAP_DSP_EID_DEBUG     0xf8
+#define OMAP_DSP_EID_BADSEQ    0xfe
+#define OMAP_DSP_EID_BADCMD    0xff
+
+#define OMAP_DSP_TNM_LEN       16
+
+#define OMAP_DSP_TID_FREE      0xff
+#define OMAP_DSP_TID_ANON      0xfe
+
+#define OMAP_DSP_BID_NULL      0xffff
+#define OMAP_DSP_BID_PVT       0xfffe
+
+#endif /* ASM_ARCH_DSP_H */
diff --git a/include/asm-arm/arch-omap/dsp_common.h b/include/asm-arm/arch-omap/dsp_common.h
new file mode 100644 (file)
index 0000000..4fcce69
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * linux/include/asm-arm/arch-omap/dsp_common.h
+ *
+ * Header for OMAP DSP subsystem control
+ *
+ * Copyright (C) 2004,2005 Nokia Corporation
+ *
+ * Written by Toshihiro Kobayashi <toshihiro.kobayashi@nokia.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.
+ *
+ * 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
+ *
+ * 2005/06/03:  DSP Gateway version 3.3
+ */
+
+#ifndef ASM_ARCH_DSP_COMMON_H
+#define ASM_ARCH_DSP_COMMON_H
+
+void omap_dsp_pm_suspend(void);
+void omap_dsp_pm_resume(void);
+void omap_dsp_request_mpui(void);
+void omap_dsp_release_mpui(void);
+int omap_dsp_request_mem(void);
+int omap_dsp_release_mem(void);
+
+#endif /* ASM_ARCH_DSP_COMMON_H */
index 57b126889b989c3d3619222438d65919a9719209..0d29b9c56a957c9c83e76e1f5730fcbea5957da0 100644 (file)
@@ -8,6 +8,8 @@
  * warranty of any kind, whether express or implied.
  */
 
+#if defined(CONFIG_ARCH_OMAP1)
+
                .macro  disable_fiq
                .endm
 
 1510:
                .endm
 
+#elif defined(CONFIG_ARCH_OMAP24XX)
+
+#include <asm/arch/omap24xx.h>
+
+               .macro  disable_fiq
+               .endm
+
+               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
+               ldr     \base, =VA_IC_BASE
+               ldr     \irqnr, [\base, #0x98] /* IRQ pending reg 1 */
+               cmp     \irqnr, #0x0
+               bne     2222f
+               ldr     \irqnr, [\base, #0xb8] /* IRQ pending reg 2 */
+               cmp     \irqnr, #0x0
+               bne     2222f
+               ldr     \irqnr, [\base, #0xd8] /* IRQ pending reg 3 */
+               cmp     \irqnr, #0x0
+2222:
+               ldrne   \irqnr, [\base, #IRQ_SIR_IRQ]
+
+               .endm
+
+               .macro  irq_prio_table
+               .endm
+
+#endif
index fad2fc93ee7051c098ac88d00b89406da367d752..74cb2b93b70024f39bf135781e0afde230153af5 100644 (file)
@@ -3,7 +3,7 @@
  *
  * OMAP GPIO handling defines and functions
  *
- * Copyright (C) 2003 Nokia Corporation
+ * Copyright (C) 2003-2005 Nokia Corporation
  *
  * Written by Juha Yrjölä <juha.yrjola@nokia.com>
  *
 #include <asm/arch/irqs.h>
 #include <asm/io.h>
 
-#define OMAP_MPUIO_BASE                        0xfffb5000
+#define OMAP_MPUIO_BASE                        (void __iomem *)0xfffb5000
+
+#ifdef CONFIG_ARCH_OMAP730
+#define OMAP_MPUIO_INPUT_LATCH         0x00
+#define OMAP_MPUIO_OUTPUT              0x02
+#define OMAP_MPUIO_IO_CNTL             0x04
+#define OMAP_MPUIO_KBR_LATCH           0x08
+#define OMAP_MPUIO_KBC                 0x0a
+#define OMAP_MPUIO_GPIO_EVENT_MODE     0x0c
+#define OMAP_MPUIO_GPIO_INT_EDGE       0x0e
+#define OMAP_MPUIO_KBD_INT             0x10
+#define OMAP_MPUIO_GPIO_INT            0x12
+#define OMAP_MPUIO_KBD_MASKIT          0x14
+#define OMAP_MPUIO_GPIO_MASKIT         0x16
+#define OMAP_MPUIO_GPIO_DEBOUNCING     0x18
+#define OMAP_MPUIO_LATCH               0x1a
+#else
 #define OMAP_MPUIO_INPUT_LATCH         0x00
 #define OMAP_MPUIO_OUTPUT              0x04
 #define OMAP_MPUIO_IO_CNTL             0x08
@@ -44,6 +60,7 @@
 #define OMAP_MPUIO_GPIO_MASKIT         0x2c
 #define OMAP_MPUIO_GPIO_DEBOUNCING     0x30
 #define OMAP_MPUIO_LATCH               0x34
+#endif
 
 #define OMAP_MPUIO(nr)         (OMAP_MAX_GPIO_LINES + (nr))
 #define OMAP_GPIO_IS_MPUIO(nr) ((nr) >= OMAP_MAX_GPIO_LINES)
                                 IH_MPUIO_BASE + ((nr) & 0x0f) : \
                                 IH_GPIO_BASE + ((nr) & 0x3f))
 
-/* For EDGECTRL */
-#define OMAP_GPIO_NO_EDGE        0x00
-#define OMAP_GPIO_FALLING_EDGE   0x01
-#define OMAP_GPIO_RISING_EDGE    0x02
-#define OMAP_GPIO_BOTH_EDGES     0x03
-
 extern int omap_gpio_init(void);       /* Call from board init only */
 extern int omap_request_gpio(int gpio);
 extern void omap_free_gpio(int gpio);
 extern void omap_set_gpio_direction(int gpio, int is_input);
 extern void omap_set_gpio_dataout(int gpio, int enable);
 extern int omap_get_gpio_datain(int gpio);
-extern void omap_set_gpio_edge_ctrl(int gpio, int edge);
 
 #endif
index 48258c7f6541ca0c890b0df2e68b2739c6704bc2..60201e1dd6ad72b2eb05e3e81f1ae014fc10fc9b 100644 (file)
@@ -43,6 +43,7 @@
 #include <asm/arch/cpu.h>
 #endif
 #include <asm/arch/io.h>
+#include <asm/arch/serial.h>
 
 /*
  * ---------------------------------------------------------------------------
 /* DPLL control registers */
 #define DPLL_CTL               (0xfffecf00)
 
-/* DSP clock control */
+/* DSP clock control. Must use __raw_readw() and __raw_writew() with these */
 #define DSP_CONFIG_REG_BASE     (0xe1008000)
 #define DSP_CKCTL              (DSP_CONFIG_REG_BASE + 0x0)
 #define DSP_IDLECT1            (DSP_CONFIG_REG_BASE + 0x4)
 #define DSP_IDLECT2            (DSP_CONFIG_REG_BASE + 0x8)
+#define DSP_RSTCT2             (DSP_CONFIG_REG_BASE + 0x14)
 
 /*
  * ---------------------------------------------------------------------------
  * Interrupts
  * ---------------------------------------------------------------------------
  */
+#ifdef CONFIG_ARCH_OMAP1
+
+/*
+ * XXX: These probably want to be moved to arch/arm/mach-omap/omap1/irq.c
+ * or something similar.. -- PFM.
+ */
+
 #define OMAP_IH1_BASE          0xfffecb00
 #define OMAP_IH2_BASE          0xfffe0000
 
 #define IRQ_ILR0_REG_OFFSET    0x1c
 #define IRQ_GMR_REG_OFFSET     0xa0
 
+#endif
+
 /*
  * ----------------------------------------------------------------------------
  * System control registers
 
 #ifndef __ASSEMBLER__
 
-/*
- * ---------------------------------------------------------------------------
- * Serial ports
- * ---------------------------------------------------------------------------
- */
-#define OMAP_UART1_BASE                (unsigned char *)0xfffb0000
-#define OMAP_UART2_BASE                (unsigned char *)0xfffb0800
-#define OMAP_UART3_BASE                (unsigned char *)0xfffb9800
-#define OMAP_MAX_NR_PORTS      3
-#define OMAP1510_BASE_BAUD     (12000000/16)
-#define OMAP16XX_BASE_BAUD     (48000000/16)
-
-#define is_omap_port(p)        ({int __ret = 0;                        \
-                       if (p == IO_ADDRESS(OMAP_UART1_BASE) || \
-                           p == IO_ADDRESS(OMAP_UART2_BASE) || \
-                           p == IO_ADDRESS(OMAP_UART3_BASE))   \
-                               __ret = 1;                      \
-                       __ret;                                  \
-                       })
-
 /*
  * ---------------------------------------------------------------------------
  * Processor specific defines
 
 #include "omap730.h"
 #include "omap1510.h"
+
+#ifdef CONFIG_ARCH_OMAP24XX
+#include "omap24xx.h"
+#endif
+
 #include "omap16xx.h"
 
 /*
 
 #ifdef CONFIG_MACH_OMAP_H4
 #include "board-h4.h"
-#error "Support for H4 board not yet implemented."
 #endif
 
 #ifdef CONFIG_MACH_OMAP_OSK
index 1c8c9fcc766e5254c989c33e8999465e198b6f1b..11fbf629bf755410a10efee0b52f1711b584b931 100644 (file)
  * I/O mapping
  * ----------------------------------------------------------------------------
  */
-#define IO_PHYS                        0xFFFB0000
-#define IO_OFFSET              0x01000000      /* Virtual IO = 0xfefb0000 */
-#define IO_VIRT                        (IO_PHYS - IO_OFFSET)
-#define IO_SIZE                        0x40000
-#define IO_ADDRESS(x)          ((x) - IO_OFFSET)
 
-#define PCIO_BASE              0
+#if defined(CONFIG_ARCH_OMAP1)
+#define IO_PHYS                0xFFFB0000
+#define IO_OFFSET      -0x01000000     /* Virtual IO = 0xfefb0000 */
+#define IO_SIZE                0x40000
 
-#define io_p2v(x)               ((x) - IO_OFFSET)
-#define io_v2p(x)               ((x) + IO_OFFSET)
+#elif defined(CONFIG_ARCH_OMAP2)
+#define IO_PHYS                0x48000000      /* L4 peripherals; other stuff has to be mapped *
+                                        * manually. */
+#define IO_OFFSET      0x90000000      /* Virtual IO = 0xd8000000 */
+#define IO_SIZE                0x08000000
+#endif
+
+#define IO_VIRT                (IO_PHYS + IO_OFFSET)
+#define IO_ADDRESS(x)  ((x) + IO_OFFSET)
+#define PCIO_BASE      0
+#define io_p2v(x)      ((x) + IO_OFFSET)
+#define io_v2p(x)      ((x) - IO_OFFSET)
 
 #ifndef __ASSEMBLER__
 
@@ -96,6 +104,8 @@ typedef struct { volatile u32 offset[4096]; } __regbase32;
                                        ->offset[((vaddr)&4095)>>2]
 #define __REG32(paddr)         __REGV32(io_p2v(paddr))
 
+extern void omap_map_common_io(void);
+
 #else
 
 #define __REG8(paddr)          io_p2v(paddr)
index 0d05a7c957d155799e1acaf61a4dab8cf7184f42..74e108ccac168fc34444731e59611d82eca6403f 100644 (file)
 /*
  * OMAP-1510 specific IRQ numbers for interrupt handler 2
  */
-#define INT_1510_OS_32kHz_TIMER (22 + IH2_BASE)
 #define INT_1510_COM_SPI_RO    (31 + IH2_BASE)
 
 /*
 #define INT_730_DMA_CH15       (62 + IH2_BASE)
 #define INT_730_NAND           (63 + IH2_BASE)
 
+#define INT_24XX_GPIO_BANK1    29
+#define INT_24XX_GPIO_BANK2    30
+#define INT_24XX_GPIO_BANK3    31
+#define INT_24XX_GPIO_BANK4    32
+
 /* Max. 128 level 2 IRQs (OMAP1610), 192 GPIOs (OMAP730) and
  * 16 MPUIO lines */
 #define OMAP_MAX_GPIO_LINES    192
index f6b57dd846a318a2099981cd402fd478aacca6f9..84f81e315a25da0aa010154473dfbc272e1cfd8c 100644 (file)
 /*
  * Physical DRAM offset.
  */
+#if defined(CONFIG_ARCH_OMAP1)
 #define PHYS_OFFSET            (0x10000000UL)
-
-/*
- * OMAP-1510 Local Bus address offset
- */
-#define OMAP1510_LB_OFFSET     (0x30000000UL)
+#elif defined(CONFIG_ARCH_OMAP2)
+#define PHYS_OFFSET            (0x80000000UL)
+#endif
 
 /*
  * Conversion between SDRAM and fake PCI bus, used by USB
  */
 #ifdef CONFIG_ARCH_OMAP1510
 
+/*
+ * OMAP-1510 Local Bus address offset
+ */
+#define OMAP1510_LB_OFFSET     (0x30000000UL)
+
 #define virt_to_lbus(x)                ((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET)
 #define lbus_to_virt(x)                ((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET)
 #define is_lbus_device(dev)    (cpu_is_omap1510() && dev && (strncmp(dev->bus_id, "ohci", 4) == 0))
diff --git a/include/asm-arm/arch-omap/mtd-xip.h b/include/asm-arm/arch-omap/mtd-xip.h
new file mode 100644 (file)
index 0000000..a73a285
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * MTD primitives for XIP support. Architecture specific functions.
+ *
+ * Do not include this file directly. It's included from linux/mtd/xip.h
+ *
+ * Author: Vladimir Barinov <vbarinov@ru.mvista.com>
+ *
+ * (c) 2005 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.
+ */
+
+#ifndef __ARCH_OMAP_MTD_XIP_H__
+#define __ARCH_OMAP_MTD_XIP_H__
+
+#include <asm/hardware.h>
+#define OMAP_MPU_TIMER_BASE    (0xfffec500)
+#define OMAP_MPU_TIMER_OFFSET  0x100
+
+typedef struct {
+       u32 cntl;                       /* CNTL_TIMER, R/W */
+       u32 load_tim;                   /* LOAD_TIM,   W */
+       u32 read_tim;                   /* READ_TIM,   R */
+} xip_omap_mpu_timer_regs_t;
+
+#define xip_omap_mpu_timer_base(n)                                     \
+((volatile xip_omap_mpu_timer_regs_t*)IO_ADDRESS(OMAP_MPU_TIMER_BASE + \
+       (n)*OMAP_MPU_TIMER_OFFSET))
+
+static inline unsigned long xip_omap_mpu_timer_read(int nr)
+{
+       volatile xip_omap_mpu_timer_regs_t* timer = xip_omap_mpu_timer_base(nr);
+       return timer->read_tim;
+}
+
+#define xip_irqpending()       \
+       (omap_readl(OMAP_IH1_ITR) & ~omap_readl(OMAP_IH1_MIR))
+#define xip_currtime()         (~xip_omap_mpu_timer_read(0))
+
+/*
+ * It's permitted to do approxmation for xip_elapsed_since macro
+ * (see linux/mtd/xip.h)
+ */
+
+#ifdef CONFIG_MACH_OMAP_PERSEUS2
+#define xip_elapsed_since(x)   (signed)((~xip_omap_mpu_timer_read(0) - (x)) / 7)
+#else
+#define xip_elapsed_since(x)   (signed)((~xip_omap_mpu_timer_read(0) - (x)) / 6)
+#endif
+
+/*
+ * xip_cpu_idle() is used when waiting for a delay equal or larger than
+ * the system timer tick period.  This should put the CPU into idle mode
+ * to save power and to be woken up only when some interrupts are pending.
+ * As above, this should not rely upon standard kernel code.
+ */
+
+#define xip_cpu_idle()  asm volatile ("mcr p15, 0, %0, c7, c0, 4" :: "r" (1))
+
+#endif /* __ARCH_OMAP_MTD_XIP_H__ */
index 5bd3f0097fc6313e7f8a98623b5a26f2f8e35c62..1b1ad410534908a013515b737a7065c66d51b3bc 100644 (file)
@@ -185,6 +185,7 @@ typedef enum {
 
        /* MPUIO */
        MPUIO2,
+       N15_1610_MPUIO2,
        MPUIO4,
        MPUIO5,
        T20_1610_MPUIO5,
@@ -210,6 +211,7 @@ typedef enum {
 
        /* Misc ballouts */
        BALLOUT_V8_ARMIO3,
+       N20_HDQ,
 
        /* OMAP-1610 MMC2 */
        W8_1610_MMC2_DAT0,
@@ -235,6 +237,7 @@ typedef enum {
        P20_1610_GPIO4,
        V9_1610_GPIO7,
        W8_1610_GPIO9,
+       N20_1610_GPIO11,
        N19_1610_GPIO13,
        P10_1610_GPIO22,
        V5_1610_GPIO24,
@@ -250,7 +253,7 @@ typedef enum {
        U18_1610_UWIRE_SDI,
        W21_1610_UWIRE_SDO,
        N14_1610_UWIRE_CS0,
-       P15_1610_UWIRE_CS0,
+       P15_1610_UWIRE_CS3,
        N15_1610_UWIRE_CS1,
 
        /* OMAP-1610 Flash */
@@ -411,7 +414,8 @@ MUX_CFG("N21_1710_GPIO14",       6,    9,    0,   1,   1,   1,    1,     1,  1)
 MUX_CFG("W15_1710_GPIO40",       9,   27,    7,   2,   5,   1,    2,     1,  1)
 
 /* MPUIO */
-MUX_CFG("MPUIO2",               7,   18,    0,   1,   1,   1,   NA,     0,  1)
+MUX_CFG("MPUIO2",               7,   18,    0,   1,  14,   1,   NA,     0,  1)
+MUX_CFG("N15_1610_MPUIO2",      7,   18,    0,   1,  14,   1,    1,     0,  1)
 MUX_CFG("MPUIO4",               7,   15,    0,   1,  13,   1,   NA,     0,  1)
 MUX_CFG("MPUIO5",               7,   12,    0,   1,  12,   1,   NA,     0,  1)
 
@@ -438,6 +442,7 @@ MUX_CFG("MCBSP3_CLKX",               9,    3,    1,   1,  29,   0,   NA,     0,  1)
 
 /* Misc ballouts */
 MUX_CFG("BALLOUT_V8_ARMIO3",    B,   18,    0,   2,  25,   1,   NA,     0,  1)
+MUX_CFG("N20_HDQ",            6,   18,    1,   1,   4,   0,    1,     4,  0)
 
 /* OMAP-1610 MMC2 */
 MUX_CFG("W8_1610_MMC2_DAT0",    B,   21,    6,   2,  23,   1,    2,     1,  1)
@@ -463,6 +468,7 @@ MUX_CFG("J18_1610_ETM_D7",   5,   27,    1,   0,  19,   0,    0,     0,  1)
 MUX_CFG("P20_1610_GPIO4",       6,   27,    0,   1,   7,   0,    1,     1,  1)
 MUX_CFG("V9_1610_GPIO7",        B,   12,    1,   2,  20,   0,    2,     1,  1)
 MUX_CFG("W8_1610_GPIO9",        B,   21,    0,   2,  23,   0,    2,     1,  1)
+MUX_CFG("N20_1610_GPIO11",       6,   18,    0,   1,   4,   0,    1,     1,  1)
 MUX_CFG("N19_1610_GPIO13",      6,   12,    0,   1,   2,   0,    1,     1,  1)
 MUX_CFG("P10_1610_GPIO22",      C,    0,    7,   2,  26,   0,    2,     1,  1)
 MUX_CFG("V5_1610_GPIO24",       B,   15,    7,   2,  21,   0,    2,     1,  1)
index f491a48ef2e118904d1c36c3b9b24a96445ef360..f086a39339060c1012036f0e68cbaf0120ad0fb9 100644 (file)
 
 /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */
 
-#define OMAP1510_SRAM_BASE     0xD0000000
-#define OMAP1510_SRAM_SIZE     (SZ_128K + SZ_64K)
-#define OMAP1510_SRAM_START    0x20000000
-
 #define OMAP1510_DSP_BASE      0xE0000000
 #define OMAP1510_DSP_SIZE      0x28000
 #define OMAP1510_DSP_START     0xE0000000
 #define OMAP1510_DSPREG_SIZE   SZ_128K
 #define OMAP1510_DSPREG_START  0xE1000000
 
-/*
- * ----------------------------------------------------------------------------
- * Memory used by power management
- * ----------------------------------------------------------------------------
- */
-
-#define OMAP1510_SRAM_IDLE_SUSPEND     (OMAP1510_SRAM_BASE + OMAP1510_SRAM_SIZE - 0x200)
-#define OMAP1510_SRAM_API_SUSPEND      (OMAP1510_SRAM_IDLE_SUSPEND + 0x100)
-
 #endif /*  __ASM_ARCH_OMAP1510_H */
 
index 38a9b95e6a336c7e12a3ebef89c629b37a22b6d9..f0c7f0fb4dc032e2a8c2303714b49504c3b7235b 100644 (file)
 
 /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */
 
-#define OMAP16XX_SRAM_BASE     0xD0000000
-#define OMAP1610_SRAM_SIZE     (SZ_16K)
-#define OMAP5912_SRAM_SIZE     0x3E800
-#define OMAP16XX_SRAM_START    0x20000000
-
 #define OMAP16XX_DSP_BASE      0xE0000000
 #define OMAP16XX_DSP_SIZE      0x28000
 #define OMAP16XX_DSP_START     0xE0000000
 #define OMAP16XX_DSPREG_SIZE   SZ_128K
 #define OMAP16XX_DSPREG_START  0xE1000000
 
-/*
- * ----------------------------------------------------------------------------
- * Memory used by power management
- * ----------------------------------------------------------------------------
- */
-
-#define OMAP1610_SRAM_IDLE_SUSPEND     (OMAP16XX_SRAM_BASE + OMAP1610_SRAM_SIZE - 0x200)
-#define OMAP1610_SRAM_API_SUSPEND      (OMAP1610_SRAM_IDLE_SUSPEND + 0x100)
-#define OMAP5912_SRAM_IDLE_SUSPEND     (OMAP16XX_SRAM_BASE + OMAP5912_SRAM_SIZE - 0x200)
-#define OMAP5912_SRAM_API_SUSPEND      (OMAP5912_SRAM_IDLE_SUSPEND + 0x100)
-
 /*
  * ---------------------------------------------------------------------------
  * Interrupts
diff --git a/include/asm-arm/arch-omap/omap24xx.h b/include/asm-arm/arch-omap/omap24xx.h
new file mode 100644 (file)
index 0000000..a910546
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef __ASM_ARCH_OMAP24XX_H
+#define __ASM_ARCH_OMAP24XX_H
+
+#define OMAP24XX_L4_IO_BASE    0x48000000
+
+/* interrupt controller */
+#define OMAP24XX_IC_BASE       (OMAP24XX_L4_IO_BASE + 0xfe000)
+#define VA_IC_BASE             IO_ADDRESS(OMAP24XX_IC_BASE)
+
+#define OMAP24XX_IVA_INTC_BASE 0x40000000
+
+#define IRQ_SIR_IRQ            0x0040
+
+#endif /* __ASM_ARCH_OMAP24XX_H */
+
index 599ab00f5488a5b0ebb14e352683cc473344703a..755b64c5e9f07342fdacf476c407226dbe66eab8 100644 (file)
 
 /* Syntax: XX_BASE = Virtual base address, XX_START = Physical base address */
 
-#define OMAP730_SRAM_BASE      0xD0000000
-#define OMAP730_SRAM_SIZE      (SZ_128K + SZ_64K + SZ_8K)
-#define OMAP730_SRAM_START     0x20000000
-
 #define OMAP730_DSP_BASE       0xE0000000
 #define OMAP730_DSP_SIZE       0x50000
 #define OMAP730_DSP_START      0xE0000000
index f209fc0953fb86559f39ffb48734ba93be13bf5d..fbd742d0c49997fc46e5ddc1299dd9d399242389 100644 (file)
 #define PER_EN                         0x1
 
 #define CPU_SUSPEND_SIZE               200
-#define ULPD_LOW_POWER_EN              0x0001
+#define ULPD_LOW_PWR_EN                        0x0001
+#define ULPD_DEEP_SLEEP_TRANSITION_EN  0x0010
+#define ULPD_SETUP_ANALOG_CELL_3_VAL   0
+#define ULPD_POWER_CTRL_REG_VAL                0x0219
 
 #define DSP_IDLE_DELAY                 10
 #define DSP_IDLE                       0x0040
 #define OMAP1510_BIG_SLEEP_REQUEST     0x0cc5
 #define OMAP1510_IDLE_LOOP_REQUEST     0x0c00
 #define OMAP1510_IDLE_CLOCK_DOMAINS    0x2
-#define OMAP1510_ULPD_LOW_POWER_REQ    0x0001
 
-#define OMAP1610_DEEP_SLEEP_REQUEST    0x17c7
-#define OMAP1610_BIG_SLEEP_REQUEST     TBD
+/* Both big sleep and deep sleep use same values. Difference is in ULPD. */
+#define OMAP1610_IDLECT1_SLEEP_VAL     0x13c7
+#define OMAP1610_IDLECT2_SLEEP_VAL     0x09c7
+#define OMAP1610_IDLECT3_VAL           0x3f
+#define OMAP1610_IDLECT3_SLEEP_ORMASK  0x2c
+#define OMAP1610_IDLECT3               0xfffece24
 #define OMAP1610_IDLE_LOOP_REQUEST     0x0400
-#define OMAP1610_IDLE_CLOCK_DOMAINS    0x09c7
-#define OMAP1610_ULPD_LOW_POWER_REQ    0x3
-
-#ifndef OMAP1510_SRAM_IDLE_SUSPEND
-#define OMAP1510_SRAM_IDLE_SUSPEND 0
-#endif
-#ifndef OMAP1610_SRAM_IDLE_SUSPEND
-#define OMAP1610_SRAM_IDLE_SUSPEND 0
-#endif
-#ifndef OMAP5912_SRAM_IDLE_SUSPEND
-#define OMAP5912_SRAM_IDLE_SUSPEND 0
-#endif
-
-#ifndef OMAP1510_SRAM_API_SUSPEND
-#define OMAP1510_SRAM_API_SUSPEND 0
-#endif
-#ifndef OMAP1610_SRAM_API_SUSPEND
-#define OMAP1610_SRAM_API_SUSPEND 0
-#endif
-#ifndef OMAP5912_SRAM_API_SUSPEND
-#define OMAP5912_SRAM_API_SUSPEND 0
-#endif
 
 #if     !defined(CONFIG_ARCH_OMAP1510) && \
-       !defined(CONFIG_ARCH_OMAP16XX)
+       !defined(CONFIG_ARCH_OMAP16XX) && \
+       !defined(CONFIG_ARCH_OMAP24XX)
 #error "Power management for this processor not implemented yet"
 #endif
 
 #ifndef __ASSEMBLER__
 extern void omap_pm_idle(void);
 extern void omap_pm_suspend(void);
-extern int omap1510_cpu_suspend(unsigned short, unsigned short);
-extern int omap1610_cpu_suspend(unsigned short, unsigned short);
-extern int omap1510_idle_loop_suspend(void);
-extern int omap1610_idle_loop_suspend(void);
+extern void omap1510_cpu_suspend(unsigned short, unsigned short);
+extern void omap1610_cpu_suspend(unsigned short, unsigned short);
+extern void omap1510_idle_loop_suspend(void);
+extern void omap1610_idle_loop_suspend(void);
+
+#ifdef CONFIG_OMAP_SERIAL_WAKE
+extern void omap_serial_wake_trigger(int enable);
+#else
+#define omap_serial_wake_trigger(x)    {}
+#endif /* CONFIG_OMAP_SERIAL_WAKE */
+
 extern unsigned int omap1510_cpu_suspend_sz;
 extern unsigned int omap1510_idle_loop_suspend_sz;
 extern unsigned int omap1610_cpu_suspend_sz;
@@ -161,6 +153,7 @@ enum arm_save_state {
        ARM_SLEEP_SAVE_ARM_CKCTL,
        ARM_SLEEP_SAVE_ARM_IDLECT1,
        ARM_SLEEP_SAVE_ARM_IDLECT2,
+       ARM_SLEEP_SAVE_ARM_IDLECT3,
        ARM_SLEEP_SAVE_ARM_EWUPCT,
        ARM_SLEEP_SAVE_ARM_RSTCT1,
        ARM_SLEEP_SAVE_ARM_RSTCT2,
diff --git a/include/asm-arm/arch-omap/serial.h b/include/asm-arm/arch-omap/serial.h
new file mode 100644 (file)
index 0000000..79a5297
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ *  linux/include/asm-arm/arch-omap/serial.h
+ *
+ * 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.
+ */
+
+#ifndef __ASM_ARCH_SERIAL_H
+#define __ASM_ARCH_SERIAL_H
+
+#if defined(CONFIG_ARCH_OMAP1)
+/* OMAP1 serial ports */
+#define OMAP_UART1_BASE                0xfffb0000
+#define OMAP_UART2_BASE                0xfffb0800
+#define OMAP_UART3_BASE                0xfffb9800
+#elif defined(CONFIG_ARCH_OMAP2)
+/* OMAP2 serial ports */
+#define OMAP_UART1_BASE                0x4806a000
+#define OMAP_UART2_BASE                0x4806c000
+#define OMAP_UART3_BASE                0x4806e000
+#endif
+
+#define OMAP_MAX_NR_PORTS      3
+#define OMAP1510_BASE_BAUD     (12000000/16)
+#define OMAP16XX_BASE_BAUD     (48000000/16)
+
+#define is_omap_port(p)        ({int __ret = 0;                        \
+                       if (p == IO_ADDRESS(OMAP_UART1_BASE) || \
+                           p == IO_ADDRESS(OMAP_UART2_BASE) || \
+                           p == IO_ADDRESS(OMAP_UART3_BASE))   \
+                               __ret = 1;                      \
+                       __ret;                                  \
+                       })
+
+#endif
index 3e640aba8c20f576410fb22b1ca72a365df431a6..3545c86859cc9a9700b02760a35fb1ba9a811ba8 100644 (file)
@@ -20,7 +20,7 @@
 #include <linux/config.h>
 #include <linux/types.h>
 #include <linux/serial_reg.h>
-#include <asm/arch/hardware.h>
+#include <asm/arch/serial.h>
 
 unsigned int system_rev;
 
@@ -34,8 +34,9 @@ static void
 putstr(const char *s)
 {
        volatile u8 * uart = 0;
-       int shift;
+       int shift = 2;
 
+#ifdef CONFIG_ARCH_OMAP
 #ifdef CONFIG_OMAP_LL_DEBUG_UART3
        uart = (volatile u8 *)(OMAP_UART3_BASE);
 #elif  CONFIG_OMAP_LL_DEBUG_UART2
@@ -44,6 +45,7 @@ putstr(const char *s)
        uart = (volatile u8 *)(OMAP_UART1_BASE);
 #endif
 
+#ifdef CONFIG_ARCH_OMAP1
        /* Determine which serial port to use */
        do {
                /* MMU is not on, so cpu_is_omapXXXX() won't work here */
@@ -51,14 +53,14 @@ putstr(const char *s)
 
                if (omap_id == OMAP_ID_730)
                        shift = 0;
-               else
-                       shift = 2;
 
                if (check_port(uart, shift))
                        break;
                /* Silent boot if no serial ports are enabled. */
                return;
        } while (0);
+#endif /* CONFIG_ARCH_OMAP1 */
+#endif
 
        /*
         * Now, xmit each character
index 324db06b5dd4b219f83316dd8a6d4aff1906e6d1..4b7aa0b8391e0741aab1fcee845ff1cc919421e1 100644 (file)
  * Shared data structures
  */
 extern struct platform_device corgiscoop_device;
+extern struct platform_device corgissp_device;
+extern struct platform_device corgifb_device;
 
 /*
  * External Functions
  */
 extern unsigned long corgi_ssp_ads7846_putget(unsigned long);
 extern unsigned long corgi_ssp_ads7846_get(void);
-extern void corgi_ssp_ads7846_put(ulong data);
+extern void corgi_ssp_ads7846_put(unsigned long data);
 extern void corgi_ssp_ads7846_lock(void);
 extern void corgi_ssp_ads7846_unlock(void);
-extern void corgi_ssp_lcdtg_send (u8 adrs, u8 data);
+extern void corgi_ssp_lcdtg_send (unsigned char adrs, unsigned char data);
 extern void corgi_ssp_blduty_set(int duty);
-extern int corgi_ssp_max1111_get(ulong data);
+extern int corgi_ssp_max1111_get(unsigned long data);
 
 #endif /* __ASM_ARCH_CORGI_H  */
 
index 7492ea7ea6141158f7bf24903541881dfa79db86..9718063a211959472bce3f7990cbdd5e8257948b 100644 (file)
@@ -10,6 +10,7 @@ struct mmc_host;
 struct pxamci_platform_data {
        unsigned int ocr_mask;                  /* available voltages */
        int (*init)(struct device *, irqreturn_t (*)(int, void *, struct pt_regs *), void *);
+       int (*get_ro)(struct device *);
        void (*setpower)(struct device *, unsigned int);
        void (*exit)(struct device *, void *);
 };
diff --git a/include/asm-arm/arch-s3c2410/anubis-cpld.h b/include/asm-arm/arch-s3c2410/anubis-cpld.h
new file mode 100644 (file)
index 0000000..5675b17
--- /dev/null
@@ -0,0 +1,24 @@
+/* linux/include/asm-arm/arch-s3c2410/anubis-cpld.h
+ *
+ * (c) 2005 Simtec Electronics
+ *     http://www.simtec.co.uk/products/
+ *     Ben Dooks <ben@simtec.co.uk>
+ *
+ * ANUBIS - CPLD control constants
+ *
+ * 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.
+ *
+ * Changelog:
+ *
+*/
+
+#ifndef __ASM_ARCH_ANUBISCPLD_H
+#define __ASM_ARCH_ANUBISCPLD_H
+
+/* CTRL2 - NAND WP control, IDE Reset assert/check */
+
+#define ANUBIS_CTRL1_NANDSEL           (0x3)
+
+#endif /* __ASM_ARCH_ANUBISCPLD_H */
diff --git a/include/asm-arm/arch-s3c2410/anubis-irq.h b/include/asm-arm/arch-s3c2410/anubis-irq.h
new file mode 100644 (file)
index 0000000..82f15db
--- /dev/null
@@ -0,0 +1,23 @@
+/* linux/include/asm-arm/arch-s3c2410/anubis-irq.h
+ *
+ * (c) 2005 Simtec Electronics
+ *     http://www.simtec.co.uk/products/
+ *     Ben Dooks <ben@simtec.co.uk>
+ *
+ *  ANUBIS - IRQ Number definitions
+ *
+ * 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.
+ *
+ * Changelog:
+ */
+
+#ifndef __ASM_ARCH_ANUBISIRQ_H
+#define __ASM_ARCH_ANUBISIRQ_H
+
+#define IRQ_IDE0       IRQ_EINT2
+#define IRQ_IDE1       IRQ_EINT3
+#define IRQ_ASIX       IRQ_EINT1
+
+#endif /* __ASM_ARCH_ANUBISIRQ_H */
diff --git a/include/asm-arm/arch-s3c2410/anubis-map.h b/include/asm-arm/arch-s3c2410/anubis-map.h
new file mode 100644 (file)
index 0000000..97741d6
--- /dev/null
@@ -0,0 +1,46 @@
+/* linux/include/asm-arm/arch-s3c2410/anubis-map.h
+ *
+ * (c) 2005 Simtec Electronics
+ *     http://www.simtec.co.uk/products/
+ *     Ben Dooks <ben@simtec.co.uk>
+ *
+ * ANUBIS - Memory map definitions
+ *
+ * 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.
+ *
+ * Changelog:
+*/
+
+/* needs arch/map.h including with this */
+
+#ifndef __ASM_ARCH_ANUBISMAP_H
+#define __ASM_ARCH_ANUBISMAP_H
+
+/* start peripherals off after the S3C2410 */
+
+#define ANUBIS_IOADDR(x)       (S3C2410_ADDR((x) + 0x02000000))
+
+#define ANUBIS_PA_CPLD         (S3C2410_CS1 | (1<<26))
+
+/* we put the CPLD registers next, to get them out of the way */
+
+#define ANUBIS_VA_CTRL1            ANUBIS_IOADDR(0x00000000)    /* 0x01300000 */
+#define ANUBIS_PA_CTRL1            (ANUBIS_PA_CPLD)
+
+#define ANUBIS_VA_CTRL2            ANUBIS_IOADDR(0x00100000)    /* 0x01400000 */
+#define ANUBIS_PA_CTRL2            (ANUBIS_PA_CPLD)
+
+#define ANUBIS_VA_CTRL3            ANUBIS_IOADDR(0x00200000)    /* 0x01500000 */
+#define ANUBIS_PA_CTRL3            (ANUBIS_PA_CPLD)
+
+#define ANUBIS_VA_CTRL4            ANUBIS_IOADDR(0x00300000)    /* 0x01600000 */
+#define ANUBIS_PA_CTRL4            (ANUBIS_PA_CPLD)
+
+#define ANUBIS_IDEPRI      ANUBIS_IOADDR(0x01000000)
+#define ANUBIS_IDEPRIAUX    ANUBIS_IOADDR(0x01100000)
+#define ANUBIS_IDESEC      ANUBIS_IOADDR(0x01200000)
+#define ANUBIS_IDESECAUX    ANUBIS_IOADDR(0x01300000)
+
+#endif /* __ASM_ARCH_ANUBISMAP_H */
diff --git a/include/asm-arm/auxvec.h b/include/asm-arm/auxvec.h
new file mode 100644 (file)
index 0000000..c0536f6
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASMARM_AUXVEC_H
+#define __ASMARM_AUXVEC_H
+
+#endif
index 485b6bdf4d7a1fde9812d12c6b3b43da53562aa6..a80b6607b2efe35281d476d852e106cd3d6ca31b 100644 (file)
@@ -1,87 +1,11 @@
 #ifndef _ARM_FCNTL_H
 #define _ARM_FCNTL_H
 
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
 #define O_DIRECTORY     040000 /* must be a directory */
 #define O_NOFOLLOW     0100000 /* don't follow links */
 #define O_DIRECT       0200000 /* direct disk access hint - currently ignored */
 #define O_LARGEFILE    0400000
-#define O_NOATIME      01000000
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
+#include <asm-generic/fcntl.h>
 
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
 #endif
diff --git a/include/asm-arm/futex.h b/include/asm-arm/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-arm/hdreg.h b/include/asm-arm/hdreg.h
deleted file mode 100644 (file)
index 7f7fd1a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/hdreg.h>
index a7c018b8a0d4b88f7da350709a94558dd103d3aa..a2fdad0138b3e5bf2e7e2500e97a8821fe7b036e 100644 (file)
@@ -77,12 +77,6 @@ static inline void set_fs (mm_segment_t fs)
 
 #define access_ok(type,addr,size)      (__range_ok(addr,size) == 0)
 
-/* this function will go away soon - use access_ok() instead */
-static inline int __deprecated verify_area(int type, const void __user *addr, unsigned long size)
-{
-       return access_ok(type, addr, size) ? 0 : -EFAULT;
-}
-
 /*
  * Single-value transfer routines.  They automatically use the right
  * size if we just have the right pointer type.  Note that the functions
diff --git a/include/asm-arm26/auxvec.h b/include/asm-arm26/auxvec.h
new file mode 100644 (file)
index 0000000..c0536f6
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASMARM_AUXVEC_H
+#define __ASMARM_AUXVEC_H
+
+#endif
index 485b6bdf4d7a1fde9812d12c6b3b43da53562aa6..d85995e7459e4e011bcd3215c5ebe4a970721f9b 100644 (file)
@@ -3,85 +3,11 @@
 
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
 #define O_DIRECTORY     040000 /* must be a directory */
 #define O_NOFOLLOW     0100000 /* don't follow links */
 #define O_DIRECT       0200000 /* direct disk access hint - currently ignored */
 #define O_LARGEFILE    0400000
-#define O_NOATIME      01000000
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
+#include <asm-generic/fcntl.h>
 
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
 #endif
diff --git a/include/asm-arm26/futex.h b/include/asm-arm26/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-arm26/hdreg.h b/include/asm-arm26/hdreg.h
deleted file mode 100644 (file)
index 7f7fd1a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/hdreg.h>
index ab9ce38c6aec994875f9a39ce8bfa63612b8388f..3f2dd1093e58b6a233c20f223043f7efaa8afc13 100644 (file)
@@ -40,12 +40,6 @@ extern int fixup_exception(struct pt_regs *regs);
 
 #define access_ok(type,addr,size)      (__range_ok(addr,size) == 0)
 
-/* this function will go away soon - use access_ok() instead */
-static inline int __deprecated verify_area(int type, const void * addr, unsigned long size)
-{
-       return access_ok(type, addr, size) ? 0 : -EFAULT;
-}
-
 /*
  * Single-value transfer routines.  They automatically use the right
  * size if we just have the right pointer type.  Note that the functions
diff --git a/include/asm-cris/auxvec.h b/include/asm-cris/auxvec.h
new file mode 100644 (file)
index 0000000..cb30b01
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASMCRIS_AUXVEC_H
+#define __ASMCRIS_AUXVEC_H
+
+#endif
index 61c563242b519707f9203e0720d4ce92f583ac60..46ab12db57397dfc44a7aa84f9c10ac5e97509d9 100644 (file)
@@ -1,90 +1 @@
-#ifndef _CRIS_FCNTL_H
-#define _CRIS_FCNTL_H
-
-/* verbatim copy of i386 version */
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECT        040000 /* direct disk access hint - currently ignored */
-#define O_LARGEFILE    0100000
-#define O_DIRECTORY    0200000 /* must be a directory */
-#define O_NOFOLLOW     0400000 /* don't follow links */
-#define O_NOATIME      01000000
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get f_flags */
-#define F_SETFD                2       /* set f_flags */
-#define F_GETFL                3       /* more flags (cloexec) */
-#define F_SETFL                4
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW        192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
-
-#endif
+#include <asm-generic/fcntl.h>
diff --git a/include/asm-cris/futex.h b/include/asm-cris/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
index 8e787fdaedd41835db69807807278d953b337c34..4fab5c3b2e15ca4ee294346535d14456145c520e 100644 (file)
@@ -1,6 +1,11 @@
 #ifndef _ASM_IRQ_H
 #define _ASM_IRQ_H
 
+/*
+ * IRQ line status macro IRQ_PER_CPU is used
+ */
+#define ARCH_HAS_IRQ_PER_CPU
+
 #include <asm/arch/irq.h>
 
 extern __inline__ int irq_canonicalize(int irq)
index 6db17221fd9e5f412002cc3c9a8d8a2a9f417f8d..7d50086eb5ea08a6de01e4f4f4f7735a2ec4eee0 100644 (file)
 #define __access_ok(addr,size) (__kernel_ok || __user_ok((addr),(size)))
 #define access_ok(type,addr,size) __access_ok((unsigned long)(addr),(size))
 
-/* this function will go away soon - use access_ok() instead */
-extern inline int __deprecated verify_area(int type, const void __user * addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
-
 #include <asm/arch/uaccess.h>
 
 /*
diff --git a/include/asm-frv/auxvec.h b/include/asm-frv/auxvec.h
new file mode 100644 (file)
index 0000000..0771077
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __FRV_AUXVEC_H
+#define __FRV_AUXVEC_H
+
+#endif
index d61b999f9973a2e4a0b4288b007ff8c1f3f64030..46ab12db57397dfc44a7aa84f9c10ac5e97509d9 100644 (file)
@@ -1,88 +1 @@
-#ifndef _ASM_FCNTL_H
-#define _ASM_FCNTL_H
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECT        040000 /* direct disk access hint */
-#define O_LARGEFILE    0100000
-#define O_DIRECTORY    0200000 /* must be a directory */
-#define O_NOFOLLOW     0400000 /* don't follow links */
-#define O_NOATIME      01000000
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
-#endif /* _ASM_FCNTL_H */
-
+#include <asm-generic/fcntl.h>
diff --git a/include/asm-frv/futex.h b/include/asm-frv/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
index 32dc52e883e54a31344405a48702003762688953..991b50fbba24d77b64c402389f2e93e0c48bb2a8 100644 (file)
@@ -67,12 +67,6 @@ static inline int ___range_ok(unsigned long addr, unsigned long size)
 #define access_ok(type,addr,size) (__range_ok((addr), (size)) == 0)
 #define __access_ok(addr,size) (__range_ok((addr), (size)) == 0)
 
-/* this function will go away soon - use access_ok() / __range_ok() instead */
-static inline int __deprecated verify_area(int type, const void * addr, unsigned long size)
-{
-       return __range_ok(addr, size);
-}
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
diff --git a/include/asm-generic/fcntl.h b/include/asm-generic/fcntl.h
new file mode 100644 (file)
index 0000000..b663520
--- /dev/null
@@ -0,0 +1,149 @@
+#ifndef _ASM_GENERIC_FCNTL_H
+#define _ASM_GENERIC_FCNTL_H
+
+#include <linux/config.h>
+#include <linux/types.h>
+
+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+   located on an ext2 file system */
+#define O_ACCMODE      00000003
+#define O_RDONLY       00000000
+#define O_WRONLY       00000001
+#define O_RDWR         00000002
+#ifndef O_CREAT
+#define O_CREAT                00000100        /* not fcntl */
+#endif
+#ifndef O_EXCL
+#define O_EXCL         00000200        /* not fcntl */
+#endif
+#ifndef O_NOCTTY
+#define O_NOCTTY       00000400        /* not fcntl */
+#endif
+#ifndef O_TRUNC
+#define O_TRUNC                00001000        /* not fcntl */
+#endif
+#ifndef O_APPEND
+#define O_APPEND       00002000
+#endif
+#ifndef O_NONBLOCK
+#define O_NONBLOCK     00004000
+#endif
+#ifndef O_SYNC
+#define O_SYNC         00010000
+#endif
+#ifndef FASYNC
+#define FASYNC         00020000        /* fcntl, for BSD compatibility */
+#endif
+#ifndef O_DIRECT
+#define O_DIRECT       00040000        /* direct disk access hint */
+#endif
+#ifndef O_LARGEFILE
+#define O_LARGEFILE    00100000
+#endif
+#ifndef O_DIRECTORY
+#define O_DIRECTORY    00200000        /* must be a directory */
+#endif
+#ifndef O_NOFOLLOW
+#define O_NOFOLLOW     00400000        /* don't follow links */
+#endif
+#ifndef O_NOATIME
+#define O_NOATIME      01000000
+#endif
+#ifndef O_NDELAY
+#define O_NDELAY       O_NONBLOCK
+#endif
+
+#define F_DUPFD                0       /* dup */
+#define F_GETFD                1       /* get close_on_exec */
+#define F_SETFD                2       /* set/clear close_on_exec */
+#define F_GETFL                3       /* get file->f_flags */
+#define F_SETFL                4       /* set file->f_flags */
+#ifndef F_GETLK
+#define F_GETLK                5
+#define F_SETLK                6
+#define F_SETLKW       7
+#endif
+#ifndef F_SETOWN
+#define F_SETOWN       8       /* for sockets. */
+#define F_GETOWN       9       /* for sockets. */
+#endif
+#ifndef F_SETSIG
+#define F_SETSIG       10      /* for sockets. */
+#define F_GETSIG       11      /* for sockets. */
+#endif
+
+/* for F_[GET|SET]FL */
+#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
+
+/* for posix fcntl() and lockf() */
+#ifndef F_RDLCK
+#define F_RDLCK                0
+#define F_WRLCK                1
+#define F_UNLCK                2
+#endif
+
+/* for old implementation of bsd flock () */
+#ifndef F_EXLCK
+#define F_EXLCK                4       /* or 3 */
+#define F_SHLCK                8       /* or 4 */
+#endif
+
+/* for leases */
+#ifndef F_INPROGRESS
+#define F_INPROGRESS   16
+#endif
+
+/* operations for bsd flock(), also used by the kernel implementation */
+#define LOCK_SH                1       /* shared lock */
+#define LOCK_EX                2       /* exclusive lock */
+#define LOCK_NB                4       /* or'd with one of the above to prevent
+                                  blocking */
+#define LOCK_UN                8       /* remove lock */
+
+#define LOCK_MAND      32      /* This is a mandatory flock ... */
+#define LOCK_READ      64      /* which allows concurrent read operations */
+#define LOCK_WRITE     128     /* which allows concurrent write operations */
+#define LOCK_RW                192     /* which allows concurrent read & write ops */
+
+#define F_LINUX_SPECIFIC_BASE  1024
+
+#ifndef HAVE_ARCH_STRUCT_FLOCK
+#ifndef __ARCH_FLOCK_PAD
+#define __ARCH_FLOCK_PAD
+#endif
+
+struct flock {
+       short   l_type;
+       short   l_whence;
+       off_t   l_start;
+       off_t   l_len;
+       pid_t   l_pid;
+       __ARCH_FLOCK_PAD
+};
+#endif
+
+#ifndef CONFIG_64BIT
+
+#ifndef F_GETLK64
+#define F_GETLK64      12      /*  using 'struct flock64' */
+#define F_SETLK64      13
+#define F_SETLKW64     14
+#endif
+
+#ifndef HAVE_ARCH_STRUCT_FLOCK64
+#ifndef __ARCH_FLOCK64_PAD
+#define __ARCH_FLOCK64_PAD
+#endif
+
+struct flock64 {
+       short  l_type;
+       short  l_whence;
+       loff_t l_start;
+       loff_t l_len;
+       pid_t  l_pid;
+       __ARCH_FLOCK64_PAD
+};
+#endif
+#endif /* !CONFIG_64BIT */
+
+#endif /* _ASM_GENERIC_FCNTL_H */
diff --git a/include/asm-generic/hdreg.h b/include/asm-generic/hdreg.h
deleted file mode 100644 (file)
index 7051fba..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#warning <asm/hdreg.h> is obsolete, please do not use it
-
-#ifndef __ASM_GENERIC_HDREG_H
-#define __ASM_GENERIC_HDREG_H
-
-typedef unsigned long ide_ioreg_t;
-
-#endif /* __ASM_GENERIC_HDREG_H */
index 450eae22c39a3e2a517dea059a7e3b01bb7ce6d6..886dbd11689991396238d2cc6bdf9f09374762ff 100644 (file)
@@ -12,5 +12,6 @@ extern char _sextratext[] __attribute__((weak));
 extern char _eextratext[] __attribute__((weak));
 extern char _end[];
 extern char __per_cpu_start[], __per_cpu_end[];
+extern char __kprobes_text_start[], __kprobes_text_end[];
 
 #endif /* _ASM_GENERIC_SECTIONS_H_ */
index 6c90f0f36eec9990dc9f00f87454215c2acfe9c4..4dc8ddb401c15828797b4a7e21586e4b6d3e3418 100644 (file)
@@ -16,9 +16,9 @@
  * The main single-value unaligned transfer routines.
  */
 #define get_unaligned(ptr) \
-       ((__typeof__(*(ptr)))__get_unaligned((ptr), sizeof(*(ptr))))
+       __get_unaligned((ptr), sizeof(*(ptr)))
 #define put_unaligned(x,ptr) \
-       __put_unaligned((unsigned long)(x), (ptr), sizeof(*(ptr)))
+       __put_unaligned((__u64)(x), (ptr), sizeof(*(ptr)))
 
 /*
  * This function doesn't actually exist.  The idea is that when
@@ -36,19 +36,19 @@ struct __una_u16 { __u16 x __attribute__((packed)); };
  * Elemental unaligned loads 
  */
 
-static inline unsigned long __uldq(const __u64 *addr)
+static inline __u64 __uldq(const __u64 *addr)
 {
        const struct __una_u64 *ptr = (const struct __una_u64 *) addr;
        return ptr->x;
 }
 
-static inline unsigned long __uldl(const __u32 *addr)
+static inline __u32 __uldl(const __u32 *addr)
 {
        const struct __una_u32 *ptr = (const struct __una_u32 *) addr;
        return ptr->x;
 }
 
-static inline unsigned long __uldw(const __u16 *addr)
+static inline __u16 __uldw(const __u16 *addr)
 {
        const struct __una_u16 *ptr = (const struct __una_u16 *) addr;
        return ptr->x;
@@ -78,7 +78,7 @@ static inline void __ustw(__u16 val, __u16 *addr)
 
 #define __get_unaligned(ptr, size) ({          \
        const void *__gu_p = ptr;               \
-       unsigned long val;                      \
+       __typeof__(*(ptr)) val;                 \
        switch (size) {                         \
        case 1:                                 \
                val = *(const __u8 *)__gu_p;    \
index 3fa94288aa9329473e7eda8d7f8d5893dd5c99ba..6f857be2b6447ac3f64f134ce45844ef2555b11b 100644 (file)
@@ -97,3 +97,9 @@
                VMLINUX_SYMBOL(__lock_text_start) = .;                  \
                *(.spinlock.text)                                       \
                VMLINUX_SYMBOL(__lock_text_end) = .;
+
+#define KPROBES_TEXT                                                   \
+               ALIGN_FUNCTION();                                       \
+               VMLINUX_SYMBOL(__kprobes_text_start) = .;               \
+               *(.kprobes.text)                                        \
+               VMLINUX_SYMBOL(__kprobes_text_end) = .;
diff --git a/include/asm-h8300/auxvec.h b/include/asm-h8300/auxvec.h
new file mode 100644 (file)
index 0000000..1d36fe3
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASMH8300_AUXVEC_H
+#define __ASMH8300_AUXVEC_H
+
+#endif
index 355350a57bf97b6ef1d054375a2b2395c6a3b973..1952cb2e3b06e406f865cba82eb64fb790628804 100644 (file)
@@ -1,87 +1,11 @@
 #ifndef _H8300_FCNTL_H
 #define _H8300_FCNTL_H
 
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE        0003
-#define O_RDONLY           00
-#define O_WRONLY           01
-#define O_RDWR             02
-#define O_CREAT                  0100  /* not fcntl */
-#define O_EXCL           0200  /* not fcntl */
-#define O_NOCTTY         0400  /* not fcntl */
-#define O_TRUNC                 01000  /* not fcntl */
-#define O_APPEND        02000
-#define O_NONBLOCK      04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC         010000
-#define FASYNC         020000  /* fcntl, for BSD compatibility */
 #define O_DIRECTORY    040000  /* must be a directory */
 #define O_NOFOLLOW     0100000 /* don't follow links */
 #define O_DIRECT       0200000 /* direct disk access hint - currently ignored */
 #define O_LARGEFILE    0400000
-#define O_NOATIME      01000000
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
+#include <asm-generic/fcntl.h>
 
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
 #endif /* _H8300_FCNTL_H */
diff --git a/include/asm-h8300/futex.h b/include/asm-h8300/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-h8300/hdreg.h b/include/asm-h8300/hdreg.h
deleted file mode 100644 (file)
index 36d0c06..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- *  linux/include/asm-h8300/hdreg.h
- *
- *  Copyright (C) 1994-1996  Linus Torvalds & authors
- */
-
-#warning this file is obsolete, please do not use it
-
-#ifndef _H8300_HDREG_H
-#define _H8300_HDREG_H
-
-typedef unsigned int   q40ide_ioreg_t;
-typedef unsigned char * ide_ioreg_t;
-
-#endif /* _H8300_HDREG_H */
index 1480f307a4749f69e1199da2c03c1b41410084d4..ebe58c6c83878396ada351e1f142b55a159c899a 100644 (file)
@@ -24,12 +24,6 @@ static inline int __access_ok(unsigned long addr, unsigned long size)
        return(RANGE_CHECK_OK(addr, size, 0L, (unsigned long)&_ramend));
 }
 
-/* this function will go away soon - use access_ok() instead */
-static inline int __deprecated verify_area(int type, const void *addr, unsigned long size)
-{
-       return access_ok(type,addr,size)?0:-EFAULT;
-}
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
index cf828ace13f95d9e92b9403f95b788ca7d21017a..df4ed323aa4de7be66e707cbdc59c1ff9a37a4cf 100644 (file)
@@ -103,7 +103,7 @@ __acpi_release_global_lock (unsigned int *lock)
         :"=r"(n_hi), "=r"(n_lo)     \
         :"0"(n_hi), "1"(n_lo))
 
-#ifdef CONFIG_ACPI_BOOT 
+#ifdef CONFIG_ACPI 
 extern int acpi_lapic;
 extern int acpi_ioapic;
 extern int acpi_noirq;
@@ -146,13 +146,6 @@ static inline void check_acpi_pci(void) { }
 
 #endif
 
-#else  /* CONFIG_ACPI_BOOT */
-#  define acpi_lapic 0
-#  define acpi_ioapic 0
-
-#endif
-
-#ifdef CONFIG_ACPI_PCI
 static inline void acpi_noirq_set(void) { acpi_noirq = 1; }
 static inline void acpi_disable_pci(void) 
 {
@@ -160,11 +153,16 @@ static inline void acpi_disable_pci(void)
        acpi_noirq_set();
 }
 extern int acpi_irq_balance_set(char *str);
-#else
+
+#else  /* !CONFIG_ACPI */
+
+#define acpi_lapic 0
+#define acpi_ioapic 0
 static inline void acpi_noirq_set(void) { }
 static inline void acpi_disable_pci(void) { }
-static inline int acpi_irq_balance_set(char *str) { return 0; }
-#endif
+
+#endif /* !CONFIG_ACPI */
+
 
 #ifdef CONFIG_ACPI_SLEEP
 
diff --git a/include/asm-i386/auxvec.h b/include/asm-i386/auxvec.h
new file mode 100644 (file)
index 0000000..395e130
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef __ASMi386_AUXVEC_H
+#define __ASMi386_AUXVEC_H
+
+/*
+ * Architecture-neutral AT_ values in 0-17, leave some room
+ * for more of them, start the x86-specific ones at 32.
+ */
+#define AT_SYSINFO             32
+#define AT_SYSINFO_EHDR                33
+
+#endif
index 130bdc8c68cfd381f3ed731de5d4d9e9a4b31a2e..fa11117d3cfac32de2b2e6b3694c8d65f56b5ac5 100644 (file)
@@ -9,6 +9,7 @@
 #include <asm/user.h>
 #include <asm/processor.h>
 #include <asm/system.h>                /* for savesegment */
+#include <asm/auxvec.h>
 
 #include <linux/utsname.h>
 
@@ -109,13 +110,6 @@ typedef struct user_fxsr_struct elf_fpxregset_t;
 
 #define ELF_PLATFORM  (system_utsname.machine)
 
-/*
- * Architecture-neutral AT_ values in 0-17, leave some room
- * for more of them, start the x86-specific ones at 32.
- */
-#define AT_SYSINFO             32
-#define AT_SYSINFO_EHDR                33
-
 #ifdef __KERNEL__
 #define SET_PERSONALITY(ex, ibcs2) do { } while (0)
 
index 511cde94a3ed0fe230cd71d8214617113130121b..46ab12db57397dfc44a7aa84f9c10ac5e97509d9 100644 (file)
@@ -1,88 +1 @@
-#ifndef _I386_FCNTL_H
-#define _I386_FCNTL_H
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECT        040000 /* direct disk access hint */
-#define O_LARGEFILE    0100000
-#define O_DIRECTORY    0200000 /* must be a directory */
-#define O_NOFOLLOW     0400000 /* don't follow links */
-#define O_NOATIME      01000000
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
-
-#endif
+#include <asm-generic/fcntl.h>
index c94cac958389439233e1965afba9f69afd32dcfc..cfb1c61d3b9c0b933766a9e70acc61db561642cf 100644 (file)
@@ -76,7 +76,7 @@ enum fixed_addresses {
        FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */
        FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
 #endif
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
        FIX_ACPI_BEGIN,
        FIX_ACPI_END = FIX_ACPI_BEGIN + FIX_ACPI_PAGES - 1,
 #endif
diff --git a/include/asm-i386/futex.h b/include/asm-i386/futex.h
new file mode 100644 (file)
index 0000000..44b9db8
--- /dev/null
@@ -0,0 +1,108 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/system.h>
+#include <asm/processor.h>
+#include <asm/uaccess.h>
+
+#define __futex_atomic_op1(insn, ret, oldval, uaddr, oparg) \
+  __asm__ __volatile (                                         \
+"1:    " insn "\n"                                             \
+"2:    .section .fixup,\"ax\"\n\
+3:     mov     %3, %1\n\
+       jmp     2b\n\
+       .previous\n\
+       .section __ex_table,\"a\"\n\
+       .align  8\n\
+       .long   1b,3b\n\
+       .previous"                                              \
+       : "=r" (oldval), "=r" (ret), "=m" (*uaddr)              \
+       : "i" (-EFAULT), "m" (*uaddr), "0" (oparg), "1" (0))
+
+#define __futex_atomic_op2(insn, ret, oldval, uaddr, oparg) \
+  __asm__ __volatile (                                         \
+"1:    movl    %2, %0\n\
+       movl    %0, %3\n"                                       \
+       insn "\n"                                               \
+"2:    " LOCK_PREFIX "cmpxchgl %3, %2\n\
+       jnz     1b\n\
+3:     .section .fixup,\"ax\"\n\
+4:     mov     %5, %1\n\
+       jmp     3b\n\
+       .previous\n\
+       .section __ex_table,\"a\"\n\
+       .align  8\n\
+       .long   1b,4b,2b,4b\n\
+       .previous"                                              \
+       : "=&a" (oldval), "=&r" (ret), "=m" (*uaddr),           \
+         "=&r" (tem)                                           \
+       : "r" (oparg), "i" (-EFAULT), "m" (*uaddr), "1" (0))
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       if (op == FUTEX_OP_SET)
+               __futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg);
+       else {
+#ifndef CONFIG_X86_BSWAP
+               if (boot_cpu_data.x86 == 3)
+                       ret = -ENOSYS;
+               else
+#endif
+               switch (op) {
+               case FUTEX_OP_ADD:
+                       __futex_atomic_op1(LOCK_PREFIX "xaddl %0, %2", ret,
+                                          oldval, uaddr, oparg);
+                       break;
+               case FUTEX_OP_OR:
+                       __futex_atomic_op2("orl %4, %3", ret, oldval, uaddr,
+                                          oparg);
+                       break;
+               case FUTEX_OP_ANDN:
+                       __futex_atomic_op2("andl %4, %3", ret, oldval, uaddr,
+                                          ~oparg);
+                       break;
+               case FUTEX_OP_XOR:
+                       __futex_atomic_op2("xorl %4, %3", ret, oldval, uaddr,
+                                          oparg);
+                       break;
+               default:
+                       ret = -ENOSYS;
+               }
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-i386/hdreg.h b/include/asm-i386/hdreg.h
deleted file mode 100644 (file)
index 5989bbc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#warning this file is obsolete, please do not use it
index 002c203ccd6ac98441f4df66e5d2926902f1a23a..51c4e5fe6062d0e239f257521804d342f008b33e 100644 (file)
@@ -195,12 +195,12 @@ extern int skip_ioapic_setup;
  */
 #define io_apic_assign_pci_irqs (mp_irq_entries && !skip_ioapic_setup && io_apic_irqs)
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 extern int io_apic_get_unique_id (int ioapic, int apic_id);
 extern int io_apic_get_version (int ioapic);
 extern int io_apic_get_redir_entries (int ioapic);
 extern int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low);
-#endif /*CONFIG_ACPI_BOOT*/
+#endif /* CONFIG_ACPI */
 
 extern int (*ioapic_renumber_irq)(int ioapic, int irq);
 
index d84a9c326c2238e70cdc3159d18dd864a481fd01..64a0b8e6afeb27137c70b45ff981023ac2fad532 100644 (file)
@@ -27,14 +27,14 @@ extern unsigned long mp_lapic_addr;
 extern int pic_mode;
 extern int using_apic_timer;
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 extern void mp_register_lapic (u8 id, u8 enabled);
 extern void mp_register_lapic_address (u64 address);
 extern void mp_register_ioapic (u8 id, u32 address, u32 gsi_base);
 extern void mp_override_legacy_irq (u8 bus_irq, u8 polarity, u8 trigger, u32 gsi);
 extern void mp_config_acpi_legacy_irqs (void);
 extern int mp_register_gsi (u32 gsi, int edge_level, int active_high_low);
-#endif /*CONFIG_ACPI_BOOT*/
+#endif /* CONFIG_ACPI */
 
 #define PHYSID_ARRAY_SIZE      BITS_TO_LONGS(MAX_APICS)
 
index 886867aea947094185fcac17610acc67f9310caf..89ab7e2bc5aaac8a1e230fbd7772ff5340e7b3a1 100644 (file)
@@ -83,30 +83,6 @@ extern struct movsl_mask {
  */
 #define access_ok(type,addr,size) (likely(__range_ok(addr,size) == 0))
 
-/**
- * verify_area: - Obsolete/deprecated and will go away soon,
- * use access_ok() instead.
- * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE
- * @addr: User space pointer to start of block to check
- * @size: Size of block to check
- *
- * Context: User context only.  This function may sleep.
- *
- * This function has been replaced by access_ok().
- *
- * Checks if a pointer to a block of memory in user space is valid.
- *
- * Returns zero if the memory block may be valid, -EFAULT
- * if it is definitely invalid.
- *
- * See access_ok() for more details.
- */
-static inline int __deprecated verify_area(int type, const void __user * addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
index 9271d74c64ccffc728bf3b5a2070adc4b2104a3d..56d2ddc97b30cd9c236e8b173edeea52ae2fc0c0 100644 (file)
@@ -11,6 +11,7 @@
 #define _ASM_IA64_ACPI_EXT_H
 
 #include <linux/types.h>
+#include <acpi/actypes.h>
 
 extern acpi_status hp_acpi_csr_space (acpi_handle, u64 *base, u64 *length);
 
diff --git a/include/asm-ia64/auxvec.h b/include/asm-ia64/auxvec.h
new file mode 100644 (file)
index 0000000..23cebe5
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _ASM_IA64_AUXVEC_H
+#define _ASM_IA64_AUXVEC_H
+
+/*
+ * Architecture-neutral AT_ values are in the range 0-17.  Leave some room for more of
+ * them, start the architecture-specific ones at 32.
+ */
+#define AT_SYSINFO     32
+#define AT_SYSINFO_EHDR        33
+
+#endif /* _ASM_IA64_AUXVEC_H */
index 0c05e5bad8a0fe01e4ba88abcb84d1516014d414..aaf11f4e916997643d60c7d45fb4718ac5092363 100644 (file)
@@ -13,10 +13,10 @@ typedef s32         compat_time_t;
 typedef s32            compat_clock_t;
 typedef s32            compat_key_t;
 typedef s32            compat_pid_t;
-typedef u16            compat_uid_t;
-typedef u16            compat_gid_t;
-typedef u32            compat_uid32_t;
-typedef u32            compat_gid32_t;
+typedef u16            __compat_uid_t;
+typedef u16            __compat_gid_t;
+typedef u32            __compat_uid32_t;
+typedef u32            __compat_gid32_t;
 typedef u16            compat_mode_t;
 typedef u32            compat_ino_t;
 typedef u16            compat_dev_t;
@@ -50,8 +50,8 @@ struct compat_stat {
        compat_ino_t    st_ino;
        compat_mode_t   st_mode;
        compat_nlink_t  st_nlink;
-       compat_uid_t    st_uid;
-       compat_gid_t    st_gid;
+       __compat_uid_t  st_uid;
+       __compat_gid_t  st_gid;
        compat_dev_t    st_rdev;
        u16             __pad2;
        u32             st_size;
@@ -120,10 +120,10 @@ typedef u32               compat_sigset_word;
 
 struct compat_ipc64_perm {
        compat_key_t key;
-       compat_uid32_t uid;
-       compat_gid32_t gid;
-       compat_uid32_t cuid;
-       compat_gid32_t cgid;
+       __compat_uid32_t uid;
+       __compat_gid32_t gid;
+       __compat_uid32_t cuid;
+       __compat_gid32_t cgid;
        unsigned short mode;
        unsigned short __pad1;
        unsigned short seq;
index 7d4ccc4b976e2150fb4ab909902c68cf9ea701af..446fce036fd929eedb87ffdf95917703a568a9ae 100644 (file)
@@ -12,6 +12,7 @@
 
 #include <asm/fpu.h>
 #include <asm/page.h>
+#include <asm/auxvec.h>
 
 /*
  * This is used to ensure we don't load something for the wrong architecture.
@@ -177,13 +178,6 @@ extern void ia64_elf_core_copy_regs (struct pt_regs *src, elf_gregset_t dst);
    relevant until we have real hardware to play with... */
 #define ELF_PLATFORM   NULL
 
-/*
- * Architecture-neutral AT_ values are in the range 0-17.  Leave some room for more of
- * them, start the architecture-specific ones at 32.
- */
-#define AT_SYSINFO     32
-#define AT_SYSINFO_EHDR        33
-
 #ifdef __KERNEL__
 #define SET_PERSONALITY(ex, ibcs2)     set_personality(PER_LINUX)
 #define elf_read_implies_exec(ex, executable_stack)                                    \
index cee16ea1780aa6e9046bd2982ad9694b2188018d..1dd275dc8f653a0b6be00f469998bfa8711044a0 100644 (file)
@@ -1,87 +1,13 @@
 #ifndef _ASM_IA64_FCNTL_H
 #define _ASM_IA64_FCNTL_H
 /*
- * Based on <asm-i386/fcntl.h>.
- *
  * Modified 1998-2000
  *     David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co.
  */
 
-/*
- * open/fcntl - O_SYNC is only implemented on blocks devices and on
- * files located on an ext2 file system
- */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECT        040000 /* direct disk access hint - currently ignored */
-#define O_LARGEFILE    0100000
-#define O_DIRECTORY    0200000 /* must be a directory */
-#define O_NOFOLLOW     0400000 /* don't follow links */
-#define O_NOATIME      01000000
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
-
 #define force_o_largefile()    \
                (personality(current->personality) != PER_LINUX32)
 
+#include <asm-generic/fcntl.h>
+
 #endif /* _ASM_IA64_FCNTL_H */
diff --git a/include/asm-ia64/futex.h b/include/asm-ia64/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-ia64/hdreg.h b/include/asm-ia64/hdreg.h
deleted file mode 100644 (file)
index 83b5161..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- *  linux/include/asm-ia64/hdreg.h
- *
- *  Copyright (C) 1994-1996  Linus Torvalds & authors
- */
-
-#warning this file is obsolete, please do not use it
-
-#ifndef __ASM_IA64_HDREG_H
-#define __ASM_IA64_HDREG_H
-
-typedef unsigned short ide_ioreg_t;
-
-#endif /* __ASM_IA64_HDREG_H */
index 041ab8c51a6409469c1e40e3652814ac666f9817..0cf119b42f7d5c4d1d25ce4eb0e55b9a849d52cb 100644 (file)
@@ -116,13 +116,6 @@ __ia64_local_vector_to_irq (ia64_vector vec)
  * and to obtain the irq descriptor for a given irq number.
  */
 
-/* Return a pointer to the irq descriptor for IRQ.  */
-static inline irq_desc_t *
-irq_descp (int irq)
-{
-       return irq_desc + irq;
-}
-
 /* Extract the IA-64 vector that corresponds to IRQ.  */
 static inline ia64_vector
 irq_to_vector (int irq)
index bd07d11d9f37ac81e55a51c7e8ea35b0f19ce0c3..cd984d08fd15b09f27cdc28c4698b38d7bd57ddc 100644 (file)
 #define NR_IRQS                256
 #define NR_IRQ_VECTORS NR_IRQS
 
+/*
+ * IRQ line status macro IRQ_PER_CPU is used
+ */
+#define ARCH_HAS_IRQ_PER_CPU
+
 static __inline__ int
 irq_canonicalize (int irq)
 {
@@ -30,12 +35,6 @@ extern void disable_irq_nosync (unsigned int);
 extern void enable_irq (unsigned int);
 extern void set_irq_affinity_info (unsigned int irq, int dest, int redir);
 
-#ifdef CONFIG_SMP
-extern void move_irq(int irq);
-#else
-#define move_irq(irq)
-#endif
-
 struct irqaction;
 struct pt_regs;
 int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *);
index bf36a32e37e4661dd4abaa944f55e7776c16ee65..573a3574a24fe86ebcd4ecb5be7800c3057b4df5 100644 (file)
@@ -92,6 +92,7 @@ struct arch_specific_insn {
        kprobe_opcode_t insn;
  #define INST_FLAG_FIX_RELATIVE_IP_ADDR                1
  #define INST_FLAG_FIX_BRANCH_REG              2
+ #define INST_FLAG_BREAK_INST                  4
        unsigned long inst_flag;
        unsigned short target_br_reg;
 };
index 91bbd1f2246140121bbaec497101790c6dc278cf..94e07e7273955b1174537b9f0093612c057c1ee0 100644 (file)
@@ -20,9 +20,6 @@
 #include <asm/ptrace.h>
 #include <asm/ustack.h>
 
-/* Our arch specific arch_init_sched_domain is in arch/ia64/kernel/domain.c */
-#define ARCH_HAS_SCHED_DOMAIN
-
 #define IA64_NUM_DBG_REGS      8
 /*
  * Limits for PMC and PMD are set to less than maximum architected values
index 399bc29729fd2c532b20d472fcb208b83be35fa2..a9f738bf18a7e739325a4221269128fa0857ba2b 100644 (file)
@@ -98,29 +98,6 @@ void build_cpu_to_node_map(void);
        .nr_balance_failed      = 0,                    \
 }
 
-/* sched_domains SD_ALLNODES_INIT for IA64 NUMA machines */
-#define SD_ALLNODES_INIT (struct sched_domain) {       \
-       .span                   = CPU_MASK_NONE,        \
-       .parent                 = NULL,                 \
-       .groups                 = NULL,                 \
-       .min_interval           = 64,                   \
-       .max_interval           = 64*num_online_cpus(), \
-       .busy_factor            = 128,                  \
-       .imbalance_pct          = 133,                  \
-       .cache_hot_time         = (10*1000000),         \
-       .cache_nice_tries       = 1,                    \
-       .busy_idx               = 3,                    \
-       .idle_idx               = 3,                    \
-       .newidle_idx            = 0, /* unused */       \
-       .wake_idx               = 0, /* unused */       \
-       .forkexec_idx           = 0, /* unused */       \
-       .per_cpu_gain           = 100,                  \
-       .flags                  = SD_LOAD_BALANCE,      \
-       .last_balance           = jiffies,              \
-       .balance_interval       = 64,                   \
-       .nr_balance_failed      = 0,                    \
-}
-
 #endif /* CONFIG_NUMA */
 
 #include <asm-generic/topology.h>
index 8edd9a90949cf9fa94134f9ebb3b71a889d71322..3a7829bb5954030cfb3a2eee73620de5a3f37403 100644 (file)
 })
 #define access_ok(type, addr, size)    __access_ok((addr), (size), get_fs())
 
-/* this function will go away soon - use access_ok() instead */
-static inline int __deprecated
-verify_area (int type, const void __user *addr, unsigned long size)
-{
-       return access_ok(type, addr, size) ? 0 : -EFAULT;
-}
-
 /*
  * These are the main single-value transfer routines.  They automatically
  * use the right size if we just have the right pointer type.
diff --git a/include/asm-m32r/auxvec.h b/include/asm-m32r/auxvec.h
new file mode 100644 (file)
index 0000000..f76dcc8
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef _ASM_M32R__AUXVEC_H
+#define _ASM_M32R__AUXVEC_H
+
+#endif  /* _ASM_M32R__AUXVEC_H */
index 3e3089572028f85e05b314536914fc08ac25f6c6..46ab12db57397dfc44a7aa84f9c10ac5e97509d9 100644 (file)
@@ -1,92 +1 @@
-#ifndef _ASM_M32R_FCNTL_H
-#define _ASM_M32R_FCNTL_H
-
-/* $Id$ */
-
-/* orig : i386 2.4.18 */
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECT        040000 /* direct disk access hint */
-#define O_LARGEFILE    0100000
-#define O_DIRECTORY    0200000 /* must be a directory */
-#define O_NOFOLLOW     0400000 /* don't follow links */
-#define O_NOATIME      01000000
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
-
-#endif  /* _ASM_M32R_FCNTL_H */
+#include <asm-generic/fcntl.h>
diff --git a/include/asm-m32r/futex.h b/include/asm-m32r/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-m32r/hdreg.h b/include/asm-m32r/hdreg.h
deleted file mode 100644 (file)
index 7f7fd1a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/hdreg.h>
index bbb8ac4018a070d615d9df5d6fa356da3ed91ded..93d863c455a19ff302af1e231a578616bc1d9270 100644 (file)
@@ -120,31 +120,6 @@ static inline int access_ok(int type, const void *addr, unsigned long size)
 }
 #endif /* CONFIG_MMU */
 
-/**
- * verify_area: - Obsolete/deprecated and will go away soon,
- * use access_ok() instead.
- * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE
- * @addr: User space pointer to start of block to check
- * @size: Size of block to check
- *
- * Context: User context only.  This function may sleep.
- *
- * This function has been replaced by access_ok().
- *
- * Checks if a pointer to a block of memory in user space is valid.
- *
- * Returns zero if the memory block may be valid, -EFAULT
- * if it is definitely invalid.
- *
- * See access_ok() for more details.
- */
-static inline int __deprecated verify_area(int type, const void __user *addr,
-                             unsigned long size)
-{
-       return access_ok(type, addr, size) ? 0 : -EFAULT;
-}
-
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
diff --git a/include/asm-m68k/auxvec.h b/include/asm-m68k/auxvec.h
new file mode 100644 (file)
index 0000000..844d6d5
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASMm68k_AUXVEC_H
+#define __ASMm68k_AUXVEC_H
+
+#endif
index 0d4212983a3313221c5cf31bea0f0fc8e16c2863..1c369b20dc45b7587ad0993cb272dd57390b50d1 100644 (file)
@@ -1,87 +1,11 @@
 #ifndef _M68K_FCNTL_H
 #define _M68K_FCNTL_H
 
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE        0003
-#define O_RDONLY           00
-#define O_WRONLY           01
-#define O_RDWR             02
-#define O_CREAT                  0100  /* not fcntl */
-#define O_EXCL           0200  /* not fcntl */
-#define O_NOCTTY         0400  /* not fcntl */
-#define O_TRUNC                 01000  /* not fcntl */
-#define O_APPEND        02000
-#define O_NONBLOCK      04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC         010000
-#define FASYNC         020000  /* fcntl, for BSD compatibility */
 #define O_DIRECTORY    040000  /* must be a directory */
 #define O_NOFOLLOW     0100000 /* don't follow links */
 #define O_DIRECT       0200000 /* direct disk access hint - currently ignored */
 #define O_LARGEFILE    0400000
-#define O_NOATIME      01000000
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
+#include <asm-generic/fcntl.h>
 
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
 #endif /* _M68K_FCNTL_H */
diff --git a/include/asm-m68k/futex.h b/include/asm-m68k/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-m68k/hdreg.h b/include/asm-m68k/hdreg.h
deleted file mode 100644 (file)
index 5989bbc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#warning this file is obsolete, please do not use it
index 605e6cb811f80847fc6646ace670d2312da7339e..f5cedf19cf682c51349cd4b0856162ad0d6a1bf0 100644 (file)
 /* We let the MMU do all checking */
 #define access_ok(type,addr,size) 1
 
-/* this function will go away soon - use access_ok() instead */
-static inline int __deprecated verify_area(int type, const void *addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
diff --git a/include/asm-m68knommu/auxvec.h b/include/asm-m68knommu/auxvec.h
new file mode 100644 (file)
index 0000000..844d6d5
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASMm68k_AUXVEC_H
+#define __ASMm68k_AUXVEC_H
+
+#endif
diff --git a/include/asm-m68knommu/futex.h b/include/asm-m68knommu/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-m68knommu/hdreg.h b/include/asm-m68knommu/hdreg.h
deleted file mode 100644 (file)
index 5cdd9b0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-m68k/hdreg.h>
index f0be74bb353c634d04ea2400e30b2a1d180e7ac1..05be9515a2d2e8509cdac90753c3903435b24b70 100644 (file)
@@ -23,12 +23,6 @@ static inline int _access_ok(unsigned long addr, unsigned long size)
                (is_in_rom(addr) && is_in_rom(addr+size)));
 }
 
-/* this function will go away soon - use access_ok() instead */
-extern inline int __deprecated verify_area(int type, const void * addr, unsigned long size)
-{
-       return access_ok(type,addr,size)?0:-EFAULT;
-}
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
diff --git a/include/asm-mips/auxvec.h b/include/asm-mips/auxvec.h
new file mode 100644 (file)
index 0000000..7cf7f2d
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef _ASM_AUXVEC_H
+#define _ASM_AUXVEC_H
+
+#endif /* _ASM_AUXVEC_H */
index d78002afb1e12927f080b13f930da9006d698ed1..2c084cd4bc0af81a2b3e3ad686022cfa18e3f3d9 100644 (file)
@@ -15,8 +15,10 @@ typedef s32          compat_clock_t;
 typedef s32            compat_suseconds_t;
 
 typedef s32            compat_pid_t;
-typedef s32            compat_uid_t;
-typedef s32            compat_gid_t;
+typedef u32            __compat_uid_t;
+typedef u32            __compat_gid_t;
+typedef u32            __compat_uid32_t;
+typedef u32            __compat_gid32_t;
 typedef u32            compat_mode_t;
 typedef u32            compat_ino_t;
 typedef u32            compat_dev_t;
@@ -52,8 +54,8 @@ struct compat_stat {
        compat_ino_t    st_ino;
        compat_mode_t   st_mode;
        compat_nlink_t  st_nlink;
-       compat_uid_t    st_uid;
-       compat_gid_t    st_gid;
+       __compat_uid32_t        st_uid;
+       __compat_gid32_t        st_gid;
        compat_dev_t    st_rdev;
        s32             st_pad2[2];
        compat_off_t    st_size;
index 2436392e7990d1fec80312ccfcea02e9e3eeb28d..06c5d13faf6629f933c22c7f70cb9ceea14495dd 100644 (file)
@@ -8,33 +8,16 @@
 #ifndef _ASM_FCNTL_H
 #define _ASM_FCNTL_H
 
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE      0x0003
-#define O_RDONLY       0x0000
-#define O_WRONLY       0x0001
-#define O_RDWR         0x0002
 #define O_APPEND       0x0008
 #define O_SYNC         0x0010
 #define O_NONBLOCK     0x0080
 #define O_CREAT         0x0100 /* not fcntl */
-#define O_TRUNC                0x0200  /* not fcntl */
 #define O_EXCL         0x0400  /* not fcntl */
 #define O_NOCTTY       0x0800  /* not fcntl */
 #define FASYNC         0x1000  /* fcntl, for BSD compatibility */
 #define O_LARGEFILE    0x2000  /* allow large file opens */
 #define O_DIRECT       0x8000  /* direct disk access hint */
-#define O_DIRECTORY    0x10000 /* must be a directory */
-#define O_NOFOLLOW     0x20000 /* don't follow links */
-#define O_NOATIME      0x40000
 
-#define O_NDELAY       O_NONBLOCK
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
 #define F_GETLK                14
 #define F_SETLK                6
 #define F_SETLKW       7
 #define F_SETLKW64     35
 #endif
 
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
 /*
  * The flavours of struct flock.  "struct flock" is the ABI compliant
  * variant.  Finally struct flock64 is the LFS variant of struct flock.  As
@@ -86,7 +42,7 @@
 
 #ifndef __mips64
 
-typedef struct flock {
+struct flock {
        short   l_type;
        short   l_whence;
        __kernel_off_t l_start;
@@ -94,32 +50,17 @@ typedef struct flock {
        long    l_sysid;
        __kernel_pid_t l_pid;
        long    pad[4];
-} flock_t;
-
-typedef struct flock64 {
-       short   l_type;
-       short   l_whence;
-       loff_t  l_start;
-       loff_t  l_len;
-       pid_t   l_pid;
-} flock64_t;
+};
 
-#else /* 64-bit definitions */
+#define HAVE_ARCH_STRUCT_FLOCK
 
-typedef struct flock {
-       short   l_type;
-       short   l_whence;
-       __kernel_off_t l_start;
-       __kernel_off_t l_len;
-       __kernel_pid_t l_pid;
-} flock_t;
-
-#ifdef __KERNEL__
-#define flock64                flock
 #endif
 
-#endif
+#include <asm-generic/fcntl.h>
 
-#define F_LINUX_SPECIFIC_BASE  1024
+typedef struct flock flock_t;
+#ifndef __mips64
+typedef struct flock64 flock64_t;
+#endif
 
 #endif /* _ASM_FCNTL_H */
diff --git a/include/asm-mips/futex.h b/include/asm-mips/futex.h
new file mode 100644 (file)
index 0000000..9feff4c
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-mips/hdreg.h b/include/asm-mips/hdreg.h
deleted file mode 100644 (file)
index 5989bbc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#warning this file is obsolete, please do not use it
index a543ead72ecf5e5c70e7f937a35760536a3b8db0..5c2c9832901204ade583cf5314f629a1b5624178 100644 (file)
 #define access_ok(type, addr, size)                                    \
        likely(__access_ok((unsigned long)(addr), (size),__access_mask))
 
-/*
- * verify_area: - Obsolete/deprecated and will go away soon,
- * use access_ok() instead.
- * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE
- * @addr: User space pointer to start of block to check
- * @size: Size of block to check
- *
- * Context: User context only.  This function may sleep.
- *
- * This function has been replaced by access_ok().
- *
- * Checks if a pointer to a block of memory in user space is valid.
- *
- * Returns zero if the memory block may be valid, -EFAULT
- * if it is definitely invalid.
- *
- * See access_ok() for more details.
- */
-static inline int __deprecated verify_area(int type, const void * addr, unsigned long size)
-{
-       return access_ok(type, addr, size) ? 0 : -EFAULT;
-}
-
 /*
  * put_user: - Write a simple value into user space.
  * @x:   Value to copy to user space.
diff --git a/include/asm-parisc/auxvec.h b/include/asm-parisc/auxvec.h
new file mode 100644 (file)
index 0000000..9c3ac4b
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASMPARISC_AUXVEC_H
+#define __ASMPARISC_AUXVEC_H
+
+#endif
index 7630d1ad2391ada9799226cb13eadaf5fc3edf63..38b918feead90ee9e2218d052346cef8046975a8 100644 (file)
@@ -13,8 +13,10 @@ typedef s32  compat_ssize_t;
 typedef s32    compat_time_t;
 typedef s32    compat_clock_t;
 typedef s32    compat_pid_t;
-typedef u32    compat_uid_t;
-typedef u32    compat_gid_t;
+typedef u32    __compat_uid_t;
+typedef u32    __compat_gid_t;
+typedef u32    __compat_uid32_t;
+typedef u32    __compat_gid32_t;
 typedef u16    compat_mode_t;
 typedef u32    compat_ino_t;
 typedef u32    compat_dev_t;
@@ -67,8 +69,8 @@ struct compat_stat {
        compat_dev_t            st_realdev;
        u16                     st_basemode;
        u16                     st_spareshort;
-       compat_uid_t            st_uid;
-       compat_gid_t            st_gid;
+       __compat_uid32_t        st_uid;
+       __compat_gid32_t        st_gid;
        u32                     st_spare4[3];
 };
 
index def35230716afc55a1e14f81fede288b96de35ad..317851fa78f3f99b702ba30fff49dea37da728ef 100644 (file)
@@ -3,38 +3,22 @@
 
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
-#define O_ACCMODE      00000003
-#define O_RDONLY       00000000
-#define O_WRONLY       00000001
-#define O_RDWR         00000002
 #define O_APPEND       00000010
 #define O_BLKSEEK      00000100 /* HPUX only */
 #define O_CREAT                00000400 /* not fcntl */
-#define O_TRUNC                00001000 /* not fcntl */
 #define O_EXCL         00002000 /* not fcntl */
 #define O_LARGEFILE    00004000
 #define O_SYNC         00100000
 #define O_NONBLOCK     00200004 /* HPUX has separate NDELAY & NONBLOCK */
-#define O_NDELAY       O_NONBLOCK
 #define O_NOCTTY       00400000 /* not fcntl */
 #define O_DSYNC                01000000 /* HPUX only */
 #define O_RSYNC                02000000 /* HPUX only */
 #define O_NOATIME      04000000
 
-#define FASYNC         00020000 /* fcntl, for BSD compatibility */
-#define O_DIRECT       00040000 /* direct disk access hint - currently ignored */
 #define O_DIRECTORY    00010000 /* must be a directory */
 #define O_NOFOLLOW     00000200 /* don't follow links */
 #define O_INVISIBLE    04000000 /* invisible I/O, for DMAPI/XDSM */
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get f_flags */
-#define F_SETFD                2       /* set f_flags */
-#define F_GETFL                3       /* more flags (cloexec) */
-#define F_SETFL                4
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
 #define F_GETLK64      8
 #define F_SETLK64      9
 #define F_SETLKW64     10
 #define F_SETSIG       13      /*  for sockets. */
 #define F_GETSIG       14      /*  for sockets. */
 
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
 /* for posix fcntl() and lockf() */
 #define F_RDLCK                01
 #define F_WRLCK                02
 #define F_UNLCK                03
 
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short l_type;
-       short l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
+#include <asm-generic/fcntl.h>
 
 #endif
diff --git a/include/asm-parisc/futex.h b/include/asm-parisc/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-parisc/hdreg.h b/include/asm-parisc/hdreg.h
deleted file mode 100644 (file)
index 7f7fd1a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/hdreg.h>
index 75654ba9335359b71c61bd2f0369b757e188c196..f876bdf220569f0f90eaec0436665a8bf95d1464 100644 (file)
 
 #define NR_IRQS                (CPU_IRQ_MAX + 1)
 
+/*
+ * IRQ line status macro IRQ_PER_CPU is used
+ */
+#define ARCH_HAS_IRQ_PER_CPU
+
 static __inline__ int irq_canonicalize(int irq)
 {
        return (irq == 2) ? 9 : irq;
index c1b5bdea53ee078773584f3842393b8640740ed0..f6c417c8c484a8965eee6ac6cfd175d45a82c8d4 100644 (file)
@@ -40,10 +40,6 @@ static inline long access_ok(int type, const void __user * addr,
        return 1;
 }
 
-#define verify_area(type,addr,size) (0)        /* FIXME: all users should go away soon,
-                                         * and use access_ok instead, then this
-                                         * should be removed. */
-
 #define put_user __put_user
 #define get_user __get_user
 
diff --git a/include/asm-powerpc/fcntl.h b/include/asm-powerpc/fcntl.h
new file mode 100644 (file)
index 0000000..ce5c451
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef _ASM_FCNTL_H
+#define _ASM_FCNTL_H
+
+#define O_DIRECTORY      040000        /* must be a directory */
+#define O_NOFOLLOW      0100000        /* don't follow links */
+#define O_LARGEFILE     0200000
+#define O_DIRECT       0400000 /* direct disk access hint */
+
+#include <asm-generic/fcntl.h>
+
+#endif /* _ASM_FCNTL_H */
diff --git a/include/asm-ppc/auxvec.h b/include/asm-ppc/auxvec.h
new file mode 100644 (file)
index 0000000..172358d
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef __PPC_AUXVEC_H
+#define __PPC_AUXVEC_H
+
+/*
+ * We need to put in some extra aux table entries to tell glibc what
+ * the cache block size is, so it can use the dcbz instruction safely.
+ */
+#define AT_DCACHEBSIZE         19
+#define AT_ICACHEBSIZE         20
+#define AT_UCACHEBSIZE         21
+/* A special ignored type value for PPC, for glibc compatibility.  */
+#define AT_IGNOREPPC           22
+
+#endif
index 2c056966efd34650ee5dfeb6f0d79c0516659bc2..c25cc35e6ab5818702dbca5241c92a93bbad2a97 100644 (file)
@@ -7,6 +7,7 @@
 #include <asm/types.h>
 #include <asm/ptrace.h>
 #include <asm/cputable.h>
+#include <asm/auxvec.h>
 
 /* PowerPC relocations defined by the ABIs */
 #define R_PPC_NONE             0
@@ -122,16 +123,6 @@ extern int dump_task_fpu(struct task_struct *t, elf_fpregset_t *fpu);
 
 #define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
 
-/*
- * We need to put in some extra aux table entries to tell glibc what
- * the cache block size is, so it can use the dcbz instruction safely.
- */
-#define AT_DCACHEBSIZE         19
-#define AT_ICACHEBSIZE         20
-#define AT_UCACHEBSIZE         21
-/* A special ignored type value for PPC, for glibc compatibility.  */
-#define AT_IGNOREPPC           22
-
 extern int dcache_bsize;
 extern int icache_bsize;
 extern int ucache_bsize;
diff --git a/include/asm-ppc/fcntl.h b/include/asm-ppc/fcntl.h
deleted file mode 100644 (file)
index 5e28e41..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#ifndef _PPC_FCNTL_H
-#define _PPC_FCNTL_H
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECTORY      040000        /* must be a directory */
-#define O_NOFOLLOW      0100000        /* don't follow links */
-#define O_LARGEFILE     0200000
-#define O_DIRECT       0400000 /* direct disk access hint */
-#define O_NOATIME      01000000
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-#ifdef __KERNEL__
-#define F_POSIX                1
-#define F_FLOCK                2
-#define F_BROKEN       4       /* broken flock() emulation */
-#endif /* __KERNEL__ */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
-#endif
diff --git a/include/asm-ppc/futex.h b/include/asm-ppc/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
index bd7656fa20266d0efa7cedf8f1f78231e754ad8a..6f10a25bd628c18cc2f4bd1462d79c9f61936a86 100644 (file)
@@ -84,6 +84,7 @@ OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, mdio_idx)    \
 OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, tah_idx)      \
 OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, phy_mode)     \
 OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "0x%08x\n", emac, phy_map)  \
+OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "0x%08x\n", emac, phy_feat_exc)\
                                                                        \
 void ocp_show_emac_data(struct device *dev)                            \
 {                                                                      \
@@ -99,6 +100,7 @@ void ocp_show_emac_data(struct device *dev)                          \
        device_create_file(dev, &dev_attr_emac_tah_idx);                \
        device_create_file(dev, &dev_attr_emac_phy_mode);               \
        device_create_file(dev, &dev_attr_emac_phy_map);                \
+       device_create_file(dev, &dev_attr_emac_phy_feat_exc);           \
 }
 
 /*
index a244d93ca9537179a7fe6835df81d19eeb9325fb..b4b270457eddce51eac0e30a6e604fb82630740e 100644 (file)
 #define IRQ_POLARITY_POSITIVE  0x2     /* high level or low->high edge */
 #define IRQ_POLARITY_NEGATIVE  0x0     /* low level or high->low edge */
 
+/*
+ * IRQ line status macro IRQ_PER_CPU is used
+ */
+#define ARCH_HAS_IRQ_PER_CPU
+
 #if defined(CONFIG_40x)
 #include <asm/ibm4xx.h>
 
index b044ae03ac5638b01dff66e5bd150b404effe07e..63f56224da8ca3b69361b9f6801a81a80d12c6e3 100644 (file)
 #define access_ok(type, addr, size) \
        (__chk_user_ptr(addr),__access_ok((unsigned long)(addr),(size)))
 
-/* this function will go away soon - use access_ok() instead */
-extern inline int __deprecated verify_area(int type, const void __user * addr, unsigned long size)
-{
-       return access_ok(type, addr, size) ? 0 : -EFAULT;
-}
-
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
diff --git a/include/asm-ppc64/auxvec.h b/include/asm-ppc64/auxvec.h
new file mode 100644 (file)
index 0000000..ac6381a
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef __PPC64_AUXVEC_H
+#define __PPC64_AUXVEC_H
+
+/*
+ * We need to put in some extra aux table entries to tell glibc what
+ * the cache block size is, so it can use the dcbz instruction safely.
+ */
+#define AT_DCACHEBSIZE         19
+#define AT_ICACHEBSIZE         20
+#define AT_UCACHEBSIZE         21
+/* A special ignored type value for PPC, for glibc compatibility.  */
+#define AT_IGNOREPPC           22
+
+/* The vDSO location. We have to use the same value as x86 for glibc's
+ * sake :-)
+ */
+#define AT_SYSINFO_EHDR                33
+
+#endif /* __PPC64_AUXVEC_H */
index 12414f5fc666b00a13c433aa42326127e93c168b..6ec62cd2d1d1e24f8559b8cf65316d929a45474d 100644 (file)
@@ -13,8 +13,10 @@ typedef s32          compat_ssize_t;
 typedef s32            compat_time_t;
 typedef s32            compat_clock_t;
 typedef s32            compat_pid_t;
-typedef u32            compat_uid_t;
-typedef u32            compat_gid_t;
+typedef u32            __compat_uid_t;
+typedef u32            __compat_gid_t;
+typedef u32            __compat_uid32_t;
+typedef u32            __compat_gid32_t;
 typedef u32            compat_mode_t;
 typedef u32            compat_ino_t;
 typedef u32            compat_dev_t;
@@ -48,8 +50,8 @@ struct compat_stat {
        compat_ino_t    st_ino;
        compat_mode_t   st_mode;
        compat_nlink_t  st_nlink;       
-       compat_uid_t    st_uid;
-       compat_gid_t    st_gid;
+       __compat_uid32_t        st_uid;
+       __compat_gid32_t        st_gid;
        compat_dev_t    st_rdev;
        compat_off_t    st_size;
        compat_off_t    st_blksize;
@@ -144,10 +146,10 @@ static inline void __user *compat_alloc_user_space(long len)
  */
 struct compat_ipc64_perm {
        compat_key_t key;
-       compat_uid_t uid;
-       compat_gid_t gid;
-       compat_uid_t cuid;
-       compat_gid_t cgid;
+       __compat_uid_t uid;
+       __compat_gid_t gid;
+       __compat_uid_t cuid;
+       __compat_gid_t cgid;
        compat_mode_t mode;
        unsigned int seq;
        unsigned int __pad2;
index 085eedb956fe02f7a0f34c1cbea0895e476b00ee..c919a89343db0a3b0efb583b63fbf3ebad30ac8b 100644 (file)
@@ -4,6 +4,7 @@
 #include <asm/types.h>
 #include <asm/ptrace.h>
 #include <asm/cputable.h>
+#include <asm/auxvec.h>
 
 /* PowerPC relocations defined by the ABIs */
 #define R_PPC_NONE             0
@@ -237,21 +238,6 @@ do {                                                               \
 
 #endif
 
-/*
- * We need to put in some extra aux table entries to tell glibc what
- * the cache block size is, so it can use the dcbz instruction safely.
- */
-#define AT_DCACHEBSIZE         19
-#define AT_ICACHEBSIZE         20
-#define AT_UCACHEBSIZE         21
-/* A special ignored type value for PPC, for glibc compatibility.  */
-#define AT_IGNOREPPC           22
-
-/* The vDSO location. We have to use the same value as x86 for glibc's
- * sake :-)
- */
-#define AT_SYSINFO_EHDR                33
-
 extern int dcache_bsize;
 extern int icache_bsize;
 extern int ucache_bsize;
diff --git a/include/asm-ppc64/fcntl.h b/include/asm-ppc64/fcntl.h
deleted file mode 100644 (file)
index 842560d..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef _PPC64_FCNTL_H
-#define _PPC64_FCNTL_H
-
-/*
- * 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.
- */
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECTORY      040000        /* must be a directory */
-#define O_NOFOLLOW      0100000        /* don't follow links */
-#define O_LARGEFILE     0200000
-#define O_DIRECT       0400000 /* direct disk access hint */
-#define O_NOATIME      01000000
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-#ifdef __KERNEL__
-#define F_POSIX                1
-#define F_FLOCK                2
-#define F_BROKEN       4       /* broken flock() emulation */
-#endif /* __KERNEL__ */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
-
-#endif /* _PPC64_FCNTL_H */
diff --git a/include/asm-ppc64/futex.h b/include/asm-ppc64/futex.h
new file mode 100644 (file)
index 0000000..cb2640b
--- /dev/null
@@ -0,0 +1,83 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/memory.h>
+#include <asm/uaccess.h>
+
+#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \
+  __asm__ __volatile (SYNC_ON_SMP                              \
+"1:    lwarx   %0,0,%2\n"                                      \
+       insn                                                    \
+"2:    stwcx.  %1,0,%2\n\
+       bne-    1b\n\
+       li      %1,0\n\
+3:     .section .fixup,\"ax\"\n\
+4:     li      %1,%3\n\
+       b       3b\n\
+       .previous\n\
+       .section __ex_table,\"a\"\n\
+       .align 3\n\
+       .llong  1b,4b,2b,4b\n\
+       .previous"                                              \
+       : "=&r" (oldval), "=&r" (ret)                           \
+       : "b" (uaddr), "i" (-EFAULT), "1" (oparg)               \
+       : "cr0", "memory")
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+               __futex_atomic_op("", ret, oldval, uaddr, oparg);
+               break;
+       case FUTEX_OP_ADD:
+               __futex_atomic_op("add %1,%0,%1\n", ret, oldval, uaddr, oparg);
+               break;
+       case FUTEX_OP_OR:
+               __futex_atomic_op("or %1,%0,%1\n", ret, oldval, uaddr, oparg);
+               break;
+       case FUTEX_OP_ANDN:
+               __futex_atomic_op("andc %1,%0,%1\n", ret, oldval, uaddr, oparg);
+               break;
+       case FUTEX_OP_XOR:
+               __futex_atomic_op("xor %1,%0,%1\n", ret, oldval, uaddr, oparg);
+               break;
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
index 570678b1da950335f1821485745381f470af62ee..99782afb4cdede53a3e1edfc41050f9c2a9ad990 100644 (file)
 #define IRQ_POLARITY_POSITIVE  0x2     /* high level or low->high edge */
 #define IRQ_POLARITY_NEGATIVE  0x0     /* low level or high->low edge */
 
+/*
+ * IRQ line status macro IRQ_PER_CPU is used
+ */
+#define ARCH_HAS_IRQ_PER_CPU
+
 #define get_irq_desc(irq) (&irq_desc[(irq)])
 
 /* Define a way to iterate across irqs. */
index 0802919c3235c1b5cc2debe8a0930558525e6615..d9129d2b038ee7d09f87bd22aa6b10b95e1e3329 100644 (file)
@@ -42,6 +42,9 @@ typedef unsigned int kprobe_opcode_t;
 
 #define JPROBE_ENTRY(pentry)   (kprobe_opcode_t *)((func_descr_t *)pentry)
 
+#define is_trap(instr) (IS_TW(instr) || IS_TD(instr) || \
+                       IS_TWI(instr) || IS_TDI(instr))
+
 #define ARCH_SUPPORTS_KRETPROBES
 void kretprobe_trampoline(void);
 
index 56e09face9a8409e03230d7618b0fd8038eebc1e..af53ffb5572640e2246b9963a2b582d514d98d6d 100644 (file)
 #ifdef CONFIG_SMP
 #define EIEIO_ON_SMP   "eieio\n"
 #define ISYNC_ON_SMP   "\n\tisync"
+#define SYNC_ON_SMP    "lwsync\n\t"
 #else
 #define EIEIO_ON_SMP
 #define ISYNC_ON_SMP
+#define SYNC_ON_SMP
 #endif
 
 static inline void eieio(void)
index 7bd4796f1236c5efe6f7c881ab0aa18a141a1fd8..8bd7aa959385d01d33c530526609e7302cf97921 100644 (file)
@@ -311,6 +311,20 @@ name: \
        .type GLUE(.,name),@function; \
 GLUE(.,name):
 
+#define _KPROBE(name) \
+       .section ".kprobes.text","a"; \
+       .align 2 ; \
+       .globl name; \
+       .globl GLUE(.,name); \
+       .section ".opd","aw"; \
+name: \
+       .quad GLUE(.,name); \
+       .quad .TOC.@tocbase; \
+       .quad 0; \
+       .previous; \
+       .type GLUE(.,name),@function; \
+GLUE(.,name):
+
 #define _STATIC(name) \
        .section ".text"; \
        .align 2 ; \
index 05b5943ab1ee5ade4a88fdd32b3622c4089ece63..c181a60d868c7ee82e79db9ce1d57f9817a8d8d4 100644 (file)
 #define access_ok(type,addr,size) \
        __access_ok(((__force unsigned long)(addr)),(size),get_fs())
 
-/* this function will go away soon - use access_ok() instead */
-static inline int __deprecated verify_area(int type, const void __user *addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
diff --git a/include/asm-s390/auxvec.h b/include/asm-s390/auxvec.h
new file mode 100644 (file)
index 0000000..0d34072
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASMS390_AUXVEC_H
+#define __ASMS390_AUXVEC_H
+
+#endif
index 7f8f544eb262f8edb58a97090559ad280eea2918..a007715f4aea8150577e00b9777baee9dc04c7b9 100644 (file)
@@ -13,10 +13,10 @@ typedef s32         compat_ssize_t;
 typedef s32            compat_time_t;
 typedef s32            compat_clock_t;
 typedef s32            compat_pid_t;
-typedef u16            compat_uid_t;
-typedef u16            compat_gid_t;
-typedef u32            compat_uid32_t;
-typedef u32            compat_gid32_t;
+typedef u16            __compat_uid_t;
+typedef u16            __compat_gid_t;
+typedef u32            __compat_uid32_t;
+typedef u32            __compat_gid32_t;
 typedef u16            compat_mode_t;
 typedef u32            compat_ino_t;
 typedef u16            compat_dev_t;
@@ -51,8 +51,8 @@ struct compat_stat {
        compat_ino_t    st_ino;
        compat_mode_t   st_mode;
        compat_nlink_t  st_nlink;
-       compat_uid_t    st_uid;
-       compat_gid_t    st_gid;
+       __compat_uid_t  st_uid;
+       __compat_gid_t  st_gid;
        compat_dev_t    st_rdev;
        u16             __pad2;
        u32             st_size;
@@ -140,10 +140,10 @@ static inline void __user *compat_alloc_user_space(long len)
 
 struct compat_ipc64_perm {
        compat_key_t key;
-       compat_uid32_t uid;
-       compat_gid32_t gid;
-       compat_uid32_t cuid;
-       compat_gid32_t cgid;
+       __compat_uid32_t uid;
+       __compat_gid32_t gid;
+       __compat_uid32_t cuid;
+       __compat_gid32_t cgid;
        compat_mode_t mode;
        unsigned short __pad1;
        unsigned short seq;
index 48f692b45732494165dd7f38028731214ed1f1a0..46ab12db57397dfc44a7aa84f9c10ac5e97509d9 100644 (file)
@@ -1,97 +1 @@
-/*
- *  include/asm-s390/fcntl.h
- *
- *  S390 version
- *
- *  Derived from "include/asm-i386/fcntl.h"
- */
-#ifndef _S390_FCNTL_H
-#define _S390_FCNTL_H
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECT        040000 /* direct disk access hint */
-#define O_LARGEFILE    0100000
-#define O_DIRECTORY    0200000 /* must be a directory */
-#define O_NOFOLLOW     0400000 /* don't follow links */
-#define O_NOATIME      01000000
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#ifndef __s390x__
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-#endif /* ! __s390x__ */
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-#ifndef __s390x__
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-#endif
-#define F_LINUX_SPECIFIC_BASE  1024
-#endif
+#include <asm-generic/fcntl.h>
diff --git a/include/asm-s390/futex.h b/include/asm-s390/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
index 3e3bfe6a8fa84188f86f1acef2d17e84814771c3..38a5cf8ab9e3e5cc69f162f1b8af363f886b7046 100644 (file)
 
 #define access_ok(type,addr,size) __access_ok(addr,size)
 
-/* this function will go away soon - use access_ok() instead */
-extern inline int __deprecated verify_area(int type, const void __user *addr,
-                                               unsigned long size)
-{
-       return access_ok(type, addr, size) ? 0 : -EFAULT;
-}
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
diff --git a/include/asm-sh/auxvec.h b/include/asm-sh/auxvec.h
new file mode 100644 (file)
index 0000000..fc21e4d
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASM_SH_AUXVEC_H
+#define __ASM_SH_AUXVEC_H
+
+#endif /* __ASM_SH_AUXVEC_H */
index 0b3ae524e34cca05d8cf77cc617ccb72fca7fb27..46ab12db57397dfc44a7aa84f9c10ac5e97509d9 100644 (file)
@@ -1,88 +1 @@
-#ifndef __ASM_SH_FCNTL_H
-#define __ASM_SH_FCNTL_H
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECT        040000 /* direct disk access hint - currently ignored */
-#define O_LARGEFILE    0100000
-#define O_DIRECTORY    0200000 /* must be a directory */
-#define O_NOFOLLOW     0400000 /* don't follow links */
-#define O_NOATIME      01000000
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
-#endif /* __ASM_SH_FCNTL_H */
-
+#include <asm-generic/fcntl.h>
diff --git a/include/asm-sh/futex.h b/include/asm-sh/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-sh/hdreg.h b/include/asm-sh/hdreg.h
deleted file mode 100644 (file)
index 7f7fd1a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/hdreg.h>
index fb9e334afa2be050acd666412a4e5c8264a1d7f2..2cb01861e7c550babe2e44409aa0be3942d2415a 100644 (file)
@@ -146,12 +146,6 @@ static inline int access_ok(int type, const void __user *p, unsigned long size)
        return __access_ok(addr, size);
 }
 
-/* this function will go away soon - use access_ok() instead */
-static inline int __deprecated verify_area(int type, const void __user * addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
 /*
  * Uh, these should become the main single-value transfer routines ...
  * They automatically use the right size if we just have the right
diff --git a/include/asm-sh64/auxvec.h b/include/asm-sh64/auxvec.h
new file mode 100644 (file)
index 0000000..1ad5a44
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASM_SH64_AUXVEC_H
+#define __ASM_SH64_AUXVEC_H
+
+#endif /* __ASM_SH64_AUXVEC_H */
index ffcc36c64fa5a3dc01996514010d176bc495b443..744dd79b9d5d4ee40c5a63e1542c5cf26109fc13 100644 (file)
@@ -1,7 +1 @@
-#ifndef __ASM_SH64_FCNTL_H
-#define __ASM_SH64_FCNTL_H
-
 #include <asm-sh/fcntl.h>
-
-#endif /* __ASM_SH64_FCNTL_H */
-
diff --git a/include/asm-sh64/futex.h b/include/asm-sh64/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-sh64/hdreg.h b/include/asm-sh64/hdreg.h
deleted file mode 100644 (file)
index 52d9836..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef __ASM_SH64_HDREG_H
-#define __ASM_SH64_HDREG_H
-
-#include <asm-generic/hdreg.h>
-
-#endif /* __ASM_SH64_HDREG_H */
index a33654d576a1a05dd2328a605217298dbbd18381..56aa3cf0f2734da96dda1ce66469dd4d5b4fcb13 100644 (file)
 #define access_ok(type,addr,size) (__range_ok(addr,size) == 0)
 #define __access_ok(addr,size) (__range_ok(addr,size) == 0)
 
-/* this function will go away soon - use access_ok() instead */
-extern inline int __deprecated verify_area(int type, const void __user * addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
 /*
  * Uh, these should become the main single-value transfer routines ...
  * They automatically use the right size if we just have the right
diff --git a/include/asm-sparc/auxvec.h b/include/asm-sparc/auxvec.h
new file mode 100644 (file)
index 0000000..ad6f360
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASMSPARC_AUXVEC_H
+#define __ASMSPARC_AUXVEC_H
+
+#endif /* !(__ASMSPARC_AUXVEC_H) */
index df9c75d41d6802527e72b912635b85777ddb40f0..5db60b5ae7b09d26812f7dfb1d735183e721aced 100644 (file)
@@ -4,10 +4,6 @@
 
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
-#define O_RDONLY       0x0000
-#define O_WRONLY       0x0001
-#define O_RDWR         0x0002
-#define O_ACCMODE      0x0003
 #define O_APPEND       0x0008
 #define FASYNC         0x0040  /* fcntl, for BSD compatibility */
 #define O_CREAT                0x0200  /* not fcntl */
 #define O_NONBLOCK     0x4000
 #define O_NDELAY       (0x0004 | O_NONBLOCK)
 #define O_NOCTTY       0x8000  /* not fcntl */
-#define O_DIRECTORY    0x10000 /* must be a directory */
-#define O_NOFOLLOW     0x20000 /* don't follow links */
 #define O_LARGEFILE    0x40000
 #define O_DIRECT        0x100000 /* direct disk access hint */
 #define O_NOATIME      0x200000
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
 #define F_GETOWN       5       /*  for sockets. */
 #define F_SETOWN       6       /*  for sockets. */
 #define F_GETLK                7
 #define F_SETLK                8
 #define F_SETLKW       9
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
 
 /* for posix fcntl() and lockf() */
 #define F_RDLCK                1
 #define F_WRLCK                2
 #define F_UNLCK                3
 
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-       short __unused;
-};
+#define __ARCH_FLOCK_PAD       short __unused;
+#define __ARCH_FLOCK64_PAD     short __unused;
 
-struct flock64 {
-       short l_type;
-       short l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t l_pid;
-       short __unused;
-};
+#include <asm-generic/fcntl.h>
 
-#define F_LINUX_SPECIFIC_BASE  1024
 #endif
diff --git a/include/asm-sparc/futex.h b/include/asm-sparc/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-sparc/hdreg.h b/include/asm-sparc/hdreg.h
deleted file mode 100644 (file)
index 7f7fd1a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/hdreg.h>
index 0a780e84a12b749fd6f1e4381407f34affcb895b..f8f1ec1f06e6ce840dc9cc5a7edc76ad03c63ebf 100644 (file)
 #define access_ok(type, addr, size)                                    \
        ({ (void)(type); __access_ok((unsigned long)(addr), size); })
 
-/* this function will go away soon - use access_ok() instead */
-static inline int __deprecated verify_area(int type, const void __user * addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
diff --git a/include/asm-sparc64/auxvec.h b/include/asm-sparc64/auxvec.h
new file mode 100644 (file)
index 0000000..436a291
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASM_SPARC64_AUXVEC_H
+#define __ASM_SPARC64_AUXVEC_H
+
+#endif /* !(__ASM_SPARC64_AUXVEC_H) */
index b59122dd176dd0583fd7a1a60b0cb0303927f73c..c73935dc7ba11c8e800b79596d6ae27e3431fd30 100644 (file)
@@ -12,8 +12,10 @@ typedef s32          compat_ssize_t;
 typedef s32            compat_time_t;
 typedef s32            compat_clock_t;
 typedef s32            compat_pid_t;
-typedef u16            compat_uid_t;
-typedef u16            compat_gid_t;
+typedef u16            __compat_uid_t;
+typedef u16            __compat_gid_t;
+typedef u32            __compat_uid32_t;
+typedef u32            __compat_gid32_t;
 typedef u16            compat_mode_t;
 typedef u32            compat_ino_t;
 typedef u16            compat_dev_t;
@@ -47,8 +49,8 @@ struct compat_stat {
        compat_ino_t    st_ino;
        compat_mode_t   st_mode;
        compat_nlink_t  st_nlink;
-       compat_uid_t    st_uid;
-       compat_gid_t    st_gid;
+       __compat_uid_t  st_uid;
+       __compat_gid_t  st_gid;
        compat_dev_t    st_rdev;
        compat_off_t    st_size;
        compat_time_t   st_atime;
@@ -177,10 +179,10 @@ static __inline__ void __user *compat_alloc_user_space(long len)
 
 struct compat_ipc64_perm {
        compat_key_t key;
-       __kernel_uid_t uid;
-       __kernel_gid_t gid;
-       __kernel_uid_t cuid;
-       __kernel_gid_t cgid;
+       __compat_uid32_t uid;
+       __compat_gid32_t gid;
+       __compat_uid32_t cuid;
+       __compat_gid32_t cgid;
        unsigned short __pad1;
        compat_mode_t mode;
        unsigned short __pad2;
index e36def0d0d809de784e850648afb0b939581ccef..b2aecf0054bd2167b990ddc2da53dec57458aca9 100644 (file)
@@ -4,10 +4,6 @@
 
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
-#define O_RDONLY       0x0000
-#define O_WRONLY       0x0001
-#define O_RDWR         0x0002
-#define O_ACCMODE      0x0003
 #define O_NDELAY       0x0004
 #define O_APPEND       0x0008
 #define FASYNC         0x0040  /* fcntl, for BSD compatibility */
 #define O_SYNC         0x2000
 #define O_NONBLOCK     0x4000
 #define O_NOCTTY       0x8000  /* not fcntl */
-#define O_DIRECTORY    0x10000 /* must be a directory */
-#define O_NOFOLLOW     0x20000 /* don't follow links */
 #define O_LARGEFILE    0x40000
 #define O_DIRECT        0x100000 /* direct disk access hint */
 #define O_NOATIME      0x200000
 
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
 #define F_GETOWN       5       /*  for sockets. */
 #define F_SETOWN       6       /*  for sockets. */
 #define F_GETLK                7
 #define F_SETLK                8
 #define F_SETLKW       9
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
 
 /* for posix fcntl() and lockf() */
 #define F_RDLCK                1
 #define F_WRLCK                2
 #define F_UNLCK                3
 
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-       short __unused;
-};
+#define __ARCH_FLOCK_PAD       short __unused;
 
-#define F_LINUX_SPECIFIC_BASE  1024
+#include <asm-generic/fcntl.h>
 
 #endif /* !(_SPARC64_FCNTL_H) */
diff --git a/include/asm-sparc64/futex.h b/include/asm-sparc64/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-sparc64/hdreg.h b/include/asm-sparc64/hdreg.h
deleted file mode 100644 (file)
index 7f7fd1a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/hdreg.h>
index 5690142f82de3774d56faceee2539229ee0e382a..80a65d7e3dbff92308d2b4e1bf5e394e45c97551 100644 (file)
@@ -59,12 +59,6 @@ static inline int access_ok(int type, const void __user * addr, unsigned long si
        return 1;
 }
 
-/* this function will go away soon - use access_ok() instead */
-static inline int __deprecated verify_area(int type, const void __user * addr, unsigned long size)
-{
-       return 0;
-}
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
diff --git a/include/asm-um/auxvec.h b/include/asm-um/auxvec.h
new file mode 100644 (file)
index 0000000..1e5e1c2
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __UM_AUXVEC_H
+#define __UM_AUXVEC_H
+
+#endif
diff --git a/include/asm-um/futex.h b/include/asm-um/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-um/hdreg.h b/include/asm-um/hdreg.h
deleted file mode 100644 (file)
index cf6363a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef __UM_HDREG_H
-#define __UM_HDREG_H
-
-#include "asm/arch/hdreg.h"
-
-#endif
diff --git a/include/asm-v850/auxvec.h b/include/asm-v850/auxvec.h
new file mode 100644 (file)
index 0000000..f493232
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __V850_AUXVEC_H__
+#define __V850_AUXVEC_H__
+
+#endif /* __V850_AUXVEC_H__ */
index 31d4b59612211fa3a33b912b19f3c5a74160aeae..3af4d56776ddfafe217e81fd5da095d83e29f19e 100644 (file)
@@ -1,87 +1,11 @@
 #ifndef __V850_FCNTL_H__
 #define __V850_FCNTL_H__
 
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE        0003
-#define O_RDONLY           00
-#define O_WRONLY           01
-#define O_RDWR             02
-#define O_CREAT                  0100  /* not fcntl */
-#define O_EXCL           0200  /* not fcntl */
-#define O_NOCTTY         0400  /* not fcntl */
-#define O_TRUNC                 01000  /* not fcntl */
-#define O_APPEND        02000
-#define O_NONBLOCK      04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC         010000
-#define FASYNC         020000  /* fcntl, for BSD compatibility */
 #define O_DIRECTORY    040000  /* must be a directory */
 #define O_NOFOLLOW     0100000 /* don't follow links */
 #define O_DIRECT       0200000 /* direct disk access hint - currently ignored */
 #define O_LARGEFILE    0400000
-#define O_NOATIME      01000000
 
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
+#include <asm-generic/fcntl.h>
 
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-#define F_GETLK64      12      /*  using 'struct flock64' */
-#define F_SETLK64      13
-#define F_SETLKW64     14
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short l_type;
-       short l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t l_pid;
-};
-
-struct flock64 {
-       short  l_type;
-       short  l_whence;
-       loff_t l_start;
-       loff_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
 #endif /* __V850_FCNTL_H__ */
diff --git a/include/asm-v850/futex.h b/include/asm-v850/futex.h
new file mode 100644 (file)
index 0000000..2cac5ec
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/uaccess.h>
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+       case FUTEX_OP_ADD:
+       case FUTEX_OP_OR:
+       case FUTEX_OP_ANDN:
+       case FUTEX_OP_XOR:
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
index 4386cfc6a8dda338cf7ed677f998e4834095221f..188b28597cf1f680a96f271fa7e3244ffdc74831 100644 (file)
@@ -27,12 +27,6 @@ extern inline int access_ok (int type, const void *addr, unsigned long size)
        return val >= (0x80 + NUM_CPU_IRQS*16) && val < 0xFFFFF000;
 }
 
-/* this function will go away soon - use access_ok() instead */
-extern inline int __deprecated verify_area (int type, const void *addr, unsigned long size)
-{
-       return access_ok (type, addr, size) ? 0 : -EFAULT;
-}
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
index dc8c981af27f0b3c33bc3563ef87f560e84dc1bb..aa1c7b2e438cb36d3c9756b153d37a04c2570e9a 100644 (file)
@@ -101,7 +101,7 @@ __acpi_release_global_lock (unsigned int *lock)
         :"=r"(n_hi), "=r"(n_lo)     \
         :"0"(n_hi), "1"(n_lo))
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 extern int acpi_lapic;
 extern int acpi_ioapic;
 extern int acpi_noirq;
@@ -121,17 +121,6 @@ static inline void disable_acpi(void)
 #define FIX_ACPI_PAGES 4
 
 extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
-
-#else  /* !CONFIG_ACPI_BOOT */
-#define acpi_lapic 0
-#define acpi_ioapic 0
-#endif /* !CONFIG_ACPI_BOOT */
-
-extern int acpi_numa;
-extern int acpi_scan_nodes(unsigned long start, unsigned long end);
-#define NR_NODE_MEMBLKS (MAX_NUMNODES*2)
-
-#ifdef CONFIG_ACPI_PCI
 static inline void acpi_noirq_set(void) { acpi_noirq = 1; }
 static inline void acpi_disable_pci(void) 
 {
@@ -139,11 +128,19 @@ static inline void acpi_disable_pci(void)
        acpi_noirq_set();
 }
 extern int acpi_irq_balance_set(char *str);
-#else
+
+#else  /* !CONFIG_ACPI */
+
+#define acpi_lapic 0
+#define acpi_ioapic 0
 static inline void acpi_noirq_set(void) { }
 static inline void acpi_disable_pci(void) { }
-static inline int acpi_irq_balance_set(char *str) { return 0; }
-#endif
+
+#endif /* !CONFIG_ACPI */
+
+extern int acpi_numa;
+extern int acpi_scan_nodes(unsigned long start, unsigned long end);
+#define NR_NODE_MEMBLKS (MAX_NUMNODES*2)
 
 #ifdef CONFIG_ACPI_SLEEP
 
diff --git a/include/asm-x86_64/auxvec.h b/include/asm-x86_64/auxvec.h
new file mode 100644 (file)
index 0000000..2403c4c
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __ASM_X86_64_AUXVEC_H
+#define __ASM_X86_64_AUXVEC_H
+
+#endif
index d0f453c5adfc6dd04edc3353ddd61750d5cc322e..f0155c38f639056f6c4f812fb8ad5ab345e090d0 100644 (file)
@@ -14,10 +14,10 @@ typedef s32         compat_ssize_t;
 typedef s32            compat_time_t;
 typedef s32            compat_clock_t;
 typedef s32            compat_pid_t;
-typedef u16            compat_uid_t;
-typedef u16            compat_gid_t;
-typedef u32            compat_uid32_t;
-typedef u32            compat_gid32_t;
+typedef u16            __compat_uid_t;
+typedef u16            __compat_gid_t;
+typedef u32            __compat_uid32_t;
+typedef u32            __compat_gid32_t;
 typedef u16            compat_mode_t;
 typedef u32            compat_ino_t;
 typedef u16            compat_dev_t;
@@ -52,8 +52,8 @@ struct compat_stat {
        compat_ino_t    st_ino;
        compat_mode_t   st_mode;
        compat_nlink_t  st_nlink;
-       compat_uid_t    st_uid;
-       compat_gid_t    st_gid;
+       __compat_uid_t  st_uid;
+       __compat_gid_t  st_gid;
        compat_dev_t    st_rdev;
        u16             __pad2;
        u32             st_size;
@@ -122,10 +122,10 @@ typedef u32               compat_sigset_word;
 
 struct compat_ipc64_perm {
        compat_key_t key;
-       compat_uid32_t uid;
-       compat_gid32_t gid;
-       compat_uid32_t cuid;
-       compat_gid32_t cgid;
+       __compat_uid32_t uid;
+       __compat_gid32_t gid;
+       __compat_uid32_t cuid;
+       __compat_gid32_t cgid;
        unsigned short mode;
        unsigned short __pad1;
        unsigned short seq;
index 4411f221c03789976a6b3f367cfeec7d06c7c2a4..46ab12db57397dfc44a7aa84f9c10ac5e97509d9 100644 (file)
@@ -1,76 +1 @@
-#ifndef _X86_64_FCNTL_H
-#define _X86_64_FCNTL_H
-
-/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-   located on an ext2 file system */
-#define O_ACCMODE         0003
-#define O_RDONLY            00
-#define O_WRONLY            01
-#define O_RDWR              02
-#define O_CREAT                   0100 /* not fcntl */
-#define O_EXCL            0200 /* not fcntl */
-#define O_NOCTTY          0400 /* not fcntl */
-#define O_TRUNC                  01000 /* not fcntl */
-#define O_APPEND         02000
-#define O_NONBLOCK       04000
-#define O_NDELAY       O_NONBLOCK
-#define O_SYNC          010000
-#define FASYNC          020000 /* fcntl, for BSD compatibility */
-#define O_DIRECT        040000 /* direct disk access hint */
-#define O_LARGEFILE    0100000
-#define O_DIRECTORY    0200000 /* must be a directory */
-#define O_NOFOLLOW     0400000 /* don't follow links */
-#define O_NOATIME      01000000
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
-#define F_GETLK                5
-#define F_SETLK                6
-#define F_SETLKW       7
-
-#define F_SETOWN       8       /*  for sockets. */
-#define F_GETOWN       9       /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock */
-#define LOCK_READ      64      /* ... Which allows concurrent read operations */
-#define LOCK_WRITE     128     /* ... Which allows concurrent write operations */
-#define LOCK_RW                192     /* ... Which allows concurrent read & write ops */
-
-struct flock {
-       short  l_type;
-       short  l_whence;
-       off_t l_start;
-       off_t l_len;
-       pid_t  l_pid;
-};
-
-#define F_LINUX_SPECIFIC_BASE  1024
-
-#endif /* !_X86_64_FCNTL_H */
+#include <asm-generic/fcntl.h>
diff --git a/include/asm-x86_64/futex.h b/include/asm-x86_64/futex.h
new file mode 100644 (file)
index 0000000..8602c09
--- /dev/null
@@ -0,0 +1,98 @@
+#ifndef _ASM_FUTEX_H
+#define _ASM_FUTEX_H
+
+#ifdef __KERNEL__
+
+#include <linux/futex.h>
+#include <asm/errno.h>
+#include <asm/system.h>
+#include <asm/uaccess.h>
+
+#define __futex_atomic_op1(insn, ret, oldval, uaddr, oparg) \
+  __asm__ __volatile (                                         \
+"1:    " insn "\n"                                             \
+"2:    .section .fixup,\"ax\"\n\
+3:     mov     %3, %1\n\
+       jmp     2b\n\
+       .previous\n\
+       .section __ex_table,\"a\"\n\
+       .align  8\n\
+       .quad   1b,3b\n\
+       .previous"                                              \
+       : "=r" (oldval), "=r" (ret), "=m" (*uaddr)              \
+       : "i" (-EFAULT), "m" (*uaddr), "0" (oparg), "1" (0))
+
+#define __futex_atomic_op2(insn, ret, oldval, uaddr, oparg) \
+  __asm__ __volatile (                                         \
+"1:    movl    %2, %0\n\
+       movl    %0, %3\n"                                       \
+       insn "\n"                                               \
+"2:    " LOCK_PREFIX "cmpxchgl %3, %2\n\
+       jnz     1b\n\
+3:     .section .fixup,\"ax\"\n\
+4:     mov     %5, %1\n\
+       jmp     3b\n\
+       .previous\n\
+       .section __ex_table,\"a\"\n\
+       .align  8\n\
+       .quad   1b,4b,2b,4b\n\
+       .previous"                                              \
+       : "=&a" (oldval), "=&r" (ret), "=m" (*uaddr),           \
+         "=&r" (tem)                                           \
+       : "r" (oparg), "i" (-EFAULT), "m" (*uaddr), "1" (0))
+
+static inline int
+futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
+{
+       int op = (encoded_op >> 28) & 7;
+       int cmp = (encoded_op >> 24) & 15;
+       int oparg = (encoded_op << 8) >> 20;
+       int cmparg = (encoded_op << 20) >> 20;
+       int oldval = 0, ret, tem;
+       if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
+               oparg = 1 << oparg;
+
+       if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int)))
+               return -EFAULT;
+
+       inc_preempt_count();
+
+       switch (op) {
+       case FUTEX_OP_SET:
+               __futex_atomic_op1("xchgl %0, %2", ret, oldval, uaddr, oparg);
+               break;
+       case FUTEX_OP_ADD:
+               __futex_atomic_op1(LOCK_PREFIX "xaddl %0, %2", ret, oldval,
+                                  uaddr, oparg);
+               break;
+       case FUTEX_OP_OR:
+               __futex_atomic_op2("orl %4, %3", ret, oldval, uaddr, oparg);
+               break;
+       case FUTEX_OP_ANDN:
+               __futex_atomic_op2("andl %4, %3", ret, oldval, uaddr, ~oparg);
+               break;
+       case FUTEX_OP_XOR:
+               __futex_atomic_op2("xorl %4, %3", ret, oldval, uaddr, oparg);
+               break;
+       default:
+               ret = -ENOSYS;
+       }
+
+       dec_preempt_count();
+
+       if (!ret) {
+               switch (cmp) {
+               case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
+               case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
+               case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
+               case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
+               case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
+               case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
+               default: ret = -ENOSYS;
+               }
+       }
+       return ret;
+}
+
+#endif
+#endif
diff --git a/include/asm-x86_64/hdreg.h b/include/asm-x86_64/hdreg.h
deleted file mode 100644 (file)
index 5989bbc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#warning this file is obsolete, please do not use it
index a8babd2bbe849c5197e96b908ffc7ded77e388e0..ee1bc69aec9ce56386f3acddc7de60a80e9c968f 100644 (file)
@@ -201,7 +201,7 @@ extern int skip_ioapic_setup;
  */
 #define io_apic_assign_pci_irqs (mp_irq_entries && !skip_ioapic_setup && io_apic_irqs)
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 extern int io_apic_get_version (int ioapic);
 extern int io_apic_get_redir_entries (int ioapic);
 extern int io_apic_set_pci_routing (int ioapic, int pin, int irq, int, int);
index 331f6a3c72a2a4bb1ab35a646223bfc922bfb15e..f267e10c023df25debbba406a52f6a237a2bebb4 100644 (file)
@@ -179,7 +179,7 @@ extern int mpc_default_type;
 extern unsigned long mp_lapic_addr;
 extern int pic_mode;
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 extern void mp_register_lapic (u8 id, u8 enabled);
 extern void mp_register_lapic_address (u64 address);
 
index 194160f6a43f2064e8f1561a0111f91d5a084286..a8321999448f840e256d142a3cf2a62cd62db120 100644 (file)
@@ -398,7 +398,7 @@ static inline void prefetch(void *x)
 #define ARCH_HAS_PREFETCHW 1
 static inline void prefetchw(void *x) 
 { 
-       alternative_input(ASM_NOP5,
+       alternative_input("prefetcht0 (%1)",
                          "prefetchw (%1)",
                          X86_FEATURE_3DNOW,
                          "r" (x));
index 48f292752c96bac97900682b98e947651b701d6b..1bb8b8a24436b2387a348b8d0ae880e14d61c6c6 100644 (file)
 
 #define access_ok(type, addr, size) (__range_not_ok(addr,size) == 0)
 
-/* this function will go away soon - use access_ok() instead */
-extern inline int __deprecated verify_area(int type, const void __user * addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
-
 /*
  * The exception table consists of pairs of addresses: the first is the
  * address of an instruction that is allowed to fault, and the second is
diff --git a/include/asm-xtensa/auxvec.h b/include/asm-xtensa/auxvec.h
new file mode 100644 (file)
index 0000000..257dec7
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef __XTENSA_AUXVEC_H
+#define __XTENSA_AUXVEC_H
+
+#endif
index 48876bb727d213bc14a1df93f9bcac0d36b85a5e..ec066ae96caf166c09433442f2ac516d2c501c8c 100644 (file)
 
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
-#define O_ACCMODE      0x0003
-#define O_RDONLY       0x0000
-#define O_WRONLY       0x0001
-#define O_RDWR         0x0002
 #define O_APPEND       0x0008
 #define O_SYNC         0x0010
 #define O_NONBLOCK     0x0080
 #define O_CREAT         0x0100 /* not fcntl */
-#define O_TRUNC                0x0200  /* not fcntl */
 #define O_EXCL         0x0400  /* not fcntl */
 #define O_NOCTTY       0x0800  /* not fcntl */
 #define FASYNC         0x1000  /* fcntl, for BSD compatibility */
 #define O_LARGEFILE    0x2000  /* allow large file opens - currently ignored */
 #define O_DIRECT       0x8000  /* direct disk access hint - currently ignored*/
-#define O_DIRECTORY    0x10000 /* must be a directory */
-#define O_NOFOLLOW     0x20000 /* don't follow links */
 #define O_NOATIME      0x100000
 
-#define O_NDELAY       O_NONBLOCK
-
-#define F_DUPFD                0       /* dup */
-#define F_GETFD                1       /* get close_on_exec */
-#define F_SETFD                2       /* set/clear close_on_exec */
-#define F_GETFL                3       /* get file->f_flags */
-#define F_SETFL                4       /* set file->f_flags */
 #define F_GETLK                14
 #define F_GETLK64       15
 #define F_SETLK                6
 
 #define F_SETOWN       24      /*  for sockets. */
 #define F_GETOWN       23      /*  for sockets. */
-#define F_SETSIG       10      /*  for sockets. */
-#define F_GETSIG       11      /*  for sockets. */
-
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC     1       /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#define F_RDLCK                0
-#define F_WRLCK                1
-#define F_UNLCK                2
-
-/* for old implementation of bsd flock () */
-#define F_EXLCK                4       /* or 3 */
-#define F_SHLCK                8       /* or 4 */
-
-/* for leases */
-#define F_INPROGRESS   16
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH                1       /* shared lock */
-#define LOCK_EX                2       /* exclusive lock */
-#define LOCK_NB                4       /* or'd with one of the above to prevent
-                                  blocking */
-#define LOCK_UN                8       /* remove lock */
-
-#define LOCK_MAND      32      /* This is a mandatory flock ... */
-#define LOCK_READ      64      /*  which allows concurrent read operations */
-#define LOCK_WRITE     128     /*  which allows concurrent write operations */
-#define LOCK_RW                192     /*  which allows concurrent read & write ops */
 
 typedef struct flock {
        short l_type;
@@ -96,6 +53,9 @@ struct flock64 {
        pid_t  l_pid;
 };
 
-#define F_LINUX_SPECIFIC_BASE  1024
+#define HAVE_ARCH_STRUCT_FLOCK
+#define HAVE_ARCH_STRUCT_FLOCK64
+
+#include <asm-generic/fcntl.h>
 
 #endif /* _XTENSA_FCNTL_H */
diff --git a/include/asm-xtensa/hdreg.h b/include/asm-xtensa/hdreg.h
deleted file mode 100644 (file)
index 64b8060..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * include/asm-xtensa/hdreg.h
- *
- * 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) 2002 - 2005 Tensilica Inc.
- * Copyright (C) 1994-1996  Linus Torvalds & authors
- */
-
-#ifndef _XTENSA_HDREG_H
-#define _XTENSA_HDREG_H
-
-typedef unsigned int ide_ioreg_t;
-
-#endif
index b46a5205ee7b1ce25f327cc07759220142d7f34d..026c3c011dc0c8fed9ab441e3374fdefe7f61bcf 100644 (file)
@@ -41,7 +41,7 @@
 #include <asm/acpi.h>
 
 
-#ifdef CONFIG_ACPI_BOOT
+#ifdef CONFIG_ACPI
 
 enum acpi_irq_model_id {
        ACPI_IRQ_MODEL_PIC = 0,
@@ -429,23 +429,13 @@ extern int pci_mmcfg_config_num;
 
 extern int sbf_port ;
 
-#else  /*!CONFIG_ACPI_BOOT*/
+#else  /* !CONFIG_ACPI */
 
 #define acpi_mp_config 0
 
-static inline int acpi_boot_init(void)
-{
-       return 0;
-}
-
-static inline int acpi_boot_table_init(void)
-{
-       return 0;
-}
+#endif         /* !CONFIG_ACPI */
 
-#endif         /*!CONFIG_ACPI_BOOT*/
-
-unsigned int acpi_register_gsi (u32 gsi, int edge_level, int active_high_low);
+int acpi_register_gsi (u32 gsi, int edge_level, int active_high_low);
 int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
 
 /*
@@ -455,7 +445,7 @@ int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
  */
 void acpi_unregister_gsi (u32 gsi);
 
-#ifdef CONFIG_ACPI_PCI
+#ifdef CONFIG_ACPI
 
 struct acpi_prt_entry {
        struct list_head        node;
@@ -489,7 +479,7 @@ struct acpi_pci_driver {
 int acpi_pci_register_driver(struct acpi_pci_driver *driver);
 void acpi_pci_unregister_driver(struct acpi_pci_driver *driver);
 
-#endif /*CONFIG_ACPI_PCI*/
+#endif /* CONFIG_ACPI */
 
 #ifdef CONFIG_ACPI_EC
 
@@ -498,20 +488,9 @@ extern int ec_write(u8 addr, u8 val);
 
 #endif /*CONFIG_ACPI_EC*/
 
-#ifdef CONFIG_ACPI_INTERPRETER
-
 extern int acpi_blacklisted(void);
 extern void acpi_bios_year(char *s);
 
-#else /*!CONFIG_ACPI_INTERPRETER*/
-
-static inline int acpi_blacklisted(void)
-{
-       return 0;
-}
-
-#endif /*!CONFIG_ACPI_INTERPRETER*/
-
 #define        ACPI_CSTATE_LIMIT_DEFINED       /* for driver builds */
 #ifdef CONFIG_ACPI
 
@@ -549,5 +528,17 @@ static inline int acpi_get_pxm(acpi_handle handle)
 
 extern int pnpacpi_disabled;
 
+#else  /* CONFIG_ACPI */
+
+static inline int acpi_boot_init(void)
+{
+       return 0;
+}
+
+static inline int acpi_boot_table_init(void)
+{
+       return 0;
+}
+
 #endif /* CONFIG_ACPI */
 #endif /*_LINUX_ACPI_H*/
index af1010b6dab797292d11a1b7eb95a03a1f3deffc..93bfb0beb62a9f1903d37e266fcb22b8284cf5ec 100644 (file)
 
 #include <linux/device.h>
 #include <linux/list.h>
+#include <linux/klist.h>
+#include <linux/spinlock.h>
 
 struct attribute_container {
        struct list_head        node;
-       struct list_head        containers;
+       struct klist            containers;
        struct class            *class;
        struct class_device_attribute **attrs;
        int (*match)(struct attribute_container *, struct device *);
@@ -62,12 +64,8 @@ int attribute_container_add_class_device_adapter(struct attribute_container *con
                                                 struct class_device *classdev);
 void attribute_container_remove_attrs(struct class_device *classdev);
 void attribute_container_class_device_del(struct class_device *classdev);
-
-
-
-
-
-
+struct attribute_container *attribute_container_classdev_to_container(struct class_device *);
+struct class_device *attribute_container_find_class_device(struct attribute_container *, struct device *);
 struct class_device_attribute **attribute_container_classdev_to_attrs(const struct class_device *classdev);
 
 #endif
diff --git a/include/linux/auxvec.h b/include/linux/auxvec.h
new file mode 100644 (file)
index 0000000..9a7b374
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef _LINUX_AUXVEC_H
+#define _LINUX_AUXVEC_H
+
+#include <asm/auxvec.h>
+
+/* Symbolic values for the entries in the auxiliary table
+   put on the initial stack */
+#define AT_NULL   0    /* end of vector */
+#define AT_IGNORE 1    /* entry should be ignored */
+#define AT_EXECFD 2    /* file descriptor of program */
+#define AT_PHDR   3    /* program headers for program */
+#define AT_PHENT  4    /* size of program header entry */
+#define AT_PHNUM  5    /* number of program headers */
+#define AT_PAGESZ 6    /* system page size */
+#define AT_BASE   7    /* base address of interpreter */
+#define AT_FLAGS  8    /* flags */
+#define AT_ENTRY  9    /* entry point of program */
+#define AT_NOTELF 10   /* program is not ELF */
+#define AT_UID    11   /* real uid */
+#define AT_EUID   12   /* effective uid */
+#define AT_GID    13   /* real gid */
+#define AT_EGID   14   /* effective gid */
+#define AT_PLATFORM 15  /* string identifying CPU for optimizations */
+#define AT_HWCAP  16    /* arch dependent hints at CPU capabilities */
+#define AT_CLKTCK 17   /* frequency at which times() increments */
+
+#define AT_SECURE 23   /* secure mode boolean */
+
+#define AT_VECTOR_SIZE  42 /* Size of auxiliary table.  */
+
+#endif /* _LINUX_AUXVEC_H */
index 36ef29fa0d8b64a1cc2e2406bd9a8b30f83ab026..cdaf03a14a5115333ea424944ba320b1f687bedb 100644 (file)
@@ -111,7 +111,6 @@ struct bio {
        void                    *bi_private;
 
        bio_destructor_t        *bi_destructor; /* destructor */
-       struct bio_set          *bi_set;        /* memory pools set */
 };
 
 /*
@@ -280,6 +279,7 @@ extern void bioset_free(struct bio_set *);
 extern struct bio *bio_alloc(unsigned int __nocast, int);
 extern struct bio *bio_alloc_bioset(unsigned int __nocast, int, struct bio_set *);
 extern void bio_put(struct bio *);
+extern void bio_free(struct bio *, struct bio_set *);
 
 extern void bio_endio(struct bio *, unsigned int, int);
 struct request_queue;
@@ -295,7 +295,13 @@ extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int);
 extern int bio_get_nr_vecs(struct block_device *);
 extern struct bio *bio_map_user(struct request_queue *, struct block_device *,
                                unsigned long, unsigned int, int);
+struct sg_iovec;
+extern struct bio *bio_map_user_iov(struct request_queue *,
+                                   struct block_device *,
+                                   struct sg_iovec *, int, int);
 extern void bio_unmap_user(struct bio *);
+extern struct bio *bio_map_kern(struct request_queue *, void *, unsigned int,
+                               unsigned int);
 extern void bio_set_pages_dirty(struct bio *bio);
 extern void bio_check_pages_dirty(struct bio *bio);
 extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int);
index 19bd8e7e11bfcac95586ce28722730f7d4596118..aefa26fbae8add64ee373d9742523b534eaec7ce 100644 (file)
@@ -563,10 +563,12 @@ extern void blk_sync_queue(struct request_queue *q);
 extern void __blk_stop_queue(request_queue_t *q);
 extern void blk_run_queue(request_queue_t *);
 extern void blk_queue_activity_fn(request_queue_t *, activity_fn *, void *);
-extern struct request *blk_rq_map_user(request_queue_t *, int, void __user *, unsigned int);
-extern int blk_rq_unmap_user(struct request *, struct bio *, unsigned int);
-extern int blk_execute_rq(request_queue_t *, struct gendisk *, struct request *);
-
+extern int blk_rq_map_user(request_queue_t *, struct request *, void __user *, unsigned int);
+extern int blk_rq_unmap_user(struct bio *, unsigned int);
+extern int blk_rq_map_kern(request_queue_t *, struct request *, void *, unsigned int, unsigned int);
+extern int blk_rq_map_user_iov(request_queue_t *, struct request *, struct sg_iovec *, int);
+extern int blk_execute_rq(request_queue_t *, struct gendisk *,
+                         struct request *, int);
 static inline request_queue_t *bdev_get_queue(struct block_device *bdev)
 {
        return bdev->bd_disk->queue;
index b58b7d6f2fdb9168b2dc48d58849ef8f7c5d7c22..f9ca534787e24c1075a965843e87bddd9632e3a9 100644 (file)
@@ -18,6 +18,9 @@
 #define compat_jiffies_to_clock_t(x)   \
                (((unsigned long)(x) * COMPAT_USER_HZ) / HZ)
 
+typedef __compat_uid32_t       compat_uid_t;
+typedef __compat_gid32_t       compat_gid_t;
+
 struct rusage;
 
 struct compat_itimerspec { 
index 3438233305a3aecb1674d527744117f22bd55d95..24062a1dbf61e2674719eb24e36b0d1b062fa396 100644 (file)
@@ -23,7 +23,8 @@ void cpuset_init_current_mems_allowed(void);
 void cpuset_update_current_mems_allowed(void);
 void cpuset_restrict_to_mems_allowed(unsigned long *nodes);
 int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl);
-int cpuset_zone_allowed(struct zone *z);
+extern int cpuset_zone_allowed(struct zone *z, unsigned int __nocast gfp_mask);
+extern int cpuset_excl_nodes_overlap(const struct task_struct *p);
 extern struct file_operations proc_cpuset_operations;
 extern char *cpuset_task_status_allowed(struct task_struct *task, char *buffer);
 
@@ -48,7 +49,13 @@ static inline int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl)
        return 1;
 }
 
-static inline int cpuset_zone_allowed(struct zone *z)
+static inline int cpuset_zone_allowed(struct zone *z,
+                                       unsigned int __nocast gfp_mask)
+{
+       return 1;
+}
+
+static inline int cpuset_excl_nodes_overlap(const struct task_struct *p)
 {
        return 1;
 }
index 50be290d24d2705e92c17cdf4f6173e9702e581e..ab04b4f9b0db0e822dc08bc5a2abccdab32cadd3 100644 (file)
@@ -88,8 +88,9 @@ struct dentry {
                                         * negative */
        /*
         * The next three fields are touched by __d_lookup.  Place them here
-        * so they all fit in a 16-byte range, with 16-byte alignment.
+        * so they all fit in a cache line.
         */
+       struct hlist_node d_hash;       /* lookup hash list */
        struct dentry *d_parent;        /* parent directory */
        struct qstr d_name;
 
@@ -103,7 +104,6 @@ struct dentry {
        void *d_fsdata;                 /* fs-specific data */
        struct rcu_head d_rcu;
        struct dcookie_struct *d_cookie; /* cookie, if any */
-       struct hlist_node d_hash;       /* lookup hash list */  
        int d_mounted;
        unsigned char d_iname[DNAME_INLINE_LEN_MIN];    /* small names */
 };
index 5e93e6dce9a4751b7107d24e4e241a1eb1989651..c30175e8dec67fa39f7a7fb1bf753f4fa40d0dda 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef __DMI_H__
 #define __DMI_H__
 
+#include <linux/list.h>
+
 enum dmi_field {
        DMI_NONE,
        DMI_BIOS_VENDOR,
@@ -16,6 +18,24 @@ enum dmi_field {
        DMI_STRING_MAX,
 };
 
+enum dmi_device_type {
+       DMI_DEV_TYPE_ANY = 0,
+       DMI_DEV_TYPE_OTHER,
+       DMI_DEV_TYPE_UNKNOWN,
+       DMI_DEV_TYPE_VIDEO,
+       DMI_DEV_TYPE_SCSI,
+       DMI_DEV_TYPE_ETHERNET,
+       DMI_DEV_TYPE_TOKENRING,
+       DMI_DEV_TYPE_SOUND,
+       DMI_DEV_TYPE_IPMI = -1
+};
+
+struct dmi_header {
+       u8 type;
+       u8 length;
+       u16 handle;
+};
+
 /*
  *     DMI callbacks for problem boards
  */
@@ -26,22 +46,32 @@ struct dmi_strmatch {
 
 struct dmi_system_id {
        int (*callback)(struct dmi_system_id *);
-       char *ident;
+       const char *ident;
        struct dmi_strmatch matches[4];
        void *driver_data;
 };
 
-#define DMI_MATCH(a,b) { a, b }
+#define DMI_MATCH(a, b)        { a, b }
+
+struct dmi_device {
+       struct list_head list;
+       int type;
+       const char *name;
+       void *device_data;      /* Type specific data */
+};
 
 #if defined(CONFIG_X86) && !defined(CONFIG_X86_64)
 
 extern int dmi_check_system(struct dmi_system_id *list);
 extern char * dmi_get_system_info(int field);
-
+extern struct dmi_device * dmi_find_device(int type, const char *name,
+       struct dmi_device *from);
 #else
 
 static inline int dmi_check_system(struct dmi_system_id *list) { return 0; }
 static inline char * dmi_get_system_info(int field) { return NULL; }
+static struct dmi_device * dmi_find_device(int type, const char *name,
+       struct dmi_device *from) { return NULL; }
 
 #endif
 
index f5b3ba5a317df0c90af0a7513678fb9fd5a003cc..ff955dbf510d918503b2f634e85e55ed8bd150c5 100644 (file)
@@ -2,6 +2,7 @@
 #define _LINUX_ELF_H
 
 #include <linux/types.h>
+#include <linux/auxvec.h>
 #include <asm/elf.h>
 
 #ifndef elf_read_implies_exec
@@ -158,29 +159,6 @@ typedef __s64      Elf64_Sxword;
 #define ELF64_ST_BIND(x)       ELF_ST_BIND(x)
 #define ELF64_ST_TYPE(x)       ELF_ST_TYPE(x)
 
-/* Symbolic values for the entries in the auxiliary table
-   put on the initial stack */
-#define AT_NULL   0    /* end of vector */
-#define AT_IGNORE 1    /* entry should be ignored */
-#define AT_EXECFD 2    /* file descriptor of program */
-#define AT_PHDR   3    /* program headers for program */
-#define AT_PHENT  4    /* size of program header entry */
-#define AT_PHNUM  5    /* number of program headers */
-#define AT_PAGESZ 6    /* system page size */
-#define AT_BASE   7    /* base address of interpreter */
-#define AT_FLAGS  8    /* flags */
-#define AT_ENTRY  9    /* entry point of program */
-#define AT_NOTELF 10   /* program is not ELF */
-#define AT_UID    11   /* real uid */
-#define AT_EUID   12   /* effective uid */
-#define AT_GID    13   /* real gid */
-#define AT_EGID   14   /* effective gid */
-#define AT_PLATFORM 15  /* string identifying CPU for optimizations */
-#define AT_HWCAP  16    /* arch dependent hints at CPU capabilities */
-#define AT_CLKTCK 17   /* frequency at which times() increments */
-
-#define AT_SECURE 23   /* secure mode boolean */
-
 typedef struct dynamic{
   Elf32_Sword d_tag;
   union{
index a657130ba03ae576df96b8e6ec4539d64dc6df3f..f7bd1c7ebefbd2a116c4970608b6cfb3c341bf90 100644 (file)
@@ -313,6 +313,9 @@ struct ext2_inode {
 #define EXT2_MOUNT_XATTR_USER          0x004000  /* Extended user attributes */
 #define EXT2_MOUNT_POSIX_ACL           0x008000  /* POSIX Access Control Lists */
 #define EXT2_MOUNT_XIP                 0x010000  /* Execute in place */
+#define EXT2_MOUNT_USRQUOTA            0x020000 /* user quota */
+#define EXT2_MOUNT_GRPQUOTA            0x040000 /* group quota */
+
 
 #define clear_opt(o, opt)              o &= ~EXT2_MOUNT_##opt
 #define set_opt(o, opt)                        o |= EXT2_MOUNT_##opt
index c16662836c582230111f7237f916c96e0aeb6da7..c0272d73ab20a576dfc96c2291e7ab7c74076c48 100644 (file)
@@ -373,6 +373,8 @@ struct ext3_inode {
 #define EXT3_MOUNT_BARRIER             0x20000 /* Use block barriers */
 #define EXT3_MOUNT_NOBH                        0x40000 /* No bufferheads */
 #define EXT3_MOUNT_QUOTA               0x80000 /* Some quota option set */
+#define EXT3_MOUNT_USRQUOTA            0x100000 /* "old" user quota */
+#define EXT3_MOUNT_GRPQUOTA            0x200000 /* "old" group quota */
 
 /* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
 #ifndef _LINUX_EXT2_FS_H
index 886255b69bb9ada407534b9621398e2543006e2e..2063c0839d4fc3e0da2022d4303b4cce327e7d0e 100644 (file)
@@ -3,6 +3,9 @@
 #include <linux/module.h>
 #include <linux/types.h>
 #define FIRMWARE_NAME_MAX 30 
+#define FW_ACTION_NOHOTPLUG 0
+#define FW_ACTION_HOTPLUG 1
+
 struct firmware {
        size_t size;
        u8 *data;
@@ -11,7 +14,7 @@ struct device;
 int request_firmware(const struct firmware **fw, const char *name,
                     struct device *device);
 int request_firmware_nowait(
-       struct module *module,
+       struct module *module, int hotplug,
        const char *name, struct device *device, void *context,
        void (*cont)(const struct firmware *fw, void *context));
 
index 67e6732d4fdc736ec39f4c57324e4d64064e063e..fd93ab7da905041938a7e59473d086d4657a152b 100644 (file)
@@ -69,6 +69,7 @@ extern int dir_notify_enable;
 #define READ 0
 #define WRITE 1
 #define READA 2                /* read-ahead  - don't block if no resources */
+#define SWRITE 3       /* for ll_rw_block() - wait for buffer lock */
 #define SPECIAL 4      /* For non-blockdevice requests in request queue */
 #define READ_SYNC      (READ | (1 << BIO_RW_SYNC))
 #define WRITE_SYNC     (WRITE | (1 << BIO_RW_SYNC))
@@ -281,18 +282,8 @@ struct iattr {
        struct timespec ia_atime;
        struct timespec ia_mtime;
        struct timespec ia_ctime;
-       unsigned int    ia_attr_flags;
 };
 
-/*
- * This is the inode attributes flag definitions
- */
-#define ATTR_FLAG_SYNCRONOUS   1       /* Syncronous write */
-#define ATTR_FLAG_NOATIME      2       /* Don't update atime */
-#define ATTR_FLAG_APPEND       4       /* Append-only file */
-#define ATTR_FLAG_IMMUTABLE    8       /* Immutable file */
-#define ATTR_FLAG_NODIRATIME   16      /* Don't update atime for directory */
-
 /*
  * Includes for diskquotas.
  */
@@ -594,7 +585,6 @@ struct file {
        unsigned int            f_uid, f_gid;
        struct file_ra_state    f_ra;
 
-       size_t                  f_maxcount;
        unsigned long           f_version;
        void                    *f_security;
 
@@ -1291,6 +1281,7 @@ static inline int break_lease(struct inode *inode, unsigned int mode)
 /* fs/open.c */
 
 extern int do_truncate(struct dentry *, loff_t start);
+extern long do_sys_open(const char __user *filename, int flags, int mode);
 extern struct file *filp_open(const char *, int, int);
 extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
 extern int filp_close(struct file *, fl_owner_t id);
index 65d6cfdb6d39c11098008268c6e97df7a3b5b462..10f96c31971ea30daf38c9226d656c0e993af3c0 100644 (file)
@@ -4,14 +4,40 @@
 /* Second argument to futex syscall */
 
 
-#define FUTEX_WAIT (0)
-#define FUTEX_WAKE (1)
-#define FUTEX_FD (2)
-#define FUTEX_REQUEUE (3)
-#define FUTEX_CMP_REQUEUE (4)
+#define FUTEX_WAIT             0
+#define FUTEX_WAKE             1
+#define FUTEX_FD               2
+#define FUTEX_REQUEUE          3
+#define FUTEX_CMP_REQUEUE      4
+#define FUTEX_WAKE_OP          5
 
 long do_futex(unsigned long uaddr, int op, int val,
                unsigned long timeout, unsigned long uaddr2, int val2,
                int val3);
 
+#define FUTEX_OP_SET           0       /* *(int *)UADDR2 = OPARG; */
+#define FUTEX_OP_ADD           1       /* *(int *)UADDR2 += OPARG; */
+#define FUTEX_OP_OR            2       /* *(int *)UADDR2 |= OPARG; */
+#define FUTEX_OP_ANDN          3       /* *(int *)UADDR2 &= ~OPARG; */
+#define FUTEX_OP_XOR           4       /* *(int *)UADDR2 ^= OPARG; */
+
+#define FUTEX_OP_OPARG_SHIFT   8       /* Use (1 << OPARG) instead of OPARG.  */
+
+#define FUTEX_OP_CMP_EQ                0       /* if (oldval == CMPARG) wake */
+#define FUTEX_OP_CMP_NE                1       /* if (oldval != CMPARG) wake */
+#define FUTEX_OP_CMP_LT                2       /* if (oldval < CMPARG) wake */
+#define FUTEX_OP_CMP_LE                3       /* if (oldval <= CMPARG) wake */
+#define FUTEX_OP_CMP_GT                4       /* if (oldval > CMPARG) wake */
+#define FUTEX_OP_CMP_GE                5       /* if (oldval >= CMPARG) wake */
+
+/* FUTEX_WAKE_OP will perform atomically
+   int oldval = *(int *)UADDR2;
+   *(int *)UADDR2 = oldval OP OPARG;
+   if (oldval CMP CMPARG)
+     wake UADDR2;  */
+
+#define FUTEX_OP(op, oparg, cmp, cmparg) \
+  (((op & 0xf) << 28) | ((cmp & 0xf) << 24)            \
+   | ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
+
 #endif
index 7c7400137e97f11dffd425004321d1e675b802a0..4dc990f3b5ccea27bf5854d1e0f96e4367b4cb7c 100644 (file)
@@ -40,6 +40,7 @@ struct vm_area_struct;
 #define __GFP_ZERO     0x8000u /* Return zeroed page on success */
 #define __GFP_NOMEMALLOC 0x10000u /* Don't use emergency reserves */
 #define __GFP_NORECLAIM  0x20000u /* No realy zone reclaim during allocation */
+#define __GFP_HARDWALL   0x40000u /* Enforce hardwall cpuset memory allocs */
 
 #define __GFP_BITS_SHIFT 20    /* Room for 20 __GFP_FOO bits */
 #define __GFP_BITS_MASK ((1 << __GFP_BITS_SHIFT) - 1)
@@ -48,14 +49,15 @@ struct vm_area_struct;
 #define GFP_LEVEL_MASK (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_FS| \
                        __GFP_COLD|__GFP_NOWARN|__GFP_REPEAT| \
                        __GFP_NOFAIL|__GFP_NORETRY|__GFP_NO_GROW|__GFP_COMP| \
-                       __GFP_NOMEMALLOC|__GFP_NORECLAIM)
+                       __GFP_NOMEMALLOC|__GFP_NORECLAIM|__GFP_HARDWALL)
 
 #define GFP_ATOMIC     (__GFP_HIGH)
 #define GFP_NOIO       (__GFP_WAIT)
 #define GFP_NOFS       (__GFP_WAIT | __GFP_IO)
 #define GFP_KERNEL     (__GFP_WAIT | __GFP_IO | __GFP_FS)
-#define GFP_USER       (__GFP_WAIT | __GFP_IO | __GFP_FS)
-#define GFP_HIGHUSER   (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HIGHMEM)
+#define GFP_USER       (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL)
+#define GFP_HIGHUSER   (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | \
+                        __GFP_HIGHMEM)
 
 /* Flag - indicates that the buffer will be suitable for DMA.  Ignored on some
    platforms, used as appropriate on others */
index 93bb3afe646bc315d1ce17849acdad149e9b8684..ee5b239092edbb03dee1765dd7919246bf4a2400 100644 (file)
@@ -47,6 +47,7 @@ struct inotify_event {
 #define IN_MOVE                        (IN_MOVED_FROM | IN_MOVED_TO) /* moves */
 
 /* special flags */
+#define IN_MASK_ADD            0x20000000      /* add to the mask of an already existing watch */
 #define IN_ISDIR               0x40000000      /* event occurred against dir */
 #define IN_ONESHOT             0x80000000      /* only send event once */
 
index bdc53c6cc962ad78989fbbb0cfbac2a68cb57aa2..4767e5429534dff11c004923b5a3ee9827bcac50 100644 (file)
@@ -66,6 +66,7 @@ struct input_absinfo {
 #define EVIOCGKEY(len)         _IOC(_IOC_READ, 'E', 0x18, len)         /* get global keystate */
 #define EVIOCGLED(len)         _IOC(_IOC_READ, 'E', 0x19, len)         /* get all LEDs */
 #define EVIOCGSND(len)         _IOC(_IOC_READ, 'E', 0x1a, len)         /* get all sounds status */
+#define EVIOCGSW(len)          _IOC(_IOC_READ, 'E', 0x1b, len)         /* get all switch states */
 
 #define EVIOCGBIT(ev,len)      _IOC(_IOC_READ, 'E', 0x20 + ev, len)    /* get event bits */
 #define EVIOCGABS(abs)         _IOR('E', 0x40 + abs, struct input_absinfo)             /* get abs value/limits */
@@ -86,6 +87,7 @@ struct input_absinfo {
 #define EV_REL                 0x02
 #define EV_ABS                 0x03
 #define EV_MSC                 0x04
+#define EV_SW                  0x05
 #define EV_LED                 0x11
 #define EV_SND                 0x12
 #define EV_REP                 0x14
@@ -550,6 +552,20 @@ struct input_absinfo {
 #define ABS_MISC               0x28
 #define ABS_MAX                        0x3f
 
+/*
+ * Switch events
+ */
+
+#define SW_0           0x00
+#define SW_1           0x01
+#define SW_2           0x02
+#define SW_3           0x03
+#define SW_4           0x04
+#define SW_5           0x05
+#define SW_6           0x06
+#define SW_7           0x07
+#define SW_MAX         0x0f
+
 /*
  * Misc events
  */
@@ -824,6 +840,7 @@ struct input_dev {
        unsigned long ledbit[NBITS(LED_MAX)];
        unsigned long sndbit[NBITS(SND_MAX)];
        unsigned long ffbit[NBITS(FF_MAX)];
+       unsigned long swbit[NBITS(SW_MAX)];
        int ff_effects_max;
 
        unsigned int keycodemax;
@@ -844,6 +861,7 @@ struct input_dev {
        unsigned long key[NBITS(KEY_MAX)];
        unsigned long led[NBITS(LED_MAX)];
        unsigned long snd[NBITS(SND_MAX)];
+       unsigned long sw[NBITS(SW_MAX)];
 
        int absmax[ABS_MAX + 1];
        int absmin[ABS_MAX + 1];
@@ -886,6 +904,7 @@ struct input_dev {
 #define INPUT_DEVICE_ID_MATCH_LEDBIT   0x200
 #define INPUT_DEVICE_ID_MATCH_SNDBIT   0x400
 #define INPUT_DEVICE_ID_MATCH_FFBIT    0x800
+#define INPUT_DEVICE_ID_MATCH_SWBIT    0x1000
 
 #define INPUT_DEVICE_ID_MATCH_DEVICE\
        (INPUT_DEVICE_ID_MATCH_BUS | INPUT_DEVICE_ID_MATCH_VENDOR | INPUT_DEVICE_ID_MATCH_PRODUCT)
@@ -906,6 +925,7 @@ struct input_device_id {
        unsigned long ledbit[NBITS(LED_MAX)];
        unsigned long sndbit[NBITS(SND_MAX)];
        unsigned long ffbit[NBITS(FF_MAX)];
+       unsigned long swbit[NBITS(SW_MAX)];
 
        unsigned long driver_info;
 };
@@ -998,6 +1018,11 @@ static inline void input_report_ff_status(struct input_dev *dev, unsigned int co
        input_event(dev, EV_FF_STATUS, code, value);
 }
 
+static inline void input_report_switch(struct input_dev *dev, unsigned int code, int value)
+{
+       input_event(dev, EV_SW, code, !!value);
+}
+
 static inline void input_regs(struct input_dev *dev, struct pt_regs *regs)
 {
        dev->regs = regs;
index e8c4af32b3bb6ddcbd2005aa57a776d79216aef5..948809d999177867fb0820236f32e59a3d7ce52a 100644 (file)
@@ -14,26 +14,4 @@ struct ioctl_trans {
        struct ioctl_trans *next;
 };
 
-/* 
- * Register an 32bit ioctl translation handler for ioctl cmd.
- *
- * handler == NULL: use 64bit ioctl handler.
- * arguments to handler:  fd: file descriptor
- *                        cmd: ioctl command.
- *                        arg: ioctl argument
- *                        struct file *file: file descriptor pointer.
- */ 
-
-#ifdef CONFIG_COMPAT
-extern int __deprecated register_ioctl32_conversion(unsigned int cmd,
-                               ioctl_trans_handler_t handler);
-extern int __deprecated unregister_ioctl32_conversion(unsigned int cmd);
-
-#else
-
-#define register_ioctl32_conversion(cmd, handler)      ({ 0; })
-#define unregister_ioctl32_conversion(cmd)             ({ 0; })
-
-#endif
-
 #endif
index 596ca6130159f749036cf15860ba275c2122a6d3..938d55b813a5f600050fcc557331195b036fa12c 100644 (file)
@@ -35,6 +35,7 @@
 #define __LINUX_IPMI_H
 
 #include <linux/ipmi_msgdefs.h>
+#include <linux/compiler.h>
 
 /*
  * This file describes an interface to an IPMI driver.  You have to
@@ -241,7 +242,8 @@ struct ipmi_recv_msg
        /* The user_msg_data is the data supplied when a message was
           sent, if this is a response to a sent message.  If this is
           not a response to a sent message, then user_msg_data will
-          be NULL. */
+          be NULL.  If the user above is NULL, then this will be the
+          intf. */
        void             *user_msg_data;
 
        /* Call this when done with the message.  It will presumably free
@@ -298,13 +300,19 @@ void ipmi_get_version(ipmi_user_t   user,
    this user, so it will affect all users of this interface.  This is
    so some initialization code can come in and do the OEM-specific
    things it takes to determine your address (if not the BMC) and set
-   it for everyone else. */
-void ipmi_set_my_address(ipmi_user_t   user,
-                        unsigned char address);
-unsigned char ipmi_get_my_address(ipmi_user_t user);
-void ipmi_set_my_LUN(ipmi_user_t   user,
-                    unsigned char LUN);
-unsigned char ipmi_get_my_LUN(ipmi_user_t user);
+   it for everyone else.  Note that each channel can have its own address. */
+int ipmi_set_my_address(ipmi_user_t   user,
+                       unsigned int  channel,
+                       unsigned char address);
+int ipmi_get_my_address(ipmi_user_t   user,
+                       unsigned int  channel,
+                       unsigned char *address);
+int ipmi_set_my_LUN(ipmi_user_t   user,
+                   unsigned int  channel,
+                   unsigned char LUN);
+int ipmi_get_my_LUN(ipmi_user_t   user,
+                   unsigned int  channel,
+                   unsigned char *LUN);
 
 /*
  * Like ipmi_request, but lets you specify the number of retries and
@@ -585,6 +593,16 @@ struct ipmi_cmdspec
  * things it takes to determine your address (if not the BMC) and set
  * it for everyone else.  You should probably leave the LUN alone.
  */
+struct ipmi_channel_lun_address_set
+{
+       unsigned short channel;
+       unsigned char  value;
+};
+#define IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 24, struct ipmi_channel_lun_address_set)
+#define IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD _IOR(IPMI_IOC_MAGIC, 25, struct ipmi_channel_lun_address_set)
+#define IPMICTL_SET_MY_CHANNEL_LUN_CMD    _IOR(IPMI_IOC_MAGIC, 26, struct ipmi_channel_lun_address_set)
+#define IPMICTL_GET_MY_CHANNEL_LUN_CMD    _IOR(IPMI_IOC_MAGIC, 27, struct ipmi_channel_lun_address_set)
+/* Legacy interfaces, these only set IPMB 0. */
 #define IPMICTL_SET_MY_ADDRESS_CMD     _IOR(IPMI_IOC_MAGIC, 17, unsigned int)
 #define IPMICTL_GET_MY_ADDRESS_CMD     _IOR(IPMI_IOC_MAGIC, 18, unsigned int)
 #define IPMICTL_SET_MY_LUN_CMD         _IOR(IPMI_IOC_MAGIC, 19, unsigned int)
index 069d3b84d311b442ffbbe2074733b78f5e894b7b..69681c3b1f05f8fac09efb8ad5334c60b65686c0 100644 (file)
 #define IRQ_WAITING    32      /* IRQ not yet seen - for autodetection */
 #define IRQ_LEVEL      64      /* IRQ level triggered */
 #define IRQ_MASKED     128     /* IRQ masked - shouldn't be seen again */
-#define IRQ_PER_CPU    256     /* IRQ is per CPU */
+#if defined(ARCH_HAS_IRQ_PER_CPU)
+# define IRQ_PER_CPU   256     /* IRQ is per CPU */
+# define CHECK_IRQ_PER_CPU(var) ((var) & IRQ_PER_CPU)
+#else
+# define CHECK_IRQ_PER_CPU(var) 0
+#endif
 
 /*
  * Interrupt controller descriptor. This is all we need
@@ -71,16 +76,139 @@ typedef struct irq_desc {
        unsigned int irq_count;         /* For detecting broken interrupts */
        unsigned int irqs_unhandled;
        spinlock_t lock;
+#if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE)
+       unsigned int move_irq;          /* Flag need to re-target intr dest*/
+#endif
 } ____cacheline_aligned irq_desc_t;
 
 extern irq_desc_t irq_desc [NR_IRQS];
 
+/* Return a pointer to the irq descriptor for IRQ.  */
+static inline irq_desc_t *
+irq_descp (int irq)
+{
+       return irq_desc + irq;
+}
+
 #include <asm/hw_irq.h> /* the arch dependent stuff */
 
 extern int setup_irq(unsigned int irq, struct irqaction * new);
 
 #ifdef CONFIG_GENERIC_HARDIRQS
 extern cpumask_t irq_affinity[NR_IRQS];
+
+#ifdef CONFIG_SMP
+static inline void set_native_irq_info(int irq, cpumask_t mask)
+{
+       irq_affinity[irq] = mask;
+}
+#else
+static inline void set_native_irq_info(int irq, cpumask_t mask)
+{
+}
+#endif
+
+#ifdef CONFIG_SMP
+
+#if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE)
+extern cpumask_t pending_irq_cpumask[NR_IRQS];
+
+static inline void set_pending_irq(unsigned int irq, cpumask_t mask)
+{
+       irq_desc_t *desc = irq_desc + irq;
+       unsigned long flags;
+
+       spin_lock_irqsave(&desc->lock, flags);
+       desc->move_irq = 1;
+       pending_irq_cpumask[irq] = mask;
+       spin_unlock_irqrestore(&desc->lock, flags);
+}
+
+static inline void
+move_native_irq(int irq)
+{
+       cpumask_t tmp;
+       irq_desc_t *desc = irq_descp(irq);
+
+       if (likely (!desc->move_irq))
+               return;
+
+       desc->move_irq = 0;
+
+       if (likely(cpus_empty(pending_irq_cpumask[irq])))
+               return;
+
+       if (!desc->handler->set_affinity)
+               return;
+
+       /* note - we hold the desc->lock */
+       cpus_and(tmp, pending_irq_cpumask[irq], cpu_online_map);
+
+       /*
+        * If there was a valid mask to work with, please
+        * do the disable, re-program, enable sequence.
+        * This is *not* particularly important for level triggered
+        * but in a edge trigger case, we might be setting rte
+        * when an active trigger is comming in. This could
+        * cause some ioapics to mal-function.
+        * Being paranoid i guess!
+        */
+       if (unlikely(!cpus_empty(tmp))) {
+               desc->handler->disable(irq);
+               desc->handler->set_affinity(irq,tmp);
+               desc->handler->enable(irq);
+       }
+       cpus_clear(pending_irq_cpumask[irq]);
+}
+
+#ifdef CONFIG_PCI_MSI
+/*
+ * Wonder why these are dummies?
+ * For e.g the set_ioapic_affinity_vector() calls the set_ioapic_affinity_irq()
+ * counter part after translating the vector to irq info. We need to perform
+ * this operation on the real irq, when we dont use vector, i.e when
+ * pci_use_vector() is false.
+ */
+static inline void move_irq(int irq)
+{
+}
+
+static inline void set_irq_info(int irq, cpumask_t mask)
+{
+}
+
+#else // CONFIG_PCI_MSI
+
+static inline void move_irq(int irq)
+{
+       move_native_irq(irq);
+}
+
+static inline void set_irq_info(int irq, cpumask_t mask)
+{
+       set_native_irq_info(irq, mask);
+}
+#endif // CONFIG_PCI_MSI
+
+#else  // CONFIG_GENERIC_PENDING_IRQ || CONFIG_IRQBALANCE
+
+#define move_irq(x)
+#define move_native_irq(x)
+#define set_pending_irq(x,y)
+static inline void set_irq_info(int irq, cpumask_t mask)
+{
+       set_native_irq_info(irq, mask);
+}
+
+#endif // CONFIG_GENERIC_PENDING_IRQ
+
+#else // CONFIG_SMP
+
+#define move_irq(x)
+#define move_native_irq(x)
+
+#endif // CONFIG_SMP
+
 extern int no_irq_affinity;
 extern int noirqdebug_setup(char *str);
 
index 862083eb58ab2d6650b876576d2ddd9e81e162b2..53eaee96065bc0512370b866511c7b3ed4f11737 100644 (file)
@@ -150,7 +150,6 @@ typedef struct {
 #include <linux/errno.h>
 #include <linux/fs.h>
 #include <linux/major.h>
-#include <asm/segment.h>
 #include <asm/io.h>
 #include <linux/kernel.h>
 #include <linux/signal.h>
index 593407e865b1b0ce543f3bee6059b71452b32ede..84321a4cac93a1e942a4df994f28dbf44aeeec86 100644 (file)
@@ -914,7 +914,6 @@ extern int     journal_wipe       (journal_t *, int);
 extern int        journal_skip_recovery        (journal_t *);
 extern void       journal_update_superblock    (journal_t *, int);
 extern void       __journal_abort_hard (journal_t *);
-extern void       __journal_abort_soft (journal_t *, int);
 extern void       journal_abort      (journal_t *, int);
 extern int        journal_errno      (journal_t *);
 extern void       journal_ack_err    (journal_t *);
index c4d1fae4dd89a5a74ba95b1f8b8d6cd21a9edb1f..74071254c9d38c348b0bba649d9e8c9ebb4cb049 100644 (file)
 #include <linux/kref.h>
 #include <linux/list.h>
 
-
+struct klist_node;
 struct klist {
        spinlock_t              k_lock;
        struct list_head        k_list;
+       void                    (*get)(struct klist_node *);
+       void                    (*put)(struct klist_node *);
 };
 
 
-extern void klist_init(struct klist * k);
-
+extern void klist_init(struct klist * k, void (*get)(struct klist_node *),
+                      void (*put)(struct klist_node *));
 
 struct klist_node {
        struct klist            * n_klist;
index e050fc2d4c26146fac9d289de9b2cfda5663e400..e30afdca79174f9a01b0b538dca138f62bf697f2 100644 (file)
@@ -42,6 +42,9 @@
 #define KPROBE_REENTER         0x00000004
 #define KPROBE_HIT_SSDONE      0x00000008
 
+/* Attach to insert probes on any functions which should be ignored*/
+#define __kprobes      __attribute__((__section__(".kprobes.text")))
+
 struct kprobe;
 struct pt_regs;
 struct kretprobe;
index 338f7795d8a071d63b05969505b6fe9894eafc46..147eb01e0d4bbe536da8bef077fac4ed8d9cdd37 100644 (file)
   ALIGN; \
   name:
 
+#define KPROBE_ENTRY(name) \
+  .section .kprobes.text, "ax"; \
+  .globl name; \
+  ALIGN; \
+  name:
+
+
 #endif
 
 #define NORET_TYPE    /**/
index aefedf04b9bb24384ed423b8876ee3a4d6219331..18fc77f682de8dcf629c83945c4595fd3cc0b82c 100644 (file)
@@ -33,6 +33,13 @@ struct mmc_csd {
        unsigned int            capacity;
 };
 
+struct sd_scr {
+       unsigned char           sda_vsn;
+       unsigned char           bus_widths;
+#define SD_SCR_BUS_WIDTH_1     (1<<0)
+#define SD_SCR_BUS_WIDTH_4     (1<<2)
+};
+
 struct mmc_host;
 
 /*
@@ -47,19 +54,27 @@ struct mmc_card {
 #define MMC_STATE_PRESENT      (1<<0)          /* present in sysfs */
 #define MMC_STATE_DEAD         (1<<1)          /* device no longer in stack */
 #define MMC_STATE_BAD          (1<<2)          /* unrecognised device */
+#define MMC_STATE_SDCARD       (1<<3)          /* is an SD card */
+#define MMC_STATE_READONLY     (1<<4)          /* card is read-only */
        u32                     raw_cid[4];     /* raw card CID */
        u32                     raw_csd[4];     /* raw card CSD */
+       u32                     raw_scr[2];     /* raw card SCR */
        struct mmc_cid          cid;            /* card identification */
        struct mmc_csd          csd;            /* card specific */
+       struct sd_scr           scr;            /* extra SD information */
 };
 
 #define mmc_card_present(c)    ((c)->state & MMC_STATE_PRESENT)
 #define mmc_card_dead(c)       ((c)->state & MMC_STATE_DEAD)
 #define mmc_card_bad(c)                ((c)->state & MMC_STATE_BAD)
+#define mmc_card_sd(c)         ((c)->state & MMC_STATE_SDCARD)
+#define mmc_card_readonly(c)   ((c)->state & MMC_STATE_READONLY)
 
 #define mmc_card_set_present(c)        ((c)->state |= MMC_STATE_PRESENT)
 #define mmc_card_set_dead(c)   ((c)->state |= MMC_STATE_DEAD)
 #define mmc_card_set_bad(c)    ((c)->state |= MMC_STATE_BAD)
+#define mmc_card_set_sd(c)     ((c)->state |= MMC_STATE_SDCARD)
+#define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
 
 #define mmc_card_name(c)       ((c)->cid.prod_name)
 #define mmc_card_id(c)         ((c)->dev.bus_id)
index 30f68c0c8c6ebfa5b3c2cfe9b51aca76c86159fa..6014160d9c0665acc497ade8b1236f93f1f4637a 100644 (file)
@@ -57,11 +57,17 @@ struct mmc_ios {
 #define MMC_POWER_OFF          0
 #define MMC_POWER_UP           1
 #define MMC_POWER_ON           2
+
+       unsigned char   bus_width;              /* data bus width */
+
+#define MMC_BUS_WIDTH_1                0
+#define MMC_BUS_WIDTH_4                2
 };
 
 struct mmc_host_ops {
        void    (*request)(struct mmc_host *host, struct mmc_request *req);
        void    (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
+       int     (*get_ro)(struct mmc_host *host);
 };
 
 struct mmc_card;
@@ -76,6 +82,10 @@ struct mmc_host {
        unsigned int            f_max;
        u32                     ocr_avail;
 
+       unsigned long           caps;           /* Host capabilities */
+
+#define MMC_CAP_4_BIT_DATA     (1 << 0)        /* Can the host do 4 bit transfers */
+
        /* host specific block data */
        unsigned int            max_seg_size;   /* see blk_queue_max_segment_size */
        unsigned short          max_hw_segs;    /* see blk_queue_max_hw_segments */
@@ -87,6 +97,10 @@ struct mmc_host {
        struct mmc_ios          ios;            /* current io bus settings */
        u32                     ocr;            /* the current OCR setting */
 
+       unsigned int            mode;           /* current card mode of host */
+#define MMC_MODE_MMC           0
+#define MMC_MODE_SD            1
+
        struct list_head        cards;          /* devices attached to this host */
 
        wait_queue_head_t       wq;
index 0d35d4ffb360d8def93506fa05fe99be852d1dc2..1ab78e8d6c530ac36c69c12038aea7112063a2d7 100644 (file)
@@ -88,6 +88,8 @@ struct mmc_card;
 
 extern int mmc_wait_for_req(struct mmc_host *, struct mmc_request *);
 extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int);
+extern int mmc_wait_for_app_cmd(struct mmc_host *, unsigned int,
+       struct mmc_command *, int);
 
 extern int __mmc_claim_host(struct mmc_host *host, struct mmc_card *card);
 
index 896342817b97bab2a7b20bb247115317224583fe..f819cae92266aa2fdd889d7bbe9b6480828d9680 100644 (file)
@@ -236,5 +236,12 @@ struct _mmc_csd {
 #define CSD_SPEC_VER_2      2           /* Implements system specification 2.0 - 2.2 */
 #define CSD_SPEC_VER_3      3           /* Implements system specification 3.1 */
 
+
+/*
+ * SD bus widths
+ */
+#define SD_BUS_WIDTH_1      0
+#define SD_BUS_WIDTH_4      2
+
 #endif  /* MMC_MMC_PROTOCOL_H */
 
index 2c4c6aa643ff42f20217f88205ef55349b0c707f..903e0ab8101fad230721c7ecd27653b413a5d058 100644 (file)
@@ -77,6 +77,7 @@ struct msg_msg {
 /* one msq_queue structure for each present queue on the system */
 struct msg_queue {
        struct kern_ipc_perm q_perm;
+       int q_id;
        time_t q_stime;                 /* last msgsnd time */
        time_t q_rtime;                 /* last msgrcv time */
        time_t q_ctime;                 /* last change time */
index 088742befe4975dd3f9c08441c99da207f4aae20..7e033e9271a88efbb2b214e4834176147d33d28f 100644 (file)
@@ -263,6 +263,9 @@ struct ip_conntrack_expect
        /* Unique ID */
        unsigned int id;
 
+       /* Flags */
+       unsigned int flags;
+
 #ifdef CONFIG_IP_NF_NAT_NEEDED
        /* This is the original per-proto part, used to map the
         * expected connection the way the recipient expects. */
@@ -272,6 +275,8 @@ struct ip_conntrack_expect
 #endif
 };
 
+#define IP_CT_EXPECT_PERMANENT 0x1
+
 static inline struct ip_conntrack *
 tuplehash_to_ctrack(const struct ip_conntrack_tuple_hash *hash)
 {
index dc4d2a0575de9c666ac45428b81d47e634ac1805..907d4f5ca5dc50f2384ad69730f8c5686e085cf1 100644 (file)
@@ -52,7 +52,7 @@ static inline int ip_conntrack_confirm(struct sk_buff **pskb)
        return ret;
 }
 
-extern void __ip_ct_expect_unlink_destroy(struct ip_conntrack_expect *exp);
+extern void ip_ct_unlink_expect(struct ip_conntrack_expect *exp);
 
 extern struct list_head *ip_conntrack_hash;
 extern struct list_head ip_conntrack_expect_list;
index fecd2a06dcd81166c8fd2037e57bd4d5c3d22ccd..73b9552e6a8941eea8c3c30ba74c9bb96ad69c2e 100644 (file)
@@ -19,5 +19,10 @@ extern unsigned int
 alloc_null_binding(struct ip_conntrack *conntrack,
                   struct ip_nat_info *info,
                   unsigned int hooknum);
+
+extern unsigned int
+alloc_null_binding_confirmed(struct ip_conntrack *conntrack,
+                            struct ip_nat_info *info,
+                            unsigned int hooknum);
 #endif
 #endif /* _IP_NAT_RULE_H */
index 95c941f8c747cd37e83264096e81a27776f2101c..ee0ab7a5f91bbca1389cc46f1b678f4717373ece 100644 (file)
 #define PCI_DEVICE_ID_TOSHIBA_TC35815CF        0x0030
 #define PCI_DEVICE_ID_TOSHIBA_TX4927   0x0180
 #define PCI_DEVICE_ID_TOSHIBA_TC86C001_MISC    0x0108
+#define PCI_DEVICE_ID_TOSHIBA_SPIDER_NET 0x01b3
 
 #define PCI_VENDOR_ID_RICOH            0x1180
 #define PCI_DEVICE_ID_RICOH_RL5C465    0x0465
index 36725e7c02c69494222719d1aa334dc5da258c94..1767073df26fe03720176c080d13908ade41f291 100644 (file)
@@ -39,9 +39,6 @@ struct pipe_inode_info {
 
 #define PIPE_SEM(inode)                (&(inode).i_sem)
 #define PIPE_WAIT(inode)       (&(inode).i_pipe->wait)
-#define PIPE_BASE(inode)       ((inode).i_pipe->base)
-#define PIPE_START(inode)      ((inode).i_pipe->start)
-#define PIPE_LEN(inode)                ((inode).i_pipe->len)
 #define PIPE_READERS(inode)    ((inode).i_pipe->readers)
 #define PIPE_WRITERS(inode)    ((inode).i_pipe->writers)
 #define PIPE_WAITING_WRITERS(inode)    ((inode).i_pipe->waiting_writers)
index 5ec2bd0c28483c0011de79920011fe3aaa4bc2d1..aadbac29103cfc7601291e8fc0415f46d6cafc85 100644 (file)
@@ -443,7 +443,7 @@ static inline void pnp_unregister_driver(struct pnp_driver *drv) { ; }
 #define pnp_info(format, arg...) printk(KERN_INFO "pnp: " format "\n" , ## arg)
 #define pnp_warn(format, arg...) printk(KERN_WARNING "pnp: " format "\n" , ## arg)
 
-#ifdef DEBUG
+#ifdef CONFIG_PNP_DEBUG
 #define pnp_dbg(format, arg...) printk(KERN_DEBUG "pnp: " format "\n" , ## arg)
 #else
 #define pnp_dbg(format, arg...) do {} while (0)
index 2afdafb62123c212d0b6366a210078d38760ba81..dc6f3647bfbc01cfcfca8192d631b12d4c9bdd80 100644 (file)
@@ -90,6 +90,7 @@ extern void __ptrace_link(struct task_struct *child,
                          struct task_struct *new_parent);
 extern void __ptrace_unlink(struct task_struct *child);
 extern void ptrace_untrace(struct task_struct *child);
+extern int ptrace_may_attach(struct task_struct *task);
 
 static inline void ptrace_link(struct task_struct *child,
                               struct task_struct *new_parent)
diff --git a/include/linux/raid_class.h b/include/linux/raid_class.h
new file mode 100644 (file)
index 0000000..a71123c
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ */
+#include <linux/transport_class.h>
+
+struct raid_template {
+       struct transport_container raid_attrs;
+};
+
+struct raid_function_template {
+       void *cookie;
+       int (*is_raid)(struct device *);
+       void (*get_resync)(struct device *);
+       void (*get_state)(struct device *);
+};
+
+enum raid_state {
+       RAID_ACTIVE = 1,
+       RAID_DEGRADED,
+       RAID_RESYNCING,
+       RAID_OFFLINE,
+};
+
+struct raid_data {
+       struct list_head component_list;
+       int component_count;
+       int level;
+       enum raid_state state;
+       int resync;
+};
+
+#define DEFINE_RAID_ATTRIBUTE(type, attr)                                    \
+static inline void                                                           \
+raid_set_##attr(struct raid_template *r, struct device *dev, type value) {    \
+       struct class_device *cdev =                                           \
+               attribute_container_find_class_device(&r->raid_attrs.ac, dev);\
+       struct raid_data *rd;                                                 \
+       BUG_ON(!cdev);                                                        \
+       rd = class_get_devdata(cdev);                                         \
+       rd->attr = value;                                                     \
+}                                                                            \
+static inline type                                                           \
+raid_get_##attr(struct raid_template *r, struct device *dev) {               \
+       struct class_device *cdev =                                           \
+               attribute_container_find_class_device(&r->raid_attrs.ac, dev);\
+       struct raid_data *rd;                                                 \
+       BUG_ON(!cdev);                                                        \
+       rd = class_get_devdata(cdev);                                         \
+       return rd->attr;                                                      \
+}
+
+DEFINE_RAID_ATTRIBUTE(int, level)
+DEFINE_RAID_ATTRIBUTE(int, resync)
+DEFINE_RAID_ATTRIBUTE(enum raid_state, state)
+       
+struct raid_template *raid_class_attach(struct raid_function_template *);
+void raid_class_release(struct raid_template *);
+
+void raid_component_add(struct raid_template *, struct device *,
+                       struct device *);
diff --git a/include/linux/relayfs_fs.h b/include/linux/relayfs_fs.h
new file mode 100644 (file)
index 0000000..cfafc3e
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+ * linux/include/linux/relayfs_fs.h
+ *
+ * Copyright (C) 2002, 2003 - Tom Zanussi (zanussi@us.ibm.com), IBM Corp
+ * Copyright (C) 1999, 2000, 2001, 2002 - Karim Yaghmour (karim@opersys.com)
+ *
+ * RelayFS definitions and declarations
+ */
+
+#ifndef _LINUX_RELAYFS_FS_H
+#define _LINUX_RELAYFS_FS_H
+
+#include <linux/config.h>
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/wait.h>
+#include <linux/list.h>
+#include <linux/fs.h>
+#include <linux/poll.h>
+#include <linux/kref.h>
+
+/*
+ * Tracks changes to rchan_buf struct
+ */
+#define RELAYFS_CHANNEL_VERSION                5
+
+/*
+ * Per-cpu relay channel buffer
+ */
+struct rchan_buf
+{
+       void *start;                    /* start of channel buffer */
+       void *data;                     /* start of current sub-buffer */
+       size_t offset;                  /* current offset into sub-buffer */
+       size_t subbufs_produced;        /* count of sub-buffers produced */
+       size_t subbufs_consumed;        /* count of sub-buffers consumed */
+       struct rchan *chan;             /* associated channel */
+       wait_queue_head_t read_wait;    /* reader wait queue */
+       struct work_struct wake_readers; /* reader wake-up work struct */
+       struct dentry *dentry;          /* channel file dentry */
+       struct kref kref;               /* channel buffer refcount */
+       struct page **page_array;       /* array of current buffer pages */
+       unsigned int page_count;        /* number of current buffer pages */
+       unsigned int finalized;         /* buffer has been finalized */
+       size_t *padding;                /* padding counts per sub-buffer */
+       size_t prev_padding;            /* temporary variable */
+       size_t bytes_consumed;          /* bytes consumed in cur read subbuf */
+       unsigned int cpu;               /* this buf's cpu */
+} ____cacheline_aligned;
+
+/*
+ * Relay channel data structure
+ */
+struct rchan
+{
+       u32 version;                    /* the version of this struct */
+       size_t subbuf_size;             /* sub-buffer size */
+       size_t n_subbufs;               /* number of sub-buffers per buffer */
+       size_t alloc_size;              /* total buffer size allocated */
+       struct rchan_callbacks *cb;     /* client callbacks */
+       struct kref kref;               /* channel refcount */
+       void *private_data;             /* for user-defined data */
+       struct rchan_buf *buf[NR_CPUS]; /* per-cpu channel buffers */
+};
+
+/*
+ * Relayfs inode
+ */
+struct relayfs_inode_info
+{
+       struct inode vfs_inode;
+       struct rchan_buf *buf;
+};
+
+static inline struct relayfs_inode_info *RELAYFS_I(struct inode *inode)
+{
+       return container_of(inode, struct relayfs_inode_info, vfs_inode);
+}
+
+/*
+ * Relay channel client callbacks
+ */
+struct rchan_callbacks
+{
+       /*
+        * subbuf_start - called on buffer-switch to a new sub-buffer
+        * @buf: the channel buffer containing the new sub-buffer
+        * @subbuf: the start of the new sub-buffer
+        * @prev_subbuf: the start of the previous sub-buffer
+        * @prev_padding: unused space at the end of previous sub-buffer
+        *
+        * The client should return 1 to continue logging, 0 to stop
+        * logging.
+        *
+        * NOTE: subbuf_start will also be invoked when the buffer is
+        *       created, so that the first sub-buffer can be initialized
+        *       if necessary.  In this case, prev_subbuf will be NULL.
+        *
+        * NOTE: the client can reserve bytes at the beginning of the new
+        *       sub-buffer by calling subbuf_start_reserve() in this callback.
+        */
+       int (*subbuf_start) (struct rchan_buf *buf,
+                            void *subbuf,
+                            void *prev_subbuf,
+                            size_t prev_padding);
+
+       /*
+        * buf_mapped - relayfs buffer mmap notification
+        * @buf: the channel buffer
+        * @filp: relayfs file pointer
+        *
+        * Called when a relayfs file is successfully mmapped
+        */
+        void (*buf_mapped)(struct rchan_buf *buf,
+                          struct file *filp);
+
+       /*
+        * buf_unmapped - relayfs buffer unmap notification
+        * @buf: the channel buffer
+        * @filp: relayfs file pointer
+        *
+        * Called when a relayfs file is successfully unmapped
+        */
+        void (*buf_unmapped)(struct rchan_buf *buf,
+                            struct file *filp);
+};
+
+/*
+ * relayfs kernel API, fs/relayfs/relay.c
+ */
+
+struct rchan *relay_open(const char *base_filename,
+                        struct dentry *parent,
+                        size_t subbuf_size,
+                        size_t n_subbufs,
+                        struct rchan_callbacks *cb);
+extern void relay_close(struct rchan *chan);
+extern void relay_flush(struct rchan *chan);
+extern void relay_subbufs_consumed(struct rchan *chan,
+                                  unsigned int cpu,
+                                  size_t consumed);
+extern void relay_reset(struct rchan *chan);
+extern int relay_buf_full(struct rchan_buf *buf);
+
+extern size_t relay_switch_subbuf(struct rchan_buf *buf,
+                                 size_t length);
+extern struct dentry *relayfs_create_dir(const char *name,
+                                        struct dentry *parent);
+extern int relayfs_remove_dir(struct dentry *dentry);
+
+/**
+ *     relay_write - write data into the channel
+ *     @chan: relay channel
+ *     @data: data to be written
+ *     @length: number of bytes to write
+ *
+ *     Writes data into the current cpu's channel buffer.
+ *
+ *     Protects the buffer by disabling interrupts.  Use this
+ *     if you might be logging from interrupt context.  Try
+ *     __relay_write() if you know you won't be logging from
+ *     interrupt context.
+ */
+static inline void relay_write(struct rchan *chan,
+                              const void *data,
+                              size_t length)
+{
+       unsigned long flags;
+       struct rchan_buf *buf;
+
+       local_irq_save(flags);
+       buf = chan->buf[smp_processor_id()];
+       if (unlikely(buf->offset + length > chan->subbuf_size))
+               length = relay_switch_subbuf(buf, length);
+       memcpy(buf->data + buf->offset, data, length);
+       buf->offset += length;
+       local_irq_restore(flags);
+}
+
+/**
+ *     __relay_write - write data into the channel
+ *     @chan: relay channel
+ *     @data: data to be written
+ *     @length: number of bytes to write
+ *
+ *     Writes data into the current cpu's channel buffer.
+ *
+ *     Protects the buffer by disabling preemption.  Use
+ *     relay_write() if you might be logging from interrupt
+ *     context.
+ */
+static inline void __relay_write(struct rchan *chan,
+                                const void *data,
+                                size_t length)
+{
+       struct rchan_buf *buf;
+
+       buf = chan->buf[get_cpu()];
+       if (unlikely(buf->offset + length > buf->chan->subbuf_size))
+               length = relay_switch_subbuf(buf, length);
+       memcpy(buf->data + buf->offset, data, length);
+       buf->offset += length;
+       put_cpu();
+}
+
+/**
+ *     relay_reserve - reserve slot in channel buffer
+ *     @chan: relay channel
+ *     @length: number of bytes to reserve
+ *
+ *     Returns pointer to reserved slot, NULL if full.
+ *
+ *     Reserves a slot in the current cpu's channel buffer.
+ *     Does not protect the buffer at all - caller must provide
+ *     appropriate synchronization.
+ */
+static inline void *relay_reserve(struct rchan *chan, size_t length)
+{
+       void *reserved;
+       struct rchan_buf *buf = chan->buf[smp_processor_id()];
+
+       if (unlikely(buf->offset + length > buf->chan->subbuf_size)) {
+               length = relay_switch_subbuf(buf, length);
+               if (!length)
+                       return NULL;
+       }
+       reserved = buf->data + buf->offset;
+       buf->offset += length;
+
+       return reserved;
+}
+
+/**
+ *     subbuf_start_reserve - reserve bytes at the start of a sub-buffer
+ *     @buf: relay channel buffer
+ *     @length: number of bytes to reserve
+ *
+ *     Helper function used to reserve bytes at the beginning of
+ *     a sub-buffer in the subbuf_start() callback.
+ */
+static inline void subbuf_start_reserve(struct rchan_buf *buf,
+                                       size_t length)
+{
+       BUG_ON(length >= buf->chan->subbuf_size - 1);
+       buf->offset = length;
+}
+
+/*
+ * exported relayfs file operations, fs/relayfs/inode.c
+ */
+
+extern struct file_operations relayfs_file_operations;
+
+#endif /* _LINUX_RELAYFS_FS_H */
+
index dec5827c77422ebbd8e7f0238cdf7f34e08cb906..ea1b5f32ec5c1952cbf254f4563d7d707a85e155 100644 (file)
@@ -35,6 +35,8 @@
 #include <linux/topology.h>
 #include <linux/seccomp.h>
 
+#include <linux/auxvec.h>      /* For AT_VECTOR_SIZE */
+
 struct exec_domain;
 
 /*
@@ -176,6 +178,23 @@ extern void trap_init(void);
 extern void update_process_times(int user);
 extern void scheduler_tick(void);
 
+#ifdef CONFIG_DETECT_SOFTLOCKUP
+extern void softlockup_tick(struct pt_regs *regs);
+extern void spawn_softlockup_task(void);
+extern void touch_softlockup_watchdog(void);
+#else
+static inline void softlockup_tick(struct pt_regs *regs)
+{
+}
+static inline void spawn_softlockup_task(void)
+{
+}
+static inline void touch_softlockup_watchdog(void)
+{
+}
+#endif
+
+
 /* Attach to any functions which should be ignored in wchan output. */
 #define __sched                __attribute__((__section__(".sched.text")))
 /* Is this address in the __sched functions? */
@@ -244,7 +263,7 @@ struct mm_struct {
        mm_counter_t _rss;
        mm_counter_t _anon_rss;
 
-       unsigned long saved_auxv[42]; /* for /proc/PID/auxv */
+       unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */
 
        unsigned dumpable:2;
        cpumask_t cpu_vm_mask;
@@ -545,13 +564,6 @@ struct sched_domain {
 
 extern void partition_sched_domains(cpumask_t *partition1,
                                    cpumask_t *partition2);
-#ifdef ARCH_HAS_SCHED_DOMAIN
-/* Useful helpers that arch setup code may use. Defined in kernel/sched.c */
-extern cpumask_t cpu_isolated_map;
-extern void init_sched_build_groups(struct sched_group groups[],
-                               cpumask_t span, int (*group_fn)(int cpu));
-extern void cpu_attach_domain(struct sched_domain *sd, int cpu);
-#endif /* ARCH_HAS_SCHED_DOMAIN */
 #endif /* CONFIG_SMP */
 
 
index 2d8516be9fd7f71aac09b09076f2a04e2d37cc9f..106f9757339a54aeffc52a440129b5827040c8c1 100644 (file)
@@ -88,6 +88,7 @@ struct sem {
 /* One sem_array data structure for each set of semaphores in the system. */
 struct sem_array {
        struct kern_ipc_perm    sem_perm;       /* permissions .. see ipc.h */
+       int                     sem_id;
        time_t                  sem_otime;      /* last semop time */
        time_t                  sem_ctime;      /* last change time */
        struct sem              *sem_base;      /* ptr to first semaphore in array */
index cf0f64ea2bc0d36eb742c41c7db0e966525a0685..9b12fe731612dfd2ccb1665278dd5416e2e509f3 100644 (file)
@@ -385,11 +385,11 @@ int uart_resume_port(struct uart_driver *reg, struct uart_port *port);
 /*
  * The following are helper functions for the low level drivers.
  */
-#ifdef SUPPORT_SYSRQ
 static inline int
 uart_handle_sysrq_char(struct uart_port *port, unsigned int ch,
                       struct pt_regs *regs)
 {
+#ifdef SUPPORT_SYSRQ
        if (port->sysrq) {
                if (ch && time_before(jiffies, port->sysrq)) {
                        handle_sysrq(ch, regs, NULL);
@@ -398,11 +398,9 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch,
                }
                port->sysrq = 0;
        }
+#endif
        return 0;
 }
-#else
-#define uart_handle_sysrq_char(port,ch,regs)   (0)
-#endif
 
 /*
  * We do the SysRQ and SAK checking like this...
index 42edce6abe2349fc428c6321f81af81578ca5cb2..2741c0c55e83e1f486a7effc3772a63da8f4e3ed 100644 (file)
@@ -1167,7 +1167,7 @@ static inline void skb_postpull_rcsum(struct sk_buff *skb,
 
 static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
 {
-       if (len >= skb->len)
+       if (likely(len >= skb->len))
                return 0;
        if (skb->ip_summed == CHECKSUM_HW)
                skb->ip_summed = CHECKSUM_NONE;
@@ -1251,7 +1251,7 @@ extern void skb_add_mtu(int mtu);
  *     This function converts the offset back to a struct timeval and stores
  *     it in stamp.
  */
-static inline void skb_get_timestamp(struct sk_buff *skb, struct timeval *stamp)
+static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *stamp)
 {
        stamp->tv_sec  = skb->tstamp.off_sec;
        stamp->tv_usec = skb->tstamp.off_usec;
@@ -1270,7 +1270,7 @@ static inline void skb_get_timestamp(struct sk_buff *skb, struct timeval *stamp)
  *     This function converts a struct timeval to an offset and stores
  *     it in the skb.
  */
-static inline void skb_set_timestamp(struct sk_buff *skb, struct timeval *stamp)
+static inline void skb_set_timestamp(struct sk_buff *skb, const struct timeval *stamp)
 {
        skb->tstamp.off_sec  = stamp->tv_sec - skb_tv_base.tv_sec;
        skb->tstamp.off_usec = stamp->tv_usec - skb_tv_base.tv_usec;
index 80b2dfde2e8087d84ec06f945f3fa4a61ece4f55..42a6bea58af369f4408eba0cf020dbc6d74352eb 100644 (file)
@@ -99,7 +99,21 @@ found:
        return __kmalloc(size, flags);
 }
 
-extern void *kcalloc(size_t, size_t, unsigned int __nocast);
+extern void *kzalloc(size_t, unsigned int __nocast);
+
+/**
+ * kcalloc - allocate memory for an array. The memory is set to zero.
+ * @n: number of elements.
+ * @size: element size.
+ * @flags: the type of memory to allocate.
+ */
+static inline void *kcalloc(size_t n, size_t size, unsigned int __nocast flags)
+{
+       if (n != 0 && size > INT_MAX / n)
+               return NULL;
+       return kzalloc(n * size, flags);
+}
+
 extern void kfree(const void *);
 extern unsigned int ksize(const void *);
 
index 768cbba617d02533388270a1a0e1795752d15cb6..f56d2473495004a6958b95fc5a07b54f28a5aba8 100644 (file)
@@ -99,6 +99,8 @@
 #define SONYPI_EVENT_BATTERY_INSERT            57
 #define SONYPI_EVENT_BATTERY_REMOVE            58
 #define SONYPI_EVENT_FNKEY_RELEASED            59
+#define SONYPI_EVENT_WIRELESS_ON               60
+#define SONYPI_EVENT_WIRELESS_OFF              61
 
 /* get/set brightness */
 #define SONYPI_IOCGBRT         _IOR('v', 0, __u8)
index 6864063d1b9f0c6638a2c7fa94f525536179e522..c4e3ea7cf1545e5da79e504c8fabddbc1f4a8d87 100644 (file)
@@ -60,6 +60,7 @@ struct cache_head {
 #define        CACHE_NEW_EXPIRY 120    /* keep new things pending confirmation for 120 seconds */
 
 struct cache_detail {
+       struct module *         owner;
        int                     hash_size;
        struct cache_head **    hash_table;
        rwlock_t                hash_lock;
index e82be96d4906654bbb91e9c8fbf0a8ab7696d713..532a6c5c24e9cc105b30accf34f4a6e792967988 100644 (file)
@@ -711,6 +711,7 @@ enum {
        DEV_RAID=4,
        DEV_MAC_HID=5,
        DEV_SCSI=6,
+       DEV_IPMI=7,
 };
 
 /* /proc/sys/dev/cdrom */
@@ -776,6 +777,11 @@ enum {
        DEV_SCSI_LOGGING_LEVEL=1,
 };
 
+/* /proc/sys/dev/ipmi */
+enum {
+       DEV_IPMI_POWEROFF_POWERCYCLE=1,
+};
+
 /* /proc/sys/abi */
 enum
 {
index 5634497ff5dfd62a7e5327dd7a8fbd95cb467698..c10d4c21c18397cd3bfe66ea83d173d89a5d85b2 100644 (file)
@@ -97,7 +97,6 @@ extern int do_settimeofday(struct timespec *tv);
 extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz);
 extern void clock_was_set(void); // call when ever the clock is set
 extern int do_posix_clock_monotonic_gettime(struct timespec *tp);
-extern long do_nanosleep(struct timespec *t);
 extern long do_utimes(char __user * filename, struct timeval * times);
 struct itimerval;
 extern int do_setitimer(int which, struct itimerval *value, struct itimerval *ovalue);
index 74fdd07d3792a55cf970c9a1ad4942511976adf7..7e050a2cc35be69f2685309ff9c445adbba8ae68 100644 (file)
@@ -260,6 +260,29 @@ extern long pps_calcnt;            /* calibration intervals */
 extern long pps_errcnt;                /* calibration errors */
 extern long pps_stbcnt;                /* stability limit exceeded */
 
+/**
+ * ntp_clear - Clears the NTP state variables
+ *
+ * Must be called while holding a write on the xtime_lock
+ */
+static inline void ntp_clear(void)
+{
+       time_adjust = 0;                /* stop active adjtime() */
+       time_status |= STA_UNSYNC;
+       time_maxerror = NTP_PHASE_LIMIT;
+       time_esterror = NTP_PHASE_LIMIT;
+}
+
+/**
+ * ntp_synced - Returns 1 if the NTP status is not UNSYNC
+ *
+ */
+static inline int ntp_synced(void)
+{
+       return !(time_status & STA_UNSYNC);
+}
+
+
 #ifdef CONFIG_TIME_INTERPOLATION
 
 #define TIME_SOURCE_CPU 0
index 0320225e96da5b6b24bc5e3d5107fc55527e6aab..3df1d474e5c56dcd4ce2ca4d371ad86fc945368b 100644 (file)
 }
 #endif
 
+/* sched_domains SD_ALLNODES_INIT for NUMA machines */
+#define SD_ALLNODES_INIT (struct sched_domain) {       \
+       .span                   = CPU_MASK_NONE,        \
+       .parent                 = NULL,                 \
+       .groups                 = NULL,                 \
+       .min_interval           = 64,                   \
+       .max_interval           = 64*num_online_cpus(), \
+       .busy_factor            = 128,                  \
+       .imbalance_pct          = 133,                  \
+       .cache_hot_time         = (10*1000000),         \
+       .cache_nice_tries       = 1,                    \
+       .busy_idx               = 3,                    \
+       .idle_idx               = 3,                    \
+       .newidle_idx            = 0, /* unused */       \
+       .wake_idx               = 0, /* unused */       \
+       .forkexec_idx           = 0, /* unused */       \
+       .per_cpu_gain           = 100,                  \
+       .flags                  = SD_LOAD_BALANCE,      \
+       .last_balance           = jiffies,              \
+       .balance_interval       = 64,                   \
+       .nr_balance_failed      = 0,                    \
+}
+
 #ifdef CONFIG_NUMA
 #ifndef SD_NODE_INIT
 #error Please define an appropriate SD_NODE_INIT in include/asm/topology.h!!!
index 87d98d1faefb2788d4f159aca0b8b01f53778431..1d6cc22e5f42a49ab4e42a3db982c8b4a9107f04 100644 (file)
 #include <linux/device.h>
 #include <linux/attribute_container.h>
 
+struct transport_container;
+
 struct transport_class {
        struct class class;
-       int (*setup)(struct device *);
-       int (*configure)(struct device *);
-       int (*remove)(struct device *);
+       int (*setup)(struct transport_container *, struct device *,
+                    struct class_device *);
+       int (*configure)(struct transport_container *, struct device *,
+                        struct class_device *);
+       int (*remove)(struct transport_container *, struct device *,
+                     struct class_device *);
 };
 
 #define DECLARE_TRANSPORT_CLASS(cls, nm, su, rm, cfg)                  \
index ae485f9c916edb224e4cc2c869ab6347bb7f7bfe..a555a0f7a7b4ec6d42015c60c4117c862c4d99e3 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file define a set of standard wireless extensions
  *
- * Version :   18      12.3.05
+ * Version :   19      18.3.05
  *
  * Authors :   Jean Tourrilhes - HPL - <jt@hpl.hp.com>
  * Copyright (c) 1997-2005 Jean Tourrilhes, All Rights Reserved.
@@ -69,8 +69,6 @@
 
 /***************************** INCLUDES *****************************/
 
-/* To minimise problems in user space, I might remove those headers
- * at some point. Jean II */
 #include <linux/types.h>               /* for "caddr_t" et al          */
 #include <linux/socket.h>              /* for "struct sockaddr" et al  */
 #include <linux/if.h>                  /* for IFNAMSIZ and co... */
@@ -82,7 +80,7 @@
  * (there is some stuff that will be added in the future...)
  * I just plan to increment with each new version.
  */
-#define WIRELESS_EXT   18
+#define WIRELESS_EXT   19
 
 /*
  * Changes :
  *       related parameters (extensible up to 4096 parameter values)
  *     - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE,
  *       IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND
+ *
+ * V18 to V19
+ * ----------
+ *     - Remove (struct iw_point *)->pointer from events and streams
+ *     - Remove header includes to help user space
+ *     - Increase IW_ENCODING_TOKEN_MAX from 32 to 64
+ *     - Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros
+ *     - Add explicit flag to tell stats are in dBm : IW_QUAL_DBM
+ *     - Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros
  */
 
 /**************************** CONSTANTS ****************************/
 /* The first and the last (range) */
 #define SIOCIWFIRST    0x8B00
 #define SIOCIWLAST     SIOCIWLASTPRIV          /* 0x8BFF */
+#define IW_IOCTL_IDX(cmd)      ((cmd) - SIOCIWFIRST)
 
 /* Even : get (world access), odd : set (root access) */
 #define IW_IS_SET(cmd) (!((cmd) & 0x1))
                                         * (struct iw_pmkid_cand) */
 
 #define IWEVFIRST      0x8C00
+#define IW_EVENT_IDX(cmd)      ((cmd) - IWEVFIRST)
 
 /* ------------------------- PRIVATE INFO ------------------------- */
 /*
 #define IW_MODE_MONITOR        6       /* Passive monitor (listen only) */
 
 /* Statistics flags (bitmask in updated) */
-#define IW_QUAL_QUAL_UPDATED   0x1     /* Value was updated since last read */
-#define IW_QUAL_LEVEL_UPDATED  0x2
-#define IW_QUAL_NOISE_UPDATED  0x4
+#define IW_QUAL_QUAL_UPDATED   0x01    /* Value was updated since last read */
+#define IW_QUAL_LEVEL_UPDATED  0x02
+#define IW_QUAL_NOISE_UPDATED  0x04
+#define IW_QUAL_ALL_UPDATED    0x07
+#define IW_QUAL_DBM            0x08    /* Level + Noise are dBm */
 #define IW_QUAL_QUAL_INVALID   0x10    /* Driver doesn't provide value */
 #define IW_QUAL_LEVEL_INVALID  0x20
 #define IW_QUAL_NOISE_INVALID  0x40
+#define IW_QUAL_ALL_INVALID    0x70
 
 /* Frequency flags */
 #define IW_FREQ_AUTO           0x00    /* Let the driver decides */
 #define IW_MAX_ENCODING_SIZES  8
 
 /* Maximum size of the encoding token in bytes */
-#define IW_ENCODING_TOKEN_MAX  32      /* 256 bits (for now) */
+#define IW_ENCODING_TOKEN_MAX  64      /* 512 bits (for now) */
 
 /* Flags for encoding (along with the token) */
 #define IW_ENCODE_INDEX                0x00FF  /* Token index (if needed) */
@@ -1039,12 +1051,16 @@ struct iw_event
 #define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ)
 #define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(__u32))
 #define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq))
-#define IW_EV_POINT_LEN        (IW_EV_LCP_LEN + sizeof(struct iw_point))
 #define IW_EV_PARAM_LEN        (IW_EV_LCP_LEN + sizeof(struct iw_param))
 #define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr))
 #define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality))
 
-/* Note : in the case of iw_point, the extra data will come at the
- * end of the event */
+/* iw_point events are special. First, the payload (extra data) come at
+ * the end of the event, so they are bigger than IW_EV_POINT_LEN. Second,
+ * we omit the pointer, so start at an offset. */
+#define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \
+                         (char *) NULL)
+#define IW_EV_POINT_LEN        (IW_EV_LCP_LEN + sizeof(struct iw_point) - \
+                        IW_EV_POINT_OFF)
 
 #endif /* _LINUX_WIRELESS_H */
index 926eed543023906328aa7a95908d9e54039bfc2c..364b046e9f478b545316236d592bf29039c3fad2 100644 (file)
@@ -257,7 +257,7 @@ extern struct sock *ax25_make_new(struct sock *, struct ax25_dev *);
 
 /* ax25_addr.c */
 extern ax25_address null_ax25_address;
-extern char *ax2asc(ax25_address *);
+extern char *ax2asc(char *buf, ax25_address *);
 extern ax25_address *asc2ax(char *);
 extern int  ax25cmp(ax25_address *, ax25_address *);
 extern int  ax25digicmp(ax25_digi *, ax25_digi *);
index 9983fd857804dc7f85467ec8c7af743920bd8343..290bab46d457c36dba511f49c69eda6d1998b998 100644 (file)
@@ -33,7 +33,8 @@ extern asmlinkage long compat_sys_sendmsg(int,struct compat_msghdr __user *,unsi
 extern asmlinkage long compat_sys_recvmsg(int,struct compat_msghdr __user *,unsigned);
 extern asmlinkage long compat_sys_getsockopt(int, int, int, char __user *, int __user *);
 extern int put_cmsg_compat(struct msghdr*, int, int, int, void *);
-extern int cmsghdr_from_user_compat_to_kern(struct msghdr *, unsigned char *,
-               int);
+
+struct sock;
+extern int cmsghdr_from_user_compat_to_kern(struct msghdr *, struct sock *, unsigned char *, int);
 
 #endif /* NET_COMPAT_H */
index 44edd48f123410d524ad21c79de8b2e86da73988..d67c8393a343711ad367108e595a48136995c9f8 100644 (file)
@@ -1,10 +1,10 @@
 /*
  * This file define the new driver API for Wireless Extensions
  *
- * Version :   6       21.6.04
+ * Version :   7       18.3.05
  *
  * Authors :   Jean Tourrilhes - HPL - <jt@hpl.hp.com>
- * Copyright (c) 2001-2004 Jean Tourrilhes, All Rights Reserved.
+ * Copyright (c) 2001-2005 Jean Tourrilhes, All Rights Reserved.
  */
 
 #ifndef _IW_HANDLER_H
  * will be needed...
  * I just plan to increment with each new version.
  */
-#define IW_HANDLER_VERSION     6
+#define IW_HANDLER_VERSION     7
 
 /*
  * Changes :
  *     - Remove spy #ifdef, they are always on -> cleaner code
  *     - Add IW_DESCR_FLAG_NOMAX flag for very large requests
  *     - Start migrating get_wireless_stats to struct iw_handler_def
+ *
+ * V6 to V7
+ * --------
+ *     - Add struct ieee80211_device pointer in struct iw_public_data
+ *     - Remove (struct iw_point *)->pointer from events and streams
+ *     - Remove spy_offset from struct iw_handler_def
+ *     - Add "check" version of event macros for ieee802.11 stack
  */
 
 /**************************** CONSTANTS ****************************/
@@ -334,9 +341,6 @@ struct iw_handler_def
         * We will automatically export that to user space... */
        const struct iw_priv_args *     private_args;
 
-       /* This field will be *removed* in the next version of WE */
-       long                    spy_offset;     /* DO NOT USE */
-
        /* New location of get_wireless_stats, to de-bloat struct net_device.
         * The old pointer in struct net_device will be gradually phased
         * out, and drivers are encouraged to use this one... */
@@ -400,16 +404,21 @@ struct iw_spy_data
 /* --------------------- DEVICE WIRELESS DATA --------------------- */
 /*
  * This is all the wireless data specific to a device instance that
- * is managed by the core of Wireless Extensions.
+ * is managed by the core of Wireless Extensions or the 802.11 layer.
  * We only keep pointer to those structures, so that a driver is free
  * to share them between instances.
  * This structure should be initialised before registering the device.
  * Access to this data follow the same rules as any other struct net_device
  * data (i.e. valid as long as struct net_device exist, same locking rules).
  */
+/* Forward declaration */
+struct ieee80211_device;
+/* The struct */
 struct iw_public_data {
        /* Driver enhanced spy support */
-       struct iw_spy_data *    spy_data;
+       struct iw_spy_data *            spy_data;
+       /* Structure managed by the in-kernel IEEE 802.11 layer */
+       struct ieee80211_device *       ieee80211;
 };
 
 /**************************** PROTOTYPES ****************************/
@@ -424,7 +433,7 @@ struct iw_public_data {
 extern int dev_get_wireless_info(char * buffer, char **start, off_t offset,
                                 int length);
 
-/* Handle IOCTLs, called in net/code/dev.c */
+/* Handle IOCTLs, called in net/core/dev.c */
 extern int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd);
 
 /* Second : functions that may be called by driver modules */
@@ -479,7 +488,7 @@ iwe_stream_add_event(char * stream,         /* Stream of events */
                     int        event_len)      /* Real size of payload */
 {
        /* Check if it's possible */
-       if((stream + event_len) < ends) {
+       if(likely((stream + event_len) < ends)) {
                iwe->len = event_len;
                memcpy(stream, (char *) iwe, event_len);
                stream += event_len;
@@ -495,14 +504,17 @@ iwe_stream_add_event(char *       stream,         /* Stream of events */
 static inline char *
 iwe_stream_add_point(char *    stream,         /* Stream of events */
                     char *     ends,           /* End of stream */
-                    struct iw_event *iwe,      /* Payload */
-                    char *     extra)
+                    struct iw_event *iwe,      /* Payload length + flags */
+                    char *     extra)          /* More payload */
 {
        int     event_len = IW_EV_POINT_LEN + iwe->u.data.length;
        /* Check if it's possible */
-       if((stream + event_len) < ends) {
+       if(likely((stream + event_len) < ends)) {
                iwe->len = event_len;
-               memcpy(stream, (char *) iwe, IW_EV_POINT_LEN);
+               memcpy(stream, (char *) iwe, IW_EV_LCP_LEN);
+               memcpy(stream + IW_EV_LCP_LEN,
+                      ((char *) iwe) + IW_EV_LCP_LEN + IW_EV_POINT_OFF,
+                      IW_EV_POINT_LEN - IW_EV_LCP_LEN);
                memcpy(stream + IW_EV_POINT_LEN, extra, iwe->u.data.length);
                stream += event_len;
        }
@@ -526,7 +538,7 @@ iwe_stream_add_value(char * event,          /* Event in the stream */
        event_len -= IW_EV_LCP_LEN;
 
        /* Check if it's possible */
-       if((value + event_len) < ends) {
+       if(likely((value + event_len) < ends)) {
                /* Add new value */
                memcpy(value, (char *) iwe + IW_EV_LCP_LEN, event_len);
                value += event_len;
@@ -537,4 +549,85 @@ iwe_stream_add_value(char *        event,          /* Event in the stream */
        return value;
 }
 
+/*------------------------------------------------------------------*/
+/*
+ * Wrapper to add an Wireless Event to a stream of events.
+ * Same as above, with explicit error check...
+ */
+static inline char *
+iwe_stream_check_add_event(char *      stream,         /* Stream of events */
+                          char *       ends,           /* End of stream */
+                          struct iw_event *iwe,        /* Payload */
+                          int          event_len,      /* Size of payload */
+                          int *        perr)           /* Error report */
+{
+       /* Check if it's possible, set error if not */
+       if(likely((stream + event_len) < ends)) {
+               iwe->len = event_len;
+               memcpy(stream, (char *) iwe, event_len);
+               stream += event_len;
+       } else
+               *perr = -E2BIG;
+       return stream;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wrapper to add an short Wireless Event containing a pointer to a
+ * stream of events.
+ * Same as above, with explicit error check...
+ */
+static inline char *
+iwe_stream_check_add_point(char *      stream,         /* Stream of events */
+                          char *       ends,           /* End of stream */
+                          struct iw_event *iwe,        /* Payload length + flags */
+                          char *       extra,          /* More payload */
+                          int *        perr)           /* Error report */
+{
+       int     event_len = IW_EV_POINT_LEN + iwe->u.data.length;
+       /* Check if it's possible */
+       if(likely((stream + event_len) < ends)) {
+               iwe->len = event_len;
+               memcpy(stream, (char *) iwe, IW_EV_LCP_LEN);
+               memcpy(stream + IW_EV_LCP_LEN,
+                      ((char *) iwe) + IW_EV_LCP_LEN + IW_EV_POINT_OFF,
+                      IW_EV_POINT_LEN - IW_EV_LCP_LEN);
+               memcpy(stream + IW_EV_POINT_LEN, extra, iwe->u.data.length);
+               stream += event_len;
+       } else
+               *perr = -E2BIG;
+       return stream;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wrapper to add a value to a Wireless Event in a stream of events.
+ * Be careful, this one is tricky to use properly :
+ * At the first run, you need to have (value = event + IW_EV_LCP_LEN).
+ * Same as above, with explicit error check...
+ */
+static inline char *
+iwe_stream_check_add_value(char *      event,          /* Event in the stream */
+                          char *       value,          /* Value in event */
+                          char *       ends,           /* End of stream */
+                          struct iw_event *iwe,        /* Payload */
+                          int          event_len,      /* Size of payload */
+                          int *        perr)           /* Error report */
+{
+       /* Don't duplicate LCP */
+       event_len -= IW_EV_LCP_LEN;
+
+       /* Check if it's possible */
+       if(likely((value + event_len) < ends)) {
+               /* Add new value */
+               memcpy(value, (char *) iwe + IW_EV_LCP_LEN, event_len);
+               value += event_len;
+               /* Patch LCP */
+               iwe->len = value - event;
+               memcpy(event, (char *) iwe, IW_EV_LCP_LEN);
+       } else
+               *perr = -E2BIG;
+       return value;
+}
+
 #endif /* _IW_HANDLER_H */
index 9957f16dcc5d0c971ef19943a351be6423249221..bed4b7c9be99342b51203e43586dd50580825250 100644 (file)
@@ -51,12 +51,16 @@ struct scsi_cmnd {
         * printk's to use ->pid, so that we can kill this field.
         */
        unsigned long serial_number;
+       /*
+        * This is set to jiffies as it was when the command was first
+        * allocated.  It is used to time how long the command has
+        * been outstanding
+        */
+       unsigned long jiffies_at_alloc;
 
        int retries;
        int allowed;
        int timeout_per_command;
-       int timeout_total;
-       int timeout;
 
        unsigned char cmd_len;
        unsigned char old_cmd_len;
index 12e90934a7a80fd9b9db08a26ceefa22034dc04d..b090a11d7e1c87ee20eb7458f3e0bb3ed3651cce 100644 (file)
@@ -3,8 +3,10 @@
 
 struct scsi_cmnd;
 struct scsi_request;
+struct scsi_sense_hdr;
 
 extern void scsi_print_command(struct scsi_cmnd *);
+extern void scsi_print_sense_hdr(const char *, struct scsi_sense_hdr *);
 extern void __scsi_print_command(unsigned char *);
 extern void scsi_print_sense(const char *, struct scsi_cmnd *);
 extern void scsi_print_req_sense(const char *, struct scsi_request *);
index 835af8ecbb7c874601351ca4ee4ecc81b6778101..da63722c0123b8e77feadd5cd6ee118c757c153e 100644 (file)
@@ -8,8 +8,17 @@
 
 struct request_queue;
 struct scsi_cmnd;
-struct scsi_mode_data;
 struct scsi_lun;
+struct scsi_sense_hdr;
+
+struct scsi_mode_data {
+       __u32   length;
+       __u16   block_descriptor_length;
+       __u8    medium_type;
+       __u8    device_specific;
+       __u8    header_length;
+       __u8    longlba:1;
+};
 
 /*
  * sdev state: If you alter this, you also need to alter scsi_sysfs.c
@@ -228,7 +237,8 @@ extern int scsi_set_medium_removal(struct scsi_device *, char);
 
 extern int scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
                           unsigned char *buffer, int len, int timeout,
-                          int retries, struct scsi_mode_data *data);
+                          int retries, struct scsi_mode_data *data,
+                          struct scsi_sense_hdr *);
 extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout,
                                int retries);
 extern int scsi_device_set_state(struct scsi_device *sdev,
@@ -247,6 +257,14 @@ extern void int_to_scsilun(unsigned int, struct scsi_lun *);
 extern const char *scsi_device_state_name(enum scsi_device_state);
 extern int scsi_is_sdev_device(const struct device *);
 extern int scsi_is_target_device(const struct device *);
+extern int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
+                       int data_direction, void *buffer, unsigned bufflen,
+                       unsigned char *sense, int timeout, int retries,
+                       int flag);
+extern int scsi_execute_req(struct scsi_device *sdev, const unsigned char *cmd,
+                           int data_direction, void *buffer, unsigned bufflen,
+                           struct scsi_sense_hdr *, int timeout, int retries);
+
 static inline int scsi_device_online(struct scsi_device *sdev)
 {
        return sdev->sdev_state != SDEV_OFFLINE;
index 80557f879e3e229b5e13cd107a5690b162b4988d..fabd879c2f2e13e44f41a08083241fc6a20a6914 100644 (file)
@@ -26,10 +26,15 @@ struct scsi_sense_hdr {             /* See SPC-3 section 4.5 */
        u8 additional_length;   /* always 0 for fixed sense format */
 };
 
+static inline int scsi_sense_valid(struct scsi_sense_hdr *sshdr)
+{
+       if (!sshdr)
+               return 0;
+
+       return (sshdr->response_code & 0x70) == 0x70;
+}
+
 
-extern void scsi_add_timer(struct scsi_cmnd *, int,
-               void (*)(struct scsi_cmnd *));
-extern int scsi_delete_timer(struct scsi_cmnd *);
 extern void scsi_report_bus_reset(struct Scsi_Host *, int);
 extern void scsi_report_device_reset(struct Scsi_Host *, int, int);
 extern int scsi_block_when_processing_errors(struct scsi_device *);
index 81d5234f67711314cb51e33738c5c165ca9e39b7..916144be208b93b948f867d04599608fa6b5981f 100644 (file)
@@ -429,12 +429,15 @@ struct scsi_host_template {
 };
 
 /*
- * shost states
+ * shost state: If you alter this, you also need to alter scsi_sysfs.c
+ * (for the ascii descriptions) and the state model enforcer:
+ * scsi_host_set_state()
  */
-enum {
-       SHOST_ADD,
-       SHOST_DEL,
+enum scsi_host_state {
+       SHOST_CREATED = 1,
+       SHOST_RUNNING,
        SHOST_CANCEL,
+       SHOST_DEL,
        SHOST_RECOVERY,
 };
 
@@ -464,12 +467,10 @@ struct Scsi_Host {
        struct task_struct    * ehandler;  /* Error recovery thread. */
        struct semaphore      * eh_wait;   /* The error recovery thread waits
                                              on this. */
-       struct completion     * eh_notify; /* wait for eh to begin or end */
        struct semaphore      * eh_action; /* Wait for specific actions on the
                                           host. */
        unsigned int            eh_active:1; /* Indicates the eh thread is awake and active if
                                           this is true. */
-       unsigned int            eh_kill:1; /* set when killing the eh thread */
        wait_queue_head_t       host_wait;
        struct scsi_host_template *hostt;
        struct scsi_transport_template *transportt;
@@ -575,7 +576,7 @@ struct Scsi_Host {
        unsigned int  irq;
        
 
-       unsigned long shost_state;
+       enum scsi_host_state shost_state;
 
        /* ldm bits */
        struct device           shost_gendev;
@@ -633,6 +634,7 @@ extern void scsi_remove_host(struct Scsi_Host *);
 extern struct Scsi_Host *scsi_host_get(struct Scsi_Host *);
 extern void scsi_host_put(struct Scsi_Host *t);
 extern struct Scsi_Host *scsi_host_lookup(unsigned short);
+extern const char *scsi_host_state_name(enum scsi_host_state);
 
 extern u64 scsi_calculate_bounce_limit(struct Scsi_Host *);
 
@@ -646,6 +648,15 @@ static inline struct device *scsi_get_device(struct Scsi_Host *shost)
         return shost->shost_gendev.parent;
 }
 
+/**
+ * scsi_host_scan_allowed - Is scanning of this host allowed
+ * @shost:     Pointer to Scsi_Host.
+ **/
+static inline int scsi_host_scan_allowed(struct Scsi_Host *shost)
+{
+       return shost->shost_state == SHOST_RUNNING;
+}
+
 extern void scsi_unblock_requests(struct Scsi_Host *);
 extern void scsi_block_requests(struct Scsi_Host *);
 
@@ -663,5 +674,6 @@ extern struct scsi_device *scsi_get_host_dev(struct Scsi_Host *);
 /* legacy interfaces */
 extern struct Scsi_Host *scsi_register(struct scsi_host_template *, int);
 extern void scsi_unregister(struct Scsi_Host *);
+extern int scsi_host_set_state(struct Scsi_Host *, enum scsi_host_state);
 
 #endif /* _SCSI_SCSI_HOST_H */
index 98719407d55469bb86f45ac3be1dbf0e58c9a2bf..6a140020d7cb0538ce69578488ba4b6eadb08adb 100644 (file)
@@ -54,20 +54,4 @@ extern void scsi_do_req(struct scsi_request *, const void *cmnd,
                        void *buffer, unsigned bufflen,
                        void (*done) (struct scsi_cmnd *),
                        int timeout, int retries);
-
-struct scsi_mode_data {
-       __u32   length;
-       __u16   block_descriptor_length;
-       __u8    medium_type;
-       __u8    device_specific;
-       __u8    header_length;
-       __u8    longlba:1;
-};
-
-extern int __scsi_mode_sense(struct scsi_request *SRpnt, int dbd,
-                            int modepage, unsigned char *buffer, int len,
-                            int timeout, int retries,
-                            struct scsi_mode_data *data);
-
-
 #endif /* _SCSI_SCSI_REQUEST_H */
index a30d6cd4c0e8d805c49a18a2a68f34a8f37fe8ba..6bdc4afb248380d7180f7d9a68bf869cd09fd4c1 100644 (file)
@@ -39,6 +39,7 @@ struct spi_transport_attrs {
        unsigned int rd_strm:1; /* Read streaming enabled */
        unsigned int rti:1;     /* Retain Training Information */
        unsigned int pcomp_en:1;/* Precompensation enabled */
+       unsigned int hold_mcs:1;/* Hold Margin Control Settings */
        unsigned int initial_dv:1; /* DV done to this target yet  */
        unsigned long flags;    /* flags field for drivers to use */
        /* Device Properties fields */
@@ -78,6 +79,7 @@ struct spi_host_attrs {
 #define spi_rd_strm(x) (((struct spi_transport_attrs *)&(x)->starget_data)->rd_strm)
 #define spi_rti(x)     (((struct spi_transport_attrs *)&(x)->starget_data)->rti)
 #define spi_pcomp_en(x)        (((struct spi_transport_attrs *)&(x)->starget_data)->pcomp_en)
+#define spi_hold_mcs(x)        (((struct spi_transport_attrs *)&(x)->starget_data)->hold_mcs)
 #define spi_initial_dv(x)      (((struct spi_transport_attrs *)&(x)->starget_data)->initial_dv)
 
 #define spi_support_sync(x)    (((struct spi_transport_attrs *)&(x)->starget_data)->support_sync)
@@ -114,8 +116,11 @@ struct spi_function_template {
        void    (*set_rti)(struct scsi_target *, int);
        void    (*get_pcomp_en)(struct scsi_target *);
        void    (*set_pcomp_en)(struct scsi_target *, int);
+       void    (*get_hold_mcs)(struct scsi_target *);
+       void    (*set_hold_mcs)(struct scsi_target *, int);
        void    (*get_signalling)(struct Scsi_Host *);
        void    (*set_signalling)(struct Scsi_Host *, enum spi_signal_type);
+       int     (*deny_binding)(struct scsi_target *);
        /* The driver sets these to tell the transport class it
         * wants the attributes displayed in sysfs.  If the show_ flag
         * is not set, the attribute will be private to the transport
@@ -130,6 +135,7 @@ struct spi_function_template {
        unsigned long   show_rd_strm:1;
        unsigned long   show_rti:1;
        unsigned long   show_pcomp_en:1;
+       unsigned long   show_hold_mcs:1;
 };
 
 struct scsi_transport_template *spi_attach_transport(struct spi_function_template *);
index f72b3ef515e25e7d8ca1ee64f7f063a7b8d84f9f..3dc41fd5c54d46730d39c01967c93d05e5b48b32 100644 (file)
@@ -291,12 +291,14 @@ void snd_memory_done(void);
 int snd_memory_info_init(void);
 int snd_memory_info_done(void);
 void *snd_hidden_kmalloc(size_t size, unsigned int __nocast flags);
+void *snd_hidden_kzalloc(size_t size, unsigned int __nocast flags);
 void *snd_hidden_kcalloc(size_t n, size_t size, unsigned int __nocast flags);
 void snd_hidden_kfree(const void *obj);
 void *snd_hidden_vmalloc(unsigned long size);
 void snd_hidden_vfree(void *obj);
 char *snd_hidden_kstrdup(const char *s, unsigned int __nocast flags);
 #define kmalloc(size, flags) snd_hidden_kmalloc(size, flags)
+#define kzalloc(size, flags) snd_hidden_kzalloc(size, flags)
 #define kcalloc(n, size, flags) snd_hidden_kcalloc(n, size, flags)
 #define kfree(obj) snd_hidden_kfree(obj)
 #define vmalloc(size) snd_hidden_vmalloc(size)
index fa23ebfb857a8af771c12af6aa3fe51452e1c074..389e8ebe9c191cf550fe824905c5f8f465f4832c 100644 (file)
@@ -903,7 +903,7 @@ int snd_pcm_format_unsigned(snd_pcm_format_t format);
 int snd_pcm_format_linear(snd_pcm_format_t format);
 int snd_pcm_format_little_endian(snd_pcm_format_t format);
 int snd_pcm_format_big_endian(snd_pcm_format_t format);
-/**
+/*
  * snd_pcm_format_cpu_endian - Check the PCM format is CPU-endian
  * @format: the format to check
  *
index bd548c2b47c4f0376960b3fabc41634354d29b0d..e6da2d7ded8cfa7a0a5c1d16ae1e732b98af996a 100644 (file)
 /*
  *  Support for the w100 frame buffer.
  *
- *  Copyright (c) 2004 Richard Purdie
+ *  Copyright (c) 2004-2005 Richard Purdie
+ *  Copyright (c) 2005 Ian Molton
  *
  *  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.
  */
 
+#define W100_GPIO_PORT_A       0
+#define W100_GPIO_PORT_B       1
+
+#define CLK_SRC_XTAL  0
+#define CLK_SRC_PLL   1
+
+struct w100fb_par;
+
+unsigned long w100fb_gpio_read(int port);
+void w100fb_gpio_write(int port, unsigned long value);
+
+/* LCD Specific Routines and Config */
+struct w100_tg_info {
+       void (*change)(struct w100fb_par*);
+       void (*suspend)(struct w100fb_par*);
+       void (*resume)(struct w100fb_par*);
+};
+
+/* General Platform Specific w100 Register Values */
+struct w100_gen_regs {
+       unsigned long lcd_format;
+       unsigned long lcdd_cntl1;
+       unsigned long lcdd_cntl2;
+       unsigned long genlcd_cntl1;
+       unsigned long genlcd_cntl2;
+       unsigned long genlcd_cntl3;
+};
+
+struct w100_gpio_regs {
+       unsigned long init_data1;
+       unsigned long init_data2;
+       unsigned long gpio_dir1;
+       unsigned long gpio_oe1;
+       unsigned long gpio_dir2;
+       unsigned long gpio_oe2;
+};
+
+/* Optional External Memory Configuration */
+struct w100_mem_info {
+       unsigned long ext_cntl;
+       unsigned long sdram_mode_reg;
+       unsigned long ext_timing_cntl;
+       unsigned long io_cntl;
+       unsigned int size;
+};
+
+struct w100_bm_mem_info {
+       unsigned long ext_mem_bw;
+       unsigned long offset;
+       unsigned long ext_timing_ctl;
+       unsigned long ext_cntl;
+       unsigned long mode_reg;
+       unsigned long io_cntl;
+       unsigned long config;
+};
+
+/* LCD Mode definition */
+struct w100_mode {
+       unsigned int xres;
+       unsigned int yres;
+       unsigned short left_margin;
+       unsigned short right_margin;
+       unsigned short upper_margin;
+       unsigned short lower_margin;
+       unsigned long crtc_ss;
+       unsigned long crtc_ls;
+       unsigned long crtc_gs;
+       unsigned long crtc_vpos_gs;
+       unsigned long crtc_rev;
+       unsigned long crtc_dclk;
+       unsigned long crtc_gclk;
+       unsigned long crtc_goe;
+       unsigned long crtc_ps1_active;
+       char pll_freq;
+       char fast_pll_freq;
+       int sysclk_src;
+       int sysclk_divider;
+       int pixclk_src;
+       int pixclk_divider;
+       int pixclk_divider_rotated;
+};
+
+struct w100_pll_info {
+       uint16_t freq;  /* desired Fout for PLL (Mhz) */
+       uint8_t M;      /* input divider */
+       uint8_t N_int;  /* VCO multiplier */
+       uint8_t N_fac;  /* VCO multiplier fractional part */
+       uint8_t tfgoal;
+       uint8_t lock_time;
+};
+
+/* Initial Video mode orientation flags */
+#define INIT_MODE_ROTATED  0x1
+#define INIT_MODE_FLIPPED  0x2
+
 /*
  * This structure describes the machine which we are running on.
  * It is set by machine specific code and used in the probe routine
  * of drivers/video/w100fb.c
  */
-
 struct w100fb_mach_info {
-       void (*w100fb_ssp_send)(u8 adrs, u8 data);
-       int comadj;
-       int phadadj;
+       /* General Platform Specific Registers */
+       struct w100_gen_regs *regs;
+       /* Table of modes the LCD is capable of */
+       struct w100_mode *modelist;
+       unsigned int num_modes;
+       /* Hooks for any platform specific tg/lcd code (optional) */
+       struct w100_tg_info *tg;
+       /* External memory definition (if present) */
+       struct w100_mem_info *mem;
+       /* Additional External memory definition (if present) */
+       struct w100_bm_mem_info *bm_mem;
+       /* GPIO definitions (optional) */
+       struct w100_gpio_regs *gpio;
+       /* Initial Mode flags */
+       unsigned int init_mode;
+       /* Xtal Frequency */
+       unsigned int xtal_freq;
+       /* Enable Xtal input doubler (1 == enable) */
+       unsigned int xtal_dbl;
+};
+
+/* General frame buffer data structure */
+struct w100fb_par {
+       unsigned int chip_id;
+       unsigned int xres;
+       unsigned int yres;
+       unsigned int extmem_active;
+       unsigned int flip;
+       unsigned int blanked;
+       unsigned int fastpll_mode;
+       unsigned long hsync_len;
+       struct w100_mode *mode;
+       struct w100_pll_info *pll_table;
+       struct w100fb_mach_info *mach;
+       uint32_t *saved_intmem;
+       uint32_t *saved_extmem;
 };
index ff410063e4e13ca6a296a680a136a15297d079de..f142d403534190f4588b3d7eda585112077e0607 100644 (file)
@@ -123,6 +123,7 @@ extern void softirq_init(void);
 char saved_command_line[COMMAND_LINE_SIZE];
 
 static char *execute_command;
+static char *ramdisk_execute_command;
 
 /* Setup configured maximum number of CPUs to activate */
 static unsigned int max_cpus = NR_CPUS;
@@ -297,6 +298,18 @@ static int __init init_setup(char *str)
 }
 __setup("init=", init_setup);
 
+static int __init rdinit_setup(char *str)
+{
+       unsigned int i;
+
+       ramdisk_execute_command = str;
+       /* See "auto" comment in init_setup */
+       for (i = 1; i < MAX_INIT_ARGS; i++)
+               argv_init[i] = NULL;
+       return 1;
+}
+__setup("rdinit=", rdinit_setup);
+
 extern void setup_arch(char **);
 
 #ifndef CONFIG_SMP
@@ -614,6 +627,7 @@ static void do_pre_smp_initcalls(void)
        migration_init();
 #endif
        spawn_ksoftirqd();
+       spawn_softlockup_task();
 }
 
 static void run_init_process(char *init_filename)
@@ -680,10 +694,14 @@ static int init(void * unused)
         * check if there is an early userspace init.  If yes, let it do all
         * the work
         */
-       if (sys_access((const char __user *) "/init", 0) == 0)
-               execute_command = "/init";
-       else
+
+       if (!ramdisk_execute_command)
+               ramdisk_execute_command = "/init";
+
+       if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) {
+               ramdisk_execute_command = NULL;
                prepare_namespace();
+       }
 
        /*
         * Ok, we have completed the initial bootup, and
@@ -700,17 +718,24 @@ static int init(void * unused)
 
        (void) sys_dup(0);
        (void) sys_dup(0);
-       
+
+       if (ramdisk_execute_command) {
+               run_init_process(ramdisk_execute_command);
+               printk(KERN_WARNING "Failed to execute %s\n",
+                               ramdisk_execute_command);
+       }
+
        /*
         * We try each of these until one succeeds.
         *
         * The Bourne shell can be used instead of init if we are 
         * trying to recover a really broken machine.
         */
-
-       if (execute_command)
+       if (execute_command) {
                run_init_process(execute_command);
-
+               printk(KERN_WARNING "Failed to execute %s.  Attempting "
+                                       "defaults...\n", execute_command);
+       }
        run_init_process("/sbin/init");
        run_init_process("/etc/init");
        run_init_process("/bin/init");
index 3881d564c66837ad6a925ae7a43e429cf30cd482..1fe95f6659dd2b25cc28920051658f288a935f82 100644 (file)
@@ -42,10 +42,10 @@ struct compat_msgbuf {
 
 struct compat_ipc_perm {
        key_t key;
-       compat_uid_t uid;
-       compat_gid_t gid;
-       compat_uid_t cuid;
-       compat_gid_t cgid;
+       __compat_uid_t uid;
+       __compat_gid_t gid;
+       __compat_uid_t cuid;
+       __compat_gid_t cgid;
        compat_mode_t mode;
        unsigned short seq;
 };
@@ -174,8 +174,8 @@ static inline int __put_compat_ipc_perm(struct ipc64_perm *p,
                                        struct compat_ipc_perm __user *up)
 {
        int err;
-       compat_uid_t u;
-       compat_gid_t g;
+       __compat_uid_t u;
+       __compat_gid_t g;
 
        err  = __put_user(p->key, &up->key);
        SET_UID(u, p->uid);
index 27e516f96cdc7c3907b7b25243ff1e4cd786a8e0..d035bd2aba9671cc56fdd6f10b81182ac628b011 100644 (file)
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -26,6 +26,7 @@
 #include <linux/sched.h>
 #include <linux/syscalls.h>
 #include <linux/audit.h>
+#include <linux/seq_file.h>
 #include <asm/current.h>
 #include <asm/uaccess.h>
 #include "util.h"
@@ -74,16 +75,16 @@ static struct ipc_ids msg_ids;
 static void freeque (struct msg_queue *msq, int id);
 static int newque (key_t key, int msgflg);
 #ifdef CONFIG_PROC_FS
-static int sysvipc_msg_read_proc(char *buffer, char **start, off_t offset, int length, int *eof, void *data);
+static int sysvipc_msg_proc_show(struct seq_file *s, void *it);
 #endif
 
 void __init msg_init (void)
 {
        ipc_init_ids(&msg_ids,msg_ctlmni);
-
-#ifdef CONFIG_PROC_FS
-       create_proc_read_entry("sysvipc/msg", 0, NULL, sysvipc_msg_read_proc, NULL);
-#endif
+       ipc_init_proc_interface("sysvipc/msg",
+                               "       key      msqid perms      cbytes       qnum lspid lrpid   uid   gid  cuid  cgid      stime      rtime      ctime\n",
+                               &msg_ids,
+                               sysvipc_msg_proc_show);
 }
 
 static int newque (key_t key, int msgflg)
@@ -113,6 +114,7 @@ static int newque (key_t key, int msgflg)
                return -ENOSPC;
        }
 
+       msq->q_id = msg_buildid(id,msq->q_perm.seq);
        msq->q_stime = msq->q_rtime = 0;
        msq->q_ctime = get_seconds();
        msq->q_cbytes = msq->q_qnum = 0;
@@ -123,7 +125,7 @@ static int newque (key_t key, int msgflg)
        INIT_LIST_HEAD(&msq->q_senders);
        msg_unlock(msq);
 
-       return msg_buildid(id,msq->q_perm.seq);
+       return msq->q_id;
 }
 
 static inline void ss_add(struct msg_queue* msq, struct msg_sender* mss)
@@ -808,55 +810,25 @@ out_unlock:
 }
 
 #ifdef CONFIG_PROC_FS
-static int sysvipc_msg_read_proc(char *buffer, char **start, off_t offset, int length, int *eof, void *data)
+static int sysvipc_msg_proc_show(struct seq_file *s, void *it)
 {
-       off_t pos = 0;
-       off_t begin = 0;
-       int i, len = 0;
-
-       down(&msg_ids.sem);
-       len += sprintf(buffer, "       key      msqid perms      cbytes       qnum lspid lrpid   uid   gid  cuid  cgid      stime      rtime      ctime\n");
-
-       for(i = 0; i <= msg_ids.max_id; i++) {
-               struct msg_queue * msq;
-               msq = msg_lock(i);
-               if(msq != NULL) {
-                       len += sprintf(buffer + len, "%10d %10d  %4o  %10lu %10lu %5u %5u %5u %5u %5u %5u %10lu %10lu %10lu\n",
-                               msq->q_perm.key,
-                               msg_buildid(i,msq->q_perm.seq),
-                               msq->q_perm.mode,
-                               msq->q_cbytes,
-                               msq->q_qnum,
-                               msq->q_lspid,
-                               msq->q_lrpid,
-                               msq->q_perm.uid,
-                               msq->q_perm.gid,
-                               msq->q_perm.cuid,
-                               msq->q_perm.cgid,
-                               msq->q_stime,
-                               msq->q_rtime,
-                               msq->q_ctime);
-                       msg_unlock(msq);
-
-                       pos += len;
-                       if(pos < offset) {
-                               len = 0;
-                               begin = pos;
-                       }
-                       if(pos > offset + length)
-                               goto done;
-               }
-
-       }
-       *eof = 1;
-done:
-       up(&msg_ids.sem);
-       *start = buffer + (offset - begin);
-       len -= (offset - begin);
-       if(len > length)
-               len = length;
-       if(len < 0)
-               len = 0;
-       return len;
+       struct msg_queue *msq = it;
+
+       return seq_printf(s,
+                         "%10d %10d  %4o  %10lu %10lu %5u %5u %5u %5u %5u %5u %10lu %10lu %10lu\n",
+                         msq->q_perm.key,
+                         msq->q_id,
+                         msq->q_perm.mode,
+                         msq->q_cbytes,
+                         msq->q_qnum,
+                         msq->q_lspid,
+                         msq->q_lrpid,
+                         msq->q_perm.uid,
+                         msq->q_perm.gid,
+                         msq->q_perm.cuid,
+                         msq->q_perm.cgid,
+                         msq->q_stime,
+                         msq->q_rtime,
+                         msq->q_ctime);
 }
 #endif
index 70975ce0784a9082207659c31e4e1cd946f32c7b..19af028a3e380d251d31e4b8ec4cd96ee679a1cb 100644 (file)
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -73,6 +73,7 @@
 #include <linux/security.h>
 #include <linux/syscalls.h>
 #include <linux/audit.h>
+#include <linux/seq_file.h>
 #include <asm/uaccess.h>
 #include "util.h"
 
@@ -89,7 +90,7 @@ static struct ipc_ids sem_ids;
 static int newary (key_t, int, int);
 static void freeary (struct sem_array *sma, int id);
 #ifdef CONFIG_PROC_FS
-static int sysvipc_sem_read_proc(char *buffer, char **start, off_t offset, int length, int *eof, void *data);
+static int sysvipc_sem_proc_show(struct seq_file *s, void *it);
 #endif
 
 #define SEMMSL_FAST    256 /* 512 bytes on stack */
@@ -116,10 +117,10 @@ void __init sem_init (void)
 {
        used_sems = 0;
        ipc_init_ids(&sem_ids,sc_semmni);
-
-#ifdef CONFIG_PROC_FS
-       create_proc_read_entry("sysvipc/sem", 0, NULL, sysvipc_sem_read_proc, NULL);
-#endif
+       ipc_init_proc_interface("sysvipc/sem",
+                               "       key      semid perms      nsems   uid   gid  cuid  cgid      otime      ctime\n",
+                               &sem_ids,
+                               sysvipc_sem_proc_show);
 }
 
 /*
@@ -193,6 +194,7 @@ static int newary (key_t key, int nsems, int semflg)
        }
        used_sems += nsems;
 
+       sma->sem_id = sem_buildid(id, sma->sem_perm.seq);
        sma->sem_base = (struct sem *) &sma[1];
        /* sma->sem_pending = NULL; */
        sma->sem_pending_last = &sma->sem_pending;
@@ -201,7 +203,7 @@ static int newary (key_t key, int nsems, int semflg)
        sma->sem_ctime = get_seconds();
        sem_unlock(sma);
 
-       return sem_buildid(id, sma->sem_perm.seq);
+       return sma->sem_id;
 }
 
 asmlinkage long sys_semget (key_t key, int nsems, int semflg)
@@ -1328,50 +1330,21 @@ next_entry:
 }
 
 #ifdef CONFIG_PROC_FS
-static int sysvipc_sem_read_proc(char *buffer, char **start, off_t offset, int length, int *eof, void *data)
+static int sysvipc_sem_proc_show(struct seq_file *s, void *it)
 {
-       off_t pos = 0;
-       off_t begin = 0;
-       int i, len = 0;
-
-       len += sprintf(buffer, "       key      semid perms      nsems   uid   gid  cuid  cgid      otime      ctime\n");
-       down(&sem_ids.sem);
-
-       for(i = 0; i <= sem_ids.max_id; i++) {
-               struct sem_array *sma;
-               sma = sem_lock(i);
-               if(sma) {
-                       len += sprintf(buffer + len, "%10d %10d  %4o %10lu %5u %5u %5u %5u %10lu %10lu\n",
-                               sma->sem_perm.key,
-                               sem_buildid(i,sma->sem_perm.seq),
-                               sma->sem_perm.mode,
-                               sma->sem_nsems,
-                               sma->sem_perm.uid,
-                               sma->sem_perm.gid,
-                               sma->sem_perm.cuid,
-                               sma->sem_perm.cgid,
-                               sma->sem_otime,
-                               sma->sem_ctime);
-                       sem_unlock(sma);
-
-                       pos += len;
-                       if(pos < offset) {
-                               len = 0;
-                               begin = pos;
-                       }
-                       if(pos > offset + length)
-                               goto done;
-               }
-       }
-       *eof = 1;
-done:
-       up(&sem_ids.sem);
-       *start = buffer + (offset - begin);
-       len -= (offset - begin);
-       if(len > length)
-               len = length;
-       if(len < 0)
-               len = 0;
-       return len;
+       struct sem_array *sma = it;
+
+       return seq_printf(s,
+                         "%10d %10d  %4o %10lu %5u %5u %5u %5u %10lu %10lu\n",
+                         sma->sem_perm.key,
+                         sma->sem_id,
+                         sma->sem_perm.mode,
+                         sma->sem_nsems,
+                         sma->sem_perm.uid,
+                         sma->sem_perm.gid,
+                         sma->sem_perm.cuid,
+                         sma->sem_perm.cgid,
+                         sma->sem_otime,
+                         sma->sem_ctime);
 }
 #endif
index 1d6cf08d950b93c9f5223c7ead161b6f08ed9877..dca90489e3b0f7b9cfd189b593eeee1d3c0f197e 100644 (file)
--- a/ipc/shm.c
+++ b/ipc/shm.c
 #include <linux/init.h>
 #include <linux/file.h>
 #include <linux/mman.h>
-#include <linux/proc_fs.h>
 #include <linux/shmem_fs.h>
 #include <linux/security.h>
 #include <linux/syscalls.h>
 #include <linux/audit.h>
 #include <linux/ptrace.h>
+#include <linux/seq_file.h>
 
 #include <asm/uaccess.h>
 
@@ -51,7 +51,7 @@ static int newseg (key_t key, int shmflg, size_t size);
 static void shm_open (struct vm_area_struct *shmd);
 static void shm_close (struct vm_area_struct *shmd);
 #ifdef CONFIG_PROC_FS
-static int sysvipc_shm_read_proc(char *buffer, char **start, off_t offset, int length, int *eof, void *data);
+static int sysvipc_shm_proc_show(struct seq_file *s, void *it);
 #endif
 
 size_t shm_ctlmax = SHMMAX;
@@ -63,9 +63,10 @@ static int shm_tot; /* total number of shared memory pages */
 void __init shm_init (void)
 {
        ipc_init_ids(&shm_ids, 1);
-#ifdef CONFIG_PROC_FS
-       create_proc_read_entry("sysvipc/shm", 0, NULL, sysvipc_shm_read_proc, NULL);
-#endif
+       ipc_init_proc_interface("sysvipc/shm",
+                               "       key      shmid perms       size  cpid  lpid nattch   uid   gid  cuid  cgid      atime      dtime      ctime\n",
+                               &shm_ids,
+                               sysvipc_shm_proc_show);
 }
 
 static inline int shm_checkid(struct shmid_kernel *s, int id)
@@ -869,63 +870,32 @@ asmlinkage long sys_shmdt(char __user *shmaddr)
 }
 
 #ifdef CONFIG_PROC_FS
-static int sysvipc_shm_read_proc(char *buffer, char **start, off_t offset, int length, int *eof, void *data)
+static int sysvipc_shm_proc_show(struct seq_file *s, void *it)
 {
-       off_t pos = 0;
-       off_t begin = 0;
-       int i, len = 0;
-
-       down(&shm_ids.sem);
-       len += sprintf(buffer, "       key      shmid perms       size  cpid  lpid nattch   uid   gid  cuid  cgid      atime      dtime      ctime\n");
+       struct shmid_kernel *shp = it;
+       char *format;
 
-       for(i = 0; i <= shm_ids.max_id; i++) {
-               struct shmid_kernel* shp;
-
-               shp = shm_lock(i);
-               if(shp!=NULL) {
 #define SMALL_STRING "%10d %10d  %4o %10u %5u %5u  %5d %5u %5u %5u %5u %10lu %10lu %10lu\n"
 #define BIG_STRING   "%10d %10d  %4o %21u %5u %5u  %5d %5u %5u %5u %5u %10lu %10lu %10lu\n"
-                       char *format;
 
-                       if (sizeof(size_t) <= sizeof(int))
-                               format = SMALL_STRING;
-                       else
-                               format = BIG_STRING;
-                       len += sprintf(buffer + len, format,
-                               shp->shm_perm.key,
-                               shm_buildid(i, shp->shm_perm.seq),
-                               shp->shm_flags,
-                               shp->shm_segsz,
-                               shp->shm_cprid,
-                               shp->shm_lprid,
-                               is_file_hugepages(shp->shm_file) ? (file_count(shp->shm_file) - 1) : shp->shm_nattch,
-                               shp->shm_perm.uid,
-                               shp->shm_perm.gid,
-                               shp->shm_perm.cuid,
-                               shp->shm_perm.cgid,
-                               shp->shm_atim,
-                               shp->shm_dtim,
-                               shp->shm_ctim);
-                       shm_unlock(shp);
-
-                       pos += len;
-                       if(pos < offset) {
-                               len = 0;
-                               begin = pos;
-                       }
-                       if(pos > offset + length)
-                               goto done;
-               }
-       }
-       *eof = 1;
-done:
-       up(&shm_ids.sem);
-       *start = buffer + (offset - begin);
-       len -= (offset - begin);
-       if(len > length)
-               len = length;
-       if(len < 0)
-               len = 0;
-       return len;
+       if (sizeof(size_t) <= sizeof(int))
+               format = SMALL_STRING;
+       else
+               format = BIG_STRING;
+       return seq_printf(s, format,
+                         shp->shm_perm.key,
+                         shp->id,
+                         shp->shm_flags,
+                         shp->shm_segsz,
+                         shp->shm_cprid,
+                         shp->shm_lprid,
+                         is_file_hugepages(shp->shm_file) ? (file_count(shp->shm_file) - 1) : shp->shm_nattch,
+                         shp->shm_perm.uid,
+                         shp->shm_perm.gid,
+                         shp->shm_perm.cuid,
+                         shp->shm_perm.cgid,
+                         shp->shm_atim,
+                         shp->shm_dtim,
+                         shp->shm_ctim);
 }
 #endif
index e00c35f7b2b8055ffc9d516b69343eb6c3158836..10e836d0d89e86fb36de703364a0afdeb0f21c7e 100644 (file)
 #include <linux/security.h>
 #include <linux/rcupdate.h>
 #include <linux/workqueue.h>
+#include <linux/seq_file.h>
+#include <linux/proc_fs.h>
 
 #include <asm/unistd.h>
 
 #include "util.h"
 
+struct ipc_proc_iface {
+       const char *path;
+       const char *header;
+       struct ipc_ids *ids;
+       int (*show)(struct seq_file *, void *);
+};
+
 /**
  *     ipc_init        -       initialise IPC subsystem
  *
@@ -86,6 +95,43 @@ void __init ipc_init_ids(struct ipc_ids* ids, int size)
                ids->entries->p[i] = NULL;
 }
 
+#ifdef CONFIG_PROC_FS
+static struct file_operations sysvipc_proc_fops;
+/**
+ *     ipc_init_proc_interface -  Create a proc interface for sysipc types
+ *                                using a seq_file interface.
+ *     @path: Path in procfs
+ *     @header: Banner to be printed at the beginning of the file.
+ *     @ids: ipc id table to iterate.
+ *     @show: show routine.
+ */
+void __init ipc_init_proc_interface(const char *path, const char *header,
+                                   struct ipc_ids *ids,
+                                   int (*show)(struct seq_file *, void *))
+{
+       struct proc_dir_entry *pde;
+       struct ipc_proc_iface *iface;
+
+       iface = kmalloc(sizeof(*iface), GFP_KERNEL);
+       if (!iface)
+               return;
+       iface->path     = path;
+       iface->header   = header;
+       iface->ids      = ids;
+       iface->show     = show;
+
+       pde = create_proc_entry(path,
+                               S_IRUGO,        /* world readable */
+                               NULL            /* parent dir */);
+       if (pde) {
+               pde->data = iface;
+               pde->proc_fops = &sysvipc_proc_fops;
+       } else {
+               kfree(iface);
+       }
+}
+#endif
+
 /**
  *     ipc_findkey     -       find a key in an ipc identifier set     
  *     @ids: Identifier set
@@ -578,3 +624,113 @@ int ipc_parse_version (int *cmd)
 }
 
 #endif /* __ARCH_WANT_IPC_PARSE_VERSION */
+
+#ifdef CONFIG_PROC_FS
+static void *sysvipc_proc_next(struct seq_file *s, void *it, loff_t *pos)
+{
+       struct ipc_proc_iface *iface = s->private;
+       struct kern_ipc_perm *ipc = it;
+       loff_t p;
+
+       /* If we had an ipc id locked before, unlock it */
+       if (ipc && ipc != SEQ_START_TOKEN)
+               ipc_unlock(ipc);
+
+       /*
+        * p = *pos - 1 (because id 0 starts at position 1)
+        *          + 1 (because we increment the position by one)
+        */
+       for (p = *pos; p <= iface->ids->max_id; p++) {
+               if ((ipc = ipc_lock(iface->ids, p)) != NULL) {
+                       *pos = p + 1;
+                       return ipc;
+               }
+       }
+
+       /* Out of range - return NULL to terminate iteration */
+       return NULL;
+}
+
+/*
+ * File positions: pos 0 -> header, pos n -> ipc id + 1.
+ * SeqFile iterator: iterator value locked shp or SEQ_TOKEN_START.
+ */
+static void *sysvipc_proc_start(struct seq_file *s, loff_t *pos)
+{
+       struct ipc_proc_iface *iface = s->private;
+       struct kern_ipc_perm *ipc;
+       loff_t p;
+
+       /*
+        * Take the lock - this will be released by the corresponding
+        * call to stop().
+        */
+       down(&iface->ids->sem);
+
+       /* pos < 0 is invalid */
+       if (*pos < 0)
+               return NULL;
+
+       /* pos == 0 means header */
+       if (*pos == 0)
+               return SEQ_START_TOKEN;
+
+       /* Find the (pos-1)th ipc */
+       for (p = *pos - 1; p <= iface->ids->max_id; p++) {
+               if ((ipc = ipc_lock(iface->ids, p)) != NULL) {
+                       *pos = p + 1;
+                       return ipc;
+               }
+       }
+       return NULL;
+}
+
+static void sysvipc_proc_stop(struct seq_file *s, void *it)
+{
+       struct kern_ipc_perm *ipc = it;
+       struct ipc_proc_iface *iface = s->private;
+
+       /* If we had a locked segment, release it */
+       if (ipc && ipc != SEQ_START_TOKEN)
+               ipc_unlock(ipc);
+
+       /* Release the lock we took in start() */
+       up(&iface->ids->sem);
+}
+
+static int sysvipc_proc_show(struct seq_file *s, void *it)
+{
+       struct ipc_proc_iface *iface = s->private;
+
+       if (it == SEQ_START_TOKEN)
+               return seq_puts(s, iface->header);
+
+       return iface->show(s, it);
+}
+
+static struct seq_operations sysvipc_proc_seqops = {
+       .start = sysvipc_proc_start,
+       .stop  = sysvipc_proc_stop,
+       .next  = sysvipc_proc_next,
+       .show  = sysvipc_proc_show,
+};
+
+static int sysvipc_proc_open(struct inode *inode, struct file *file) {
+       int ret;
+       struct seq_file *seq;
+
+       ret = seq_open(file, &sysvipc_proc_seqops);
+       if (!ret) {
+               seq = file->private_data;
+               seq->private = PDE(inode)->data;
+       }
+       return ret;
+}
+
+static struct file_operations sysvipc_proc_fops = {
+       .open    = sysvipc_proc_open,
+       .read    = seq_read,
+       .llseek  = seq_lseek,
+       .release = seq_release,
+};
+#endif /* CONFIG_PROC_FS */
index 44348ca5a70738ab4033b68d66c97bdcaa626495..fc9a28be0797b3a27ac7f99f8572eeff99ffe99c 100644 (file)
@@ -30,7 +30,15 @@ struct ipc_ids {
        struct ipc_id_ary* entries;
 };
 
+struct seq_file;
 void __init ipc_init_ids(struct ipc_ids* ids, int size);
+#ifdef CONFIG_PROC_FS
+void __init ipc_init_proc_interface(const char *path, const char *header,
+                                   struct ipc_ids *ids,
+                                   int (*show)(struct seq_file *, void *));
+#else
+#define ipc_init_proc_interface(path, header, ids, show) do {} while (0)
+#endif
 
 /* must be called with ids->sem acquired.*/
 int ipc_findkey(struct ipc_ids* ids, key_t key);
index cb05cd05d2374b1ae316adb437ec14da370bd8a5..8d57a2f1226baa8034e8d93b7e4806d5a3f5fce1 100644 (file)
@@ -27,6 +27,7 @@ obj-$(CONFIG_AUDIT) += audit.o
 obj-$(CONFIG_AUDITSYSCALL) += auditsc.o
 obj-$(CONFIG_KPROBES) += kprobes.o
 obj-$(CONFIG_SYSFS) += ksysfs.o
+obj-$(CONFIG_DETECT_SOFTLOCKUP) += softlockup.o
 obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
 obj-$(CONFIG_CRASH_DUMP) += crash_dump.o
 obj-$(CONFIG_SECCOMP) += seccomp.o
index 4168f631868e15bb5e9a50c457c9b5f539a6838c..f70e6027cca9758c7ca35f3dc4bd89b7d97d5b14 100644 (file)
@@ -220,7 +220,7 @@ asmlinkage long sys_acct(const char __user *name)
                        return (PTR_ERR(tmp));
                }
                /* Difference from BSD - they don't do O_APPEND */
-               file = filp_open(tmp, O_WRONLY|O_APPEND, 0);
+               file = filp_open(tmp, O_WRONLY|O_APPEND|O_LARGEFILE, 0);
                putname(tmp);
                if (IS_ERR(file)) {
                        return (PTR_ERR(file));
index 8ab1b4e518b8909a867595534957dbf3c12cf3d8..1f06e76901067ffa1c08d586d0128f64ad6d6c65 100644 (file)
@@ -628,13 +628,6 @@ static int validate_change(const struct cpuset *cur, const struct cpuset *trial)
  * lock_cpu_hotplug()/unlock_cpu_hotplug() pair.
  */
 
-/*
- * Hack to avoid 2.6.13 partial node dynamic sched domain bug.
- * Disable letting 'cpu_exclusive' cpusets define dynamic sched
- * domains, until the sched domain can handle partial nodes.
- * Remove this #if hackery when sched domains fixed.
- */
-#if 0
 static void update_cpu_domains(struct cpuset *cur)
 {
        struct cpuset *c, *par = cur->parent;
@@ -675,11 +668,6 @@ static void update_cpu_domains(struct cpuset *cur)
        partition_sched_domains(&pspan, &cspan);
        unlock_cpu_hotplug();
 }
-#else
-static void update_cpu_domains(struct cpuset *cur)
-{
-}
-#endif
 
 static int update_cpumask(struct cpuset *cs, char *buf)
 {
@@ -1611,17 +1599,114 @@ int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl)
        return 0;
 }
 
+/*
+ * nearest_exclusive_ancestor() - Returns the nearest mem_exclusive
+ * ancestor to the specified cpuset.  Call while holding cpuset_sem.
+ * If no ancestor is mem_exclusive (an unusual configuration), then
+ * returns the root cpuset.
+ */
+static const struct cpuset *nearest_exclusive_ancestor(const struct cpuset *cs)
+{
+       while (!is_mem_exclusive(cs) && cs->parent)
+               cs = cs->parent;
+       return cs;
+}
+
 /**
- * cpuset_zone_allowed - is zone z allowed in current->mems_allowed
- * @z: zone in question
+ * cpuset_zone_allowed - Can we allocate memory on zone z's memory node?
+ * @z: is this zone on an allowed node?
+ * @gfp_mask: memory allocation flags (we use __GFP_HARDWALL)
  *
- * Is zone z allowed in current->mems_allowed, or is
- * the CPU in interrupt context? (zone is always allowed in this case)
- */
-int cpuset_zone_allowed(struct zone *z)
+ * If we're in interrupt, yes, we can always allocate.  If zone
+ * z's node is in our tasks mems_allowed, yes.  If it's not a
+ * __GFP_HARDWALL request and this zone's nodes is in the nearest
+ * mem_exclusive cpuset ancestor to this tasks cpuset, yes.
+ * Otherwise, no.
+ *
+ * GFP_USER allocations are marked with the __GFP_HARDWALL bit,
+ * and do not allow allocations outside the current tasks cpuset.
+ * GFP_KERNEL allocations are not so marked, so can escape to the
+ * nearest mem_exclusive ancestor cpuset.
+ *
+ * Scanning up parent cpusets requires cpuset_sem.  The __alloc_pages()
+ * routine only calls here with __GFP_HARDWALL bit _not_ set if
+ * it's a GFP_KERNEL allocation, and all nodes in the current tasks
+ * mems_allowed came up empty on the first pass over the zonelist.
+ * So only GFP_KERNEL allocations, if all nodes in the cpuset are
+ * short of memory, might require taking the cpuset_sem semaphore.
+ *
+ * The first loop over the zonelist in mm/page_alloc.c:__alloc_pages()
+ * calls here with __GFP_HARDWALL always set in gfp_mask, enforcing
+ * hardwall cpusets - no allocation on a node outside the cpuset is
+ * allowed (unless in interrupt, of course).
+ *
+ * The second loop doesn't even call here for GFP_ATOMIC requests
+ * (if the __alloc_pages() local variable 'wait' is set).  That check
+ * and the checks below have the combined affect in the second loop of
+ * the __alloc_pages() routine that:
+ *     in_interrupt - any node ok (current task context irrelevant)
+ *     GFP_ATOMIC   - any node ok
+ *     GFP_KERNEL   - any node in enclosing mem_exclusive cpuset ok
+ *     GFP_USER     - only nodes in current tasks mems allowed ok.
+ **/
+
+int cpuset_zone_allowed(struct zone *z, unsigned int __nocast gfp_mask)
 {
-       return in_interrupt() ||
-               node_isset(z->zone_pgdat->node_id, current->mems_allowed);
+       int node;                       /* node that zone z is on */
+       const struct cpuset *cs;        /* current cpuset ancestors */
+       int allowed = 1;                /* is allocation in zone z allowed? */
+
+       if (in_interrupt())
+               return 1;
+       node = z->zone_pgdat->node_id;
+       if (node_isset(node, current->mems_allowed))
+               return 1;
+       if (gfp_mask & __GFP_HARDWALL)  /* If hardwall request, stop here */
+               return 0;
+
+       /* Not hardwall and node outside mems_allowed: scan up cpusets */
+       down(&cpuset_sem);
+       cs = current->cpuset;
+       if (!cs)
+               goto done;              /* current task exiting */
+       cs = nearest_exclusive_ancestor(cs);
+       allowed = node_isset(node, cs->mems_allowed);
+done:
+       up(&cpuset_sem);
+       return allowed;
+}
+
+/**
+ * cpuset_excl_nodes_overlap - Do we overlap @p's mem_exclusive ancestors?
+ * @p: pointer to task_struct of some other task.
+ *
+ * Description: Return true if the nearest mem_exclusive ancestor
+ * cpusets of tasks @p and current overlap.  Used by oom killer to
+ * determine if task @p's memory usage might impact the memory
+ * available to the current task.
+ *
+ * Acquires cpuset_sem - not suitable for calling from a fast path.
+ **/
+
+int cpuset_excl_nodes_overlap(const struct task_struct *p)
+{
+       const struct cpuset *cs1, *cs2; /* my and p's cpuset ancestors */
+       int overlap = 0;                /* do cpusets overlap? */
+
+       down(&cpuset_sem);
+       cs1 = current->cpuset;
+       if (!cs1)
+               goto done;              /* current task exiting */
+       cs2 = p->cpuset;
+       if (!cs2)
+               goto done;              /* task p is exiting */
+       cs1 = nearest_exclusive_ancestor(cs1);
+       cs2 = nearest_exclusive_ancestor(cs2);
+       overlap = nodes_intersects(cs1->mems_allowed, cs2->mems_allowed);
+done:
+       up(&cpuset_sem);
+
+       return overlap;
 }
 
 /*
index c7130f86106c30a8c9970b425dad032d3885318e..ca05fe6a70b24a2921901505c99dd7eb105b3df7 100644 (file)
@@ -40,6 +40,7 @@
 #include <linux/pagemap.h>
 #include <linux/syscalls.h>
 #include <linux/signal.h>
+#include <asm/futex.h>
 
 #define FUTEX_HASHBITS (CONFIG_BASE_SMALL ? 4 : 8)
 
@@ -326,6 +327,118 @@ out:
        return ret;
 }
 
+/*
+ * Wake up all waiters hashed on the physical page that is mapped
+ * to this virtual address:
+ */
+static int futex_wake_op(unsigned long uaddr1, unsigned long uaddr2, int nr_wake, int nr_wake2, int op)
+{
+       union futex_key key1, key2;
+       struct futex_hash_bucket *bh1, *bh2;
+       struct list_head *head;
+       struct futex_q *this, *next;
+       int ret, op_ret, attempt = 0;
+
+retryfull:
+       down_read(&current->mm->mmap_sem);
+
+       ret = get_futex_key(uaddr1, &key1);
+       if (unlikely(ret != 0))
+               goto out;
+       ret = get_futex_key(uaddr2, &key2);
+       if (unlikely(ret != 0))
+               goto out;
+
+       bh1 = hash_futex(&key1);
+       bh2 = hash_futex(&key2);
+
+retry:
+       if (bh1 < bh2)
+               spin_lock(&bh1->lock);
+       spin_lock(&bh2->lock);
+       if (bh1 > bh2)
+               spin_lock(&bh1->lock);
+
+       op_ret = futex_atomic_op_inuser(op, (int __user *)uaddr2);
+       if (unlikely(op_ret < 0)) {
+               int dummy;
+
+               spin_unlock(&bh1->lock);
+               if (bh1 != bh2)
+                       spin_unlock(&bh2->lock);
+
+               /* futex_atomic_op_inuser needs to both read and write
+                * *(int __user *)uaddr2, but we can't modify it
+                * non-atomically.  Therefore, if get_user below is not
+                * enough, we need to handle the fault ourselves, while
+                * still holding the mmap_sem.  */
+               if (attempt++) {
+                       struct vm_area_struct * vma;
+                       struct mm_struct *mm = current->mm;
+
+                       ret = -EFAULT;
+                       if (attempt >= 2 ||
+                           !(vma = find_vma(mm, uaddr2)) ||
+                           vma->vm_start > uaddr2 ||
+                           !(vma->vm_flags & VM_WRITE))
+                               goto out;
+
+                       switch (handle_mm_fault(mm, vma, uaddr2, 1)) {
+                       case VM_FAULT_MINOR:
+                               current->min_flt++;
+                               break;
+                       case VM_FAULT_MAJOR:
+                               current->maj_flt++;
+                               break;
+                       default:
+                               goto out;
+                       }
+                       goto retry;
+               }
+
+               /* If we would have faulted, release mmap_sem,
+                * fault it in and start all over again.  */
+               up_read(&current->mm->mmap_sem);
+
+               ret = get_user(dummy, (int __user *)uaddr2);
+               if (ret)
+                       return ret;
+
+               goto retryfull;
+       }
+
+       head = &bh1->chain;
+
+       list_for_each_entry_safe(this, next, head, list) {
+               if (match_futex (&this->key, &key1)) {
+                       wake_futex(this);
+                       if (++ret >= nr_wake)
+                               break;
+               }
+       }
+
+       if (op_ret > 0) {
+               head = &bh2->chain;
+
+               op_ret = 0;
+               list_for_each_entry_safe(this, next, head, list) {
+                       if (match_futex (&this->key, &key2)) {
+                               wake_futex(this);
+                               if (++op_ret >= nr_wake2)
+                                       break;
+                       }
+               }
+               ret += op_ret;
+       }
+
+       spin_unlock(&bh1->lock);
+       if (bh1 != bh2)
+               spin_unlock(&bh2->lock);
+out:
+       up_read(&current->mm->mmap_sem);
+       return ret;
+}
+
 /*
  * Requeue all waiters hashed on one physical page to another
  * physical page.
@@ -673,23 +786,17 @@ static int futex_fd(unsigned long uaddr, int signal)
        filp->f_mapping = filp->f_dentry->d_inode->i_mapping;
 
        if (signal) {
-               int err;
                err = f_setown(filp, current->pid, 1);
                if (err < 0) {
-                       put_unused_fd(ret);
-                       put_filp(filp);
-                       ret = err;
-                       goto out;
+                       goto error;
                }
                filp->f_owner.signum = signal;
        }
 
        q = kmalloc(sizeof(*q), GFP_KERNEL);
        if (!q) {
-               put_unused_fd(ret);
-               put_filp(filp);
-               ret = -ENOMEM;
-               goto out;
+               err = -ENOMEM;
+               goto error;
        }
 
        down_read(&current->mm->mmap_sem);
@@ -697,10 +804,8 @@ static int futex_fd(unsigned long uaddr, int signal)
 
        if (unlikely(err != 0)) {
                up_read(&current->mm->mmap_sem);
-               put_unused_fd(ret);
-               put_filp(filp);
                kfree(q);
-               return err;
+               goto error;
        }
 
        /*
@@ -716,6 +821,11 @@ static int futex_fd(unsigned long uaddr, int signal)
        fd_install(ret, filp);
 out:
        return ret;
+error:
+       put_unused_fd(ret);
+       put_filp(filp);
+       ret = err;
+       goto out;
 }
 
 long do_futex(unsigned long uaddr, int op, int val, unsigned long timeout,
@@ -740,6 +850,9 @@ long do_futex(unsigned long uaddr, int op, int val, unsigned long timeout,
        case FUTEX_CMP_REQUEUE:
                ret = futex_requeue(uaddr, uaddr2, val, val2, &val3);
                break;
+       case FUTEX_WAKE_OP:
+               ret = futex_wake_op(uaddr, uaddr2, val, val2, val3);
+               break;
        default:
                ret = -ENOSYS;
        }
index 388977f3e9b7d7a826e57d60a3227da0d4f3c1ac..0cbe633420fb9b6d46376debb0c68d201a5966d5 100644 (file)
@@ -39,7 +39,7 @@ void inter_module_register(const char *im_name, struct module *owner, const void
        struct list_head *tmp;
        struct inter_module_entry *ime, *ime_new;
 
-       if (!(ime_new = kmalloc(sizeof(*ime), GFP_KERNEL))) {
+       if (!(ime_new = kzalloc(sizeof(*ime), GFP_KERNEL))) {
                /* Overloaded kernel, not fatal */
                printk(KERN_ERR
                        "Aiee, inter_module_register: cannot kmalloc entry for '%s'\n",
@@ -47,7 +47,6 @@ void inter_module_register(const char *im_name, struct module *owner, const void
                kmalloc_failed = 1;
                return;
        }
-       memset(ime_new, 0, sizeof(*ime_new));
        ime_new->im_name = im_name;
        ime_new->owner = owner;
        ime_new->userdata = userdata;
index c29f83c16497cff719b118bf1a8fabfb78076cd2..3ff7b925c38773f1c0df8eb4dcda1ea5926f1ea3 100644 (file)
@@ -111,7 +111,7 @@ fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs)
        unsigned int status;
 
        kstat_this_cpu.irqs[irq]++;
-       if (desc->status & IRQ_PER_CPU) {
+       if (CHECK_IRQ_PER_CPU(desc->status)) {
                irqreturn_t action_ret;
 
                /*
index ac670098570579e980e6b7bba35a235f7be885a9..1cfdb08ddf2054f6f219d28c78b97828e2f8b447 100644 (file)
 
 cpumask_t irq_affinity[NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
 
+#if defined (CONFIG_GENERIC_PENDING_IRQ) || defined (CONFIG_IRQBALANCE)
+cpumask_t __cacheline_aligned pending_irq_cpumask[NR_IRQS];
+#endif
+
 /**
  *     synchronize_irq - wait for pending IRQ handlers (on other CPUs)
  *
index 85d08daa6600ee826e1810010500ddca76133e86..f26e534c6585dacf089be5fb602f70b08ee6db60 100644 (file)
@@ -19,12 +19,22 @@ static struct proc_dir_entry *root_irq_dir, *irq_dir[NR_IRQS];
  */
 static struct proc_dir_entry *smp_affinity_entry[NR_IRQS];
 
-void __attribute__((weak))
-proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val)
+#ifdef CONFIG_GENERIC_PENDING_IRQ
+void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val)
+{
+       /*
+        * Save these away for later use. Re-progam when the
+        * interrupt is pending
+        */
+       set_pending_irq(irq, mask_val);
+}
+#else
+void proc_set_irq_affinity(unsigned int irq, cpumask_t mask_val)
 {
        irq_affinity[irq] = mask_val;
        irq_desc[irq].handler->set_affinity(irq, mask_val);
 }
+#endif
 
 static int irq_affinity_read_proc(char *page, char **start, off_t off,
                                  int count, int *eof, void *data)
index b0237122b24e14667631716a8a6c3e23a495a7e9..f3ea492ab44dfcfc05e2fad4027e303f9b69d9dd 100644 (file)
@@ -37,6 +37,7 @@
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/moduleloader.h>
+#include <asm-generic/sections.h>
 #include <asm/cacheflush.h>
 #include <asm/errno.h>
 #include <asm/kdebug.h>
@@ -72,7 +73,7 @@ static struct hlist_head kprobe_insn_pages;
  * get_insn_slot() - Find a slot on an executable page for an instruction.
  * We allocate an executable page if there's no room on existing ones.
  */
-kprobe_opcode_t *get_insn_slot(void)
+kprobe_opcode_t __kprobes *get_insn_slot(void)
 {
        struct kprobe_insn_page *kip;
        struct hlist_node *pos;
@@ -117,7 +118,7 @@ kprobe_opcode_t *get_insn_slot(void)
        return kip->insns;
 }
 
-void free_insn_slot(kprobe_opcode_t *slot)
+void __kprobes free_insn_slot(kprobe_opcode_t *slot)
 {
        struct kprobe_insn_page *kip;
        struct hlist_node *pos;
@@ -152,20 +153,42 @@ void free_insn_slot(kprobe_opcode_t *slot)
 }
 
 /* Locks kprobe: irqs must be disabled */
-void lock_kprobes(void)
+void __kprobes lock_kprobes(void)
 {
+       unsigned long flags = 0;
+
+       /* Avoiding local interrupts to happen right after we take the kprobe_lock
+        * and before we get a chance to update kprobe_cpu, this to prevent
+        * deadlock when we have a kprobe on ISR routine and a kprobe on task
+        * routine
+        */
+       local_irq_save(flags);
+
        spin_lock(&kprobe_lock);
        kprobe_cpu = smp_processor_id();
+
+       local_irq_restore(flags);
 }
 
-void unlock_kprobes(void)
+void __kprobes unlock_kprobes(void)
 {
+       unsigned long flags = 0;
+
+       /* Avoiding local interrupts to happen right after we update
+        * kprobe_cpu and before we get a a chance to release kprobe_lock,
+        * this to prevent deadlock when we have a kprobe on ISR routine and
+        * a kprobe on task routine
+        */
+       local_irq_save(flags);
+
        kprobe_cpu = NR_CPUS;
        spin_unlock(&kprobe_lock);
+
+       local_irq_restore(flags);
 }
 
 /* You have to be holding the kprobe_lock */
-struct kprobe *get_kprobe(void *addr)
+struct kprobe __kprobes *get_kprobe(void *addr)
 {
        struct hlist_head *head;
        struct hlist_node *node;
@@ -183,7 +206,7 @@ struct kprobe *get_kprobe(void *addr)
  * Aggregate handlers for multiple kprobes support - these handlers
  * take care of invoking the individual kprobe handlers on p->list
  */
-static int aggr_pre_handler(struct kprobe *p, struct pt_regs *regs)
+static int __kprobes aggr_pre_handler(struct kprobe *p, struct pt_regs *regs)
 {
        struct kprobe *kp;
 
@@ -198,8 +221,8 @@ static int aggr_pre_handler(struct kprobe *p, struct pt_regs *regs)
        return 0;
 }
 
-static void aggr_post_handler(struct kprobe *p, struct pt_regs *regs,
-                             unsigned long flags)
+static void __kprobes aggr_post_handler(struct kprobe *p, struct pt_regs *regs,
+                                       unsigned long flags)
 {
        struct kprobe *kp;
 
@@ -213,8 +236,8 @@ static void aggr_post_handler(struct kprobe *p, struct pt_regs *regs,
        return;
 }
 
-static int aggr_fault_handler(struct kprobe *p, struct pt_regs *regs,
-                             int trapnr)
+static int __kprobes aggr_fault_handler(struct kprobe *p, struct pt_regs *regs,
+                                       int trapnr)
 {
        /*
         * if we faulted "during" the execution of a user specified
@@ -227,7 +250,7 @@ static int aggr_fault_handler(struct kprobe *p, struct pt_regs *regs,
        return 0;
 }
 
-static int aggr_break_handler(struct kprobe *p, struct pt_regs *regs)
+static int __kprobes aggr_break_handler(struct kprobe *p, struct pt_regs *regs)
 {
        struct kprobe *kp = curr_kprobe;
        if (curr_kprobe && kp->break_handler) {
@@ -240,7 +263,7 @@ static int aggr_break_handler(struct kprobe *p, struct pt_regs *regs)
        return 0;
 }
 
-struct kretprobe_instance *get_free_rp_inst(struct kretprobe *rp)
+struct kretprobe_instance __kprobes *get_free_rp_inst(struct kretprobe *rp)
 {
        struct hlist_node *node;
        struct kretprobe_instance *ri;
@@ -249,7 +272,8 @@ struct kretprobe_instance *get_free_rp_inst(struct kretprobe *rp)
        return NULL;
 }
 
-static struct kretprobe_instance *get_used_rp_inst(struct kretprobe *rp)
+static struct kretprobe_instance __kprobes *get_used_rp_inst(struct kretprobe
+                                                             *rp)
 {
        struct hlist_node *node;
        struct kretprobe_instance *ri;
@@ -258,7 +282,7 @@ static struct kretprobe_instance *get_used_rp_inst(struct kretprobe *rp)
        return NULL;
 }
 
-void add_rp_inst(struct kretprobe_instance *ri)
+void __kprobes add_rp_inst(struct kretprobe_instance *ri)
 {
        /*
         * Remove rp inst off the free list -
@@ -276,7 +300,7 @@ void add_rp_inst(struct kretprobe_instance *ri)
        hlist_add_head(&ri->uflist, &ri->rp->used_instances);
 }
 
-void recycle_rp_inst(struct kretprobe_instance *ri)
+void __kprobes recycle_rp_inst(struct kretprobe_instance *ri)
 {
        /* remove rp inst off the rprobe_inst_table */
        hlist_del(&ri->hlist);
@@ -291,7 +315,7 @@ void recycle_rp_inst(struct kretprobe_instance *ri)
                kfree(ri);
 }
 
-struct hlist_head kretprobe_inst_table_head(struct task_struct *tsk)
+struct hlist_head __kprobes *kretprobe_inst_table_head(struct task_struct *tsk)
 {
        return &kretprobe_inst_table[hash_ptr(tsk, KPROBE_HASH_BITS)];
 }
@@ -302,7 +326,7 @@ struct hlist_head * kretprobe_inst_table_head(struct task_struct *tsk)
  * instances associated with this task. These left over instances represent
  * probed functions that have been called but will never return.
  */
-void kprobe_flush_task(struct task_struct *tk)
+void __kprobes kprobe_flush_task(struct task_struct *tk)
 {
         struct kretprobe_instance *ri;
         struct hlist_head *head;
@@ -322,7 +346,8 @@ void kprobe_flush_task(struct task_struct *tk)
  * This kprobe pre_handler is registered with every kretprobe. When probe
  * hits it will set up the return probe.
  */
-static int pre_handler_kretprobe(struct kprobe *p, struct pt_regs *regs)
+static int __kprobes pre_handler_kretprobe(struct kprobe *p,
+                                          struct pt_regs *regs)
 {
        struct kretprobe *rp = container_of(p, struct kretprobe, kp);
 
@@ -353,7 +378,7 @@ static inline void copy_kprobe(struct kprobe *old_p, struct kprobe *p)
 * Add the new probe to old_p->list. Fail if this is the
 * second jprobe at the address - two jprobes can't coexist
 */
-static int add_new_kprobe(struct kprobe *old_p, struct kprobe *p)
+static int __kprobes add_new_kprobe(struct kprobe *old_p, struct kprobe *p)
 {
         struct kprobe *kp;
 
@@ -395,7 +420,8 @@ static inline void add_aggr_kprobe(struct kprobe *ap, struct kprobe *p)
  * the intricacies
  * TODO: Move kcalloc outside the spinlock
  */
-static int register_aggr_kprobe(struct kprobe *old_p, struct kprobe *p)
+static int __kprobes register_aggr_kprobe(struct kprobe *old_p,
+                                         struct kprobe *p)
 {
        int ret = 0;
        struct kprobe *ap;
@@ -434,15 +460,25 @@ static inline void cleanup_aggr_kprobe(struct kprobe *old_p,
                spin_unlock_irqrestore(&kprobe_lock, flags);
 }
 
-int register_kprobe(struct kprobe *p)
+static int __kprobes in_kprobes_functions(unsigned long addr)
+{
+       if (addr >= (unsigned long)__kprobes_text_start
+               && addr < (unsigned long)__kprobes_text_end)
+               return -EINVAL;
+       return 0;
+}
+
+int __kprobes register_kprobe(struct kprobe *p)
 {
        int ret = 0;
        unsigned long flags = 0;
        struct kprobe *old_p;
 
-       if ((ret = arch_prepare_kprobe(p)) != 0) {
+       if ((ret = in_kprobes_functions((unsigned long) p->addr)) != 0)
+               return ret;
+       if ((ret = arch_prepare_kprobe(p)) != 0)
                goto rm_kprobe;
-       }
+
        spin_lock_irqsave(&kprobe_lock, flags);
        old_p = get_kprobe(p->addr);
        p->nmissed = 0;
@@ -466,7 +502,7 @@ rm_kprobe:
        return ret;
 }
 
-void unregister_kprobe(struct kprobe *p)
+void __kprobes unregister_kprobe(struct kprobe *p)
 {
        unsigned long flags;
        struct kprobe *old_p;
@@ -487,7 +523,7 @@ static struct notifier_block kprobe_exceptions_nb = {
        .priority = 0x7fffffff /* we need to notified first */
 };
 
-int register_jprobe(struct jprobe *jp)
+int __kprobes register_jprobe(struct jprobe *jp)
 {
        /* Todo: Verify probepoint is a function entry point */
        jp->kp.pre_handler = setjmp_pre_handler;
@@ -496,14 +532,14 @@ int register_jprobe(struct jprobe *jp)
        return register_kprobe(&jp->kp);
 }
 
-void unregister_jprobe(struct jprobe *jp)
+void __kprobes unregister_jprobe(struct jprobe *jp)
 {
        unregister_kprobe(&jp->kp);
 }
 
 #ifdef ARCH_SUPPORTS_KRETPROBES
 
-int register_kretprobe(struct kretprobe *rp)
+int __kprobes register_kretprobe(struct kretprobe *rp)
 {
        int ret = 0;
        struct kretprobe_instance *inst;
@@ -540,14 +576,14 @@ int register_kretprobe(struct kretprobe *rp)
 
 #else /* ARCH_SUPPORTS_KRETPROBES */
 
-int register_kretprobe(struct kretprobe *rp)
+int __kprobes register_kretprobe(struct kretprobe *rp)
 {
        return -ENOSYS;
 }
 
 #endif /* ARCH_SUPPORTS_KRETPROBES */
 
-void unregister_kretprobe(struct kretprobe *rp)
+void __kprobes unregister_kretprobe(struct kretprobe *rp)
 {
        unsigned long flags;
        struct kretprobe_instance *ri;
index c32995fbd8fd14b608bb49e5b0f5899e41ffd979..4b39d3793c720673452b6d8be18ade674360131a 100644 (file)
@@ -1509,6 +1509,7 @@ static struct module *load_module(void __user *umod,
        long err = 0;
        void *percpu = NULL, *ptr = NULL; /* Stops spurious gcc warning */
        struct exception_table_entry *extable;
+       mm_segment_t old_fs;
 
        DEBUGP("load_module: umod=%p, len=%lu, uargs=%p\n",
               umod, len, uargs);
@@ -1779,6 +1780,24 @@ static struct module *load_module(void __user *umod,
        if (err < 0)
                goto cleanup;
 
+       /* flush the icache in correct context */
+       old_fs = get_fs();
+       set_fs(KERNEL_DS);
+
+       /*
+        * Flush the instruction cache, since we've played with text.
+        * Do it before processing of module parameters, so the module
+        * can provide parameter accessor functions of its own.
+        */
+       if (mod->module_init)
+               flush_icache_range((unsigned long)mod->module_init,
+                                  (unsigned long)mod->module_init
+                                  + mod->init_size);
+       flush_icache_range((unsigned long)mod->module_core,
+                          (unsigned long)mod->module_core + mod->core_size);
+
+       set_fs(old_fs);
+
        mod->args = args;
        if (obsparmindex) {
                err = obsolete_params(mod->name, mod->args,
@@ -1860,7 +1879,6 @@ sys_init_module(void __user *umod,
                const char __user *uargs)
 {
        struct module *mod;
-       mm_segment_t old_fs = get_fs();
        int ret = 0;
 
        /* Must have permission */
@@ -1878,19 +1896,6 @@ sys_init_module(void __user *umod,
                return PTR_ERR(mod);
        }
 
-       /* flush the icache in correct context */
-       set_fs(KERNEL_DS);
-
-       /* Flush the instruction cache, since we've played with text */
-       if (mod->module_init)
-               flush_icache_range((unsigned long)mod->module_init,
-                                  (unsigned long)mod->module_init
-                                  + mod->init_size);
-       flush_icache_range((unsigned long)mod->module_core,
-                          (unsigned long)mod->module_core + mod->core_size);
-
-       set_fs(old_fs);
-
        /* Now sew it into the lists.  They won't access us, since
            strong_try_module_get() will fail. */
        stop_machine_run(__link_module, mod, NR_CPUS);
index d586c35ef8fca8f4540031c5ad071b90c1071df4..fbf173215fd217bed3db643ba0676916f7085daf 100644 (file)
@@ -542,8 +542,8 @@ static void __init kernel_param_sysfs_setup(const char *name,
 {
        struct module_kobject *mk;
 
-       mk = kmalloc(sizeof(struct module_kobject), GFP_KERNEL);
-       memset(mk, 0, sizeof(struct module_kobject));
+       mk = kzalloc(sizeof(struct module_kobject), GFP_KERNEL);
+       BUG_ON(!mk);
 
        mk->mod = THIS_MODULE;
        kobj_set_kset_s(mk, module_subsys);
index 38798a2ff994e96c017010b8c2c62db578fe2002..b7b532acd9fc419050f03de66b12acb14d5c4077 100644 (file)
@@ -427,21 +427,23 @@ int posix_timer_event(struct k_itimer *timr,int si_private)
        timr->sigq->info.si_code = SI_TIMER;
        timr->sigq->info.si_tid = timr->it_id;
        timr->sigq->info.si_value = timr->it_sigev_value;
+
        if (timr->it_sigev_notify & SIGEV_THREAD_ID) {
-               if (unlikely(timr->it_process->flags & PF_EXITING)) {
-                       timr->it_sigev_notify = SIGEV_SIGNAL;
-                       put_task_struct(timr->it_process);
-                       timr->it_process = timr->it_process->group_leader;
-                       goto group;
-               }
-               return send_sigqueue(timr->it_sigev_signo, timr->sigq,
-                       timr->it_process);
-       }
-       else {
-       group:
-               return send_group_sigqueue(timr->it_sigev_signo, timr->sigq,
-                       timr->it_process);
+               struct task_struct *leader;
+               int ret = send_sigqueue(timr->it_sigev_signo, timr->sigq,
+                                       timr->it_process);
+
+               if (likely(ret >= 0))
+                       return ret;
+
+               timr->it_sigev_notify = SIGEV_SIGNAL;
+               leader = timr->it_process->group_leader;
+               put_task_struct(timr->it_process);
+               timr->it_process = leader;
        }
+
+       return send_group_sigqueue(timr->it_sigev_signo, timr->sigq,
+                                  timr->it_process);
 }
 EXPORT_SYMBOL_GPL(posix_timer_event);
 
index 917066a5767c342663c952d1018806dc67db1167..396c7873e804076a7dbdf718bcbbcc19bb94f475 100644 (file)
@@ -1,5 +1,6 @@
 config PM
        bool "Power Management support"
+       depends on !IA64_HP_SIM
        ---help---
          "Power Management" means that parts of your computer are shut
          off or put into a power conserving "sleep" mode if they are not
@@ -28,7 +29,7 @@ config PM_DEBUG
 
 config SOFTWARE_SUSPEND
        bool "Software Suspend"
-       depends on EXPERIMENTAL && PM && SWAP && ((X86 && SMP) || ((FVR || PPC32 || X86) && !SMP))
+       depends on PM && SWAP && (X86 || ((FVR || PPC32) && !SMP))
        ---help---
          Enable the possibility of suspending the machine.
          It doesn't need APM.
index 61deda04e39e2af3d7c31298665e02213afdafdd..159149321b3c2adb4dcf20372ada8edb2a098c7a 100644 (file)
@@ -60,9 +60,8 @@ struct pm_dev *pm_register(pm_dev_t type,
                           unsigned long id,
                           pm_callback callback)
 {
-       struct pm_dev *dev = kmalloc(sizeof(struct pm_dev), GFP_KERNEL);
+       struct pm_dev *dev = kzalloc(sizeof(struct pm_dev), GFP_KERNEL);
        if (dev) {
-               memset(dev, 0, sizeof(*dev));
                dev->type = type;
                dev->id = id;
                dev->callback = callback;
index eaacd5cb58895438ac28013968651f0d1752c4c6..d967e875ee82f974d9f4e8e365aa59270a6f5c61 100644 (file)
@@ -1059,6 +1059,7 @@ int swsusp_resume(void)
        BUG_ON(!error);
        restore_processor_state();
        restore_highmem();
+       touch_softlockup_watchdog();
        device_power_up();
        local_irq_enable();
        return error;
index 5092397fac29926bfab6da75fc273882b14e905d..a967605bc2e358cbcf95dd7fe60f7870fe9dd14b 100644 (file)
@@ -514,6 +514,9 @@ asmlinkage int printk(const char *fmt, ...)
        return r;
 }
 
+/* cpu currently holding logbuf_lock */
+static volatile unsigned int printk_cpu = UINT_MAX;
+
 asmlinkage int vprintk(const char *fmt, va_list args)
 {
        unsigned long flags;
@@ -522,11 +525,15 @@ asmlinkage int vprintk(const char *fmt, va_list args)
        static char printk_buf[1024];
        static int log_level_unknown = 1;
 
-       if (unlikely(oops_in_progress))
+       preempt_disable();
+       if (unlikely(oops_in_progress) && printk_cpu == smp_processor_id())
+               /* If a crash is occurring during printk() on this CPU,
+                * make sure we can't deadlock */
                zap_locks();
 
        /* This stops the holder of console_sem just where we want him */
        spin_lock_irqsave(&logbuf_lock, flags);
+       printk_cpu = smp_processor_id();
 
        /* Emit the output into the temporary buffer */
        printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args);
@@ -595,6 +602,7 @@ asmlinkage int vprintk(const char *fmt, va_list args)
                 * CPU until it is officially up.  We shouldn't be calling into
                 * random console drivers on a CPU which doesn't exist yet..
                 */
+               printk_cpu = UINT_MAX;
                spin_unlock_irqrestore(&logbuf_lock, flags);
                goto out;
        }
@@ -604,6 +612,7 @@ asmlinkage int vprintk(const char *fmt, va_list args)
                 * We own the drivers.  We can drop the spinlock and let
                 * release_console_sem() print the text
                 */
+               printk_cpu = UINT_MAX;
                spin_unlock_irqrestore(&logbuf_lock, flags);
                console_may_schedule = 0;
                release_console_sem();
@@ -613,9 +622,11 @@ asmlinkage int vprintk(const char *fmt, va_list args)
                 * allows the semaphore holder to proceed and to call the
                 * console drivers with the output which we just produced.
                 */
+               printk_cpu = UINT_MAX;
                spin_unlock_irqrestore(&logbuf_lock, flags);
        }
 out:
+       preempt_enable();
        return printed_len;
 }
 EXPORT_SYMBOL(printk);
index 8dcb8f6288bcecf1f436a2904c0ded883f9d3862..019e04ec065a55d8f28157d3a1f7ba06cafd347f 100644 (file)
@@ -118,6 +118,33 @@ int ptrace_check_attach(struct task_struct *child, int kill)
        return ret;
 }
 
+static int may_attach(struct task_struct *task)
+{
+       if (!task->mm)
+               return -EPERM;
+       if (((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))
+               return -EPERM;
+       smp_rmb();
+       if (!task->mm->dumpable && !capable(CAP_SYS_PTRACE))
+               return -EPERM;
+
+       return security_ptrace(current, task);
+}
+
+int ptrace_may_attach(struct task_struct *task)
+{
+       int err;
+       task_lock(task);
+       err = may_attach(task);
+       task_unlock(task);
+       return !err;
+}
+
 int ptrace_attach(struct task_struct *task)
 {
        int retval;
@@ -127,22 +154,10 @@ int ptrace_attach(struct task_struct *task)
                goto bad;
        if (task == current)
                goto bad;
-       if (!task->mm)
-               goto bad;
-       if(((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))
-               goto bad;
-       smp_rmb();
-       if (!task->mm->dumpable && !capable(CAP_SYS_PTRACE))
-               goto bad;
        /* the same process cannot be attached many times */
        if (task->ptrace & PT_PTRACED)
                goto bad;
-       retval = security_ptrace(current, task);
+       retval = may_attach(task);
        if (retval)
                goto bad;
 
index 26967e0422014a5957f4b01bbed9a4cea40098bf..92285d822de6c9ce3a75825b7b876b8379d522d6 100644 (file)
@@ -430,10 +430,9 @@ EXPORT_SYMBOL(adjust_resource);
  */
 struct resource * __request_region(struct resource *parent, unsigned long start, unsigned long n, const char *name)
 {
-       struct resource *res = kmalloc(sizeof(*res), GFP_KERNEL);
+       struct resource *res = kzalloc(sizeof(*res), GFP_KERNEL);
 
        if (res) {
-               memset(res, 0, sizeof(*res));
                res->name = name;
                res->start = start;
                res->end = start + n - 1;
index 5f889d0cbfcc2e614aef87963ec0bea5ea6a5f21..18b95520a2e29bdfa181aecb913f0ea50995f609 100644 (file)
@@ -1478,6 +1478,7 @@ static inline void prepare_task_switch(runqueue_t *rq, task_t *next)
 
 /**
  * finish_task_switch - clean up after a task-switch
+ * @rq: runqueue associated with task-switch
  * @prev: the thread we just switched away from.
  *
  * finish_task_switch must be called after the context switch, paired
@@ -4779,7 +4780,7 @@ static int sd_parent_degenerate(struct sched_domain *sd,
  * Attach the domain 'sd' to 'cpu' as its base domain.  Callers must
  * hold the hotplug lock.
  */
-void cpu_attach_domain(struct sched_domain *sd, int cpu)
+static void cpu_attach_domain(struct sched_domain *sd, int cpu)
 {
        runqueue_t *rq = cpu_rq(cpu);
        struct sched_domain *tmp;
@@ -4802,7 +4803,7 @@ void cpu_attach_domain(struct sched_domain *sd, int cpu)
 }
 
 /* cpus with isolated domains */
-cpumask_t __devinitdata cpu_isolated_map = CPU_MASK_NONE;
+static cpumask_t __devinitdata cpu_isolated_map = CPU_MASK_NONE;
 
 /* Setup the mask of cpus configured for isolated domains */
 static int __init isolated_cpu_setup(char *str)
@@ -4830,8 +4831,8 @@ __setup ("isolcpus=", isolated_cpu_setup);
  * covered by the given span, and will set each group's ->cpumask correctly,
  * and ->cpu_power to 0.
  */
-void init_sched_build_groups(struct sched_group groups[],
-                       cpumask_t span, int (*group_fn)(int cpu))
+static void init_sched_build_groups(struct sched_group groups[], cpumask_t span,
+                                   int (*group_fn)(int cpu))
 {
        struct sched_group *first = NULL, *last = NULL;
        cpumask_t covered = CPU_MASK_NONE;
@@ -4864,12 +4865,85 @@ void init_sched_build_groups(struct sched_group groups[],
        last->next = first;
 }
 
+#define SD_NODES_PER_DOMAIN 16
 
-#ifdef ARCH_HAS_SCHED_DOMAIN
-extern void build_sched_domains(const cpumask_t *cpu_map);
-extern void arch_init_sched_domains(const cpumask_t *cpu_map);
-extern void arch_destroy_sched_domains(const cpumask_t *cpu_map);
-#else
+#ifdef CONFIG_NUMA
+/**
+ * find_next_best_node - find the next node to include in a sched_domain
+ * @node: node whose sched_domain we're building
+ * @used_nodes: nodes already in the sched_domain
+ *
+ * Find the next node to include in a given scheduling domain.  Simply
+ * finds the closest node not already in the @used_nodes map.
+ *
+ * Should use nodemask_t.
+ */
+static int find_next_best_node(int node, unsigned long *used_nodes)
+{
+       int i, n, val, min_val, best_node = 0;
+
+       min_val = INT_MAX;
+
+       for (i = 0; i < MAX_NUMNODES; i++) {
+               /* Start at @node */
+               n = (node + i) % MAX_NUMNODES;
+
+               if (!nr_cpus_node(n))
+                       continue;
+
+               /* Skip already used nodes */
+               if (test_bit(n, used_nodes))
+                       continue;
+
+               /* Simple min distance search */
+               val = node_distance(node, n);
+
+               if (val < min_val) {
+                       min_val = val;
+                       best_node = n;
+               }
+       }
+
+       set_bit(best_node, used_nodes);
+       return best_node;
+}
+
+/**
+ * sched_domain_node_span - get a cpumask for a node's sched_domain
+ * @node: node whose cpumask we're constructing
+ * @size: number of nodes to include in this span
+ *
+ * Given a node, construct a good cpumask for its sched_domain to span.  It
+ * should be one that prevents unnecessary balancing, but also spreads tasks
+ * out optimally.
+ */
+static cpumask_t sched_domain_node_span(int node)
+{
+       int i;
+       cpumask_t span, nodemask;
+       DECLARE_BITMAP(used_nodes, MAX_NUMNODES);
+
+       cpus_clear(span);
+       bitmap_zero(used_nodes, MAX_NUMNODES);
+
+       nodemask = node_to_cpumask(node);
+       cpus_or(span, span, nodemask);
+       set_bit(node, used_nodes);
+
+       for (i = 1; i < SD_NODES_PER_DOMAIN; i++) {
+               int next_node = find_next_best_node(node, used_nodes);
+               nodemask = node_to_cpumask(next_node);
+               cpus_or(span, span, nodemask);
+       }
+
+       return span;
+}
+#endif
+
+/*
+ * At the moment, CONFIG_SCHED_SMT is never defined, but leave it in so we
+ * can switch it on easily if needed.
+ */
 #ifdef CONFIG_SCHED_SMT
 static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
 static struct sched_group sched_group_cpus[NR_CPUS];
@@ -4891,36 +4965,20 @@ static int cpu_to_phys_group(int cpu)
 }
 
 #ifdef CONFIG_NUMA
-
-static DEFINE_PER_CPU(struct sched_domain, node_domains);
-static struct sched_group sched_group_nodes[MAX_NUMNODES];
-static int cpu_to_node_group(int cpu)
-{
-       return cpu_to_node(cpu);
-}
-#endif
-
-#if defined(CONFIG_SCHED_SMT) && defined(CONFIG_NUMA)
 /*
- * The domains setup code relies on siblings not spanning
- * multiple nodes. Make sure the architecture has a proper
- * siblings map:
+ * The init_sched_build_groups can't handle what we want to do with node
+ * groups, so roll our own. Now each node has its own list of groups which
+ * gets dynamically allocated.
  */
-static void check_sibling_maps(void)
-{
-       int i, j;
+static DEFINE_PER_CPU(struct sched_domain, node_domains);
+static struct sched_group **sched_group_nodes_bycpu[NR_CPUS];
 
-       for_each_online_cpu(i) {
-               for_each_cpu_mask(j, cpu_sibling_map[i]) {
-                       if (cpu_to_node(i) != cpu_to_node(j)) {
-                               printk(KERN_INFO "warning: CPU %d siblings map "
-                                       "to different node - isolating "
-                                       "them.\n", i);
-                               cpu_sibling_map[i] = cpumask_of_cpu(i);
-                               break;
-                       }
-               }
-       }
+static DEFINE_PER_CPU(struct sched_domain, allnodes_domains);
+static struct sched_group *sched_group_allnodes_bycpu[NR_CPUS];
+
+static int cpu_to_allnodes_group(int cpu)
+{
+       return cpu_to_node(cpu);
 }
 #endif
 
@@ -4928,9 +4986,24 @@ static void check_sibling_maps(void)
  * Build sched domains for a given set of cpus and attach the sched domains
  * to the individual cpus
  */
-static void build_sched_domains(const cpumask_t *cpu_map)
+void build_sched_domains(const cpumask_t *cpu_map)
 {
        int i;
+#ifdef CONFIG_NUMA
+       struct sched_group **sched_group_nodes = NULL;
+       struct sched_group *sched_group_allnodes = NULL;
+
+       /*
+        * Allocate the per-node list of sched groups
+        */
+       sched_group_nodes = kmalloc(sizeof(struct sched_group*)*MAX_NUMNODES,
+                                          GFP_ATOMIC);
+       if (!sched_group_nodes) {
+               printk(KERN_WARNING "Can not alloc sched group node list\n");
+               return;
+       }
+       sched_group_nodes_bycpu[first_cpu(*cpu_map)] = sched_group_nodes;
+#endif
 
        /*
         * Set up domains for cpus specified by the cpu_map.
@@ -4943,11 +5016,35 @@ static void build_sched_domains(const cpumask_t *cpu_map)
                cpus_and(nodemask, nodemask, *cpu_map);
 
 #ifdef CONFIG_NUMA
+               if (cpus_weight(*cpu_map)
+                               > SD_NODES_PER_DOMAIN*cpus_weight(nodemask)) {
+                       if (!sched_group_allnodes) {
+                               sched_group_allnodes
+                                       = kmalloc(sizeof(struct sched_group)
+                                                       * MAX_NUMNODES,
+                                                 GFP_KERNEL);
+                               if (!sched_group_allnodes) {
+                                       printk(KERN_WARNING
+                                       "Can not alloc allnodes sched group\n");
+                                       break;
+                               }
+                               sched_group_allnodes_bycpu[i]
+                                               = sched_group_allnodes;
+                       }
+                       sd = &per_cpu(allnodes_domains, i);
+                       *sd = SD_ALLNODES_INIT;
+                       sd->span = *cpu_map;
+                       group = cpu_to_allnodes_group(i);
+                       sd->groups = &sched_group_allnodes[group];
+                       p = sd;
+               } else
+                       p = NULL;
+
                sd = &per_cpu(node_domains, i);
-               group = cpu_to_node_group(i);
                *sd = SD_NODE_INIT;
-               sd->span = *cpu_map;
-               sd->groups = &sched_group_nodes[group];
+               sd->span = sched_domain_node_span(cpu_to_node(i));
+               sd->parent = p;
+               cpus_and(sd->span, sd->span, *cpu_map);
 #endif
 
                p = sd;
@@ -4972,7 +5069,7 @@ static void build_sched_domains(const cpumask_t *cpu_map)
 
 #ifdef CONFIG_SCHED_SMT
        /* Set up CPU (sibling) groups */
-       for_each_online_cpu(i) {
+       for_each_cpu_mask(i, *cpu_map) {
                cpumask_t this_sibling_map = cpu_sibling_map[i];
                cpus_and(this_sibling_map, this_sibling_map, *cpu_map);
                if (i != first_cpu(this_sibling_map))
@@ -4997,8 +5094,77 @@ static void build_sched_domains(const cpumask_t *cpu_map)
 
 #ifdef CONFIG_NUMA
        /* Set up node groups */
-       init_sched_build_groups(sched_group_nodes, *cpu_map,
-                                       &cpu_to_node_group);
+       if (sched_group_allnodes)
+               init_sched_build_groups(sched_group_allnodes, *cpu_map,
+                                       &cpu_to_allnodes_group);
+
+       for (i = 0; i < MAX_NUMNODES; i++) {
+               /* Set up node groups */
+               struct sched_group *sg, *prev;
+               cpumask_t nodemask = node_to_cpumask(i);
+               cpumask_t domainspan;
+               cpumask_t covered = CPU_MASK_NONE;
+               int j;
+
+               cpus_and(nodemask, nodemask, *cpu_map);
+               if (cpus_empty(nodemask)) {
+                       sched_group_nodes[i] = NULL;
+                       continue;
+               }
+
+               domainspan = sched_domain_node_span(i);
+               cpus_and(domainspan, domainspan, *cpu_map);
+
+               sg = kmalloc(sizeof(struct sched_group), GFP_KERNEL);
+               sched_group_nodes[i] = sg;
+               for_each_cpu_mask(j, nodemask) {
+                       struct sched_domain *sd;
+                       sd = &per_cpu(node_domains, j);
+                       sd->groups = sg;
+                       if (sd->groups == NULL) {
+                               /* Turn off balancing if we have no groups */
+                               sd->flags = 0;
+                       }
+               }
+               if (!sg) {
+                       printk(KERN_WARNING
+                       "Can not alloc domain group for node %d\n", i);
+                       continue;
+               }
+               sg->cpu_power = 0;
+               sg->cpumask = nodemask;
+               cpus_or(covered, covered, nodemask);
+               prev = sg;
+
+               for (j = 0; j < MAX_NUMNODES; j++) {
+                       cpumask_t tmp, notcovered;
+                       int n = (i + j) % MAX_NUMNODES;
+
+                       cpus_complement(notcovered, covered);
+                       cpus_and(tmp, notcovered, *cpu_map);
+                       cpus_and(tmp, tmp, domainspan);
+                       if (cpus_empty(tmp))
+                               break;
+
+                       nodemask = node_to_cpumask(n);
+                       cpus_and(tmp, tmp, nodemask);
+                       if (cpus_empty(tmp))
+                               continue;
+
+                       sg = kmalloc(sizeof(struct sched_group), GFP_KERNEL);
+                       if (!sg) {
+                               printk(KERN_WARNING
+                               "Can not alloc domain group for node %d\n", j);
+                               break;
+                       }
+                       sg->cpu_power = 0;
+                       sg->cpumask = tmp;
+                       cpus_or(covered, covered, tmp);
+                       prev->next = sg;
+                       prev = sg;
+               }
+               prev->next = sched_group_nodes[i];
+       }
 #endif
 
        /* Calculate CPU power for physical packages and nodes */
@@ -5017,14 +5183,46 @@ static void build_sched_domains(const cpumask_t *cpu_map)
                sd->groups->cpu_power = power;
 
 #ifdef CONFIG_NUMA
-               if (i == first_cpu(sd->groups->cpumask)) {
-                       /* Only add "power" once for each physical package. */
-                       sd = &per_cpu(node_domains, i);
-                       sd->groups->cpu_power += power;
+               sd = &per_cpu(allnodes_domains, i);
+               if (sd->groups) {
+                       power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE *
+                               (cpus_weight(sd->groups->cpumask)-1) / 10;
+                       sd->groups->cpu_power = power;
                }
 #endif
        }
 
+#ifdef CONFIG_NUMA
+       for (i = 0; i < MAX_NUMNODES; i++) {
+               struct sched_group *sg = sched_group_nodes[i];
+               int j;
+
+               if (sg == NULL)
+                       continue;
+next_sg:
+               for_each_cpu_mask(j, sg->cpumask) {
+                       struct sched_domain *sd;
+                       int power;
+
+                       sd = &per_cpu(phys_domains, j);
+                       if (j != first_cpu(sd->groups->cpumask)) {
+                               /*
+                                * Only add "power" once for each
+                                * physical package.
+                                */
+                               continue;
+                       }
+                       power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE *
+                               (cpus_weight(sd->groups->cpumask)-1) / 10;
+
+                       sg->cpu_power += power;
+               }
+               sg = sg->next;
+               if (sg != sched_group_nodes[i])
+                       goto next_sg;
+       }
+#endif
+
        /* Attach the domains */
        for_each_cpu_mask(i, *cpu_map) {
                struct sched_domain *sd;
@@ -5039,13 +5237,10 @@ static void build_sched_domains(const cpumask_t *cpu_map)
 /*
  * Set up scheduler domains and groups.  Callers must hold the hotplug lock.
  */
-static void arch_init_sched_domains(cpumask_t *cpu_map)
+static void arch_init_sched_domains(const cpumask_t *cpu_map)
 {
        cpumask_t cpu_default_map;
 
-#if defined(CONFIG_SCHED_SMT) && defined(CONFIG_NUMA)
-       check_sibling_maps();
-#endif
        /*
         * Setup mask for cpus without special case scheduling requirements.
         * For now this just excludes isolated cpus, but could be used to
@@ -5058,10 +5253,47 @@ static void arch_init_sched_domains(cpumask_t *cpu_map)
 
 static void arch_destroy_sched_domains(const cpumask_t *cpu_map)
 {
-       /* Do nothing: everything is statically allocated. */
-}
+#ifdef CONFIG_NUMA
+       int i;
+       int cpu;
+
+       for_each_cpu_mask(cpu, *cpu_map) {
+               struct sched_group *sched_group_allnodes
+                       = sched_group_allnodes_bycpu[cpu];
+               struct sched_group **sched_group_nodes
+                       = sched_group_nodes_bycpu[cpu];
+
+               if (sched_group_allnodes) {
+                       kfree(sched_group_allnodes);
+                       sched_group_allnodes_bycpu[cpu] = NULL;
+               }
+
+               if (!sched_group_nodes)
+                       continue;
+
+               for (i = 0; i < MAX_NUMNODES; i++) {
+                       cpumask_t nodemask = node_to_cpumask(i);
+                       struct sched_group *oldsg, *sg = sched_group_nodes[i];
 
-#endif /* ARCH_HAS_SCHED_DOMAIN */
+                       cpus_and(nodemask, nodemask, *cpu_map);
+                       if (cpus_empty(nodemask))
+                               continue;
+
+                       if (sg == NULL)
+                               continue;
+                       sg = sg->next;
+next_sg:
+                       oldsg = sg;
+                       sg = sg->next;
+                       kfree(oldsg);
+                       if (oldsg != sched_group_nodes[i])
+                               goto next_sg;
+               }
+               kfree(sched_group_nodes);
+               sched_group_nodes_bycpu[cpu] = NULL;
+       }
+#endif
+}
 
 /*
  * Detach sched domains from a group of cpus specified in cpu_map
index d282fea8113815c441417f91c8c0a5374879a4a3..4980a073237ff45ed28c39b38225c40923da0848 100644 (file)
@@ -678,7 +678,7 @@ static int check_kill_permission(int sig, struct siginfo *info,
 
 /* forward decl */
 static void do_notify_parent_cldstop(struct task_struct *tsk,
-                                    struct task_struct *parent,
+                                    int to_self,
                                     int why);
 
 /*
@@ -729,14 +729,7 @@ static void handle_stop_signal(int sig, struct task_struct *p)
                        p->signal->group_stop_count = 0;
                        p->signal->flags = SIGNAL_STOP_CONTINUED;
                        spin_unlock(&p->sighand->siglock);
-                       if (p->ptrace & PT_PTRACED)
-                               do_notify_parent_cldstop(p, p->parent,
-                                                        CLD_STOPPED);
-                       else
-                               do_notify_parent_cldstop(
-                                       p->group_leader,
-                                       p->group_leader->real_parent,
-                                                        CLD_STOPPED);
+                       do_notify_parent_cldstop(p, (p->ptrace & PT_PTRACED), CLD_STOPPED);
                        spin_lock(&p->sighand->siglock);
                }
                rm_from_queue(SIG_KERNEL_STOP_MASK, &p->signal->shared_pending);
@@ -777,14 +770,7 @@ static void handle_stop_signal(int sig, struct task_struct *p)
                        p->signal->flags = SIGNAL_STOP_CONTINUED;
                        p->signal->group_exit_code = 0;
                        spin_unlock(&p->sighand->siglock);
-                       if (p->ptrace & PT_PTRACED)
-                               do_notify_parent_cldstop(p, p->parent,
-                                                        CLD_CONTINUED);
-                       else
-                               do_notify_parent_cldstop(
-                                       p->group_leader,
-                                       p->group_leader->real_parent,
-                                                        CLD_CONTINUED);
+                       do_notify_parent_cldstop(p, (p->ptrace & PT_PTRACED), CLD_CONTINUED);
                        spin_lock(&p->sighand->siglock);
                } else {
                        /*
@@ -1380,16 +1366,16 @@ send_sigqueue(int sig, struct sigqueue *q, struct task_struct *p)
        unsigned long flags;
        int ret = 0;
 
-       /*
-        * We need the tasklist lock even for the specific
-        * thread case (when we don't need to follow the group
-        * lists) in order to avoid races with "p->sighand"
-        * going away or changing from under us.
-        */
        BUG_ON(!(q->flags & SIGQUEUE_PREALLOC));
-       read_lock(&tasklist_lock);  
+       read_lock(&tasklist_lock);
+
+       if (unlikely(p->flags & PF_EXITING)) {
+               ret = -1;
+               goto out_err;
+       }
+
        spin_lock_irqsave(&p->sighand->siglock, flags);
-       
+
        if (unlikely(!list_empty(&q->list))) {
                /*
                 * If an SI_TIMER entry is already queue just increment
@@ -1399,7 +1385,7 @@ send_sigqueue(int sig, struct sigqueue *q, struct task_struct *p)
                        BUG();
                q->info.si_overrun++;
                goto out;
-       } 
+       }
        /* Short-circuit ignored signals.  */
        if (sig_ignored(p, sig)) {
                ret = 1;
@@ -1414,8 +1400,10 @@ send_sigqueue(int sig, struct sigqueue *q, struct task_struct *p)
 
 out:
        spin_unlock_irqrestore(&p->sighand->siglock, flags);
+out_err:
        read_unlock(&tasklist_lock);
-       return(ret);
+
+       return ret;
 }
 
 int
@@ -1542,14 +1530,20 @@ void do_notify_parent(struct task_struct *tsk, int sig)
        spin_unlock_irqrestore(&psig->siglock, flags);
 }
 
-static void
-do_notify_parent_cldstop(struct task_struct *tsk, struct task_struct *parent,
-                        int why)
+static void do_notify_parent_cldstop(struct task_struct *tsk, int to_self, int why)
 {
        struct siginfo info;
        unsigned long flags;
+       struct task_struct *parent;
        struct sighand_struct *sighand;
 
+       if (to_self)
+               parent = tsk->parent;
+       else {
+               tsk = tsk->group_leader;
+               parent = tsk->real_parent;
+       }
+
        info.si_signo = SIGCHLD;
        info.si_errno = 0;
        info.si_pid = tsk->pid;
@@ -1618,8 +1612,7 @@ static void ptrace_stop(int exit_code, int nostop_code, siginfo_t *info)
                   !(current->ptrace & PT_ATTACHED)) &&
            (likely(current->parent->signal != current->signal) ||
             !unlikely(current->signal->flags & SIGNAL_GROUP_EXIT))) {
-               do_notify_parent_cldstop(current, current->parent,
-                                        CLD_TRAPPED);
+               do_notify_parent_cldstop(current, 1, CLD_TRAPPED);
                read_unlock(&tasklist_lock);
                schedule();
        } else {
@@ -1668,25 +1661,25 @@ void ptrace_notify(int exit_code)
 static void
 finish_stop(int stop_count)
 {
+       int to_self;
+
        /*
         * If there are no other threads in the group, or if there is
         * a group stop in progress and we are the last to stop,
         * report to the parent.  When ptraced, every thread reports itself.
         */
-       if (stop_count < 0 || (current->ptrace & PT_PTRACED)) {
-               read_lock(&tasklist_lock);
-               do_notify_parent_cldstop(current, current->parent,
-                                        CLD_STOPPED);
-               read_unlock(&tasklist_lock);
-       }
-       else if (stop_count == 0) {
-               read_lock(&tasklist_lock);
-               do_notify_parent_cldstop(current->group_leader,
-                                        current->group_leader->real_parent,
-                                        CLD_STOPPED);
-               read_unlock(&tasklist_lock);
-       }
+       if (stop_count < 0 || (current->ptrace & PT_PTRACED))
+               to_self = 1;
+       else if (stop_count == 0)
+               to_self = 0;
+       else
+               goto out;
 
+       read_lock(&tasklist_lock);
+       do_notify_parent_cldstop(current, to_self, CLD_STOPPED);
+       read_unlock(&tasklist_lock);
+
+out:
        schedule();
        /*
         * Now we don't run again until continued.
diff --git a/kernel/softlockup.c b/kernel/softlockup.c
new file mode 100644 (file)
index 0000000..7597620
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * Detect Soft Lockups
+ *
+ * started by Ingo Molnar, (C) 2005, Red Hat
+ *
+ * this code detects soft lockups: incidents in where on a CPU
+ * the kernel does not reschedule for 10 seconds or more.
+ */
+
+#include <linux/mm.h>
+#include <linux/cpu.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/kthread.h>
+#include <linux/notifier.h>
+#include <linux/module.h>
+
+static DEFINE_SPINLOCK(print_lock);
+
+static DEFINE_PER_CPU(unsigned long, timestamp) = 0;
+static DEFINE_PER_CPU(unsigned long, print_timestamp) = 0;
+static DEFINE_PER_CPU(struct task_struct *, watchdog_task);
+
+static int did_panic = 0;
+static int softlock_panic(struct notifier_block *this, unsigned long event,
+                               void *ptr)
+{
+       did_panic = 1;
+
+       return NOTIFY_DONE;
+}
+
+static struct notifier_block panic_block = {
+       .notifier_call = softlock_panic,
+};
+
+void touch_softlockup_watchdog(void)
+{
+       per_cpu(timestamp, raw_smp_processor_id()) = jiffies;
+}
+EXPORT_SYMBOL(touch_softlockup_watchdog);
+
+/*
+ * This callback runs from the timer interrupt, and checks
+ * whether the watchdog thread has hung or not:
+ */
+void softlockup_tick(struct pt_regs *regs)
+{
+       int this_cpu = smp_processor_id();
+       unsigned long timestamp = per_cpu(timestamp, this_cpu);
+
+       if (per_cpu(print_timestamp, this_cpu) == timestamp)
+               return;
+
+       /* Do not cause a second panic when there already was one */
+       if (did_panic)
+               return;
+
+       if (time_after(jiffies, timestamp + 10*HZ)) {
+               per_cpu(print_timestamp, this_cpu) = timestamp;
+
+               spin_lock(&print_lock);
+               printk(KERN_ERR "BUG: soft lockup detected on CPU#%d!\n",
+                       this_cpu);
+               show_regs(regs);
+               spin_unlock(&print_lock);
+       }
+}
+
+/*
+ * The watchdog thread - runs every second and touches the timestamp.
+ */
+static int watchdog(void * __bind_cpu)
+{
+       struct sched_param param = { .sched_priority = 99 };
+       int this_cpu = (long) __bind_cpu;
+
+       printk("softlockup thread %d started up.\n", this_cpu);
+
+       sched_setscheduler(current, SCHED_FIFO, &param);
+       current->flags |= PF_NOFREEZE;
+
+       set_current_state(TASK_INTERRUPTIBLE);
+
+       /*
+        * Run briefly once per second - if this gets delayed for
+        * more than 10 seconds then the debug-printout triggers
+        * in softlockup_tick():
+        */
+       while (!kthread_should_stop()) {
+               msleep_interruptible(1000);
+               touch_softlockup_watchdog();
+       }
+       __set_current_state(TASK_RUNNING);
+
+       return 0;
+}
+
+/*
+ * Create/destroy watchdog threads as CPUs come and go:
+ */
+static int __devinit
+cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu)
+{
+       int hotcpu = (unsigned long)hcpu;
+       struct task_struct *p;
+
+       switch (action) {
+       case CPU_UP_PREPARE:
+               BUG_ON(per_cpu(watchdog_task, hotcpu));
+               p = kthread_create(watchdog, hcpu, "watchdog/%d", hotcpu);
+               if (IS_ERR(p)) {
+                       printk("watchdog for %i failed\n", hotcpu);
+                       return NOTIFY_BAD;
+               }
+               per_cpu(watchdog_task, hotcpu) = p;
+               kthread_bind(p, hotcpu);
+               break;
+       case CPU_ONLINE:
+
+               wake_up_process(per_cpu(watchdog_task, hotcpu));
+               break;
+#ifdef CONFIG_HOTPLUG_CPU
+       case CPU_UP_CANCELED:
+               /* Unbind so it can run.  Fall thru. */
+               kthread_bind(per_cpu(watchdog_task, hotcpu), smp_processor_id());
+       case CPU_DEAD:
+               p = per_cpu(watchdog_task, hotcpu);
+               per_cpu(watchdog_task, hotcpu) = NULL;
+               kthread_stop(p);
+               break;
+#endif /* CONFIG_HOTPLUG_CPU */
+       }
+       return NOTIFY_OK;
+}
+
+static struct notifier_block __devinitdata cpu_nfb = {
+       .notifier_call = cpu_callback
+};
+
+__init void spawn_softlockup_task(void)
+{
+       void *cpu = (void *)(long)smp_processor_id();
+
+       cpu_callback(&cpu_nfb, CPU_UP_PREPARE, cpu);
+       cpu_callback(&cpu_nfb, CPU_ONLINE, cpu);
+       register_cpu_notifier(&cpu_nfb);
+
+       notifier_chain_register(&panic_notifier_list, &panic_block);
+}
+
index 0bcaed6560ac19f72ab308b2fe92839238e9ba70..c80412be2302c6321898b57ef3a99d10a1c21a68 100644 (file)
@@ -1711,7 +1711,6 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
                          unsigned long arg4, unsigned long arg5)
 {
        long error;
-       int sig;
 
        error = security_task_prctl(option, arg2, arg3, arg4, arg5);
        if (error)
@@ -1719,12 +1718,11 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
 
        switch (option) {
                case PR_SET_PDEATHSIG:
-                       sig = arg2;
-                       if (!valid_signal(sig)) {
+                       if (!valid_signal(arg2)) {
                                error = -EINVAL;
                                break;
                        }
-                       current->pdeath_signal = sig;
+                       current->pdeath_signal = arg2;
                        break;
                case PR_GET_PDEATHSIG:
                        error = put_user(current->pdeath_signal, (int __user *)arg2);
index 5377f40723ff0dc37f13897847ea040f8c317292..13e2b513be019bf0b8b6b9218e4f268fff95f58a 100644 (file)
@@ -950,6 +950,7 @@ void do_timer(struct pt_regs *regs)
 {
        jiffies_64++;
        update_times();
+       softlockup_tick(regs);
 }
 
 #ifdef __ARCH_WANT_SYS_ALARM
@@ -1428,7 +1429,7 @@ static inline u64 time_interpolator_get_cycles(unsigned int src)
        }
 }
 
-static inline u64 time_interpolator_get_counter(void)
+static inline u64 time_interpolator_get_counter(int writelock)
 {
        unsigned int src = time_interpolator->source;
 
@@ -1442,6 +1443,15 @@ static inline u64 time_interpolator_get_counter(void)
                        now = time_interpolator_get_cycles(src);
                        if (lcycle && time_after(lcycle, now))
                                return lcycle;
+
+                       /* When holding the xtime write lock, there's no need
+                        * to add the overhead of the cmpxchg.  Readers are
+                        * force to retry until the write lock is released.
+                        */
+                       if (writelock) {
+                               time_interpolator->last_cycle = now;
+                               return now;
+                       }
                        /* Keep track of the last timer value returned. The use of cmpxchg here
                         * will cause contention in an SMP environment.
                         */
@@ -1455,7 +1465,7 @@ static inline u64 time_interpolator_get_counter(void)
 void time_interpolator_reset(void)
 {
        time_interpolator->offset = 0;
-       time_interpolator->last_counter = time_interpolator_get_counter();
+       time_interpolator->last_counter = time_interpolator_get_counter(1);
 }
 
 #define GET_TI_NSECS(count,i) (((((count) - i->last_counter) & (i)->mask) * (i)->nsec_per_cyc) >> (i)->shift)
@@ -1467,7 +1477,7 @@ unsigned long time_interpolator_get_offset(void)
                return 0;
 
        return time_interpolator->offset +
-               GET_TI_NSECS(time_interpolator_get_counter(), time_interpolator);
+               GET_TI_NSECS(time_interpolator_get_counter(0), time_interpolator);
 }
 
 #define INTERPOLATOR_ADJUST 65536
@@ -1490,7 +1500,7 @@ static void time_interpolator_update(long delta_nsec)
         * and the tuning logic insures that.
          */
 
-       counter = time_interpolator_get_counter();
+       counter = time_interpolator_get_counter(1);
        offset = time_interpolator->offset + GET_TI_NSECS(counter, time_interpolator);
 
        if (delta_nsec < 0 || (unsigned long) delta_nsec < offset)
index c7e36d4a70cabdb9711640575e68ac86d68a7da1..91bacb13a7e2fec56f5067f12e0b97c1043c30b7 100644 (file)
@@ -308,10 +308,9 @@ struct workqueue_struct *__create_workqueue(const char *name,
        struct workqueue_struct *wq;
        struct task_struct *p;
 
-       wq = kmalloc(sizeof(*wq), GFP_KERNEL);
+       wq = kzalloc(sizeof(*wq), GFP_KERNEL);
        if (!wq)
                return NULL;
-       memset(wq, 0, sizeof(*wq));
 
        wq->name = name;
        /* We don't need the distraction of CPUs appearing and vanishing. */
@@ -499,7 +498,7 @@ static int __devinit workqueue_cpu_callback(struct notifier_block *nfb,
        case CPU_UP_PREPARE:
                /* Create a new workqueue thread for it. */
                list_for_each_entry(wq, &workqueues, list) {
-                       if (create_workqueue_thread(wq, hotcpu) < 0) {
+                       if (!create_workqueue_thread(wq, hotcpu)) {
                                printk("workqueue for %i failed\n", hotcpu);
                                return NOTIFY_BAD;
                        }
index 299f7f3b5b0871fdd332a647f83ea54d2ddf059b..3754c9a8f5c8e1e3fccebf2d0f282fd5eda6bcb4 100644 (file)
@@ -46,6 +46,25 @@ config LOG_BUF_SHIFT
                     13 =>  8 KB
                     12 =>  4 KB
 
+config DETECT_SOFTLOCKUP
+       bool "Detect Soft Lockups"
+       depends on DEBUG_KERNEL
+       default y
+       help
+         Say Y here to enable the kernel to detect "soft lockups",
+         which are bugs that cause the kernel to loop in kernel
+         mode for more than 10 seconds, without giving other tasks a
+         chance to run.
+
+         When a soft-lockup is detected, the kernel will print the
+         current stack trace (which you should report), but the
+         system will stay locked up. This feature has negligible
+         overhead.
+
+         (Note that "hard lockups" are separate type of bugs that
+          can be detected via the NMI-watchdog, on platforms that
+          support it.)
+
 config SCHEDSTATS
        bool "Collect scheduler statistics"
        depends on DEBUG_KERNEL && PROC_FS
index a70c836c5c4c2617f6929407034a8706b57c4886..bb2f3551d50a7d22dd7d787a27deb2b95e51e7fb 100644 (file)
 /**
  *     klist_init - Initialize a klist structure. 
  *     @k:     The klist we're initializing.
+ *     @get:   The get function for the embedding object (NULL if none)
+ *     @put:   The put function for the embedding object (NULL if none)
+ *
+ * Initialises the klist structure.  If the klist_node structures are
+ * going to be embedded in refcounted objects (necessary for safe
+ * deletion) then the get/put arguments are used to initialise
+ * functions that take and release references on the embedding
+ * objects.
  */
 
-void klist_init(struct klist * k)
+void klist_init(struct klist * k, void (*get)(struct klist_node *),
+               void (*put)(struct klist_node *))
 {
        INIT_LIST_HEAD(&k->k_list);
        spin_lock_init(&k->k_lock);
+       k->get = get;
+       k->put = put;
 }
 
 EXPORT_SYMBOL_GPL(klist_init);
@@ -74,6 +85,8 @@ static void klist_node_init(struct klist * k, struct klist_node * n)
        init_completion(&n->n_removed);
        kref_init(&n->n_ref);
        n->n_klist = k;
+       if (k->get)
+               k->get(n);
 }
 
 
@@ -110,9 +123,12 @@ EXPORT_SYMBOL_GPL(klist_add_tail);
 static void klist_release(struct kref * kref)
 {
        struct klist_node * n = container_of(kref, struct klist_node, n_ref);
+       void (*put)(struct klist_node *) = n->n_klist->put;
        list_del(&n->n_node);
        complete(&n->n_removed);
        n->n_klist = NULL;
+       if (put)
+               put(n);
 }
 
 static int klist_dec_and_del(struct klist_node * n)
index 10bed1c8c3c3012b861a055eaaf095af7906e8e5..b972dd29289d6669fd353dcd2b3118cd93ab87cb 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2001 Momchil Velikov
  * Portions Copyright (C) 2001 Christoph Hellwig
+ * Copyright (C) 2005 SGI, Christoph Lameter <clameter@sgi.com>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -51,7 +52,7 @@ struct radix_tree_node {
 };
 
 struct radix_tree_path {
-       struct radix_tree_node *node, **slot;
+       struct radix_tree_node *node;
        int offset;
 };
 
@@ -227,7 +228,7 @@ out:
 int radix_tree_insert(struct radix_tree_root *root,
                        unsigned long index, void *item)
 {
-       struct radix_tree_node *node = NULL, *tmp, **slot;
+       struct radix_tree_node *node = NULL, *slot;
        unsigned int height, shift;
        int offset;
        int error;
@@ -240,38 +241,42 @@ int radix_tree_insert(struct radix_tree_root *root,
                        return error;
        }
 
-       slot = &root->rnode;
+       slot = root->rnode;
        height = root->height;
        shift = (height-1) * RADIX_TREE_MAP_SHIFT;
 
        offset = 0;                     /* uninitialised var warning */
        while (height > 0) {
-               if (*slot == NULL) {
+               if (slot == NULL) {
                        /* Have to add a child node.  */
-                       if (!(tmp = radix_tree_node_alloc(root)))
+                       if (!(slot = radix_tree_node_alloc(root)))
                                return -ENOMEM;
-                       *slot = tmp;
-                       if (node)
+                       if (node) {
+                               node->slots[offset] = slot;
                                node->count++;
+                       } else
+                               root->rnode = slot;
                }
 
                /* Go a level down */
                offset = (index >> shift) & RADIX_TREE_MAP_MASK;
-               node = *slot;
-               slot = (struct radix_tree_node **)(node->slots + offset);
+               node = slot;
+               slot = node->slots[offset];
                shift -= RADIX_TREE_MAP_SHIFT;
                height--;
        }
 
-       if (*slot != NULL)
+       if (slot != NULL)
                return -EEXIST;
+
        if (node) {
                node->count++;
+               node->slots[offset] = item;
                BUG_ON(tag_get(node, 0, offset));
                BUG_ON(tag_get(node, 1, offset));
-       }
+       } else
+               root->rnode = item;
 
-       *slot = item;
        return 0;
 }
 EXPORT_SYMBOL(radix_tree_insert);
@@ -286,27 +291,25 @@ EXPORT_SYMBOL(radix_tree_insert);
 void *radix_tree_lookup(struct radix_tree_root *root, unsigned long index)
 {
        unsigned int height, shift;
-       struct radix_tree_node **slot;
+       struct radix_tree_node *slot;
 
        height = root->height;
        if (index > radix_tree_maxindex(height))
                return NULL;
 
        shift = (height-1) * RADIX_TREE_MAP_SHIFT;
-       slot = &root->rnode;
+       slot = root->rnode;
 
        while (height > 0) {
-               if (*slot == NULL)
+               if (slot == NULL)
                        return NULL;
 
-               slot = (struct radix_tree_node **)
-                       ((*slot)->slots +
-                               ((index >> shift) & RADIX_TREE_MAP_MASK));
+               slot = slot->slots[(index >> shift) & RADIX_TREE_MAP_MASK];
                shift -= RADIX_TREE_MAP_SHIFT;
                height--;
        }
 
-       return *slot;
+       return slot;
 }
 EXPORT_SYMBOL(radix_tree_lookup);
 
@@ -326,27 +329,27 @@ void *radix_tree_tag_set(struct radix_tree_root *root,
                        unsigned long index, int tag)
 {
        unsigned int height, shift;
-       struct radix_tree_node **slot;
+       struct radix_tree_node *slot;
 
        height = root->height;
        if (index > radix_tree_maxindex(height))
                return NULL;
 
        shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
-       slot = &root->rnode;
+       slot = root->rnode;
 
        while (height > 0) {
                int offset;
 
                offset = (index >> shift) & RADIX_TREE_MAP_MASK;
-               tag_set(*slot, tag, offset);
-               slot = (struct radix_tree_node **)((*slot)->slots + offset);
-               BUG_ON(*slot == NULL);
+               tag_set(slot, tag, offset);
+               slot = slot->slots[offset];
+               BUG_ON(slot == NULL);
                shift -= RADIX_TREE_MAP_SHIFT;
                height--;
        }
 
-       return *slot;
+       return slot;
 }
 EXPORT_SYMBOL(radix_tree_tag_set);
 
@@ -367,6 +370,7 @@ void *radix_tree_tag_clear(struct radix_tree_root *root,
                        unsigned long index, int tag)
 {
        struct radix_tree_path path[RADIX_TREE_MAX_PATH], *pathp = path;
+       struct radix_tree_node *slot;
        unsigned int height, shift;
        void *ret = NULL;
 
@@ -376,38 +380,37 @@ void *radix_tree_tag_clear(struct radix_tree_root *root,
 
        shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
        pathp->node = NULL;
-       pathp->slot = &root->rnode;
+       slot = root->rnode;
 
        while (height > 0) {
                int offset;
 
-               if (*pathp->slot == NULL)
+               if (slot == NULL)
                        goto out;
 
                offset = (index >> shift) & RADIX_TREE_MAP_MASK;
                pathp[1].offset = offset;
-               pathp[1].node = *pathp[0].slot;
-               pathp[1].slot = (struct radix_tree_node **)
-                               (pathp[1].node->slots + offset);
+               pathp[1].node = slot;
+               slot = slot->slots[offset];
                pathp++;
                shift -= RADIX_TREE_MAP_SHIFT;
                height--;
        }
 
-       ret = *pathp[0].slot;
+       ret = slot;
        if (ret == NULL)
                goto out;
 
        do {
                int idx;
 
-               tag_clear(pathp[0].node, tag, pathp[0].offset);
+               tag_clear(pathp->node, tag, pathp->offset);
                for (idx = 0; idx < RADIX_TREE_TAG_LONGS; idx++) {
-                       if (pathp[0].node->tags[tag][idx])
+                       if (pathp->node->tags[tag][idx])
                                goto out;
                }
                pathp--;
-       } while (pathp[0].node);
+       } while (pathp->node);
 out:
        return ret;
 }
@@ -415,21 +418,22 @@ EXPORT_SYMBOL(radix_tree_tag_clear);
 
 #ifndef __KERNEL__     /* Only the test harness uses this at present */
 /**
- *     radix_tree_tag_get - get a tag on a radix tree node
- *     @root:          radix tree root
- *     @index:         index key
- *     @tag:           tag index
+ * radix_tree_tag_get - get a tag on a radix tree node
+ * @root:              radix tree root
+ * @index:             index key
+ * @tag:               tag index
  *
- *     Return the search tag corresponging to @index in the radix tree.
+ * Return values:
  *
- *     Returns zero if the tag is unset, or if there is no corresponding item
- *     in the tree.
+ *  0: tag not present
+ *  1: tag present, set
+ * -1: tag present, unset
  */
 int radix_tree_tag_get(struct radix_tree_root *root,
                        unsigned long index, int tag)
 {
        unsigned int height, shift;
-       struct radix_tree_node **slot;
+       struct radix_tree_node *slot;
        int saw_unset_tag = 0;
 
        height = root->height;
@@ -437,12 +441,12 @@ int radix_tree_tag_get(struct radix_tree_root *root,
                return 0;
 
        shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
-       slot = &root->rnode;
+       slot = root->rnode;
 
        for ( ; ; ) {
                int offset;
 
-               if (*slot == NULL)
+               if (slot == NULL)
                        return 0;
 
                offset = (index >> shift) & RADIX_TREE_MAP_MASK;
@@ -451,15 +455,15 @@ int radix_tree_tag_get(struct radix_tree_root *root,
                 * This is just a debug check.  Later, we can bale as soon as
                 * we see an unset tag.
                 */
-               if (!tag_get(*slot, tag, offset))
+               if (!tag_get(slot, tag, offset))
                        saw_unset_tag = 1;
                if (height == 1) {
-                       int ret = tag_get(*slot, tag, offset);
+                       int ret = tag_get(slot, tag, offset);
 
                        BUG_ON(ret && saw_unset_tag);
-                       return ret;
+                       return ret ? 1 : -1;
                }
-               slot = (struct radix_tree_node **)((*slot)->slots + offset);
+               slot = slot->slots[offset];
                shift -= RADIX_TREE_MAP_SHIFT;
                height--;
        }
@@ -472,17 +476,21 @@ __lookup(struct radix_tree_root *root, void **results, unsigned long index,
        unsigned int max_items, unsigned long *next_index)
 {
        unsigned int nr_found = 0;
-       unsigned int shift;
-       unsigned int height = root->height;
+       unsigned int shift, height;
        struct radix_tree_node *slot;
+       unsigned long i;
+
+       height = root->height;
+       if (height == 0)
+               goto out;
 
        shift = (height-1) * RADIX_TREE_MAP_SHIFT;
        slot = root->rnode;
 
-       while (height > 0) {
-               unsigned long i = (index >> shift) & RADIX_TREE_MAP_MASK;
+       for ( ; height > 1; height--) {
 
-               for ( ; i < RADIX_TREE_MAP_SIZE; i++) {
+               for (i = (index >> shift) & RADIX_TREE_MAP_MASK ;
+                               i < RADIX_TREE_MAP_SIZE; i++) {
                        if (slot->slots[i] != NULL)
                                break;
                        index &= ~((1UL << shift) - 1);
@@ -492,22 +500,20 @@ __lookup(struct radix_tree_root *root, void **results, unsigned long index,
                }
                if (i == RADIX_TREE_MAP_SIZE)
                        goto out;
-               height--;
-               if (height == 0) {      /* Bottom level: grab some items */
-                       unsigned long j = index & RADIX_TREE_MAP_MASK;
 
-                       for ( ; j < RADIX_TREE_MAP_SIZE; j++) {
-                               index++;
-                               if (slot->slots[j]) {
-                                       results[nr_found++] = slot->slots[j];
-                                       if (nr_found == max_items)
-                                               goto out;
-                               }
-                       }
-               }
                shift -= RADIX_TREE_MAP_SHIFT;
                slot = slot->slots[i];
        }
+
+       /* Bottom level: grab some items */
+       for (i = index & RADIX_TREE_MAP_MASK; i < RADIX_TREE_MAP_SIZE; i++) {
+               index++;
+               if (slot->slots[i]) {
+                       results[nr_found++] = slot->slots[i];
+                       if (nr_found == max_items)
+                               goto out;
+               }
+       }
 out:
        *next_index = index;
        return nr_found;
@@ -655,6 +661,7 @@ void *radix_tree_delete(struct radix_tree_root *root, unsigned long index)
 {
        struct radix_tree_path path[RADIX_TREE_MAX_PATH], *pathp = path;
        struct radix_tree_path *orig_pathp;
+       struct radix_tree_node *slot;
        unsigned int height, shift;
        void *ret = NULL;
        char tags[RADIX_TREE_TAGS];
@@ -666,25 +673,23 @@ void *radix_tree_delete(struct radix_tree_root *root, unsigned long index)
 
        shift = (height - 1) * RADIX_TREE_MAP_SHIFT;
        pathp->node = NULL;
-       pathp->slot = &root->rnode;
+       slot = root->rnode;
 
-       while (height > 0) {
+       for ( ; height > 0; height--) {
                int offset;
 
-               if (*pathp->slot == NULL)
+               if (slot == NULL)
                        goto out;
 
                offset = (index >> shift) & RADIX_TREE_MAP_MASK;
                pathp[1].offset = offset;
-               pathp[1].node = *pathp[0].slot;
-               pathp[1].slot = (struct radix_tree_node **)
-                               (pathp[1].node->slots + offset);
+               pathp[1].node = slot;
+               slot = slot->slots[offset];
                pathp++;
                shift -= RADIX_TREE_MAP_SHIFT;
-               height--;
        }
 
-       ret = *pathp[0].slot;
+       ret = slot;
        if (ret == NULL)
                goto out;
 
@@ -704,10 +709,10 @@ void *radix_tree_delete(struct radix_tree_root *root, unsigned long index)
                        if (tags[tag])
                                continue;
 
-                       tag_clear(pathp[0].node, tag, pathp[0].offset);
+                       tag_clear(pathp->node, tag, pathp->offset);
 
                        for (idx = 0; idx < RADIX_TREE_TAG_LONGS; idx++) {
-                               if (pathp[0].node->tags[tag][idx]) {
+                               if (pathp->node->tags[tag][idx]) {
                                        tags[tag] = 1;
                                        nr_cleared_tags--;
                                        break;
@@ -715,18 +720,19 @@ void *radix_tree_delete(struct radix_tree_root *root, unsigned long index)
                        }
                }
                pathp--;
-       } while (pathp[0].node && nr_cleared_tags);
+       } while (pathp->node && nr_cleared_tags);
 
-       pathp = orig_pathp;
-       *pathp[0].slot = NULL;
-       while (pathp[0].node && --pathp[0].node->count == 0) {
-               pathp--;
-               BUG_ON(*pathp[0].slot == NULL);
-               *pathp[0].slot = NULL;
-               radix_tree_node_free(pathp[1].node);
+       /* Now free the nodes we do not need anymore */
+       for (pathp = orig_pathp; pathp->node; pathp--) {
+               pathp->node->slots[pathp->offset] = NULL;
+               if (--pathp->node->count)
+                       goto out;
+
+               /* Node with zero slots in use so free it */
+               radix_tree_node_free(pathp->node);
        }
-       if (root->rnode == NULL)
-               root->height = 0;
+       root->rnode = NULL;
+       root->height = 0;
 out:
        return ret;
 }
index 404319477e71d61679166bc954ed246719affe89..12334aecf8ad3d74b62f93da8db6f529e981d51d 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -61,7 +61,7 @@ pgprot_t protection_map[16] = {
 
 int sysctl_overcommit_memory = OVERCOMMIT_GUESS;  /* heuristic overcommit */
 int sysctl_overcommit_ratio = 50;      /* default is 50% */
-int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT;
+int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT;
 atomic_t vm_committed_space = ATOMIC_INIT(0);
 
 /*
@@ -203,13 +203,6 @@ static void remove_vm_struct(struct vm_area_struct *vma)
        kmem_cache_free(vm_area_cachep, vma);
 }
 
-/*
- *  sys_brk() for the most part doesn't need the global kernel
- *  lock, except when an application is doing something nasty
- *  like trying to un-brk an area that has already been mapped
- *  to a regular file.  in this case, the unmapping will need
- *  to invoke file system routines that need the global lock.
- */
 asmlinkage unsigned long sys_brk(unsigned long brk)
 {
        unsigned long rlim, retval;
index 1e56076672f5870e9766753270d77442e5743ac9..5ec8da12cfd986523bb1968ffa9f2ea0be064868 100644 (file)
@@ -6,8 +6,8 @@
  *     for goading me into coding this file...
  *
  *  The routines in this file are used to kill a process when
- *  we're seriously out of memory. This gets called from kswapd()
- *  in linux/mm/vmscan.c when we really run out of memory.
+ *  we're seriously out of memory. This gets called from __alloc_pages()
+ *  in mm/page_alloc.c when we really run out of memory.
  *
  *  Since we won't call these routines often (on a well-configured
  *  machine) this file will double as a 'coding guide' and a signpost
 #include <linux/swap.h>
 #include <linux/timex.h>
 #include <linux/jiffies.h>
+#include <linux/cpuset.h>
 
 /* #define DEBUG */
 
 /**
  * oom_badness - calculate a numeric value for how bad this task has been
  * @p: task struct of which task we should calculate
- * @p: current uptime in seconds
+ * @uptime: current uptime in seconds
  *
  * The formula used is relatively simple and documented inline in the
  * function. The main rationale is that we want to select a good task
@@ -57,9 +58,9 @@ unsigned long badness(struct task_struct *p, unsigned long uptime)
 
        /*
         * Processes which fork a lot of child processes are likely
-        * a good choice. We add the vmsize of the childs if they
+        * a good choice. We add the vmsize of the children if they
         * have an own mm. This prevents forking servers to flood the
-        * machine with an endless amount of childs
+        * machine with an endless amount of children
         */
        list_for_each(tsk, &p->children) {
                struct task_struct *chld;
@@ -143,28 +144,36 @@ static struct task_struct * select_bad_process(void)
        struct timespec uptime;
 
        do_posix_clock_monotonic_gettime(&uptime);
-       do_each_thread(g, p)
+       do_each_thread(g, p) {
+               unsigned long points;
+               int releasing;
+
                /* skip the init task with pid == 1 */
-               if (p->pid > 1 && p->oomkilladj != OOM_DISABLE) {
-                       unsigned long points;
-
-                       /*
-                        * This is in the process of releasing memory so wait it
-                        * to finish before killing some other task by mistake.
-                        */
-                       if ((unlikely(test_tsk_thread_flag(p, TIF_MEMDIE)) || (p->flags & PF_EXITING)) &&
-                           !(p->flags & PF_DEAD))
-                               return ERR_PTR(-1UL);
-                       if (p->flags & PF_SWAPOFF)
-                               return p;
-
-                       points = badness(p, uptime.tv_sec);
-                       if (points > maxpoints || !chosen) {
-                               chosen = p;
-                               maxpoints = points;
-                       }
+               if (p->pid == 1)
+                       continue;
+               if (p->oomkilladj == OOM_DISABLE)
+                       continue;
+               /* If p's nodes don't overlap ours, it won't help to kill p. */
+               if (!cpuset_excl_nodes_overlap(p))
+                       continue;
+
+               /*
+                * This is in the process of releasing memory so for wait it
+                * to finish before killing some other task by mistake.
+                */
+               releasing = test_tsk_thread_flag(p, TIF_MEMDIE) ||
+                                               p->flags & PF_EXITING;
+               if (releasing && !(p->flags & PF_DEAD))
+                       return ERR_PTR(-1UL);
+               if (p->flags & PF_SWAPOFF)
+                       return p;
+
+               points = badness(p, uptime.tv_sec);
+               if (points > maxpoints || !chosen) {
+                       chosen = p;
+                       maxpoints = points;
                }
-       while_each_thread(g, p);
+       while_each_thread(g, p);
        return chosen;
 }
 
@@ -189,7 +198,8 @@ static void __oom_kill_task(task_t *p)
                return;
        }
        task_unlock(p);
-       printk(KERN_ERR "Out of Memory: Killed process %d (%s).\n", p->pid, p->comm);
+       printk(KERN_ERR "Out of Memory: Killed process %d (%s).\n",
+                                                       p->pid, p->comm);
 
        /*
         * We give our sacrificial lamb high priority and access to
index b06a9636d971d2a3e89dcab022047b24753d0479..3974fd81d27c0de38a12a299e6f6b6dd2645cbf7 100644 (file)
  * MCD - HACK: Find somewhere to initialize this EARLY, or make this
  * initializer cleaner
  */
-nodemask_t node_online_map = { { [0] = 1UL } };
+nodemask_t node_online_map __read_mostly = { { [0] = 1UL } };
 EXPORT_SYMBOL(node_online_map);
-nodemask_t node_possible_map = NODE_MASK_ALL;
+nodemask_t node_possible_map __read_mostly = NODE_MASK_ALL;
 EXPORT_SYMBOL(node_possible_map);
-struct pglist_data *pgdat_list;
-unsigned long totalram_pages;
-unsigned long totalhigh_pages;
+struct pglist_data *pgdat_list __read_mostly;
+unsigned long totalram_pages __read_mostly;
+unsigned long totalhigh_pages __read_mostly;
 long nr_swap_pages;
 
 /*
@@ -68,7 +68,7 @@ EXPORT_SYMBOL(nr_swap_pages);
  * Used by page_zone() to look up the address of the struct zone whose
  * id is encoded in the upper bits of page->flags
  */
-struct zone *zone_table[1 << ZONETABLE_SHIFT];
+struct zone *zone_table[1 << ZONETABLE_SHIFT] __read_mostly;
 EXPORT_SYMBOL(zone_table);
 
 static char *zone_names[MAX_NR_ZONES] = { "DMA", "Normal", "HighMem" };
@@ -806,11 +806,14 @@ __alloc_pages(unsigned int __nocast gfp_mask, unsigned int order,
        classzone_idx = zone_idx(zones[0]);
 
 restart:
-       /* Go through the zonelist once, looking for a zone with enough free */
+       /*
+        * Go through the zonelist once, looking for a zone with enough free.
+        * See also cpuset_zone_allowed() comment in kernel/cpuset.c.
+        */
        for (i = 0; (z = zones[i]) != NULL; i++) {
                int do_reclaim = should_reclaim_zone(z, gfp_mask);
 
-               if (!cpuset_zone_allowed(z))
+               if (!cpuset_zone_allowed(z, __GFP_HARDWALL))
                        continue;
 
                /*
@@ -845,6 +848,7 @@ zone_reclaim_retry:
         *
         * This is the last chance, in general, before the goto nopage.
         * Ignore cpuset if GFP_ATOMIC (!wait) rather than fail alloc.
+        * See also cpuset_zone_allowed() comment in kernel/cpuset.c.
         */
        for (i = 0; (z = zones[i]) != NULL; i++) {
                if (!zone_watermark_ok(z, order, z->pages_min,
@@ -852,7 +856,7 @@ zone_reclaim_retry:
                                       gfp_mask & __GFP_HIGH))
                        continue;
 
-               if (wait && !cpuset_zone_allowed(z))
+               if (wait && !cpuset_zone_allowed(z, gfp_mask))
                        continue;
 
                page = buffered_rmqueue(z, order, gfp_mask);
@@ -867,7 +871,7 @@ zone_reclaim_retry:
                if (!(gfp_mask & __GFP_NOMEMALLOC)) {
                        /* go through the zonelist yet again, ignoring mins */
                        for (i = 0; (z = zones[i]) != NULL; i++) {
-                               if (!cpuset_zone_allowed(z))
+                               if (!cpuset_zone_allowed(z, gfp_mask))
                                        continue;
                                page = buffered_rmqueue(z, order, gfp_mask);
                                if (page)
@@ -903,7 +907,7 @@ rebalance:
                                               gfp_mask & __GFP_HIGH))
                                continue;
 
-                       if (!cpuset_zone_allowed(z))
+                       if (!cpuset_zone_allowed(z, gfp_mask))
                                continue;
 
                        page = buffered_rmqueue(z, order, gfp_mask);
@@ -922,7 +926,7 @@ rebalance:
                                               classzone_idx, 0, 0))
                                continue;
 
-                       if (!cpuset_zone_allowed(z))
+                       if (!cpuset_zone_allowed(z, __GFP_HARDWALL))
                                continue;
 
                        page = buffered_rmqueue(z, order, gfp_mask);
index b840e7c6ea740433d1851c379705efe191259e1d..d0b50034e245a0095c7d359388b59676af0bdb59 100644 (file)
@@ -540,6 +540,7 @@ void handle_ra_miss(struct address_space *mapping,
 {
        ra->flags |= RA_FLAG_MISS;
        ra->flags &= ~RA_FLAG_INCACHE;
+       ra->cache_hit = 0;
 }
 
 /*
index bdc4bbb6ddbb84f01d625870789695aa8cd61b07..db2c9e8d99095ace5bae8324f2387b9ebdbaf7c6 100644 (file)
@@ -180,7 +180,7 @@ static struct inode_operations shmem_inode_operations;
 static struct inode_operations shmem_dir_inode_operations;
 static struct vm_operations_struct shmem_vm_ops;
 
-static struct backing_dev_info shmem_backing_dev_info = {
+static struct backing_dev_info shmem_backing_dev_info  __read_mostly = {
        .ra_pages       = 0,    /* No readahead */
        .capabilities   = BDI_CAP_NO_ACCT_DIRTY | BDI_CAP_NO_WRITEBACK,
        .unplug_io_fn   = default_unplug_io_fn,
index a9ff4f7f9860b2f1f37891fe4fe8c50a5caa637d..d7c4443991fe8e29e16dfaffa30a1711c6844c30 100644 (file)
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -2558,24 +2558,18 @@ void kmem_cache_free(kmem_cache_t *cachep, void *objp)
 EXPORT_SYMBOL(kmem_cache_free);
 
 /**
- * kcalloc - allocate memory for an array. The memory is set to zero.
- * @n: number of elements.
- * @size: element size.
+ * kzalloc - allocate memory. The memory is set to zero.
+ * @size: how many bytes of memory are required.
  * @flags: the type of memory to allocate.
  */
-void *kcalloc(size_t n, size_t size, unsigned int __nocast flags)
+void *kzalloc(size_t size, unsigned int __nocast flags)
 {
-       void *ret = NULL;
-
-       if (n != 0 && size > INT_MAX / n)
-               return ret;
-
-       ret = kmalloc(n * size, flags);
+       void *ret = kmalloc(size, flags);
        if (ret)
-               memset(ret, 0, n * size);
+               memset(ret, 0, size);
        return ret;
 }
-EXPORT_SYMBOL(kcalloc);
+EXPORT_SYMBOL(kzalloc);
 
 /**
  * kfree - free previously allocated memory
index 0095533cdde963143f7988c048a110519cc50a31..a740778f688da277d35eb0d15a60168257dbe42e 100644 (file)
@@ -894,7 +894,7 @@ shrink_caches(struct zone **zones, struct scan_control *sc)
                if (zone->present_pages == 0)
                        continue;
 
-               if (!cpuset_zone_allowed(zone))
+               if (!cpuset_zone_allowed(zone, __GFP_HARDWALL))
                        continue;
 
                zone->temp_priority = sc->priority;
@@ -940,7 +940,7 @@ int try_to_free_pages(struct zone **zones, unsigned int gfp_mask)
        for (i = 0; zones[i] != NULL; i++) {
                struct zone *zone = zones[i];
 
-               if (!cpuset_zone_allowed(zone))
+               if (!cpuset_zone_allowed(zone, __GFP_HARDWALL))
                        continue;
 
                zone->temp_priority = DEF_PRIORITY;
@@ -986,7 +986,7 @@ out:
        for (i = 0; zones[i] != 0; i++) {
                struct zone *zone = zones[i];
 
-               if (!cpuset_zone_allowed(zone))
+               if (!cpuset_zone_allowed(zone, __GFP_HARDWALL))
                        continue;
 
                zone->prev_priority = zone->temp_priority;
@@ -1256,7 +1256,7 @@ void wakeup_kswapd(struct zone *zone, int order)
                return;
        if (pgdat->kswapd_max_order < order)
                pgdat->kswapd_max_order = order;
-       if (!cpuset_zone_allowed(zone))
+       if (!cpuset_zone_allowed(zone, __GFP_HARDWALL))
                return;
        if (!waitqueue_active(&zone->zone_pgdat->kswapd_wait))
                return;
index ea43dfb774e228c3e044c283a7c6be11fd4195eb..ed705ddad56be0e9bb6b69580b681b1e5c91f6d0 100644 (file)
@@ -1874,6 +1874,7 @@ static void ax25_info_stop(struct seq_file *seq, void *v)
 static int ax25_info_show(struct seq_file *seq, void *v)
 {
        ax25_cb *ax25 = v;
+       char buf[11];
        int k;
 
 
@@ -1885,13 +1886,13 @@ static int ax25_info_show(struct seq_file *seq, void *v)
        seq_printf(seq, "%8.8lx %s %s%s ",
                   (long) ax25,
                   ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
-                  ax2asc(&ax25->source_addr),
+                  ax2asc(buf, &ax25->source_addr),
                   ax25->iamdigi? "*":"");
-       seq_printf(seq, "%s", ax2asc(&ax25->dest_addr));
+       seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
 
        for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
                seq_printf(seq, ",%s%s",
-                          ax2asc(&ax25->digipeat->calls[k]),
+                          ax2asc(buf, &ax25->digipeat->calls[k]),
                           ax25->digipeat->repeated[k]? "*":"");
        }
 
index f4fa6dfb846e6aa4cf2359584e4efed452dc8f58..dca179daf4150d3202e290709e611e13505dbd7d 100644 (file)
@@ -36,9 +36,8 @@ ax25_address null_ax25_address = {{0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00}};
 /*
  *     ax25 -> ascii conversion
  */
-char *ax2asc(ax25_address *a)
+char *ax2asc(char *buf, ax25_address *a)
 {
-       static char buf[11];
        char c, *s;
        int n;
 
index c288526da4ce194c65f49878f40cd686cedd1216..26b77d9722201232d7adfcb2bb27dcc3fb90e246 100644 (file)
@@ -298,6 +298,8 @@ static void ax25_rt_seq_stop(struct seq_file *seq, void *v)
 
 static int ax25_rt_seq_show(struct seq_file *seq, void *v)
 {
+       char buf[11];
+
        if (v == SEQ_START_TOKEN)
                seq_puts(seq, "callsign  dev  mode digipeaters\n");
        else {
@@ -308,7 +310,7 @@ static int ax25_rt_seq_show(struct seq_file *seq, void *v)
                if (ax25cmp(&ax25_rt->callsign, &null_ax25_address) == 0)
                        callsign = "default";
                else
-                       callsign = ax2asc(&ax25_rt->callsign);
+                       callsign = ax2asc(buf, &ax25_rt->callsign);
 
                seq_printf(seq, "%-9s %-4s",
                        callsign,
@@ -328,7 +330,8 @@ static int ax25_rt_seq_show(struct seq_file *seq, void *v)
 
                if (ax25_rt->digipeat != NULL)
                        for (i = 0; i < ax25_rt->digipeat->ndigi; i++)
-                               seq_printf(seq, " %s", ax2asc(&ax25_rt->digipeat->calls[i]));
+                               seq_printf(seq, " %s",
+                                    ax2asc(buf, &ax25_rt->digipeat->calls[i]));
 
                seq_puts(seq, "\n");
        }
index a8b3822f3ee42155032c914c31e80e1354b1fbfb..d53cc8615865f4b2e9ea7cc82452b57ddbbcef99 100644 (file)
@@ -168,12 +168,14 @@ static void ax25_uid_seq_stop(struct seq_file *seq, void *v)
 
 static int ax25_uid_seq_show(struct seq_file *seq, void *v)
 {
+       char buf[11];
+
        if (v == SEQ_START_TOKEN)
                seq_printf(seq, "Policy: %d\n", ax25_uid_policy);
        else {
                struct ax25_uid_assoc *pt = v;
 
-               seq_printf(seq, "%6d %s\n", pt->uid, ax2asc(&pt->call));
+               seq_printf(seq, "%6d %s\n", pt->uid, ax2asc(buf, &pt->call));
        }
        return 0;
 }
index d99ab969589397f9cc844db57aac0b7ab2f9711f..e593dace2fdb05e975266cacb870914c8cc13db9 100644 (file)
@@ -135,13 +135,14 @@ static inline struct compat_cmsghdr __user *cmsg_compat_nxthdr(struct msghdr *ms
  * thus placement) of cmsg headers and length are different for
  * 32-bit apps.  -DaveM
  */
-int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg,
+int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg, struct sock *sk,
                               unsigned char *stackbuf, int stackbuf_size)
 {
        struct compat_cmsghdr __user *ucmsg;
        struct cmsghdr *kcmsg, *kcmsg_base;
        compat_size_t ucmlen;
        __kernel_size_t kcmlen, tmp;
+       int err = -EFAULT;
 
        kcmlen = 0;
        kcmsg_base = kcmsg = (struct cmsghdr *)stackbuf;
@@ -156,6 +157,7 @@ int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg,
 
                tmp = ((ucmlen - CMSG_COMPAT_ALIGN(sizeof(*ucmsg))) +
                       CMSG_ALIGN(sizeof(struct cmsghdr)));
+               tmp = CMSG_ALIGN(tmp);
                kcmlen += tmp;
                ucmsg = cmsg_compat_nxthdr(kmsg, ucmsg, ucmlen);
        }
@@ -167,30 +169,34 @@ int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg,
         * until we have successfully copied over all of the data
         * from the user.
         */
-       if(kcmlen > stackbuf_size)
-               kcmsg_base = kcmsg = kmalloc(kcmlen, GFP_KERNEL);
-       if(kcmsg == NULL)
+       if (kcmlen > stackbuf_size)
+               kcmsg_base = kcmsg = sock_kmalloc(sk, kcmlen, GFP_KERNEL);
+       if (kcmsg == NULL)
                return -ENOBUFS;
 
        /* Now copy them over neatly. */
        memset(kcmsg, 0, kcmlen);
        ucmsg = CMSG_COMPAT_FIRSTHDR(kmsg);
        while(ucmsg != NULL) {
-               __get_user(ucmlen, &ucmsg->cmsg_len);
+               if (__get_user(ucmlen, &ucmsg->cmsg_len))
+                       goto Efault;
+               if (!CMSG_COMPAT_OK(ucmlen, ucmsg, kmsg))
+                       goto Einval;
                tmp = ((ucmlen - CMSG_COMPAT_ALIGN(sizeof(*ucmsg))) +
                       CMSG_ALIGN(sizeof(struct cmsghdr)));
+               if ((char *)kcmsg_base + kcmlen - (char *)kcmsg < CMSG_ALIGN(tmp))
+                       goto Einval;
                kcmsg->cmsg_len = tmp;
-               __get_user(kcmsg->cmsg_level, &ucmsg->cmsg_level);
-               __get_user(kcmsg->cmsg_type, &ucmsg->cmsg_type);
-
-               /* Copy over the data. */
-               if(copy_from_user(CMSG_DATA(kcmsg),
-                                 CMSG_COMPAT_DATA(ucmsg),
-                                 (ucmlen - CMSG_COMPAT_ALIGN(sizeof(*ucmsg)))))
-                       goto out_free_efault;
+               tmp = CMSG_ALIGN(tmp);
+               if (__get_user(kcmsg->cmsg_level, &ucmsg->cmsg_level) ||
+                   __get_user(kcmsg->cmsg_type, &ucmsg->cmsg_type) ||
+                   copy_from_user(CMSG_DATA(kcmsg),
+                                  CMSG_COMPAT_DATA(ucmsg),
+                                  (ucmlen - CMSG_COMPAT_ALIGN(sizeof(*ucmsg)))))
+                       goto Efault;
 
                /* Advance. */
-               kcmsg = (struct cmsghdr *)((char *)kcmsg + CMSG_ALIGN(tmp));
+               kcmsg = (struct cmsghdr *)((char *)kcmsg + tmp);
                ucmsg = cmsg_compat_nxthdr(kmsg, ucmsg, ucmlen);
        }
 
@@ -199,10 +205,12 @@ int cmsghdr_from_user_compat_to_kern(struct msghdr *kmsg,
        kmsg->msg_controllen = kcmlen;
        return 0;
 
-out_free_efault:
-       if(kcmsg_base != (struct cmsghdr *)stackbuf)
-               kfree(kcmsg_base);
-       return -EFAULT;
+Einval:
+       err = -EINVAL;
+Efault:
+       if (kcmsg_base != (struct cmsghdr *)stackbuf)
+               sock_kfree_s(sk, kcmsg_base, kcmlen);
+       return err;
 }
 
 int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *data)
index c13594579bfb193009e22e2fbc0635cfd3a0b14b..ac63b56e23b29c45113df81fa226bc2c9568d758 100644 (file)
@@ -341,11 +341,11 @@ set_rcvbuf:
                                sock_reset_flag(sk, SOCK_LINGER);
                        else {
 #if (BITS_PER_LONG == 32)
-                               if (ling.l_linger >= MAX_SCHEDULE_TIMEOUT/HZ)
+                               if ((unsigned int)ling.l_linger >= MAX_SCHEDULE_TIMEOUT/HZ)
                                        sk->sk_lingertime = MAX_SCHEDULE_TIMEOUT;
                                else
 #endif
-                                       sk->sk_lingertime = ling.l_linger * HZ;
+                                       sk->sk_lingertime = (unsigned int)ling.l_linger * HZ;
                                sock_set_flag(sk, SOCK_LINGER);
                        }
                        break;
@@ -1529,6 +1529,8 @@ EXPORT_SYMBOL(proto_register);
 void proto_unregister(struct proto *prot)
 {
        write_lock(&proto_list_lock);
+       list_del(&prot->node);
+       write_unlock(&proto_list_lock);
 
        if (prot->slab != NULL) {
                kmem_cache_destroy(prot->slab);
@@ -1550,9 +1552,6 @@ void proto_unregister(struct proto *prot)
                kfree(name);
                prot->twsk_slab = NULL;
        }
-
-       list_del(&prot->node);
-       write_unlock(&proto_list_lock);
 }
 
 EXPORT_SYMBOL(proto_unregister);
index 5caae2399f3a26891cb29cc0d58f34ee0e3b7a11..d17f1583ea3e00150424839b4254b709cf48ac8f 100644 (file)
  *     o Add wmb() in iw_handler_set_spy() for non-coherent archs/cpus
  * Based on patch from Pavel Roskin <proski@gnu.org> :
  *     o Fix kernel data leak to user space in private handler handling
+ *
+ * v7 - 18.3.05 - Jean II
+ *     o Remove (struct iw_point *)->pointer from events and streams
+ *     o Remove spy_offset from struct iw_handler_def
+ *     o Start deprecating dev->get_wireless_stats, output a warning
+ *     o If IW_QUAL_DBM is set, show dBm values in /proc/net/wireless
+ *     o Don't loose INVALID/DBM flags when clearing UPDATED flags (iwstats)
  */
 
 /***************************** INCLUDES *****************************/
@@ -446,10 +453,14 @@ static inline struct iw_statistics *get_wireless_stats(struct net_device *dev)
           (dev->wireless_handlers->get_wireless_stats != NULL))
                return dev->wireless_handlers->get_wireless_stats(dev);
 
-       /* Old location, will be phased out in next WE */
-       return (dev->get_wireless_stats ?
-               dev->get_wireless_stats(dev) :
-               (struct iw_statistics *) NULL);
+       /* Old location, field to be removed in next WE */
+       if(dev->get_wireless_stats) {
+               printk(KERN_DEBUG "%s (WE) : Driver using old /proc/net/wireless support, please fix driver !\n",
+                      dev->name);
+               return dev->get_wireless_stats(dev);
+       }
+       /* Not found */
+       return (struct iw_statistics *) NULL;
 }
 
 /* ---------------------------------------------------------------- */
@@ -541,16 +552,18 @@ static __inline__ void wireless_seq_printf_stats(struct seq_file *seq,
                           dev->name, stats->status, stats->qual.qual,
                           stats->qual.updated & IW_QUAL_QUAL_UPDATED
                           ? '.' : ' ',
-                          ((__u8) stats->qual.level),
+                          ((__s32) stats->qual.level) - 
+                          ((stats->qual.updated & IW_QUAL_DBM) ? 0x100 : 0),
                           stats->qual.updated & IW_QUAL_LEVEL_UPDATED
                           ? '.' : ' ',
-                          ((__u8) stats->qual.noise),
+                          ((__s32) stats->qual.noise) - 
+                          ((stats->qual.updated & IW_QUAL_DBM) ? 0x100 : 0),
                           stats->qual.updated & IW_QUAL_NOISE_UPDATED
                           ? '.' : ' ',
                           stats->discard.nwid, stats->discard.code,
                           stats->discard.fragment, stats->discard.retries,
                           stats->discard.misc, stats->miss.beacon);
-               stats->qual.updated = 0;
+               stats->qual.updated &= ~IW_QUAL_ALL_UPDATED;
        }
 }
 
@@ -593,6 +606,7 @@ static struct file_operations wireless_seq_fops = {
 
 int __init wireless_proc_init(void)
 {
+       /* Create /proc/net/wireless entry */
        if (!proc_net_fops_create("wireless", S_IRUGO, &wireless_seq_fops))
                return -ENOMEM;
 
@@ -627,9 +641,9 @@ static inline int dev_iwstats(struct net_device *dev, struct ifreq *ifr)
                                sizeof(struct iw_statistics)))
                        return -EFAULT;
 
-               /* Check if we need to clear the update flag */
+               /* Check if we need to clear the updated flag */
                if(wrq->u.data.flags != 0)
-                       stats->qual.updated = 0;
+                       stats->qual.updated &= ~IW_QUAL_ALL_UPDATED;
                return 0;
        } else
                return -EOPNOTSUPP;
@@ -1161,10 +1175,11 @@ void wireless_send_event(struct net_device *    dev,
        struct iw_event  *event;                /* Mallocated whole event */
        int event_len;                          /* Its size */
        int hdr_len;                            /* Size of the event header */
+       int wrqu_off = 0;                       /* Offset in wrqu */
        /* Don't "optimise" the following variable, it will crash */
        unsigned        cmd_index;              /* *MUST* be unsigned */
 
-       /* Get the description of the IOCTL */
+       /* Get the description of the Event */
        if(cmd <= SIOCIWLAST) {
                cmd_index = cmd - SIOCIWFIRST;
                if(cmd_index < standard_ioctl_num)
@@ -1207,6 +1222,8 @@ void wireless_send_event(struct net_device *      dev,
                /* Calculate extra_len - extra is NULL for restricted events */
                if(extra != NULL)
                        extra_len = wrqu->data.length * descr->token_size;
+               /* Always at an offset in wrqu */
+               wrqu_off = IW_EV_POINT_OFF;
 #ifdef WE_EVENT_DEBUG
                printk(KERN_DEBUG "%s (WE) : Event 0x%04X, tokens %d, extra_len %d\n", dev->name, cmd, wrqu->data.length, extra_len);
 #endif /* WE_EVENT_DEBUG */
@@ -1217,7 +1234,7 @@ void wireless_send_event(struct net_device *      dev,
        event_len = hdr_len + extra_len;
 
 #ifdef WE_EVENT_DEBUG
-       printk(KERN_DEBUG "%s (WE) : Event 0x%04X, hdr_len %d, event_len %d\n", dev->name, cmd, hdr_len, event_len);
+       printk(KERN_DEBUG "%s (WE) : Event 0x%04X, hdr_len %d, wrqu_off %d, event_len %d\n", dev->name, cmd, hdr_len, wrqu_off, event_len);
 #endif /* WE_EVENT_DEBUG */
 
        /* Create temporary buffer to hold the event */
@@ -1228,7 +1245,7 @@ void wireless_send_event(struct net_device *      dev,
        /* Fill event */
        event->len = event_len;
        event->cmd = cmd;
-       memcpy(&event->u, wrqu, hdr_len - IW_EV_LCP_LEN);
+       memcpy(&event->u, ((char *) wrqu) + wrqu_off, hdr_len - IW_EV_LCP_LEN);
        if(extra != NULL)
                memcpy(((char *) event) + hdr_len, extra, extra_len);
 
@@ -1249,7 +1266,7 @@ void wireless_send_event(struct net_device *      dev,
  * Now, the driver can delegate this task to Wireless Extensions.
  * It needs to use those standard spy iw_handler in struct iw_handler_def,
  * push data to us via wireless_spy_update() and include struct iw_spy_data
- * in its private part (and advertise it in iw_handler_def->spy_offset).
+ * in its private part (and export it in net_device->wireless_data->spy_data).
  * One of the main advantage of centralising spy support here is that
  * it becomes much easier to improve and extend it without having to touch
  * the drivers. One example is the addition of the Spy-Threshold events.
@@ -1266,10 +1283,7 @@ static inline struct iw_spy_data * get_spydata(struct net_device *dev)
        /* This is the new way */
        if(dev->wireless_data)
                return(dev->wireless_data->spy_data);
-
-       /* This is the old way. Doesn't work for multi-headed drivers.
-        * It will be removed in the next version of WE. */
-       return (dev->priv + dev->wireless_handlers->spy_offset);
+       return NULL;
 }
 
 /*------------------------------------------------------------------*/
@@ -1284,10 +1298,6 @@ int iw_handler_set_spy(struct net_device *       dev,
        struct iw_spy_data *    spydata = get_spydata(dev);
        struct sockaddr *       address = (struct sockaddr *) extra;
 
-       if(!dev->wireless_data)
-               /* Help user know that driver needs updating */
-               printk(KERN_DEBUG "%s (WE) : Driver using old/buggy spy support, please fix driver !\n",
-                      dev->name);
        /* Make sure driver is not buggy or using the old API */
        if(!spydata)
                return -EOPNOTSUPP;
@@ -1318,7 +1328,7 @@ int iw_handler_set_spy(struct net_device *        dev,
                       sizeof(struct iw_quality) * IW_MAX_SPY);
 
 #ifdef WE_SPY_DEBUG
-               printk(KERN_DEBUG "iw_handler_set_spy() :  offset %ld, spydata %p, num %d\n", dev->wireless_handlers->spy_offset, spydata, wrqu->data.length);
+               printk(KERN_DEBUG "iw_handler_set_spy() :  wireless_data %p, spydata %p, num %d\n", dev->wireless_data, spydata, wrqu->data.length);
                for (i = 0; i < wrqu->data.length; i++)
                        printk(KERN_DEBUG
                               "%02X:%02X:%02X:%02X:%02X:%02X \n",
@@ -1371,7 +1381,7 @@ int iw_handler_get_spy(struct net_device *        dev,
                       sizeof(struct iw_quality) * spydata->spy_number);
        /* Reset updated flags. */
        for(i = 0; i < spydata->spy_number; i++)
-               spydata->spy_stat[i].updated = 0;
+               spydata->spy_stat[i].updated &= ~IW_QUAL_ALL_UPDATED;
        return 0;
 }
 
@@ -1486,7 +1496,7 @@ void wireless_spy_update(struct net_device *      dev,
                return;
 
 #ifdef WE_SPY_DEBUG
-       printk(KERN_DEBUG "wireless_spy_update() :  offset %ld, spydata %p, address %02X:%02X:%02X:%02X:%02X:%02X\n", dev->wireless_handlers->spy_offset, spydata, address[0], address[1], address[2], address[3], address[4], address[5]);
+       printk(KERN_DEBUG "wireless_spy_update() :  wireless_data %p, spydata %p, address %02X:%02X:%02X:%02X:%02X:%02X\n", dev->wireless_data, spydata, address[0], address[1], address[2], address[3], address[4], address[5]);
 #endif /* WE_SPY_DEBUG */
 
        /* Update all records that match */
index 05a6f2f298db4a4d61d388642d7d6f9fc37b23a7..61a9d92e455b67e5dc9651470780a32120e57d7a 100644 (file)
@@ -30,7 +30,6 @@ struct ieee80211_crypto_alg {
        struct ieee80211_crypto_ops *ops;
 };
 
-
 struct ieee80211_crypto {
        struct list_head algs;
        spinlock_t lock;
@@ -38,8 +37,7 @@ struct ieee80211_crypto {
 
 static struct ieee80211_crypto *hcrypt;
 
-void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee,
-                                          int force)
+void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee, int force)
 {
        struct list_head *ptr, *n;
        struct ieee80211_crypt_data *entry;
@@ -140,7 +138,7 @@ int ieee80211_unregister_crypto_ops(struct ieee80211_crypto_ops *ops)
        spin_lock_irqsave(&hcrypt->lock, flags);
        for (ptr = hcrypt->algs.next; ptr != &hcrypt->algs; ptr = ptr->next) {
                struct ieee80211_crypto_alg *alg =
-                       (struct ieee80211_crypto_alg *) ptr;
+                   (struct ieee80211_crypto_alg *)ptr;
                if (alg->ops == ops) {
                        list_del(&alg->list);
                        del_alg = alg;
@@ -158,8 +156,7 @@ int ieee80211_unregister_crypto_ops(struct ieee80211_crypto_ops *ops)
        return del_alg ? 0 : -1;
 }
 
-
-struct ieee80211_crypto_ops * ieee80211_get_crypto_ops(const char *name)
+struct ieee80211_crypto_ops *ieee80211_get_crypto_ops(const char *name)
 {
        unsigned long flags;
        struct list_head *ptr;
@@ -171,7 +168,7 @@ struct ieee80211_crypto_ops * ieee80211_get_crypto_ops(const char *name)
        spin_lock_irqsave(&hcrypt->lock, flags);
        for (ptr = hcrypt->algs.next; ptr != &hcrypt->algs; ptr = ptr->next) {
                struct ieee80211_crypto_alg *alg =
-                       (struct ieee80211_crypto_alg *) ptr;
+                   (struct ieee80211_crypto_alg *)ptr;
                if (strcmp(alg->ops->name, name) == 0) {
                        found_alg = alg;
                        break;
@@ -185,9 +182,13 @@ struct ieee80211_crypto_ops * ieee80211_get_crypto_ops(const char *name)
                return NULL;
 }
 
-
-static void * ieee80211_crypt_null_init(int keyidx) { return (void *) 1; }
-static void ieee80211_crypt_null_deinit(void *priv) {}
+static void *ieee80211_crypt_null_init(int keyidx)
+{
+       return (void *)1;
+}
+static void ieee80211_crypt_null_deinit(void *priv)
+{
+}
 
 static struct ieee80211_crypto_ops ieee80211_crypt_null = {
        .name                   = "NULL",
@@ -204,7 +205,6 @@ static struct ieee80211_crypto_ops ieee80211_crypt_null = {
        .owner                  = THIS_MODULE,
 };
 
-
 static int __init ieee80211_crypto_init(void)
 {
        int ret = -ENOMEM;
@@ -222,11 +222,10 @@ static int __init ieee80211_crypto_init(void)
                kfree(hcrypt);
                hcrypt = NULL;
        }
-out:
+      out:
        return ret;
 }
 
-
 static void __exit ieee80211_crypto_deinit(void)
 {
        struct list_head *ptr, *n;
@@ -237,7 +236,7 @@ static void __exit ieee80211_crypto_deinit(void)
        for (ptr = hcrypt->algs.next, n = ptr->next; ptr != &hcrypt->algs;
             ptr = n, n = ptr->next) {
                struct ieee80211_crypto_alg *alg =
-                       (struct ieee80211_crypto_alg *) ptr;
+                   (struct ieee80211_crypto_alg *)ptr;
                list_del(ptr);
                printk(KERN_DEBUG "ieee80211_crypt: unregistered algorithm "
                       "'%s' (deinit)\n", alg->ops->name);
index 11d15573b26ae060b127a91321efc0527a055946..8fc13f45971e3b895ffa508f4750319a5a6e641c 100644 (file)
@@ -24,7 +24,6 @@
 
 #include <net/ieee80211.h>
 
-
 #include <linux/crypto.h>
 #include <asm/scatterlist.h>
 
@@ -55,7 +54,7 @@ struct ieee80211_ccmp_data {
 
        /* scratch buffers for virt_to_page() (crypto API) */
        u8 tx_b0[AES_BLOCK_LEN], tx_b[AES_BLOCK_LEN],
-               tx_e[AES_BLOCK_LEN], tx_s0[AES_BLOCK_LEN];
+           tx_e[AES_BLOCK_LEN], tx_s0[AES_BLOCK_LEN];
        u8 rx_b0[AES_BLOCK_LEN], rx_b[AES_BLOCK_LEN], rx_a[AES_BLOCK_LEN];
 };
 
@@ -75,7 +74,7 @@ static void ieee80211_ccmp_aes_encrypt(struct crypto_tfm *tfm,
        crypto_cipher_encrypt(tfm, &dst, &src, AES_BLOCK_LEN);
 }
 
-static void * ieee80211_ccmp_init(int key_idx)
+static void *ieee80211_ccmp_init(int key_idx)
 {
        struct ieee80211_ccmp_data *priv;
 
@@ -94,7 +93,7 @@ static void * ieee80211_ccmp_init(int key_idx)
 
        return priv;
 
-fail:
+      fail:
        if (priv) {
                if (priv->tfm)
                        crypto_free_tfm(priv->tfm);
@@ -104,7 +103,6 @@ fail:
        return NULL;
 }
 
-
 static void ieee80211_ccmp_deinit(void *priv)
 {
        struct ieee80211_ccmp_data *_priv = priv;
@@ -113,19 +111,16 @@ static void ieee80211_ccmp_deinit(void *priv)
        kfree(priv);
 }
 
-
-static inline void xor_block(u8 *b, u8 *a, size_t len)
+static inline void xor_block(u8 * b, u8 * a, size_t len)
 {
        int i;
        for (i = 0; i < len; i++)
                b[i] ^= a[i];
 }
 
-
 static void ccmp_init_blocks(struct crypto_tfm *tfm,
                             struct ieee80211_hdr *hdr,
-                            u8 *pn, size_t dlen, u8 *b0, u8 *auth,
-                            u8 *s0)
+                            u8 * pn, size_t dlen, u8 * b0, u8 * auth, u8 * s0)
 {
        u8 *pos, qc = 0;
        size_t aad_len;
@@ -142,7 +137,7 @@ static void ccmp_init_blocks(struct crypto_tfm *tfm,
        if (a4_included)
                aad_len += 6;
        if (qc_included) {
-               pos = (u8 *) &hdr->addr4;
+               pos = (u8 *) & hdr->addr4;
                if (a4_included)
                        pos += 6;
                qc = *pos & 0x0f;
@@ -169,14 +164,14 @@ static void ccmp_init_blocks(struct crypto_tfm *tfm,
         * QC (if present)
         */
        pos = (u8 *) hdr;
-       aad[0] = 0; /* aad_len >> 8 */
+       aad[0] = 0;             /* aad_len >> 8 */
        aad[1] = aad_len & 0xff;
        aad[2] = pos[0] & 0x8f;
        aad[3] = pos[1] & 0xc7;
        memcpy(aad + 4, hdr->addr1, 3 * ETH_ALEN);
-       pos = (u8 *) &hdr->seq_ctl;
+       pos = (u8 *) & hdr->seq_ctl;
        aad[22] = pos[0] & 0x0f;
-       aad[23] = 0; /* all bits masked */
+       aad[23] = 0;            /* all bits masked */
        memset(aad + 24, 0, 8);
        if (a4_included)
                memcpy(aad + 24, hdr->addr4, ETH_ALEN);
@@ -196,7 +191,6 @@ static void ccmp_init_blocks(struct crypto_tfm *tfm,
        ieee80211_ccmp_aes_encrypt(tfm, b0, s0);
 }
 
-
 static int ieee80211_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
 {
        struct ieee80211_ccmp_data *key = priv;
@@ -209,8 +203,7 @@ static int ieee80211_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
        u8 *s0 = key->tx_s0;
 
        if (skb_headroom(skb) < CCMP_HDR_LEN ||
-           skb_tailroom(skb) < CCMP_MIC_LEN ||
-           skb->len < hdr_len)
+           skb_tailroom(skb) < CCMP_MIC_LEN || skb->len < hdr_len)
                return -1;
 
        data_len = skb->len - hdr_len;
@@ -230,13 +223,13 @@ static int ieee80211_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
        *pos++ = key->tx_pn[5];
        *pos++ = key->tx_pn[4];
        *pos++ = 0;
-       *pos++ = (key->key_idx << 6) | (1 << 5) /* Ext IV included */;
+       *pos++ = (key->key_idx << 6) | (1 << 5) /* Ext IV included */ ;
        *pos++ = key->tx_pn[3];
        *pos++ = key->tx_pn[2];
        *pos++ = key->tx_pn[1];
        *pos++ = key->tx_pn[0];
 
-       hdr = (struct ieee80211_hdr *) skb->data;
+       hdr = (struct ieee80211_hdr *)skb->data;
        ccmp_init_blocks(key->tfm, hdr, key->tx_pn, data_len, b0, b, s0);
 
        blocks = (data_len + AES_BLOCK_LEN - 1) / AES_BLOCK_LEN;
@@ -261,7 +254,6 @@ static int ieee80211_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
        return 0;
 }
 
-
 static int ieee80211_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
 {
        struct ieee80211_ccmp_data *key = priv;
@@ -280,7 +272,7 @@ static int ieee80211_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
                return -1;
        }
 
-       hdr = (struct ieee80211_hdr *) skb->data;
+       hdr = (struct ieee80211_hdr *)skb->data;
        pos = skb->data + hdr_len;
        keyidx = pos[3];
        if (!(keyidx & (1 << 5))) {
@@ -364,8 +356,7 @@ static int ieee80211_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
        return keyidx;
 }
 
-
-static int ieee80211_ccmp_set_key(void *key, int len, u8 *seq, void *priv)
+static int ieee80211_ccmp_set_key(void *key, int len, u8 * seq, void *priv)
 {
        struct ieee80211_ccmp_data *data = priv;
        int keyidx;
@@ -395,8 +386,7 @@ static int ieee80211_ccmp_set_key(void *key, int len, u8 *seq, void *priv)
        return 0;
 }
 
-
-static int ieee80211_ccmp_get_key(void *key, int len, u8 *seq, void *priv)
+static int ieee80211_ccmp_get_key(void *key, int len, u8 * seq, void *priv)
 {
        struct ieee80211_ccmp_data *data = priv;
 
@@ -419,8 +409,7 @@ static int ieee80211_ccmp_get_key(void *key, int len, u8 *seq, void *priv)
        return CCMP_TK_LEN;
 }
 
-
-static char * ieee80211_ccmp_print_stats(char *p, void *priv)
+static char *ieee80211_ccmp_print_stats(char *p, void *priv)
 {
        struct ieee80211_ccmp_data *ccmp = priv;
        p += sprintf(p, "key[%d] alg=CCMP key_set=%d "
@@ -436,7 +425,6 @@ static char * ieee80211_ccmp_print_stats(char *p, void *priv)
        return p;
 }
 
-
 static struct ieee80211_crypto_ops ieee80211_crypt_ccmp = {
        .name                   = "CCMP",
        .init                   = ieee80211_ccmp_init,
@@ -453,18 +441,15 @@ static struct ieee80211_crypto_ops ieee80211_crypt_ccmp = {
        .owner                  = THIS_MODULE,
 };
 
-
 static int __init ieee80211_crypto_ccmp_init(void)
 {
        return ieee80211_register_crypto_ops(&ieee80211_crypt_ccmp);
 }
 
-
 static void __exit ieee80211_crypto_ccmp_exit(void)
 {
        ieee80211_unregister_crypto_ops(&ieee80211_crypt_ccmp);
 }
 
-
 module_init(ieee80211_crypto_ccmp_init);
 module_exit(ieee80211_crypto_ccmp_exit);
index f91d92c6df25955f7d11ccf6d6569ff14cbc11aa..d4f9164be1a1848f75f49fd0ee631ce70aa6fdc6 100644 (file)
@@ -23,7 +23,6 @@
 
 #include <net/ieee80211.h>
 
-
 #include <linux/crypto.h>
 #include <asm/scatterlist.h>
 #include <linux/crc32.h>
@@ -62,7 +61,7 @@ struct ieee80211_tkip_data {
        u8 rx_hdr[16], tx_hdr[16];
 };
 
-static void * ieee80211_tkip_init(int key_idx)
+static void *ieee80211_tkip_init(int key_idx)
 {
        struct ieee80211_tkip_data *priv;
 
@@ -88,7 +87,7 @@ static void * ieee80211_tkip_init(int key_idx)
 
        return priv;
 
-fail:
+      fail:
        if (priv) {
                if (priv->tfm_michael)
                        crypto_free_tfm(priv->tfm_michael);
@@ -100,7 +99,6 @@ fail:
        return NULL;
 }
 
-
 static void ieee80211_tkip_deinit(void *priv)
 {
        struct ieee80211_tkip_data *_priv = priv;
@@ -111,51 +109,42 @@ static void ieee80211_tkip_deinit(void *priv)
        kfree(priv);
 }
 
-
 static inline u16 RotR1(u16 val)
 {
        return (val >> 1) | (val << 15);
 }
 
-
 static inline u8 Lo8(u16 val)
 {
        return val & 0xff;
 }
 
-
 static inline u8 Hi8(u16 val)
 {
        return val >> 8;
 }
 
-
 static inline u16 Lo16(u32 val)
 {
        return val & 0xffff;
 }
 
-
 static inline u16 Hi16(u32 val)
 {
        return val >> 16;
 }
 
-
 static inline u16 Mk16(u8 hi, u8 lo)
 {
        return lo | (((u16) hi) << 8);
 }
 
-
-static inline u16 Mk16_le(u16 *v)
+static inline u16 Mk16_le(u16 * v)
 {
        return le16_to_cpu(*v);
 }
 
-
-static const u16 Sbox[256] =
-{
+static const u16 Sbox[256] = {
        0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154,
        0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A,
        0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B,
@@ -190,17 +179,16 @@ static const u16 Sbox[256] =
        0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A,
 };
 
-
 static inline u16 _S_(u16 v)
 {
        u16 t = Sbox[Hi8(v)];
        return Sbox[Lo8(v)] ^ ((t << 8) | (t >> 8));
 }
 
-
 #define PHASE1_LOOP_COUNT 8
 
-static void tkip_mixing_phase1(u16 *TTAK, const u8 *TK, const u8 *TA, u32 IV32)
+static void tkip_mixing_phase1(u16 * TTAK, const u8 * TK, const u8 * TA,
+                              u32 IV32)
 {
        int i, j;
 
@@ -221,13 +209,12 @@ static void tkip_mixing_phase1(u16 *TTAK, const u8 *TK, const u8 *TA, u32 IV32)
        }
 }
 
-
-static void tkip_mixing_phase2(u8 *WEPSeed, const u8 *TK, const u16 *TTAK,
+static void tkip_mixing_phase2(u8 * WEPSeed, const u8 * TK, const u16 * TTAK,
                               u16 IV16)
 {
        /* Make temporary area overlap WEP seed so that the final copy can be
         * avoided on little endian hosts. */
-       u16 *PPK = (u16 *) &WEPSeed[4];
+       u16 *PPK = (u16 *) & WEPSeed[4];
 
        /* Step 1 - make copy of TTAK and bring in TSC */
        PPK[0] = TTAK[0];
@@ -238,15 +225,15 @@ static void tkip_mixing_phase2(u8 *WEPSeed, const u8 *TK, const u16 *TTAK,
        PPK[5] = TTAK[4] + IV16;
 
        /* Step 2 - 96-bit bijective mixing using S-box */
-       PPK[0] += _S_(PPK[5] ^ Mk16_le((u16 *) &TK[0]));
-       PPK[1] += _S_(PPK[0] ^ Mk16_le((u16 *) &TK[2]));
-       PPK[2] += _S_(PPK[1] ^ Mk16_le((u16 *) &TK[4]));
-       PPK[3] += _S_(PPK[2] ^ Mk16_le((u16 *) &TK[6]));
-       PPK[4] += _S_(PPK[3] ^ Mk16_le((u16 *) &TK[8]));
-       PPK[5] += _S_(PPK[4] ^ Mk16_le((u16 *) &TK[10]));
-
-       PPK[0] += RotR1(PPK[5] ^ Mk16_le((u16 *) &TK[12]));
-       PPK[1] += RotR1(PPK[0] ^ Mk16_le((u16 *) &TK[14]));
+       PPK[0] += _S_(PPK[5] ^ Mk16_le((u16 *) & TK[0]));
+       PPK[1] += _S_(PPK[0] ^ Mk16_le((u16 *) & TK[2]));
+       PPK[2] += _S_(PPK[1] ^ Mk16_le((u16 *) & TK[4]));
+       PPK[3] += _S_(PPK[2] ^ Mk16_le((u16 *) & TK[6]));
+       PPK[4] += _S_(PPK[3] ^ Mk16_le((u16 *) & TK[8]));
+       PPK[5] += _S_(PPK[4] ^ Mk16_le((u16 *) & TK[10]));
+
+       PPK[0] += RotR1(PPK[5] ^ Mk16_le((u16 *) & TK[12]));
+       PPK[1] += RotR1(PPK[0] ^ Mk16_le((u16 *) & TK[14]));
        PPK[2] += RotR1(PPK[1]);
        PPK[3] += RotR1(PPK[2]);
        PPK[4] += RotR1(PPK[3]);
@@ -257,7 +244,7 @@ static void tkip_mixing_phase2(u8 *WEPSeed, const u8 *TK, const u16 *TTAK,
        WEPSeed[0] = Hi8(IV16);
        WEPSeed[1] = (Hi8(IV16) | 0x20) & 0x7F;
        WEPSeed[2] = Lo8(IV16);
-       WEPSeed[3] = Lo8((PPK[5] ^ Mk16_le((u16 *) &TK[0])) >> 1);
+       WEPSeed[3] = Lo8((PPK[5] ^ Mk16_le((u16 *) & TK[0])) >> 1);
 
 #ifdef __BIG_ENDIAN
        {
@@ -281,7 +268,7 @@ static int ieee80211_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
            skb->len < hdr_len)
                return -1;
 
-       hdr = (struct ieee80211_hdr *) skb->data;
+       hdr = (struct ieee80211_hdr *)skb->data;
        if (!tkey->tx_phase1_done) {
                tkip_mixing_phase1(tkey->tx_ttak, tkey->key, hdr->addr2,
                                   tkey->tx_iv32);
@@ -298,7 +285,7 @@ static int ieee80211_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
        *pos++ = rc4key[0];
        *pos++ = rc4key[1];
        *pos++ = rc4key[2];
-       *pos++ = (tkey->key_idx << 6) | (1 << 5) /* Ext IV included */;
+       *pos++ = (tkey->key_idx << 6) | (1 << 5) /* Ext IV included */ ;
        *pos++ = tkey->tx_iv32 & 0xff;
        *pos++ = (tkey->tx_iv32 >> 8) & 0xff;
        *pos++ = (tkey->tx_iv32 >> 16) & 0xff;
@@ -341,7 +328,7 @@ static int ieee80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
        if (skb->len < hdr_len + 8 + 4)
                return -1;
 
-       hdr = (struct ieee80211_hdr *) skb->data;
+       hdr = (struct ieee80211_hdr *)skb->data;
        pos = skb->data + hdr_len;
        keyidx = pos[3];
        if (!(keyidx & (1 << 5))) {
@@ -427,9 +414,8 @@ static int ieee80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
        return keyidx;
 }
 
-
-static int michael_mic(struct ieee80211_tkip_data *tkey, u8 *key, u8 *hdr,
-                      u8 *data, size_t data_len, u8 *mic)
+static int michael_mic(struct ieee80211_tkip_data *tkey, u8 * key, u8 * hdr,
+                      u8 * data, size_t data_len, u8 * mic)
 {
        struct scatterlist sg[2];
 
@@ -453,37 +439,37 @@ static int michael_mic(struct ieee80211_tkip_data *tkey, u8 *key, u8 *hdr,
        return 0;
 }
 
-static void michael_mic_hdr(struct sk_buff *skb, u8 *hdr)
+static void michael_mic_hdr(struct sk_buff *skb, u8 * hdr)
 {
        struct ieee80211_hdr *hdr11;
 
-       hdr11 = (struct ieee80211_hdr *) skb->data;
+       hdr11 = (struct ieee80211_hdr *)skb->data;
        switch (le16_to_cpu(hdr11->frame_ctl) &
                (IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS)) {
        case IEEE80211_FCTL_TODS:
-               memcpy(hdr, hdr11->addr3, ETH_ALEN); /* DA */
-               memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN); /* SA */
+               memcpy(hdr, hdr11->addr3, ETH_ALEN);    /* DA */
+               memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN); /* SA */
                break;
        case IEEE80211_FCTL_FROMDS:
-               memcpy(hdr, hdr11->addr1, ETH_ALEN); /* DA */
-               memcpy(hdr + ETH_ALEN, hdr11->addr3, ETH_ALEN); /* SA */
+               memcpy(hdr, hdr11->addr1, ETH_ALEN);    /* DA */
+               memcpy(hdr + ETH_ALEN, hdr11->addr3, ETH_ALEN); /* SA */
                break;
        case IEEE80211_FCTL_FROMDS | IEEE80211_FCTL_TODS:
-               memcpy(hdr, hdr11->addr3, ETH_ALEN); /* DA */
-               memcpy(hdr + ETH_ALEN, hdr11->addr4, ETH_ALEN); /* SA */
+               memcpy(hdr, hdr11->addr3, ETH_ALEN);    /* DA */
+               memcpy(hdr + ETH_ALEN, hdr11->addr4, ETH_ALEN); /* SA */
                break;
        case 0:
-               memcpy(hdr, hdr11->addr1, ETH_ALEN); /* DA */
-               memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN); /* SA */
+               memcpy(hdr, hdr11->addr1, ETH_ALEN);    /* DA */
+               memcpy(hdr + ETH_ALEN, hdr11->addr2, ETH_ALEN); /* SA */
                break;
        }
 
-       hdr[12] = 0; /* priority */
-       hdr[13] = hdr[14] = hdr[15] = 0; /* reserved */
+       hdr[12] = 0;            /* priority */
+       hdr[13] = hdr[14] = hdr[15] = 0;        /* reserved */
 }
 
-
-static int ieee80211_michael_mic_add(struct sk_buff *skb, int hdr_len, void *priv)
+static int ieee80211_michael_mic_add(struct sk_buff *skb, int hdr_len,
+                                    void *priv)
 {
        struct ieee80211_tkip_data *tkey = priv;
        u8 *pos;
@@ -504,11 +490,9 @@ static int ieee80211_michael_mic_add(struct sk_buff *skb, int hdr_len, void *pri
        return 0;
 }
 
-
 #if WIRELESS_EXT >= 18
 static void ieee80211_michael_mic_failure(struct net_device *dev,
-                                      struct ieee80211_hdr *hdr,
-                                      int keyidx)
+                                         struct ieee80211_hdr *hdr, int keyidx)
 {
        union iwreq_data wrqu;
        struct iw_michaelmicfailure ev;
@@ -524,12 +508,11 @@ static void ieee80211_michael_mic_failure(struct net_device *dev,
        memcpy(ev.src_addr.sa_data, hdr->addr2, ETH_ALEN);
        memset(&wrqu, 0, sizeof(wrqu));
        wrqu.data.length = sizeof(ev);
-       wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char *) &ev);
+       wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char *)&ev);
 }
 #elif WIRELESS_EXT >= 15
 static void ieee80211_michael_mic_failure(struct net_device *dev,
-                                      struct ieee80211_hdr *hdr,
-                                      int keyidx)
+                                         struct ieee80211_hdr *hdr, int keyidx)
 {
        union iwreq_data wrqu;
        char buf[128];
@@ -542,17 +525,16 @@ static void ieee80211_michael_mic_failure(struct net_device *dev,
        wrqu.data.length = strlen(buf);
        wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf);
 }
-#else /* WIRELESS_EXT >= 15 */
+#else                          /* WIRELESS_EXT >= 15 */
 static inline void ieee80211_michael_mic_failure(struct net_device *dev,
-                                             struct ieee80211_hdr *hdr,
-                                             int keyidx)
+                                                struct ieee80211_hdr *hdr,
+                                                int keyidx)
 {
 }
-#endif /* WIRELESS_EXT >= 15 */
-
+#endif                         /* WIRELESS_EXT >= 15 */
 
 static int ieee80211_michael_mic_verify(struct sk_buff *skb, int keyidx,
-                                    int hdr_len, void *priv)
+                                       int hdr_len, void *priv)
 {
        struct ieee80211_tkip_data *tkey = priv;
        u8 mic[8];
@@ -566,7 +548,7 @@ static int ieee80211_michael_mic_verify(struct sk_buff *skb, int keyidx,
                return -1;
        if (memcmp(mic, skb->data + skb->len - 8, 8) != 0) {
                struct ieee80211_hdr *hdr;
-               hdr = (struct ieee80211_hdr *) skb->data;
+               hdr = (struct ieee80211_hdr *)skb->data;
                printk(KERN_DEBUG "%s: Michael MIC verification failed for "
                       "MSDU from " MAC_FMT " keyidx=%d\n",
                       skb->dev ? skb->dev->name : "N/A", MAC_ARG(hdr->addr2),
@@ -587,8 +569,7 @@ static int ieee80211_michael_mic_verify(struct sk_buff *skb, int keyidx,
        return 0;
 }
 
-
-static int ieee80211_tkip_set_key(void *key, int len, u8 *seq, void *priv)
+static int ieee80211_tkip_set_key(void *key, int len, u8 * seq, void *priv)
 {
        struct ieee80211_tkip_data *tkey = priv;
        int keyidx;
@@ -603,10 +584,10 @@ static int ieee80211_tkip_set_key(void *key, int len, u8 *seq, void *priv)
        if (len == TKIP_KEY_LEN) {
                memcpy(tkey->key, key, TKIP_KEY_LEN);
                tkey->key_set = 1;
-               tkey->tx_iv16 = 1; /* TSC is initialized to 1 */
+               tkey->tx_iv16 = 1;      /* TSC is initialized to 1 */
                if (seq) {
                        tkey->rx_iv32 = (seq[5] << 24) | (seq[4] << 16) |
-                               (seq[3] << 8) | seq[2];
+                           (seq[3] << 8) | seq[2];
                        tkey->rx_iv16 = (seq[1] << 8) | seq[0];
                }
        } else if (len == 0)
@@ -617,8 +598,7 @@ static int ieee80211_tkip_set_key(void *key, int len, u8 *seq, void *priv)
        return 0;
 }
 
-
-static int ieee80211_tkip_get_key(void *key, int len, u8 *seq, void *priv)
+static int ieee80211_tkip_get_key(void *key, int len, u8 * seq, void *priv)
 {
        struct ieee80211_tkip_data *tkey = priv;
 
@@ -647,8 +627,7 @@ static int ieee80211_tkip_get_key(void *key, int len, u8 *seq, void *priv)
        return TKIP_KEY_LEN;
 }
 
-
-static char * ieee80211_tkip_print_stats(char *p, void *priv)
+static char *ieee80211_tkip_print_stats(char *p, void *priv)
 {
        struct ieee80211_tkip_data *tkip = priv;
        p += sprintf(p, "key[%d] alg=TKIP key_set=%d "
@@ -674,7 +653,6 @@ static char * ieee80211_tkip_print_stats(char *p, void *priv)
        return p;
 }
 
-
 static struct ieee80211_crypto_ops ieee80211_crypt_tkip = {
        .name                   = "TKIP",
        .init                   = ieee80211_tkip_init,
@@ -686,23 +664,20 @@ static struct ieee80211_crypto_ops ieee80211_crypt_tkip = {
        .set_key                = ieee80211_tkip_set_key,
        .get_key                = ieee80211_tkip_get_key,
        .print_stats            = ieee80211_tkip_print_stats,
-       .extra_prefix_len       = 4 + 4, /* IV + ExtIV */
-       .extra_postfix_len      = 8 + 4, /* MIC + ICV */
-       .owner                  = THIS_MODULE,
+       .extra_prefix_len       = 4 + 4,        /* IV + ExtIV */
+       .extra_postfix_len      = 8 + 4,        /* MIC + ICV */
+       .owner                  = THIS_MODULE,
 };
 
-
 static int __init ieee80211_crypto_tkip_init(void)
 {
        return ieee80211_register_crypto_ops(&ieee80211_crypt_tkip);
 }
 
-
 static void __exit ieee80211_crypto_tkip_exit(void)
 {
        ieee80211_unregister_crypto_ops(&ieee80211_crypt_tkip);
 }
 
-
 module_init(ieee80211_crypto_tkip_init);
 module_exit(ieee80211_crypto_tkip_exit);
index bec1d3470d394e55c18821708c98ad816feb7c20..b4d2514a090270be5b5822e671678ded227231df 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <net/ieee80211.h>
 
-
 #include <linux/crypto.h>
 #include <asm/scatterlist.h>
 #include <linux/crc32.h>
@@ -29,7 +28,6 @@ MODULE_AUTHOR("Jouni Malinen");
 MODULE_DESCRIPTION("Host AP crypt: WEP");
 MODULE_LICENSE("GPL");
 
-
 struct prism2_wep_data {
        u32 iv;
 #define WEP_KEY_LEN 13
@@ -39,8 +37,7 @@ struct prism2_wep_data {
        struct crypto_tfm *tfm;
 };
 
-
-static void * prism2_wep_init(int keyidx)
+static void *prism2_wep_init(int keyidx)
 {
        struct prism2_wep_data *priv;
 
@@ -62,7 +59,7 @@ static void * prism2_wep_init(int keyidx)
 
        return priv;
 
-fail:
+      fail:
        if (priv) {
                if (priv->tfm)
                        crypto_free_tfm(priv->tfm);
@@ -71,7 +68,6 @@ fail:
        return NULL;
 }
 
-
 static void prism2_wep_deinit(void *priv)
 {
        struct prism2_wep_data *_priv = priv;
@@ -80,7 +76,6 @@ static void prism2_wep_deinit(void *priv)
        kfree(priv);
 }
 
-
 /* Perform WEP encryption on given skb that has at least 4 bytes of headroom
  * for IV and 4 bytes of tailroom for ICV. Both IV and ICV will be transmitted,
  * so the payload length increases with 8 bytes.
@@ -143,7 +138,6 @@ static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
        return 0;
 }
 
-
 /* Perform WEP decryption on given buffer. Buffer includes whole WEP part of
  * the frame: IV (4 bytes), encrypted payload (including SNAP header),
  * ICV (4 bytes). len includes both IV and ICV.
@@ -202,8 +196,7 @@ static int prism2_wep_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
        return 0;
 }
 
-
-static int prism2_wep_set_key(void *key, int len, u8 *seq, void *priv)
+static int prism2_wep_set_key(void *key, int len, u8 * seq, void *priv)
 {
        struct prism2_wep_data *wep = priv;
 
@@ -216,8 +209,7 @@ static int prism2_wep_set_key(void *key, int len, u8 *seq, void *priv)
        return 0;
 }
 
-
-static int prism2_wep_get_key(void *key, int len, u8 *seq, void *priv)
+static int prism2_wep_get_key(void *key, int len, u8 * seq, void *priv)
 {
        struct prism2_wep_data *wep = priv;
 
@@ -229,16 +221,13 @@ static int prism2_wep_get_key(void *key, int len, u8 *seq, void *priv)
        return wep->key_len;
 }
 
-
-static char * prism2_wep_print_stats(char *p, void *priv)
+static char *prism2_wep_print_stats(char *p, void *priv)
 {
        struct prism2_wep_data *wep = priv;
-       p += sprintf(p, "key[%d] alg=WEP len=%d\n",
-                    wep->key_idx, wep->key_len);
+       p += sprintf(p, "key[%d] alg=WEP len=%d\n", wep->key_idx, wep->key_len);
        return p;
 }
 
-
 static struct ieee80211_crypto_ops ieee80211_crypt_wep = {
        .name                   = "WEP",
        .init                   = prism2_wep_init,
@@ -250,23 +239,20 @@ static struct ieee80211_crypto_ops ieee80211_crypt_wep = {
        .set_key                = prism2_wep_set_key,
        .get_key                = prism2_wep_get_key,
        .print_stats            = prism2_wep_print_stats,
-       .extra_prefix_len       = 4, /* IV */
-       .extra_postfix_len      = 4, /* ICV */
+       .extra_prefix_len       = 4,    /* IV */
+       .extra_postfix_len      = 4,    /* ICV */
        .owner                  = THIS_MODULE,
 };
 
-
 static int __init ieee80211_crypto_wep_init(void)
 {
        return ieee80211_register_crypto_ops(&ieee80211_crypt_wep);
 }
 
-
 static void __exit ieee80211_crypto_wep_exit(void)
 {
        ieee80211_unregister_crypto_ops(&ieee80211_crypt_wep);
 }
 
-
 module_init(ieee80211_crypto_wep_init);
 module_exit(ieee80211_crypto_wep_exit);
index 553acb2e93d56a5049c56124dbe6d0ec1e9de6ff..03a47343ddc75a386370e9e07861299faf9e71ae 100644 (file)
@@ -54,7 +54,8 @@
 #include <net/ieee80211.h>
 
 MODULE_DESCRIPTION("802.11 data/management/control stack");
-MODULE_AUTHOR("Copyright (C) 2004 Intel Corporation <jketreno@linux.intel.com>");
+MODULE_AUTHOR
+    ("Copyright (C) 2004 Intel Corporation <jketreno@linux.intel.com>");
 MODULE_LICENSE("GPL");
 
 #define DRV_NAME "ieee80211"
@@ -64,9 +65,9 @@ static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee)
        if (ieee->networks)
                return 0;
 
-       ieee->networks = kmalloc(
-               MAX_NETWORK_COUNT * sizeof(struct ieee80211_network),
-               GFP_KERNEL);
+       ieee->networks =
+           kmalloc(MAX_NETWORK_COUNT * sizeof(struct ieee80211_network),
+                   GFP_KERNEL);
        if (!ieee->networks) {
                printk(KERN_WARNING "%s: Out of memory allocating beacons\n",
                       ieee->dev->name);
@@ -94,10 +95,10 @@ static inline void ieee80211_networks_initialize(struct ieee80211_device *ieee)
        INIT_LIST_HEAD(&ieee->network_free_list);
        INIT_LIST_HEAD(&ieee->network_list);
        for (i = 0; i < MAX_NETWORK_COUNT; i++)
-               list_add_tail(&ieee->networks[i].list, &ieee->network_free_list);
+               list_add_tail(&ieee->networks[i].list,
+                             &ieee->network_free_list);
 }
 
-
 struct net_device *alloc_ieee80211(int sizeof_priv)
 {
        struct ieee80211_device *ieee;
@@ -118,8 +119,7 @@ struct net_device *alloc_ieee80211(int sizeof_priv)
 
        err = ieee80211_networks_allocate(ieee);
        if (err) {
-               IEEE80211_ERROR("Unable to allocate beacon storage: %d\n",
-                               err);
+               IEEE80211_ERROR("Unable to allocate beacon storage: %d\n", err);
                goto failed;
        }
        ieee80211_networks_initialize(ieee);
@@ -132,7 +132,7 @@ struct net_device *alloc_ieee80211(int sizeof_priv)
        /* Default to enabling full open WEP with host based encrypt/decrypt */
        ieee->host_encrypt = 1;
        ieee->host_decrypt = 1;
-       ieee->ieee802_1x = 1; /* Default to supporting 802.1x */
+       ieee->ieee802_1x = 1;   /* Default to supporting 802.1x */
 
        INIT_LIST_HEAD(&ieee->crypt_deinit_list);
        init_timer(&ieee->crypt_deinit_timer);
@@ -141,21 +141,20 @@ struct net_device *alloc_ieee80211(int sizeof_priv)
 
        spin_lock_init(&ieee->lock);
 
-       ieee->wpa_enabled = 0;
-       ieee->tkip_countermeasures = 0;
-       ieee->drop_unencrypted = 0;
-       ieee->privacy_invoked = 0;
-       ieee->ieee802_1x = 1;
+       ieee->wpa_enabled = 0;
+       ieee->tkip_countermeasures = 0;
+       ieee->drop_unencrypted = 0;
+       ieee->privacy_invoked = 0;
+       ieee->ieee802_1x = 1;
 
        return dev;
 
- failed:
     failed:
        if (dev)
                free_netdev(dev);
        return NULL;
 }
 
-
 void free_ieee80211(struct net_device *dev)
 {
        struct ieee80211_device *ieee = netdev_priv(dev);
@@ -193,7 +192,7 @@ static int show_debug_level(char *page, char **start, off_t offset,
        return snprintf(page, count, "0x%08X\n", ieee80211_debug_level);
 }
 
-static int store_debug_level(struct file *file, const char __user *buffer,
+static int store_debug_level(struct file *file, const char __user * buffer,
                             unsigned long count, void *data)
 {
        char buf[] = "0x00000000";
@@ -264,13 +263,12 @@ static void __exit ieee80211_exit(void)
 module_param(debug, int, 0444);
 MODULE_PARM_DESC(debug, "debug output mask");
 
-
 module_exit(ieee80211_exit);
 module_init(ieee80211_init);
 #endif
 
-
-const char *escape_essid(const char *essid, u8 essid_len) {
+const char *escape_essid(const char *essid, u8 essid_len)
+{
        static char escaped[IW_ESSID_MAX_SIZE * 2 + 1];
        const char *s = essid;
        char *d = escaped;
@@ -280,7 +278,7 @@ const char *escape_essid(const char *essid, u8 essid_len) {
                return escaped;
        }
 
-       essid_len = min(essid_len, (u8)IW_ESSID_MAX_SIZE);
+       essid_len = min(essid_len, (u8) IW_ESSID_MAX_SIZE);
        while (essid_len--) {
                if (*s == '\0') {
                        *d++ = '\\';
index a5905f53aed7d377bf29f4a3685def68bbe3b421..f7dcd854139e011c960643a76e2a40ae77566341 100644 (file)
@@ -52,11 +52,14 @@ static inline void ieee80211_monitor_rx(struct ieee80211_device *ieee,
        netif_rx(skb);
 }
 
-
 /* Called only as a tasklet (software IRQ) */
-static struct ieee80211_frag_entry *
-ieee80211_frag_cache_find(struct ieee80211_device *ieee, unsigned int seq,
-                         unsigned int frag, u8 *src, u8 *dst)
+static struct ieee80211_frag_entry *ieee80211_frag_cache_find(struct
+                                                             ieee80211_device
+                                                             *ieee,
+                                                             unsigned int seq,
+                                                             unsigned int frag,
+                                                             u8 * src,
+                                                             u8 * dst)
 {
        struct ieee80211_frag_entry *entry;
        int i;
@@ -65,10 +68,9 @@ ieee80211_frag_cache_find(struct ieee80211_device *ieee, unsigned int seq,
                entry = &ieee->frag_cache[i];
                if (entry->skb != NULL &&
                    time_after(jiffies, entry->first_frag_time + 2 * HZ)) {
-                       IEEE80211_DEBUG_FRAG(
-                               "expiring fragment cache entry "
-                               "seq=%u last_frag=%u\n",
-                               entry->seq, entry->last_frag);
+                       IEEE80211_DEBUG_FRAG("expiring fragment cache entry "
+                                            "seq=%u last_frag=%u\n",
+                                            entry->seq, entry->last_frag);
                        dev_kfree_skb_any(entry->skb);
                        entry->skb = NULL;
                }
@@ -84,9 +86,8 @@ ieee80211_frag_cache_find(struct ieee80211_device *ieee, unsigned int seq,
 }
 
 /* Called only as a tasklet (software IRQ) */
-static struct sk_buff *
-ieee80211_frag_cache_get(struct ieee80211_device *ieee,
-                        struct ieee80211_hdr *hdr)
+static struct sk_buff *ieee80211_frag_cache_get(struct ieee80211_device *ieee,
+                                               struct ieee80211_hdr *hdr)
 {
        struct sk_buff *skb = NULL;
        u16 sc;
@@ -101,9 +102,9 @@ ieee80211_frag_cache_get(struct ieee80211_device *ieee,
                /* Reserve enough space to fit maximum frame length */
                skb = dev_alloc_skb(ieee->dev->mtu +
                                    sizeof(struct ieee80211_hdr) +
-                                   8 /* LLC */ +
-                                   2 /* alignment */ +
-                                   8 /* WEP */ + ETH_ALEN /* WDS */);
+                                   8 /* LLC */  +
+                                   2 /* alignment */  +
+                                   8 /* WEP */  + ETH_ALEN /* WDS */ );
                if (skb == NULL)
                        return NULL;
 
@@ -135,7 +136,6 @@ ieee80211_frag_cache_get(struct ieee80211_device *ieee,
        return skb;
 }
 
-
 /* Called only as a tasklet (software IRQ) */
 static int ieee80211_frag_cache_invalidate(struct ieee80211_device *ieee,
                                           struct ieee80211_hdr *hdr)
@@ -151,9 +151,8 @@ static int ieee80211_frag_cache_invalidate(struct ieee80211_device *ieee,
                                          hdr->addr1);
 
        if (entry == NULL) {
-               IEEE80211_DEBUG_FRAG(
-                       "could not invalidate fragment cache "
-                       "entry (seq=%u)\n", seq);
+               IEEE80211_DEBUG_FRAG("could not invalidate fragment cache "
+                                    "entry (seq=%u)\n", seq);
                return -1;
        }
 
@@ -161,7 +160,6 @@ static int ieee80211_frag_cache_invalidate(struct ieee80211_device *ieee,
        return 0;
 }
 
-
 #ifdef NOT_YET
 /* ieee80211_rx_frame_mgtmt
  *
@@ -201,7 +199,7 @@ ieee80211_rx_frame_mgmt(struct ieee80211_device *ieee, struct sk_buff *skb,
                return 0;
        }
 
-           if (ieee->iw_mode == IW_MODE_MASTER) {
+       if (ieee->iw_mode == IW_MODE_MASTER) {
                if (type != WLAN_FC_TYPE_MGMT && type != WLAN_FC_TYPE_CTRL) {
                        printk(KERN_DEBUG "%s: unknown management frame "
                               "(type=0x%02x, stype=0x%02x) dropped\n",
@@ -219,14 +217,13 @@ ieee80211_rx_frame_mgmt(struct ieee80211_device *ieee, struct sk_buff *skb,
 }
 #endif
 
-
 /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
 /* Ethernet-II snap header (RFC1042 for most EtherTypes) */
-static unsigned char rfc1042_header[] =
-{ 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 };
+static unsigned char rfc1042_header[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 };
+
 /* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */
 static unsigned char bridge_tunnel_header[] =
-{ 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 };
+    { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 };
 /* No encapsulation header if EtherType < 0x600 (=length) */
 
 /* Called by ieee80211_rx_frame_decrypt */
@@ -241,7 +238,7 @@ static int ieee80211_is_eapol_frame(struct ieee80211_device *ieee,
        if (skb->len < 24)
                return 0;
 
-       hdr = (struct ieee80211_hdr *) skb->data;
+       hdr = (struct ieee80211_hdr *)skb->data;
        fc = le16_to_cpu(hdr->frame_ctl);
 
        /* check that the frame is unicast frame to us */
@@ -271,7 +268,7 @@ static int ieee80211_is_eapol_frame(struct ieee80211_device *ieee,
 
 /* Called only as a tasklet (software IRQ), by ieee80211_rx */
 static inline int
-ieee80211_rx_frame_decrypt(struct ieee80211_deviceieee, struct sk_buff *skb,
+ieee80211_rx_frame_decrypt(struct ieee80211_device *ieee, struct sk_buff *skb,
                           struct ieee80211_crypt_data *crypt)
 {
        struct ieee80211_hdr *hdr;
@@ -280,12 +277,11 @@ ieee80211_rx_frame_decrypt(struct ieee80211_device* ieee, struct sk_buff *skb,
        if (crypt == NULL || crypt->ops->decrypt_mpdu == NULL)
                return 0;
 
-       hdr = (struct ieee80211_hdr *) skb->data;
+       hdr = (struct ieee80211_hdr *)skb->data;
        hdrlen = ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_ctl));
 
 #ifdef CONFIG_IEEE80211_CRYPT_TKIP
-       if (ieee->tkip_countermeasures &&
-           strcmp(crypt->ops->name, "TKIP") == 0) {
+       if (ieee->tkip_countermeasures && strcmp(crypt->ops->name, "TKIP") == 0) {
                if (net_ratelimit()) {
                        printk(KERN_DEBUG "%s: TKIP countermeasures: dropped "
                               "received packet from " MAC_FMT "\n",
@@ -299,9 +295,8 @@ ieee80211_rx_frame_decrypt(struct ieee80211_device* ieee, struct sk_buff *skb,
        res = crypt->ops->decrypt_mpdu(skb, hdrlen, crypt->priv);
        atomic_dec(&crypt->refcnt);
        if (res < 0) {
-               IEEE80211_DEBUG_DROP(
-                       "decryption failed (SA=" MAC_FMT
-                       ") res=%d\n", MAC_ARG(hdr->addr2), res);
+               IEEE80211_DEBUG_DROP("decryption failed (SA=" MAC_FMT
+                                    ") res=%d\n", MAC_ARG(hdr->addr2), res);
                if (res == -2)
                        IEEE80211_DEBUG_DROP("Decryption failed ICV "
                                             "mismatch (key %d)\n",
@@ -313,11 +308,11 @@ ieee80211_rx_frame_decrypt(struct ieee80211_device* ieee, struct sk_buff *skb,
        return res;
 }
 
-
 /* Called only as a tasklet (software IRQ), by ieee80211_rx */
 static inline int
-ieee80211_rx_frame_decrypt_msdu(struct ieee80211_device* ieee, struct sk_buff *skb,
-                            int keyidx, struct ieee80211_crypt_data *crypt)
+ieee80211_rx_frame_decrypt_msdu(struct ieee80211_device *ieee,
+                               struct sk_buff *skb, int keyidx,
+                               struct ieee80211_crypt_data *crypt)
 {
        struct ieee80211_hdr *hdr;
        int res, hdrlen;
@@ -325,7 +320,7 @@ ieee80211_rx_frame_decrypt_msdu(struct ieee80211_device* ieee, struct sk_buff *s
        if (crypt == NULL || crypt->ops->decrypt_msdu == NULL)
                return 0;
 
-       hdr = (struct ieee80211_hdr *) skb->data;
+       hdr = (struct ieee80211_hdr *)skb->data;
        hdrlen = ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_ctl));
 
        atomic_inc(&crypt->refcnt);
@@ -341,7 +336,6 @@ ieee80211_rx_frame_decrypt_msdu(struct ieee80211_device* ieee, struct sk_buff *s
        return 0;
 }
 
-
 /* All received frames are sent to this function. @skb contains the frame in
  * IEEE 802.11 format, i.e., in the format it was sent over air.
  * This function is called only as a tasklet (software IRQ). */
@@ -373,8 +367,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
        stats = &ieee->stats;
 
        if (skb->len < 10) {
-               printk(KERN_INFO "%s: SKB length < 10\n",
-                      dev->name);
+               printk(KERN_INFO "%s: SKB length < 10\n", dev->name);
                goto rx_dropped;
        }
 
@@ -399,8 +392,8 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
                /* Update spy records */
                wireless_spy_update(dev, hdr->addr2, &wstats);
        }
-#endif /* IW_WIRELESS_SPY */
-#endif /* WIRELESS_EXT > 15 */
+#endif                         /* IW_WIRELESS_SPY */
+#endif                         /* WIRELESS_EXT > 15 */
        hostap_update_rx_stats(local->ap, hdr, rx_stats);
 #endif
 
@@ -429,8 +422,8 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
                 * stations that do not support WEP key mapping). */
 
                if (!(hdr->addr1[0] & 0x01) || local->bcrx_sta_key)
-                       (void) hostap_handle_sta_crypto(local, hdr, &crypt,
-                                                       &sta);
+                       (void)hostap_handle_sta_crypto(local, hdr, &crypt,
+                                                      &sta);
 #endif
 
                /* allow NULL decrypt to indicate an station specific override
@@ -451,13 +444,11 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
                        goto rx_dropped;
                }
        }
-
 #ifdef NOT_YET
        if (type != WLAN_FC_TYPE_DATA) {
                if (type == WLAN_FC_TYPE_MGMT && stype == WLAN_FC_STYPE_AUTH &&
                    fc & IEEE80211_FCTL_PROTECTED && ieee->host_decrypt &&
-                   (keyidx = hostap_rx_frame_decrypt(ieee, skb, crypt)) < 0)
-               {
+                   (keyidx = hostap_rx_frame_decrypt(ieee, skb, crypt)) < 0) {
                        printk(KERN_DEBUG "%s: failed to decrypt mgmt::auth "
                               "from " MAC_FMT "\n", dev->name,
                               MAC_ARG(hdr->addr2));
@@ -507,9 +498,9 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
        }
 
        if (ieee->iw_mode == IW_MODE_MASTER && !wds &&
-           (fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) == IEEE80211_FCTL_FROMDS &&
-           ieee->stadev &&
-           memcmp(hdr->addr2, ieee->assoc_ap_addr, ETH_ALEN) == 0) {
+           (fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) ==
+           IEEE80211_FCTL_FROMDS && ieee->stadev
+           && memcmp(hdr->addr2, ieee->assoc_ap_addr, ETH_ALEN) == 0) {
                /* Frame from BSSID of the AP for which we are a client */
                skb->dev = dev = ieee->stadev;
                stats = hostap_get_stats(dev);
@@ -521,8 +512,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
 
 #ifdef NOT_YET
        if ((ieee->iw_mode == IW_MODE_MASTER ||
-            ieee->iw_mode == IW_MODE_REPEAT) &&
-           !from_assoc_ap) {
+            ieee->iw_mode == IW_MODE_REPEAT) && !from_assoc_ap) {
                switch (hostap_handle_sta_rx(ieee, dev, skb, rx_stats,
                                             wds != NULL)) {
                case AP_RX_CONTINUE_NOT_AUTHORIZED:
@@ -546,11 +536,10 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
            stype != IEEE80211_STYPE_DATA_CFPOLL &&
            stype != IEEE80211_STYPE_DATA_CFACKPOLL) {
                if (stype != IEEE80211_STYPE_NULLFUNC)
-                       IEEE80211_DEBUG_DROP(
-                               "RX: dropped data frame "
-                               "with no data (type=0x%02x, "
-                               "subtype=0x%02x, len=%d)\n",
-                               type, stype, skb->len);
+                       IEEE80211_DEBUG_DROP("RX: dropped data frame "
+                                            "with no data (type=0x%02x, "
+                                            "subtype=0x%02x, len=%d)\n",
+                                            type, stype, skb->len);
                goto rx_dropped;
        }
 
@@ -560,7 +549,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
            (keyidx = ieee80211_rx_frame_decrypt(ieee, skb, crypt)) < 0)
                goto rx_dropped;
 
-       hdr = (struct ieee80211_hdr *) skb->data;
+       hdr = (struct ieee80211_hdr *)skb->data;
 
        /* skb: hdr + (possibly fragmented) plaintext payload */
        // PR: FIXME: hostap has additional conditions in the "if" below:
@@ -614,7 +603,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
                /* this was the last fragment and the frame will be
                 * delivered, so remove skb from fragment cache */
                skb = frag_skb;
-               hdr = (struct ieee80211_hdr *) skb->data;
+               hdr = (struct ieee80211_hdr *)skb->data;
                ieee80211_frag_cache_invalidate(ieee, hdr);
        }
 
@@ -624,28 +613,26 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
            ieee80211_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt))
                goto rx_dropped;
 
-       hdr = (struct ieee80211_hdr *) skb->data;
+       hdr = (struct ieee80211_hdr *)skb->data;
        if (crypt && !(fc & IEEE80211_FCTL_PROTECTED) && !ieee->open_wep) {
-               if (/*ieee->ieee802_1x &&*/
-                   ieee80211_is_eapol_frame(ieee, skb)) {
+               if (            /*ieee->ieee802_1x && */
+                          ieee80211_is_eapol_frame(ieee, skb)) {
                        /* pass unencrypted EAPOL frames even if encryption is
                         * configured */
                } else {
-                       IEEE80211_DEBUG_DROP(
-                               "encryption configured, but RX "
-                               "frame not encrypted (SA=" MAC_FMT ")\n",
-                               MAC_ARG(hdr->addr2));
+                       IEEE80211_DEBUG_DROP("encryption configured, but RX "
+                                            "frame not encrypted (SA=" MAC_FMT
+                                            ")\n", MAC_ARG(hdr->addr2));
                        goto rx_dropped;
                }
        }
 
        if (crypt && !(fc & IEEE80211_FCTL_PROTECTED) && !ieee->open_wep &&
            !ieee80211_is_eapol_frame(ieee, skb)) {
-               IEEE80211_DEBUG_DROP(
-                       "dropped unencrypted RX data "
-                       "frame from " MAC_FMT
-                       " (drop_unencrypted=1)\n",
-                       MAC_ARG(hdr->addr2));
+               IEEE80211_DEBUG_DROP("dropped unencrypted RX data "
+                                    "frame from " MAC_FMT
+                                    " (drop_unencrypted=1)\n",
+                                    MAC_ARG(hdr->addr2));
                goto rx_dropped;
        }
 
@@ -673,8 +660,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
                } else if (!frame_authorized) {
                        printk(KERN_DEBUG "%s: dropped frame from "
                               "unauthorized port (IEEE 802.1X): "
-                              "ethertype=0x%04x\n",
-                              dev->name, ethertype);
+                              "ethertype=0x%04x\n", dev->name, ethertype);
                        goto rx_dropped;
                }
        }
@@ -702,8 +688,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
 
 #ifdef NOT_YET
        if (wds && ((fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) ==
-                   IEEE80211_FCTL_TODS) &&
-           skb->len >= ETH_HLEN + ETH_ALEN) {
+                   IEEE80211_FCTL_TODS) && skb->len >= ETH_HLEN + ETH_ALEN) {
                /* Non-standard frame: get addr4 from its bogus location after
                 * the payload */
                memcpy(skb->data + ETH_ALEN,
@@ -716,8 +701,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
        stats->rx_bytes += skb->len;
 
 #ifdef NOT_YET
-       if (ieee->iw_mode == IW_MODE_MASTER && !wds &&
-           ieee->ap->bridge_packets) {
+       if (ieee->iw_mode == IW_MODE_MASTER && !wds && ieee->ap->bridge_packets) {
                if (dst[0] & 0x01) {
                        /* copy multicast frame both to the higher layers and
                         * to the wireless media */
@@ -743,25 +727,24 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
                skb2->dev = dev;
                dev_queue_xmit(skb2);
        }
-
 #endif
 
        if (skb) {
                skb->protocol = eth_type_trans(skb, dev);
                memset(skb->cb, 0, sizeof(skb->cb));
                skb->dev = dev;
-               skb->ip_summed = CHECKSUM_NONE; /* 802.11 crc not sufficient */
+               skb->ip_summed = CHECKSUM_NONE; /* 802.11 crc not sufficient */
                netif_rx(skb);
        }
 
- rx_exit:
     rx_exit:
 #ifdef NOT_YET
        if (sta)
                hostap_handle_sta_release(sta);
 #endif
        return 1;
 
- rx_dropped:
     rx_dropped:
        stats->rx_dropped++;
 
        /* Returning 0 indicates to caller that we have not handled the SKB--
@@ -785,22 +768,21 @@ static inline int ieee80211_is_ofdm_rate(u8 rate)
        case IEEE80211_OFDM_RATE_54MB:
                return 1;
        }
-        return 0;
+       return 0;
 }
 
-
-static inline int ieee80211_network_init(
-       struct ieee80211_device *ieee,
-       struct ieee80211_probe_response *beacon,
-       struct ieee80211_network *network,
-       struct ieee80211_rx_stats *stats)
+static inline int ieee80211_network_init(struct ieee80211_device *ieee,
+                                        struct ieee80211_probe_response
+                                        *beacon,
+                                        struct ieee80211_network *network,
+                                        struct ieee80211_rx_stats *stats)
 {
 #ifdef CONFIG_IEEE80211_DEBUG
        char rates_str[64];
        char *p;
 #endif
        struct ieee80211_info_element *info_element;
-       u16 left;
+       u16 left;
        u8 i;
 
        /* Pull out fixed field data */
@@ -810,7 +792,7 @@ static inline int ieee80211_network_init(
        network->time_stamp[0] = beacon->time_stamp[0];
        network->time_stamp[1] = beacon->time_stamp[1];
        network->beacon_interval = beacon->beacon_interval;
-       /* Where to pull this? beacon->listen_interval;*/
+       /* Where to pull this? beacon->listen_interval; */
        network->listen_interval = 0x0A;
        network->rates_len = network->rates_ex_len = 0;
        network->last_associate = 0;
@@ -824,18 +806,20 @@ static inline int ieee80211_network_init(
        } else
                network->flags |= NETWORK_HAS_CCK;
 
-       network->wpa_ie_len = 0;
-       network->rsn_ie_len = 0;
+       network->wpa_ie_len = 0;
+       network->rsn_ie_len = 0;
 
-       info_element = &beacon->info_element;
+       info_element = &beacon->info_element;
        left = stats->len - ((void *)info_element - (void *)beacon);
        while (left >= sizeof(struct ieee80211_info_element_hdr)) {
-               if (sizeof(struct ieee80211_info_element_hdr) + info_element->len > left) {
-                       IEEE80211_DEBUG_SCAN("SCAN: parse failed: info_element->len + 2 > left : info_element->len+2=%Zd left=%d.\n",
-                                            info_element->len + sizeof(struct ieee80211_info_element),
-                                            left);
+               if (sizeof(struct ieee80211_info_element_hdr) +
+                   info_element->len > left) {
+                       IEEE80211_DEBUG_SCAN
+                           ("SCAN: parse failed: info_element->len + 2 > left : info_element->len+2=%Zd left=%d.\n",
+                            info_element->len +
+                            sizeof(struct ieee80211_info_element), left);
                        return 1;
-                       }
+               }
 
                switch (info_element->id) {
                case MFIE_TYPE_SSID:
@@ -846,10 +830,11 @@ static inline int ieee80211_network_init(
                        }
 
                        network->ssid_len = min(info_element->len,
-                                               (u8)IW_ESSID_MAX_SIZE);
-                       memcpy(network->ssid, info_element->data, network->ssid_len);
-                       if (network->ssid_len < IW_ESSID_MAX_SIZE)
-                               memset(network->ssid + network->ssid_len, 0,
+                                               (u8) IW_ESSID_MAX_SIZE);
+                       memcpy(network->ssid, info_element->data,
+                              network->ssid_len);
+                       if (network->ssid_len < IW_ESSID_MAX_SIZE)
+                               memset(network->ssid + network->ssid_len, 0,
                                       IW_ESSID_MAX_SIZE - network->ssid_len);
 
                        IEEE80211_DEBUG_SCAN("MFIE_TYPE_SSID: '%s' len=%d.\n",
@@ -860,18 +845,23 @@ static inline int ieee80211_network_init(
 #ifdef CONFIG_IEEE80211_DEBUG
                        p = rates_str;
 #endif
-                       network->rates_len = min(info_element->len, MAX_RATES_LENGTH);
+                       network->rates_len =
+                           min(info_element->len, MAX_RATES_LENGTH);
                        for (i = 0; i < network->rates_len; i++) {
                                network->rates[i] = info_element->data[i];
 #ifdef CONFIG_IEEE80211_DEBUG
-                               p += snprintf(p, sizeof(rates_str) - (p - rates_str), "%02X ", network->rates[i]);
+                               p += snprintf(p,
+                                             sizeof(rates_str) - (p -
+                                                                  rates_str),
+                                             "%02X ", network->rates[i]);
 #endif
-                               if (ieee80211_is_ofdm_rate(info_element->data[i])) {
+                               if (ieee80211_is_ofdm_rate
+                                   (info_element->data[i])) {
                                        network->flags |= NETWORK_HAS_OFDM;
                                        if (info_element->data[i] &
                                            IEEE80211_BASIC_RATE_MASK)
                                                network->flags &=
-                                                       ~NETWORK_HAS_CCK;
+                                                   ~NETWORK_HAS_CCK;
                                }
                        }
 
@@ -883,18 +873,23 @@ static inline int ieee80211_network_init(
 #ifdef CONFIG_IEEE80211_DEBUG
                        p = rates_str;
 #endif
-                       network->rates_ex_len = min(info_element->len, MAX_RATES_EX_LENGTH);
+                       network->rates_ex_len =
+                           min(info_element->len, MAX_RATES_EX_LENGTH);
                        for (i = 0; i < network->rates_ex_len; i++) {
                                network->rates_ex[i] = info_element->data[i];
 #ifdef CONFIG_IEEE80211_DEBUG
-                               p += snprintf(p, sizeof(rates_str) - (p - rates_str), "%02X ", network->rates[i]);
+                               p += snprintf(p,
+                                             sizeof(rates_str) - (p -
+                                                                  rates_str),
+                                             "%02X ", network->rates[i]);
 #endif
-                               if (ieee80211_is_ofdm_rate(info_element->data[i])) {
+                               if (ieee80211_is_ofdm_rate
+                                   (info_element->data[i])) {
                                        network->flags |= NETWORK_HAS_OFDM;
                                        if (info_element->data[i] &
                                            IEEE80211_BASIC_RATE_MASK)
                                                network->flags &=
-                                                       ~NETWORK_HAS_CCK;
+                                                   ~NETWORK_HAS_CCK;
                                }
                        }
 
@@ -903,14 +898,14 @@ static inline int ieee80211_network_init(
                        break;
 
                case MFIE_TYPE_DS_SET:
-                       IEEE80211_DEBUG_SCAN("MFIE_TYPE_DS_SET: %d\n",
+                       IEEE80211_DEBUG_SCAN("MFIE_TYPE_DS_SET: %d\n",
                                             info_element->data[0]);
                        if (stats->freq == IEEE80211_24GHZ_BAND)
                                network->channel = info_element->data[0];
                        break;
 
-               case MFIE_TYPE_FH_SET:
-                       IEEE80211_DEBUG_SCAN("MFIE_TYPE_FH_SET: ignored\n");
+               case MFIE_TYPE_FH_SET:
+                       IEEE80211_DEBUG_SCAN("MFIE_TYPE_FH_SET: ignored\n");
                        break;
 
                case MFIE_TYPE_CF_SET:
@@ -932,13 +927,13 @@ static inline int ieee80211_network_init(
                case MFIE_TYPE_GENERIC:
                        IEEE80211_DEBUG_SCAN("MFIE_TYPE_GENERIC: %d bytes\n",
                                             info_element->len);
-                       if (info_element->len >= 4  &&
+                       if (info_element->len >= 4 &&
                            info_element->data[0] == 0x00 &&
                            info_element->data[1] == 0x50 &&
                            info_element->data[2] == 0xf2 &&
                            info_element->data[3] == 0x01) {
                                network->wpa_ie_len = min(info_element->len + 2,
-                                                        MAX_WPA_IE_LEN);
+                                                         MAX_WPA_IE_LEN);
                                memcpy(network->wpa_ie, info_element,
                                       network->wpa_ie_len);
                        }
@@ -948,7 +943,7 @@ static inline int ieee80211_network_init(
                        IEEE80211_DEBUG_SCAN("MFIE_TYPE_RSN: %d bytes\n",
                                             info_element->len);
                        network->rsn_ie_len = min(info_element->len + 2,
-                                                MAX_WPA_IE_LEN);
+                                                 MAX_WPA_IE_LEN);
                        memcpy(network->rsn_ie, info_element,
                               network->rsn_ie_len);
                        break;
@@ -956,14 +951,14 @@ static inline int ieee80211_network_init(
                default:
                        IEEE80211_DEBUG_SCAN("unsupported IE %d\n",
                                             info_element->id);
-                        break;
-               }
+                       break;
+               }
 
                left -= sizeof(struct ieee80211_info_element_hdr) +
-                       info_element->len;
+                   info_element->len;
                info_element = (struct ieee80211_info_element *)
-                       &info_element->data[info_element->len];
-       }
+                   &info_element->data[info_element->len];
+       }
 
        network->mode = 0;
        if (stats->freq == IEEE80211_52GHZ_BAND)
@@ -1032,10 +1027,13 @@ static inline void update_network(struct ieee80211_network *dst,
        /* dst->last_associate is not overwritten */
 }
 
-static inline void ieee80211_process_probe_response(
-       struct ieee80211_device *ieee,
-       struct ieee80211_probe_response *beacon,
-       struct ieee80211_rx_stats *stats)
+static inline void ieee80211_process_probe_response(struct ieee80211_device
+                                                   *ieee,
+                                                   struct
+                                                   ieee80211_probe_response
+                                                   *beacon,
+                                                   struct ieee80211_rx_stats
+                                                   *stats)
 {
        struct ieee80211_network network;
        struct ieee80211_network *target;
@@ -1045,33 +1043,35 @@ static inline void ieee80211_process_probe_response(
 #endif
        unsigned long flags;
 
-       IEEE80211_DEBUG_SCAN(
-               "'%s' (" MAC_FMT "): %c%c%c%c %c%c%c%c-%c%c%c%c %c%c%c%c\n",
-               escape_essid(info_element->data, info_element->len),
-               MAC_ARG(beacon->header.addr3),
-               (beacon->capability & (1<<0xf)) ? '1' : '0',
-               (beacon->capability & (1<<0xe)) ? '1' : '0',
-               (beacon->capability & (1<<0xd)) ? '1' : '0',
-               (beacon->capability & (1<<0xc)) ? '1' : '0',
-               (beacon->capability & (1<<0xb)) ? '1' : '0',
-               (beacon->capability & (1<<0xa)) ? '1' : '0',
-               (beacon->capability & (1<<0x9)) ? '1' : '0',
-               (beacon->capability & (1<<0x8)) ? '1' : '0',
-               (beacon->capability & (1<<0x7)) ? '1' : '0',
-               (beacon->capability & (1<<0x6)) ? '1' : '0',
-               (beacon->capability & (1<<0x5)) ? '1' : '0',
-               (beacon->capability & (1<<0x4)) ? '1' : '0',
-               (beacon->capability & (1<<0x3)) ? '1' : '0',
-               (beacon->capability & (1<<0x2)) ? '1' : '0',
-               (beacon->capability & (1<<0x1)) ? '1' : '0',
-               (beacon->capability & (1<<0x0)) ? '1' : '0');
+       IEEE80211_DEBUG_SCAN("'%s' (" MAC_FMT
+                            "): %c%c%c%c %c%c%c%c-%c%c%c%c %c%c%c%c\n",
+                            escape_essid(info_element->data,
+                                         info_element->len),
+                            MAC_ARG(beacon->header.addr3),
+                            (beacon->capability & (1 << 0xf)) ? '1' : '0',
+                            (beacon->capability & (1 << 0xe)) ? '1' : '0',
+                            (beacon->capability & (1 << 0xd)) ? '1' : '0',
+                            (beacon->capability & (1 << 0xc)) ? '1' : '0',
+                            (beacon->capability & (1 << 0xb)) ? '1' : '0',
+                            (beacon->capability & (1 << 0xa)) ? '1' : '0',
+                            (beacon->capability & (1 << 0x9)) ? '1' : '0',
+                            (beacon->capability & (1 << 0x8)) ? '1' : '0',
+                            (beacon->capability & (1 << 0x7)) ? '1' : '0',
+                            (beacon->capability & (1 << 0x6)) ? '1' : '0',
+                            (beacon->capability & (1 << 0x5)) ? '1' : '0',
+                            (beacon->capability & (1 << 0x4)) ? '1' : '0',
+                            (beacon->capability & (1 << 0x3)) ? '1' : '0',
+                            (beacon->capability & (1 << 0x2)) ? '1' : '0',
+                            (beacon->capability & (1 << 0x1)) ? '1' : '0',
+                            (beacon->capability & (1 << 0x0)) ? '1' : '0');
 
        if (ieee80211_network_init(ieee, beacon, &network, stats)) {
                IEEE80211_DEBUG_SCAN("Dropped '%s' (" MAC_FMT ") via %s.\n",
                                     escape_essid(info_element->data,
                                                  info_element->len),
                                     MAC_ARG(beacon->header.addr3),
-                                    WLAN_FC_GET_STYPE(beacon->header.frame_ctl) ==
+                                    WLAN_FC_GET_STYPE(beacon->header.
+                                                      frame_ctl) ==
                                     IEEE80211_STYPE_PROBE_RESP ?
                                     "PROBE RESPONSE" : "BEACON");
                return;
@@ -1117,13 +1117,13 @@ static inline void ieee80211_process_probe_response(
                        list_del(ieee->network_free_list.next);
                }
 
-
 #ifdef CONFIG_IEEE80211_DEBUG
                IEEE80211_DEBUG_SCAN("Adding '%s' (" MAC_FMT ") via %s.\n",
                                     escape_essid(network.ssid,
                                                  network.ssid_len),
                                     MAC_ARG(network.bssid),
-                                    WLAN_FC_GET_STYPE(beacon->header.frame_ctl) ==
+                                    WLAN_FC_GET_STYPE(beacon->header.
+                                                      frame_ctl) ==
                                     IEEE80211_STYPE_PROBE_RESP ?
                                     "PROBE RESPONSE" : "BEACON");
 #endif
@@ -1134,7 +1134,8 @@ static inline void ieee80211_process_probe_response(
                                     escape_essid(target->ssid,
                                                  target->ssid_len),
                                     MAC_ARG(target->bssid),
-                                    WLAN_FC_GET_STYPE(beacon->header.frame_ctl) ==
+                                    WLAN_FC_GET_STYPE(beacon->header.
+                                                      frame_ctl) ==
                                     IEEE80211_STYPE_PROBE_RESP ?
                                     "PROBE RESPONSE" : "BEACON");
                update_network(target, &network);
@@ -1162,16 +1163,20 @@ void ieee80211_rx_mgt(struct ieee80211_device *ieee,
                IEEE80211_DEBUG_MGMT("received PROBE RESPONSE (%d)\n",
                                     WLAN_FC_GET_STYPE(header->frame_ctl));
                IEEE80211_DEBUG_SCAN("Probe response\n");
-               ieee80211_process_probe_response(
-                       ieee, (struct ieee80211_probe_response *)header, stats);
+               ieee80211_process_probe_response(ieee,
+                                                (struct
+                                                 ieee80211_probe_response *)
+                                                header, stats);
                break;
 
        case IEEE80211_STYPE_BEACON:
                IEEE80211_DEBUG_MGMT("received BEACON (%d)\n",
                                     WLAN_FC_GET_STYPE(header->frame_ctl));
                IEEE80211_DEBUG_SCAN("Beacon\n");
-               ieee80211_process_probe_response(
-                       ieee, (struct ieee80211_probe_response *)header, stats);
+               ieee80211_process_probe_response(ieee,
+                                                (struct
+                                                 ieee80211_probe_response *)
+                                                header, stats);
                break;
 
        default:
@@ -1184,6 +1189,5 @@ void ieee80211_rx_mgt(struct ieee80211_device *ieee,
        }
 }
 
-
 EXPORT_SYMBOL(ieee80211_rx_mgt);
 EXPORT_SYMBOL(ieee80211_rx);
index b7ea3e25e25d794bacb633563b8ca4b75c6a6595..c9aaff3fea1e41f8c0211253b44cefec0edf5345 100644 (file)
 
 #include <net/ieee80211.h>
 
-
 /*
 
-
 802.11 Data Frame
 
       ,-------------------------------------------------------------------.
@@ -82,7 +80,6 @@ Desc. | IV  | Encrypted | ICV |
       `-----------------------'
 Total: 8 non-data bytes
 
-
 802.3 Ethernet Data Frame
 
       ,-----------------------------------------.
@@ -131,7 +128,7 @@ payload of each frame is reduced to 492 bytes.
 static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 };
 static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 };
 
-static inline int ieee80211_put_snap(u8 *data, u16 h_proto)
+static inline int ieee80211_put_snap(u8 * data, u16 h_proto)
 {
        struct ieee80211_snap_hdr *snap;
        u8 *oui;
@@ -149,17 +146,15 @@ static inline int ieee80211_put_snap(u8 *data, u16 h_proto)
        snap->oui[1] = oui[1];
        snap->oui[2] = oui[2];
 
-       *(u16 *)(data + SNAP_SIZE) = htons(h_proto);
+       *(u16 *) (data + SNAP_SIZE) = htons(h_proto);
 
        return SNAP_SIZE + sizeof(u16);
 }
 
-static inline int ieee80211_encrypt_fragment(
-       struct ieee80211_device *ieee,
-       struct sk_buff *frag,
-       int hdr_len)
+static inline int ieee80211_encrypt_fragment(struct ieee80211_device *ieee,
+                                            struct sk_buff *frag, int hdr_len)
 {
-       struct ieee80211_crypt_datacrypt = ieee->crypt[ieee->tx_keyidx];
+       struct ieee80211_crypt_data *crypt = ieee->crypt[ieee->tx_keyidx];
        int res;
 
 #ifdef CONFIG_IEEE80211_CRYPT_TKIP
@@ -167,7 +162,7 @@ static inline int ieee80211_encrypt_fragment(
 
        if (ieee->tkip_countermeasures &&
            crypt && crypt->ops && strcmp(crypt->ops->name, "TKIP") == 0) {
-               header = (struct ieee80211_hdr *) frag->data;
+               header = (struct ieee80211_hdr *)frag->data;
                if (net_ratelimit()) {
                        printk(KERN_DEBUG "%s: TKIP countermeasures: dropped "
                               "TX packet to " MAC_FMT "\n",
@@ -200,8 +195,8 @@ static inline int ieee80211_encrypt_fragment(
        return 0;
 }
 
-
-void ieee80211_txb_free(struct ieee80211_txb *txb) {
+void ieee80211_txb_free(struct ieee80211_txb *txb)
+{
        int i;
        if (unlikely(!txb))
                return;
@@ -216,9 +211,8 @@ static struct ieee80211_txb *ieee80211_alloc_txb(int nr_frags, int txb_size,
 {
        struct ieee80211_txb *txb;
        int i;
-       txb = kmalloc(
-               sizeof(struct ieee80211_txb) + (sizeof(u8*) * nr_frags),
-               gfp_mask);
+       txb = kmalloc(sizeof(struct ieee80211_txb) + (sizeof(u8 *) * nr_frags),
+                     gfp_mask);
        if (!txb)
                return NULL;
 
@@ -243,8 +237,7 @@ static struct ieee80211_txb *ieee80211_alloc_txb(int nr_frags, int txb_size,
 }
 
 /* SKBs are added to the ieee->tx_queue. */
-int ieee80211_xmit(struct sk_buff *skb,
-                  struct net_device *dev)
+int ieee80211_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct ieee80211_device *ieee = netdev_priv(dev);
        struct ieee80211_txb *txb = NULL;
@@ -255,21 +248,20 @@ int ieee80211_xmit(struct sk_buff *skb,
        int ether_type, encrypt;
        int bytes, fc, hdr_len;
        struct sk_buff *skb_frag;
-       struct ieee80211_hdr header = { /* Ensure zero initialized */
+       struct ieee80211_hdr header = { /* Ensure zero initialized */
                .duration_id = 0,
                .seq_ctl = 0
        };
        u8 dest[ETH_ALEN], src[ETH_ALEN];
 
-       struct ieee80211_crypt_datacrypt;
+       struct ieee80211_crypt_data *crypt;
 
        spin_lock_irqsave(&ieee->lock, flags);
 
        /* If there is no driver handler to take the TXB, dont' bother
         * creating it... */
        if (!ieee->hard_start_xmit) {
-               printk(KERN_WARNING "%s: No xmit handler.\n",
-                      ieee->dev->name);
+               printk(KERN_WARNING "%s: No xmit handler.\n", ieee->dev->name);
                goto success;
        }
 
@@ -284,7 +276,7 @@ int ieee80211_xmit(struct sk_buff *skb,
        crypt = ieee->crypt[ieee->tx_keyidx];
 
        encrypt = !(ether_type == ETH_P_PAE && ieee->ieee802_1x) &&
-               ieee->host_encrypt && crypt && crypt->ops;
+           ieee->host_encrypt && crypt && crypt->ops;
 
        if (!encrypt && ieee->ieee802_1x &&
            ieee->drop_unencrypted && ether_type != ETH_P_PAE) {
@@ -294,7 +286,7 @@ int ieee80211_xmit(struct sk_buff *skb,
 
        /* Save source and destination addresses */
        memcpy(&dest, skb->data, ETH_ALEN);
-       memcpy(&src, skb->data+ETH_ALEN, ETH_ALEN);
+       memcpy(&src, skb->data + ETH_ALEN, ETH_ALEN);
 
        /* Advance the SKB to the start of the payload */
        skb_pull(skb, sizeof(struct ethhdr));
@@ -304,7 +296,7 @@ int ieee80211_xmit(struct sk_buff *skb,
 
        if (encrypt)
                fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA |
-                       IEEE80211_FCTL_PROTECTED;
+                   IEEE80211_FCTL_PROTECTED;
        else
                fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA;
 
@@ -327,8 +319,7 @@ int ieee80211_xmit(struct sk_buff *skb,
 
        /* Determine fragmentation size based on destination (multicast
         * and broadcast are not fragmented) */
-       if (is_multicast_ether_addr(dest) ||
-           is_broadcast_ether_addr(dest))
+       if (is_multicast_ether_addr(dest) || is_broadcast_ether_addr(dest))
                frag_size = MAX_FRAG_THRESHOLD;
        else
                frag_size = ieee->fts;
@@ -345,7 +336,7 @@ int ieee80211_xmit(struct sk_buff *skb,
        /* Each fragment may need to have room for encryptiong pre/postfix */
        if (encrypt)
                bytes_per_frag -= crypt->ops->extra_prefix_len +
-                       crypt->ops->extra_postfix_len;
+                   crypt->ops->extra_postfix_len;
 
        /* Number of fragments is the total bytes_per_frag /
         * payload_per_fragment */
@@ -380,19 +371,19 @@ int ieee80211_xmit(struct sk_buff *skb,
                /* If this is not the last fragment, then add the MOREFRAGS
                 * bit to the frame control */
                if (i != nr_frags - 1) {
-                       frag_hdr->frame_ctl = cpu_to_le16(
-                               fc | IEEE80211_FCTL_MOREFRAGS);
+                       frag_hdr->frame_ctl =
+                           cpu_to_le16(fc | IEEE80211_FCTL_MOREFRAGS);
                        bytes = bytes_per_frag;
                } else {
                        /* The last fragment takes the remaining length */
                        bytes = bytes_last_frag;
                }
 
-               /* Put a SNAP header on the first fragment */
+               /* Put a SNAP header on the first fragment */
                if (i == 0) {
-                       ieee80211_put_snap(
-                               skb_put(skb_frag, SNAP_SIZE + sizeof(u16)),
-                               ether_type);
+                       ieee80211_put_snap(skb_put
+                                          (skb_frag, SNAP_SIZE + sizeof(u16)),
+                                          ether_type);
                        bytes -= SNAP_SIZE + sizeof(u16);
                }
 
@@ -410,14 +401,13 @@ int ieee80211_xmit(struct sk_buff *skb,
                        skb_put(skb_frag, 4);
        }
 
-
- success:
+      success:
        spin_unlock_irqrestore(&ieee->lock, flags);
 
        dev_kfree_skb_any(skb);
 
        if (txb) {
-               if ((*ieee->hard_start_xmit)(txb, dev) == 0) {
+               if ((*ieee->hard_start_xmit) (txb, dev) == 0) {
                        stats->tx_packets++;
                        stats->tx_bytes += txb->payload_size;
                        return 0;
@@ -427,7 +417,7 @@ int ieee80211_xmit(struct sk_buff *skb,
 
        return 0;
 
- failed:
     failed:
        spin_unlock_irqrestore(&ieee->lock, flags);
        netif_stop_queue(dev);
        stats->tx_errors++;
index 2cd571c525a96cb4cad449f731479b15e582d972..94882f39b0728f9ec92c11f7545f9755bdd10c90 100644 (file)
   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
 
 ******************************************************************************/
-#include <linux/wireless.h>
-#include <linux/version.h>
+
 #include <linux/kmod.h>
 #include <linux/module.h>
 
 #include <net/ieee80211.h>
+#include <linux/wireless.h>
+
 static const char *ieee80211_modes[] = {
        "?", "a", "b", "ab", "g", "ag", "bg", "abg"
 };
 
 #define MAX_CUSTOM_LEN 64
 static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee,
-                                          char *start, char *stop,
+                                          char *start, char *stop,
                                           struct ieee80211_network *network)
 {
        char custom[MAX_CUSTOM_LEN];
@@ -65,29 +66,28 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee,
                iwe.u.data.length = sizeof("<hidden>");
                start = iwe_stream_add_point(start, stop, &iwe, "<hidden>");
        } else {
-               iwe.u.data.length = min(network->ssid_len, (u8)32);
+               iwe.u.data.length = min(network->ssid_len, (u8) 32);
                start = iwe_stream_add_point(start, stop, &iwe, network->ssid);
        }
 
        /* Add the protocol name */
        iwe.cmd = SIOCGIWNAME;
-       snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11%s", ieee80211_modes[network->mode]);
+       snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11%s",
+                ieee80211_modes[network->mode]);
        start = iwe_stream_add_event(start, stop, &iwe, IW_EV_CHAR_LEN);
 
-        /* Add mode */
-        iwe.cmd = SIOCGIWMODE;
-        if (network->capability &
-           (WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_IBSS)) {
+       /* Add mode */
+       iwe.cmd = SIOCGIWMODE;
+       if (network->capability & (WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_IBSS)) {
                if (network->capability & WLAN_CAPABILITY_ESS)
                        iwe.u.mode = IW_MODE_MASTER;
                else
                        iwe.u.mode = IW_MODE_ADHOC;
 
-               start = iwe_stream_add_event(start, stop, &iwe,
-                                            IW_EV_UINT_LEN);
+               start = iwe_stream_add_event(start, stop, &iwe, IW_EV_UINT_LEN);
        }
 
-        /* Add frequency/channel */
+       /* Add frequency/channel */
        iwe.cmd = SIOCGIWFREQ;
 /*     iwe.u.freq.m = ieee80211_frequency(network->channel, network->mode);
        iwe.u.freq.e = 3; */
@@ -109,7 +109,7 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee,
        max_rate = 0;
        p = custom;
        p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), " Rates (Mb/s): ");
-       for (i = 0, j = 0; i < network->rates_len; ) {
+       for (i = 0, j = 0; i < network->rates_len;) {
                if (j < network->rates_ex_len &&
                    ((network->rates_ex[j] & 0x7F) <
                     (network->rates[i] & 0x7F)))
@@ -132,8 +132,7 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee,
        iwe.cmd = SIOCGIWRATE;
        iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0;
        iwe.u.bitrate.value = max_rate * 500000;
-       start = iwe_stream_add_event(start, stop, &iwe,
-                                    IW_EV_PARAM_LEN);
+       start = iwe_stream_add_event(start, stop, &iwe, IW_EV_PARAM_LEN);
 
        iwe.cmd = IWEVCUSTOM;
        iwe.u.data.length = p - custom;
@@ -163,7 +162,7 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee,
        if (iwe.u.data.length)
                start = iwe_stream_add_point(start, stop, &iwe, custom);
 
-       if (ieee->wpa_enabled && network->wpa_ie_len){
+       if (ieee->wpa_enabled && network->wpa_ie_len) {
                char buf[MAX_WPA_IE_LEN * 2 + 30];
 
                u8 *p = buf;
@@ -178,7 +177,7 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee,
                start = iwe_stream_add_point(start, stop, &iwe, buf);
        }
 
-       if (ieee->wpa_enabled && network->rsn_ie_len){
+       if (ieee->wpa_enabled && network->rsn_ie_len) {
                char buf[MAX_WPA_IE_LEN * 2 + 30];
 
                u8 *p = buf;
@@ -198,12 +197,12 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee,
        iwe.cmd = IWEVCUSTOM;
        p = custom;
        p += snprintf(p, MAX_CUSTOM_LEN - (p - custom),
-                     " Last beacon: %lums ago", (jiffies - network->last_scanned) / (HZ / 100));
+                     " Last beacon: %lums ago",
+                     (jiffies - network->last_scanned) / (HZ / 100));
        iwe.u.data.length = p - custom;
        if (iwe.u.data.length)
                start = iwe_stream_add_point(start, stop, &iwe, custom);
 
-
        return start;
 }
 
@@ -228,18 +227,19 @@ int ieee80211_wx_get_scan(struct ieee80211_device *ieee,
                    time_after(network->last_scanned + ieee->scan_age, jiffies))
                        ev = ipw2100_translate_scan(ieee, ev, stop, network);
                else
-                       IEEE80211_DEBUG_SCAN(
-                               "Not showing network '%s ("
-                               MAC_FMT ")' due to age (%lums).\n",
-                               escape_essid(network->ssid,
-                                            network->ssid_len),
-                               MAC_ARG(network->bssid),
-                               (jiffies - network->last_scanned) / (HZ / 100));
+                       IEEE80211_DEBUG_SCAN("Not showing network '%s ("
+                                            MAC_FMT ")' due to age (%lums).\n",
+                                            escape_essid(network->ssid,
+                                                         network->ssid_len),
+                                            MAC_ARG(network->bssid),
+                                            (jiffies -
+                                             network->last_scanned) / (HZ /
+                                                                       100));
        }
 
        spin_unlock_irqrestore(&ieee->lock, flags);
 
-       wrqu->data.length = ev -  extra;
+       wrqu->data.length = ev - extra;
        wrqu->data.flags = 0;
 
        IEEE80211_DEBUG_WX("exit: %d networks returned.\n", i);
@@ -291,8 +291,8 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
                        if (ieee->crypt[i] != NULL) {
                                if (key_provided)
                                        break;
-                               ieee80211_crypt_delayed_deinit(
-                                       ieee, &ieee->crypt[i]);
+                               ieee80211_crypt_delayed_deinit(ieee,
+                                                              &ieee->crypt[i]);
                        }
                }
 
@@ -305,8 +305,6 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
                goto done;
        }
 
-
-
        sec.enabled = 1;
        sec.flags |= SEC_ENABLED;
 
@@ -340,8 +338,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
                        new_crypt = NULL;
 
                        printk(KERN_WARNING "%s: could not initialize WEP: "
-                              "load module ieee80211_crypt_wep\n",
-                              dev->name);
+                              "load module ieee80211_crypt_wep\n", dev->name);
                        return -EOPNOTSUPP;
                }
                *crypt = new_crypt;
@@ -358,7 +355,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
                                   key, escape_essid(sec.keys[key], len),
                                   erq->length, len);
                sec.key_sizes[key] = len;
-               (*crypt)->ops->set_key(sec.keys[key], len, NULL,
+               (*crypt)->ops->set_key(sec.keys[key], len, NULL,
                                       (*crypt)->priv);
                sec.flags |= (1 << key);
                /* This ensures a key will be activated if no key is
@@ -381,15 +378,15 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
 
                /* No key data - just set the default TX key index */
                if (key_provided) {
-                       IEEE80211_DEBUG_WX(
-                               "Setting key %d to default Tx key.\n", key);
+                       IEEE80211_DEBUG_WX
+                           ("Setting key %d to default Tx key.\n", key);
                        ieee->tx_keyidx = key;
                        sec.active_key = key;
                        sec.flags |= SEC_ACTIVE_KEY;
                }
        }
 
- done:
     done:
        ieee->open_wep = !(erq->flags & IW_ENCODE_RESTRICTED);
        sec.auth_mode = ieee->open_wep ? WLAN_AUTH_OPEN : WLAN_AUTH_SHARED_KEY;
        sec.flags |= SEC_AUTH_MODE;
@@ -399,7 +396,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
        /* For now we just support WEP, so only set that security level...
         * TODO: When WPA is added this is one place that needs to change */
        sec.flags |= SEC_LEVEL;
-       sec.level = SEC_LEVEL_1; /* 40 and 104 bit WEP */
+       sec.level = SEC_LEVEL_1;        /* 40 and 104 bit WEP */
 
        if (ieee->set_security)
                ieee->set_security(dev, &sec);
index 9e6e683cc34d4396560b19bfc9b1d4f2bca2f9df..e7d26d9943c2d5aea36b465304b8b98db12a7abd 100644 (file)
@@ -457,7 +457,7 @@ static void ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
 
        if (pskb_pull(skb, ihl) == NULL)
                goto err;
-       if (pskb_trim(skb, end-offset))
+       if (pskb_trim_rcsum(skb, end-offset))
                goto err;
 
        /* Find out which fragments are in front and at the back of us
index e046f55218142d091ba71da87e6af0747bad7277..30aa8e2ee214263c6b1d124f5566eb56c804bf58 100644 (file)
@@ -34,6 +34,7 @@ config IP_NF_CT_ACCT
 
 config IP_NF_CONNTRACK_MARK
        bool  'Connection mark tracking support'
+       depends on IP_NF_CONNTRACK
        help
          This option enables support for connection marks, used by the
          `CONNMARK' target and `connmark' match. Similar to the mark value
@@ -85,6 +86,25 @@ config IP_NF_IRC
 
          To compile it as a module, choose M here.  If unsure, say Y.
 
+config IP_NF_NETBIOS_NS
+       tristate "NetBIOS name service protocol support (EXPERIMENTAL)"
+       depends on IP_NF_CONNTRACK && EXPERIMENTAL
+       help
+         NetBIOS name service requests are sent as broadcast messages from an
+         unprivileged port and responded to with unicast messages to the
+         same port. This make them hard to firewall properly because connection
+         tracking doesn't deal with broadcasts. This helper tracks locally
+         originating NetBIOS name service requests and the corresponding
+         responses. It relies on correct IP address configuration, specifically
+         netmask and broadcast address. When properly configured, the output
+         of "ip address show" should look similar to this:
+
+         $ ip -4 address show eth0
+         4: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
+             inet 172.16.2.252/24 brd 172.16.2.255 scope global eth0
+         
+         To compile it as a module, choose M here.  If unsure, say N.
+
 config IP_NF_TFTP
        tristate "TFTP protocol support"
        depends on IP_NF_CONNTRACK
index a7bd38f5052202c8230e572f27080b39c40db416..1ba0db746817cf2809e80c073899c8a37ba3d50c 100644 (file)
@@ -21,6 +21,7 @@ obj-$(CONFIG_IP_NF_AMANDA) += ip_conntrack_amanda.o
 obj-$(CONFIG_IP_NF_TFTP) += ip_conntrack_tftp.o
 obj-$(CONFIG_IP_NF_FTP) += ip_conntrack_ftp.o
 obj-$(CONFIG_IP_NF_IRC) += ip_conntrack_irc.o
+obj-$(CONFIG_IP_NF_NETBIOS_NS) += ip_conntrack_netbios_ns.o
 
 # NAT helpers 
 obj-$(CONFIG_IP_NF_NAT_AMANDA) += ip_nat_amanda.o
index be4c9eb3243f94698f35de5af6d11aad219137a7..dc20881004bc57731b4ae348b8272d26622b863e 100644 (file)
@@ -108,6 +108,7 @@ static int help(struct sk_buff **pskb,
                }
 
                exp->expectfn = NULL;
+               exp->flags = 0;
 
                exp->tuple.src.ip = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.ip;
                exp->tuple.src.u.tcp.port = 0;
index a0648600190e1b16827e0f363ea138b759f9f656..19cba16e6e1e587c5281a997ac67ec7fa291da8a 100644 (file)
@@ -197,7 +197,7 @@ ip_ct_invert_tuple(struct ip_conntrack_tuple *inverse,
 
 
 /* ip_conntrack_expect helper functions */
-static void unlink_expect(struct ip_conntrack_expect *exp)
+void ip_ct_unlink_expect(struct ip_conntrack_expect *exp)
 {
        ASSERT_WRITE_LOCK(&ip_conntrack_lock);
        IP_NF_ASSERT(!timer_pending(&exp->timeout));
@@ -207,18 +207,12 @@ static void unlink_expect(struct ip_conntrack_expect *exp)
        ip_conntrack_expect_put(exp);
 }
 
-void __ip_ct_expect_unlink_destroy(struct ip_conntrack_expect *exp)
-{
-       unlink_expect(exp);
-       ip_conntrack_expect_put(exp);
-}
-
 static void expectation_timed_out(unsigned long ul_expect)
 {
        struct ip_conntrack_expect *exp = (void *)ul_expect;
 
        write_lock_bh(&ip_conntrack_lock);
-       unlink_expect(exp);
+       ip_ct_unlink_expect(exp);
        write_unlock_bh(&ip_conntrack_lock);
        ip_conntrack_expect_put(exp);
 }
@@ -264,10 +258,14 @@ find_expectation(const struct ip_conntrack_tuple *tuple)
                   master ct never got confirmed, we'd hold a reference to it
                   and weird things would happen to future packets). */
                if (ip_ct_tuple_mask_cmp(tuple, &i->tuple, &i->mask)
-                   && is_confirmed(i->master)
-                   && del_timer(&i->timeout)) {
-                       unlink_expect(i);
-                       return i;
+                   && is_confirmed(i->master)) {
+                       if (i->flags & IP_CT_EXPECT_PERMANENT) {
+                               atomic_inc(&i->use);
+                               return i;
+                       } else if (del_timer(&i->timeout)) {
+                               ip_ct_unlink_expect(i);
+                               return i;
+                       }
                }
        }
        return NULL;
@@ -284,7 +282,7 @@ void ip_ct_remove_expectations(struct ip_conntrack *ct)
 
        list_for_each_entry_safe(i, tmp, &ip_conntrack_expect_list, list) {
                if (i->master == ct && del_timer(&i->timeout)) {
-                       unlink_expect(i);
+                       ip_ct_unlink_expect(i);
                        ip_conntrack_expect_put(i);
                }
        }
@@ -925,7 +923,7 @@ void ip_conntrack_unexpect_related(struct ip_conntrack_expect *exp)
        /* choose the the oldest expectation to evict */
        list_for_each_entry_reverse(i, &ip_conntrack_expect_list, list) {
                if (expect_matches(i, exp) && del_timer(&i->timeout)) {
-                       unlink_expect(i);
+                       ip_ct_unlink_expect(i);
                        write_unlock_bh(&ip_conntrack_lock);
                        ip_conntrack_expect_put(i);
                        return;
@@ -934,6 +932,9 @@ void ip_conntrack_unexpect_related(struct ip_conntrack_expect *exp)
        write_unlock_bh(&ip_conntrack_lock);
 }
 
+/* We don't increase the master conntrack refcount for non-fulfilled
+ * conntracks. During the conntrack destruction, the expectations are 
+ * always killed before the conntrack itself */
 struct ip_conntrack_expect *ip_conntrack_expect_alloc(struct ip_conntrack *me)
 {
        struct ip_conntrack_expect *new;
@@ -944,17 +945,14 @@ struct ip_conntrack_expect *ip_conntrack_expect_alloc(struct ip_conntrack *me)
                return NULL;
        }
        new->master = me;
-       atomic_inc(&new->master->ct_general.use);
        atomic_set(&new->use, 1);
        return new;
 }
 
 void ip_conntrack_expect_put(struct ip_conntrack_expect *exp)
 {
-       if (atomic_dec_and_test(&exp->use)) {
-               ip_conntrack_put(exp->master);
+       if (atomic_dec_and_test(&exp->use))
                kmem_cache_free(ip_conntrack_expect_cachep, exp);
-       }
 }
 
 static void ip_conntrack_expect_insert(struct ip_conntrack_expect *exp)
@@ -982,7 +980,7 @@ static void evict_oldest_expect(struct ip_conntrack *master)
        list_for_each_entry_reverse(i, &ip_conntrack_expect_list, list) {
                if (i->master == master) {
                        if (del_timer(&i->timeout)) {
-                               unlink_expect(i);
+                               ip_ct_unlink_expect(i);
                                ip_conntrack_expect_put(i);
                        }
                        break;
@@ -1099,7 +1097,7 @@ void ip_conntrack_helper_unregister(struct ip_conntrack_helper *me)
        /* Get rid of expectations */
        list_for_each_entry_safe(exp, tmp, &ip_conntrack_expect_list, list) {
                if (exp->master->helper == me && del_timer(&exp->timeout)) {
-                       unlink_expect(exp);
+                       ip_ct_unlink_expect(exp);
                        ip_conntrack_expect_put(exp);
                }
        }
index 3a2627db1729b81ed9002e086a107e8bd0d50595..1b79ec36085ffed8896fdd9882126b24400fd57c 100644 (file)
@@ -421,6 +421,7 @@ static int help(struct sk_buff **pskb,
                  { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFF }});
 
        exp->expectfn = NULL;
+       exp->flags = 0;
 
        /* Now, NAT might want to mangle the packet, and register the
         * (possibly changed) expectation itself. */
index 25438eec21a11008c48d607f1c375f34c8ed81f9..d7a8a98c05e1982a9b4b13839ac169a44d00deea 100644 (file)
@@ -221,6 +221,7 @@ static int help(struct sk_buff **pskb,
                                { { 0, { 0 } },
                                  { 0xFFFFFFFF, { .tcp = { 0xFFFF } }, 0xFF }});
                        exp->expectfn = NULL;
+                       exp->flags = 0;
                        if (ip_nat_irc_hook)
                                ret = ip_nat_irc_hook(pskb, ctinfo, 
                                                      addr_beg_p - ib_ptr,
diff --git a/net/ipv4/netfilter/ip_conntrack_netbios_ns.c b/net/ipv4/netfilter/ip_conntrack_netbios_ns.c
new file mode 100644 (file)
index 0000000..2b5cf9c
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ *      NetBIOS name service broadcast connection tracking helper
+ *
+ *      (c) 2005 Patrick McHardy <kaber@trash.net>
+ *
+ *      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 helper tracks locally originating NetBIOS name service
+ *      requests by issuing permanent expectations (valid until
+ *      timing out) matching all reply connections from the
+ *      destination network. The only NetBIOS specific thing is
+ *      actually the port number.
+ */
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/skbuff.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/in.h>
+#include <linux/ip.h>
+#include <linux/udp.h>
+#include <net/route.h>
+
+#include <linux/netfilter.h>
+#include <linux/netfilter_ipv4.h>
+#include <linux/netfilter_ipv4/ip_conntrack.h>
+#include <linux/netfilter_ipv4/ip_conntrack_helper.h>
+
+MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
+MODULE_DESCRIPTION("NetBIOS name service broadcast connection tracking helper");
+MODULE_LICENSE("GPL");
+
+static unsigned int timeout = 3;
+module_param(timeout, int, 0600);
+MODULE_PARM_DESC(timeout, "timeout for master connection/replies in seconds");
+
+static int help(struct sk_buff **pskb,
+                struct ip_conntrack *ct, enum ip_conntrack_info ctinfo)
+{
+       struct ip_conntrack_expect *exp;
+       struct iphdr *iph = (*pskb)->nh.iph;
+       struct udphdr _uh, *uh;
+       struct rtable *rt = (struct rtable *)(*pskb)->dst;
+       struct in_device *in_dev;
+       u_int32_t mask = 0;
+
+       /* we're only interested in locally generated packets */
+       if ((*pskb)->sk == NULL)
+               goto out;
+       if (rt == NULL || !(rt->rt_flags & RTCF_BROADCAST))
+               goto out;
+       if (CTINFO2DIR(ctinfo) != IP_CT_DIR_ORIGINAL)
+               goto out;
+
+       rcu_read_lock();
+       in_dev = __in_dev_get(rt->u.dst.dev);
+       if (in_dev != NULL) {
+               for_primary_ifa(in_dev) {
+                       if (ifa->ifa_broadcast == iph->daddr) {
+                               mask = ifa->ifa_mask;
+                               break;
+                       }
+               } endfor_ifa(in_dev);
+       }
+       rcu_read_unlock();
+
+       if (mask == 0)
+               goto out;
+
+       uh = skb_header_pointer(*pskb, iph->ihl * 4, sizeof(_uh), &_uh);
+       BUG_ON(uh == NULL);
+
+       exp = ip_conntrack_expect_alloc(ct);
+       if (exp == NULL)
+               goto out;
+       memset(&exp->tuple, 0, sizeof(exp->tuple));
+       exp->tuple.src.ip         = iph->daddr & mask;
+       exp->tuple.dst.ip         = iph->saddr;
+       exp->tuple.dst.u.udp.port = uh->source;
+       exp->tuple.dst.protonum   = IPPROTO_UDP;
+
+       memset(&exp->mask, 0, sizeof(exp->mask));
+       exp->mask.src.ip          = mask;
+       exp->mask.dst.ip          = 0xFFFFFFFF;
+       exp->mask.dst.u.udp.port  = 0xFFFF;
+       exp->mask.dst.protonum    = 0xFF;
+
+       exp->expectfn             = NULL;
+       exp->flags                = IP_CT_EXPECT_PERMANENT;
+
+       ip_conntrack_expect_related(exp);
+       ip_conntrack_expect_put(exp);
+
+       ip_ct_refresh_acct(ct, ctinfo, NULL, timeout * HZ);
+out:
+       return NF_ACCEPT;
+}
+
+static struct ip_conntrack_helper helper = {
+       .name                   = "netbios-ns",
+       .tuple = {
+               .src.u.udp.port = __constant_htons(137),
+               .dst.protonum   = IPPROTO_UDP,
+       },
+       .mask = {
+               .src.u.udp.port = 0xFFFF,
+               .dst.protonum   = 0xFF,
+       },
+       .max_expected           = 1,
+       .me                     = THIS_MODULE,
+       .help                   = help,
+};
+
+static int __init init(void)
+{
+       helper.timeout = timeout;
+       return ip_conntrack_helper_register(&helper);
+}
+
+static void __exit fini(void)
+{
+       ip_conntrack_helper_unregister(&helper);
+}
+
+module_init(init);
+module_exit(fini);
index a4e9278db4eda7d2050e95a2344e504c34b8f396..15aef356474264926ef3449a69751897e51ae8ce 100644 (file)
@@ -1349,8 +1349,10 @@ ctnetlink_del_expect(struct sock *ctnl, struct sk_buff *skb,
                list_for_each_entry_safe(exp, tmp, &ip_conntrack_expect_list,
                                         list) {
                        if (exp->master->helper == h 
-                           && del_timer(&exp->timeout))
-                               __ip_ct_expect_unlink_destroy(exp);
+                           && del_timer(&exp->timeout)) {
+                               ip_ct_unlink_expect(exp);
+                               ip_conntrack_expect_put(exp);
+                       }
                }
                write_unlock(&ip_conntrack_lock);
        } else {
@@ -1358,8 +1360,10 @@ ctnetlink_del_expect(struct sock *ctnl, struct sk_buff *skb,
                write_lock_bh(&ip_conntrack_lock);
                list_for_each_entry_safe(exp, tmp, &ip_conntrack_expect_list,
                                         list) {
-                       if (del_timer(&exp->timeout))
-                               __ip_ct_expect_unlink_destroy(exp);
+                       if (del_timer(&exp->timeout)) {
+                               ip_ct_unlink_expect(exp);
+                               ip_conntrack_expect_put(exp);
+                       }
                }
                write_unlock_bh(&ip_conntrack_lock);
        }
@@ -1413,6 +1417,7 @@ ctnetlink_create_expect(struct nfattr *cda[])
        }
        
        exp->expectfn = NULL;
+       exp->flags = 0;
        exp->master = ct;
        memcpy(&exp->tuple, &tuple, sizeof(struct ip_conntrack_tuple));
        memcpy(&exp->mask, &mask, sizeof(struct ip_conntrack_tuple));
index f23ef1f88c46b40701f956b74f49f3c9d7ef9ceb..1985abc59d2497f13c453750277d71da0bf73946 100644 (file)
@@ -349,6 +349,7 @@ static int tcp_to_nfattr(struct sk_buff *skb, struct nfattr *nfa,
        return 0;
 
 nfattr_failure:
+       read_unlock_bh(&tcp_lock);
        return -1;
 }
 #endif
index ee5895afd0c3e8a0bfb932c56bc623f16de0cd05..ae3e3e655db555054c14dd34372e792abb2e25e5 100644 (file)
@@ -998,7 +998,7 @@ EXPORT_SYMBOL(ip_conntrack_expect_related);
 EXPORT_SYMBOL(ip_conntrack_unexpect_related);
 EXPORT_SYMBOL_GPL(ip_conntrack_expect_list);
 EXPORT_SYMBOL_GPL(__ip_conntrack_expect_find);
-EXPORT_SYMBOL_GPL(__ip_ct_expect_unlink_destroy);
+EXPORT_SYMBOL_GPL(ip_ct_unlink_expect);
 
 EXPORT_SYMBOL(ip_conntrack_tuple_taken);
 EXPORT_SYMBOL(ip_ct_gather_frags);
index f8ff170f390a3ad8bd8e5f0100658d7d1908008f..d2b590533452e201d48c8b1bc172a0661828b917 100644 (file)
@@ -75,6 +75,7 @@ static int tftp_help(struct sk_buff **pskb,
                exp->mask.dst.u.udp.port = 0xffff;
                exp->mask.dst.protonum = 0xff;
                exp->expectfn = NULL;
+               exp->flags = 0;
 
                DEBUGP("expect: ");
                DUMP_TUPLE(&exp->tuple);
index 60d70fa41a156a63bd4abb9a04a894297a8fa0d7..cb66b8bddeb3d63eb2ef23ee359a2491c6511c63 100644 (file)
@@ -255,6 +255,27 @@ alloc_null_binding(struct ip_conntrack *conntrack,
        return ip_nat_setup_info(conntrack, &range, hooknum);
 }
 
+unsigned int
+alloc_null_binding_confirmed(struct ip_conntrack *conntrack,
+                             struct ip_nat_info *info,
+                             unsigned int hooknum)
+{
+       u_int32_t ip
+               = (HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC
+                  ? conntrack->tuplehash[IP_CT_DIR_REPLY].tuple.dst.ip
+                  : conntrack->tuplehash[IP_CT_DIR_REPLY].tuple.src.ip);
+       u_int16_t all
+               = (HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC
+                  ? conntrack->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u.all
+                  : conntrack->tuplehash[IP_CT_DIR_REPLY].tuple.src.u.all);
+       struct ip_nat_range range
+               = { IP_NAT_RANGE_MAP_IPS, ip, ip, { all }, { all } };
+
+       DEBUGP("Allocating NULL binding for confirmed %p (%u.%u.%u.%u)\n",
+              conntrack, NIPQUAD(ip));
+       return ip_nat_setup_info(conntrack, &range, hooknum);
+}
+
 int ip_nat_rule_find(struct sk_buff **pskb,
                     unsigned int hooknum,
                     const struct net_device *in,
index 89db052add81e4a61def654f00cc4bcc9d92f889..0ff368b131f6bac3bfd27e8201b519ce700b64bd 100644 (file)
@@ -123,8 +123,12 @@ ip_nat_fn(unsigned int hooknum,
                if (!ip_nat_initialized(ct, maniptype)) {
                        unsigned int ret;
 
-                       /* LOCAL_IN hook doesn't have a chain!  */
-                       if (hooknum == NF_IP_LOCAL_IN)
+                       if (unlikely(is_confirmed(ct)))
+                               /* NAT module was loaded late */
+                               ret = alloc_null_binding_confirmed(ct, info,
+                                                                  hooknum);
+                       else if (hooknum == NF_IP_LOCAL_IN)
+                               /* LOCAL_IN hook doesn't have a chain!  */
                                ret = alloc_null_binding(ct, info, hooknum);
                        else
                                ret = ip_nat_rule_find(pskb, hooknum,
index e5beca7de86c4b67e7455172ac66f6a7ad54ad49..e0bd1013cb0d0053c3d4b0f5fe0bbd2befa9ad48 100644 (file)
@@ -1141,7 +1141,7 @@ int udp_rcv(struct sk_buff *skb)
        if (ulen > len || ulen < sizeof(*uh))
                goto short_packet;
 
-       if (pskb_trim(skb, ulen))
+       if (pskb_trim_rcsum(skb, ulen))
                goto short_packet;
 
        if (udp_checksum_init(skb, uh, ulen, saddr, daddr) < 0)
index ffcda45e2c1e3105ddc53a67a596980465fc6897..47122728212ab570b5eef20d45117bd33419fbc0 100644 (file)
@@ -461,11 +461,10 @@ static int ipv6_hop_jumbo(struct sk_buff *skb, int optoff)
                IP6_INC_STATS_BH(IPSTATS_MIB_INTRUNCATEDPKTS);
                goto drop;
        }
-       if (pkt_len + sizeof(struct ipv6hdr) < skb->len) {
-               __pskb_trim(skb, pkt_len + sizeof(struct ipv6hdr));
-               if (skb->ip_summed == CHECKSUM_HW)
-                       skb->ip_summed = CHECKSUM_NONE;
-       }
+
+       if (pskb_trim_rcsum(skb, pkt_len + sizeof(struct ipv6hdr)))
+               goto drop;
+
        return 1;
 
 drop:
index 9d9e04344c777c8bd331b7b1f5e566fae38351e4..e4fe9ee484ddab3d0f0fee7e0153e8de4f14c4be 100644 (file)
@@ -479,12 +479,9 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
        /* Point into the IP datagram 'data' part. */
        if (!pskb_pull(skb, (u8 *) (fhdr + 1) - skb->data))
                goto err;
-       if (end-offset < skb->len) {
-               if (pskb_trim(skb, end - offset))
-                       goto err;
-               if (skb->ip_summed != CHECKSUM_UNNECESSARY)
-                       skb->ip_summed = CHECKSUM_NONE;
-       }
+       
+       if (pskb_trim_rcsum(skb, end - offset))
+               goto err;
 
        /* Find out which fragments are in front and at the back of us
         * in the chain of fragments so far.  We must know where to put
index dbd18a9d166995a3ce719291fe5cb4385bbc4dd6..f5ae14810a7041d011f0c17d89e0e41c9ffdec8f 100644 (file)
@@ -483,7 +483,7 @@ static int udpv6_rcv(struct sk_buff **pskb, unsigned int *nhoffp)
        }
 
        if (ulen < skb->len) {
-               if (__pskb_trim(skb, ulen))
+               if (pskb_trim_rcsum(skb, ulen))
                        goto discard;
                saddr = &skb->nh.ipv6h->saddr;
                daddr = &skb->nh.ipv6h->daddr;
index 249bddb28acd9057bccac1b89960ecc8994041b3..f81fe8c52e99ba2d3d90762cecc9ac4194fbf956 100644 (file)
@@ -371,6 +371,12 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
                break;
        
        case NFQNL_COPY_PACKET:
+               if (entry->skb->ip_summed == CHECKSUM_HW &&
+                   (*errp = skb_checksum_help(entry->skb,
+                                              entry->info->outdev == NULL))) {
+                       spin_unlock_bh(&queue->lock);
+                       return NULL;
+               }
                if (queue->copy_range == 0 
                    || queue->copy_range > entry->skb->len)
                        data_len = entry->skb->len;
@@ -636,7 +642,7 @@ nfqnl_mangle(void *data, int data_len, struct nfqnl_queue_entry *e)
        if (!skb_make_writable(&e->skb, data_len))
                return -ENOMEM;
        memcpy(e->skb->data, data, data_len);
-
+       e->skb->ip_summed = CHECKSUM_NONE;
        return 0;
 }
 
index 62435ffc61846396e6a862dd9907319a1a3b8688..a64e1d5ce3ca8f38ae3cb76c41d62d4bd0a8d136 100644 (file)
@@ -398,24 +398,13 @@ static int netlink_create(struct socket *sock, int protocol)
        if (nl_table[protocol].registered &&
            try_module_get(nl_table[protocol].module))
                module = nl_table[protocol].module;
-       else
-               err = -EPROTONOSUPPORT;
        groups = nl_table[protocol].groups;
        netlink_unlock_table();
 
-       if (err || (err = __netlink_create(sock, protocol) < 0))
+       if ((err = __netlink_create(sock, protocol) < 0))
                goto out_module;
 
        nlk = nlk_sk(sock->sk);
-
-       nlk->groups = kmalloc(NLGRPSZ(groups), GFP_KERNEL);
-       if (nlk->groups == NULL) {
-               err = -ENOMEM;
-               goto out_module;
-       }
-       memset(nlk->groups, 0, NLGRPSZ(groups));
-       nlk->ngroups = groups;
-
        nlk->module = module;
 out:
        return err;
@@ -534,6 +523,29 @@ netlink_update_subscriptions(struct sock *sk, unsigned int subscriptions)
        nlk->subscriptions = subscriptions;
 }
 
+static int netlink_alloc_groups(struct sock *sk)
+{
+       struct netlink_sock *nlk = nlk_sk(sk);
+       unsigned int groups;
+       int err = 0;
+
+       netlink_lock_table();
+       groups = nl_table[sk->sk_protocol].groups;
+       if (!nl_table[sk->sk_protocol].registered)
+               err = -ENOENT;
+       netlink_unlock_table();
+
+       if (err)
+               return err;
+
+       nlk->groups = kmalloc(NLGRPSZ(groups), GFP_KERNEL);
+       if (nlk->groups == NULL)
+               return -ENOMEM;
+       memset(nlk->groups, 0, NLGRPSZ(groups));
+       nlk->ngroups = groups;
+       return 0;
+}
+
 static int netlink_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
 {
        struct sock *sk = sock->sk;
@@ -545,8 +557,15 @@ static int netlink_bind(struct socket *sock, struct sockaddr *addr, int addr_len
                return -EINVAL;
 
        /* Only superuser is allowed to listen multicasts */
-       if (nladdr->nl_groups && !netlink_capable(sock, NL_NONROOT_RECV))
-               return -EPERM;
+       if (nladdr->nl_groups) {
+               if (!netlink_capable(sock, NL_NONROOT_RECV))
+                       return -EPERM;
+               if (nlk->groups == NULL) {
+                       err = netlink_alloc_groups(sk);
+                       if (err)
+                               return err;
+               }
+       }
 
        if (nlk->pid) {
                if (nladdr->nl_pid != nlk->pid)
@@ -559,7 +578,7 @@ static int netlink_bind(struct socket *sock, struct sockaddr *addr, int addr_len
                        return err;
        }
 
-       if (!nladdr->nl_groups && !(u32)nlk->groups[0])
+       if (!nladdr->nl_groups && (nlk->groups == NULL || !(u32)nlk->groups[0]))
                return 0;
 
        netlink_table_grab();
@@ -620,7 +639,7 @@ static int netlink_getname(struct socket *sock, struct sockaddr *addr, int *addr
                nladdr->nl_groups = netlink_group_mask(nlk->dst_group);
        } else {
                nladdr->nl_pid = nlk->pid;
-               nladdr->nl_groups = nlk->groups[0];
+               nladdr->nl_groups = nlk->groups ? nlk->groups[0] : 0;
        }
        return 0;
 }
@@ -976,6 +995,11 @@ static int netlink_setsockopt(struct socket *sock, int level, int optname,
 
                if (!netlink_capable(sock, NL_NONROOT_RECV))
                        return -EPERM;
+               if (nlk->groups == NULL) {
+                       err = netlink_alloc_groups(sk);
+                       if (err)
+                               return err;
+               }
                if (!val || val - 1 >= nlk->ngroups)
                        return -EINVAL;
                netlink_table_grab();
@@ -1483,8 +1507,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v)
                           s,
                           s->sk_protocol,
                           nlk->pid,
-                          nlk->flags & NETLINK_KERNEL_SOCKET ?
-                               0 : (unsigned int)nlk->groups[0],
+                          nlk->groups ? (u32)nlk->groups[0] : 0,
                           atomic_read(&s->sk_rmem_alloc),
                           atomic_read(&s->sk_wmem_alloc),
                           nlk->cb,
index 4b53de982114d242706ba632960781190641c85a..f4578c759ffcc3350ebbd708c7f0a2ffef52c587 100644 (file)
@@ -1261,6 +1261,7 @@ static int nr_info_show(struct seq_file *seq, void *v)
        struct net_device *dev;
        struct nr_sock *nr;
        const char *devname;
+       char buf[11];
 
        if (v == SEQ_START_TOKEN)
                seq_puts(seq,
@@ -1276,11 +1277,11 @@ static int nr_info_show(struct seq_file *seq, void *v)
                else
                        devname = dev->name;
 
-               seq_printf(seq, "%-9s ", ax2asc(&nr->user_addr));
-               seq_printf(seq, "%-9s ", ax2asc(&nr->dest_addr));
+               seq_printf(seq, "%-9s ", ax2asc(buf, &nr->user_addr));
+               seq_printf(seq, "%-9s ", ax2asc(buf, &nr->dest_addr));
                seq_printf(seq, 
 "%-9s %-3s  %02X/%02X %02X/%02X %2d %3d %3d %3d %3lu/%03lu %2lu/%02lu %3lu/%03lu %3lu/%03lu %2d/%02d %3d %5d %5d %ld\n",
-                       ax2asc(&nr->source_addr),
+                       ax2asc(buf, &nr->source_addr),
                        devname,
                        nr->my_index,
                        nr->my_id,
index 7a86b36cba505d6547a0a63620e5105858c9955d..b3b9097c87c7df5ae3c9af4a8d5b7115c34a9d10 100644 (file)
@@ -881,6 +881,7 @@ static void nr_node_stop(struct seq_file *seq, void *v)
 
 static int nr_node_show(struct seq_file *seq, void *v)
 {
+       char buf[11];
        int i;
 
        if (v == SEQ_START_TOKEN)
@@ -890,7 +891,7 @@ static int nr_node_show(struct seq_file *seq, void *v)
                struct nr_node *nr_node = v;
                nr_node_lock(nr_node);
                seq_printf(seq, "%-9s %-7s  %d %d",
-                       ax2asc(&nr_node->callsign),
+                       ax2asc(buf, &nr_node->callsign),
                        (nr_node->mnemonic[0] == '\0') ? "*" : nr_node->mnemonic,
                        nr_node->which + 1,
                        nr_node->count);
@@ -964,6 +965,7 @@ static void nr_neigh_stop(struct seq_file *seq, void *v)
 
 static int nr_neigh_show(struct seq_file *seq, void *v)
 {
+       char buf[11];
        int i;
 
        if (v == SEQ_START_TOKEN)
@@ -973,7 +975,7 @@ static int nr_neigh_show(struct seq_file *seq, void *v)
 
                seq_printf(seq, "%05d %-9s %-4s  %3d    %d   %3d    %3d",
                        nr_neigh->number,
-                       ax2asc(&nr_neigh->callsign),
+                       ax2asc(buf, &nr_neigh->callsign),
                        nr_neigh->dev ? nr_neigh->dev->name : "???",
                        nr_neigh->quality,
                        nr_neigh->locked,
@@ -983,7 +985,7 @@ static int nr_neigh_show(struct seq_file *seq, void *v)
                if (nr_neigh->digipeat != NULL) {
                        for (i = 0; i < nr_neigh->digipeat->ndigi; i++)
                                seq_printf(seq, " %s", 
-                                          ax2asc(&nr_neigh->digipeat->calls[i]));
+                                          ax2asc(buf, &nr_neigh->digipeat->calls[i]));
                }
 
                seq_puts(seq, "\n");
index ba997095f08f7ba3c670e0de052a694d39da6a11..8690f171c1ef28136e7e57e160e980955d6b742d 100644 (file)
@@ -1535,8 +1535,7 @@ static unsigned int packet_poll(struct file * file, struct socket *sock,
 static void packet_mm_open(struct vm_area_struct *vma)
 {
        struct file *file = vma->vm_file;
-       struct inode *inode = file->f_dentry->d_inode;
-       struct socket * sock = SOCKET_I(inode);
+       struct socket * sock = file->private_data;
        struct sock *sk = sock->sk;
        
        if (sk)
@@ -1546,8 +1545,7 @@ static void packet_mm_open(struct vm_area_struct *vma)
 static void packet_mm_close(struct vm_area_struct *vma)
 {
        struct file *file = vma->vm_file;
-       struct inode *inode = file->f_dentry->d_inode;
-       struct socket * sock = SOCKET_I(inode);
+       struct socket * sock = file->private_data;
        struct sock *sk = sock->sk;
        
        if (sk)
index c6e59f84c3ae78594dca71aa480a724cae9a00d0..3077878ed4f09fdc1a9a1bcf0b1303084f098641 100644 (file)
@@ -1363,6 +1363,8 @@ static void rose_info_stop(struct seq_file *seq, void *v)
 
 static int rose_info_show(struct seq_file *seq, void *v)
 {
+       char buf[11];
+
        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");
@@ -1380,12 +1382,12 @@ static int rose_info_show(struct seq_file *seq, void *v)
                
                seq_printf(seq, "%-10s %-9s ",
                        rose2asc(&rose->dest_addr),
-                       ax2asc(&rose->dest_call));
+                       ax2asc(buf, &rose->dest_call));
 
                if (ax25cmp(&rose->source_call, &null_ax25_address) == 0)
                        callsign = "??????-?";
                else
-                       callsign = ax2asc(&rose->source_call);
+                       callsign = ax2asc(buf, &rose->source_call);
 
                seq_printf(seq,
                           "%-10s %-9s %-5s %3.3X %05d  %d  %d  %d  %d %3lu %3lu %3lu %3lu %3lu %3lu/%03lu %5d %5d %ld\n",
index 4510cd7613ecd851259bd4d6b43dc7637fd54ebf..e556d92c0bc4d2eb5883acda48b051a608a10d9f 100644 (file)
@@ -851,6 +851,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
        unsigned char cause, diagnostic;
        struct net_device *dev;
        int len, res = 0;
+       char buf[11];
 
 #if 0
        if (call_in_firewall(PF_ROSE, skb->dev, skb->data, NULL, &skb) != FW_ACCEPT)
@@ -876,7 +877,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
 
        if (rose_neigh == NULL) {
                printk("rose_route : unknown neighbour or device %s\n",
-                      ax2asc(&ax25->dest_addr));
+                      ax2asc(buf, &ax25->dest_addr));
                goto out;
        }
 
@@ -1178,6 +1179,7 @@ static void rose_neigh_stop(struct seq_file *seq, void *v)
 
 static int rose_neigh_show(struct seq_file *seq, void *v)
 {
+       char buf[11];
        int i;
 
        if (v == SEQ_START_TOKEN)
@@ -1189,7 +1191,7 @@ static int rose_neigh_show(struct seq_file *seq, void *v)
                /* if (!rose_neigh->loopback) { */
                seq_printf(seq, "%05d %-9s %-4s   %3d %3d  %3s     %3s %3lu %3lu",
                           rose_neigh->number,
-                          (rose_neigh->loopback) ? "RSLOOP-0" : ax2asc(&rose_neigh->callsign),
+                          (rose_neigh->loopback) ? "RSLOOP-0" : ax2asc(buf, &rose_neigh->callsign),
                           rose_neigh->dev ? rose_neigh->dev->name : "???",
                           rose_neigh->count,
                           rose_neigh->use,
@@ -1200,7 +1202,7 @@ static int rose_neigh_show(struct seq_file *seq, void *v)
 
                if (rose_neigh->digipeat != NULL) {
                        for (i = 0; i < rose_neigh->digipeat->ndigi; i++)
-                               seq_printf(seq, " %s", ax2asc(&rose_neigh->digipeat->calls[i]));
+                               seq_printf(seq, " %s", ax2asc(buf, &rose_neigh->digipeat->calls[i]));
                }
 
                seq_puts(seq, "\n");
@@ -1260,6 +1262,8 @@ static void rose_route_stop(struct seq_file *seq, void *v)
 
 static int rose_route_show(struct seq_file *seq, void *v)
 {
+       char buf[11];
+
        if (v == SEQ_START_TOKEN)
                seq_puts(seq, 
                         "lci  address     callsign   neigh  <-> lci  address     callsign   neigh\n");
@@ -1271,7 +1275,7 @@ static int rose_route_show(struct seq_file *seq, void *v)
                                   "%3.3X  %-10s  %-9s  %05d      ",
                                   rose_route->lci1,
                                   rose2asc(&rose_route->src_addr),
-                                  ax2asc(&rose_route->src_call),
+                                  ax2asc(buf, &rose_route->src_call),
                                   rose_route->neigh1->number);
                else 
                        seq_puts(seq, 
@@ -1282,7 +1286,7 @@ static int rose_route_show(struct seq_file *seq, void *v)
                                   "%3.3X  %-10s  %-9s  %05d\n",
                                rose_route->lci2,
                                rose2asc(&rose_route->dest_addr),
-                               ax2asc(&rose_route->dest_call),
+                               ax2asc(buf, &rose_route->dest_call),
                                rose_route->neigh2->number);
                 else 
                         seq_puts(seq,
index a29a3a960fd657efa21c50a13b3936f5ce28e7bb..02891ce2db37b3ee52c118f9fcb4ca876ccc18ff 100644 (file)
@@ -400,6 +400,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
 {
        unsigned char *p = buffer + 1;
        char *callsign;
+       char buf[11];
        int len, nb;
 
        /* National Facilities */
@@ -456,7 +457,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
 
        *p++ = FAC_CCITT_DEST_NSAP;
 
-       callsign = ax2asc(&rose->dest_call);
+       callsign = ax2asc(buf, &rose->dest_call);
 
        *p++ = strlen(callsign) + 10;
        *p++ = (strlen(callsign) + 9) * 2;              /* ??? */
@@ -471,7 +472,7 @@ static int rose_create_facilities(unsigned char *buffer, struct rose_sock *rose)
 
        *p++ = FAC_CCITT_SRC_NSAP;
 
-       callsign = ax2asc(&rose->source_call);
+       callsign = ax2asc(buf, &rose->source_call);
 
        *p++ = strlen(callsign) + 10;
        *p++ = (strlen(callsign) + 9) * 2;              /* ??? */
index 94fe638b4d72b3721cbda637573c7182f5535b32..c699e93c33d72141332fdfa0c16afa87ed4a971e 100644 (file)
@@ -667,7 +667,7 @@ static ssize_t sock_aio_read(struct kiocb *iocb, char __user *ubuf,
        }
        iocb->private = x;
        x->kiocb = iocb;
-       sock = SOCKET_I(iocb->ki_filp->f_dentry->d_inode)
+       sock = iocb->ki_filp->private_data
 
        x->async_msg.msg_name = NULL;
        x->async_msg.msg_namelen = 0;
@@ -709,7 +709,7 @@ static ssize_t sock_aio_write(struct kiocb *iocb, const char __user *ubuf,
        }
        iocb->private = x;
        x->kiocb = iocb;
-       sock = SOCKET_I(iocb->ki_filp->f_dentry->d_inode)
+       sock = iocb->ki_filp->private_data
 
        x->async_msg.msg_name = NULL;
        x->async_msg.msg_namelen = 0;
@@ -732,7 +732,7 @@ static ssize_t sock_sendpage(struct file *file, struct page *page,
        struct socket *sock;
        int flags;
 
-       sock = SOCKET_I(file->f_dentry->d_inode);
+       sock = file->private_data;
 
        flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT;
        if (more)
@@ -741,14 +741,14 @@ static ssize_t sock_sendpage(struct file *file, struct page *page,
        return sock->ops->sendpage(sock, page, offset, size, flags);
 }
 
-static int sock_readv_writev(int type, struct inode * inode,
+static int sock_readv_writev(int type,
                             struct file * file, const struct iovec * iov,
                             long count, size_t size)
 {
        struct msghdr msg;
        struct socket *sock;
 
-       sock = SOCKET_I(inode);
+       sock = file->private_data;
 
        msg.msg_name = NULL;
        msg.msg_namelen = 0;
@@ -775,7 +775,7 @@ static ssize_t sock_readv(struct file *file, const struct iovec *vector,
        int i;
         for (i = 0 ; i < count ; i++)
                 tot_len += vector[i].iov_len;
-       return sock_readv_writev(VERIFY_WRITE, file->f_dentry->d_inode,
+       return sock_readv_writev(VERIFY_WRITE,
                                 file, vector, count, tot_len);
 }
        
@@ -786,7 +786,7 @@ static ssize_t sock_writev(struct file *file, const struct iovec *vector,
        int i;
         for (i = 0 ; i < count ; i++)
                 tot_len += vector[i].iov_len;
-       return sock_readv_writev(VERIFY_READ, file->f_dentry->d_inode,
+       return sock_readv_writev(VERIFY_READ,
                                 file, vector, count, tot_len);
 }
 
@@ -840,7 +840,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
        void __user *argp = (void __user *)arg;
        int pid, err;
 
-       sock = SOCKET_I(file->f_dentry->d_inode);
+       sock = file->private_data;
        if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
                err = dev_ioctl(cmd, argp);
        } else
@@ -939,13 +939,13 @@ static unsigned int sock_poll(struct file *file, poll_table * wait)
        /*
         *      We can't return errors to poll, so it's either yes or no. 
         */
-       sock = SOCKET_I(file->f_dentry->d_inode);
+       sock = file->private_data;
        return sock->ops->poll(file, sock, wait);
 }
 
 static int sock_mmap(struct file * file, struct vm_area_struct * vma)
 {
-       struct socket *sock = SOCKET_I(file->f_dentry->d_inode);
+       struct socket *sock = file->private_data;
 
        return sock->ops->mmap(file, sock, vma);
 }
@@ -995,7 +995,7 @@ static int sock_fasync(int fd, struct file *filp, int on)
                        return -ENOMEM;
        }
 
-       sock = SOCKET_I(filp->f_dentry->d_inode);
+       sock = filp->private_data;
 
        if ((sk=sock->sk) == NULL) {
                kfree(fna);
@@ -1745,10 +1745,11 @@ asmlinkage long sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags)
                goto out_freeiov;
        ctl_len = msg_sys.msg_controllen; 
        if ((MSG_CMSG_COMPAT & flags) && ctl_len) {
-               err = cmsghdr_from_user_compat_to_kern(&msg_sys, ctl, sizeof(ctl));
+               err = cmsghdr_from_user_compat_to_kern(&msg_sys, sock->sk, ctl, sizeof(ctl));
                if (err)
                        goto out_freeiov;
                ctl_buf = msg_sys.msg_control;
+               ctl_len = msg_sys.msg_controllen;
        } else if (ctl_len) {
                if (ctl_len > sizeof(ctl))
                {
index 5c8fe3bfc49415195058c8b6c939767d619478bb..e3308195374e635b2ea617d64fc48684c24d1241 100644 (file)
@@ -250,6 +250,7 @@ out:
 }
 
 static struct cache_detail rsi_cache = {
+       .owner          = THIS_MODULE,
        .hash_size      = RSI_HASHMAX,
        .hash_table     = rsi_table,
        .name           = "auth.rpcsec.init",
@@ -436,6 +437,7 @@ out:
 }
 
 static struct cache_detail rsc_cache = {
+       .owner          = THIS_MODULE,
        .hash_size      = RSC_HASHMAX,
        .hash_table     = rsc_table,
        .name           = "auth.rpcsec.context",
@@ -1074,7 +1076,9 @@ gss_svc_init(void)
 void
 gss_svc_shutdown(void)
 {
-       cache_unregister(&rsc_cache);
-       cache_unregister(&rsi_cache);
+       if (cache_unregister(&rsc_cache))
+               printk(KERN_ERR "auth_rpcgss: failed to unregister rsc cache\n");
+       if (cache_unregister(&rsi_cache))
+               printk(KERN_ERR "auth_rpcgss: failed to unregister rsi cache\n");
        svc_auth_unregister(RPC_AUTH_GSS);
 }
index 900f5bc7e3366480426f0674ec4a2ca5c2113f7d..f509e99927675e173f251f44637f976489a0abf1 100644 (file)
@@ -177,7 +177,7 @@ void cache_register(struct cache_detail *cd)
        cd->proc_ent = proc_mkdir(cd->name, proc_net_rpc);
        if (cd->proc_ent) {
                struct proc_dir_entry *p;
-               cd->proc_ent->owner = THIS_MODULE;
+               cd->proc_ent->owner = cd->owner;
                cd->channel_ent = cd->content_ent = NULL;
                
                p = create_proc_entry("flush", S_IFREG|S_IRUSR|S_IWUSR,
@@ -185,7 +185,7 @@ void cache_register(struct cache_detail *cd)
                cd->flush_ent =  p;
                if (p) {
                        p->proc_fops = &cache_flush_operations;
-                       p->owner = THIS_MODULE;
+                       p->owner = cd->owner;
                        p->data = cd;
                }
  
@@ -195,7 +195,7 @@ void cache_register(struct cache_detail *cd)
                        cd->channel_ent = p;
                        if (p) {
                                p->proc_fops = &cache_file_operations;
-                               p->owner = THIS_MODULE;
+                               p->owner = cd->owner;
                                p->data = cd;
                        }
                }
@@ -205,7 +205,7 @@ void cache_register(struct cache_detail *cd)
                        cd->content_ent = p;
                        if (p) {
                                p->proc_fops = &content_file_operations;
-                               p->owner = THIS_MODULE;
+                               p->owner = cd->owner;
                                p->data = cd;
                        }
                }
index 9b67dc19944c0d0c7d40e96852b19359fae5c181..4979f226e285f57117cc8daa71667f64549b0b7a 100644 (file)
@@ -35,13 +35,13 @@ static int rpc_proc_show(struct seq_file *seq, void *v) {
        int             i, j;
 
        seq_printf(seq,
-               "net %d %d %d %d\n",
+               "net %u %u %u %u\n",
                        statp->netcnt,
                        statp->netudpcnt,
                        statp->nettcpcnt,
                        statp->nettcpconn);
        seq_printf(seq,
-               "rpc %d %d %d\n",
+               "rpc %u %u %u\n",
                        statp->rpccnt,
                        statp->rpcretrans,
                        statp->rpcauthrefresh);
@@ -50,10 +50,10 @@ static int rpc_proc_show(struct seq_file *seq, void *v) {
                const struct rpc_version *vers = prog->version[i];
                if (!vers)
                        continue;
-               seq_printf(seq, "proc%d %d",
+               seq_printf(seq, "proc%u %u",
                                        vers->number, vers->nrprocs);
                for (j = 0; j < vers->nrprocs; j++)
-                       seq_printf(seq, " %d",
+                       seq_printf(seq, " %u",
                                        vers->procs[j].p_count);
                seq_putc(seq, '\n');
        }
@@ -83,13 +83,13 @@ void svc_seq_show(struct seq_file *seq, const struct svc_stat *statp) {
        int             i, j;
 
        seq_printf(seq,
-               "net %d %d %d %d\n",
+               "net %u %u %u %u\n",
                        statp->netcnt,
                        statp->netudpcnt,
                        statp->nettcpcnt,
                        statp->nettcpconn);
        seq_printf(seq,
-               "rpc %d %d %d %d %d\n",
+               "rpc %u %u %u %u %u\n",
                        statp->rpccnt,
                        statp->rpcbadfmt+statp->rpcbadauth+statp->rpcbadclnt,
                        statp->rpcbadfmt,
@@ -99,9 +99,9 @@ void svc_seq_show(struct seq_file *seq, const struct svc_stat *statp) {
        for (i = 0; i < prog->pg_nvers; i++) {
                if (!(vers = prog->pg_vers[i]) || !(proc = vers->vs_proc))
                        continue;
-               seq_printf(seq, "proc%d %d", i, vers->vs_nproc);
+               seq_printf(seq, "proc%d %u", i, vers->vs_nproc);
                for (j = 0; j < vers->vs_nproc; j++, proc++)
-                       seq_printf(seq, " %d", proc->pc_count);
+                       seq_printf(seq, " %u", proc->pc_count);
                seq_putc(seq, '\n');
        }
 }
index 62a0734952766b56ae48e1053dce92f91ecf278c..ed48ff022d3529055c4a508ca86db9379052107d 100644 (file)
@@ -176,8 +176,10 @@ cleanup_sunrpc(void)
 {
        unregister_rpc_pipefs();
        rpc_destroy_mempool();
-       cache_unregister(&auth_domain_cache);
-       cache_unregister(&ip_map_cache);
+       if (cache_unregister(&auth_domain_cache))
+               printk(KERN_ERR "sunrpc: failed to unregister auth_domain cache\n");
+       if (cache_unregister(&ip_map_cache))
+               printk(KERN_ERR "sunrpc: failed to unregister ip_map cache\n");
 #ifdef RPC_DEBUG
        rpc_unregister_sysctl();
 #endif
index bde8147ef2db54dc35ad8dbf77dd43994aae84fa..dda4f0c63511ca74475e9d1259bc73c0db9c47ef 100644 (file)
@@ -143,6 +143,7 @@ static void auth_domain_drop(struct cache_head *item, struct cache_detail *cd)
 
 
 struct cache_detail auth_domain_cache = {
+       .owner          = THIS_MODULE,
        .hash_size      = DN_HASHMAX,
        .hash_table     = auth_domain_table,
        .name           = "auth.domain",
index d6baf6fdf8a97d43f8569d9fef0bc762ebc616b9..cac2e774dd813669d810f464a2263f2c08354a6a 100644 (file)
@@ -242,6 +242,7 @@ static int ip_map_show(struct seq_file *m,
        
 
 struct cache_detail ip_map_cache = {
+       .owner          = THIS_MODULE,
        .hash_size      = IP_HASHMAX,
        .hash_table     = ip_table,
        .name           = "auth.unix.ip",
index 9be41a9f5aff77b319f388917fcd384d67361ed7..d591578bd3b209ab8258a814b30727366e8909d8 100644 (file)
  *
  */
 
+#define _GNU_SOURCE
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
 
-/* maximum token length used. It doesn't pay to increase it a lot, because
- * very long substrings probably don't repeat themselves too often. */
-#define MAX_TOK_SIZE           11
 #define KSYM_NAME_LEN          127
 
-/* we use only a subset of the complete symbol table to gather the token count,
- * to speed up compression, at the expense of a little compression ratio */
-#define WORKING_SET            1024
-
-/* first find the best token only on the list of tokens that would profit more
- * than GOOD_BAD_THRESHOLD. Only if this list is empty go to the "bad" list.
- * Increasing this value will put less tokens on the "good" list, so the search
- * is faster. However, if the good list runs out of tokens, we must painfully
- * search the bad list. */
-#define GOOD_BAD_THRESHOLD     10
-
-/* token hash parameters */
-#define HASH_BITS              18
-#define HASH_TABLE_SIZE                (1 << HASH_BITS)
-#define HASH_MASK              (HASH_TABLE_SIZE - 1)
-#define HASH_BASE_OFFSET       2166136261U
-#define HASH_FOLD(a)           ((a)&(HASH_MASK))
-
-/* flags to mark symbols */
-#define SYM_FLAG_VALID         1
-#define SYM_FLAG_SAMPLED       2
 
 struct sym_entry {
        unsigned long long addr;
-       char type;
-       unsigned char flags;
-       unsigned char len;
+       unsigned int len;
        unsigned char *sym;
 };
 
 
 static struct sym_entry *table;
-static int size, cnt;
+static unsigned int table_size, table_cnt;
 static unsigned long long _stext, _etext, _sinittext, _einittext, _sextratext, _eextratext;
 static int all_symbols = 0;
 static char symbol_prefix_char = '\0';
 
-struct token {
-       unsigned char data[MAX_TOK_SIZE];
-       unsigned char len;
-       /* profit: the number of bytes that could be saved by inserting this
-        * token into the table */
-       int profit;
-       struct token *next;     /* next token on the hash list */
-       struct token *right;    /* next token on the good/bad list */
-       struct token *left;    /* previous token on the good/bad list */
-       struct token *smaller; /* token that is less one letter than this one */
-       };
-
-struct token bad_head, good_head;
-struct token *hash_table[HASH_TABLE_SIZE];
+int token_profit[0x10000];
 
 /* the table that holds the result of the compression */
-unsigned char best_table[256][MAX_TOK_SIZE+1];
+unsigned char best_table[256][2];
 unsigned char best_table_len[256];
 
 
-static void
-usage(void)
+static void usage(void)
 {
        fprintf(stderr, "Usage: kallsyms [--all-symbols] [--symbol-prefix=<prefix char>] < in.map > out.S\n");
        exit(1);
@@ -102,21 +64,19 @@ usage(void)
  * This ignores the intensely annoying "mapping symbols" found
  * in ARM ELF files: $a, $t and $d.
  */
-static inline int
-is_arm_mapping_symbol(const char *str)
+static inline int is_arm_mapping_symbol(const char *str)
 {
        return str[0] == '$' && strchr("atd", str[1])
               && (str[2] == '\0' || str[2] == '.');
 }
 
-static int
-read_symbol(FILE *in, struct sym_entry *s)
+static int read_symbol(FILE *in, struct sym_entry *s)
 {
        char str[500];
-       char *sym;
+       char *sym, stype;
        int rc;
 
-       rc = fscanf(in, "%llx %c %499s\n", &s->addr, &s->type, str);
+       rc = fscanf(in, "%llx %c %499s\n", &s->addr, &stype, str);
        if (rc != 3) {
                if (rc != EOF) {
                        /* skip line */
@@ -143,7 +103,7 @@ read_symbol(FILE *in, struct sym_entry *s)
                _sextratext = s->addr;
        else if (strcmp(sym, "_eextratext") == 0)
                _eextratext = s->addr;
-       else if (toupper(s->type) == 'A')
+       else if (toupper(stype) == 'A')
        {
                /* Keep these useful absolute symbols */
                if (strcmp(sym, "__kernel_syscall_via_break") &&
@@ -153,22 +113,24 @@ read_symbol(FILE *in, struct sym_entry *s)
                        return -1;
 
        }
-       else if (toupper(s->type) == 'U' ||
+       else if (toupper(stype) == 'U' ||
                 is_arm_mapping_symbol(sym))
                return -1;
+       /* exclude also MIPS ELF local symbols ($L123 instead of .L123) */
+       else if (str[0] == '$')
+               return -1;
 
        /* include the type field in the symbol name, so that it gets
         * compressed together */
        s->len = strlen(str) + 1;
-       s->sym = (char *) malloc(s->len + 1);
-       strcpy(s->sym + 1, str);
-       s->sym[0] = s->type;
+       s->sym = malloc(s->len + 1);
+       strcpy((char *)s->sym + 1, str);
+       s->sym[0] = stype;
 
        return 0;
 }
 
-static int
-symbol_valid(struct sym_entry *s)
+static int symbol_valid(struct sym_entry *s)
 {
        /* Symbols which vary between passes.  Passes 1 and 2 must have
         * identical symbol lists.  The kallsyms_* symbols below are only added
@@ -214,30 +176,29 @@ symbol_valid(struct sym_entry *s)
        }
 
        /* Exclude symbols which vary between passes. */
-       if (strstr(s->sym + offset, "_compiled."))
+       if (strstr((char *)s->sym + offset, "_compiled."))
                return 0;
 
        for (i = 0; special_symbols[i]; i++)
-               if( strcmp(s->sym + offset, special_symbols[i]) == 0 )
+               if( strcmp((char *)s->sym + offset, special_symbols[i]) == 0 )
                        return 0;
 
        return 1;
 }
 
-static void
-read_map(FILE *in)
+static void read_map(FILE *in)
 {
        while (!feof(in)) {
-               if (cnt >= size) {
-                       size += 10000;
-                       table = realloc(table, sizeof(*table) * size);
+               if (table_cnt >= table_size) {
+                       table_size += 10000;
+                       table = realloc(table, sizeof(*table) * table_size);
                        if (!table) {
                                fprintf(stderr, "out of memory\n");
                                exit (1);
                        }
                }
-               if (read_symbol(in, &table[cnt]) == 0)
-                       cnt++;
+               if (read_symbol(in, &table[table_cnt]) == 0)
+                       table_cnt++;
        }
 }
 
@@ -281,10 +242,9 @@ static int expand_symbol(unsigned char *data, int len, char *result)
        return total;
 }
 
-static void
-write_src(void)
+static void write_src(void)
 {
-       int i, k, off, valid;
+       unsigned int i, k, off;
        unsigned int best_idx[256];
        unsigned int *markers;
        char buf[KSYM_NAME_LEN+1];
@@ -301,33 +261,24 @@ write_src(void)
        printf(".data\n");
 
        output_label("kallsyms_addresses");
-       valid = 0;
-       for (i = 0; i < cnt; i++) {
-               if (table[i].flags & SYM_FLAG_VALID) {
-                       printf("\tPTR\t%#llx\n", table[i].addr);
-                       valid++;
-               }
+       for (i = 0; i < table_cnt; i++) {
+               printf("\tPTR\t%#llx\n", table[i].addr);
        }
        printf("\n");
 
        output_label("kallsyms_num_syms");
-       printf("\tPTR\t%d\n", valid);
+       printf("\tPTR\t%d\n", table_cnt);
        printf("\n");
 
        /* table of offset markers, that give the offset in the compressed stream
         * every 256 symbols */
-       markers = (unsigned int *) malloc(sizeof(unsigned int)*((valid + 255) / 256));
+       markers = (unsigned int *) malloc(sizeof(unsigned int) * ((table_cnt + 255) / 256));
 
        output_label("kallsyms_names");
-       valid = 0;
        off = 0;
-       for (i = 0; i < cnt; i++) {
-
-               if (!table[i].flags & SYM_FLAG_VALID)
-                       continue;
-
-               if ((valid & 0xFF) == 0)
-                       markers[valid >> 8] = off;
+       for (i = 0; i < table_cnt; i++) {
+               if ((i & 0xFF) == 0)
+                       markers[i >> 8] = off;
 
                printf("\t.byte 0x%02x", table[i].len);
                for (k = 0; k < table[i].len; k++)
@@ -335,12 +286,11 @@ write_src(void)
                printf("\n");
 
                off += table[i].len + 1;
-               valid++;
        }
        printf("\n");
 
        output_label("kallsyms_markers");
-       for (i = 0; i < ((valid + 255) >> 8); i++)
+       for (i = 0; i < ((table_cnt + 255) >> 8); i++)
                printf("\tPTR\t%d\n", markers[i]);
        printf("\n");
 
@@ -350,7 +300,7 @@ write_src(void)
        off = 0;
        for (i = 0; i < 256; i++) {
                best_idx[i] = off;
-               expand_symbol(best_table[i],best_table_len[i],buf);
+               expand_symbol(best_table[i], best_table_len[i], buf);
                printf("\t.asciz\t\"%s\"\n", buf);
                off += strlen(buf) + 1;
        }
@@ -365,153 +315,13 @@ write_src(void)
 
 /* table lookup compression functions */
 
-static inline unsigned int rehash_token(unsigned int hash, unsigned char data)
-{
-       return ((hash * 16777619) ^ data);
-}
-
-static unsigned int hash_token(unsigned char *data, int len)
-{
-       unsigned int hash=HASH_BASE_OFFSET;
-       int i;
-
-       for (i = 0; i < len; i++)
-               hash = rehash_token(hash, data[i]);
-
-       return HASH_FOLD(hash);
-}
-
-/* find a token given its data and hash value */
-static struct token *find_token_hash(unsigned char *data, int len, unsigned int hash)
-{
-       struct token *ptr;
-
-       ptr = hash_table[hash];
-
-       while (ptr) {
-               if ((ptr->len == len) && (memcmp(ptr->data, data, len) == 0))
-                       return ptr;
-               ptr=ptr->next;
-       }
-
-       return NULL;
-}
-
-static inline void insert_token_in_group(struct token *head, struct token *ptr)
-{
-       ptr->right = head->right;
-       ptr->right->left = ptr;
-       head->right = ptr;
-       ptr->left = head;
-}
-
-static inline void remove_token_from_group(struct token *ptr)
-{
-       ptr->left->right = ptr->right;
-       ptr->right->left = ptr->left;
-}
-
-
-/* build the counts for all the tokens that start with "data", and have lenghts
- * from 2 to "len" */
-static void learn_token(unsigned char *data, int len)
-{
-       struct token *ptr,*last_ptr;
-       int i, newprofit;
-       unsigned int hash = HASH_BASE_OFFSET;
-       unsigned int hashes[MAX_TOK_SIZE + 1];
-
-       if (len > MAX_TOK_SIZE)
-               len = MAX_TOK_SIZE;
-
-       /* calculate and store the hash values for all the sub-tokens */
-       hash = rehash_token(hash, data[0]);
-       for (i = 2; i <= len; i++) {
-               hash = rehash_token(hash, data[i-1]);
-               hashes[i] = HASH_FOLD(hash);
-       }
-
-       last_ptr = NULL;
-       ptr = NULL;
-
-       for (i = len; i >= 2; i--) {
-               hash = hashes[i];
-
-               if (!ptr) ptr = find_token_hash(data, i, hash);
-
-               if (!ptr) {
-                       /* create a new token entry */
-                       ptr = (struct token *) malloc(sizeof(*ptr));
-
-                       memcpy(ptr->data, data, i);
-                       ptr->len = i;
-
-                       /* when we create an entry, it's profit is 0 because
-                        * we also take into account the size of the token on
-                        * the compressed table. We then subtract GOOD_BAD_THRESHOLD
-                        * so that the test to see if this token belongs to
-                        * the good or bad list, is a comparison to zero */
-                       ptr->profit = -GOOD_BAD_THRESHOLD;
-
-                       ptr->next = hash_table[hash];
-                       hash_table[hash] = ptr;
-
-                       insert_token_in_group(&bad_head, ptr);
-
-                       ptr->smaller = NULL;
-               } else {
-                       newprofit = ptr->profit + (ptr->len - 1);
-                       /* check to see if this token needs to be moved to a
-                        * different list */
-                       if((ptr->profit < 0) && (newprofit >= 0)) {
-                               remove_token_from_group(ptr);
-                               insert_token_in_group(&good_head,ptr);
-                       }
-                       ptr->profit = newprofit;
-               }
-
-               if (last_ptr) last_ptr->smaller = ptr;
-               last_ptr = ptr;
-
-               ptr = ptr->smaller;
-       }
-}
-
-/* decrease the counts for all the tokens that start with "data", and have lenghts
- * from 2 to "len". This function is much simpler than learn_token because we have
- * more guarantees (tho tokens exist, the ->smaller pointer is set, etc.)
- * The two separate functions exist only because of compression performance */
-static void forget_token(unsigned char *data, int len)
-{
-       struct token *ptr;
-       int i, newprofit;
-       unsigned int hash=0;
-
-       if (len > MAX_TOK_SIZE) len = MAX_TOK_SIZE;
-
-       hash = hash_token(data, len);
-       ptr = find_token_hash(data, len, hash);
-
-       for (i = len; i >= 2; i--) {
-
-               newprofit = ptr->profit - (ptr->len - 1);
-               if ((ptr->profit >= 0) && (newprofit < 0)) {
-                       remove_token_from_group(ptr);
-                       insert_token_in_group(&bad_head, ptr);
-               }
-               ptr->profit=newprofit;
-
-               ptr=ptr->smaller;
-       }
-}
-
 /* count all the possible tokens in a symbol */
 static void learn_symbol(unsigned char *symbol, int len)
 {
        int i;
 
        for (i = 0; i < len - 1; i++)
-               learn_token(symbol + i, len - i);
+               token_profit[ symbol[i] + (symbol[i + 1] << 8) ]++;
 }
 
 /* decrease the count for all the possible tokens in a symbol */
@@ -520,117 +330,90 @@ static void forget_symbol(unsigned char *symbol, int len)
        int i;
 
        for (i = 0; i < len - 1; i++)
-               forget_token(symbol + i, len - i);
+               token_profit[ symbol[i] + (symbol[i + 1] << 8) ]--;
 }
 
-/* set all the symbol flags and do the initial token count */
+/* remove all the invalid symbols from the table and do the initial token count */
 static void build_initial_tok_table(void)
 {
-       int i, use_it, valid;
+       unsigned int i, pos;
 
-       valid = 0;
-       for (i = 0; i < cnt; i++) {
-               table[i].flags = 0;
+       pos = 0;
+       for (i = 0; i < table_cnt; i++) {
                if ( symbol_valid(&table[i]) ) {
-                       table[i].flags |= SYM_FLAG_VALID;
-                       valid++;
+                       if (pos != i)
+                               table[pos] = table[i];
+                       learn_symbol(table[pos].sym, table[pos].len);
+                       pos++;
                }
        }
-
-       use_it = 0;
-       for (i = 0; i < cnt; i++) {
-
-               /* subsample the available symbols. This method is almost like
-                * a Bresenham's algorithm to get uniformly distributed samples
-                * across the symbol table */
-               if (table[i].flags & SYM_FLAG_VALID) {
-
-                       use_it += WORKING_SET;
-
-                       if (use_it >= valid) {
-                               table[i].flags |= SYM_FLAG_SAMPLED;
-                               use_it -= valid;
-                       }
-               }
-               if (table[i].flags & SYM_FLAG_SAMPLED)
-                       learn_symbol(table[i].sym, table[i].len);
-       }
+       table_cnt = pos;
 }
 
 /* replace a given token in all the valid symbols. Use the sampled symbols
  * to update the counts */
-static void compress_symbols(unsigned char *str, int tlen, int idx)
+static void compress_symbols(unsigned char *str, int idx)
 {
-       int i, len, learn, size;
-       unsigned char *p;
+       unsigned int i, len, size;
+       unsigned char *p1, *p2;
 
-       for (i = 0; i < cnt; i++) {
-
-               if (!(table[i].flags & SYM_FLAG_VALID)) continue;
+       for (i = 0; i < table_cnt; i++) {
 
                len = table[i].len;
-               learn = 0;
-               p = table[i].sym;
+               p1 = table[i].sym;
+
+               /* find the token on the symbol */
+               p2 = memmem(p1, len, str, 2);
+               if (!p2) continue;
+
+               /* decrease the counts for this symbol's tokens */
+               forget_symbol(table[i].sym, len);
+
+               size = len;
 
                do {
+                       *p2 = idx;
+                       p2++;
+                       size -= (p2 - p1);
+                       memmove(p2, p2 + 1, size);
+                       p1 = p2;
+                       len--;
+
+                       if (size < 2) break;
+
                        /* find the token on the symbol */
-                       p = (unsigned char *) strstr((char *) p, (char *) str);
-                       if (!p) break;
-
-                       if (!learn) {
-                               /* if this symbol was used to count, decrease it */
-                               if (table[i].flags & SYM_FLAG_SAMPLED)
-                                       forget_symbol(table[i].sym, len);
-                               learn = 1;
-                       }
+                       p2 = memmem(p1, size, str, 2);
 
-                       *p = idx;
-                       size = (len - (p - table[i].sym)) - tlen + 1;
-                       memmove(p + 1, p + tlen, size);
-                       p++;
-                       len -= tlen - 1;
+               } while (p2);
 
-               } while (size >= tlen);
+               table[i].len = len;
 
-               if(learn) {
-                       table[i].len = len;
-                       /* if this symbol was used to count, learn it again */
-                       if(table[i].flags & SYM_FLAG_SAMPLED)
-                               learn_symbol(table[i].sym, len);
-               }
+               /* increase the counts for this symbol's new tokens */
+               learn_symbol(table[i].sym, len);
        }
 }
 
 /* search the token with the maximum profit */
-static struct token *find_best_token(void)
+static int find_best_token(void)
 {
-       struct token *ptr,*best,*head;
-       int bestprofit;
+       int i, best, bestprofit;
 
        bestprofit=-10000;
+       best = 0;
 
-       /* failsafe: if the "good" list is empty search from the "bad" list */
-       if(good_head.right == &good_head) head = &bad_head;
-       else head = &good_head;
-
-       ptr = head->right;
-       best = NULL;
-       while (ptr != head) {
-               if (ptr->profit > bestprofit) {
-                       bestprofit = ptr->profit;
-                       best = ptr;
+       for (i = 0; i < 0x10000; i++) {
+               if (token_profit[i] > bestprofit) {
+                       best = i;
+                       bestprofit = token_profit[i];
                }
-               ptr = ptr->right;
        }
-
        return best;
 }
 
 /* this is the core of the algorithm: calculate the "best" table */
 static void optimize_result(void)
 {
-       struct token *best;
-       int i;
+       int i, best;
 
        /* using the '\0' symbol last allows compress_symbols to use standard
         * fast string functions */
@@ -644,14 +427,12 @@ static void optimize_result(void)
                        best = find_best_token();
 
                        /* place it in the "best" table */
-                       best_table_len[i] = best->len;
-                       memcpy(best_table[i], best->data, best_table_len[i]);
-                       /* zero terminate the token so that we can use strstr
-                          in compress_symbols */
-                       best_table[i][best_table_len[i]]='\0';
+                       best_table_len[i] = 2;
+                       best_table[i][0] = best & 0xFF;
+                       best_table[i][1] = (best >> 8) & 0xFF;
 
                        /* replace this token in all the valid symbols */
-                       compress_symbols(best_table[i], best_table_len[i], i);
+                       compress_symbols(best_table[i], i);
                }
        }
 }
@@ -659,39 +440,28 @@ static void optimize_result(void)
 /* start by placing the symbols that are actually used on the table */
 static void insert_real_symbols_in_table(void)
 {
-       int i, j, c;
+       unsigned int i, j, c;
 
        memset(best_table, 0, sizeof(best_table));
        memset(best_table_len, 0, sizeof(best_table_len));
 
-       for (i = 0; i < cnt; i++) {
-               if (table[i].flags & SYM_FLAG_VALID) {
-                       for (j = 0; j < table[i].len; j++) {
-                               c = table[i].sym[j];
-                               best_table[c][0]=c;
-                               best_table_len[c]=1;
-                       }
+       for (i = 0; i < table_cnt; i++) {
+               for (j = 0; j < table[i].len; j++) {
+                       c = table[i].sym[j];
+                       best_table[c][0]=c;
+                       best_table_len[c]=1;
                }
        }
 }
 
 static void optimize_token_table(void)
 {
-       memset(hash_table, 0, sizeof(hash_table));
-
-       good_head.left = &good_head;
-       good_head.right = &good_head;
-
-       bad_head.left = &bad_head;
-       bad_head.right = &bad_head;
-
        build_initial_tok_table();
 
        insert_real_symbols_in_table();
 
        /* When valid symbol is not registered, exit to error */
-       if (good_head.left == good_head.right &&
-           bad_head.left == bad_head.right) {
+       if (!table_cnt) {
                fprintf(stderr, "No valid symbol.\n");
                exit(1);
        }
@@ -700,8 +470,7 @@ static void optimize_token_table(void)
 }
 
 
-int
-main(int argc, char **argv)
+int main(int argc, char **argv)
 {
        if (argc >= 2) {
                int i;
index a28c279c49dd043b86aa976ce58bd01261d86410..beb43ef7f761fffaaa80393129e554922f92b544 100755 (executable)
@@ -25,9 +25,11 @@ ld -v | awk -F\) '{print $1}' | awk \
 '/BFD/{print "binutils              ",$NF} \
 /^GNU/{print "binutils              ",$4}'
 
-fdformat --version | awk -F\- '{print "util-linux            ", $NF}'
+echo -n "util-linux             "
+fdformat --version | awk '{print $NF}' | sed -e s/^util-linux-// -e s/\)$//
 
-mount --version | awk -F\- '{print "mount                 ", $NF}'
+echo -n "mount                  "
+mount --version | awk '{print $NF}' | sed -e s/^mount-// -e s/\)$//
 
 depmod -V  2>&1 | awk 'NR==1 {print "module-init-tools     ",$NF}'
 
index 103f136926d9bea7d754d9358a99662787764755..4ef6dd00c6eeafb9916378ad7098b642a309a0cc 100644 (file)
@@ -2,12 +2,14 @@
 # Makefile for ALSA
 #
 
-snd-sa11xx-uda1341-objs := sa11xx-uda1341.o
-snd-aaci-objs                  := aaci.o devdma.o
-snd-pxa2xx-pcm-objs := pxa2xx-pcm.o
-snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
-
 obj-$(CONFIG_SND_SA11XX_UDA1341) += snd-sa11xx-uda1341.o 
+snd-sa11xx-uda1341-objs                := sa11xx-uda1341.o
+
 obj-$(CONFIG_SND_ARMAACI)      += snd-aaci.o
-obj-$(CONFIG_SND_PXA2XX_PCM) += snd-pxa2xx-pcm.o
-obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
+snd-aaci-objs                  := aaci.o devdma.o
+
+obj-$(CONFIG_SND_PXA2XX_PCM)   += snd-pxa2xx-pcm.o
+snd-pxa2xx-pcm-objs            := pxa2xx-pcm.o
+
+obj-$(CONFIG_SND_PXA2XX_AC97)  += snd-pxa2xx-ac97.o
+snd-pxa2xx-ac97-objs           := pxa2xx-ac97.o
index 08cc3ddca96fb385d1a23db07b32ae3a5fe9fc2b..98877030d579fa6f641dee8dca596241940f32e6 100644 (file)
@@ -821,7 +821,7 @@ static int __devinit aaci_init_pcm(struct aaci *aaci)
 
 static unsigned int __devinit aaci_size_fifo(struct aaci *aaci)
 {
-       void *base = aaci->base + AACI_CSCH1;
+       void __iomem *base = aaci->base + AACI_CSCH1;
        int i;
 
        writel(TXCR_FEN | TXCR_TSZ16 | TXCR_TXEN, base + AACI_TXCR);
@@ -877,7 +877,7 @@ static int __devinit aaci_probe(struct amba_device *dev, void *id)
        aaci->playback.fifo = aaci->base + AACI_DR1;
 
        for (i = 0; i < 4; i++) {
-               void *base = aaci->base + i * 0x14;
+               void __iomem *base = aaci->base + i * 0x14;
 
                writel(0, base + AACI_IE);
                writel(0, base + AACI_TXCR);
index d752e64268940efe5dba7d192b4953bc8716a048..b2f969bc7845e66b903c48f07e16c21fbc214629 100644 (file)
 
 
 struct aaci_runtime {
-       void                    *base;
-       void                    *fifo;
+       void                    __iomem *base;
+       void                    __iomem *fifo;
 
        struct ac97_pcm         *pcm;
        int                     pcm_open;
@@ -223,7 +223,7 @@ struct aaci_runtime {
 struct aaci {
        struct amba_device      *dev;
        snd_card_t              *card;
-       void                    *base;
+       void                    __iomem *base;
        unsigned int            fifosize;
 
        /* AC'97 */
index 1622893d00a228df4f1f46f17d4af8f875b82c25..291b4769bde38f2bf2775958ce94f200e62f9732 100644 (file)
@@ -116,15 +116,21 @@ void *snd_hidden_kmalloc(size_t size, unsigned int __nocast flags)
        return _snd_kmalloc(size, flags);
 }
 
+void *snd_hidden_kzalloc(size_t size, unsigned int __nocast flags)
+{
+       void *ret = _snd_kmalloc(size, flags);
+       if (ret)
+               memset(ret, 0, size);
+       return ret;
+}
+EXPORT_SYMBOL(snd_hidden_kzalloc);
+
 void *snd_hidden_kcalloc(size_t n, size_t size, unsigned int __nocast flags)
 {
        void *ret = NULL;
        if (n != 0 && size > INT_MAX / n)
                return ret;
-       ret = _snd_kmalloc(n * size, flags);
-       if (ret)
-               memset(ret, 0, n * size);
-       return ret;
+       return snd_hidden_kzalloc(n * size, flags);
 }
 
 void snd_hidden_kfree(const void *obj)
index be4ea60a367924b0808651f5a542aa0021940804..5c3948311528efdca7817e63e8e3fea96c8b8460 100644 (file)
@@ -15,7 +15,8 @@ config SND_CS4231_LIB
 
 config SND_AD1816A
        tristate "Analog Devices SoundPort AD1816A"
-       depends on SND && ISAPNP
+       depends on SND && PNP && ISA
+       select ISAPNP
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_PCM
@@ -80,7 +81,8 @@ config SND_CS4236
 
 config SND_ES968
        tristate "Generic ESS ES968 driver"
-       depends on SND && ISAPNP
+       depends on SND && PNP && ISA
+       select ISAPNP
        select SND_MPU401_UART
        select SND_PCM
        help
@@ -160,7 +162,7 @@ config SND_GUSMAX
 
 config SND_INTERWAVE
        tristate "AMD InterWave, Gravis UltraSound PnP"
-       depends on SND
+       depends on SND && PNP && ISA
        select SND_RAWMIDI
        select SND_CS4231_LIB
        select SND_GUS_SYNTH
@@ -175,7 +177,7 @@ config SND_INTERWAVE
 
 config SND_INTERWAVE_STB
        tristate "AMD InterWave + TEA6330T (UltraSound 32-Pro)"
-       depends on SND
+       depends on SND && PNP && ISA
        select SND_RAWMIDI
        select SND_CS4231_LIB
        select SND_GUS_SYNTH
@@ -291,7 +293,8 @@ config SND_WAVEFRONT
 
 config SND_ALS100
        tristate "Avance Logic ALS100/ALS120"
-       depends on SND && ISAPNP
+       depends on SND && PNP && ISA
+       select ISAPNP
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_PCM
@@ -304,7 +307,8 @@ config SND_ALS100
 
 config SND_AZT2320
        tristate "Aztech Systems AZT2320"
-       depends on SND && ISAPNP
+       depends on SND && PNP && ISA
+       select ISAPNP
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_CS4231_LIB
@@ -328,7 +332,8 @@ config SND_CMI8330
 
 config SND_DT019X
        tristate "Diamond Technologies DT-019X, Avance Logic ALS-007"
-       depends on SND && ISAPNP
+       depends on SND && PNP && ISA
+       select ISAPNP
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_PCM
index d6b96297835ca8b2ab284d4a1920c59848177f15..80dce329cc3a65d8d0a9fcef8793370c415a2687 100644 (file)
@@ -19,9 +19,6 @@
 #include <linux/ioport.h>
 #include <asm/page.h>
 #include <asm/system.h>
-#ifdef __alpha__
-#include <asm/segment.h>
-#endif
 #include <linux/vmalloc.h>
 #include <asm/uaccess.h>
 #include <linux/poll.h>
index ce6c9fadb5948b57c185dbf44d91e783bb969de0..4943299cf137dce8ab4bcb369ad9813ad0660173 100644 (file)
@@ -2249,7 +2249,7 @@ static int __devinit snd_ali_create(snd_card_t * card,
                return -ENXIO;
        }
 
-       if ((codec = kcalloc(1, sizeof(*codec), GFP_KERNEL)) == NULL) {
+       if ((codec = kzalloc(sizeof(*codec), GFP_KERNEL)) == NULL) {
                pci_disable_device(pci);
                return -ENOMEM;
        }